Add support for parsing ESSL3 invariant qualifiers

The parser recognizes ESSL3 invariant variable declaration syntax and
marks the variables as invariant.

In ESSL3, invariant out variables can be linked to non-invariant
in variables, so linking checks should now be different depending on
shading language version. A shading language version dependent varying
matching check is added to the translator API to facilitate this.

Tested by deqp/data/gles3/shaders/qualification_order.html after patching
Chrome to use the new linking check API.

A previous revision of this change that broke API compatibility was
reverted since it broke Chromium FYI bots. This revision keeps deprecated
API functionality around for now so that changes can be rolled
step-by-step to Chromium without breakage.

TEST=WebGL 2 conformance tests, angle_unittests
BUG=angleproject:987

Change-Id: Iecb64e3afd23e267ba999bc17f44390affcdfc13
Reviewed-on: https://chromium-review.googlesource.com/269940
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/ParseContext.cpp b/src/compiler/translator/ParseContext.cpp
index aa347db..89ae6ff 100644
--- a/src/compiler/translator/ParseContext.cpp
+++ b/src/compiler/translator/ParseContext.cpp
@@ -12,6 +12,7 @@
 #include "compiler/preprocessor/SourceLocation.h"
 #include "compiler/translator/glslang.h"
 #include "compiler/translator/ValidateSwitch.h"
+#include "compiler/translator/util.h"
 
 ///////////////////////////////////////////////////////////////////////
 //
@@ -969,6 +970,15 @@
     return false;
 }
 
+void TParseContext::es3InvariantErrorCheck(const TQualifier qualifier, const TSourceLoc &invariantLocation)
+{
+    if (!sh::IsVaryingOut(qualifier) && qualifier != EvqFragmentOut)
+    {
+        error(invariantLocation, "Only out variables can be invariant.", "invariant");
+        recover();
+    }
+}
+
 bool TParseContext::supportsExtension(const char* extension)
 {
     const TExtensionBehavior& extbehavior = extensionBehavior();
diff --git a/src/compiler/translator/ParseContext.h b/src/compiler/translator/ParseContext.h
index 6952a08..e08e50a 100644
--- a/src/compiler/translator/ParseContext.h
+++ b/src/compiler/translator/ParseContext.h
@@ -110,6 +110,7 @@
     bool singleDeclarationErrorCheck(TPublicType &publicType, const TSourceLoc &identifierLocation);
     bool layoutLocationErrorCheck(const TSourceLoc& location, const TLayoutQualifier &layoutQualifier);
     bool functionCallLValueErrorCheck(const TFunction *fnCandidate, TIntermAggregate *);
+    void es3InvariantErrorCheck(const TQualifier qualifier, const TSourceLoc &invariantLocation);
 
     const TPragma& pragma() const { return directiveHandler.pragma(); }
     const TExtensionBehavior& extensionBehavior() const { return directiveHandler.extensionBehavior(); }
diff --git a/src/compiler/translator/ShaderVars.cpp b/src/compiler/translator/ShaderVars.cpp
index 590655f..a3fe633 100644
--- a/src/compiler/translator/ShaderVars.cpp
+++ b/src/compiler/translator/ShaderVars.cpp
@@ -305,9 +305,14 @@
 
 bool Varying::isSameVaryingAtLinkTime(const Varying &other) const
 {
+    return isSameVaryingAtLinkTime(other, 100);
+}
+
+bool Varying::isSameVaryingAtLinkTime(const Varying &other, int shaderVersion) const
+{
     return (ShaderVariable::isSameVariableAtLinkTime(other, false) &&
             interpolation == other.interpolation &&
-            isInvariant == other.isInvariant);
+            (shaderVersion >= 300 || isInvariant == other.isInvariant));
 }
 
 InterfaceBlock::InterfaceBlock()
diff --git a/src/compiler/translator/glslang.y b/src/compiler/translator/glslang.y
index 298cf56..fef2e08 100644
--- a/src/compiler/translator/glslang.y
+++ b/src/compiler/translator/glslang.y
@@ -1012,6 +1012,16 @@
         $$.setBasic(EbtVoid, $2.qualifier, @2);
         $$.layoutQualifier = $1;
     }
+    | INVARIANT storage_qualifier {
+        context->es3InvariantErrorCheck($2.qualifier, @1);
+        $$.setBasic(EbtVoid, $2.qualifier, @2);
+        $$.invariant = true;
+    }
+    | INVARIANT interpolation_qualifier storage_qualifier {
+        context->es3InvariantErrorCheck($3.qualifier, @1);
+        $$ = context->joinInterpolationQualifiers(@2, $2.qualifier, @3, $3.qualifier);
+        $$.invariant = true;
+    }
     ;
 
 storage_qualifier
diff --git a/src/compiler/translator/glslang_tab.cpp b/src/compiler/translator/glslang_tab.cpp
index 52d8409..75f5644 100644
--- a/src/compiler/translator/glslang_tab.cpp
+++ b/src/compiler/translator/glslang_tab.cpp
@@ -623,18 +623,18 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  114
+#define YYFINAL  116
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2523
+#define YYLAST   2516
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  128
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  94
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  273
+#define YYNRULES  275
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  414
+#define YYNSTATES  417
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
@@ -706,21 +706,21 @@
      760,   781,   791,   819,   824,   834,   839,   849,   852,   855,
      858,   864,   871,   874,   878,   882,   887,   892,   899,   903,
      907,   911,   916,   921,   925,   932,   942,   948,   951,   957,
-     963,   970,   979,   989,   997,  1000,  1007,  1011,  1018,  1021,
-    1025,  1029,  1038,  1047,  1055,  1065,  1077,  1080,  1083,  1089,
-    1096,  1099,  1105,  1108,  1111,  1117,  1120,  1125,  1140,  1144,
-    1148,  1152,  1156,  1160,  1165,  1170,  1175,  1180,  1185,  1190,
+     963,   970,   979,   989,   997,  1000,  1007,  1011,  1015,  1020,
+    1028,  1031,  1035,  1039,  1048,  1057,  1065,  1075,  1087,  1090,
+    1093,  1099,  1106,  1109,  1115,  1118,  1121,  1127,  1130,  1135,
+    1150,  1154,  1158,  1162,  1166,  1170,  1175,  1180,  1185,  1190,
     1195,  1200,  1205,  1210,  1215,  1220,  1225,  1230,  1235,  1240,
-    1245,  1250,  1255,  1260,  1265,  1269,  1273,  1277,  1281,  1285,
-    1289,  1293,  1297,  1301,  1305,  1309,  1313,  1317,  1321,  1325,
-    1333,  1341,  1345,  1358,  1358,  1361,  1361,  1367,  1370,  1386,
-    1389,  1398,  1402,  1408,  1415,  1430,  1434,  1438,  1439,  1445,
-    1446,  1447,  1448,  1449,  1450,  1451,  1455,  1456,  1456,  1456,
-    1466,  1467,  1471,  1471,  1472,  1472,  1477,  1480,  1490,  1493,
-    1499,  1500,  1504,  1512,  1516,  1523,  1523,  1530,  1533,  1540,
-    1545,  1560,  1560,  1565,  1565,  1572,  1572,  1580,  1583,  1589,
-    1592,  1598,  1602,  1609,  1612,  1615,  1618,  1621,  1630,  1634,
-    1641,  1644,  1650,  1650
+    1245,  1250,  1255,  1260,  1265,  1270,  1275,  1279,  1283,  1287,
+    1291,  1295,  1299,  1303,  1307,  1311,  1315,  1319,  1323,  1327,
+    1331,  1335,  1343,  1351,  1355,  1368,  1368,  1371,  1371,  1377,
+    1380,  1396,  1399,  1408,  1412,  1418,  1425,  1440,  1444,  1448,
+    1449,  1455,  1456,  1457,  1458,  1459,  1460,  1461,  1465,  1466,
+    1466,  1466,  1476,  1477,  1481,  1481,  1482,  1482,  1487,  1490,
+    1500,  1503,  1509,  1510,  1514,  1522,  1526,  1533,  1533,  1540,
+    1543,  1550,  1555,  1570,  1570,  1575,  1575,  1582,  1582,  1590,
+    1593,  1599,  1602,  1608,  1612,  1619,  1622,  1625,  1628,  1631,
+    1640,  1644,  1651,  1654,  1660,  1660
 };
 #endif
 
@@ -809,12 +809,12 @@
 };
 # endif
 
-#define YYPACT_NINF -347
+#define YYPACT_NINF -361
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-347)))
+  (!!((Yystate) == (-361)))
 
-#define YYTABLE_NINF -233
+#define YYTABLE_NINF -235
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -823,48 +823,48 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    2161,    -4,  -347,  -347,  -347,   142,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,  -347,  -347,    -3,  -347,  -347,
-     -58,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,   -57,
-    -347,  -347,   -38,   -63,   -55,     3,   -50,  -347,    84,    11,
-    1180,  -347,  -347,  2446,    11,  -347,   -40,  -347,  2086,  -347,
-    -347,  -347,  -347,  2446,  -347,  -347,  -347,  -347,  -347,   -23,
-      31,  -347,    35,  -347,    78,  -347,  -347,  -347,  -347,  -347,
-    2310,   132,   106,  -347,     7,   -27,  -347,    60,  -347,  2236,
-    -347,  -347,  -347,  1250,  -347,  -347,   -33,  2236,  -347,    17,
-     -72,  -347,   408,  -347,  -347,  -347,  -347,   106,  2310,   -24,
-    -347,  1348,  1639,  -347,    79,  2310,   106,  1831,  -347,    71,
-    -347,  -347,  -347,  -347,  -347,  1639,  1639,  1639,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,    19,  -347,  -347,  -347,    73,
-     -21,  1734,    89,  -347,  1639,    66,    72,   108,   -64,    50,
-      81,    74,    87,   114,   123,   -62,  -347,   110,  -347,  -347,
-    1916,  2236,   116,  -347,    31,   104,   105,  -347,   117,   118,
-     109,  1446,   120,  1639,   113,   122,   111,  -347,  -347,    56,
-    -347,  -347,   -13,  -347,   -38,   125,  -347,  -347,  -347,  -347,
-     524,  -347,  -347,  -347,  -347,  -347,  -347,   124,  -347,  -347,
-    1541,  1639,   119,   127,  -347,  -347,   106,   129,    -8,  -347,
-     -66,  -347,  -347,  -347,    -9,  -347,  -347,  1639,  2378,  -347,
-    -347,  1639,   131,  -347,  -347,  -347,  1639,  1639,  1639,  1639,
-    1639,  1639,  1639,  1639,  1639,  1639,  1639,  1639,  1639,  1639,
-    1639,  1639,  1639,  1639,  1639,  1639,  -347,  -347,  2001,  -347,
-    -347,  -347,  -347,  -347,   133,  -347,  1639,  -347,  -347,    20,
-    1639,   128,  -347,  -347,  -347,   640,  -347,  -347,  -347,  -347,
-    -347,  -347,  -347,  -347,  -347,  -347,  -347,  1639,  1639,  -347,
-    -347,  -347,  1639,   126,   135,  -347,  1639,   130,    22,  1639,
-     106,  -347,   -78,  -347,  -347,   138,   136,  -347,   145,  -347,
-    -347,  -347,  -347,  -347,    66,    66,    72,    72,   108,   108,
-     108,   108,   -64,   -64,    50,    81,    74,    87,   114,   123,
-      86,  -347,   190,    35,   872,   988,     5,  -347,    10,  -347,
-    1085,   640,  -347,  -347,   143,  1639,   139,  -347,  1639,  -347,
-     144,  -347,  1639,  -347,  -347,  1639,   149,  -347,  -347,  -347,
-    -347,  1085,   133,  -347,   136,   106,  2310,   152,   150,  -347,
-    -347,  1639,  -347,  -347,   151,  -347,  1639,  -347,   146,   157,
-     246,  -347,   156,   154,   756,  -347,  -347,   155,    21,  1639,
-     756,   133,  -347,  1639,  -347,  -347,  -347,  -347,   158,   136,
-    -347,  -347,  -347,  -347
+    2154,   224,  -361,  -361,  -361,   130,  -361,  -361,  -361,  -361,
+    -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,
+    -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,
+    -361,  -361,  -361,  -361,  -361,  -361,  -361,   145,  -361,  -361,
+     -46,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,
+    -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,   -82,
+    -361,  -361,   -68,   -41,   -45,     9,     7,  -361,   117,    16,
+    1173,  -361,  -361,  2439,    16,  -361,    -9,  -361,  2079,  -361,
+    -361,  -361,  -361,    16,  -361,  2439,  -361,  -361,  -361,  -361,
+    -361,   -31,    23,  -361,    11,  -361,    63,  -361,  -361,  -361,
+    -361,  -361,  2303,   168,   120,  -361,    13,   -66,  -361,    31,
+    -361,  2229,  -361,  -361,  -361,  1243,  -361,  -361,  -361,    56,
+    2229,  -361,    17,   -50,  -361,   401,  -361,  -361,  -361,  -361,
+     120,  2303,   -18,  -361,  1341,  1632,  -361,   179,  2303,   120,
+    1824,  -361,    70,  -361,  -361,  -361,  -361,  -361,  1632,  1632,
+    1632,  -361,  -361,  -361,  -361,  -361,  -361,  -361,    22,  -361,
+    -361,  -361,   101,   -29,  1727,   114,  -361,  1632,    96,   -97,
+     128,   -54,   111,   118,   102,   115,   154,   153,   -69,  -361,
+     140,  -361,  -361,  1909,  2229,   124,  -361,    23,   134,   136,
+    -361,   147,   149,   143,  1439,   155,  1632,   148,   157,   160,
+    -361,  -361,   184,  -361,  -361,    52,  -361,   -68,   158,  -361,
+    -361,  -361,  -361,   517,  -361,  -361,  -361,  -361,  -361,  -361,
+     166,  -361,  -361,  1534,  1632,   150,   159,  -361,  -361,   120,
+     167,    61,  -361,   -62,  -361,  -361,  -361,    -5,  -361,  -361,
+    1632,  2371,  -361,  -361,  1632,   185,  -361,  -361,  -361,  1632,
+    1632,  1632,  1632,  1632,  1632,  1632,  1632,  1632,  1632,  1632,
+    1632,  1632,  1632,  1632,  1632,  1632,  1632,  1632,  1632,  -361,
+    -361,  1994,  -361,  -361,  -361,  -361,  -361,   181,  -361,  1632,
+    -361,  -361,    67,  1632,   180,  -361,  -361,  -361,   633,  -361,
+    -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,
+    1632,  1632,  -361,  -361,  -361,  1632,   178,   186,  -361,  1632,
+     182,    68,  1632,   120,  -361,   -71,  -361,  -361,   187,   188,
+    -361,   192,  -361,  -361,  -361,  -361,  -361,    96,    96,   -97,
+     -97,   128,   128,   128,   128,   -54,   -54,   111,   118,   102,
+     115,   154,   153,   113,  -361,   242,    11,   865,   981,     4,
+    -361,    18,  -361,  1078,   633,  -361,  -361,   194,  1632,   189,
+    -361,  1632,  -361,   196,  -361,  1632,  -361,  -361,  1632,   200,
+    -361,  -361,  -361,  -361,  1078,   181,  -361,   188,   120,  2303,
+     201,   198,  -361,  -361,  1632,  -361,  -361,   202,  -361,  1632,
+    -361,   191,   203,   293,  -361,   204,   205,   749,  -361,  -361,
+     197,    60,  1632,   749,   181,  -361,  1632,  -361,  -361,  -361,
+    -361,   199,   188,  -361,  -361,  -361,  -361
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -872,78 +872,78 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     0,   146,   147,   148,     0,   130,   138,   162,   159,
-     160,   161,   166,   167,   168,   169,   170,   171,   163,   164,
-     165,   172,   173,   174,   175,   176,   177,   139,   140,   143,
-     131,   178,   179,   180,   181,   182,   183,     0,   128,   127,
-       0,   158,   184,   186,   199,   200,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   185,   196,   197,   198,     0,
-     202,   271,   272,     0,    97,   107,     0,   112,   118,   135,
-       0,   133,   125,     0,   136,   144,   155,   201,     0,   268,
-     270,   132,   124,     0,   141,   142,     2,     3,   205,     0,
-       0,    88,     0,    95,   107,   129,   108,   109,   110,    98,
-       0,   107,     0,    89,     2,   119,   134,     0,    94,     0,
-     126,   145,   137,     0,     1,   269,     0,     0,   203,   152,
-       0,   150,     0,   273,    99,   104,   106,   111,     0,   113,
-     100,     0,     0,    87,     0,     0,     0,     0,   207,     4,
-       8,     6,     7,     9,    30,     0,     0,     0,   156,    37,
-      36,    38,    35,     5,    11,    31,    13,    18,    19,     0,
-       0,    24,     0,    39,     0,    43,    46,    49,    54,    57,
-      59,    61,    63,    65,    67,    69,    86,     0,    28,    90,
-       0,     0,     0,   149,     0,     0,     0,   253,     0,     0,
-       0,     0,     0,     0,     0,     0,   227,   236,   240,    39,
-      71,    84,     0,   216,     0,   144,   219,   238,   218,   217,
-       0,   220,   221,   222,   223,   224,   225,   101,   103,   105,
-       0,     0,     0,     0,   215,   123,     0,   213,     0,   211,
-       0,   208,    32,    33,     0,    15,    16,     0,     0,    22,
-      21,     0,   158,    25,    27,    34,     0,     0,     0,     0,
+       0,     0,   148,   149,   150,     0,   130,   140,   164,   161,
+     162,   163,   168,   169,   170,   171,   172,   173,   165,   166,
+     167,   174,   175,   176,   177,   178,   179,   141,   142,   145,
+     131,   180,   181,   182,   183,   184,   185,     0,   128,   127,
+       0,   160,   186,   188,   201,   202,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   187,   198,   199,   200,     0,
+     204,   273,   274,     0,    97,   107,     0,   112,   118,   135,
+       0,   133,   125,     0,   136,   146,   157,   203,     0,   270,
+     272,   132,   124,     0,   138,     0,   143,   144,     2,     3,
+     207,     0,     0,    88,     0,    95,   107,   129,   108,   109,
+     110,    98,     0,   107,     0,    89,     2,   119,   134,     0,
+      94,     0,   126,   147,   137,     0,     1,   271,   139,     0,
+       0,   205,   154,     0,   152,     0,   275,    99,   104,   106,
+     111,     0,   113,   100,     0,     0,    87,     0,     0,     0,
+       0,   209,     4,     8,     6,     7,     9,    30,     0,     0,
+       0,   158,    37,    36,    38,    35,     5,    11,    31,    13,
+      18,    19,     0,     0,    24,     0,    39,     0,    43,    46,
+      49,    54,    57,    59,    61,    63,    65,    67,    69,    86,
+       0,    28,    90,     0,     0,     0,   151,     0,     0,     0,
+     255,     0,     0,     0,     0,     0,     0,     0,     0,   229,
+     238,   242,    39,    71,    84,     0,   218,     0,   146,   221,
+     240,   220,   219,     0,   222,   223,   224,   225,   226,   227,
+     101,   103,   105,     0,     0,     0,     0,   217,   123,     0,
+     215,     0,   213,     0,   210,    32,    33,     0,    15,    16,
+       0,     0,    22,    21,     0,   160,    25,    27,    34,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   157,   206,     0,   153,
-     154,   151,   264,   263,   234,   255,     0,   267,   265,     0,
-       0,     0,   248,   251,   226,     0,    74,    75,    77,    76,
-      79,    80,    81,    82,    83,    78,    73,     0,     0,   241,
-     237,   239,     0,     0,     0,   117,     0,   120,     0,     0,
-       0,   209,     0,    91,    10,     0,    17,    29,    14,    20,
-      26,    40,    41,    42,    45,    44,    47,    48,    52,    53,
-      50,    51,    55,    56,    58,    60,    62,    64,    66,    68,
-       0,   204,     0,     0,     0,     0,     0,   266,     0,   247,
-       0,   228,    72,    85,     0,     0,   114,   121,     0,   210,
-       0,   212,     0,    92,    12,     0,     0,   233,   235,   258,
-     257,   260,   234,   245,   249,     0,     0,     0,     0,   102,
-     115,     0,   122,   214,     0,    70,     0,   259,     0,     0,
-     244,   242,     0,     0,     0,   229,   116,     0,     0,   261,
-       0,   234,   246,     0,   231,   252,   230,    93,     0,   262,
-     256,   243,   250,   254
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   159,
+     208,     0,   155,   156,   153,   266,   265,   236,   257,     0,
+     269,   267,     0,     0,     0,   250,   253,   228,     0,    74,
+      75,    77,    76,    79,    80,    81,    82,    83,    78,    73,
+       0,     0,   243,   239,   241,     0,     0,     0,   117,     0,
+     120,     0,     0,     0,   211,     0,    91,    10,     0,    17,
+      29,    14,    20,    26,    40,    41,    42,    45,    44,    47,
+      48,    52,    53,    50,    51,    55,    56,    58,    60,    62,
+      64,    66,    68,     0,   206,     0,     0,     0,     0,     0,
+     268,     0,   249,     0,   230,    72,    85,     0,     0,   114,
+     121,     0,   212,     0,   214,     0,    92,    12,     0,     0,
+     235,   237,   260,   259,   262,   236,   247,   251,     0,     0,
+       0,     0,   102,   115,     0,   122,   216,     0,    70,     0,
+     261,     0,     0,   246,   244,     0,     0,     0,   231,   116,
+       0,     0,   263,     0,   236,   248,     0,   233,   254,   232,
+      93,     0,   264,   258,   245,   252,   256
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -347,   -39,  -347,  -347,  -347,  -347,  -347,  -347,    32,  -347,
-    -347,  -347,  -347,    63,  -347,   -48,   -37,   -90,   -54,    12,
-      14,    16,    18,    23,     9,  -347,   -96,  -127,  -347,  -138,
-    -125,  -347,    13,    15,  -347,  -347,  -347,   147,   184,   178,
-     153,  -347,  -347,  -325,  -347,  -347,  -106,   -47,   -68,   277,
-    -347,  -347,   100,     0,  -347,  -347,  -347,  -347,  -101,  -123,
-      61,   -22,  -214,   -56,  -202,  -323,  -102,  -347,  -347,  -109,
-    -346,  -347,  -347,   -88,     8,   -53,  -347,  -347,  -347,  -347,
-    -347,   -77,  -347,  -347,  -347,  -347,  -347,  -347,  -347,  -347,
-    -347,   217,  -347,  -347
+    -361,   -39,  -361,  -361,  -361,  -361,  -361,  -361,    73,  -361,
+    -361,  -361,  -361,  -107,  -361,   -15,   -20,   -67,   -19,    53,
+      54,    55,    51,    57,    58,  -361,  -110,  -132,  -361,  -146,
+    -125,  -361,     6,    12,  -361,  -361,  -361,   190,   228,   217,
+     195,  -361,  -361,  -336,    25,  -361,  -104,    27,   -57,   322,
+    -361,  -361,   141,     0,  -361,  -361,  -361,  -361,  -109,  -130,
+     100,    19,  -185,   -17,  -193,  -310,   -65,  -361,  -361,   -70,
+    -360,  -361,  -361,   -92,    46,   -13,  -361,  -361,  -361,  -361,
+    -361,   -38,  -361,  -361,  -361,  -361,  -361,  -361,  -361,  -361,
+    -361,   259,  -361,  -361
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   227,   153,   154,   155,   315,   156,   157,   158,   159,
-     160,   161,   162,   199,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   200,   201,   297,   202,
-     177,   109,   203,   204,    63,    64,    65,   125,    99,   100,
-     126,    66,    67,    68,    69,   101,    70,    71,    72,    73,
-      74,   120,   121,   178,    76,    77,   181,   117,   137,   138,
-     228,   229,   225,   206,   207,   208,   209,   285,   378,   405,
-     342,   343,   344,   406,   210,   211,   212,   391,   213,   392,
-     214,   377,   215,   350,   274,   345,   371,   388,   389,   216,
-      78,    79,    80,    92
+      -1,   230,   156,   157,   158,   318,   159,   160,   161,   162,
+     163,   164,   165,   202,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   203,   204,   300,   205,
+     180,   111,   206,   207,    63,    64,    65,   128,   101,   102,
+     129,    66,    67,    68,    69,   103,    70,    71,    72,    73,
+      74,   123,   124,   181,    76,    77,   184,   120,   140,   141,
+     231,   232,   228,   209,   210,   211,   212,   288,   381,   408,
+     345,   346,   347,   409,   213,   214,   215,   394,   216,   395,
+     217,   380,   218,   353,   277,   348,   374,   391,   392,   219,
+      78,    79,    80,    94
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -951,364 +951,372 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      75,    89,   110,   135,   123,   224,   223,   305,   301,   234,
-     312,   135,    95,    61,   231,    62,   180,   176,    86,    87,
-       7,   368,   106,   253,   254,   375,   390,   112,   362,   105,
-     264,   135,   127,   183,   243,   176,   363,    84,    85,   184,
-      81,   136,    93,    96,    97,    98,   375,    90,   313,   136,
-      88,    27,    28,   279,    29,   411,    94,   231,   255,   256,
-     127,   102,    37,   129,   103,   265,   113,   226,   281,   136,
-      75,   404,    82,   111,   135,   135,    91,   404,    75,   131,
-     268,   179,   220,   116,   240,   118,   132,    95,   217,   221,
-     241,    61,   357,    62,   224,   304,   314,   176,   298,   316,
-      75,   299,   298,   310,   235,   236,   311,   119,   -96,    75,
-     372,   130,   136,   136,   320,   373,   298,    75,    96,    97,
-      98,   298,   205,    81,   176,   237,   408,   340,    75,   238,
-     182,   298,   298,   310,   347,    75,   359,    75,   346,   257,
-     258,   380,   348,   122,   382,   231,     2,     3,     4,   301,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     104,    87,   135,   328,   329,   330,   331,   396,   133,   296,
-     352,   353,    96,    97,    98,   -29,   163,   354,   239,   224,
-      75,    75,    86,    87,   360,   246,   247,   248,   249,   412,
-     250,   251,   252,   244,   163,   269,   270,   298,   365,   260,
-     136,   324,   325,   332,   333,   262,   176,   259,   232,   233,
-     205,   261,   374,   176,   326,   327,   263,   266,   272,   273,
-     284,   275,   276,   277,   280,   282,   283,   245,   224,   -28,
-     302,   224,   306,   374,   307,   309,   -23,   384,   385,   355,
-     349,  -232,   356,   358,   376,   364,   366,   298,   398,   -30,
-     379,   383,   381,   386,   224,   367,   163,   394,   397,   395,
-     399,   409,   400,   401,   196,   376,   176,   403,    75,   407,
-     319,   334,   413,   339,   335,   218,   224,   336,   124,   128,
-     337,   219,    83,   163,   271,   205,   338,   308,   361,   369,
-     402,   410,   370,   351,   387,   115,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   110,   321,
-     322,   323,   163,   163,   163,   163,   163,   163,   163,   163,
-     163,   163,   163,   163,   163,   163,   163,   163,     0,     0,
-       0,     0,     0,     0,     0,     0,   393,     0,     0,     0,
-       0,     0,     0,     0,   205,   205,     0,     0,     0,     0,
-     205,   205,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   163,     0,     0,     0,     0,
-       0,   205,   163,     0,     0,     0,    75,     0,     0,     0,
+      75,    91,   126,   227,   237,   179,    61,   138,   166,   226,
+     234,   183,    62,   112,   315,   393,   138,   378,    97,   252,
+     304,   253,    92,   267,   179,     7,    83,   166,    84,   107,
+      88,    89,   246,   256,   257,   365,   138,   371,   378,   308,
+     134,   235,   236,   366,   414,   130,    93,   135,   282,    98,
+      99,   100,   316,   234,   139,   186,    27,    28,   268,    29,
+     248,   187,    90,   139,    95,   132,    96,    37,   258,   259,
+      75,   284,    97,   113,   130,   271,   243,   121,    75,   138,
+     138,   229,   244,   139,    61,   119,   179,   407,   223,   166,
+      62,   220,   227,   407,   319,   224,   108,   115,   307,   122,
+     317,   114,    75,    98,    99,   100,   301,   238,   239,   375,
+     118,    75,   323,   179,   -96,   301,   166,   133,   104,   125,
+      75,   105,   343,   376,   360,   208,   139,   139,   240,   301,
+     185,    75,   241,   349,     2,     3,     4,   351,    75,   136,
+      75,   234,   324,   325,   326,   166,   166,   166,   166,   166,
+     166,   166,   166,   166,   166,   166,   166,   166,   166,   166,
+     166,   304,    83,   301,    84,   411,   302,   138,   355,   356,
+     182,   301,   313,   383,   -29,   314,   385,   227,   301,   313,
+     357,   350,   362,    75,    75,    86,    87,   363,     7,   331,
+     332,   333,   334,   106,    89,   179,    88,    89,   166,   399,
+     260,   261,   179,   272,   273,   166,   242,   377,    98,    99,
+     100,   254,   255,   208,   139,   249,   250,   251,   247,    27,
+      28,   415,    29,    81,   301,   368,   227,   263,   377,   227,
+      37,    38,    39,     7,   329,   330,   388,   327,   328,   264,
+     387,   335,   336,   401,   262,   265,   266,   269,   275,   379,
+     276,   278,   227,   279,   370,   179,   412,   280,   166,   283,
+     285,   286,   -28,   309,    27,    28,   310,    29,    81,   287,
+     379,    75,   305,   312,   227,    37,    38,    39,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   208,  -234,
+     -23,   358,   352,   359,   367,   361,   -30,   299,   369,   301,
+      82,   382,   384,   386,   389,   402,   397,   398,   403,   400,
+     404,   410,   199,   416,   322,   337,   340,   338,   406,   339,
+     131,   221,   112,   341,   127,   342,   222,    85,   274,   311,
+     405,   372,   364,   413,   354,   373,   390,   117,     0,   396,
+       0,     0,     0,     0,     0,     0,     0,   208,   208,     0,
+       0,     0,     0,   208,   208,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   205,     0,     0,     0,     0,     0,
-     205,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,   185,   186,   187,   163,   188,   189,   190,   191,
-     192,   193,   194,    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,   195,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,     0,
-      56,    57,    58,    59,   139,    60,   140,   141,   142,   143,
-     144,     0,     0,   145,   146,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   208,     0,     0,     0,     0,    75,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   147,     0,     0,     0,   196,   197,     0,     0,
-       0,     0,   198,   149,   150,   151,   152,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   185,   186,
-     187,     0,   188,   189,   190,   191,   192,   193,   194,    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,
-     195,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,     0,    56,    57,    58,    59,
-     139,    60,   140,   141,   142,   143,   144,     0,     0,   145,
-     146,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   147,     0,
-       0,     0,   196,   300,     0,     0,     0,     0,   198,   149,
-     150,   151,   152,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,   185,   186,   187,     0,   188,   189,
-     190,   191,   192,   193,   194,    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,   195,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,     0,    56,    57,    58,    59,   139,    60,   140,   141,
-     142,   143,   144,     0,     0,   145,   146,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   208,     0,     0,
+       0,     0,     0,   208,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,   188,   189,   190,     0,   191,
+     192,   193,   194,   195,   196,   197,    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,   198,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,     0,    56,    57,    58,    59,   142,    60,   143,
+     144,   145,   146,   147,     0,     0,   148,   149,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   147,     0,     0,     0,   196,     0,
-       0,     0,     0,     0,   198,   149,   150,   151,   152,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-     185,   186,   187,     0,   188,   189,   190,   191,   192,   193,
-     194,    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,   195,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,     0,    56,    57,
-      58,    59,   139,    60,   140,   141,   142,   143,   144,     0,
-       0,   145,   146,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   150,     0,     0,     0,   199,
+     200,     0,     0,     0,     0,   201,   152,   153,   154,   155,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,   188,   189,   190,     0,   191,   192,   193,   194,   195,
+     196,   197,    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,   198,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,     0,    56,
+      57,    58,    59,   142,    60,   143,   144,   145,   146,   147,
+       0,     0,   148,   149,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     147,     0,     0,     0,   122,     0,     0,     0,     0,     0,
-     198,   149,   150,   151,   152,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,   185,   186,   187,     0,
-     188,   189,   190,   191,   192,   193,   194,    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,   195,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,     0,    56,    57,    58,    59,   139,    60,
-     140,   141,   142,   143,   144,     0,     0,   145,   146,     0,
+       0,   150,     0,     0,     0,   199,   303,     0,     0,     0,
+       0,   201,   152,   153,   154,   155,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,   188,   189,   190,
+       0,   191,   192,   193,   194,   195,   196,   197,    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,   198,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,     0,    56,    57,    58,    59,   142,
+      60,   143,   144,   145,   146,   147,     0,     0,   148,   149,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   147,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   198,   149,   150,   151,
-     152,     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,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,     0,
-      56,    57,    58,    59,   139,    60,   140,   141,   142,   143,
-     144,     0,     0,   145,   146,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   134,     2,
-       3,     4,   147,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,   198,   149,   150,   151,   152,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   150,     0,     0,
+       0,   199,     0,     0,     0,     0,     0,   201,   152,   153,
+     154,   155,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,   188,   189,   190,     0,   191,   192,   193,
+     194,   195,   196,   197,    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,   198,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+       0,    56,    57,    58,    59,   142,    60,   143,   144,   145,
+     146,   147,     0,     0,   148,   149,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   150,     0,     0,     0,   125,     0,     0,
+       0,     0,     0,   201,   152,   153,   154,   155,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,   188,
+     189,   190,     0,   191,   192,   193,   194,   195,   196,   197,
       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,    46,    47,    48,    49,
+      41,   198,    42,    43,    44,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,    55,     0,    56,    57,    58,
-      59,   139,    60,   140,   141,   142,   143,   144,     0,     0,
-     145,   146,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     2,     3,     4,     0,     0,   147,
-       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
-     149,   150,   151,   152,     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,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,     0,    56,    57,    58,     0,   107,    60,     0,     0,
-       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,   108,    31,    32,    33,    34,    35,
-      36,     0,     0,     0,    40,    41,     0,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,     0,    56,    57,    58,     0,   139,    60,   140,   141,
-     142,   143,   144,     0,     0,   145,   146,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   147,     0,     0,   148,     8,     9,
-      10,    11,     0,     0,     0,   149,   150,   151,   152,     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,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,     0,
-      56,    57,    58,     0,   139,    60,   140,   141,   142,   143,
-     144,     0,     0,   145,   146,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   147,     0,     0,   222,     8,     9,    10,    11,
-       0,     0,     0,   149,   150,   151,   152,     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,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,     0,    56,    57,
-      58,     0,   139,    60,   140,   141,   142,   143,   144,     0,
-       0,   145,   146,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     147,     8,     9,    10,    11,     0,     0,     0,     0,     0,
-     278,   149,   150,   151,   152,     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,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,     0,    56,    57,    58,     0,   139,    60,   140,
-     141,   142,   143,   144,     0,     0,   145,   146,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   147,     0,     0,   303,     8,
-       9,    10,    11,     0,     0,     0,   149,   150,   151,   152,
-       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,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-       0,    56,    57,    58,     0,   139,    60,   140,   141,   142,
-     143,   144,     0,     0,   145,   146,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   147,     8,     9,    10,    11,     0,     0,
-       0,     0,     0,     0,   149,   150,   151,   152,     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,   242,
-       0,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,     0,    56,    57,    58,     0,
-     139,    60,   140,   141,   142,   143,   144,     0,     0,   145,
-     146,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   134,     2,     3,     4,   147,     6,
-       7,     8,     9,    10,    11,     0,     0,     0,     0,   149,
-     150,   151,   152,     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,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,     0,    56,    57,    58,    59,     0,    60,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   134,
-       2,     3,     4,     0,     6,     7,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     230,    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,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,     0,    56,    57,
-      58,    59,     0,    60,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   134,     2,     3,     4,     0,     6,
-       7,     8,     9,    10,    11,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   267,    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,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,     0,    56,    57,    58,    59,     0,    60,     0,
-       0,     0,     0,     0,     0,     0,   114,     0,     0,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     341,    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,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,     0,    56,    57,
-      58,    59,     0,    60,     1,     2,     3,     4,     5,     6,
+      59,   142,    60,   143,   144,   145,   146,   147,     0,     0,
+     148,   149,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   150,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   201,
+     152,   153,   154,   155,     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,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,     0,    56,    57,    58,    59,     0,    60,   134,
-       2,     3,     4,     0,     6,     7,     8,     9,    10,    11,
+      54,    55,     0,    56,    57,    58,    59,   142,    60,   143,
+     144,   145,   146,   147,     0,     0,   148,   149,     0,     0,
        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,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,     0,    56,    57,
-      58,    59,     0,    60,     2,     3,     4,     0,     0,     0,
-       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,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,     0,    56,    57,    58,     0,     0,    60,     8,     9,
-      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   137,     2,     3,     4,   150,     6,     7,     8,     9,
+      10,    11,     0,     0,     0,   201,   152,   153,   154,   155,
        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,    46,
+      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,    46,
       47,    48,    49,    50,    51,    52,    53,    54,    55,     0,
-      56,    57,    58,     0,   317,    60,     8,     9,    10,    11,
-     318,     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,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,     0,    56,    57,
-      58,     0,     0,    60
+      56,    57,    58,    59,   142,    60,   143,   144,   145,   146,
+     147,     0,     0,   148,   149,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     2,     3,     4,
+       0,     0,   150,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,   152,   153,   154,   155,     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,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,     0,    56,    57,    58,     0,   109,
+      60,     0,     0,     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,   110,    31,    32,
+      33,    34,    35,    36,     0,     0,     0,    40,    41,     0,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,     0,    56,    57,    58,     0,   142,
+      60,   143,   144,   145,   146,   147,     0,     0,   148,   149,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   150,     0,     0,
+     151,     8,     9,    10,    11,     0,     0,     0,   152,   153,
+     154,   155,     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,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,     0,    56,    57,    58,     0,   142,    60,   143,
+     144,   145,   146,   147,     0,     0,   148,   149,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   150,     0,     0,   225,     8,
+       9,    10,    11,     0,     0,     0,   152,   153,   154,   155,
+       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,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+       0,    56,    57,    58,     0,   142,    60,   143,   144,   145,
+     146,   147,     0,     0,   148,   149,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   150,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,   281,   152,   153,   154,   155,     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,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,     0,    56,    57,    58,     0,
+     142,    60,   143,   144,   145,   146,   147,     0,     0,   148,
+     149,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   150,     0,
+       0,   306,     8,     9,    10,    11,     0,     0,     0,   152,
+     153,   154,   155,     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,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,     0,    56,    57,    58,     0,   142,    60,
+     143,   144,   145,   146,   147,     0,     0,   148,   149,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   150,     8,     9,    10,
+      11,     0,     0,     0,     0,     0,     0,   152,   153,   154,
+     155,     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,   245,     0,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,     0,    56,
+      57,    58,     0,   142,    60,   143,   144,   145,   146,   147,
+       0,     0,   148,   149,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   137,     2,     3,
+       4,   150,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,     0,   152,   153,   154,   155,     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,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,     0,    56,    57,    58,    59,
+       0,    60,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   137,     2,     3,     4,     0,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   233,    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,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+       0,    56,    57,    58,    59,     0,    60,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   137,     2,     3,
+       4,     0,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   270,    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,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,     0,    56,    57,    58,    59,
+       0,    60,     0,     0,     0,     0,     0,     0,     0,   116,
+       0,     0,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   344,    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,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+       0,    56,    57,    58,    59,     0,    60,     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,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,     0,    56,    57,    58,    59,
+       0,    60,   137,     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,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+       0,    56,    57,    58,    59,     0,    60,     2,     3,     4,
+       0,     0,     0,     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,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,     0,    56,    57,    58,     0,     0,
+      60,     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,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,     0,    56,    57,    58,     0,   320,    60,     8,
+       9,    10,    11,   321,     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,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+       0,    56,    57,    58,     0,     0,    60
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    40,    70,   109,    92,   132,   131,   221,   210,   147,
-      76,   117,     9,     0,   137,     0,   117,   113,    76,    77,
-       9,   344,    69,    87,    88,   350,   372,    74,   106,    68,
-      92,   137,   100,   105,   161,   131,   114,    40,    41,   111,
-      44,   109,   105,    40,    41,    42,   371,   104,   114,   117,
-     108,    40,    41,   191,    43,   401,   111,   180,   122,   123,
-     128,   111,    51,   102,   114,   127,   106,   135,   193,   137,
-      70,   394,    76,    73,   180,   181,   114,   400,    78,   106,
-     181,   114,   106,    83,   105,   108,   113,     9,   127,   113,
-     111,    78,   306,    78,   221,   220,   105,   193,   111,   237,
-     100,   114,   111,   111,    85,    86,   114,    76,   105,   109,
-     105,   104,   180,   181,   241,   105,   111,   117,    40,    41,
-      42,   111,   122,    44,   220,   106,   105,   265,   128,   110,
-     113,   111,   111,   111,   114,   135,   114,   137,   276,    89,
-      90,   355,   280,   108,   358,   268,     4,     5,     6,   351,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-      76,    77,   268,   253,   254,   255,   256,   381,   108,   113,
-     297,   298,    40,    41,    42,   104,   113,   302,   105,   306,
-     180,   181,    76,    77,   309,   119,   120,   121,   116,   403,
-     118,    83,    84,   104,   131,    79,    80,   111,   112,   125,
-     268,   249,   250,   257,   258,    91,   302,   126,   145,   146,
-     210,   124,   350,   309,   251,   252,    93,   107,   114,   114,
-     109,   104,   104,   114,   104,   112,   104,   164,   355,   104,
-     106,   358,   113,   371,   107,   106,   105,   362,   365,   113,
-     112,   108,   107,   113,   350,   107,    56,   111,   386,   104,
-     107,   107,   113,   104,   381,   343,   193,   105,   107,   109,
-     114,   399,   105,    17,   108,   371,   362,   113,   268,   114,
-     238,   259,   114,   264,   260,   128,   403,   261,    94,   101,
-     262,   128,     5,   220,   184,   285,   263,   226,   310,   345,
-     392,   400,   345,   285,   371,    78,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   376,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   375,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   344,   345,    -1,    -1,    -1,    -1,
-     350,   351,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   302,    -1,    -1,    -1,    -1,
-      -1,   371,   309,    -1,    -1,    -1,   376,    -1,    -1,    -1,
+       0,    40,    94,   135,   150,   115,     0,   111,   115,   134,
+     140,   120,     0,    70,    76,   375,   120,   353,     9,   116,
+     213,   118,   104,    92,   134,     9,     1,   134,     1,    68,
+      76,    77,   164,    87,    88,   106,   140,   347,   374,   224,
+     106,   148,   149,   114,   404,   102,   114,   113,   194,    40,
+      41,    42,   114,   183,   111,   105,    40,    41,   127,    43,
+     167,   111,   108,   120,   105,   104,   111,    51,   122,   123,
+      70,   196,     9,    73,   131,   184,   105,   108,    78,   183,
+     184,   138,   111,   140,    78,    85,   196,   397,   106,   196,
+      78,   130,   224,   403,   240,   113,    69,   106,   223,    76,
+     105,    74,   102,    40,    41,    42,   111,    85,    86,   105,
+      83,   111,   244,   223,   105,   111,   223,   104,   111,   108,
+     120,   114,   268,   105,   309,   125,   183,   184,   106,   111,
+     113,   131,   110,   279,     4,     5,     6,   283,   138,   108,
+     140,   271,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
+     267,   354,   137,   111,   137,   105,   114,   271,   300,   301,
+     114,   111,   111,   358,   104,   114,   361,   309,   111,   111,
+     305,   114,   114,   183,   184,    40,    41,   312,     9,   256,
+     257,   258,   259,    76,    77,   305,    76,    77,   305,   384,
+      89,    90,   312,    79,    80,   312,   105,   353,    40,    41,
+      42,    83,    84,   213,   271,   119,   120,   121,   104,    40,
+      41,   406,    43,    44,   111,   112,   358,   125,   374,   361,
+      51,    52,    53,     9,   254,   255,   368,   252,   253,   124,
+     365,   260,   261,   389,   126,    91,    93,   107,   114,   353,
+     114,   104,   384,   104,   346,   365,   402,   114,   365,   104,
+     112,   104,   104,   113,    40,    41,   107,    43,    44,   109,
+     374,   271,   106,   106,   406,    51,    52,    53,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   288,   108,
+     105,   113,   112,   107,   107,   113,   104,   113,    56,   111,
+      76,   107,   113,   107,   104,   114,   105,   109,   105,   107,
+      17,   114,   108,   114,   241,   262,   265,   263,   113,   264,
+     103,   131,   379,   266,    96,   267,   131,     5,   187,   229,
+     395,   348,   313,   403,   288,   348,   374,    78,    -1,   378,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   347,   348,    -1,
+      -1,    -1,    -1,   353,   354,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   394,    -1,    -1,    -1,    -1,    -1,
-     400,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,   362,    18,    19,    20,    21,
-      22,    23,    24,    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,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   374,    -1,    -1,    -1,    -1,   379,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   104,    -1,    -1,    -1,   108,   109,    -1,    -1,
-      -1,    -1,   114,   115,   116,   117,   118,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    22,    23,    24,    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,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,
-      -1,    -1,   108,   109,    -1,    -1,    -1,    -1,   114,   115,
-     116,   117,   118,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
-      20,    21,    22,    23,    24,    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,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   397,    -1,    -1,
+      -1,    -1,    -1,   403,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    22,    23,    24,    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,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    -1,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,   108,    -1,
-      -1,    -1,    -1,    -1,   114,   115,   116,   117,   118,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
-      24,    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,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,   108,
+     109,    -1,    -1,    -1,    -1,   114,   115,   116,   117,   118,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
+      23,    24,    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,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     104,    -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,
-     114,   115,   116,   117,   118,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
-      18,    19,    20,    21,    22,    23,    24,    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,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    -1,    -1,    85,    86,    -1,
+      -1,   104,    -1,    -1,    -1,   108,   109,    -1,    -1,    -1,
+      -1,   114,   115,   116,   117,   118,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      -1,    18,    19,    20,    21,    22,    23,    24,    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,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,   117,
-     118,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,
+      -1,   108,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,
+     117,   118,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
+      21,    22,    23,    24,    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,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   104,    -1,    -1,    -1,   108,    -1,    -1,
+      -1,    -1,    -1,   114,   115,   116,   117,   118,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
+      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,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
+      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
+     115,   116,   117,   118,     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,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    -1,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,     3,     4,     5,     6,   104,     8,     9,    10,    11,
+      12,    13,    -1,    -1,    -1,   114,   115,   116,   117,   118,
       -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,
@@ -1316,55 +1324,26 @@
       62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
       82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-       5,     6,   104,     8,     9,    10,    11,    12,    13,    -1,
-      -1,    -1,   114,   115,   116,   117,   118,    -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,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     4,     5,     6,    -1,    -1,   104,
-      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-     115,   116,   117,   118,    -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,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    72,    73,    74,    -1,    76,    77,    -1,    -1,
-      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,   114,    45,    46,    47,    48,    49,
-      50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    72,    73,    74,    -1,    76,    77,    78,    79,
-      80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,
+      -1,    -1,   104,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,    -1,    -1,   115,   116,   117,   118,    -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,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    -1,    76,
+      77,    -1,    -1,    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,   114,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
+      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    -1,    76,
+      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   104,    -1,    -1,   107,    10,    11,
-      12,    13,    -1,    -1,    -1,   115,   116,   117,   118,    -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,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
-      82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   104,    -1,    -1,   107,    10,    11,    12,    13,
-      -1,    -1,    -1,   115,   116,   117,   118,    -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,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     104,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
-     114,   115,   116,   117,   118,    -1,    25,    26,    27,    28,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,
+     107,    10,    11,    12,    13,    -1,    -1,    -1,   115,   116,
+     117,   118,    -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,
@@ -1383,7 +1362,7 @@
       81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   104,    10,    11,    12,    13,    -1,    -1,
-      -1,    -1,    -1,    -1,   115,   116,   117,   118,    -1,    25,
+      -1,    -1,    -1,   114,   115,   116,   117,   118,    -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,
@@ -1391,76 +1370,95 @@
       66,    67,    68,    69,    70,    -1,    72,    73,    74,    -1,
       76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
       86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     3,     4,     5,     6,   104,     8,
-       9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,   115,
-     116,   117,   118,    -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,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    -1,    72,    73,    74,    75,    -1,    77,    -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,   104,    -1,
+      -1,   107,    10,    11,    12,    13,    -1,    -1,    -1,   115,
+     116,   117,   118,    -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,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    72,    73,    74,    -1,    76,    77,
+      78,    79,    80,    81,    82,    -1,    -1,    85,    86,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     109,    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,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
-      74,    75,    -1,    77,    -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,   109,    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,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    -1,    72,    73,    74,    75,    -1,    77,    -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,
-     109,    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,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
-      74,    75,    -1,    77,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   104,    10,    11,    12,
+      13,    -1,    -1,    -1,    -1,    -1,    -1,   115,   116,   117,
+     118,    -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,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
+      -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
+       6,   104,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,   115,   116,   117,   118,    -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,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    72,    73,    74,    75,
+      -1,    77,    -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,   109,    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,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    72,    73,    74,    75,    -1,    77,    -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,   109,    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,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    72,    73,    74,    75,
+      -1,    77,    -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,   109,    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,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    72,    73,    74,    75,    -1,    77,     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,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    72,    73,    74,    75,
+      -1,    77,     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,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    72,    73,    74,    75,    -1,    77,     4,     5,     6,
+      -1,    -1,    -1,    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,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    -1,    -1,
+      77,    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,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
+      49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,
       59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    -1,    72,    73,    74,    75,    -1,    77,     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,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
-      74,    75,    -1,    77,     4,     5,     6,    -1,    -1,    -1,
-      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,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    72,    73,    74,    -1,    -1,    77,    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,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      72,    73,    74,    -1,    76,    77,    10,    11,    12,    13,
-      82,    -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,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
-      74,    -1,    -1,    77
+      69,    70,    -1,    72,    73,    74,    -1,    76,    77,    10,
+      11,    12,    13,    82,    -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,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    72,    73,    74,    -1,    -1,    77
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1475,40 +1473,40 @@
       65,    66,    67,    68,    69,    70,    72,    73,    74,    75,
       77,   160,   161,   162,   163,   164,   169,   170,   171,   172,
      174,   175,   176,   177,   178,   181,   182,   183,   218,   219,
-     220,    44,    76,   177,    40,    41,    76,    77,   108,   129,
-     104,   114,   221,   105,   111,     9,    40,    41,    42,   166,
-     167,   173,   111,   114,    76,   129,   175,    76,   114,   159,
-     176,   181,   175,   106,     0,   219,   181,   185,   108,    76,
-     179,   180,   108,   201,   166,   165,   168,   176,   167,   129,
-     104,   106,   113,   108,     3,   174,   176,   186,   187,    76,
-      78,    79,    80,    81,    82,    85,    86,   104,   107,   115,
-     116,   117,   118,   130,   131,   132,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   158,   181,   114,
-     186,   184,   113,   105,   111,    14,    15,    16,    18,    19,
-      20,    21,    22,    23,    24,    56,   108,   109,   114,   141,
-     154,   155,   157,   160,   161,   181,   191,   192,   193,   194,
-     202,   203,   204,   206,   208,   210,   217,   129,   165,   168,
-     106,   113,   107,   158,   155,   190,   176,   129,   188,   189,
-     109,   187,   141,   141,   157,    85,    86,   106,   110,   105,
-     105,   111,    55,   155,   104,   141,   119,   120,   121,   116,
-     118,    83,    84,    87,    88,   122,   123,    89,    90,   126,
-     125,   124,    91,    93,    92,   127,   107,   109,   186,    79,
-      80,   180,   114,   114,   212,   104,   104,   114,   114,   157,
-     104,   158,   112,   104,   109,   195,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   113,   156,   111,   114,
-     109,   192,   106,   107,   158,   190,   113,   107,   188,   106,
-     111,   114,    76,   114,   105,   133,   157,    76,    82,   136,
-     155,   141,   141,   141,   143,   143,   144,   144,   145,   145,
-     145,   145,   146,   146,   147,   148,   149,   150,   151,   152,
-     157,   109,   198,   199,   200,   213,   157,   114,   157,   112,
-     211,   202,   155,   155,   158,   113,   107,   190,   113,   114,
-     158,   189,   106,   114,   107,   112,    56,   201,   193,   191,
-     203,   214,   105,   105,   157,   171,   174,   209,   196,   107,
-     190,   113,   190,   107,   158,   155,   104,   209,   215,   216,
-     198,   205,   207,   129,   105,   109,   190,   107,   157,   114,
-     105,    17,   194,   113,   193,   197,   201,   114,   105,   157,
-     197,   198,   190,   114
+     220,    44,    76,   172,   175,   177,    40,    41,    76,    77,
+     108,   129,   104,   114,   221,   105,   111,     9,    40,    41,
+      42,   166,   167,   173,   111,   114,    76,   129,   175,    76,
+     114,   159,   176,   181,   175,   106,     0,   219,   175,   181,
+     185,   108,    76,   179,   180,   108,   201,   166,   165,   168,
+     176,   167,   129,   104,   106,   113,   108,     3,   174,   176,
+     186,   187,    76,    78,    79,    80,    81,    82,    85,    86,
+     104,   107,   115,   116,   117,   118,   130,   131,   132,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     158,   181,   114,   186,   184,   113,   105,   111,    14,    15,
+      16,    18,    19,    20,    21,    22,    23,    24,    56,   108,
+     109,   114,   141,   154,   155,   157,   160,   161,   181,   191,
+     192,   193,   194,   202,   203,   204,   206,   208,   210,   217,
+     129,   165,   168,   106,   113,   107,   158,   155,   190,   176,
+     129,   188,   189,   109,   187,   141,   141,   157,    85,    86,
+     106,   110,   105,   105,   111,    55,   155,   104,   141,   119,
+     120,   121,   116,   118,    83,    84,    87,    88,   122,   123,
+      89,    90,   126,   125,   124,    91,    93,    92,   127,   107,
+     109,   186,    79,    80,   180,   114,   114,   212,   104,   104,
+     114,   114,   157,   104,   158,   112,   104,   109,   195,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   113,
+     156,   111,   114,   109,   192,   106,   107,   158,   190,   113,
+     107,   188,   106,   111,   114,    76,   114,   105,   133,   157,
+      76,    82,   136,   155,   141,   141,   141,   143,   143,   144,
+     144,   145,   145,   145,   145,   146,   146,   147,   148,   149,
+     150,   151,   152,   157,   109,   198,   199,   200,   213,   157,
+     114,   157,   112,   211,   202,   155,   155,   158,   113,   107,
+     190,   113,   114,   158,   189,   106,   114,   107,   112,    56,
+     201,   193,   191,   203,   214,   105,   105,   157,   171,   174,
+     209,   196,   107,   190,   113,   190,   107,   158,   155,   104,
+     209,   215,   216,   198,   205,   207,   129,   105,   109,   190,
+     107,   157,   114,   105,    17,   194,   113,   193,   197,   201,
+     114,   105,   157,   197,   198,   190,   114
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
@@ -1527,21 +1525,21 @@
      164,   165,   165,   166,   166,   166,   166,   167,   167,   167,
      167,   168,   169,   169,   169,   169,   169,   169,   170,   170,
      170,   170,   170,   170,   170,   171,   171,   172,   172,   173,
-     174,   174,   174,   174,   174,   174,   174,   174,   175,   175,
-     175,   175,   175,   175,   176,   176,   177,   177,   177,   178,
-     179,   179,   180,   180,   180,   181,   181,   181,   182,   182,
+     174,   174,   174,   174,   174,   174,   174,   174,   174,   174,
+     175,   175,   175,   175,   175,   175,   176,   176,   177,   177,
+     177,   178,   179,   179,   180,   180,   180,   181,   181,   181,
      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
-     182,   182,   182,   184,   183,   185,   183,   186,   186,   187,
-     187,   188,   188,   189,   189,   190,   191,   192,   192,   193,
-     193,   193,   193,   193,   193,   193,   194,   195,   196,   194,
-     197,   197,   199,   198,   200,   198,   201,   201,   202,   202,
-     203,   203,   204,   205,   205,   207,   206,   208,   208,   209,
-     209,   211,   210,   212,   210,   213,   210,   214,   214,   215,
-     215,   216,   216,   217,   217,   217,   217,   217,   218,   218,
-     219,   219,   221,   220
+     182,   182,   182,   182,   182,   184,   183,   185,   183,   186,
+     186,   187,   187,   188,   188,   189,   189,   190,   191,   192,
+     192,   193,   193,   193,   193,   193,   193,   193,   194,   195,
+     196,   194,   197,   197,   199,   198,   200,   198,   201,   201,
+     202,   202,   203,   203,   204,   205,   205,   207,   206,   208,
+     208,   209,   209,   211,   210,   212,   210,   213,   210,   214,
+     214,   215,   215,   216,   216,   217,   217,   217,   217,   217,
+     218,   218,   219,   219,   221,   220
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1560,21 +1558,21 @@
        3,     2,     5,     3,     2,     3,     2,     0,     1,     1,
        1,     1,     1,     3,     6,     7,     8,     5,     1,     2,
        5,     6,     7,     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,     3,     4,     1,     1,
+       1,     1,     2,     1,     2,     1,     1,     2,     2,     3,
+       1,     1,     1,     2,     2,     1,     1,     2,     1,     1,
+       1,     4,     1,     3,     1,     3,     3,     1,     3,     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,     1,     1,     0,     6,     0,     5,     1,     2,     3,
-       4,     1,     3,     1,     4,     1,     1,     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,     0,     6,     3,     2,     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,     1,     1,     0,     6,     0,     5,     1,
+       2,     3,     4,     1,     3,     1,     4,     1,     1,     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,     0,     6,     3,
+       2,     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
 };
 
 
@@ -3677,7 +3675,9 @@
   case 138:
 
     {
-        (yyval.interm.type).qualifier = EvqConst;
+        context->es3InvariantErrorCheck((yyvsp[0].interm.type).qualifier, (yylsp[-1]));
+        (yyval.interm.type).setBasic(EbtVoid, (yyvsp[0].interm.type).qualifier, (yylsp[0]));
+        (yyval.interm.type).invariant = true;
     }
 
     break;
@@ -3685,13 +3685,31 @@
   case 139:
 
     {
+        context->es3InvariantErrorCheck((yyvsp[0].interm.type).qualifier, (yylsp[-2]));
+        (yyval.interm.type) = context->joinInterpolationQualifiers((yylsp[-1]), (yyvsp[-1].interm.type).qualifier, (yylsp[0]), (yyvsp[0].interm.type).qualifier);
+        (yyval.interm.type).invariant = true;
+    }
+
+    break;
+
+  case 140:
+
+    {
+        (yyval.interm.type).qualifier = EvqConst;
+    }
+
+    break;
+
+  case 141:
+
+    {
         ES3_ONLY("in", (yylsp[0]), "storage qualifier");
         (yyval.interm.type).qualifier = (context->shaderType == GL_FRAGMENT_SHADER) ? EvqFragmentIn : EvqVertexIn;
     }
 
     break;
 
-  case 140:
+  case 142:
 
     {
         ES3_ONLY("out", (yylsp[0]), "storage qualifier");
@@ -3700,7 +3718,7 @@
 
     break;
 
-  case 141:
+  case 143:
 
     {
         ES3_ONLY("centroid in", (yylsp[-1]), "storage qualifier");
@@ -3714,7 +3732,7 @@
 
     break;
 
-  case 142:
+  case 144:
 
     {
         ES3_ONLY("centroid out", (yylsp[-1]), "storage qualifier");
@@ -3728,7 +3746,7 @@
 
     break;
 
-  case 143:
+  case 145:
 
     {
         if (context->globalErrorCheck((yylsp[0]), context->symbolTable.atGlobalLevel(), "uniform"))
@@ -3738,7 +3756,7 @@
 
     break;
 
-  case 144:
+  case 146:
 
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
@@ -3753,7 +3771,7 @@
 
     break;
 
-  case 145:
+  case 147:
 
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
@@ -3767,7 +3785,7 @@
 
     break;
 
-  case 146:
+  case 148:
 
     {
         (yyval.interm.precision) = EbpHigh;
@@ -3775,7 +3793,7 @@
 
     break;
 
-  case 147:
+  case 149:
 
     {
         (yyval.interm.precision) = EbpMedium;
@@ -3783,7 +3801,7 @@
 
     break;
 
-  case 148:
+  case 150:
 
     {
         (yyval.interm.precision) = EbpLow;
@@ -3791,7 +3809,7 @@
 
     break;
 
-  case 149:
+  case 151:
 
     {
         ES3_ONLY("layout", (yylsp[-3]), "qualifier");
@@ -3800,7 +3818,7 @@
 
     break;
 
-  case 150:
+  case 152:
 
     {
         (yyval.interm.layoutQualifier) = (yyvsp[0].interm.layoutQualifier);
@@ -3808,7 +3826,7 @@
 
     break;
 
-  case 151:
+  case 153:
 
     {
         (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers((yyvsp[-2].interm.layoutQualifier), (yyvsp[0].interm.layoutQualifier));
@@ -3816,7 +3834,7 @@
 
     break;
 
-  case 152:
+  case 154:
 
     {
         (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[0].lex).string, (yylsp[0]));
@@ -3824,31 +3842,31 @@
 
     break;
 
-  case 153:
-
-    {
-        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[-2].lex).string, (yylsp[-2]), *(yyvsp[0].lex).string, (yyvsp[0].lex).i, (yylsp[0]));
-    }
-
-    break;
-
-  case 154:
-
-    {
-        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[-2].lex).string, (yylsp[-2]), *(yyvsp[0].lex).string, (yyvsp[0].lex).i, (yylsp[0]));
-    }
-
-    break;
-
   case 155:
 
     {
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[-2].lex).string, (yylsp[-2]), *(yyvsp[0].lex).string, (yyvsp[0].lex).i, (yylsp[0]));
+    }
+
+    break;
+
+  case 156:
+
+    {
+        (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[-2].lex).string, (yylsp[-2]), *(yyvsp[0].lex).string, (yyvsp[0].lex).i, (yylsp[0]));
+    }
+
+    break;
+
+  case 157:
+
+    {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
 
     break;
 
-  case 156:
+  case 158:
 
     {
         ES3_ONLY("[]", (yylsp[-1]), "implicitly sized array");
@@ -3858,7 +3876,7 @@
 
     break;
 
-  case 157:
+  case 159:
 
     {
         (yyval.interm.type) = (yyvsp[-3].interm.type);
@@ -3875,7 +3893,7 @@
 
     break;
 
-  case 158:
+  case 160:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3884,29 +3902,11 @@
 
     break;
 
-  case 159:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-    }
-
-    break;
-
-  case 160:
-
-    {
-        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[0]));
-    }
-
-    break;
-
   case 161:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtUInt, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
     }
 
     break;
@@ -3915,7 +3915,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[0]));
     }
 
     break;
@@ -3924,8 +3924,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtUInt, qual, (yylsp[0]));
     }
 
     break;
@@ -3934,8 +3933,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[0]));
     }
 
     break;
@@ -3945,7 +3943,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(2);
     }
 
     break;
@@ -3954,8 +3952,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[0]));
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+        (yyval.interm.type).setAggregate(3);
     }
 
     break;
@@ -3964,8 +3962,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[0]));
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+        (yyval.interm.type).setAggregate(4);
     }
 
     break;
@@ -3975,7 +3973,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[0]));
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(2);
     }
 
     break;
@@ -3984,8 +3982,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[0]));
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[0]));
+        (yyval.interm.type).setAggregate(3);
     }
 
     break;
@@ -3994,8 +3992,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[0]));
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setBasic(EbtBool, qual, (yylsp[0]));
+        (yyval.interm.type).setAggregate(4);
     }
 
     break;
@@ -4005,7 +4003,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[0]));
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(2);
     }
 
     break;
@@ -4014,8 +4012,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtUInt, qual, (yylsp[0]));
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[0]));
+        (yyval.interm.type).setAggregate(3);
     }
 
     break;
@@ -4024,8 +4022,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtUInt, qual, (yylsp[0]));
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setBasic(EbtInt, qual, (yylsp[0]));
+        (yyval.interm.type).setAggregate(4);
     }
 
     break;
@@ -4035,7 +4033,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtUInt, qual, (yylsp[0]));
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(2);
     }
 
     break;
@@ -4044,8 +4042,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-        (yyval.interm.type).setMatrix(2, 2);
+        (yyval.interm.type).setBasic(EbtUInt, qual, (yylsp[0]));
+        (yyval.interm.type).setAggregate(3);
     }
 
     break;
@@ -4054,8 +4052,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-        (yyval.interm.type).setMatrix(3, 3);
+        (yyval.interm.type).setBasic(EbtUInt, qual, (yylsp[0]));
+        (yyval.interm.type).setAggregate(4);
     }
 
     break;
@@ -4065,7 +4063,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-        (yyval.interm.type).setMatrix(4, 4);
+        (yyval.interm.type).setMatrix(2, 2);
     }
 
     break;
@@ -4075,7 +4073,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-        (yyval.interm.type).setMatrix(2, 3);
+        (yyval.interm.type).setMatrix(3, 3);
     }
 
     break;
@@ -4085,7 +4083,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-        (yyval.interm.type).setMatrix(3, 2);
+        (yyval.interm.type).setMatrix(4, 4);
     }
 
     break;
@@ -4095,7 +4093,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-        (yyval.interm.type).setMatrix(2, 4);
+        (yyval.interm.type).setMatrix(2, 3);
     }
 
     break;
@@ -4105,7 +4103,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-        (yyval.interm.type).setMatrix(4, 2);
+        (yyval.interm.type).setMatrix(3, 2);
     }
 
     break;
@@ -4115,7 +4113,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-        (yyval.interm.type).setMatrix(3, 4);
+        (yyval.interm.type).setMatrix(2, 4);
     }
 
     break;
@@ -4125,7 +4123,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
-        (yyval.interm.type).setMatrix(4, 3);
+        (yyval.interm.type).setMatrix(4, 2);
     }
 
     break;
@@ -4134,7 +4132,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtSampler2D, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+        (yyval.interm.type).setMatrix(3, 4);
     }
 
     break;
@@ -4143,7 +4142,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtSampler3D, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yylsp[0]));
+        (yyval.interm.type).setMatrix(4, 3);
     }
 
     break;
@@ -4152,7 +4152,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtSamplerCube, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtSampler2D, qual, (yylsp[0]));
     }
 
     break;
@@ -4161,7 +4161,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtSampler2DArray, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtSampler3D, qual, (yylsp[0]));
     }
 
     break;
@@ -4170,7 +4170,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtISampler2D, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtSamplerCube, qual, (yylsp[0]));
     }
 
     break;
@@ -4179,7 +4179,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtISampler3D, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtSampler2DArray, qual, (yylsp[0]));
     }
 
     break;
@@ -4188,7 +4188,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtISamplerCube, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtISampler2D, qual, (yylsp[0]));
     }
 
     break;
@@ -4197,7 +4197,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtISampler2DArray, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtISampler3D, qual, (yylsp[0]));
     }
 
     break;
@@ -4206,7 +4206,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtUSampler2D, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtISamplerCube, qual, (yylsp[0]));
     }
 
     break;
@@ -4215,7 +4215,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtUSampler3D, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtISampler2DArray, qual, (yylsp[0]));
     }
 
     break;
@@ -4224,7 +4224,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtUSamplerCube, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtUSampler2D, qual, (yylsp[0]));
     }
 
     break;
@@ -4233,7 +4233,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtUSampler2DArray, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtUSampler3D, qual, (yylsp[0]));
     }
 
     break;
@@ -4242,7 +4242,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtSampler2DShadow, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtUSamplerCube, qual, (yylsp[0]));
     }
 
     break;
@@ -4251,7 +4251,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtSamplerCubeShadow, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtUSampler2DArray, qual, (yylsp[0]));
     }
 
     break;
@@ -4260,7 +4260,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtSampler2DArrayShadow, qual, (yylsp[0]));
+        (yyval.interm.type).setBasic(EbtSampler2DShadow, qual, (yylsp[0]));
     }
 
     break;
@@ -4268,6 +4268,24 @@
   case 199:
 
     {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtSamplerCubeShadow, qual, (yylsp[0]));
+    }
+
+    break;
+
+  case 200:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtSampler2DArrayShadow, qual, (yylsp[0]));
+    }
+
+    break;
+
+  case 201:
+
+    {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
             context->error((yylsp[0]), "unsupported type", "samplerExternalOES");
             context->recover();
@@ -4278,7 +4296,7 @@
 
     break;
 
-  case 200:
+  case 202:
 
     {
         if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
@@ -4291,7 +4309,7 @@
 
     break;
 
-  case 201:
+  case 203:
 
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
@@ -4300,7 +4318,7 @@
 
     break;
 
-  case 202:
+  case 204:
 
     {
         //
@@ -4315,13 +4333,13 @@
 
     break;
 
-  case 203:
+  case 205:
 
     { if (context->enterStructDeclaration((yylsp[-1]), *(yyvsp[-1].lex).string)) context->recover(); }
 
     break;
 
-  case 204:
+  case 206:
 
     {
         (yyval.interm.type) = context->addStructure((yylsp[-5]), (yylsp[-4]), (yyvsp[-4].lex).string, (yyvsp[-1].interm.fieldList));
@@ -4329,13 +4347,13 @@
 
     break;
 
-  case 205:
+  case 207:
 
     { if (context->enterStructDeclaration((yylsp[0]), *(yyvsp[0].lex).string)) context->recover(); }
 
     break;
 
-  case 206:
+  case 208:
 
     {
         (yyval.interm.type) = context->addStructure((yylsp[-4]), (yyloc), NewPoolTString(""), (yyvsp[-1].interm.fieldList));
@@ -4343,7 +4361,7 @@
 
     break;
 
-  case 207:
+  case 209:
 
     {
         (yyval.interm.fieldList) = (yyvsp[0].interm.fieldList);
@@ -4351,7 +4369,7 @@
 
     break;
 
-  case 208:
+  case 210:
 
     {
         (yyval.interm.fieldList) = (yyvsp[-1].interm.fieldList);
@@ -4369,7 +4387,7 @@
 
     break;
 
-  case 209:
+  case 211:
 
     {
         (yyval.interm.fieldList) = context->addStructDeclaratorList((yyvsp[-2].interm.type), (yyvsp[-1].interm.fieldList));
@@ -4377,7 +4395,7 @@
 
     break;
 
-  case 210:
+  case 212:
 
     {
         // ES3 Only, but errors should be handled elsewhere
@@ -4388,7 +4406,7 @@
 
     break;
 
-  case 211:
+  case 213:
 
     {
         (yyval.interm.fieldList) = NewPoolTFieldList();
@@ -4397,7 +4415,7 @@
 
     break;
 
-  case 212:
+  case 214:
 
     {
         (yyval.interm.fieldList)->push_back((yyvsp[0].interm.field));
@@ -4405,7 +4423,7 @@
 
     break;
 
-  case 213:
+  case 215:
 
     {
         if (context->reservedErrorCheck((yylsp[0]), *(yyvsp[0].lex).string))
@@ -4417,7 +4435,7 @@
 
     break;
 
-  case 214:
+  case 216:
 
     {
         if (context->reservedErrorCheck((yylsp[-3]), *(yyvsp[-3].lex).string))
@@ -4434,21 +4452,9 @@
 
     break;
 
-  case 215:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-
-    break;
-
-  case 216:
-
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-
-    break;
-
   case 217:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermAggregate); }
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
 
     break;
 
@@ -4460,7 +4466,7 @@
 
   case 219:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermAggregate); }
 
     break;
 
@@ -4478,48 +4484,60 @@
 
   case 222:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 223:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 224:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermSwitch); }
 
     break;
 
   case 225:
 
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermCase); }
 
     break;
 
   case 226:
 
-    { (yyval.interm.intermAggregate) = 0; }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 227:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 228:
 
-    { context->symbolTable.pop(); }
+    { (yyval.interm.intermAggregate) = 0; }
 
     break;
 
   case 229:
 
+    { context->symbolTable.push(); }
+
+    break;
+
+  case 230:
+
+    { context->symbolTable.pop(); }
+
+    break;
+
+  case 231:
+
     {
         if ((yyvsp[-2].interm.intermAggregate) != 0) {
             (yyvsp[-2].interm.intermAggregate)->setOp(EOpSequence);
@@ -4530,27 +4548,15 @@
 
     break;
 
-  case 230:
-
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-
-    break;
-
-  case 231:
-
-    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-
-    break;
-
   case 232:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
   case 233:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
 
     break;
 
@@ -4568,13 +4574,25 @@
 
   case 236:
 
+    { context->symbolTable.push(); }
+
+    break;
+
+  case 237:
+
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
+
+    break;
+
+  case 238:
+
     {
         (yyval.interm.intermNode) = 0;
     }
 
     break;
 
-  case 237:
+  case 239:
 
     {
         if ((yyvsp[-1].interm.intermAggregate)) {
@@ -4586,7 +4604,7 @@
 
     break;
 
-  case 238:
+  case 240:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[0].interm.intermNode), (yyloc));
@@ -4594,7 +4612,7 @@
 
     break;
 
-  case 239:
+  case 241:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[-1].interm.intermAggregate), (yyvsp[0].interm.intermNode), (yyloc));
@@ -4602,19 +4620,19 @@
 
     break;
 
-  case 240:
+  case 242:
 
     { (yyval.interm.intermNode) = 0; }
 
     break;
 
-  case 241:
+  case 243:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
 
     break;
 
-  case 242:
+  case 244:
 
     {
         if (context->boolErrorCheck((yylsp[-4]), (yyvsp[-2].interm.intermTypedNode)))
@@ -4624,7 +4642,7 @@
 
     break;
 
-  case 243:
+  case 245:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
@@ -4633,7 +4651,7 @@
 
     break;
 
-  case 244:
+  case 246:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
@@ -4642,13 +4660,13 @@
 
     break;
 
-  case 245:
+  case 247:
 
     { ++context->mSwitchNestingLevel; }
 
     break;
 
-  case 246:
+  case 248:
 
     {
         (yyval.interm.intermSwitch) = context->addSwitch((yyvsp[-3].interm.intermTypedNode), (yyvsp[0].interm.intermAggregate), (yylsp[-5]));
@@ -4657,7 +4675,7 @@
 
     break;
 
-  case 247:
+  case 249:
 
     {
         (yyval.interm.intermCase) = context->addCase((yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
@@ -4665,7 +4683,7 @@
 
     break;
 
-  case 248:
+  case 250:
 
     {
         (yyval.interm.intermCase) = context->addDefault((yylsp[-1]));
@@ -4673,7 +4691,7 @@
 
     break;
 
-  case 249:
+  case 251:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
@@ -4683,7 +4701,7 @@
 
     break;
 
-  case 250:
+  case 252:
 
     {
         TIntermNode *intermNode;
@@ -4700,13 +4718,13 @@
 
     break;
 
-  case 251:
+  case 253:
 
     { context->symbolTable.push(); ++context->mLoopNestingLevel; }
 
     break;
 
-  case 252:
+  case 254:
 
     {
         context->symbolTable.pop();
@@ -4716,13 +4734,13 @@
 
     break;
 
-  case 253:
+  case 255:
 
     { ++context->mLoopNestingLevel; }
 
     break;
 
-  case 254:
+  case 256:
 
     {
         if (context->boolErrorCheck((yylsp[0]), (yyvsp[-2].interm.intermTypedNode)))
@@ -4734,13 +4752,13 @@
 
     break;
 
-  case 255:
+  case 257:
 
     { context->symbolTable.push(); ++context->mLoopNestingLevel; }
 
     break;
 
-  case 256:
+  case 258:
 
     {
         context->symbolTable.pop();
@@ -4750,26 +4768,10 @@
 
     break;
 
-  case 257:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-
-    break;
-
-  case 258:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-
-    break;
-
   case 259:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
 
     break;
@@ -4777,7 +4779,7 @@
   case 260:
 
     {
-        (yyval.interm.intermTypedNode) = 0;
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
 
     break;
@@ -4785,13 +4787,29 @@
   case 261:
 
     {
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+    }
+
+    break;
+
+  case 262:
+
+    {
+        (yyval.interm.intermTypedNode) = 0;
+    }
+
+    break;
+
+  case 263:
+
+    {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
 
     break;
 
-  case 262:
+  case 264:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
@@ -4800,7 +4818,7 @@
 
     break;
 
-  case 263:
+  case 265:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpContinue, (yylsp[-1]));
@@ -4808,7 +4826,7 @@
 
     break;
 
-  case 264:
+  case 266:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpBreak, (yylsp[-1]));
@@ -4816,7 +4834,7 @@
 
     break;
 
-  case 265:
+  case 267:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yylsp[-1]));
@@ -4824,7 +4842,7 @@
 
     break;
 
-  case 266:
+  case 268:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yyvsp[-1].interm.intermTypedNode), (yylsp[-2]));
@@ -4832,7 +4850,7 @@
 
     break;
 
-  case 267:
+  case 269:
 
     {
         FRAG_ONLY("discard", (yylsp[-1]));
@@ -4841,7 +4859,7 @@
 
     break;
 
-  case 268:
+  case 270:
 
     {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
@@ -4850,7 +4868,7 @@
 
     break;
 
-  case 269:
+  case 271:
 
     {
         (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode), (yyloc));
@@ -4859,25 +4877,25 @@
 
     break;
 
-  case 270:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-
-    break;
-
-  case 271:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
-    }
-
-    break;
-
   case 272:
 
     {
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+
+    break;
+
+  case 273:
+
+    {
+        (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
+    }
+
+    break;
+
+  case 274:
+
+    {
         TFunction* function = (yyvsp[0].interm).function;
         
         const TSymbol *builtIn = context->symbolTable.findBuiltIn(function->getMangledName(), context->shaderVersion);
@@ -4971,7 +4989,7 @@
 
     break;
 
-  case 273:
+  case 275:
 
     {
         //?? Check that all paths return a value if return type != void ?
diff --git a/src/compiler/translator/util.cpp b/src/compiler/translator/util.cpp
index 6668a20..b0fdb86 100644
--- a/src/compiler/translator/util.cpp
+++ b/src/compiler/translator/util.cpp
@@ -299,6 +299,10 @@
     {
       case EvqVaryingIn:
       case EvqVaryingOut:
+      case EvqVertexOut:
+      case EvqSmoothOut:
+      case EvqFlatOut:
+      case EvqCentroidOut:
         if (mSymbolTable.isVaryingInvariant(std::string(name.c_str())) || type.isInvariant())
         {
             variable->isInvariant = true;