Add support for unsigned integer vector types to the shader translator.

TRAC #23080

Signed-off-by: Nicolas Capens
Signed-off-by: Shannon Woods
Author: Jamie Madill

git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2404 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/compiler/Intermediate.cpp b/src/compiler/Intermediate.cpp
index e3064a6..e81d8f8 100644
--- a/src/compiler/Intermediate.cpp
+++ b/src/compiler/Intermediate.cpp
@@ -829,6 +829,9 @@
         case EOpConstructIVec3:
         case EOpConstructIVec4:
         case EOpConstructInt:
+        case EOpConstructUVec2:
+        case EOpConstructUVec3:
+        case EOpConstructUVec4:
         case EOpConstructUnsignedInt:
         case EOpConstructBVec2:
         case EOpConstructBVec3:
diff --git a/src/compiler/OutputHLSL.cpp b/src/compiler/OutputHLSL.cpp
index bb0fc11..b7e63fc 100644
--- a/src/compiler/OutputHLSL.cpp
+++ b/src/compiler/OutputHLSL.cpp
@@ -82,6 +82,9 @@
     mUsesEqualIVec2 = false;
     mUsesEqualIVec3 = false;
     mUsesEqualIVec4 = false;
+    mUsesEqualUVec2 = false;
+    mUsesEqualUVec3 = false;
+    mUsesEqualUVec4 = false;
     mUsesEqualBVec2 = false;
     mUsesEqualBVec3 = false;
     mUsesEqualBVec4 = false;
@@ -1268,6 +1271,30 @@
                "}\n";
     }
 
+    if (mUsesEqualUVec2)
+    {
+        out << "bool equal(uint2 v, uint2 u)\n"
+               "{\n"
+               "    return v.x == u.x && v.y == u.y;\n"
+               "}\n";
+    }
+
+    if (mUsesEqualUVec3)
+    {
+        out << "bool equal(uint3 v, uint3 u)\n"
+               "{\n"
+               "    return v.x == u.x && v.y == u.y && v.z == u.z;\n"
+               "}\n";
+    }
+
+    if (mUsesEqualUVec4)
+    {
+        out << "bool equal(uint4 v, uint4 u)\n"
+               "{\n"
+               "    return v.x == u.x && v.y == u.y && v.z == u.z && v.w == u.w;\n"
+               "}\n";
+    }
+
     if (mUsesEqualBVec2)
     {
         out << "bool equal(bool2 v, bool2 u)\n"
@@ -1620,8 +1647,13 @@
                     }
                     break;
                   case EbtUInt:
-                    // TODO
-                    UNIMPLEMENTED();
+                    switch (node->getLeft()->getNominalSize())
+                    {
+                      case 2: mUsesEqualUVec2 = true; break;
+                      case 3: mUsesEqualUVec3 = true; break;
+                      case 4: mUsesEqualUVec4 = true; break;
+                      default: UNREACHABLE();
+                    }
                     break;
                   case EbtBool:
                     switch (node->getLeft()->getNominalSize())
@@ -1725,9 +1757,9 @@
         switch (node->getOperand()->getType().getCols())
         {
           case 1:    outputTriplet(visit, "uint(", "", ")");  break;
-          case 2:
-          case 3:
-          case 4:    UNIMPLEMENTED(); break;
+          case 2:    outputTriplet(visit, "uint2(", "", ")");  break;
+          case 3:    outputTriplet(visit, "uint3(", "", ")");  break;
+          case 4:    outputTriplet(visit, "uint4(", "", ")");  break;
           default: UNREACHABLE();
         }
         break;
@@ -2224,6 +2256,18 @@
         addConstructor(node->getType(), "uvec1", &node->getSequence());
         outputTriplet(visit, "uvec1(", "", ")");
         break;
+      case EOpConstructUVec2:
+        addConstructor(node->getType(), "uvec2", &node->getSequence());
+        outputTriplet(visit, "uvec2(", ", ", ")");
+        break;
+      case EOpConstructUVec3:
+        addConstructor(node->getType(), "uvec3", &node->getSequence());
+        outputTriplet(visit, "uvec3(", ", ", ")");
+        break;
+      case EOpConstructUVec4:
+        addConstructor(node->getType(), "uvec4", &node->getSequence());
+        outputTriplet(visit, "uvec4(", ", ", ")");
+        break;
       case EOpConstructMat2:
         addConstructor(node->getType(), "mat2", &node->getSequence());
         outputTriplet(visit, "mat2(", ", ", ")");
@@ -2883,7 +2927,9 @@
             switch (type.getCols())
             {
               case 1: return "uint";
-              default: UNIMPLEMENTED(); return "error";
+              case 2: return "uint2";
+              case 3: return "uint3";
+              case 4: return "uint4";
             }
           case EbtBool:
             switch (type.getNominalSize())
@@ -3455,7 +3501,13 @@
         }
         else if (type.isVector())
         {
-            UNIMPLEMENTED();
+            switch(type.getCols())
+            {
+              case 2: return GL_UNSIGNED_INT_VEC2;
+              case 3: return GL_UNSIGNED_INT_VEC3;
+              case 4: return GL_UNSIGNED_INT_VEC4;
+              default: UNREACHABLE();
+            }
         }
         else UNREACHABLE();
     }
diff --git a/src/compiler/OutputHLSL.h b/src/compiler/OutputHLSL.h
index 3d8bca4..0e1ca71 100644
--- a/src/compiler/OutputHLSL.h
+++ b/src/compiler/OutputHLSL.h
@@ -131,6 +131,9 @@
     bool mUsesEqualIVec2;
     bool mUsesEqualIVec3;
     bool mUsesEqualIVec4;
+    bool mUsesEqualUVec2;
+    bool mUsesEqualUVec3;
+    bool mUsesEqualUVec4;
     bool mUsesEqualBVec2;
     bool mUsesEqualBVec3;
     bool mUsesEqualBVec4;
diff --git a/src/compiler/ParseHelper.cpp b/src/compiler/ParseHelper.cpp
index 08278f8..cffc674 100644
--- a/src/compiler/ParseHelper.cpp
+++ b/src/compiler/ParseHelper.cpp
@@ -1215,7 +1215,9 @@
             switch(publicType.getNominalSize())
             {
               case 1:       op = EOpConstructUnsignedInt;   break;
-              default:      UNIMPLEMENTED(); break;
+              case 2:       op = EOpConstructUVec2; break;
+              case 3:       op = EOpConstructUVec3; break;
+              case 4:       op = EOpConstructUVec4; break;
             }
             break;
 
@@ -1385,6 +1387,9 @@
         basicOp = EOpConstructInt;
         break;
 
+    case EOpConstructUVec2:
+    case EOpConstructUVec3:
+    case EOpConstructUVec4:
     case EOpConstructUnsignedInt:
         basicOp = EOpConstructUnsignedInt;
         break;
diff --git a/src/compiler/glslang.l b/src/compiler/glslang.l
index e6281d3..3773d80 100644
--- a/src/compiler/glslang.l
+++ b/src/compiler/glslang.l
@@ -149,6 +149,9 @@
 "ivec2"        { context->lexAfterType = true; return (IVEC2); }
 "ivec3"        { context->lexAfterType = true; return (IVEC3); }
 "ivec4"        { context->lexAfterType = true; return (IVEC4); }
+"uvec2"        { return ES2_ident_ES3_keyword(context, UVEC2); }
+"uvec3"        { return ES2_ident_ES3_keyword(context, UVEC3); }
+"uvec4"        { return ES2_ident_ES3_keyword(context, UVEC4); }
 "bvec2"        { context->lexAfterType = true; return (BVEC2); }
 "bvec3"        { context->lexAfterType = true; return (BVEC3); }
 "bvec4"        { context->lexAfterType = true; return (BVEC4); }
diff --git a/src/compiler/glslang.y b/src/compiler/glslang.y
index 4520bbe..aeadbfc 100644
--- a/src/compiler/glslang.y
+++ b/src/compiler/glslang.y
@@ -124,7 +124,7 @@
 %token <lex> INVARIANT HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION
 %token <lex> ATTRIBUTE CONST_QUAL BOOL_TYPE FLOAT_TYPE INT_TYPE UINT_TYPE
 %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
-%token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 VEC2 VEC3 VEC4
+%token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 VEC2 VEC3 VEC4 UVEC2 UVEC3 UVEC4
 %token <lex> MATRIX2 MATRIX3 MATRIX4 IN_QUAL OUT_QUAL INOUT_QUAL UNIFORM VARYING
 %token <lex> MATRIX2x3 MATRIX3x2 MATRIX2x4 MATRIX4x2 MATRIX3x4 MATRIX4x3
 %token <lex> CENTROID FLAT SMOOTH
@@ -1511,6 +1511,21 @@
         $$.setBasic(EbtInt, qual, $1.line);
         $$.setAggregate(4);
     }
+    | UVEC2 {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtUInt, qual, $1.line);
+        $$.setAggregate(2);
+    }
+    | UVEC3 {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtUInt, qual, $1.line);
+        $$.setAggregate(3);
+    }
+    | UVEC4 {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtUInt, qual, $1.line);
+        $$.setAggregate(4);
+    }
     | MATRIX2 {
         FRAG_VERT_ONLY("mat2", $1.line);
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
diff --git a/src/compiler/glslang_lex.cpp b/src/compiler/glslang_lex.cpp
index 9ad2d25..1d5de42 100644
--- a/src/compiler/glslang_lex.cpp
+++ b/src/compiler/glslang_lex.cpp
@@ -383,8 +383,8 @@
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 224
-#define YY_END_OF_BUFFER 225
+#define YY_NUM_RULES 227
+#define YY_END_OF_BUFFER 228
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -392,93 +392,93 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[773] =
+static yyconst flex_int16_t yy_accept[779] =
     {   0,
-        0,    0,    0,    0,    0,    0,  225,  223,  222,  222,
-      207,  213,  218,  202,  203,  211,  210,  199,  208,  206,
-      212,  171,  171,  200,  196,  214,  201,  215,  219,  167,
-      204,  205,  217,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  197,  216,  198,  209,    3,    4,    3,
-      221,  224,  220,  193,  179,  198,  187,  182,  177,  185,
-      175,  186,  176,  174,    2,    1,  178,  173,  169,  170,
-        0,    0,  171,  205,  197,  204,  194,  190,  192,  191,
-      195,  167,  183,  189,  167,  167,  167,  167,  167,  167,
+        0,    0,    0,    0,    0,    0,  228,  226,  225,  225,
+      210,  216,  221,  205,  206,  214,  213,  202,  211,  209,
+      215,  174,  174,  203,  199,  217,  204,  218,  222,  170,
+      207,  208,  220,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  200,  219,  201,  212,    3,    4,    3,
+      224,  227,  223,  196,  182,  201,  190,  185,  180,  188,
+      178,  189,  179,  177,    2,    1,  181,  176,  172,  173,
+        0,    0,  174,  208,  200,  207,  197,  193,  195,  194,
+      198,  170,  186,  192,  170,  170,  170,  170,  170,  170,
 
-      167,  167,  167,  167,  167,  167,   17,  167,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-       20,  167,  167,   28,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  167,  167,  184,  188,    5,  220,    0,
-        1,  173,    0,    0,  172,  168,  180,  181,  167,  125,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,   18,  167,  167,  167,  167,  167,  167,
+      170,  170,  170,  170,  170,  170,   17,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+       20,  170,  170,   28,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  187,  191,    5,  223,
+        0,    1,  176,    0,    0,  175,  171,  183,  184,  170,
+      128,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,   18,  170,  170,  170,  170,  170,
 
-      167,  167,  167,  167,   32,  167,  167,  167,  167,  167,
-      167,  167,  167,  167,  167,   29,  167,  167,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,    0,
-      174,    0,  173,  167,  167,  167,   35,  167,  167,   23,
-      164,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,   21,  128,  167,  167,  167,  167,   26,  167,  167,
-      133,  145,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  142,    9,   40,   41,   42,  167,  167,
+      170,  170,  170,  170,  170,   32,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,   29,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,    0,  177,    0,  176,  170,  170,  170,   35,  170,
+      170,   23,  167,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,   21,  131,  170,  170,  170,  170,   26,
+      170,  170,  136,  148,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  145,    9,   40,   41,   42,
 
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  131,   36,  167,  167,   33,  167,  167,  167,
-      167,  167,  167,   52,   53,   54,   34,  167,  167,  167,
-      167,  167,  167,   15,   58,   59,   60,  167,  126,  167,
-      167,   12,  167,  167,  167,  167,  154,  155,  156,  167,
-       37,  167,  146,   31,  157,  158,  159,    7,  151,  152,
-      153,  167,  167,  167,   30,  149,  167,  167,  167,   55,
-       56,   57,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,   76,  167,  167,  167,  167,  167,  167,  167,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  134,   36,  170,  170,   33,  170,
+      170,  170,  170,  170,  170,  170,   52,   53,   54,   34,
+      170,  170,  170,  170,  170,  170,   15,   61,   62,   63,
+      170,  129,  170,  170,   12,  170,  170,  170,  170,  157,
+      158,  159,  170,   37,  170,  149,   31,  160,  161,  162,
+        7,  154,  155,  156,  170,  170,  170,   30,  152,  170,
+      170,  170,   55,   56,   57,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,   79,  170,  170,  170,  170,
 
-      143,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  127,  167,  167,  166,  167,  167,   19,  167,
-       81,  167,  167,  167,  167,   79,  167,  167,  167,  144,
-      139,   82,  167,  167,  167,  167,  167,  167,  134,  167,
-      167,  167,   43,   46,   48,   47,   44,   50,   49,   51,
-       45,  167,  167,  167,  167,  150,  132,  167,  167,  137,
-      167,  167,  167,   39,   77,  163,   27,  138,   68,  167,
-      148,   22,  167,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  167,  167,  167,   24,   38,  167,  167,
-      167,  167,  167,  167,   83,   84,   85,  167,  167,  167,
+      170,  170,  170,  146,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  130,  170,  170,  169,   58,
+       59,   60,  170,  170,   19,  170,   84,  170,  170,  170,
+      170,   82,  170,  170,  170,  147,  142,   85,  170,  170,
+      170,  170,  170,  170,  137,  170,  170,  170,   43,   46,
+       48,   47,   44,   50,   49,   51,   45,  170,  170,  170,
+      170,  153,  135,  170,  170,  140,  170,  170,  170,   39,
+       80,  166,   27,  141,   71,  170,  151,   22,  170,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,   24,   38,  170,  170,  170,  170,  170,  170,
 
-      167,  167,    8,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,  167,  167,  129,  167,  167,  167,  167,  167,
-       13,  167,  167,   14,  167,  167,  167,  167,   25,   69,
-       16,  140,   87,   88,   89,  167,  167,  167,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  135,  167,  167,
-      167,   71,   73,   70,  167,  167,  167,  167,  167,  167,
-      167,  130,   91,   92,   93,  167,  167,  147,  167,  136,
-      167,  167,   11,  167,  167,  167,  167,  167,  167,  167,
-      167,  167,   86,  141,    6,  167,  167,  167,  165,  167,
-       80,   10,  160,   61,   64,  167,  167,  167,  167,  167,
+       86,   87,   88,  170,  170,  170,  170,  170,    8,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      132,  170,  170,  170,  170,  170,   13,  170,  170,   14,
+      170,  170,  170,  170,   25,   72,   16,  143,   90,   91,
+       92,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  138,  170,  170,  170,   74,   76,   73,
+      170,  170,  170,  170,  170,  170,  170,  133,   94,   95,
+       96,  170,  170,  150,  170,  139,  170,  170,   11,  170,
+      170,  170,  170,  170,  170,  170,  170,  170,   89,  144,
+        6,  170,  170,  170,  168,  170,   83,   10,  163,   64,
 
-      167,  167,  167,  167,  167,  167,   72,  167,  167,  167,
-      167,   90,  167,  167,  167,  167,  167,  110,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-       78,  167,  167,  167,   94,  112,  167,  167,   74,  167,
-      167,  167,  167,  167,  167,  167,  105,  167,  167,  167,
-      167,  167,  167,  167,  119,  167,  167,  167,  167,   62,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      106,   95,  167,   96,  167,  167,  120,  167,  167,  167,
-      167,  167,  167,  167,  167,  167,  167,  167,  167,  167,
-      107,  167,  121,  167,  167,   97,   98,  167,  101,  167,
+       67,  170,  170,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,   75,  170,  170,  170,  170,   93,  170,  170,
+      170,  170,  170,  113,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,   81,  170,  170,  170,
+       97,  115,  170,  170,   77,  170,  170,  170,  170,  170,
+      170,  170,  108,  170,  170,  170,  170,  170,  170,  170,
+      122,  170,  170,  170,  170,   65,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  109,   98,  170,   99,
+      170,  170,  123,  170,  170,  170,  170,  170,  170,  170,
+      170,  170,  170,  170,  170,  170,  110,  170,  124,  170,
 
-      102,  167,  167,  167,  167,   75,  167,  167,  167,   67,
-      167,   65,  116,  167,   99,  100,  167,  167,  167,  167,
-      167,  167,  167,  167,  114,  117,  108,  167,  167,  167,
-      167,  167,  167,  167,  115,  118,  167,  167,  111,  167,
-      167,  161,  167,  167,   66,  167,  113,  167,  167,  167,
-      167,  167,  122,  167,  167,  167,  167,  167,  123,  167,
-      167,  167,  124,  103,  104,  167,  167,   63,  167,  162,
-      109,    0
+      170,  100,  101,  170,  104,  170,  105,  170,  170,  170,
+      170,   78,  170,  170,  170,   70,  170,   68,  119,  170,
+      102,  103,  170,  170,  170,  170,  170,  170,  170,  170,
+      117,  120,  111,  170,  170,  170,  170,  170,  170,  170,
+      118,  121,  170,  170,  114,  170,  170,  164,  170,  170,
+       69,  170,  116,  170,  170,  170,  170,  170,  125,  170,
+      170,  170,  170,  170,  126,  170,  170,  170,  127,  106,
+      107,  170,  170,   66,  170,  165,  112,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -525,185 +525,187 @@
         1
     } ;
 
-static yyconst flex_int16_t yy_base[778] =
+static yyconst flex_int16_t yy_base[784] =
     {   0,
-        0,    0,   69,   70,   79,    0, 1002, 1003, 1003, 1003,
-      976,   49,  145, 1003, 1003,  975,  142, 1003,  141,  139,
-      154,  167,  176,  973, 1003,  176,  973,   51, 1003,    0,
-     1003, 1003,  136,  116,  112,  159,  157,  156,  173,  940,
-      174,  179,  939,  175,  189,  933,  185,  946,  197,  203,
-      204,  209,  113, 1003,  186, 1003, 1003, 1003, 1003,  979,
-     1003, 1003,    0, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
-     1003, 1003, 1003,  255, 1003,    0, 1003,  262,  280,  298,
-      317,    0,  332, 1003, 1003, 1003,  967, 1003, 1003, 1003,
-      966,    0, 1003, 1003,  929,  934,  206,  931,  939,  938,
+        0,    0,   69,   70,   79,    0, 1008, 1009, 1009, 1009,
+      982,   49,  145, 1009, 1009,  981,  142, 1009,  141,  139,
+      154,  167,  176,  979, 1009,  176,  979,   51, 1009,    0,
+     1009, 1009,  136,  116,  112,  159,  157,  156,  173,  946,
+      174,  179,  945,  175,  189,  939,  185,  952,  197,  203,
+      204,  209,  113, 1009,  186, 1009, 1009, 1009, 1009,  985,
+     1009, 1009,    0, 1009, 1009, 1009, 1009, 1009, 1009, 1009,
+     1009, 1009, 1009,  255, 1009,    0, 1009,  262,  280,  298,
+      317,    0,  332, 1009, 1009, 1009,  973, 1009, 1009, 1009,
+      972,    0, 1009, 1009,  935,  940,  227,  937,  945,  944,
 
-      925,  928,  939,  233,  933,  921,  918,  931,  918,  915,
-      915,  921,  237,  248,  915,  925,  911,  917,  920,  921,
-        0,  913,  923,  300,  922,  917,  109,  903,  916,  907,
-      268,  900,  262,  912,  914,  246,  903,  900,  889,  898,
-      206,  264,  902,  898,  900,  889,  892,  230,  279,  315,
-      890,  902,  150,  895,  894, 1003, 1003, 1003,    0,  356,
-        0,  366,  384,  391,  400,    0, 1003, 1003,  893,    0,
-      889,  884,  888,  897,  894,  294,  878,  878,  889,  881,
-      264,  891,  888,  888,  886,  883,  875,  881,  868,  866,
-      878,  864,  880,    0,  877,  865,  872,  869,  873,  874,
+      931,  934,  945,  234,  939,  927,  924,  937,  924,  921,
+      921,  927,  237,  206,  921,  931,  917,  923,  926,  927,
+        0,  919,  929,  300,  928,  923,  109,  909,  922,  913,
+      234,  906,  261,  918,  920,  264,  909,  906,  895,  904,
+      262,  281,  908,  904,  906,  895,  898,  249,  271,  315,
+      907,  895,  907,  150,  900,  899, 1009, 1009, 1009,    0,
+      356,    0,  366,  384,  391,  400,    0, 1009, 1009,  898,
+        0,  894,  889,  893,  902,  899,  294,  883,  883,  894,
+      886,  280,  896,  893,  893,  891,  888,  880,  886,  873,
+      871,  883,  869,  885,    0,  882,  870,  877,  874,  878,
 
-      867,  864,  853,  852,  865,  868,  856,  864,  859,  850,
-      371,  855,  858,  849,  856,  845,  849,  840,  854,  853,
-      844,  850,  283,  834,  837,  835,  845,  835,  830,  828,
-      830,  840,  826,  828,  825,  836,  835,  838,  820,  313,
-      828,  824,  822,  811,  374,  829,  831,  820,  812,  407,
-      414,  421,  428,  809,  819,  818,    0,  816,  433,    0,
-        0,  809,  807,  807,  808,  803,  811,  800,  817,  806,
-      436,    0,    0,  800,  810,  809,  809,    0,  794,  439,
-        0,    0,  796,  442,  803,  804,  795,  789,  788,  789,
-      788,  788,  445,    0,    0,  780,  779,  778,  780,  781,
+      879,  872,  869,  858,  857,  870,  873,  861,  869,  864,
+      855,  371,  860,  863,  854,  861,  850,  854,  845,  859,
+      858,  849,  855,  299,  839,  842,  840,  850,  840,  835,
+      833,  835,  845,  831,  833,  830,  841,  840,  843,  825,
+      313,  833,  829,  827,  836,  815,  374,  833,  835,  824,
+      816,  407,  414,  421,  428,  813,  823,  822,    0,  820,
+      433,    0,    0,  813,  811,  811,  812,  807,  815,  804,
+      821,  810,  436,    0,    0,  804,  814,  813,  813,    0,
+      798,  439,    0,    0,  800,  442,  807,  808,  799,  793,
+      792,  793,  792,  792,  445,    0,    0,  784,  783,  782,
 
-      786,  780,  776,  789,  784,  784,  782,  781,  775,  769,
-      771,  770,  774,  766,  769,  764,  772,  777,  765,  762,
-      774,  765,    0,    0,  771,  767,    0,  759,  759,  764,
-      755,  762,  759,    0,    0,    0,    0,  749,  761,  760,
-      759,  760,  760,    0,    0,    0,    0,  747,    0,  755,
-      746,    0,  745,  746,  740,  750,    0,    0,    0,  741,
-        0,  737,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  747,  449,  746,    0,    0,  744,  740,  737,    0,
-        0,    0,  451,  454,  457,  735,  731,  736,  727,  725,
-      738,  723,    0,  723,  736,  725,  721,  727,  722,  729,
+      784,  785,  790,  784,  780,  793,  788,  788,  786,  785,
+      779,  773,  775,  774,  778,  770,  773,  768,  776,  781,
+      769,  766,  778,  769,    0,    0,  775,  771,    0,  763,
+      763,  768,  759,  766,  448,  763,    0,    0,    0,    0,
+      753,  765,  764,  763,  764,  764,    0,    0,    0,    0,
+      751,    0,  759,  750,    0,  749,  750,  744,  754,    0,
+        0,    0,  745,    0,  741,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  751,  452,  750,    0,    0,  748,
+      744,  741,    0,    0,    0,  454,  457,  460,  739,  735,
+      740,  731,  729,  742,  727,    0,  727,  740,  729,  725,
 
-        0,  727,  724,  728,  712,  710,  713,  719,  725,  720,
-      719,  707,    0,  709,  710,    0,  707,  710,    0,  704,
-        0,  717,  697,  706,  701,    0,  694,  694,  707,    0,
-      709,    0,  464,  721,  720,  719,  687,  686,    0,  703,
-      702,  697,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  686,  699,  686,  683,    0,    0,  688,  687,    0,
-      684,  691,  690,    0,  676,    0,    0,    0,    0,  673,
-        0,    0,  672,  683,  467,  676,  682,  681,  678,  673,
-      670,  663,  663,  676,  661,  673,    0,    0,  666,  688,
-      687,  686,  654,  653,  341,  449,    0,  665,  668,  666,
+      731,  726,  733,    0,  731,  728,  732,  716,  714,  717,
+      723,  729,  724,  723,  711,    0,  713,  714,    0,    0,
+        0,    0,  711,  714,    0,  708,    0,  721,  701,  710,
+      705,    0,  698,  698,  711,    0,  713,    0,  467,  725,
+      724,  723,  691,  690,    0,  707,  706,  701,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  690,  703,  690,
+      687,    0,    0,  692,  691,    0,  688,  695,  694,    0,
+      680,    0,    0,    0,    0,  677,    0,    0,  676,  687,
+      470,  680,  686,  685,  682,  677,  674,  667,  667,  680,
+      665,  677,    0,    0,  670,  692,  691,  690,  658,  657,
 
-      655,  651,    0,  663,  660,  659,  649,  648,  638,  655,
-      641,  472,  649,  652,    0,  668,  667,  666,  634,  633,
-        0,  647,  634,    0,  644,  637,  638,  641,    0,    0,
-        0,    0,  660,  659,    0,  637,  640,  625,  632,  623,
-      630,  631,  631,  630,  616,  482,  628,    0,  629,  618,
-      617,    0,    0,    0,  641,  640,  639,  607,  606,  602,
-      610,    0,  637,  636,    0,  614,  617,    0,  489,    0,
-      595,  604,    0,  600,  599,  608,  608,  596,  610,  594,
-      608,  603,    0,    0,    0,  619,  618,  586,    0,  586,
-        0,    0,  472,  477,  609,  596,  599,  582,  594,  582,
+      341,  452,    0,  669,  672,  670,  659,  655,    0,  667,
+      664,  663,  653,  652,  642,  659,  645,  475,  653,  656,
+        0,  672,  671,  670,  638,  637,    0,  651,  638,    0,
+      648,  641,  642,  645,    0,    0,    0,    0,  664,  663,
+        0,  641,  644,  629,  636,  627,  634,  635,  635,  634,
+      620,  485,  632,    0,  633,  622,  621,    0,    0,    0,
+      645,  644,  643,  611,  610,  606,  614,    0,  641,  640,
+        0,  618,  621,    0,  492,    0,  599,  608,    0,  604,
+      603,  612,  612,  600,  614,  598,  612,  607,    0,    0,
+        0,  623,  622,  590,    0,  590,    0,    0,  475,  480,
 
-      581,  590,  590,  606,  605,  573,    0,  573,  574,  573,
-      583,    0,  586,  582,  584,  580,  567,  597,  203,  575,
-      571,  563,  570,  582,  571,  567,  569,  567,  567,  566,
-        0,  554,  553,  563,    0,  582,  208,  560,    0,  564,
-      563,  547,  539,  547,  537,  545,    0,  542,  562,  551,
-      549,  534,  537,  551,  566,  547,  548,  545,  542,    0,
-      530,  544,  543,  527,  526,  546,  535,  533,  515,  514,
-        0,  541,  514,  539,  512,  516,  546,  527,  524,  523,
-      526,  522,  509,  506,  519,  504,  505,  507,  496,  495,
-        0,  501,  531,  512,  509,    0,    0,  505,    0,  504,
+      613,  600,  603,  586,  598,  586,  585,  594,  594,  610,
+      609,  577,    0,  577,  578,  577,  587,    0,  590,  586,
+      588,  584,  571,  601,  203,  579,  575,  567,  574,  586,
+      575,  571,  573,  571,  571,  570,    0,  558,  557,  567,
+        0,  586,  208,  564,    0,  568,  567,  551,  543,  551,
+      541,  549,    0,  546,  566,  555,  553,  538,  541,  555,
+      570,  551,  552,  549,  546,    0,  534,  548,  547,  531,
+      530,  550,  539,  537,  519,  518,    0,  545,  518,  543,
+      516,  520,  550,  531,  528,  527,  530,  526,  513,  510,
+      523,  508,  509,  511,  500,  499,    0,  505,  535,  516,
 
-        0,  510,  494,  491,  492,    0,  484,  492,  489,  509,
-      489,    0,    0,  501,    0,    0,  500,  484,  481,  482,
-      496,  495,  472,  478,    0,    0,  498,  471,  490,  482,
-      468,  477,  462,  458,    0,    0,  469,  466,    0,  465,
-      457,    0,  441,  459,    0,  459,    0,  448,  434,  429,
-      347,  353,    0,  348,  346,  299,  296,  292,    0,  296,
-      284,  266,    0,    0,    0,  211,  158,    0,  126,    0,
-        0, 1003,  518,  520,  522,  526,  171
+      513,    0,    0,  509,    0,  508,    0,  514,  498,  495,
+      496,    0,  488,  496,  493,  513,  493,    0,    0,  505,
+        0,    0,  504,  488,  485,  486,  500,  499,  476,  482,
+        0,    0,  502,  475,  494,  486,  472,  481,  468,  472,
+        0,    0,  473,  472,    0,  472,  461,    0,  445,  466,
+        0,  470,    0,  454,  438,  437,  423,  369,    0,  350,
+      363,  312,  301,  280,    0,  296,  252,  230,    0,    0,
+        0,  208,  158,    0,  126,    0,    0, 1009,  521,  523,
+      525,  529,  171
     } ;
 
-static yyconst flex_int16_t yy_def[778] =
+static yyconst flex_int16_t yy_def[784] =
     {   0,
-      772,    1,  773,  773,  772,    5,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  774,
-      772,  772,  772,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  775,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  776,  772,  772,  772,  772,
-      772,  777,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  774,  772,  772,  774,  774,  774,  774,  774,  774,
+      778,    1,  779,  779,  778,    5,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  780,
+      778,  778,  778,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  781,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  782,  778,  778,  778,  778,
+      778,  783,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  780,  778,  778,  780,  780,  780,  780,  780,  780,
 
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  772,  772,  772,  775,  772,
-      776,  772,  772,  772,  772,  777,  772,  772,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  778,  778,  778,  781,
+      778,  782,  778,  778,  778,  778,  783,  778,  778,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
 
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  772,
-      772,  772,  772,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  778,  778,  778,  778,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
 
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
 
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
 
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
 
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
 
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,    0,  772,  772,  772,  772,  772
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,    0,  778,  778,
+      778,  778,  778
     } ;
 
-static yyconst flex_int16_t yy_nxt[1075] =
+static yyconst flex_int16_t yy_nxt[1081] =
     {   0,
         8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
        18,   19,   20,   21,   22,   23,   23,   23,   23,   23,
@@ -722,110 +724,110 @@
        63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
        63,   63,   63,   63,   63,   63,    8,    8,    8,    8,
        67,   70,   72,   74,   74,   74,   74,   74,   74,   74,
-       93,   95,   75,  154,  209,   73,   71,   76,   98,   68,
-       99,  155,  210,  166,  100,   96,   97,   94,   77,   78,
-       85,   79,   79,   79,   79,   79,   79,   80,   78,  771,
+       93,   95,   75,  155,  210,   73,   71,   76,   98,   68,
+       99,  156,  211,  167,  100,   96,   97,   94,   77,   78,
+       85,   79,   79,   79,   79,   79,   79,   80,   78,  777,
        83,   83,   83,   83,   83,   83,   83,   86,   81,   87,
 
-       88,  246,  101,  247,  105,   82,  102,   81,  106,  109,
-      156,  110,  103,  107,   81,  104,  112,  118,  128,  108,
-      111,  770,  129,   81,  113,  119,  114,  121,  133,  115,
-      122,   82,  130,  123,  124,  116,  120,  649,  125,  650,
-      137,  126,  666,  134,  667,  131,  135,  138,  139,  229,
-      144,  140,  151,  145,  157,  148,  152,  141,  142,  149,
-      143,  146,  171,  150,  230,  153,  172,  769,  147,   74,
-       74,   74,   74,   74,   74,   74,  162,  162,  162,  162,
-      162,  162,  162,  179,  238,  239,  160,  180,  181,  222,
-      190,  192,   78,  163,   79,   79,   79,   79,   79,   79,
+       88,  248,  101,  249,  105,   82,  102,   81,  106,  109,
+      157,  110,  103,  107,   81,  104,  112,  118,  128,  108,
+      111,  776,  129,   81,  113,  119,  114,  121,  133,  115,
+      122,   82,  130,  123,  124,  116,  120,  655,  125,  656,
+      137,  126,  672,  134,  673,  131,  135,  138,  139,  193,
+      144,  140,  152,  145,  158,  148,  153,  141,  142,  149,
+      143,  146,  194,  150,  775,  154,  151,  774,  147,   74,
+       74,   74,   74,   74,   74,   74,  163,  163,  163,  163,
+      163,  163,  163,  172,  180,  215,  161,  173,  181,  182,
+      191,  216,   78,  164,   79,   79,   79,   79,   79,   79,
 
-       80,  191,  160,  768,  193,  223,  224,  217,  231,  163,
-       78,   81,   80,   80,   80,   80,   80,   80,   80,  214,
-      218,  232,  219,  266,  267,  215,  164,   81,  164,   81,
-      240,  165,  165,  165,  165,  165,  165,  165,  241,  310,
-      767,  260,  766,  311,   78,   81,   83,   83,   83,   83,
-       83,   83,   83,  202,  261,  765,  203,  204,  242,  764,
-      205,  328,  206,   81,  763,  250,  243,  250,  538,  329,
-      251,  251,  251,  251,  251,  251,  251,  762,  539,   81,
-      162,  162,  162,  162,  162,  162,  162,  296,  297,  298,
-      334,  335,  336,  252,  761,  252,  760,  163,  253,  253,
+       80,  192,  161,  239,  240,  230,  218,  223,  773,  164,
+       78,   81,   80,   80,   80,   80,   80,   80,   80,  219,
+      231,  220,  241,  224,  225,  232,  165,   81,  165,   81,
+      242,  166,  166,  166,  166,  166,  166,  166,  233,  268,
+      269,  262,  772,  771,   78,   81,   83,   83,   83,   83,
+       83,   83,   83,  203,  263,  312,  204,  205,  243,  313,
+      206,  330,  207,   81,  770,  252,  244,  252,  544,  331,
+      253,  253,  253,  253,  253,  253,  253,  769,  545,   81,
+      163,  163,  163,  163,  163,  163,  163,  298,  299,  300,
+      337,  338,  339,  254,  768,  254,  767,  164,  255,  255,
 
-      253,  253,  253,  253,  253,  165,  165,  165,  165,  165,
-      165,  165,  759,  163,  165,  165,  165,  165,  165,  165,
-      165,  251,  251,  251,  251,  251,  251,  251,  251,  251,
-      251,  251,  251,  251,  251,  253,  253,  253,  253,  253,
-      253,  253,  253,  253,  253,  253,  253,  253,  253,  345,
-      346,  347,  357,  358,  359,  365,  366,  367,  369,  370,
-      371,  380,  381,  382,  434,  435,  436,  443,  444,  445,
-      446,  447,  448,  449,  450,  451,  540,  437,  438,  490,
-      491,  492,  516,  517,  518,  758,  541,  555,  556,  557,
-      757,  756,  493,  494,  755,  519,  520,  586,  587,  622,
+      255,  255,  255,  255,  255,  166,  166,  166,  166,  166,
+      166,  166,  766,  164,  166,  166,  166,  166,  166,  166,
+      166,  253,  253,  253,  253,  253,  253,  253,  253,  253,
+      253,  253,  253,  253,  253,  255,  255,  255,  255,  255,
+      255,  255,  255,  255,  255,  255,  255,  255,  255,  348,
+      349,  350,  360,  361,  362,  368,  369,  370,  372,  373,
+      374,  383,  384,  385,  420,  421,  422,  440,  441,  442,
+      449,  450,  451,  452,  453,  454,  455,  456,  457,  546,
+      443,  444,  496,  497,  498,  522,  523,  524,  765,  547,
+      561,  562,  563,  764,  763,  499,  500,  762,  525,  526,
 
-      558,  559,  754,  560,  604,  605,  753,  752,  751,  623,
-      588,  624,  750,  625,  626,  749,  748,  606,   58,   58,
-       58,   58,   92,   92,  159,  159,  161,  747,  161,  161,
+      592,  593,  628,  564,  565,  761,  566,  610,  611,  760,
+      759,  758,  629,  594,  630,  757,  631,  632,  756,  755,
+      612,   58,   58,   58,   58,   92,   92,  160,  160,  162,
+      754,  162,  162,  753,  752,  751,  750,  749,  748,  747,
       746,  745,  744,  743,  742,  741,  740,  739,  738,  737,
       736,  735,  734,  733,  732,  731,  730,  729,  728,  727,
       726,  725,  724,  723,  722,  721,  720,  719,  718,  717,
       716,  715,  714,  713,  712,  711,  710,  709,  708,  707,
       706,  705,  704,  703,  702,  701,  700,  699,  698,  697,
       696,  695,  694,  693,  692,  691,  690,  689,  688,  687,
+
       686,  685,  684,  683,  682,  681,  680,  679,  678,  677,
-
-      676,  675,  674,  673,  672,  671,  670,  669,  668,  665,
-      664,  663,  662,  661,  660,  659,  658,  657,  656,  655,
-      654,  653,  652,  651,  648,  647,  646,  645,  644,  643,
+      676,  675,  674,  671,  670,  669,  668,  667,  666,  665,
+      664,  663,  662,  661,  660,  659,  658,  657,  654,  653,
+      652,  651,  650,  649,  648,  647,  646,  645,  644,  643,
       642,  641,  640,  639,  638,  637,  636,  635,  634,  633,
-      632,  631,  630,  629,  628,  627,  621,  620,  619,  618,
-      617,  616,  615,  614,  613,  612,  611,  610,  609,  608,
-      607,  603,  602,  601,  600,  599,  598,  597,  596,  595,
-      594,  593,  592,  591,  590,  589,  585,  584,  583,  582,
+      627,  626,  625,  624,  623,  622,  621,  620,  619,  618,
+      617,  616,  615,  614,  613,  609,  608,  607,  606,  605,
+      604,  603,  602,  601,  600,  599,  598,  597,  596,  595,
+      591,  590,  589,  588,  587,  586,  585,  584,  583,  582,
       581,  580,  579,  578,  577,  576,  575,  574,  573,  572,
-      571,  570,  569,  568,  567,  566,  565,  564,  563,  562,
 
-      561,  554,  553,  552,  551,  550,  549,  548,  547,  546,
-      545,  544,  543,  542,  537,  536,  535,  534,  533,  532,
-      531,  530,  529,  528,  527,  526,  525,  524,  523,  522,
-      521,  515,  514,  513,  512,  511,  510,  509,  508,  507,
-      506,  505,  504,  503,  502,  501,  500,  499,  498,  497,
-      496,  495,  489,  488,  487,  486,  485,  484,  483,  482,
+      571,  570,  569,  568,  567,  560,  559,  558,  557,  556,
+      555,  554,  553,  552,  551,  550,  549,  548,  543,  542,
+      541,  540,  539,  538,  537,  536,  535,  534,  533,  532,
+      531,  530,  529,  528,  527,  521,  520,  519,  518,  517,
+      516,  515,  514,  513,  512,  511,  510,  509,  508,  507,
+      506,  505,  504,  503,  502,  501,  495,  494,  493,  492,
+      491,  490,  489,  488,  487,  486,  485,  484,  483,  482,
       481,  480,  479,  478,  477,  476,  475,  474,  473,  472,
       471,  470,  469,  468,  467,  466,  465,  464,  463,  462,
-      461,  460,  459,  458,  457,  456,  455,  454,  453,  452,
-      442,  441,  440,  439,  433,  432,  431,  430,  429,  428,
+      461,  460,  459,  458,  448,  447,  446,  445,  439,  438,
 
-      427,  426,  425,  424,  423,  422,  421,  420,  419,  418,
-      417,  416,  415,  414,  413,  412,  411,  410,  409,  408,
-      407,  406,  405,  404,  403,  402,  401,  400,  399,  398,
-      397,  396,  395,  394,  393,  392,  391,  390,  389,  388,
-      387,  386,  385,  384,  383,  379,  378,  377,  376,  375,
-      374,  373,  372,  368,  364,  363,  362,  361,  360,  356,
-      355,  354,  353,  352,  351,  350,  349,  348,  344,  343,
-      342,  341,  340,  339,  338,  337,  333,  332,  331,  330,
-      327,  326,  325,  324,  323,  322,  321,  320,  319,  318,
-      317,  316,  315,  314,  313,  312,  309,  308,  307,  306,
+      437,  436,  435,  434,  433,  432,  431,  430,  429,  428,
+      427,  426,  425,  424,  423,  419,  418,  417,  416,  415,
+      414,  413,  412,  411,  410,  409,  408,  407,  406,  405,
+      404,  403,  402,  401,  400,  399,  398,  397,  396,  395,
+      394,  393,  392,  391,  390,  389,  388,  387,  386,  382,
+      381,  380,  379,  378,  377,  376,  375,  371,  367,  366,
+      365,  364,  363,  359,  358,  357,  356,  355,  354,  353,
+      352,  351,  347,  346,  345,  344,  343,  342,  341,  340,
+      336,  335,  334,  333,  332,  329,  328,  327,  326,  325,
+      324,  323,  322,  321,  320,  319,  318,  317,  316,  315,
 
-      305,  304,  303,  302,  301,  300,  299,  295,  294,  293,
-      292,  291,  290,  289,  288,  287,  286,  285,  284,  283,
-      282,  281,  280,  279,  278,  277,  276,  275,  274,  273,
-      272,  271,  270,  269,  268,  265,  264,  263,  262,  259,
-      258,  257,  256,  255,  254,  249,  248,  245,  244,  237,
-      236,  235,  234,  233,  228,  227,  226,  225,  221,  220,
-      216,  213,  212,  211,  208,  207,  201,  200,  199,  198,
-      197,  196,  195,  194,  189,  188,  187,  186,  185,  184,
-      183,  182,  178,  177,  176,  175,  174,  173,  170,  169,
-      168,  167,  158,  136,  132,  127,  117,   89,   84,   69,
+      314,  311,  310,  309,  308,  307,  306,  305,  304,  303,
+      302,  301,  297,  296,  295,  294,  293,  292,  291,  290,
+      289,  288,  287,  286,  285,  284,  283,  282,  281,  280,
+      279,  278,  277,  276,  275,  274,  273,  272,  271,  270,
+      267,  266,  265,  264,  261,  260,  259,  258,  257,  256,
+      251,  250,  247,  246,  245,  238,  237,  236,  235,  234,
+      229,  228,  227,  226,  222,  221,  217,  214,  213,  212,
+      209,  208,  202,  201,  200,  199,  198,  197,  196,  195,
+      190,  189,  188,  187,  186,  185,  184,  183,  179,  178,
+      177,  176,  175,  174,  171,  170,  169,  168,  159,  136,
 
-       64,  772,    7,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772
+      132,  127,  117,   89,   84,   69,   64,  778,    7,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778
     } ;
 
-static yyconst flex_int16_t yy_chk[1075] =
+static yyconst flex_int16_t yy_chk[1081] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -845,110 +847,110 @@
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        13,   17,   19,   20,   20,   20,   20,   20,   20,   20,
        33,   34,   21,   53,  127,   19,   17,   21,   35,   13,
-       35,   53,  127,  777,   35,   34,   34,   33,   21,   22,
-       26,   22,   22,   22,   22,   22,   22,   22,   23,  769,
+       35,   53,  127,  783,   35,   34,   34,   33,   21,   22,
+       26,   22,   22,   22,   22,   22,   22,   22,   23,  775,
        23,   23,   23,   23,   23,   23,   23,   26,   22,   26,
 
-       26,  153,   36,  153,   37,   22,   36,   23,   37,   38,
+       26,  154,   36,  154,   37,   22,   36,   23,   37,   38,
        55,   38,   36,   37,   22,   36,   39,   41,   44,   37,
-       38,  767,   44,   23,   39,   41,   39,   42,   47,   39,
-       42,   22,   45,   42,   42,   39,   41,  619,   42,  619,
-       49,   42,  637,   47,  637,   45,   47,   49,   49,  141,
+       38,  773,   44,   23,   39,   41,   39,   42,   47,   39,
+       42,   22,   45,   42,   42,   39,   41,  625,   42,  625,
+       49,   42,  643,   47,  643,   45,   47,   49,   49,  114,
        50,   49,   52,   50,   55,   51,   52,   49,   49,   51,
-       49,   50,   97,   51,  141,   52,   97,  766,   50,   74,
+       49,   50,  114,   51,  772,   52,   51,  768,   50,   74,
        74,   74,   74,   74,   74,   74,   78,   78,   78,   78,
-       78,   78,   78,  104,  148,  148,   74,  104,  104,  136,
-      113,  114,   79,   78,   79,   79,   79,   79,   79,   79,
+       78,   78,   78,   97,  104,  131,   74,   97,  104,  104,
+      113,  131,   79,   78,   79,   79,   79,   79,   79,   79,
 
-       79,  113,   74,  762,  114,  136,  136,  133,  142,   78,
-       80,   79,   80,   80,   80,   80,   80,   80,   80,  131,
-      133,  142,  133,  181,  181,  131,   81,   79,   81,   80,
-      149,   81,   81,   81,   81,   81,   81,   81,  149,  223,
-      761,  176,  760,  223,   83,   80,   83,   83,   83,   83,
-       83,   83,   83,  124,  176,  758,  124,  124,  150,  757,
-      124,  240,  124,   83,  756,  160,  150,  160,  495,  240,
-      160,  160,  160,  160,  160,  160,  160,  755,  495,   83,
-      162,  162,  162,  162,  162,  162,  162,  211,  211,  211,
-      245,  245,  245,  163,  754,  163,  752,  162,  163,  163,
+       79,  113,   74,  148,  148,  141,  133,  136,  767,   78,
+       80,   79,   80,   80,   80,   80,   80,   80,   80,  133,
+      141,  133,  149,  136,  136,  142,   81,   79,   81,   80,
+      149,   81,   81,   81,   81,   81,   81,   81,  142,  182,
+      182,  177,  766,  764,   83,   80,   83,   83,   83,   83,
+       83,   83,   83,  124,  177,  224,  124,  124,  150,  224,
+      124,  241,  124,   83,  763,  161,  150,  161,  501,  241,
+      161,  161,  161,  161,  161,  161,  161,  762,  501,   83,
+      163,  163,  163,  163,  163,  163,  163,  212,  212,  212,
+      247,  247,  247,  164,  761,  164,  760,  163,  164,  164,
 
-      163,  163,  163,  163,  163,  164,  164,  164,  164,  164,
-      164,  164,  751,  162,  165,  165,  165,  165,  165,  165,
-      165,  250,  250,  250,  250,  250,  250,  250,  251,  251,
-      251,  251,  251,  251,  251,  252,  252,  252,  252,  252,
-      252,  252,  253,  253,  253,  253,  253,  253,  253,  259,
-      259,  259,  271,  271,  271,  280,  280,  280,  284,  284,
-      284,  293,  293,  293,  373,  373,  373,  383,  383,  383,
-      384,  384,  384,  385,  385,  385,  496,  373,  373,  433,
-      433,  433,  475,  475,  475,  750,  496,  512,  512,  512,
-      749,  748,  433,  433,  746,  475,  475,  546,  546,  593,
+      164,  164,  164,  164,  164,  165,  165,  165,  165,  165,
+      165,  165,  758,  163,  166,  166,  166,  166,  166,  166,
+      166,  252,  252,  252,  252,  252,  252,  252,  253,  253,
+      253,  253,  253,  253,  253,  254,  254,  254,  254,  254,
+      254,  254,  255,  255,  255,  255,  255,  255,  255,  261,
+      261,  261,  273,  273,  273,  282,  282,  282,  286,  286,
+      286,  295,  295,  295,  335,  335,  335,  376,  376,  376,
+      386,  386,  386,  387,  387,  387,  388,  388,  388,  502,
+      376,  376,  439,  439,  439,  481,  481,  481,  757,  502,
+      518,  518,  518,  756,  755,  439,  439,  754,  481,  481,
 
-      512,  512,  744,  512,  569,  569,  743,  741,  740,  593,
-      546,  594,  738,  594,  594,  737,  734,  569,  773,  773,
-      773,  773,  774,  774,  775,  775,  776,  733,  776,  776,
-      732,  731,  730,  729,  728,  727,  724,  723,  722,  721,
-      720,  719,  718,  717,  714,  711,  710,  709,  708,  707,
-      705,  704,  703,  702,  700,  698,  695,  694,  693,  692,
+      552,  552,  599,  518,  518,  752,  518,  575,  575,  750,
+      749,  747,  599,  552,  600,  746,  600,  600,  744,  743,
+      575,  779,  779,  779,  779,  780,  780,  781,  781,  782,
+      740,  782,  782,  739,  738,  737,  736,  735,  734,  733,
+      730,  729,  728,  727,  726,  725,  724,  723,  720,  717,
+      716,  715,  714,  713,  711,  710,  709,  708,  706,  704,
+      701,  700,  699,  698,  696,  695,  694,  693,  692,  691,
       690,  689,  688,  687,  686,  685,  684,  683,  682,  681,
-      680,  679,  678,  677,  676,  675,  674,  673,  672,  670,
-      669,  668,  667,  666,  665,  664,  663,  662,  661,  659,
-      658,  657,  656,  655,  654,  653,  652,  651,  650,  649,
+      680,  679,  678,  676,  675,  674,  673,  672,  671,  670,
+      669,  668,  667,  665,  664,  663,  662,  661,  660,  659,
 
-      648,  646,  645,  644,  643,  642,  641,  640,  638,  636,
-      634,  633,  632,  630,  629,  628,  627,  626,  625,  624,
-      623,  622,  621,  620,  618,  617,  616,  615,  614,  613,
-      611,  610,  609,  608,  606,  605,  604,  603,  602,  601,
-      600,  599,  598,  597,  596,  595,  590,  588,  587,  586,
-      582,  581,  580,  579,  578,  577,  576,  575,  574,  572,
-      571,  567,  566,  564,  563,  561,  560,  559,  558,  557,
-      556,  555,  551,  550,  549,  547,  545,  544,  543,  542,
-      541,  540,  539,  538,  537,  536,  534,  533,  528,  527,
-      526,  525,  523,  522,  520,  519,  518,  517,  516,  514,
+      658,  657,  656,  655,  654,  652,  651,  650,  649,  648,
+      647,  646,  644,  642,  640,  639,  638,  636,  635,  634,
+      633,  632,  631,  630,  629,  628,  627,  626,  624,  623,
+      622,  621,  620,  619,  617,  616,  615,  614,  612,  611,
+      610,  609,  608,  607,  606,  605,  604,  603,  602,  601,
+      596,  594,  593,  592,  588,  587,  586,  585,  584,  583,
+      582,  581,  580,  578,  577,  573,  572,  570,  569,  567,
+      566,  565,  564,  563,  562,  561,  557,  556,  555,  553,
+      551,  550,  549,  548,  547,  546,  545,  544,  543,  542,
+      540,  539,  534,  533,  532,  531,  529,  528,  526,  525,
 
-      513,  511,  510,  509,  508,  507,  506,  505,  504,  502,
-      501,  500,  499,  498,  494,  493,  492,  491,  490,  489,
-      486,  485,  484,  483,  482,  481,  480,  479,  478,  477,
-      476,  474,  473,  470,  465,  463,  462,  461,  459,  458,
-      455,  454,  453,  452,  442,  441,  440,  438,  437,  436,
-      435,  434,  431,  429,  428,  427,  425,  424,  423,  422,
-      420,  418,  417,  415,  414,  412,  411,  410,  409,  408,
-      407,  406,  405,  404,  403,  402,  400,  399,  398,  397,
-      396,  395,  394,  392,  391,  390,  389,  388,  387,  386,
-      379,  378,  377,  374,  372,  362,  360,  356,  355,  354,
+      524,  523,  522,  520,  519,  517,  516,  515,  514,  513,
+      512,  511,  510,  508,  507,  506,  505,  504,  500,  499,
+      498,  497,  496,  495,  492,  491,  490,  489,  488,  487,
+      486,  485,  484,  483,  482,  480,  479,  476,  471,  469,
+      468,  467,  465,  464,  461,  460,  459,  458,  448,  447,
+      446,  444,  443,  442,  441,  440,  437,  435,  434,  433,
+      431,  430,  429,  428,  426,  424,  423,  418,  417,  415,
+      414,  413,  412,  411,  410,  409,  408,  407,  406,  405,
+      403,  402,  401,  400,  399,  398,  397,  395,  394,  393,
+      392,  391,  390,  389,  382,  381,  380,  377,  375,  365,
 
-      353,  351,  350,  348,  343,  342,  341,  340,  339,  338,
-      333,  332,  331,  330,  329,  328,  326,  325,  322,  321,
-      320,  319,  318,  317,  316,  315,  314,  313,  312,  311,
-      310,  309,  308,  307,  306,  305,  304,  303,  302,  301,
-      300,  299,  298,  297,  296,  292,  291,  290,  289,  288,
-      287,  286,  285,  283,  279,  277,  276,  275,  274,  270,
-      269,  268,  267,  266,  265,  264,  263,  262,  258,  256,
-      255,  254,  249,  248,  247,  246,  244,  243,  242,  241,
-      239,  238,  237,  236,  235,  234,  233,  232,  231,  230,
-      229,  228,  227,  226,  225,  224,  222,  221,  220,  219,
+      363,  359,  358,  357,  356,  354,  353,  351,  346,  345,
+      344,  343,  342,  341,  336,  334,  333,  332,  331,  330,
+      328,  327,  324,  323,  322,  321,  320,  319,  318,  317,
+      316,  315,  314,  313,  312,  311,  310,  309,  308,  307,
+      306,  305,  304,  303,  302,  301,  300,  299,  298,  294,
+      293,  292,  291,  290,  289,  288,  287,  285,  281,  279,
+      278,  277,  276,  272,  271,  270,  269,  268,  267,  266,
+      265,  264,  260,  258,  257,  256,  251,  250,  249,  248,
+      246,  245,  244,  243,  242,  240,  239,  238,  237,  236,
+      235,  234,  233,  232,  231,  230,  229,  228,  227,  226,
 
-      218,  217,  216,  215,  214,  213,  212,  210,  209,  208,
-      207,  206,  205,  204,  203,  202,  201,  200,  199,  198,
-      197,  196,  195,  193,  192,  191,  190,  189,  188,  187,
-      186,  185,  184,  183,  182,  180,  179,  178,  177,  175,
-      174,  173,  172,  171,  169,  155,  154,  152,  151,  147,
-      146,  145,  144,  143,  140,  139,  138,  137,  135,  134,
-      132,  130,  129,  128,  126,  125,  123,  122,  120,  119,
-      118,  117,  116,  115,  112,  111,  110,  109,  108,  107,
-      106,  105,  103,  102,  101,  100,   99,   98,   96,   95,
-       91,   87,   60,   48,   46,   43,   40,   27,   24,   16,
+      225,  223,  222,  221,  220,  219,  218,  217,  216,  215,
+      214,  213,  211,  210,  209,  208,  207,  206,  205,  204,
+      203,  202,  201,  200,  199,  198,  197,  196,  194,  193,
+      192,  191,  190,  189,  188,  187,  186,  185,  184,  183,
+      181,  180,  179,  178,  176,  175,  174,  173,  172,  170,
+      156,  155,  153,  152,  151,  147,  146,  145,  144,  143,
+      140,  139,  138,  137,  135,  134,  132,  130,  129,  128,
+      126,  125,  123,  122,  120,  119,  118,  117,  116,  115,
+      112,  111,  110,  109,  108,  107,  106,  105,  103,  102,
+      101,  100,   99,   98,   96,   95,   91,   87,   60,   48,
 
-       11,    7,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772
+       46,   43,   40,   27,   24,   16,   11,    7,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
+      778,  778,  778,  778,  778,  778,  778,  778,  778,  778
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[225] =
+static yyconst flex_int32_t yy_rule_can_match_eol[228] =
     {   0,
 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -961,7 +963,7 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 1, 0, 0,     };
+    0, 0, 0, 0, 0, 1, 0, 0,     };
 
 /* The intent behind this definition is that it'll catch
  * any uses of REJECT which flex missed.
@@ -1291,13 +1293,13 @@
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 773 )
+				if ( yy_current_state >= 779 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 772 );
+		while ( yy_current_state != 778 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1558,52 +1560,61 @@
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (BVEC2); }
+{ return ES2_ident_ES3_keyword(context, UVEC2); }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (BVEC3); }
+{ return ES2_ident_ES3_keyword(context, UVEC3); }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (BVEC4); }
+{ return ES2_ident_ES3_keyword(context, UVEC4); }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER2D; }
+{ context->lexAfterType = true; return (BVEC2); }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLERCUBE; }
+{ context->lexAfterType = true; return (BVEC3); }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
+{ context->lexAfterType = true; return (BVEC4); }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-{ return ES2_reserved_ES3_keyword(context, SAMPLER3D); }
+{ context->lexAfterType = true; return SAMPLER2D; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-{ return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
+{ context->lexAfterType = true; return SAMPLERCUBE; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-{ return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
+{ context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER2DRECT; }
+{ return ES2_reserved_ES3_keyword(context, SAMPLER3D); }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
+{ return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
+	YY_BREAK
+case 69:
+YY_RULE_SETUP
+{ return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
+	YY_BREAK
+case 70:
+YY_RULE_SETUP
+{ context->lexAfterType = true; return SAMPLER2DRECT; }
+	YY_BREAK
+case 71:
+YY_RULE_SETUP
 { context->lexAfterType = true; return(STRUCT); }
 	YY_BREAK
 /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
-case 69:
-case 70:
-case 71:
 case 72:
 case 73:
 case 74:
@@ -1657,6 +1668,9 @@
 case 122:
 case 123:
 case 124:
+case 125:
+case 126:
+case 127:
 YY_RULE_SETUP
 { 
     if (context->shaderVersion < 300) {
@@ -1667,9 +1681,6 @@
 }
 	YY_BREAK
 /* Reserved keywords */
-case 125:
-case 126:
-case 127:
 case 128:
 case 129:
 case 130:
@@ -1709,238 +1720,241 @@
 case 164:
 case 165:
 case 166:
+case 167:
+case 168:
+case 169:
 YY_RULE_SETUP
 { return reserved_word(yyscanner); }
 	YY_BREAK
-case 167:
+case 170:
 YY_RULE_SETUP
 {
    yylval->lex.string = NewPoolTString(yytext); 
    return check_type(yyscanner);
 }
 	YY_BREAK
-case 168:
-YY_RULE_SETUP
-{ yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
-	YY_BREAK
-case 169:
-YY_RULE_SETUP
-{ yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
-	YY_BREAK
-case 170:
-YY_RULE_SETUP
-{ context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
-	YY_BREAK
 case 171:
 YY_RULE_SETUP
 { yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
 	YY_BREAK
 case 172:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
 	YY_BREAK
 case 173:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
 	YY_BREAK
 case 174:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ yylval->lex.i = static_cast<int>(strtol(yytext, 0, 0)); return(INTCONSTANT); }
 	YY_BREAK
 case 175:
 YY_RULE_SETUP
-{  return(ADD_ASSIGN); }
+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 	YY_BREAK
 case 176:
 YY_RULE_SETUP
-{  return(SUB_ASSIGN); }
+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 	YY_BREAK
 case 177:
 YY_RULE_SETUP
-{  return(MUL_ASSIGN); }
+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 	YY_BREAK
 case 178:
 YY_RULE_SETUP
-{  return(DIV_ASSIGN); }
+{  return(ADD_ASSIGN); }
 	YY_BREAK
 case 179:
 YY_RULE_SETUP
-{  return(MOD_ASSIGN); }
+{  return(SUB_ASSIGN); }
 	YY_BREAK
 case 180:
 YY_RULE_SETUP
-{  return(LEFT_ASSIGN); }
+{  return(MUL_ASSIGN); }
 	YY_BREAK
 case 181:
 YY_RULE_SETUP
-{  return(RIGHT_ASSIGN); }
+{  return(DIV_ASSIGN); }
 	YY_BREAK
 case 182:
 YY_RULE_SETUP
-{  return(AND_ASSIGN); }
+{  return(MOD_ASSIGN); }
 	YY_BREAK
 case 183:
 YY_RULE_SETUP
-{  return(XOR_ASSIGN); }
+{  return(LEFT_ASSIGN); }
 	YY_BREAK
 case 184:
 YY_RULE_SETUP
-{  return(OR_ASSIGN); }
+{  return(RIGHT_ASSIGN); }
 	YY_BREAK
 case 185:
 YY_RULE_SETUP
-{  return(INC_OP); }
+{  return(AND_ASSIGN); }
 	YY_BREAK
 case 186:
 YY_RULE_SETUP
-{  return(DEC_OP); }
+{  return(XOR_ASSIGN); }
 	YY_BREAK
 case 187:
 YY_RULE_SETUP
-{  return(AND_OP); }
+{  return(OR_ASSIGN); }
 	YY_BREAK
 case 188:
 YY_RULE_SETUP
-{  return(OR_OP); }
+{  return(INC_OP); }
 	YY_BREAK
 case 189:
 YY_RULE_SETUP
-{  return(XOR_OP); }
+{  return(DEC_OP); }
 	YY_BREAK
 case 190:
 YY_RULE_SETUP
-{  return(LE_OP); }
+{  return(AND_OP); }
 	YY_BREAK
 case 191:
 YY_RULE_SETUP
-{  return(GE_OP); }
+{  return(OR_OP); }
 	YY_BREAK
 case 192:
 YY_RULE_SETUP
-{  return(EQ_OP); }
+{  return(XOR_OP); }
 	YY_BREAK
 case 193:
 YY_RULE_SETUP
-{  return(NE_OP); }
+{  return(LE_OP); }
 	YY_BREAK
 case 194:
 YY_RULE_SETUP
-{  return(LEFT_OP); }
+{  return(GE_OP); }
 	YY_BREAK
 case 195:
 YY_RULE_SETUP
-{  return(RIGHT_OP); }
+{  return(EQ_OP); }
 	YY_BREAK
 case 196:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(SEMICOLON); }
+{  return(NE_OP); }
 	YY_BREAK
 case 197:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(LEFT_BRACE); }
+{  return(LEFT_OP); }
 	YY_BREAK
 case 198:
 YY_RULE_SETUP
-{ return(RIGHT_BRACE); }
+{  return(RIGHT_OP); }
 	YY_BREAK
 case 199:
 YY_RULE_SETUP
-{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
+{ context->lexAfterType = false; return(SEMICOLON); }
 	YY_BREAK
 case 200:
 YY_RULE_SETUP
-{ return(COLON); }
+{ context->lexAfterType = false; return(LEFT_BRACE); }
 	YY_BREAK
 case 201:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(EQUAL); }
+{ return(RIGHT_BRACE); }
 	YY_BREAK
 case 202:
 YY_RULE_SETUP
-{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
+{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
 	YY_BREAK
 case 203:
 YY_RULE_SETUP
-{ context->inTypeParen = false; return(RIGHT_PAREN); }
+{ return(COLON); }
 	YY_BREAK
 case 204:
 YY_RULE_SETUP
-{ return(LEFT_BRACKET); }
+{ context->lexAfterType = false; return(EQUAL); }
 	YY_BREAK
 case 205:
 YY_RULE_SETUP
-{ return(RIGHT_BRACKET); }
+{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
 	YY_BREAK
 case 206:
 YY_RULE_SETUP
-{ BEGIN(FIELDS);  return(DOT); }
+{ context->inTypeParen = false; return(RIGHT_PAREN); }
 	YY_BREAK
 case 207:
 YY_RULE_SETUP
-{ return(BANG); }
+{ return(LEFT_BRACKET); }
 	YY_BREAK
 case 208:
 YY_RULE_SETUP
-{ return(DASH); }
+{ return(RIGHT_BRACKET); }
 	YY_BREAK
 case 209:
 YY_RULE_SETUP
-{ return(TILDE); }
+{ BEGIN(FIELDS);  return(DOT); }
 	YY_BREAK
 case 210:
 YY_RULE_SETUP
-{ return(PLUS); }
+{ return(BANG); }
 	YY_BREAK
 case 211:
 YY_RULE_SETUP
-{ return(STAR); }
+{ return(DASH); }
 	YY_BREAK
 case 212:
 YY_RULE_SETUP
-{ return(SLASH); }
+{ return(TILDE); }
 	YY_BREAK
 case 213:
 YY_RULE_SETUP
-{ return(PERCENT); }
+{ return(PLUS); }
 	YY_BREAK
 case 214:
 YY_RULE_SETUP
-{ return(LEFT_ANGLE); }
+{ return(STAR); }
 	YY_BREAK
 case 215:
 YY_RULE_SETUP
-{ return(RIGHT_ANGLE); }
+{ return(SLASH); }
 	YY_BREAK
 case 216:
 YY_RULE_SETUP
-{ return(VERTICAL_BAR); }
+{ return(PERCENT); }
 	YY_BREAK
 case 217:
 YY_RULE_SETUP
-{ return(CARET); }
+{ return(LEFT_ANGLE); }
 	YY_BREAK
 case 218:
 YY_RULE_SETUP
-{ return(AMPERSAND); }
+{ return(RIGHT_ANGLE); }
 	YY_BREAK
 case 219:
 YY_RULE_SETUP
-{ return(QUESTION); }
+{ return(VERTICAL_BAR); }
 	YY_BREAK
 case 220:
 YY_RULE_SETUP
+{ return(CARET); }
+	YY_BREAK
+case 221:
+YY_RULE_SETUP
+{ return(AMPERSAND); }
+	YY_BREAK
+case 222:
+YY_RULE_SETUP
+{ return(QUESTION); }
+	YY_BREAK
+case 223:
+YY_RULE_SETUP
 { 
     BEGIN(INITIAL);
     yylval->lex.string = NewPoolTString(yytext); 
     return FIELD_SELECTION;
 }
 	YY_BREAK
-case 221:
+case 224:
 YY_RULE_SETUP
 {}
 	YY_BREAK
-case 222:
-/* rule 222 can match eol */
+case 225:
+/* rule 225 can match eol */
 YY_RULE_SETUP
 {  }
 	YY_BREAK
@@ -1949,11 +1963,11 @@
 case YY_STATE_EOF(FIELDS):
 { context->AfterEOF = true; yyterminate(); }
 	YY_BREAK
-case 223:
+case 226:
 YY_RULE_SETUP
 { context->warning(yylineno, "Unknown char", yytext, ""); return 0; }
 	YY_BREAK
-case 224:
+case 227:
 YY_RULE_SETUP
 ECHO;
 	YY_BREAK
@@ -2249,7 +2263,7 @@
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 773 )
+			if ( yy_current_state >= 779 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2278,11 +2292,11 @@
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 773 )
+		if ( yy_current_state >= 779 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 772);
+	yy_is_jam = (yy_current_state == 778);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
diff --git a/src/compiler/glslang_tab.cpp b/src/compiler/glslang_tab.cpp
index a38645a..ed7de2e 100644
--- a/src/compiler/glslang_tab.cpp
+++ b/src/compiler/glslang_tab.cpp
@@ -161,84 +161,87 @@
      VEC2 = 286,
      VEC3 = 287,
      VEC4 = 288,
-     MATRIX2 = 289,
-     MATRIX3 = 290,
-     MATRIX4 = 291,
-     IN_QUAL = 292,
-     OUT_QUAL = 293,
-     INOUT_QUAL = 294,
-     UNIFORM = 295,
-     VARYING = 296,
-     MATRIX2x3 = 297,
-     MATRIX3x2 = 298,
-     MATRIX2x4 = 299,
-     MATRIX4x2 = 300,
-     MATRIX3x4 = 301,
-     MATRIX4x3 = 302,
-     CENTROID = 303,
-     FLAT = 304,
-     SMOOTH = 305,
-     STRUCT = 306,
-     VOID_TYPE = 307,
-     WHILE = 308,
-     SAMPLER2D = 309,
-     SAMPLERCUBE = 310,
-     SAMPLER_EXTERNAL_OES = 311,
-     SAMPLER2DRECT = 312,
-     SAMPLER3D = 313,
-     SAMPLER3DRECT = 314,
-     SAMPLER2DSHADOW = 315,
-     IDENTIFIER = 316,
-     TYPE_NAME = 317,
-     FLOATCONSTANT = 318,
-     INTCONSTANT = 319,
-     BOOLCONSTANT = 320,
-     FIELD_SELECTION = 321,
-     LEFT_OP = 322,
-     RIGHT_OP = 323,
-     INC_OP = 324,
-     DEC_OP = 325,
-     LE_OP = 326,
-     GE_OP = 327,
-     EQ_OP = 328,
-     NE_OP = 329,
-     AND_OP = 330,
-     OR_OP = 331,
-     XOR_OP = 332,
-     MUL_ASSIGN = 333,
-     DIV_ASSIGN = 334,
-     ADD_ASSIGN = 335,
-     MOD_ASSIGN = 336,
-     LEFT_ASSIGN = 337,
-     RIGHT_ASSIGN = 338,
-     AND_ASSIGN = 339,
-     XOR_ASSIGN = 340,
-     OR_ASSIGN = 341,
-     SUB_ASSIGN = 342,
-     LEFT_PAREN = 343,
-     RIGHT_PAREN = 344,
-     LEFT_BRACKET = 345,
-     RIGHT_BRACKET = 346,
-     LEFT_BRACE = 347,
-     RIGHT_BRACE = 348,
-     DOT = 349,
-     COMMA = 350,
-     COLON = 351,
-     EQUAL = 352,
-     SEMICOLON = 353,
-     BANG = 354,
-     DASH = 355,
-     TILDE = 356,
-     PLUS = 357,
-     STAR = 358,
-     SLASH = 359,
-     PERCENT = 360,
-     LEFT_ANGLE = 361,
-     RIGHT_ANGLE = 362,
-     VERTICAL_BAR = 363,
-     CARET = 364,
-     AMPERSAND = 365,
-     QUESTION = 366
+     UVEC2 = 289,
+     UVEC3 = 290,
+     UVEC4 = 291,
+     MATRIX2 = 292,
+     MATRIX3 = 293,
+     MATRIX4 = 294,
+     IN_QUAL = 295,
+     OUT_QUAL = 296,
+     INOUT_QUAL = 297,
+     UNIFORM = 298,
+     VARYING = 299,
+     MATRIX2x3 = 300,
+     MATRIX3x2 = 301,
+     MATRIX2x4 = 302,
+     MATRIX4x2 = 303,
+     MATRIX3x4 = 304,
+     MATRIX4x3 = 305,
+     CENTROID = 306,
+     FLAT = 307,
+     SMOOTH = 308,
+     STRUCT = 309,
+     VOID_TYPE = 310,
+     WHILE = 311,
+     SAMPLER2D = 312,
+     SAMPLERCUBE = 313,
+     SAMPLER_EXTERNAL_OES = 314,
+     SAMPLER2DRECT = 315,
+     SAMPLER3D = 316,
+     SAMPLER3DRECT = 317,
+     SAMPLER2DSHADOW = 318,
+     IDENTIFIER = 319,
+     TYPE_NAME = 320,
+     FLOATCONSTANT = 321,
+     INTCONSTANT = 322,
+     BOOLCONSTANT = 323,
+     FIELD_SELECTION = 324,
+     LEFT_OP = 325,
+     RIGHT_OP = 326,
+     INC_OP = 327,
+     DEC_OP = 328,
+     LE_OP = 329,
+     GE_OP = 330,
+     EQ_OP = 331,
+     NE_OP = 332,
+     AND_OP = 333,
+     OR_OP = 334,
+     XOR_OP = 335,
+     MUL_ASSIGN = 336,
+     DIV_ASSIGN = 337,
+     ADD_ASSIGN = 338,
+     MOD_ASSIGN = 339,
+     LEFT_ASSIGN = 340,
+     RIGHT_ASSIGN = 341,
+     AND_ASSIGN = 342,
+     XOR_ASSIGN = 343,
+     OR_ASSIGN = 344,
+     SUB_ASSIGN = 345,
+     LEFT_PAREN = 346,
+     RIGHT_PAREN = 347,
+     LEFT_BRACKET = 348,
+     RIGHT_BRACKET = 349,
+     LEFT_BRACE = 350,
+     RIGHT_BRACE = 351,
+     DOT = 352,
+     COMMA = 353,
+     COLON = 354,
+     EQUAL = 355,
+     SEMICOLON = 356,
+     BANG = 357,
+     DASH = 358,
+     TILDE = 359,
+     PLUS = 360,
+     STAR = 361,
+     SLASH = 362,
+     PERCENT = 363,
+     LEFT_ANGLE = 364,
+     RIGHT_ANGLE = 365,
+     VERTICAL_BAR = 366,
+     CARET = 367,
+     AMPERSAND = 368,
+     QUESTION = 369
    };
 #endif
 
@@ -563,22 +566,22 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  90
+#define YYFINAL  93
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1984
+#define YYLAST   2054
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  112
+#define YYNTOKENS  115
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  87
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  223
+#define YYNRULES  226
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  339
+#define YYNSTATES  342
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   366
+#define YYMAXUTOK   369
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -622,7 +625,7 @@
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114
 };
 
 #if YYDEBUG
@@ -646,82 +649,83 @@
      389,   391,   393,   395,   397,   399,   401,   403,   405,   407,
      409,   411,   413,   415,   417,   419,   421,   423,   425,   427,
      429,   431,   433,   435,   437,   439,   441,   443,   445,   447,
-     448,   455,   456,   462,   464,   467,   471,   476,   478,   482,
-     484,   489,   491,   493,   495,   497,   499,   501,   503,   505,
-     507,   510,   511,   512,   518,   520,   522,   523,   526,   527,
-     530,   533,   537,   539,   542,   544,   547,   553,   557,   559,
-     561,   566,   567,   574,   575,   584,   585,   593,   595,   597,
-     599,   600,   603,   607,   610,   613,   616,   620,   623,   625,
-     628,   630,   632,   633
+     449,   451,   453,   454,   461,   462,   468,   470,   473,   477,
+     482,   484,   488,   490,   495,   497,   499,   501,   503,   505,
+     507,   509,   511,   513,   516,   517,   518,   524,   526,   528,
+     529,   532,   533,   536,   539,   543,   545,   548,   550,   553,
+     559,   563,   565,   567,   572,   573,   580,   581,   590,   591,
+     599,   601,   603,   605,   606,   609,   613,   616,   619,   622,
+     626,   629,   631,   634,   636,   638,   639
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     195,     0,    -1,    61,    -1,   113,    -1,    64,    -1,    63,
-      -1,    65,    -1,    88,   140,    89,    -1,   114,    -1,   115,
-      90,   116,    91,    -1,   117,    -1,   115,    94,    66,    -1,
-     115,    69,    -1,   115,    70,    -1,   140,    -1,   118,    -1,
-     119,    -1,   115,    94,   119,    -1,   121,    89,    -1,   120,
-      89,    -1,   122,    52,    -1,   122,    -1,   122,   138,    -1,
-     121,    95,   138,    -1,   123,    88,    -1,   162,    -1,    61,
-      -1,    66,    -1,   115,    -1,    69,   124,    -1,    70,   124,
-      -1,   125,   124,    -1,   102,    -1,   100,    -1,    99,    -1,
-     124,    -1,   126,   103,   124,    -1,   126,   104,   124,    -1,
-     126,    -1,   127,   102,   126,    -1,   127,   100,   126,    -1,
-     127,    -1,   128,    -1,   129,   106,   128,    -1,   129,   107,
-     128,    -1,   129,    71,   128,    -1,   129,    72,   128,    -1,
-     129,    -1,   130,    73,   129,    -1,   130,    74,   129,    -1,
-     130,    -1,   131,    -1,   132,    -1,   133,    -1,   134,    75,
-     133,    -1,   134,    -1,   135,    77,   134,    -1,   135,    -1,
-     136,    76,   135,    -1,   136,    -1,   136,   111,   140,    96,
-     138,    -1,   137,    -1,   124,   139,   138,    -1,    97,    -1,
-      78,    -1,    79,    -1,    80,    -1,    87,    -1,   138,    -1,
-     140,    95,   138,    -1,   137,    -1,    61,    92,    -1,   144,
-      98,    -1,   152,    98,    -1,     7,   160,   161,    98,    -1,
-     157,   142,   166,    93,    98,    -1,   157,   142,   166,    93,
-      61,    98,    -1,   157,   142,   166,    93,    61,    90,   141,
-      91,    98,    -1,   145,    89,    -1,   147,    -1,   146,    -1,
-     147,   149,    -1,   146,    95,   149,    -1,   154,    61,    88,
-      -1,   159,    61,    -1,   159,    61,    90,   141,    91,    -1,
-     156,   150,   148,    -1,   150,   148,    -1,   156,   150,   151,
-      -1,   150,   151,    -1,    -1,    37,    -1,    38,    -1,    39,
-      -1,   159,    -1,   153,    -1,   152,    95,    61,    -1,   152,
-      95,    61,    90,    91,    -1,   152,    95,    61,    90,   141,
-      91,    -1,   152,    95,    61,    97,   170,    -1,   154,    -1,
-     154,    61,    -1,   154,    61,    90,    91,    -1,   154,    61,
-      90,   141,    91,    -1,   154,    61,    97,   170,    -1,     3,
-      61,    -1,   159,    -1,   157,   159,    -1,    50,    -1,    49,
-      -1,     9,    -1,     8,    -1,    41,    -1,     3,    41,    -1,
-     158,    -1,   155,   158,    -1,   155,    -1,     9,    -1,    37,
-      -1,    38,    -1,    48,    37,    -1,    48,    38,    -1,    40,
-      -1,   161,    -1,   160,   161,    -1,     4,    -1,     5,    -1,
-       6,    -1,   162,    -1,   162,    90,   141,    91,    -1,    52,
+     198,     0,    -1,    64,    -1,   116,    -1,    67,    -1,    66,
+      -1,    68,    -1,    91,   143,    92,    -1,   117,    -1,   118,
+      93,   119,    94,    -1,   120,    -1,   118,    97,    69,    -1,
+     118,    72,    -1,   118,    73,    -1,   143,    -1,   121,    -1,
+     122,    -1,   118,    97,   122,    -1,   124,    92,    -1,   123,
+      92,    -1,   125,    55,    -1,   125,    -1,   125,   141,    -1,
+     124,    98,   141,    -1,   126,    91,    -1,   165,    -1,    64,
+      -1,    69,    -1,   118,    -1,    72,   127,    -1,    73,   127,
+      -1,   128,   127,    -1,   105,    -1,   103,    -1,   102,    -1,
+     127,    -1,   129,   106,   127,    -1,   129,   107,   127,    -1,
+     129,    -1,   130,   105,   129,    -1,   130,   103,   129,    -1,
+     130,    -1,   131,    -1,   132,   109,   131,    -1,   132,   110,
+     131,    -1,   132,    74,   131,    -1,   132,    75,   131,    -1,
+     132,    -1,   133,    76,   132,    -1,   133,    77,   132,    -1,
+     133,    -1,   134,    -1,   135,    -1,   136,    -1,   137,    78,
+     136,    -1,   137,    -1,   138,    80,   137,    -1,   138,    -1,
+     139,    79,   138,    -1,   139,    -1,   139,   114,   143,    99,
+     141,    -1,   140,    -1,   127,   142,   141,    -1,   100,    -1,
+      81,    -1,    82,    -1,    83,    -1,    90,    -1,   141,    -1,
+     143,    98,   141,    -1,   140,    -1,    64,    95,    -1,   147,
+     101,    -1,   155,   101,    -1,     7,   163,   164,   101,    -1,
+     160,   145,   169,    96,   101,    -1,   160,   145,   169,    96,
+      64,   101,    -1,   160,   145,   169,    96,    64,    93,   144,
+      94,   101,    -1,   148,    92,    -1,   150,    -1,   149,    -1,
+     150,   152,    -1,   149,    98,   152,    -1,   157,    64,    91,
+      -1,   162,    64,    -1,   162,    64,    93,   144,    94,    -1,
+     159,   153,   151,    -1,   153,   151,    -1,   159,   153,   154,
+      -1,   153,   154,    -1,    -1,    40,    -1,    41,    -1,    42,
+      -1,   162,    -1,   156,    -1,   155,    98,    64,    -1,   155,
+      98,    64,    93,    94,    -1,   155,    98,    64,    93,   144,
+      94,    -1,   155,    98,    64,   100,   173,    -1,   157,    -1,
+     157,    64,    -1,   157,    64,    93,    94,    -1,   157,    64,
+      93,   144,    94,    -1,   157,    64,   100,   173,    -1,     3,
+      64,    -1,   162,    -1,   160,   162,    -1,    53,    -1,    52,
+      -1,     9,    -1,     8,    -1,    44,    -1,     3,    44,    -1,
+     161,    -1,   158,   161,    -1,   158,    -1,     9,    -1,    40,
+      -1,    41,    -1,    51,    40,    -1,    51,    41,    -1,    43,
+      -1,   164,    -1,   163,   164,    -1,     4,    -1,     5,    -1,
+       6,    -1,   165,    -1,   165,    93,   144,    94,    -1,    55,
       -1,    11,    -1,    12,    -1,    13,    -1,    10,    -1,    31,
       -1,    32,    -1,    33,    -1,    25,    -1,    26,    -1,    27,
       -1,    28,    -1,    29,    -1,    30,    -1,    34,    -1,    35,
-      -1,    36,    -1,    42,    -1,    43,    -1,    44,    -1,    45,
-      -1,    46,    -1,    47,    -1,    54,    -1,    55,    -1,    56,
-      -1,    57,    -1,   163,    -1,    62,    -1,    -1,    51,    61,
-      92,   164,   166,    93,    -1,    -1,    51,    92,   165,   166,
-      93,    -1,   167,    -1,   166,   167,    -1,   159,   168,    98,
-      -1,   157,   159,   168,    98,    -1,   169,    -1,   168,    95,
-     169,    -1,    61,    -1,    61,    90,   141,    91,    -1,   138,
-      -1,   143,    -1,   174,    -1,   173,    -1,   171,    -1,   183,
-      -1,   184,    -1,   187,    -1,   194,    -1,    92,    93,    -1,
-      -1,    -1,    92,   175,   182,   176,    93,    -1,   181,    -1,
-     173,    -1,    -1,   179,   181,    -1,    -1,   180,   173,    -1,
-      92,    93,    -1,    92,   182,    93,    -1,   172,    -1,   182,
-     172,    -1,    98,    -1,   140,    98,    -1,    19,    88,   140,
-      89,   185,    -1,   178,    17,   178,    -1,   178,    -1,   140,
-      -1,   154,    61,    97,   170,    -1,    -1,    53,    88,   188,
-     186,    89,   177,    -1,    -1,    16,   189,   178,    53,    88,
-     140,    89,    98,    -1,    -1,    18,    88,   190,   191,   193,
-      89,   177,    -1,   183,    -1,   171,    -1,   186,    -1,    -1,
-     192,    98,    -1,   192,    98,   140,    -1,    15,    98,    -1,
-      14,    98,    -1,    21,    98,    -1,    21,   140,    98,    -1,
-      20,    98,    -1,   196,    -1,   195,   196,    -1,   197,    -1,
-     143,    -1,    -1,   144,   198,   181,    -1
+      -1,    36,    -1,    37,    -1,    38,    -1,    39,    -1,    45,
+      -1,    46,    -1,    47,    -1,    48,    -1,    49,    -1,    50,
+      -1,    57,    -1,    58,    -1,    59,    -1,    60,    -1,   166,
+      -1,    65,    -1,    -1,    54,    64,    95,   167,   169,    96,
+      -1,    -1,    54,    95,   168,   169,    96,    -1,   170,    -1,
+     169,   170,    -1,   162,   171,   101,    -1,   160,   162,   171,
+     101,    -1,   172,    -1,   171,    98,   172,    -1,    64,    -1,
+      64,    93,   144,    94,    -1,   141,    -1,   146,    -1,   177,
+      -1,   176,    -1,   174,    -1,   186,    -1,   187,    -1,   190,
+      -1,   197,    -1,    95,    96,    -1,    -1,    -1,    95,   178,
+     185,   179,    96,    -1,   184,    -1,   176,    -1,    -1,   182,
+     184,    -1,    -1,   183,   176,    -1,    95,    96,    -1,    95,
+     185,    96,    -1,   175,    -1,   185,   175,    -1,   101,    -1,
+     143,   101,    -1,    19,    91,   143,    92,   188,    -1,   181,
+      17,   181,    -1,   181,    -1,   143,    -1,   157,    64,   100,
+     173,    -1,    -1,    56,    91,   191,   189,    92,   180,    -1,
+      -1,    16,   192,   181,    56,    91,   143,    92,   101,    -1,
+      -1,    18,    91,   193,   194,   196,    92,   180,    -1,   186,
+      -1,   174,    -1,   189,    -1,    -1,   195,   101,    -1,   195,
+     101,   143,    -1,    15,   101,    -1,    14,   101,    -1,    21,
+     101,    -1,    21,   143,   101,    -1,    20,   101,    -1,   199,
+      -1,   198,   199,    -1,   200,    -1,   146,    -1,    -1,   147,
+     201,   184,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -741,15 +745,15 @@
     1289,  1295,  1302,  1311,  1320,  1323,  1359,  1369,  1373,  1378,
     1383,  1388,  1393,  1402,  1412,  1419,  1422,  1425,  1431,  1434,
     1449,  1453,  1457,  1461,  1465,  1469,  1474,  1479,  1484,  1489,
-    1494,  1499,  1504,  1509,  1514,  1520,  1526,  1532,  1537,  1542,
-    1547,  1552,  1557,  1562,  1567,  1572,  1581,  1590,  1595,  1608,
-    1608,  1611,  1611,  1617,  1620,  1635,  1638,  1646,  1650,  1656,
-    1664,  1680,  1684,  1688,  1689,  1695,  1696,  1697,  1698,  1699,
-    1703,  1704,  1704,  1704,  1714,  1715,  1719,  1719,  1720,  1720,
-    1725,  1728,  1738,  1741,  1747,  1748,  1752,  1760,  1764,  1774,
-    1779,  1796,  1796,  1801,  1801,  1808,  1808,  1816,  1819,  1825,
-    1828,  1834,  1838,  1845,  1852,  1859,  1866,  1877,  1886,  1890,
-    1897,  1900,  1906,  1906
+    1494,  1499,  1504,  1509,  1514,  1519,  1524,  1529,  1535,  1541,
+    1547,  1552,  1557,  1562,  1567,  1572,  1577,  1582,  1587,  1596,
+    1605,  1610,  1623,  1623,  1626,  1626,  1632,  1635,  1650,  1653,
+    1661,  1665,  1671,  1679,  1695,  1699,  1703,  1704,  1710,  1711,
+    1712,  1713,  1714,  1718,  1719,  1719,  1719,  1729,  1730,  1734,
+    1734,  1735,  1735,  1740,  1743,  1753,  1756,  1762,  1763,  1767,
+    1775,  1779,  1789,  1794,  1811,  1811,  1816,  1816,  1823,  1823,
+    1831,  1834,  1840,  1843,  1849,  1853,  1860,  1867,  1874,  1881,
+    1892,  1901,  1905,  1912,  1915,  1921,  1921
 };
 #endif
 
@@ -763,24 +767,24 @@
   "CONST_QUAL", "BOOL_TYPE", "FLOAT_TYPE", "INT_TYPE", "UINT_TYPE",
   "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF", "DISCARD", "RETURN",
   "SWITCH", "CASE", "DEFAULT", "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3",
-  "IVEC4", "VEC2", "VEC3", "VEC4", "MATRIX2", "MATRIX3", "MATRIX4",
-  "IN_QUAL", "OUT_QUAL", "INOUT_QUAL", "UNIFORM", "VARYING", "MATRIX2x3",
-  "MATRIX3x2", "MATRIX2x4", "MATRIX4x2", "MATRIX3x4", "MATRIX4x3",
-  "CENTROID", "FLAT", "SMOOTH", "STRUCT", "VOID_TYPE", "WHILE",
-  "SAMPLER2D", "SAMPLERCUBE", "SAMPLER_EXTERNAL_OES", "SAMPLER2DRECT",
-  "SAMPLER3D", "SAMPLER3DRECT", "SAMPLER2DSHADOW", "IDENTIFIER",
-  "TYPE_NAME", "FLOATCONSTANT", "INTCONSTANT", "BOOLCONSTANT",
-  "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP",
-  "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN",
-  "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN",
-  "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "LEFT_PAREN",
-  "RIGHT_PAREN", "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE",
-  "RIGHT_BRACE", "DOT", "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG",
-  "DASH", "TILDE", "PLUS", "STAR", "SLASH", "PERCENT", "LEFT_ANGLE",
-  "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", "AMPERSAND", "QUESTION",
-  "$accept", "variable_identifier", "primary_expression",
-  "postfix_expression", "integer_expression", "function_call",
-  "function_call_or_method", "function_call_generic",
+  "IVEC4", "VEC2", "VEC3", "VEC4", "UVEC2", "UVEC3", "UVEC4", "MATRIX2",
+  "MATRIX3", "MATRIX4", "IN_QUAL", "OUT_QUAL", "INOUT_QUAL", "UNIFORM",
+  "VARYING", "MATRIX2x3", "MATRIX3x2", "MATRIX2x4", "MATRIX4x2",
+  "MATRIX3x4", "MATRIX4x3", "CENTROID", "FLAT", "SMOOTH", "STRUCT",
+  "VOID_TYPE", "WHILE", "SAMPLER2D", "SAMPLERCUBE", "SAMPLER_EXTERNAL_OES",
+  "SAMPLER2DRECT", "SAMPLER3D", "SAMPLER3DRECT", "SAMPLER2DSHADOW",
+  "IDENTIFIER", "TYPE_NAME", "FLOATCONSTANT", "INTCONSTANT",
+  "BOOLCONSTANT", "FIELD_SELECTION", "LEFT_OP", "RIGHT_OP", "INC_OP",
+  "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP",
+  "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN",
+  "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN",
+  "SUB_ASSIGN", "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET",
+  "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON",
+  "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH",
+  "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET",
+  "AMPERSAND", "QUESTION", "$accept", "variable_identifier",
+  "primary_expression", "postfix_expression", "integer_expression",
+  "function_call", "function_call_or_method", "function_call_generic",
   "function_call_header_no_parameters",
   "function_call_header_with_parameters", "function_call_header",
   "function_identifier", "unary_expression", "unary_operator",
@@ -828,36 +832,36 @@
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366
+     365,   366,   367,   368,   369
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   112,   113,   114,   114,   114,   114,   114,   115,   115,
-     115,   115,   115,   115,   116,   117,   118,   118,   119,   119,
-     120,   120,   121,   121,   122,   123,   123,   123,   124,   124,
-     124,   124,   125,   125,   125,   126,   126,   126,   127,   127,
-     127,   128,   129,   129,   129,   129,   129,   130,   130,   130,
-     131,   132,   133,   134,   134,   135,   135,   136,   136,   137,
-     137,   138,   138,   139,   139,   139,   139,   139,   140,   140,
-     141,   142,   143,   143,   143,   143,   143,   143,   144,   145,
-     145,   146,   146,   147,   148,   148,   149,   149,   149,   149,
-     150,   150,   150,   150,   151,   152,   152,   152,   152,   152,
-     153,   153,   153,   153,   153,   153,   154,   154,   155,   155,
-     156,   157,   157,   157,   157,   157,   157,   158,   158,   158,
-     158,   158,   158,   159,   159,   160,   160,   160,   161,   161,
-     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
-     162,   162,   162,   162,   162,   162,   162,   162,   162,   162,
-     162,   162,   162,   162,   162,   162,   162,   162,   162,   164,
-     163,   165,   163,   166,   166,   167,   167,   168,   168,   169,
-     169,   170,   171,   172,   172,   173,   173,   173,   173,   173,
-     174,   175,   176,   174,   177,   177,   179,   178,   180,   178,
-     181,   181,   182,   182,   183,   183,   184,   185,   185,   186,
-     186,   188,   187,   189,   187,   190,   187,   191,   191,   192,
-     192,   193,   193,   194,   194,   194,   194,   194,   195,   195,
-     196,   196,   198,   197
+       0,   115,   116,   117,   117,   117,   117,   117,   118,   118,
+     118,   118,   118,   118,   119,   120,   121,   121,   122,   122,
+     123,   123,   124,   124,   125,   126,   126,   126,   127,   127,
+     127,   127,   128,   128,   128,   129,   129,   129,   130,   130,
+     130,   131,   132,   132,   132,   132,   132,   133,   133,   133,
+     134,   135,   136,   137,   137,   138,   138,   139,   139,   140,
+     140,   141,   141,   142,   142,   142,   142,   142,   143,   143,
+     144,   145,   146,   146,   146,   146,   146,   146,   147,   148,
+     148,   149,   149,   150,   151,   151,   152,   152,   152,   152,
+     153,   153,   153,   153,   154,   155,   155,   155,   155,   155,
+     156,   156,   156,   156,   156,   156,   157,   157,   158,   158,
+     159,   160,   160,   160,   160,   160,   160,   161,   161,   161,
+     161,   161,   161,   162,   162,   163,   163,   163,   164,   164,
+     165,   165,   165,   165,   165,   165,   165,   165,   165,   165,
+     165,   165,   165,   165,   165,   165,   165,   165,   165,   165,
+     165,   165,   165,   165,   165,   165,   165,   165,   165,   165,
+     165,   165,   167,   166,   168,   166,   169,   169,   170,   170,
+     171,   171,   172,   172,   173,   174,   175,   175,   176,   176,
+     176,   176,   176,   177,   178,   179,   177,   180,   180,   182,
+     181,   183,   181,   184,   184,   185,   185,   186,   186,   187,
+     188,   188,   189,   189,   191,   190,   192,   190,   193,   190,
+     194,   194,   195,   195,   196,   196,   197,   197,   197,   197,
+     197,   198,   198,   199,   199,   201,   200
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -878,14 +882,14 @@
        2,     2,     1,     1,     2,     1,     1,     1,     1,     4,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       6,     0,     5,     1,     2,     3,     4,     1,     3,     1,
-       4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       2,     0,     0,     5,     1,     1,     0,     2,     0,     2,
-       2,     3,     1,     2,     1,     2,     5,     3,     1,     1,
-       4,     0,     6,     0,     8,     0,     7,     1,     1,     1,
-       0,     2,     3,     2,     2,     2,     3,     2,     1,     2,
-       1,     1,     0,     3
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     0,     6,     0,     5,     1,     2,     3,     4,
+       1,     3,     1,     4,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     0,     0,     5,     1,     1,     0,
+       2,     0,     2,     2,     3,     1,     2,     1,     2,     5,
+       3,     1,     1,     4,     0,     6,     0,     8,     0,     7,
+       1,     1,     1,     0,     2,     3,     2,     2,     2,     3,
+       2,     1,     2,     1,     1,     0,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
@@ -895,523 +899,539 @@
 {
        0,     0,   125,   126,   127,     0,   111,   117,   134,   131,
      132,   133,   138,   139,   140,   141,   142,   143,   135,   136,
-     137,   144,   145,   146,   118,   119,   122,   112,   147,   148,
-     149,   150,   151,   152,     0,   109,   108,     0,   130,   153,
-     154,   155,   156,   158,   221,   222,     0,    80,    90,     0,
-      95,   100,   116,     0,   114,   106,     0,   123,   128,   157,
-       0,   218,   220,   113,   105,     0,   120,   121,     0,   161,
-      72,     0,    78,    90,   110,    91,    92,    93,    81,     0,
-      90,     0,    73,   101,   115,     0,     0,   107,   124,     0,
-       1,   219,     0,   159,     0,     0,   223,    82,    87,    89,
-      94,     0,    96,    83,     0,     0,    71,     0,     0,     0,
-       0,   163,     2,     5,     4,     6,    27,     0,     0,     0,
-      34,    33,    32,     3,     8,    28,    10,    15,    16,     0,
-       0,    21,     0,    35,     0,    38,    41,    42,    47,    50,
-      51,    52,    53,    55,    57,    59,    70,     0,    25,    74,
-       0,     0,     0,     0,   203,     0,     0,     0,     0,     0,
-     181,   190,   194,    35,    61,    68,     0,   172,     0,   128,
-     175,   192,   174,   173,     0,   176,   177,   178,   179,    84,
-      86,    88,     0,     0,   102,     0,   171,   104,     0,   169,
-       0,   167,     0,   164,    29,    30,     0,    12,    13,     0,
-       0,    19,    18,     0,    20,    22,    24,    31,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   129,     0,   162,   214,   213,   188,   205,     0,
-     217,   215,     0,   201,   180,     0,    64,    65,    66,    67,
-      63,     0,     0,   195,   191,   193,     0,    97,     0,    99,
-     103,     0,     0,     0,   165,     0,    75,     7,     0,    14,
-      26,    11,    17,    23,    36,    37,    40,    39,    45,    46,
-      43,    44,    48,    49,    54,    56,    58,     0,   160,     0,
-       0,     0,     0,     0,   216,     0,   182,    62,    69,     0,
-      98,   166,     0,   168,     0,    76,     9,     0,     0,   187,
-     189,   208,   207,   210,   188,   199,     0,     0,     0,     0,
-      85,   170,     0,    60,     0,   209,     0,     0,   198,   196,
-       0,     0,   183,     0,     0,   211,     0,   188,     0,   185,
-     202,   184,    77,     0,   212,   206,   197,   200,   204
+     137,   144,   145,   146,   147,   148,   149,   118,   119,   122,
+     112,   150,   151,   152,   153,   154,   155,     0,   109,   108,
+       0,   130,   156,   157,   158,   159,   161,   224,   225,     0,
+      80,    90,     0,    95,   100,   116,     0,   114,   106,     0,
+     123,   128,   160,     0,   221,   223,   113,   105,     0,   120,
+     121,     0,   164,    72,     0,    78,    90,   110,    91,    92,
+      93,    81,     0,    90,     0,    73,   101,   115,     0,     0,
+     107,   124,     0,     1,   222,     0,   162,     0,     0,   226,
+      82,    87,    89,    94,     0,    96,    83,     0,     0,    71,
+       0,     0,     0,     0,   166,     2,     5,     4,     6,    27,
+       0,     0,     0,    34,    33,    32,     3,     8,    28,    10,
+      15,    16,     0,     0,    21,     0,    35,     0,    38,    41,
+      42,    47,    50,    51,    52,    53,    55,    57,    59,    70,
+       0,    25,    74,     0,     0,     0,     0,   206,     0,     0,
+       0,     0,     0,   184,   193,   197,    35,    61,    68,     0,
+     175,     0,   128,   178,   195,   177,   176,     0,   179,   180,
+     181,   182,    84,    86,    88,     0,     0,   102,     0,   174,
+     104,     0,   172,     0,   170,     0,   167,    29,    30,     0,
+      12,    13,     0,     0,    19,    18,     0,    20,    22,    24,
+      31,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   129,     0,   165,   217,   216,
+     191,   208,     0,   220,   218,     0,   204,   183,     0,    64,
+      65,    66,    67,    63,     0,     0,   198,   194,   196,     0,
+      97,     0,    99,   103,     0,     0,     0,   168,     0,    75,
+       7,     0,    14,    26,    11,    17,    23,    36,    37,    40,
+      39,    45,    46,    43,    44,    48,    49,    54,    56,    58,
+       0,   163,     0,     0,     0,     0,     0,   219,     0,   185,
+      62,    69,     0,    98,   169,     0,   171,     0,    76,     9,
+       0,     0,   190,   192,   211,   210,   213,   191,   202,     0,
+       0,     0,     0,    85,   173,     0,    60,     0,   212,     0,
+       0,   201,   199,     0,     0,   186,     0,     0,   214,     0,
+     191,     0,   188,   205,   187,    77,     0,   215,   209,   200,
+     203,   207
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   123,   124,   125,   258,   126,   127,   128,   129,   130,
-     131,   132,   163,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   164,   165,   241,   166,   147,
-      86,   167,   168,    46,    47,    48,    98,    78,    79,    99,
-      49,    50,    51,    52,    80,    53,    54,    55,    56,    57,
-     148,    59,   150,    94,   110,   111,   190,   191,   187,   170,
-     171,   172,   173,   235,   309,   330,   279,   280,   281,   331,
-     174,   175,   176,   319,   308,   177,   285,   227,   282,   303,
-     316,   317,   178,    60,    61,    62,    71
+      -1,   126,   127,   128,   261,   129,   130,   131,   132,   133,
+     134,   135,   166,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   167,   168,   244,   169,   150,
+      89,   170,   171,    49,    50,    51,   101,    81,    82,   102,
+      52,    53,    54,    55,    83,    56,    57,    58,    59,    60,
+     151,    62,   153,    97,   113,   114,   193,   194,   190,   173,
+     174,   175,   176,   238,   312,   333,   282,   283,   284,   334,
+     177,   178,   179,   322,   311,   180,   288,   230,   285,   306,
+     319,   320,   181,    63,    64,    65,    74
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -284
+#define YYPACT_NINF -292
 static const yytype_int16 yypact[] =
 {
-    1654,   -15,  -284,  -284,  -284,   121,  -284,  -284,  -284,  -284,
-    -284,  -284,  -284,  -284,  -284,  -284,  -284,  -284,  -284,  -284,
-    -284,  -284,  -284,  -284,  -284,  -284,  -284,  -284,  -284,  -284,
-    -284,  -284,  -284,  -284,    11,  -284,  -284,   -30,  -284,  -284,
-    -284,  -284,  -284,  -284,  -284,   -27,   -67,   -19,    -1,   -34,
-    -284,    24,    69,  1763,  -284,  -284,  1922,  -284,     2,  -284,
-    1594,  -284,  -284,  -284,  -284,  1922,  -284,  -284,    19,  -284,
-    -284,    39,  -284,    59,  -284,  -284,  -284,  -284,  -284,  1817,
-     117,    43,  -284,   -13,  -284,    42,  1709,  -284,  -284,  1227,
-    -284,  -284,    47,  -284,  1709,   324,  -284,  -284,  -284,  -284,
-      96,  1817,   -63,  -284,   984,  1227,  -284,   123,  1817,   101,
-    1387,  -284,    78,  -284,  -284,  -284,  -284,  1227,  1227,  1227,
-    -284,  -284,  -284,  -284,  -284,    -3,  -284,  -284,  -284,    79,
-     -50,  1306,    93,  -284,  1227,   -23,    58,  -284,   -52,    97,
-    -284,  -284,  -284,   107,   106,   -60,  -284,    94,  -284,  -284,
-    1709,  1456,    86,    88,  -284,   100,   102,    91,  1066,   103,
-      99,  -284,  -284,    36,  -284,  -284,    -5,  -284,   -27,    73,
-    -284,  -284,  -284,  -284,   424,  -284,  -284,  -284,  -284,   104,
-    -284,  -284,  1145,  1227,  -284,   108,  -284,  -284,   101,   105,
-      34,  -284,   -46,  -284,  -284,  -284,    23,  -284,  -284,  1227,
-    1865,  -284,  -284,  1227,   109,  -284,  -284,  -284,  1227,  1227,
-    1227,  1227,  1227,  1227,  1227,  1227,  1227,  1227,  1227,  1227,
-    1227,  1227,  -284,  1525,  -284,  -284,  -284,   110,  -284,  1227,
-    -284,  -284,    48,  -284,  -284,   524,  -284,  -284,  -284,  -284,
-    -284,  1227,  1227,  -284,  -284,  -284,  1227,  -284,   112,  -284,
-    -284,    49,  1227,   101,  -284,   -58,  -284,  -284,   114,    98,
-    -284,   118,  -284,  -284,  -284,  -284,   -23,   -23,  -284,  -284,
-    -284,  -284,   -52,   -52,  -284,   107,   106,    80,  -284,   147,
-      39,   724,   824,    33,  -284,   905,   524,  -284,  -284,   116,
-    -284,  -284,   120,  -284,  1227,  -284,  -284,  1227,   124,  -284,
-    -284,  -284,  -284,   905,   110,    98,   153,  1817,   119,   125,
-    -284,  -284,   126,  -284,  1227,  -284,   122,   127,   202,  -284,
-     128,   624,  -284,   130,    35,  1227,   624,   110,  1227,  -284,
-    -284,  -284,  -284,   131,    98,  -284,  -284,  -284,  -284
+    1706,   -24,  -292,  -292,  -292,   154,  -292,  -292,  -292,  -292,
+    -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,
+    -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,
+    -292,  -292,  -292,  -292,  -292,  -292,  -292,    55,  -292,  -292,
+     -46,  -292,  -292,  -292,  -292,  -292,  -292,  -292,   -67,   -28,
+     -55,    13,    24,  -292,   -14,    33,  1821,  -292,  -292,  1989,
+    -292,    -3,  -292,  1643,  -292,  -292,  -292,  -292,  1989,  -292,
+    -292,   -17,  -292,  -292,    -9,  -292,    52,  -292,  -292,  -292,
+    -292,  -292,  1878,   121,    45,  -292,    21,  -292,    36,  1764,
+    -292,  -292,  1261,  -292,  -292,    18,  -292,  1764,   328,  -292,
+    -292,  -292,  -292,    72,  1878,   -62,  -292,  1009,  1261,  -292,
+     112,  1878,   111,  1427,  -292,    87,  -292,  -292,  -292,  -292,
+    1261,  1261,  1261,  -292,  -292,  -292,  -292,  -292,    35,  -292,
+    -292,  -292,    88,   -73,  1343,    90,  -292,  1261,    -4,    30,
+    -292,   -29,    70,  -292,  -292,  -292,   101,   102,   -42,  -292,
+      89,  -292,  -292,  1764,  1499,    83,    85,  -292,    96,    97,
+      93,  1094,    98,    94,  -292,  -292,    34,  -292,  -292,    28,
+    -292,   -67,   -58,  -292,  -292,  -292,  -292,   431,  -292,  -292,
+    -292,  -292,   103,  -292,  -292,  1176,  1261,  -292,   104,  -292,
+    -292,   111,   107,    29,  -292,   -49,  -292,  -292,  -292,   -27,
+    -292,  -292,  1261,  1929,  -292,  -292,  1261,   100,  -292,  -292,
+    -292,  1261,  1261,  1261,  1261,  1261,  1261,  1261,  1261,  1261,
+    1261,  1261,  1261,  1261,  1261,  -292,  1571,  -292,  -292,  -292,
+     109,  -292,  1261,  -292,  -292,    47,  -292,  -292,   534,  -292,
+    -292,  -292,  -292,  -292,  1261,  1261,  -292,  -292,  -292,  1261,
+    -292,   108,  -292,  -292,    51,  1261,   111,  -292,   -69,  -292,
+    -292,   113,    99,  -292,   114,  -292,  -292,  -292,  -292,    -4,
+      -4,  -292,  -292,  -292,  -292,   -29,   -29,  -292,   101,   102,
+      66,  -292,   139,    -9,   740,   843,   -15,  -292,   927,   534,
+    -292,  -292,   115,  -292,  -292,   116,  -292,  1261,  -292,  -292,
+    1261,   117,  -292,  -292,  -292,  -292,   927,   109,    99,   142,
+    1878,   119,   120,  -292,  -292,   118,  -292,  1261,  -292,   122,
+     123,   200,  -292,   125,   637,  -292,   126,    -7,  1261,   637,
+     109,  1261,  -292,  -292,  -292,  -292,   127,    99,  -292,  -292,
+    -292,  -292
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -284,  -284,  -284,  -284,  -284,  -284,  -284,    21,  -284,  -284,
-    -284,  -284,    31,  -284,   -33,  -284,   -76,   -37,  -284,  -284,
-    -284,     6,     7,    10,  -284,   -79,  -101,  -284,  -116,   -93,
-    -284,    12,    14,  -284,  -284,  -284,   132,   158,   152,   133,
-    -284,  -284,  -262,  -284,  -284,   -81,   184,   -51,   232,   -32,
-       0,  -284,  -284,  -284,   -77,  -104,    50,     1,  -176,   -29,
-    -165,  -263,  -284,  -284,  -284,   -74,  -283,  -284,  -284,   -70,
-      20,   -25,  -284,  -284,   -45,  -284,  -284,  -284,  -284,  -284,
-    -284,  -284,  -284,  -284,   199,  -284,  -284
+    -292,  -292,  -292,  -292,  -292,  -292,  -292,    17,  -292,  -292,
+    -292,  -292,    48,  -292,   -47,  -292,   -74,   -48,  -292,  -292,
+    -292,     1,    -1,     7,  -292,   -79,  -107,  -292,  -114,   -98,
+    -292,     6,    12,  -292,  -292,  -292,   128,   153,   148,   130,
+    -292,  -292,  -265,  -292,  -292,   -87,   180,   -53,   231,   -38,
+       0,  -292,  -292,  -292,   -83,  -106,    46,   -16,  -181,   -44,
+    -166,  -267,  -292,  -292,  -292,   -90,  -291,  -292,  -292,   -70,
+       4,   -41,  -292,  -292,   -63,  -292,  -292,  -292,  -292,  -292,
+    -292,  -292,  -292,  -292,   182,  -292,  -292
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -187
+#define YYTABLE_NINF -190
 static const yytype_int16 yytable[] =
 {
-      58,    96,    87,   196,   186,   108,   193,   249,    74,   245,
-     146,   185,    44,   108,    45,   255,   220,   151,   300,   212,
-     213,   318,    72,   306,    88,   146,    63,   182,   100,   108,
-     205,    68,   294,    92,   183,   109,    75,    76,    77,   202,
-     295,   306,   232,   109,   336,   203,    64,   193,    66,    67,
-     100,   221,   256,    58,   214,   215,    58,   188,   329,   109,
-      58,    81,    69,   329,    82,    58,   197,   198,    74,   108,
-     108,    70,    44,   223,    45,   103,    73,   104,     7,    58,
-     208,   209,   186,   259,   105,    83,    58,   199,   -79,   248,
-     242,   200,    89,   243,    58,   169,    75,    76,    77,   109,
-     109,    58,   263,   146,   102,   277,    24,    25,    58,    26,
-      58,    93,   257,   283,   236,   237,   238,    34,   242,   193,
-     133,   245,   304,   239,   333,     2,     3,     4,   242,   253,
-     242,    95,   254,   240,   106,   133,   268,   269,   270,   271,
-     287,   288,   108,   242,   253,   149,   284,   291,   194,   195,
-      58,    58,   337,   289,    75,    76,    77,   179,   210,   292,
-     211,   -25,   189,    89,    63,   207,   -26,   146,   201,   305,
-     216,   217,   109,   146,   169,   242,   297,   266,   267,   272,
-     273,   206,   218,   219,   225,   222,   226,   305,   228,   230,
-     229,   233,   234,   242,   246,   252,   313,  -130,   324,   250,
-     298,   312,  -186,   290,   307,   296,   -27,   310,   321,   334,
-     299,   311,   314,   133,   320,   146,   326,   323,   322,   327,
-     325,   262,   307,    58,   274,   328,   275,   186,   332,   338,
-     276,    97,   101,   180,   181,   169,    84,    65,   251,   264,
-     265,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   335,   301,   293,   286,    87,   302,   315,    91,
+      61,   189,   111,    90,    99,   252,    47,   196,   199,   188,
+     111,   248,    48,   149,   154,   258,   321,   303,    71,   205,
+      66,    91,    77,   309,   297,   206,   111,   208,   149,   103,
+      95,   185,   298,   -25,    73,    92,   112,   223,   186,   339,
+      67,   309,     7,    76,   112,   215,   216,   235,   196,    72,
+      86,   103,   259,    78,    79,    80,    61,   332,   191,    61,
+     112,    77,   332,    61,    75,   260,   111,   111,    61,    47,
+     226,   245,   224,    27,    28,    48,    29,   307,    96,   189,
+     217,   218,    61,   245,    37,   336,    98,   251,   262,    61,
+      92,   245,    78,    79,    80,    69,    70,    61,   172,   266,
+     112,   112,   211,   212,    61,   -79,   149,   200,   201,   105,
+     280,    61,   106,    61,   107,   239,   240,   241,   286,   152,
+     196,   108,    84,   248,   242,    85,   245,   256,   202,   246,
+     257,   109,   203,   213,   243,   214,   182,   290,   291,   111,
+     136,   271,   272,   273,   274,   245,   219,   220,   287,   256,
+     340,   292,   294,    61,    61,   136,    66,   295,     2,     3,
+       4,    78,    79,    80,   245,   300,   269,   270,   197,   198,
+     149,   275,   276,   112,   308,   192,   149,   172,   -26,   221,
+     204,   209,   222,   225,   228,   210,   229,   231,   232,   236,
+     237,  -130,   308,   316,   233,   301,   249,   245,   253,   315,
+     255,   310,   293,   327,  -189,   -27,   323,   299,   317,   313,
+     314,   324,   326,   302,   337,   329,   325,   330,   149,   310,
+     265,   278,   277,   328,   189,   331,    61,   335,   341,   100,
+     279,   104,   183,   136,   184,    87,    68,   254,   172,   338,
+     296,   304,   289,   318,   305,    94,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    90,     0,   267,
+     268,   136,   136,   136,   136,   136,   136,   136,   136,   136,
+     136,   136,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   172,   172,     0,     0,   172,   172,
+       0,     0,     0,     0,     0,     0,     0,   136,     0,     0,
+       0,     0,     0,   136,     0,     0,   172,     0,     0,     0,
+      61,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   172,     0,     0,     0,     0,   172,
+       0,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,   155,   156,   157,   136,   158,   159,   160,   161,
+       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,   162,    42,    43,    44,    45,     0,
+       0,     0,   115,    46,   116,   117,   118,   119,     0,     0,
+     120,   121,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   122,
+       0,     0,     0,   163,   164,     0,     0,     0,     0,   165,
+     123,   124,     0,   125,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,   155,   156,   157,     0,   158,
+     159,   160,   161,     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,   162,    42,    43,
+      44,    45,     0,     0,     0,   115,    46,   116,   117,   118,
+     119,     0,     0,   120,   121,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   133,     0,     0,
-       0,   169,   169,   133,     0,   169,   169,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   169,     0,     0,     0,    58,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   169,     0,     0,     0,   133,   169,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   152,   153,
-     154,     0,   155,   156,   157,   158,     0,     0,     0,    12,
+       0,     0,   122,     0,     0,     0,   163,   247,     0,     0,
+       0,     0,   165,   123,   124,     0,   125,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,   155,   156,
+     157,     0,   158,   159,   160,   161,     0,     0,     0,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,   159,    39,    40,
-      41,    42,     0,     0,     0,   112,    43,   113,   114,   115,
-     116,     0,     0,   117,   118,     0,     0,     0,     0,     0,
+      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+     162,    42,    43,    44,    45,     0,     0,     0,   115,    46,
+     116,   117,   118,   119,     0,     0,   120,   121,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   119,     0,     0,     0,   160,   161,     0,     0,
-       0,     0,   162,   120,   121,     0,   122,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   152,   153,
-     154,     0,   155,   156,   157,   158,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,   159,    39,    40,
-      41,    42,     0,     0,     0,   112,    43,   113,   114,   115,
-     116,     0,     0,   117,   118,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   119,     0,     0,     0,   160,   244,     0,     0,
-       0,     0,   162,   120,   121,     0,   122,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   152,   153,
-     154,     0,   155,   156,   157,   158,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,   159,    39,    40,
-      41,    42,     0,     0,     0,   112,    43,   113,   114,   115,
-     116,     0,     0,   117,   118,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   119,     0,     0,     0,   160,     0,     0,     0,
-       0,     0,   162,   120,   121,     0,   122,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   152,   153,
-     154,     0,   155,   156,   157,   158,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,   159,    39,    40,
-      41,    42,     0,     0,     0,   112,    43,   113,   114,   115,
-     116,     0,     0,   117,   118,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   119,     0,     0,     0,    95,     0,     0,     0,
-       0,     0,   162,   120,   121,     0,   122,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,   152,   153,
-     154,     0,   155,   156,   157,   158,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,   159,    39,    40,
-      41,    42,     0,     0,     0,   112,    43,   113,   114,   115,
-     116,     0,     0,   117,   118,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   119,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   162,   120,   121,     0,   122,     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,     0,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,     0,    39,    40,
-      41,    42,     0,     0,     0,   112,    43,   113,   114,   115,
-     116,     0,     0,   117,   118,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   107,     2,
-       3,     4,   119,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,   162,   120,   121,     0,   122,     0,     0,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,     0,    39,
-      40,    41,    42,     0,     0,     0,   112,    43,   113,   114,
-     115,   116,     0,     0,   117,   118,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   119,     8,     9,    10,    11,     0,     0,
-       0,     0,     0,     0,   120,   121,     0,   122,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,     0,     0,     0,     0,     0,    28,    29,    30,    31,
-      32,    33,     0,     0,     0,    37,    38,     0,    39,    40,
-      41,    42,     0,     0,     0,   112,    43,   113,   114,   115,
-     116,     0,     0,   117,   118,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   119,     0,     0,   184,     8,     9,    10,    11,
-       0,     0,     0,   120,   121,     0,   122,     0,     0,     0,
-       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,     0,     0,     0,     0,     0,    28,    29,
-      30,    31,    32,    33,     0,     0,     0,    37,    38,     0,
-      39,    40,    41,    42,     0,     0,     0,   112,    43,   113,
-     114,   115,   116,     0,     0,   117,   118,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   119,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,   231,   120,   121,     0,   122,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,     0,     0,     0,     0,     0,    28,    29,    30,
-      31,    32,    33,     0,     0,     0,    37,    38,     0,    39,
-      40,    41,    42,     0,     0,     0,   112,    43,   113,   114,
-     115,   116,     0,     0,   117,   118,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   119,     0,     0,   247,     8,     9,    10,
-      11,     0,     0,     0,   120,   121,     0,   122,     0,     0,
+       0,     0,     0,     0,     0,   122,     0,     0,     0,   163,
+       0,     0,     0,     0,     0,   165,   123,   124,     0,   125,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,   155,   156,   157,     0,   158,   159,   160,   161,     0,
        0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,     0,     0,     0,     0,     0,    28,
-      29,    30,    31,    32,    33,     0,     0,     0,    37,    38,
-       0,    39,    40,    41,    42,     0,     0,     0,   112,    43,
-     113,   114,   115,   116,     0,     0,   117,   118,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   119,     8,     9,    10,    11,
-       0,     0,     0,     0,     0,     0,   120,   121,     0,   122,
-       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,     0,     0,     0,     0,     0,    28,    29,
-      30,    31,    32,    33,     0,     0,     0,    37,   204,     0,
-      39,    40,    41,    42,     0,     0,     0,   112,    43,   113,
-     114,   115,   116,     0,     0,   117,   118,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     107,     2,     3,     4,   119,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,     0,   120,   121,     0,   122,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,     0,    26,    27,    28,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-       0,    39,    40,    41,    42,     0,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   107,
-       2,     3,     4,     0,     6,     7,     8,     9,    10,    11,
+      39,    40,    41,   162,    42,    43,    44,    45,     0,     0,
+       0,   115,    46,   116,   117,   118,   119,     0,     0,   120,
+     121,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   122,     0,
+       0,     0,    98,     0,     0,     0,     0,     0,   165,   123,
+     124,     0,   125,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,   155,   156,   157,     0,   158,   159,
+     160,   161,     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,   162,    42,    43,    44,
+      45,     0,     0,     0,   115,    46,   116,   117,   118,   119,
+       0,     0,   120,   121,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     192,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,     0,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,     0,
-      39,    40,    41,    42,     0,     0,     0,     0,    43,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   107,     2,
-       3,     4,     0,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   224,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,     0,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,     0,    39,
-      40,    41,    42,     0,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,    90,     0,     0,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   278,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,     0,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,     0,    39,    40,
-      41,    42,     0,     0,     0,     0,    43,     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,     0,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,     0,    39,    40,
-      41,    42,   107,     2,     3,     4,    43,     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,     0,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,     0,    39,    40,    41,    42,     2,     3,     4,
-       0,    43,     0,     8,     9,    10,    11,     0,     0,     0,
+       0,   122,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   165,   123,   124,     0,   125,     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,
-       0,     0,     0,     0,     0,    28,    29,    30,    31,    32,
-      33,     0,     0,     0,    37,    38,     0,    39,    40,    41,
-      42,     2,     3,     4,    85,    43,     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,     0,     0,     0,     0,     0,    28,
-      29,    30,    31,    32,    33,     0,     0,     0,    37,    38,
-       0,    39,    40,    41,    42,     8,     9,    10,    11,    43,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,     0,
+      42,    43,    44,    45,     0,     0,     0,   115,    46,   116,
+     117,   118,   119,     0,     0,   120,   121,     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,     0,     0,     0,     0,     0,    28,    29,    30,
-      31,    32,    33,     0,     0,     0,    37,    38,     0,    39,
-      40,    41,    42,     0,     0,     0,   260,    43,     0,     0,
-       0,   261,     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,     0,
-       0,     0,     0,     0,    28,    29,    30,    31,    32,    33,
-       0,     0,     0,    37,    38,     0,    39,    40,    41,    42,
-       0,     0,     0,     0,    43
+     110,     2,     3,     4,   122,     6,     7,     8,     9,    10,
+      11,     0,     0,     0,   165,   123,   124,     0,   125,     0,
+       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,     0,    42,    43,    44,    45,     0,     0,
+       0,   115,    46,   116,   117,   118,   119,     0,     0,   120,
+     121,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   122,     8,
+       9,    10,    11,     0,     0,     0,     0,     0,     0,   123,
+     124,     0,   125,     0,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
+       0,     0,     0,     0,    31,    32,    33,    34,    35,    36,
+       0,     0,     0,    40,    41,     0,    42,    43,    44,    45,
+       0,     0,     0,   115,    46,   116,   117,   118,   119,     0,
+       0,   120,   121,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     122,     0,     0,   187,     8,     9,    10,    11,     0,     0,
+       0,   123,   124,     0,   125,     0,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,     0,     0,     0,     0,     0,    31,
+      32,    33,    34,    35,    36,     0,     0,     0,    40,    41,
+       0,    42,    43,    44,    45,     0,     0,     0,   115,    46,
+     116,   117,   118,   119,     0,     0,   120,   121,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   122,     8,     9,    10,    11,
+       0,     0,     0,     0,     0,   234,   123,   124,     0,   125,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
+       0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
+      40,    41,     0,    42,    43,    44,    45,     0,     0,     0,
+     115,    46,   116,   117,   118,   119,     0,     0,   120,   121,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   122,     0,     0,
+     250,     8,     9,    10,    11,     0,     0,     0,   123,   124,
+       0,   125,     0,     0,     0,     0,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,     0,     0,     0,     0,     0,    31,    32,    33,    34,
+      35,    36,     0,     0,     0,    40,    41,     0,    42,    43,
+      44,    45,     0,     0,     0,   115,    46,   116,   117,   118,
+     119,     0,     0,   120,   121,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   122,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,   123,   124,     0,   125,     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,   207,     0,
+      42,    43,    44,    45,     0,     0,     0,   115,    46,   116,
+     117,   118,   119,     0,     0,   120,   121,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     110,     2,     3,     4,   122,     6,     7,     8,     9,    10,
+      11,     0,     0,     0,     0,   123,   124,     0,   125,     0,
+       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,     0,    42,    43,    44,    45,     0,     0,
+       0,     0,    46,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   110,     2,     3,     4,     0,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   195,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,     0,    42,    43,    44,    45,
+       0,     0,     0,     0,    46,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   110,     2,     3,     4,     0,     6,
+       7,     8,     9,    10,    11,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   227,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,     0,    42,    43,
+      44,    45,     0,     0,     0,     0,    46,     0,     0,     0,
+       0,     0,     0,    93,     0,     0,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   281,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,     0,
+      42,    43,    44,    45,     0,     0,     0,     0,    46,     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,   110,     2,     3,
+       4,    46,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+       0,    42,    43,    44,    45,     2,     3,     4,     0,    46,
+       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,     2,     3,     4,    88,    46,     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,     8,
+       9,    10,    11,    46,     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,
+       0,     0,     0,   263,    46,     0,     0,     0,   264,     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,
+       0,     0,     0,     0,    46
 };
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-284)))
+  (!!((Yystate) == (-292)))
 
 #define yytable_value_is_error(Yytable_value) \
   YYID (0)
 
 static const yytype_int16 yycheck[] =
 {
-       0,    71,    53,   119,   105,    86,   110,   183,     9,   174,
-      89,   104,     0,    94,     0,    61,    76,    94,   281,    71,
-      72,   304,    89,   285,    56,   104,    41,    90,    79,   110,
-     131,    61,    90,    65,    97,    86,    37,    38,    39,    89,
-      98,   303,   158,    94,   327,    95,    61,   151,    37,    38,
-     101,   111,    98,    53,   106,   107,    56,   108,   321,   110,
-      60,    95,    92,   326,    98,    65,    69,    70,     9,   150,
-     151,    98,    60,   150,    60,    88,    95,    90,     9,    79,
-     103,   104,   183,   199,    97,    61,    86,    90,    89,   182,
-      95,    94,    90,    98,    94,    95,    37,    38,    39,   150,
-     151,   101,   203,   182,    61,   221,    37,    38,   108,    40,
-     110,    92,    89,   229,    78,    79,    80,    48,    95,   223,
-      89,   286,    89,    87,    89,     4,     5,     6,    95,    95,
-      95,    92,    98,    97,    92,   104,   212,   213,   214,   215,
-     241,   242,   223,    95,    95,    98,    98,    98,   117,   118,
-     150,   151,   328,   246,    37,    38,    39,    61,   100,   252,
-     102,    88,    61,    90,    41,   134,    88,   246,    89,   285,
-      73,    74,   223,   252,   174,    95,    96,   210,   211,   216,
-     217,    88,    75,    77,    98,    91,    98,   303,    88,    98,
-      88,    88,    93,    95,    90,    90,   297,    88,   314,    91,
-      53,   294,    92,    91,   285,    91,    88,    91,    89,   325,
-     280,    91,    88,   182,    61,   294,    89,    91,    93,    17,
-      98,   200,   303,   223,   218,    97,   219,   328,    98,    98,
-     220,    73,    80,   101,   101,   235,    52,     5,   188,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   326,   282,   253,   235,   307,   282,   303,    60,
+       0,   108,    89,    56,    74,   186,     0,   113,   122,   107,
+      97,   177,     0,    92,    97,    64,   307,   284,    64,    92,
+      44,    59,     9,   288,    93,    98,   113,   134,   107,    82,
+      68,    93,   101,    91,   101,    93,    89,    79,   100,   330,
+      64,   306,     9,    98,    97,    74,    75,   161,   154,    95,
+      64,   104,   101,    40,    41,    42,    56,   324,   111,    59,
+     113,     9,   329,    63,    92,    92,   153,   154,    68,    63,
+     153,    98,   114,    40,    41,    63,    43,    92,    95,   186,
+     109,   110,    82,    98,    51,    92,    95,   185,   202,    89,
+      93,    98,    40,    41,    42,    40,    41,    97,    98,   206,
+     153,   154,   106,   107,   104,    92,   185,    72,    73,    64,
+     224,   111,    91,   113,    93,    81,    82,    83,   232,   101,
+     226,   100,    98,   289,    90,   101,    98,    98,    93,   101,
+     101,    95,    97,   103,   100,   105,    64,   244,   245,   226,
+      92,   215,   216,   217,   218,    98,    76,    77,   101,    98,
+     331,   249,   101,   153,   154,   107,    44,   255,     4,     5,
+       6,    40,    41,    42,    98,    99,   213,   214,   120,   121,
+     249,   219,   220,   226,   288,    64,   255,   177,    91,    78,
+      92,    91,    80,    94,   101,   137,   101,    91,    91,    91,
+      96,    91,   306,   300,   101,    56,    93,    98,    94,   297,
+      93,   288,    94,   317,    95,    91,    64,    94,    91,    94,
+      94,    92,    94,   283,   328,    92,    96,    17,   297,   306,
+     203,   222,   221,   101,   331,   100,   226,   101,   101,    76,
+     223,    83,   104,   185,   104,    55,     5,   191,   238,   329,
+     256,   285,   238,   306,   285,    63,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   310,    -1,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   284,   285,    -1,    -1,   288,   289,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   249,    -1,    -1,
+      -1,    -1,    -1,   255,    -1,    -1,   306,    -1,    -1,    -1,
+     310,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   324,    -1,    -1,    -1,    -1,   329,
+      -1,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,   297,    18,    19,    20,    21,
+      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    -1,    64,    65,    66,    67,    68,    69,    -1,    -1,
+      72,    73,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,
+      -1,    -1,    -1,    95,    96,    -1,    -1,    -1,    -1,   101,
+     102,   103,    -1,   105,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
+      19,    20,    21,    -1,    -1,    -1,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    -1,    -1,    -1,    64,    65,    66,    67,    68,
+      69,    -1,    -1,    72,    73,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   246,    -1,    -1,
-      -1,   281,   282,   252,    -1,   285,   286,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   303,    -1,    -1,    -1,   307,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   321,    -1,    -1,    -1,   294,   326,     3,     4,     5,
+      -1,    -1,    91,    -1,    -1,    -1,    95,    96,    -1,    -1,
+      -1,    -1,   101,   102,   103,    -1,   105,     3,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    -1,    40,    41,    42,    43,    44,    45,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    -1,    -1,    -1,    61,    62,    63,    64,    65,
-      66,    -1,    -1,    69,    70,    -1,    -1,    -1,    -1,    -1,
+      56,    57,    58,    59,    60,    -1,    -1,    -1,    64,    65,
+      66,    67,    68,    69,    -1,    -1,    72,    73,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,
-      -1,    -1,    98,    99,   100,    -1,   102,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    -1,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    -1,    -1,    -1,    61,    62,    63,    64,    65,
-      66,    -1,    -1,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,
-      -1,    -1,    98,    99,   100,    -1,   102,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    -1,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    -1,    -1,    -1,    61,    62,    63,    64,    65,
-      66,    -1,    -1,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    -1,    -1,    -1,    92,    -1,    -1,    -1,
-      -1,    -1,    98,    99,   100,    -1,   102,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    -1,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    -1,    -1,    -1,    61,    62,    63,    64,    65,
-      66,    -1,    -1,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    -1,    -1,    -1,    92,    -1,    -1,    -1,
-      -1,    -1,    98,    99,   100,    -1,   102,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    -1,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    -1,    -1,    -1,    61,    62,    63,    64,    65,
-      66,    -1,    -1,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    98,    99,   100,    -1,   102,     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,    -1,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    -1,    54,    55,
-      56,    57,    -1,    -1,    -1,    61,    62,    63,    64,    65,
-      66,    -1,    -1,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-       5,     6,    88,     8,     9,    10,    11,    12,    13,    -1,
-      -1,    -1,    98,    99,   100,    -1,   102,    -1,    -1,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    -1,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    -1,    54,
-      55,    56,    57,    -1,    -1,    -1,    61,    62,    63,    64,
-      65,    66,    -1,    -1,    69,    70,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    10,    11,    12,    13,    -1,    -1,
-      -1,    -1,    -1,    -1,    99,   100,    -1,   102,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,
-      46,    47,    -1,    -1,    -1,    51,    52,    -1,    54,    55,
-      56,    57,    -1,    -1,    -1,    61,    62,    63,    64,    65,
-      66,    -1,    -1,    69,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    -1,    -1,    91,    10,    11,    12,    13,
-      -1,    -1,    -1,    99,   100,    -1,   102,    -1,    -1,    -1,
-      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    -1,    -1,    -1,    -1,    -1,    42,    43,
-      44,    45,    46,    47,    -1,    -1,    -1,    51,    52,    -1,
-      54,    55,    56,    57,    -1,    -1,    -1,    61,    62,    63,
-      64,    65,    66,    -1,    -1,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    88,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    -1,    98,    99,   100,    -1,   102,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,
-      45,    46,    47,    -1,    -1,    -1,    51,    52,    -1,    54,
-      55,    56,    57,    -1,    -1,    -1,    61,    62,    63,    64,
-      65,    66,    -1,    -1,    69,    70,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    -1,    -1,    91,    10,    11,    12,
-      13,    -1,    -1,    -1,    99,   100,    -1,   102,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    91,    -1,    -1,    -1,    95,
+      -1,    -1,    -1,    -1,    -1,   101,   102,   103,    -1,   105,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    -1,    18,    19,    20,    21,    -1,
       -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,    42,
-      43,    44,    45,    46,    47,    -1,    -1,    -1,    51,    52,
-      -1,    54,    55,    56,    57,    -1,    -1,    -1,    61,    62,
-      63,    64,    65,    66,    -1,    -1,    69,    70,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    88,    10,    11,    12,    13,
-      -1,    -1,    -1,    -1,    -1,    -1,    99,   100,    -1,   102,
-      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    -1,    -1,    -1,    -1,    -1,    42,    43,
-      44,    45,    46,    47,    -1,    -1,    -1,    51,    52,    -1,
-      54,    55,    56,    57,    -1,    -1,    -1,    61,    62,    63,
-      64,    65,    66,    -1,    -1,    69,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       3,     4,     5,     6,    88,     8,     9,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    99,   100,    -1,   102,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    -1,    40,    41,    42,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      -1,    54,    55,    56,    57,    -1,    -1,    -1,    -1,    62,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-       4,     5,     6,    -1,     8,     9,    10,    11,    12,    13,
+      53,    54,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      -1,    64,    65,    66,    67,    68,    69,    -1,    -1,    72,
+      73,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,
+      -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,   101,   102,
+     103,    -1,   105,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      20,    21,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    -1,    64,    65,    66,    67,    68,    69,
+      -1,    -1,    72,    73,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      93,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    -1,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    -1,
-      54,    55,    56,    57,    -1,    -1,    -1,    -1,    62,    -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,    93,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    -1,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    -1,    54,
-      55,    56,    57,    -1,    -1,    -1,    -1,    62,    -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,    93,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    -1,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    -1,    54,    55,
-      56,    57,    -1,    -1,    -1,    -1,    62,     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,    -1,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    -1,    54,    55,
-      56,    57,     3,     4,     5,     6,    62,     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,    -1,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    -1,    54,    55,    56,    57,     4,     5,     6,
-      -1,    62,    -1,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,    91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   101,   102,   103,    -1,   105,     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,
-      -1,    -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,
-      47,    -1,    -1,    -1,    51,    52,    -1,    54,    55,    56,
-      57,     4,     5,     6,    61,    62,    -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,    -1,    -1,    -1,    -1,    -1,    42,
-      43,    44,    45,    46,    47,    -1,    -1,    -1,    51,    52,
-      -1,    54,    55,    56,    57,    10,    11,    12,    13,    62,
+      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
+      57,    58,    59,    60,    -1,    -1,    -1,    64,    65,    66,
+      67,    68,    69,    -1,    -1,    72,    73,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    -1,    -1,    -1,    -1,    -1,    42,    43,    44,
-      45,    46,    47,    -1,    -1,    -1,    51,    52,    -1,    54,
-      55,    56,    57,    -1,    -1,    -1,    61,    62,    -1,    -1,
-      -1,    66,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    -1,
-      -1,    -1,    -1,    -1,    42,    43,    44,    45,    46,    47,
-      -1,    -1,    -1,    51,    52,    -1,    54,    55,    56,    57,
-      -1,    -1,    -1,    -1,    62
+       3,     4,     5,     6,    91,     8,     9,    10,    11,    12,
+      13,    -1,    -1,    -1,   101,   102,   103,    -1,   105,    -1,
+      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    -1,    57,    58,    59,    60,    -1,    -1,
+      -1,    64,    65,    66,    67,    68,    69,    -1,    -1,    72,
+      73,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    10,
+      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,   102,
+     103,    -1,   105,    -1,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
+      -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
+      -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,    60,
+      -1,    -1,    -1,    64,    65,    66,    67,    68,    69,    -1,
+      -1,    72,    73,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      91,    -1,    -1,    94,    10,    11,    12,    13,    -1,    -1,
+      -1,   102,   103,    -1,   105,    -1,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
+      46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
+      -1,    57,    58,    59,    60,    -1,    -1,    -1,    64,    65,
+      66,    67,    68,    69,    -1,    -1,    72,    73,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    91,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,   101,   102,   103,    -1,   105,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
+      54,    55,    -1,    57,    58,    59,    60,    -1,    -1,    -1,
+      64,    65,    66,    67,    68,    69,    -1,    -1,    72,    73,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    -1,    -1,
+      94,    10,    11,    12,    13,    -1,    -1,    -1,   102,   103,
+      -1,   105,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
+      49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,
+      59,    60,    -1,    -1,    -1,    64,    65,    66,    67,    68,
+      69,    -1,    -1,    72,    73,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    91,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,    -1,    -1,   102,   103,    -1,   105,    -1,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
+      57,    58,    59,    60,    -1,    -1,    -1,    64,    65,    66,
+      67,    68,    69,    -1,    -1,    72,    73,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       3,     4,     5,     6,    91,     8,     9,    10,    11,    12,
+      13,    -1,    -1,    -1,    -1,   102,   103,    -1,   105,    -1,
+      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    -1,    57,    58,    59,    60,    -1,    -1,
+      -1,    -1,    65,    -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,    96,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    -1,    57,    58,    59,    60,
+      -1,    -1,    -1,    -1,    65,    -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,    96,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
+      59,    60,    -1,    -1,    -1,    -1,    65,    -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,    96,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
+      57,    58,    59,    60,    -1,    -1,    -1,    -1,    65,     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,     3,     4,     5,
+       6,    65,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      -1,    57,    58,    59,    60,     4,     5,     6,    -1,    65,
+      -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,     4,     5,     6,    64,    65,    -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,    10,
+      11,    12,    13,    65,    -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,
+      -1,    -1,    -1,    64,    65,    -1,    -1,    -1,    69,    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,
+      -1,    -1,    -1,    -1,    65
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1420,38 +1440,39 @@
 {
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    54,
-      55,    56,    57,    62,   143,   144,   145,   146,   147,   152,
-     153,   154,   155,   157,   158,   159,   160,   161,   162,   163,
-     195,   196,   197,    41,    61,   160,    37,    38,    61,    92,
-      98,   198,    89,    95,     9,    37,    38,    39,   149,   150,
-     156,    95,    98,    61,   158,    61,   142,   159,   161,    90,
-       0,   196,   161,    92,   165,    92,   181,   149,   148,   151,
-     159,   150,    61,    88,    90,    97,    92,     3,   157,   159,
-     166,   167,    61,    63,    64,    65,    66,    69,    70,    88,
-      99,   100,   102,   113,   114,   115,   117,   118,   119,   120,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    57,    58,    59,    60,    65,   146,   147,   148,
+     149,   150,   155,   156,   157,   158,   160,   161,   162,   163,
+     164,   165,   166,   198,   199,   200,    44,    64,   163,    40,
+      41,    64,    95,   101,   201,    92,    98,     9,    40,    41,
+      42,   152,   153,   159,    98,   101,    64,   161,    64,   145,
+     162,   164,    93,     0,   199,   164,    95,   168,    95,   184,
+     152,   151,   154,   162,   153,    64,    91,    93,   100,    95,
+       3,   160,   162,   169,   170,    64,    66,    67,    68,    69,
+      72,    73,    91,   102,   103,   105,   116,   117,   118,   120,
      121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   141,   162,    98,
-     164,   166,    14,    15,    16,    18,    19,    20,    21,    53,
-      92,    93,    98,   124,   137,   138,   140,   143,   144,   162,
-     171,   172,   173,   174,   182,   183,   184,   187,   194,    61,
-     148,   151,    90,    97,    91,   141,   138,   170,   159,    61,
-     168,   169,    93,   167,   124,   124,   140,    69,    70,    90,
-      94,    89,    89,    95,    52,   138,    88,   124,   103,   104,
-     100,   102,    71,    72,   106,   107,    73,    74,    75,    77,
-      76,   111,    91,   166,    93,    98,    98,   189,    88,    88,
-      98,    98,   140,    88,    93,   175,    78,    79,    80,    87,
-      97,   139,    95,    98,    93,   172,    90,    91,   141,   170,
-      91,   168,    90,    95,    98,    61,    98,    89,   116,   140,
-      61,    66,   119,   138,   124,   124,   126,   126,   128,   128,
-     128,   128,   129,   129,   133,   134,   135,   140,    93,   178,
-     179,   180,   190,   140,    98,   188,   182,   138,   138,   141,
-      91,    98,   141,   169,    90,    98,    91,    96,    53,   181,
-     173,   171,   183,   191,    89,   140,   154,   157,   186,   176,
-      91,    91,   141,   138,    88,   186,   192,   193,   178,   185,
-      61,    89,    93,    91,   140,    98,    89,    17,    97,   173,
-     177,   181,    98,    89,   140,   177,   178,   170,    98
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     144,   165,   101,   167,   169,    14,    15,    16,    18,    19,
+      20,    21,    56,    95,    96,   101,   127,   140,   141,   143,
+     146,   147,   165,   174,   175,   176,   177,   185,   186,   187,
+     190,   197,    64,   151,   154,    93,   100,    94,   144,   141,
+     173,   162,    64,   171,   172,    96,   170,   127,   127,   143,
+      72,    73,    93,    97,    92,    92,    98,    55,   141,    91,
+     127,   106,   107,   103,   105,    74,    75,   109,   110,    76,
+      77,    78,    80,    79,   114,    94,   169,    96,   101,   101,
+     192,    91,    91,   101,   101,   143,    91,    96,   178,    81,
+      82,    83,    90,   100,   142,    98,   101,    96,   175,    93,
+      94,   144,   173,    94,   171,    93,    98,   101,    64,   101,
+      92,   119,   143,    64,    69,   122,   141,   127,   127,   129,
+     129,   131,   131,   131,   131,   132,   132,   136,   137,   138,
+     143,    96,   181,   182,   183,   193,   143,   101,   191,   185,
+     141,   141,   144,    94,   101,   144,   172,    93,   101,    94,
+      99,    56,   184,   176,   174,   186,   194,    92,   143,   157,
+     160,   189,   179,    94,    94,   144,   141,    91,   189,   195,
+     196,   181,   188,    64,    92,    96,    94,   143,   101,    92,
+      17,   100,   176,   180,   184,   101,    92,   143,   180,   181,
+     173,   101
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3936,6 +3957,33 @@
   case 144:
 
     {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(2);
+    }
+    break;
+
+  case 145:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(3);
+    }
+    break;
+
+  case 146:
+
+    {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
+    }
+    break;
+
+  case 147:
+
+    {
         FRAG_VERT_ONLY("mat2", (yyvsp[(1) - (1)].lex).line);
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
@@ -3943,7 +3991,7 @@
     }
     break;
 
-  case 145:
+  case 148:
 
     {
         FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
@@ -3953,7 +4001,7 @@
     }
     break;
 
-  case 146:
+  case 149:
 
     {
         FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
@@ -3963,7 +4011,7 @@
     }
     break;
 
-  case 147:
+  case 150:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3972,7 +4020,7 @@
     }
     break;
 
-  case 148:
+  case 151:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3981,7 +4029,7 @@
     }
     break;
 
-  case 149:
+  case 152:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3990,7 +4038,7 @@
     }
     break;
 
-  case 150:
+  case 153:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3999,7 +4047,7 @@
     }
     break;
 
-  case 151:
+  case 154:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4008,7 +4056,7 @@
     }
     break;
 
-  case 152:
+  case 155:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4017,7 +4065,7 @@
     }
     break;
 
-  case 153:
+  case 156:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -4026,7 +4074,7 @@
     }
     break;
 
-  case 154:
+  case 157:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -4035,7 +4083,7 @@
     }
     break;
 
-  case 155:
+  case 158:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -4048,7 +4096,7 @@
     }
     break;
 
-  case 156:
+  case 159:
 
     {
         if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
@@ -4061,7 +4109,7 @@
     }
     break;
 
-  case 157:
+  case 160:
 
     {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
@@ -4070,7 +4118,7 @@
     }
     break;
 
-  case 158:
+  case 161:
 
     {
         //
@@ -4084,38 +4132,38 @@
     }
     break;
 
-  case 159:
+  case 162:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (3)].lex).line, *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 160:
+  case 163:
 
     {
         (yyval.interm.type) = context->addStructure((yyvsp[(1) - (6)].lex).line, (yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string, (yyvsp[(5) - (6)].interm.typeList));
     }
     break;
 
-  case 161:
+  case 164:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 162:
+  case 165:
 
     {
         (yyval.interm.type) = context->addStructure((yyvsp[(1) - (5)].lex).line, 0, "", (yyvsp[(4) - (5)].interm.typeList));
     }
     break;
 
-  case 163:
+  case 166:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
     }
     break;
 
-  case 164:
+  case 167:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
@@ -4131,14 +4179,14 @@
     }
     break;
 
-  case 165:
+  case 168:
 
     {
         (yyval.interm.typeList) = context->addStructDeclaratorList((yyvsp[(1) - (3)].interm.type), (yyvsp[(2) - (3)].interm.typeList));
     }
     break;
 
-  case 166:
+  case 169:
 
     {
         // ES3 Only, but errors should be handled elsewhere
@@ -4147,7 +4195,7 @@
     }
     break;
 
-  case 167:
+  case 170:
 
     {
         (yyval.interm.typeList) = NewPoolTTypeList();
@@ -4155,14 +4203,14 @@
     }
     break;
 
-  case 168:
+  case 171:
 
     {
         (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
     }
     break;
 
-  case 169:
+  case 172:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
@@ -4174,7 +4222,7 @@
     }
     break;
 
-  case 170:
+  case 173:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4191,24 +4239,9 @@
     }
     break;
 
-  case 171:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
-    break;
-
-  case 172:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 173:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
-    break;
-
   case 174:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
   case 175:
@@ -4218,7 +4251,7 @@
 
   case 176:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
   case 177:
@@ -4238,21 +4271,36 @@
 
   case 180:
 
-    { (yyval.interm.intermAggregate) = 0; }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 181:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 182:
 
-    { context->symbolTable.pop(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 183:
 
+    { (yyval.interm.intermAggregate) = 0; }
+    break;
+
+  case 184:
+
+    { context->symbolTable.push(); }
+    break;
+
+  case 185:
+
+    { context->symbolTable.pop(); }
+    break;
+
+  case 186:
+
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
             (yyvsp[(3) - (5)].interm.intermAggregate)->setOp(EOpSequence);
@@ -4262,44 +4310,44 @@
     }
     break;
 
-  case 184:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 185:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
-  case 186:
-
-    { context->symbolTable.push(); }
-    break;
-
   case 187:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 188:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 189:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    { context->symbolTable.push(); }
     break;
 
   case 190:
 
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    break;
+
+  case 191:
+
+    { context->symbolTable.push(); }
+    break;
+
+  case 192:
+
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    break;
+
+  case 193:
+
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 191:
+  case 194:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4310,31 +4358,31 @@
     }
     break;
 
-  case 192:
+  case 195:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     }
     break;
 
-  case 193:
+  case 196:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     }
     break;
 
-  case 194:
+  case 197:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 195:
+  case 198:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 196:
+  case 199:
 
     {
         if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4343,7 +4391,7 @@
     }
     break;
 
-  case 197:
+  case 200:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4351,7 +4399,7 @@
     }
     break;
 
-  case 198:
+  case 201:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4359,7 +4407,7 @@
     }
     break;
 
-  case 199:
+  case 202:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4368,7 +4416,7 @@
     }
     break;
 
-  case 200:
+  case 203:
 
     {
         TIntermNode* intermNode;
@@ -4386,12 +4434,12 @@
     }
     break;
 
-  case 201:
+  case 204:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 202:
+  case 205:
 
     {
         context->symbolTable.pop();
@@ -4400,12 +4448,12 @@
     }
     break;
 
-  case 203:
+  case 206:
 
     { ++context->loopNestingLevel; }
     break;
 
-  case 204:
+  case 207:
 
     {
         if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4416,12 +4464,12 @@
     }
     break;
 
-  case 205:
+  case 208:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 206:
+  case 209:
 
     {
         context->symbolTable.pop();
@@ -4430,35 +4478,35 @@
     }
     break;
 
-  case 207:
+  case 210:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 208:
+  case 211:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 209:
+  case 212:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 210:
+  case 213:
 
     {
         (yyval.interm.intermTypedNode) = 0;
     }
     break;
 
-  case 211:
+  case 214:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
@@ -4466,7 +4514,7 @@
     }
     break;
 
-  case 212:
+  case 215:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4474,7 +4522,7 @@
     }
     break;
 
-  case 213:
+  case 216:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4485,7 +4533,7 @@
     }
     break;
 
-  case 214:
+  case 217:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4496,7 +4544,7 @@
     }
     break;
 
-  case 215:
+  case 218:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4507,7 +4555,7 @@
     }
     break;
 
-  case 216:
+  case 219:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4522,7 +4570,7 @@
     }
     break;
 
-  case 217:
+  case 220:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4530,7 +4578,7 @@
     }
     break;
 
-  case 218:
+  case 221:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4538,7 +4586,7 @@
     }
     break;
 
-  case 219:
+  case 222:
 
     {
         (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
@@ -4546,21 +4594,21 @@
     }
     break;
 
-  case 220:
+  case 223:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 221:
+  case 224:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 222:
+  case 225:
 
     {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
@@ -4649,7 +4697,7 @@
     }
     break;
 
-  case 223:
+  case 226:
 
     {
         //?? Check that all paths return a value if return type != void ?
diff --git a/src/compiler/glslang_tab.h b/src/compiler/glslang_tab.h
index 54c10a1..a794825 100644
--- a/src/compiler/glslang_tab.h
+++ b/src/compiler/glslang_tab.h
@@ -77,84 +77,87 @@
      VEC2 = 286,
      VEC3 = 287,
      VEC4 = 288,
-     MATRIX2 = 289,
-     MATRIX3 = 290,
-     MATRIX4 = 291,
-     IN_QUAL = 292,
-     OUT_QUAL = 293,
-     INOUT_QUAL = 294,
-     UNIFORM = 295,
-     VARYING = 296,
-     MATRIX2x3 = 297,
-     MATRIX3x2 = 298,
-     MATRIX2x4 = 299,
-     MATRIX4x2 = 300,
-     MATRIX3x4 = 301,
-     MATRIX4x3 = 302,
-     CENTROID = 303,
-     FLAT = 304,
-     SMOOTH = 305,
-     STRUCT = 306,
-     VOID_TYPE = 307,
-     WHILE = 308,
-     SAMPLER2D = 309,
-     SAMPLERCUBE = 310,
-     SAMPLER_EXTERNAL_OES = 311,
-     SAMPLER2DRECT = 312,
-     SAMPLER3D = 313,
-     SAMPLER3DRECT = 314,
-     SAMPLER2DSHADOW = 315,
-     IDENTIFIER = 316,
-     TYPE_NAME = 317,
-     FLOATCONSTANT = 318,
-     INTCONSTANT = 319,
-     BOOLCONSTANT = 320,
-     FIELD_SELECTION = 321,
-     LEFT_OP = 322,
-     RIGHT_OP = 323,
-     INC_OP = 324,
-     DEC_OP = 325,
-     LE_OP = 326,
-     GE_OP = 327,
-     EQ_OP = 328,
-     NE_OP = 329,
-     AND_OP = 330,
-     OR_OP = 331,
-     XOR_OP = 332,
-     MUL_ASSIGN = 333,
-     DIV_ASSIGN = 334,
-     ADD_ASSIGN = 335,
-     MOD_ASSIGN = 336,
-     LEFT_ASSIGN = 337,
-     RIGHT_ASSIGN = 338,
-     AND_ASSIGN = 339,
-     XOR_ASSIGN = 340,
-     OR_ASSIGN = 341,
-     SUB_ASSIGN = 342,
-     LEFT_PAREN = 343,
-     RIGHT_PAREN = 344,
-     LEFT_BRACKET = 345,
-     RIGHT_BRACKET = 346,
-     LEFT_BRACE = 347,
-     RIGHT_BRACE = 348,
-     DOT = 349,
-     COMMA = 350,
-     COLON = 351,
-     EQUAL = 352,
-     SEMICOLON = 353,
-     BANG = 354,
-     DASH = 355,
-     TILDE = 356,
-     PLUS = 357,
-     STAR = 358,
-     SLASH = 359,
-     PERCENT = 360,
-     LEFT_ANGLE = 361,
-     RIGHT_ANGLE = 362,
-     VERTICAL_BAR = 363,
-     CARET = 364,
-     AMPERSAND = 365,
-     QUESTION = 366
+     UVEC2 = 289,
+     UVEC3 = 290,
+     UVEC4 = 291,
+     MATRIX2 = 292,
+     MATRIX3 = 293,
+     MATRIX4 = 294,
+     IN_QUAL = 295,
+     OUT_QUAL = 296,
+     INOUT_QUAL = 297,
+     UNIFORM = 298,
+     VARYING = 299,
+     MATRIX2x3 = 300,
+     MATRIX3x2 = 301,
+     MATRIX2x4 = 302,
+     MATRIX4x2 = 303,
+     MATRIX3x4 = 304,
+     MATRIX4x3 = 305,
+     CENTROID = 306,
+     FLAT = 307,
+     SMOOTH = 308,
+     STRUCT = 309,
+     VOID_TYPE = 310,
+     WHILE = 311,
+     SAMPLER2D = 312,
+     SAMPLERCUBE = 313,
+     SAMPLER_EXTERNAL_OES = 314,
+     SAMPLER2DRECT = 315,
+     SAMPLER3D = 316,
+     SAMPLER3DRECT = 317,
+     SAMPLER2DSHADOW = 318,
+     IDENTIFIER = 319,
+     TYPE_NAME = 320,
+     FLOATCONSTANT = 321,
+     INTCONSTANT = 322,
+     BOOLCONSTANT = 323,
+     FIELD_SELECTION = 324,
+     LEFT_OP = 325,
+     RIGHT_OP = 326,
+     INC_OP = 327,
+     DEC_OP = 328,
+     LE_OP = 329,
+     GE_OP = 330,
+     EQ_OP = 331,
+     NE_OP = 332,
+     AND_OP = 333,
+     OR_OP = 334,
+     XOR_OP = 335,
+     MUL_ASSIGN = 336,
+     DIV_ASSIGN = 337,
+     ADD_ASSIGN = 338,
+     MOD_ASSIGN = 339,
+     LEFT_ASSIGN = 340,
+     RIGHT_ASSIGN = 341,
+     AND_ASSIGN = 342,
+     XOR_ASSIGN = 343,
+     OR_ASSIGN = 344,
+     SUB_ASSIGN = 345,
+     LEFT_PAREN = 346,
+     RIGHT_PAREN = 347,
+     LEFT_BRACKET = 348,
+     RIGHT_BRACKET = 349,
+     LEFT_BRACE = 350,
+     RIGHT_BRACE = 351,
+     DOT = 352,
+     COMMA = 353,
+     COLON = 354,
+     EQUAL = 355,
+     SEMICOLON = 356,
+     BANG = 357,
+     DASH = 358,
+     TILDE = 359,
+     PLUS = 360,
+     STAR = 361,
+     SLASH = 362,
+     PERCENT = 363,
+     LEFT_ANGLE = 364,
+     RIGHT_ANGLE = 365,
+     VERTICAL_BAR = 366,
+     CARET = 367,
+     AMPERSAND = 368,
+     QUESTION = 369
    };
 #endif
 
diff --git a/src/compiler/intermediate.h b/src/compiler/intermediate.h
index 00c0faf..b9d2683 100644
--- a/src/compiler/intermediate.h
+++ b/src/compiler/intermediate.h
@@ -173,6 +173,9 @@
     EOpConstructIVec2,
     EOpConstructIVec3,
     EOpConstructIVec4,
+    EOpConstructUVec2,
+    EOpConstructUVec3,
+    EOpConstructUVec4,
     EOpConstructMat2,
     EOpConstructMat3,
     EOpConstructMat4,