Implement shader compiler support for uint scalars.

Bug 19331817

Change-Id: Ie901756ef4fdbab1dfa6ae01c77104fc84de247f
Reviewed-on: https://swiftshader-review.googlesource.com/2312
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/compiler/BaseTypes.h b/src/OpenGL/compiler/BaseTypes.h
index 4406760..254e36a 100644
--- a/src/OpenGL/compiler/BaseTypes.h
+++ b/src/OpenGL/compiler/BaseTypes.h
@@ -38,6 +38,7 @@
     EbtVoid,
     EbtFloat,
     EbtInt,
+    EbtUInt,
     EbtBool,
     EbtGuardSamplerBegin,  // non type:  see implementation of IsSampler()
     EbtSampler2D,
@@ -57,6 +58,7 @@
     case EbtVoid:               return "void";
     case EbtFloat:              return "float";
     case EbtInt:                return "int";
+    case EbtUInt:               return "uint";
     case EbtBool:               return "bool";
     case EbtSampler2D:          return "sampler2D";
     case EbtSamplerCube:        return "samplerCube";
diff --git a/src/OpenGL/compiler/ConstantUnion.h b/src/OpenGL/compiler/ConstantUnion.h
index 397bb75..ffc1c4c 100644
--- a/src/OpenGL/compiler/ConstantUnion.h
+++ b/src/OpenGL/compiler/ConstantUnion.h
@@ -26,6 +26,7 @@
             switch (constant.type)
             {
               case EbtInt:   setFConst(static_cast<float>(constant.getIConst())); break;
+              case EbtUInt:  setFConst(static_cast<float>(constant.getUConst())); break;
               case EbtBool:  setFConst(static_cast<float>(constant.getBConst())); break;
               case EbtFloat: setFConst(static_cast<float>(constant.getFConst())); break;
               default:       return false;
@@ -35,15 +36,27 @@
             switch (constant.type)
             {
               case EbtInt:   setIConst(static_cast<int>(constant.getIConst())); break;
+              case EbtUInt:  setIConst(static_cast<int>(constant.getUConst())); break;
               case EbtBool:  setIConst(static_cast<int>(constant.getBConst())); break;
               case EbtFloat: setIConst(static_cast<int>(constant.getFConst())); break;
               default:       return false;
             }
             break;
+          case EbtUInt:
+            switch (constant.type)
+            {
+              case EbtInt:   setUConst(static_cast<unsigned int>(constant.getIConst())); break;
+              case EbtUInt:  setUConst(static_cast<unsigned int>(constant.getUConst())); break;
+              case EbtBool:  setUConst(static_cast<unsigned int>(constant.getBConst())); break;
+              case EbtFloat: setUConst(static_cast<unsigned int>(constant.getFConst())); break;
+              default:       return false;
+            }
+            break;
           case EbtBool:
             switch (constant.type)
             {
               case EbtInt:   setBConst(constant.getIConst() != 0);    break;
+              case EbtUInt:  setBConst(constant.getUConst() != 0);    break;
               case EbtBool:  setBConst(constant.getBConst());         break;
               case EbtFloat: setBConst(constant.getFConst() != 0.0f); break;
               default:       return false;
@@ -53,6 +66,7 @@
             switch (constant.type)
             {
               case EbtInt:   setIConst(constant.getIConst()); break;
+              case EbtUInt:  setUConst(constant.getUConst()); break;
               case EbtBool:  setBConst(constant.getBConst()); break;
               case EbtFloat: setFConst(constant.getFConst()); break;
               default:       return false;
@@ -66,10 +80,12 @@
     }
 
     void setIConst(int i) {iConst = i; type = EbtInt; }
+    void setUConst(unsigned int u) { uConst = u; type = EbtUInt; }
     void setFConst(float f) {fConst = f; type = EbtFloat; }
     void setBConst(bool b) {bConst = b; type = EbtBool; }
 
     int getIConst() const { return iConst; }
+    unsigned int getUConst() const { return uConst; }
     float getFConst() const { return fConst; }
     bool getBConst() const { return bConst; }
 
@@ -91,6 +107,11 @@
         return i == iConst;
     }
 
+    bool operator==(const unsigned int u) const
+    {
+        return u == uConst;
+    }
+
     bool operator==(const float f) const
     {
         return f == fConst;
@@ -109,6 +130,8 @@
         switch (type) {
         case EbtInt:
             return constant.iConst == iConst;
+        case EbtUInt:
+            return constant.uConst == uConst;
         case EbtFloat:
             return constant.fConst == fConst;
         case EbtBool:
@@ -125,6 +148,11 @@
         return !operator==(i);
     }
 
+    bool operator!=(const unsigned int u) const
+    {
+        return !operator==(u);
+    }
+
     bool operator!=(const float f) const
     {
         return !operator==(f);
@@ -146,6 +174,8 @@
         switch (type) {
         case EbtInt:
             return iConst > constant.iConst;
+        case EbtUInt:
+            return uConst > constant.uConst;
         case EbtFloat:
             return fConst > constant.fConst;
         default:
@@ -161,6 +191,8 @@
         switch (type) {
         case EbtInt:
             return iConst < constant.iConst;
+        case EbtUInt:
+            return uConst < constant.uConst;
         case EbtFloat:
             return fConst < constant.fConst;
         default:
@@ -176,6 +208,7 @@
         assert(type == constant.type);
         switch (type) {
         case EbtInt: returnValue.setIConst(iConst + constant.iConst); break;
+        case EbtUInt: returnValue.setUConst(uConst + constant.uConst); break;
         case EbtFloat: returnValue.setFConst(fConst + constant.fConst); break;
         default: assert(false && "Default missing");
         }
@@ -189,6 +222,7 @@
         assert(type == constant.type);
         switch (type) {
         case EbtInt: returnValue.setIConst(iConst - constant.iConst); break;
+        case EbtUInt: returnValue.setUConst(uConst - constant.uConst); break;
         case EbtFloat: returnValue.setFConst(fConst - constant.fConst); break;
         default: assert(false && "Default missing");
         }
@@ -202,6 +236,7 @@
         assert(type == constant.type);
         switch (type) {
         case EbtInt: returnValue.setIConst(iConst * constant.iConst); break;
+        case EbtUInt: returnValue.setUConst(uConst * constant.uConst); break;
         case EbtFloat: returnValue.setFConst(fConst * constant.fConst); break; 
         default: assert(false && "Default missing");
         }
@@ -215,6 +250,7 @@
         assert(type == constant.type);
         switch (type) {
         case EbtInt: returnValue.setIConst(iConst % constant.iConst); break;
+        case EbtUInt: returnValue.setUConst(uConst % constant.uConst); break;
         default:     assert(false && "Default missing");
         }
 
@@ -227,6 +263,7 @@
         assert(type == constant.type);
         switch (type) {
         case EbtInt: returnValue.setIConst(iConst >> constant.iConst); break;
+        case EbtUInt: returnValue.setUConst(uConst >> constant.uConst); break;
         default:     assert(false && "Default missing");
         }
 
@@ -236,9 +273,13 @@
     ConstantUnion operator<<(const ConstantUnion& constant) const
     { 
         ConstantUnion returnValue;
-        assert(type == constant.type);
+        // The signedness of the second parameter might be different, but we
+        // don't care, since the result is undefined if the second parameter is
+        // negative, and aliasing should not be a problem with unions.
+        assert(constant.type == EbtInt || constant.type == EbtUInt);
         switch (type) {
         case EbtInt: returnValue.setIConst(iConst << constant.iConst); break;
+        case EbtUInt: returnValue.setUConst(uConst << constant.uConst); break;
         default:     assert(false && "Default missing");
         }
 
@@ -248,9 +289,10 @@
     ConstantUnion operator&(const ConstantUnion& constant) const
     { 
         ConstantUnion returnValue;
-        assert(type == constant.type);
+        assert(constant.type == EbtInt || constant.type == EbtUInt);
         switch (type) {
         case EbtInt:  returnValue.setIConst(iConst & constant.iConst); break;
+        case EbtUInt:  returnValue.setUConst(uConst & constant.uConst); break;
         default:     assert(false && "Default missing");
         }
 
@@ -263,6 +305,7 @@
         assert(type == constant.type);
         switch (type) {
         case EbtInt:  returnValue.setIConst(iConst | constant.iConst); break;
+        case EbtUInt:  returnValue.setUConst(uConst | constant.uConst); break;
         default:     assert(false && "Default missing");
         }
 
@@ -275,6 +318,7 @@
         assert(type == constant.type);
         switch (type) {
         case EbtInt:  returnValue.setIConst(iConst ^ constant.iConst); break;
+        case EbtUInt:  returnValue.setUConst(uConst ^ constant.uConst); break;
         default:     assert(false && "Default missing");
         }
 
@@ -310,6 +354,7 @@
 
     union  {
         int iConst;  // used for ivec, scalar ints
+        unsigned int uConst; // used for uvec, scalar uints
         bool bConst; // used for bvec, scalar bools
         float fConst;   // used for vec, mat, scalar floats
     } ;
diff --git a/src/OpenGL/compiler/Intermediate.cpp b/src/OpenGL/compiler/Intermediate.cpp
index 2db74ed..7193e34 100644
--- a/src/OpenGL/compiler/Intermediate.cpp
+++ b/src/OpenGL/compiler/Intermediate.cpp
@@ -601,6 +601,7 @@
         case EOpConstructIVec3:
         case EOpConstructIVec4:
         case EOpConstructInt:
+        case EOpConstructUInt:
         case EOpConstructBVec2:
         case EOpConstructBVec3:
         case EOpConstructBVec4:
@@ -981,6 +982,13 @@
                 } else
                     tempConstArray[i].setIConst(unionArray[i].getIConst() / rightUnionArray[i].getIConst());
                 break;
+            case EbtUInt:
+                if (rightUnionArray[i] == 0) {
+                    infoSink.info.message(EPrefixWarning, "Divide by zero error during constant folding", getLine());
+                    tempConstArray[i].setUConst(UINT_MAX);
+                } else
+                    tempConstArray[i].setUConst(unionArray[i].getUConst() / rightUnionArray[i].getUConst());
+                break;
             default:
                 infoSink.info.message(EPrefixInternalError, "Constant folding cannot be done for \"/\"", getLine());
                 return 0;
@@ -1196,6 +1204,9 @@
                     case EbtInt:
                         leftUnionArray[i].setFConst(static_cast<float>(node->getIConst(i)));
                         break;
+                    case EbtUInt:
+                        leftUnionArray[i].setFConst(static_cast<float>(node->getUConst(i)));
+                        break;
                     case EbtBool:
                         leftUnionArray[i].setFConst(static_cast<float>(node->getBConst(i)));
                         break;
@@ -1212,6 +1223,9 @@
                     case EbtInt:
                         leftUnionArray[i].setIConst(static_cast<int>(node->getIConst(i)));
                         break;
+                    case EbtUInt:
+                        leftUnionArray[i].setIConst(static_cast<int>(node->getUConst(i)));
+                        break;
                     case EbtBool:
                         leftUnionArray[i].setIConst(static_cast<int>(node->getBConst(i)));
                         break;
@@ -1223,11 +1237,33 @@
                         return 0;
                 }
                 break;
+            case EbtUInt:
+                switch (node->getType().getBasicType()) {
+                    case EbtInt:
+                        leftUnionArray[i].setUConst(static_cast<unsigned int>(node->getIConst(i)));
+                        break;
+                    case EbtUInt:
+                        leftUnionArray[i].setUConst(static_cast<unsigned int>(node->getUConst(i)));
+                        break;
+                    case EbtBool:
+                        leftUnionArray[i].setUConst(static_cast<unsigned int>(node->getBConst(i)));
+                        break;
+                    case EbtFloat:
+                        leftUnionArray[i].setUConst(static_cast<unsigned int>(node->getFConst(i)));
+                        break;
+                    default:
+                        infoSink.info.message(EPrefixInternalError, "Cannot promote", node->getLine());
+                        return 0;
+                }
+                break;
             case EbtBool:
                 switch (node->getType().getBasicType()) {
                     case EbtInt:
                         leftUnionArray[i].setBConst(node->getIConst(i) != 0);
                         break;
+                    case EbtUInt:
+                        leftUnionArray[i].setBConst(node->getUConst(i) != 0);
+                        break;
                     case EbtBool:
                         leftUnionArray[i].setBConst(node->getBConst(i));
                         break;
diff --git a/src/OpenGL/compiler/ParseHelper.cpp b/src/OpenGL/compiler/ParseHelper.cpp
index b1df907..8e6e3a0 100644
--- a/src/OpenGL/compiler/ParseHelper.cpp
+++ b/src/OpenGL/compiler/ParseHelper.cpp
@@ -391,7 +391,7 @@
 //
 bool TParseContext::integerErrorCheck(TIntermTyped* node, const char* token)
 {
-    if (node->getBasicType() == EbtInt && node->getNominalSize() == 1)
+    if (node->isScalarInt())
         return false;
 
     error(node->getLine(), "integer expression required", token);
@@ -657,17 +657,35 @@
 bool TParseContext::arraySizeErrorCheck(int line, TIntermTyped* expr, int& size)
 {
     TIntermConstantUnion* constant = expr->getAsConstantUnion();
-    if (constant == 0 || constant->getBasicType() != EbtInt) {
+
+    if (constant == 0 || !constant->isScalarInt())
+    {
         error(line, "array size must be a constant integer expression", "");
         return true;
     }
 
-    size = constant->getIConst(0);
+    if (constant->getBasicType() == EbtUInt)
+    {
+        unsigned int uintSize = constant->getUConst(0);
+        if (uintSize > static_cast<unsigned int>(std::numeric_limits<int>::max()))
+        {
+            error(line, "array size too large", "");
+            size = 1;
+            return true;
+        }
 
-    if (size <= 0) {
-        error(line, "array size must be a positive integer", "");
-        size = 1;
-        return true;
+        size = static_cast<int>(uintSize);
+    }
+    else
+    {
+        size = constant->getIConst(0);
+
+        if (size <= 0)
+        {
+            error(line, "array size must be a positive integer", "");
+            size = 1;
+            return true;
+        }
     }
 
     return false;
diff --git a/src/OpenGL/compiler/SymbolTable.cpp b/src/OpenGL/compiler/SymbolTable.cpp
index 873fda5..d0cd43d 100644
--- a/src/OpenGL/compiler/SymbolTable.cpp
+++ b/src/OpenGL/compiler/SymbolTable.cpp
@@ -49,6 +49,7 @@
     switch (type) {
     case EbtFloat:              mangledName += 'f';      break;
     case EbtInt:                mangledName += 'i';      break;
+    case EbtUInt:               mangledName += 'u';      break;
     case EbtBool:               mangledName += 'b';      break;
     case EbtSampler2D:          mangledName += "s2";     break;
     case EbtSamplerCube:        mangledName += "sC";     break;
diff --git a/src/OpenGL/compiler/SymbolTable.h b/src/OpenGL/compiler/SymbolTable.h
index 1a96951..c2eb677 100644
--- a/src/OpenGL/compiler/SymbolTable.h
+++ b/src/OpenGL/compiler/SymbolTable.h
@@ -338,7 +338,11 @@
     }
 
     // Searches down the precisionStack for a precision qualifier for the specified TBasicType
-    TPrecision getDefaultPrecision( TBasicType type){
+    TPrecision getDefaultPrecision( TBasicType type)
+    {
+        // unsigned integers use the same precision as signed
+        if (type == EbtUInt) type = EbtInt;
+
         if( type != EbtFloat && type != EbtInt ) return EbpUndefined;
         int level = static_cast<int>(precisionStack.size()) - 1;
         assert( level >= 0); // Just to be safe. Should not happen.
diff --git a/src/OpenGL/compiler/Types.h b/src/OpenGL/compiler/Types.h
index 7411f72..f1686ee 100644
--- a/src/OpenGL/compiler/Types.h
+++ b/src/OpenGL/compiler/Types.h
@@ -146,6 +146,7 @@
     bool isScalar() const { return size == 1 && !matrix && !structure; }
 	bool isRegister() const { return !matrix && !structure && !array; }   // Fits in a 4-element register
 	bool isStruct() const { return structure != 0; }
+	bool isScalarInt() const { return isScalar() && (type == EbtInt || type == EbtUInt); }
 
     TTypeList* getStruct() const { return structure; }
     void setStruct(TTypeList* s) { structure = s; computeDeepestStructNesting(); }
diff --git a/src/OpenGL/compiler/ValidateLimitations.cpp b/src/OpenGL/compiler/ValidateLimitations.cpp
index ffb8a17..701abc5 100644
--- a/src/OpenGL/compiler/ValidateLimitations.cpp
+++ b/src/OpenGL/compiler/ValidateLimitations.cpp
@@ -79,6 +79,10 @@
               case EbtFloat:
                 mUsesFloatLoopIndex = true;
                 break;
+              case EbtUInt:
+                mUsesIntLoopIndex = true;
+                MarkLoopForUnroll(symbol, mLoopStack);
+                break;
               case EbtInt:
                 mUsesIntLoopIndex = true;
                 MarkLoopForUnroll(symbol, mLoopStack);
@@ -269,7 +273,7 @@
     }
     // The loop index has type int or float.
     TBasicType type = symbol->getBasicType();
-    if ((type != EbtInt) && (type != EbtFloat)) {
+    if ((type != EbtInt) && (type != EbtUInt) && (type != EbtFloat)) {
         error(symbol->getLine(),
               "Invalid type for loop index", getBasicString(type));
         return false;
@@ -492,7 +496,7 @@
     bool valid = true;
     TIntermTyped* index = node->getRight();
     // The index expression must have integral type.
-    if (!index->isScalar() || (index->getBasicType() != EbtInt)) {
+    if (!index->isScalarInt()) {
         error(index->getLine(),
               "Index expression must have integral type",
               index->getCompleteString().c_str());
diff --git a/src/OpenGL/compiler/glslang.l b/src/OpenGL/compiler/glslang.l
index 9b73813..4b2d38d 100644
--- a/src/OpenGL/compiler/glslang.l
+++ b/src/OpenGL/compiler/glslang.l
@@ -56,6 +56,7 @@
 static int reserved_word(yyscan_t yyscanner);
 static int ES2_reserved_ES3_keyword(TParseContext *context, int token);
 static int ES2_keyword_ES3_reserved(TParseContext *context, int token);
+static int ES2_identifier_ES3_keyword(TParseContext *context, int token);
 %}
 
 %option noyywrap nounput never-interactive
@@ -118,6 +119,7 @@
 
 "float"        { context->lexAfterType = true; return(FLOAT_TYPE); }
 "int"          { context->lexAfterType = true; return(INT_TYPE); }
+"uint"         { return ES2_identifier_ES3_keyword(context, UINT_TYPE); }
 "void"         { context->lexAfterType = true; return(VOID_TYPE); }
 "bool"         { context->lexAfterType = true; return(BOOL_TYPE); }
 "true"         { yylval->lex.b = true;  return(BOOLCONSTANT); }
@@ -409,6 +411,21 @@
     return token;
 }
 
+int ES2_identifier_ES3_keyword(TParseContext *context, int token)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
+    yyscan_t yyscanner = (yyscan_t) context->scanner;
+
+    // not a reserved word in GLSL ES 1.00, so could be used as an identifier/type name
+    if (context->shaderVersion < 300)
+    {
+        yylval->lex.string = NewPoolTString(yytext);
+        return check_type(yyscanner);
+    }
+
+    return token;
+}
+
 void yyerror(TParseContext* context, const char* reason) {
     struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
 
diff --git a/src/OpenGL/compiler/glslang.y b/src/OpenGL/compiler/glslang.y
index eb8ea75..b846922 100644
--- a/src/OpenGL/compiler/glslang.y
+++ b/src/OpenGL/compiler/glslang.y
@@ -121,7 +121,7 @@
 %}
 
 %token <lex> INVARIANT HIGH_PRECISION MEDIUM_PRECISION LOW_PRECISION PRECISION
-%token <lex> ATTRIBUTE CONST_QUAL BOOL_TYPE FLOAT_TYPE INT_TYPE
+%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> MATRIX2 MATRIX3 MATRIX4 IN_QUAL OUT_QUAL INOUT_QUAL UNIFORM VARYING
@@ -219,14 +219,6 @@
         $$ = $1;
     }
     | INTCONSTANT {
-        //
-        // INT_TYPE is only 16-bit plus sign bit for vertex/fragment shaders,
-        // check for overflow for constants
-        //
-        if (abs($1.i) >= (1 << 16)) {
-            context->error($1.line, " integer constant overflow", "");
-            context->recover();
-        }
         ConstantUnion *unionArray = new ConstantUnion[1];
         unionArray->setIConst($1.i);
         $$ = context->intermediate.addConstantUnion(unionArray, TType(EbtInt, EbpUndefined, EvqConst), $1.line);
@@ -1628,15 +1620,14 @@
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         $$.setBasic(EbtInt, qual, $1.line);
     }
+    | UINT_TYPE {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        $$.setBasic(EbtUInt, qual, $1.line);
+    }
     | BOOL_TYPE {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         $$.setBasic(EbtBool, qual, $1.line);
     }
-//    | UNSIGNED INT_TYPE {
-//        PACK_UNPACK_ONLY("unsigned", $1.line);
-//        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-//        $$.setBasic(EbtInt, qual, $1.line);
-//    }
     | VEC2 {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         $$.setBasic(EbtFloat, qual, $1.line);
@@ -2190,4 +2181,3 @@
 int glslang_parse(TParseContext* context) {
     return yyparse(context);
 }
-
diff --git a/src/OpenGL/compiler/glslang_lex.cpp b/src/OpenGL/compiler/glslang_lex.cpp
index 67bd220..3943ece 100644
--- a/src/OpenGL/compiler/glslang_lex.cpp
+++ b/src/OpenGL/compiler/glslang_lex.cpp
@@ -392,8 +392,8 @@
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 214
-#define YY_END_OF_BUFFER 215
+#define YY_NUM_RULES 215
+#define YY_END_OF_BUFFER 216
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -401,91 +401,91 @@
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[759] =
+static yyconst flex_int16_t yy_accept[761] =
     {   0,
-        0,    0,    0,    0,    0,    0,  215,  213,  212,  212,
-      197,  203,  208,  192,  193,  201,  200,  189,  198,  196,
-      202,  161,  161,  190,  186,  204,  191,  205,  209,  157,
-      194,  195,  207,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  187,  206,  188,  199,    3,    4,    3,
-      211,  214,  210,  183,  169,  188,  177,  172,  167,  175,
-      165,  176,  166,  164,    2,    1,  168,  163,  159,  160,
-        0,    0,  161,  195,  187,  194,  184,  180,  182,  181,
-      185,  157,  173,  179,  157,  157,  157,  157,  157,  157,
+        0,    0,    0,    0,    0,    0,  216,  214,  213,  213,
+      198,  204,  209,  193,  194,  202,  201,  190,  199,  197,
+      203,  162,  162,  191,  187,  205,  192,  206,  210,  158,
+      195,  196,  208,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  188,  207,  189,  200,    3,    4,    3,
+      212,  215,  211,  184,  170,  189,  178,  173,  168,  176,
+      166,  177,  167,  165,    2,    1,  169,  164,  160,  161,
+        0,    0,  162,  196,  188,  195,  185,  181,  183,  182,
+      186,  158,  174,  180,  158,  158,  158,  158,  158,  158,
 
-      157,  157,  157,  157,  157,  157,   17,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-       20,  157,  157,   28,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  174,  178,    5,  210,    0,
-        1,  163,    0,    0,  162,  158,  170,  171,  157,  114,
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,   18,  157,  157,  157,  157,  157,  157,
+      158,  158,  158,  158,  158,  158,   17,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+       20,  158,  158,   28,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  175,  179,    5,  211,    0,
+        1,  164,    0,    0,  163,  159,  171,  172,  158,  115,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,   18,  158,  158,  158,  158,  158,  158,
 
-      157,  157,  157,  157,   32,  157,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,   29,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,    0,  164,
-        0,  163,  157,  157,  157,   34,  157,  157,   23,  154,
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-       21,  117,  157,  157,  157,  157,   26,  157,  157,  122,
-      134,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,  131,    9,   39,   40,   41,  157,  157,  157,
+      158,  158,  158,  158,   32,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,   29,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,    0,
+      165,    0,  164,  158,  158,  158,   35,  158,  158,   23,
+      155,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,   21,  118,  158,  158,  158,  158,   26,  158,  158,
+      123,  135,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  132,    9,   40,   41,   42,  158,  158,
 
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  120,   35,  157,  157,  157,  157,  157,  157,  157,
-      157,   42,   43,   44,   33,  157,  157,  157,  157,  157,
-      157,   15,   48,   49,   50,  157,  115,  157,  157,   12,
-      157,  157,  157,  157,  143,  144,  145,  157,   36,  157,
-      135,   31,  146,  147,  148,    7,  140,  141,  142,  157,
-      157,  157,   30,  138,  157,  157,  157,   45,   46,   47,
-      157,  157,  157,  157,  157,  157,  157,   65,  157,  157,
-      157,  157,  157,  157,  157,  132,  157,  157,  157,  157,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  121,   36,  158,  158,   33,  158,  158,  158,
+      158,  158,  158,   43,   44,   45,   34,  158,  158,  158,
+      158,  158,  158,   15,   49,   50,   51,  158,  116,  158,
+      158,   12,  158,  158,  158,  158,  144,  145,  146,  158,
+       37,  158,  136,   31,  147,  148,  149,    7,  141,  142,
+      143,  158,  158,  158,   30,  139,  158,  158,  158,   46,
+       47,   48,  158,  158,  158,  158,  158,  158,  158,   66,
+      158,  158,  158,  158,  158,  158,  158,  133,  158,  158,
 
-      157,  157,  157,  157,  157,  157,  157,  116,  157,  157,
-      156,  157,  157,   19,  157,   70,  157,  157,  157,  157,
-       68,  157,  157,  157,  133,  128,   71,  157,  157,  157,
-      157,  157,  157,  123,  157,  157,  157,  157,  157,  157,
-      157,  139,  121,  157,  157,  126,  157,  157,  157,   38,
-       66,  153,   27,  127,   57,  157,  137,   22,  157,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,   24,   37,  157,  157,  157,  157,  157,  157,
-       72,   73,   74,  157,  157,  157,  157,  157,    8,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,  157,  157,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  117,
+      158,  158,  157,  158,  158,   19,  158,   71,  158,  158,
+      158,  158,   69,  158,  158,  158,  134,  129,   72,  158,
+      158,  158,  158,  158,  158,  124,  158,  158,  158,  158,
+      158,  158,  158,  140,  122,  158,  158,  127,  158,  158,
+      158,   39,   67,  154,   27,  128,   58,  158,  138,   22,
+      158,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,   24,   38,  158,  158,  158,  158,
+      158,  158,   73,   74,   75,  158,  158,  158,  158,  158,
+        8,  158,  158,  158,  158,  158,  158,  158,  158,  158,
 
-      118,  157,  157,  157,  157,  157,   13,  157,  157,   14,
-      157,  157,  157,  157,   25,   58,   16,  129,   76,   77,
-       78,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  124,  157,  157,  157,   60,   62,   59,
-      157,  157,  157,  157,  157,  157,  157,  119,   80,   81,
-       82,  157,  157,  136,  157,  125,  157,  157,   11,  157,
-      157,  157,  157,  157,  157,  157,  157,  157,   75,  130,
-        6,  157,  157,  157,  155,  157,   69,   10,  149,   51,
-       54,  157,  157,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,   61,  157,  157,  157,  157,   79,  157,  157,
+      158,  158,  119,  158,  158,  158,  158,  158,   13,  158,
+      158,   14,  158,  158,  158,  158,   25,   59,   16,  130,
+       77,   78,   79,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  125,  158,  158,  158,   61,
+       63,   60,  158,  158,  158,  158,  158,  158,  158,  120,
+       81,   82,   83,  158,  158,  137,  158,  126,  158,  158,
+       11,  158,  158,  158,  158,  158,  158,  158,  158,  158,
+       76,  131,    6,  158,  158,  158,  156,  158,   70,   10,
+      150,   52,   55,  158,  158,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,   62,  158,  158,  158,  158,   80,
 
-      157,  157,  157,   99,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,   67,  157,  157,  157,
-       83,  101,  157,  157,   63,  157,  157,  157,  157,  157,
-      157,  157,   94,  157,  157,  157,  157,  157,  157,  157,
-      108,  157,  157,  157,  157,   52,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,   95,   84,  157,   85,
-      157,  157,  109,  157,  157,  157,  157,  157,  157,  157,
-      157,  157,  157,  157,  157,  157,   96,  157,  110,  157,
-      157,   86,   87,  157,   90,  157,   91,  157,  157,  157,
-      157,   64,  157,  157,  157,  151,  157,   55,  105,  157,
+      158,  158,  158,  158,  158,  100,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,   68,  158,
+      158,  158,   84,  102,  158,  158,   64,  158,  158,  158,
+      158,  158,  158,  158,   95,  158,  158,  158,  158,  158,
+      158,  158,  109,  158,  158,  158,  158,   53,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,   96,   85,
+      158,   86,  158,  158,  110,  158,  158,  158,  158,  158,
+      158,  158,  158,  158,  158,  158,  158,  158,   97,  158,
+      111,  158,  158,   87,   88,  158,   91,  158,   92,  158,
+      158,  158,  158,   65,  158,  158,  158,  152,  158,   56,
 
-       88,   89,  157,  157,  157,  157,  157,  157,  157,  157,
-      103,  106,   97,  157,  157,  157,  157,  157,  157,  157,
-      104,  107,  157,  157,  100,  157,  157,  150,  157,  157,
-       56,  157,  102,  157,  157,  157,  157,  157,  111,  157,
-      157,  157,  157,  157,  112,  157,  157,  157,  113,   92,
-       93,  157,  157,   53,  157,  152,   98,    0
+      106,  158,   89,   90,  158,  158,  158,  158,  158,  158,
+      158,  158,  104,  107,   98,  158,  158,  158,  158,  158,
+      158,  158,  105,  108,  158,  158,  101,  158,  158,  151,
+      158,  158,   57,  158,  103,  158,  158,  158,  158,  158,
+      112,  158,  158,  158,  158,  158,  113,  158,  158,  158,
+      114,   93,   94,  158,  158,   54,  158,  153,   99,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -532,183 +532,183 @@
         1
     } ;
 
-static yyconst flex_int16_t yy_base[764] =
+static yyconst flex_int16_t yy_base[766] =
     {   0,
-        0,    0,   69,   70,   79,    0,  988,  989,  989,  989,
-      962,   49,  145,  989,  989,  961,  142,  989,  141,  139,
-      154,  167,  176,  959,  989,  176,  959,   51,  989,    0,
-      989,  989,  136,  116,  112,  159,  157,  156,  173,  926,
-      174,  179,  925,  175,  189,  919,  185,  932,  197,  203,
-      204,  209,  113,  989,  186,  989,  989,  989,  989,  965,
-      989,  989,    0,  989,  989,  989,  989,  989,  989,  989,
-      989,  989,  989,  255,  989,    0,  989,  262,  280,  298,
-      317,    0,  332,  989,  989,  989,  953,  989,  989,  989,
-      952,    0,  989,  989,  915,  920,  206,  917,  925,  924,
+        0,    0,   69,   70,   79,    0,  990,  991,  991,  991,
+      964,   49,  145,  991,  991,  963,  142,  991,  141,  139,
+      154,  167,  176,  961,  991,  176,  961,   51,  991,    0,
+      991,  991,  136,  116,  112,  159,  157,  156,  173,  928,
+      174,  179,  927,  175,  189,  921,  185,  934,  197,  203,
+      204,  209,  113,  991,  186,  991,  991,  991,  991,  967,
+      991,  991,    0,  991,  991,  991,  991,  991,  991,  991,
+      991,  991,  991,  255,  991,    0,  991,  262,  280,  298,
+      317,    0,  332,  991,  991,  991,  955,  991,  991,  991,
+      954,    0,  991,  991,  917,  922,  206,  919,  927,  926,
 
-      911,  914,  925,  233,  919,  907,  904,  917,  904,  901,
-      901,  907,  237,  248,  901,  911,  897,  903,  906,  907,
-        0,  899,  909,  300,  908,  903,  109,  889,  902,  893,
-      268,  886,  262,  898,  900,  246,  889,  886,  875,  884,
-      206,  264,  888,  884,  886,  875,  878,  880,  279,  315,
-      875,  887,  150,  880,  879,  989,  989,  989,    0,  356,
-        0,  366,  384,  391,  400,    0,  989,  989,  878,    0,
-      874,  869,  873,  882,  879,  294,  863,  863,  874,  866,
-      225,  876,  873,  873,  871,  868,  860,  866,  853,  851,
-      863,  849,  865,    0,  862,  850,  857,  854,  858,  859,
+      913,  916,  927,  233,  921,  909,  906,  919,  906,  903,
+      903,  909,  237,  248,  903,  913,  899,  905,  908,  909,
+        0,  901,  911,  300,  910,  905,  109,  891,  904,  895,
+      268,  888,  262,  900,  902,  246,  891,  888,  877,  886,
+      206,  264,  890,  886,  888,  877,  880,  230,  279,  315,
+      878,  890,  150,  883,  882,  991,  991,  991,    0,  356,
+        0,  366,  384,  391,  400,    0,  991,  991,  881,    0,
+      877,  872,  876,  885,  882,  294,  866,  866,  877,  869,
+      264,  879,  876,  876,  874,  871,  863,  869,  856,  854,
+      866,  852,  868,    0,  865,  853,  860,  857,  861,  862,
 
-      852,  849,  838,  837,  850,  853,  841,  849,  844,  835,
-      371,  840,  843,  834,  841,  830,  834,  825,  839,  838,
-      829,  835,  283,  819,  822,  820,  830,  820,  815,  813,
-      815,  825,  811,  813,  810,  821,  820,  823,  313,  814,
-      810,  808,  797,  374,  815,  817,  806,  798,  407,  414,
-      421,  428,  795,  805,  804,    0,  802,  433,    0,    0,
-      795,  793,  793,  794,  789,  797,  786,  803,  792,  436,
-        0,    0,  786,  796,  795,  795,    0,  780,  439,    0,
-        0,  782,  442,  789,  790,  781,  775,  774,  775,  774,
-      774,  445,    0,    0,    0,    0,    0,  769,  770,  775,
+      855,  852,  841,  840,  853,  856,  844,  852,  847,  838,
+      371,  843,  846,  837,  844,  833,  837,  828,  842,  841,
+      832,  838,  283,  822,  825,  823,  833,  823,  818,  816,
+      818,  828,  814,  816,  813,  824,  823,  826,  808,  313,
+      816,  812,  810,  799,  374,  817,  819,  808,  800,  407,
+      414,  421,  428,  797,  807,  806,    0,  804,  433,    0,
+        0,  797,  795,  795,  796,  791,  799,  788,  805,  794,
+      436,    0,    0,  788,  798,  797,  797,    0,  782,  439,
+        0,    0,  784,  442,  791,  792,  783,  777,  776,  777,
+      776,  776,  445,    0,    0,    0,    0,    0,  771,  772,
 
-      769,  765,  778,  773,  773,  771,  770,  764,  758,  760,
-      759,  763,  755,  758,  753,  761,  766,  754,  751,  763,
-      754,    0,    0,  760,  756,  748,  748,  753,  744,  751,
-      748,    0,    0,    0,    0,  738,  750,  749,  748,  749,
-      749,    0,    0,    0,    0,  736,    0,  744,  735,    0,
-      734,  735,  729,  739,    0,    0,    0,  730,    0,  726,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  736,
-      449,  735,    0,    0,  733,  729,  726,    0,    0,    0,
-      724,  720,  725,  716,  714,  727,  712,    0,  712,  725,
-      714,  710,  716,  711,  718,    0,  716,  713,  717,  701,
+      777,  771,  767,  780,  775,  775,  773,  772,  766,  760,
+      762,  761,  765,  757,  760,  755,  763,  768,  756,  753,
+      765,  756,    0,    0,  762,  758,    0,  750,  750,  755,
+      746,  753,  750,    0,    0,    0,    0,  740,  752,  751,
+      750,  751,  751,    0,    0,    0,    0,  738,    0,  746,
+      737,    0,  736,  737,  731,  741,    0,    0,    0,  732,
+        0,  728,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  738,  449,  737,    0,    0,  735,  731,  728,    0,
+        0,    0,  726,  722,  727,  718,  716,  729,  714,    0,
+      714,  727,  716,  712,  718,  713,  720,    0,  718,  715,
 
-      699,  702,  708,  714,  709,  708,  696,    0,  698,  699,
-        0,  696,  699,    0,  693,    0,  706,  686,  695,  690,
-        0,  683,  683,  696,    0,  698,    0,  452,  710,  709,
-      708,  676,  675,    0,  692,  691,  686,  675,  688,  675,
-      672,    0,    0,  677,  676,    0,  673,  680,  679,    0,
-      665,    0,    0,    0,    0,  662,    0,    0,  661,  672,
-      455,  665,  671,  670,  667,  662,  659,  652,  652,  665,
-      650,  662,    0,    0,  655,  677,  676,  675,  643,  642,
-      341,  448,    0,  654,  657,  655,  644,  640,    0,  652,
-      649,  648,  638,  637,  627,  644,  630,  471,  638,  641,
+      719,  703,  701,  704,  710,  716,  711,  710,  698,    0,
+      700,  701,    0,  698,  701,    0,  695,    0,  708,  688,
+      697,  692,    0,  685,  685,  698,    0,  700,    0,  452,
+      712,  711,  710,  678,  677,    0,  694,  693,  688,  677,
+      690,  677,  674,    0,    0,  679,  678,    0,  675,  682,
+      681,    0,  667,    0,    0,    0,    0,  664,    0,    0,
+      663,  674,  455,  667,  673,  672,  669,  664,  661,  654,
+      654,  667,  652,  664,    0,    0,  657,  679,  678,  677,
+      645,  644,  341,  448,    0,  656,  659,  657,  646,  642,
+        0,  654,  651,  650,  640,  639,  629,  646,  632,  471,
 
-        0,  657,  656,  655,  623,  622,    0,  636,  623,    0,
-      633,  626,  627,  630,    0,    0,    0,    0,  649,  648,
-        0,  626,  629,  614,  621,  612,  619,  620,  620,  619,
-      605,  475,  617,    0,  618,  607,  606,    0,    0,    0,
-      630,  629,  628,  596,  595,  591,  599,    0,  626,  625,
-        0,  603,  606,    0,  477,    0,  584,  593,    0,  589,
-      588,  597,  597,  585,  599,  583,  597,  592,    0,    0,
-        0,  608,  607,  575,    0,  575,    0,    0,  452,  460,
-      598,  585,  588,  571,  583,  571,  570,  579,  579,  595,
-      594,  562,    0,  562,  563,  562,  572,    0,  575,  571,
+      640,  643,    0,  659,  658,  657,  625,  624,    0,  638,
+      625,    0,  635,  628,  629,  632,    0,    0,    0,    0,
+      651,  650,    0,  628,  631,  616,  623,  614,  621,  622,
+      622,  621,  607,  475,  619,    0,  620,  609,  608,    0,
+        0,    0,  632,  631,  630,  598,  597,  593,  601,    0,
+      628,  627,    0,  605,  608,    0,  477,    0,  586,  595,
+        0,  591,  590,  599,  599,  587,  601,  585,  599,  594,
+        0,    0,    0,  610,  609,  577,    0,  577,    0,    0,
+      452,  460,  600,  587,  590,  573,  585,  573,  572,  581,
+      581,  597,  596,  564,    0,  564,  565,  564,  574,    0,
 
-      573,  569,  556,  586,  203,  564,  560,  552,  559,  571,
-      560,  556,  558,  556,  556,  555,    0,  543,  542,  552,
-        0,  571,  208,  549,    0,  553,  552,  536,  528,  536,
-      526,  534,    0,  531,  551,  540,  538,  523,  526,  540,
-      555,  536,  537,  534,  531,    0,  519,  533,  532,  516,
-      515,  535,  524,  522,  504,  503,    0,  530,  503,  528,
-      501,  505,  535,  516,  513,  512,  515,  511,  498,  495,
-      508,  493,  494,  496,  485,  484,    0,  490,  520,  501,
-      498,    0,    0,  494,    0,  493,    0,  499,  483,  480,
-      481,    0,  473,  481,  478,  498,  478,    0,    0,  490,
+      577,  573,  575,  571,  558,  588,  203,  566,  562,  554,
+      561,  573,  562,  558,  560,  558,  558,  557,    0,  545,
+      544,  554,    0,  573,  208,  551,    0,  555,  554,  538,
+      530,  538,  528,  536,    0,  533,  553,  542,  540,  525,
+      528,  542,  557,  538,  539,  536,  533,    0,  521,  535,
+      534,  518,  517,  537,  526,  524,  506,  505,    0,  532,
+      505,  530,  503,  507,  537,  518,  515,  514,  517,  513,
+      500,  497,  510,  495,  496,  498,  487,  486,    0,  492,
+      522,  503,  500,    0,    0,  496,    0,  495,    0,  501,
+      485,  482,  483,    0,  475,  483,  480,  500,  480,    0,
 
-        0,    0,  489,  473,  470,  471,  485,  484,  461,  467,
-        0,    0,  487,  460,  479,  471,  457,  466,  453,  457,
-        0,    0,  458,  455,    0,  455,  445,    0,  417,  433,
-        0,  439,    0,  430,  356,  340,  329,  334,    0,  318,
-      328,  290,  279,  277,    0,  278,  267,  266,    0,    0,
-        0,  211,  158,    0,  126,    0,    0,  989,  506,  508,
-      510,  514,  171
+        0,  492,    0,    0,  491,  475,  472,  473,  487,  486,
+      463,  469,    0,    0,  489,  462,  481,  473,  459,  468,
+      455,  461,    0,    0,  472,  469,    0,  461,  451,    0,
+      433,  452,    0,  447,    0,  433,  418,  417,  347,  353,
+        0,  348,  346,  299,  296,  292,    0,  296,  284,  266,
+        0,    0,    0,  211,  158,    0,  126,    0,    0,  991,
+      506,  508,  510,  514,  171
     } ;
 
-static yyconst flex_int16_t yy_def[764] =
+static yyconst flex_int16_t yy_def[766] =
     {   0,
-      758,    1,  759,  759,  758,    5,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  760,
-      758,  758,  758,  760,  760,  760,  760,  760,  760,  760,
+      760,    1,  761,  761,  760,    5,  760,  760,  760,  760,
       760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  761,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  762,  758,  758,  758,  758,
-      758,  763,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  760,  758,  758,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  762,
+      760,  760,  760,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  763,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  764,  760,  760,  760,  760,
+      760,  765,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  762,  760,  760,  762,  762,  762,  762,  762,  762,
 
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  758,  758,  758,  761,  758,
-      762,  758,  758,  758,  758,  763,  758,  758,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  760,  760,  760,  763,  760,
+      764,  760,  760,  760,  760,  765,  760,  760,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
 
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  758,  758,
-      758,  758,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  760,
+      760,  760,  760,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
 
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
 
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
 
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
 
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
 
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
-      760,  760,  760,  760,  760,  760,  760,    0,  758,  758,
-      758,  758,  758
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
+      762,  762,  762,  762,  762,  762,  762,  762,  762,    0,
+      760,  760,  760,  760,  760
     } ;
 
-static yyconst flex_int16_t yy_nxt[1061] =
+static yyconst flex_int16_t yy_nxt[1063] =
     {   0,
         8,    9,   10,   11,   12,   13,   14,   15,   16,   17,
        18,   19,   20,   21,   22,   23,   23,   23,   23,   23,
@@ -729,106 +729,107 @@
        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,  757,
+       85,   79,   79,   79,   79,   79,   79,   80,   78,  759,
        83,   83,   83,   83,   83,   83,   83,   86,   81,   87,
 
-       88,  245,  101,  246,  105,   82,  102,   81,  106,  109,
+       88,  246,  101,  247,  105,   82,  102,   81,  106,  109,
       156,  110,  103,  107,   81,  104,  112,  118,  128,  108,
-      111,  756,  129,   81,  113,  119,  114,  121,  133,  115,
-      122,   82,  130,  123,  124,  116,  120,  635,  125,  636,
-      137,  126,  652,  134,  653,  131,  135,  138,  139,  229,
+      111,  758,  129,   81,  113,  119,  114,  121,  133,  115,
+      122,   82,  130,  123,  124,  116,  120,  637,  125,  638,
+      137,  126,  654,  134,  655,  131,  135,  138,  139,  229,
       144,  140,  151,  145,  157,  148,  152,  141,  142,  149,
-      143,  146,  171,  150,  230,  153,  172,  755,  147,   74,
+      143,  146,  171,  150,  230,  153,  172,  757,  147,   74,
        74,   74,   74,   74,   74,   74,  162,  162,  162,  162,
-      162,  162,  162,  179,  265,  266,  160,  180,  181,  222,
+      162,  162,  162,  179,  238,  239,  160,  180,  181,  222,
       190,  192,   78,  163,   79,   79,   79,   79,   79,   79,
 
-       80,  191,  160,  754,  193,  223,  224,  217,  231,  163,
+       80,  191,  160,  756,  193,  223,  224,  217,  231,  163,
        78,   81,   80,   80,   80,   80,   80,   80,   80,  214,
-      218,  232,  219,  753,  752,  215,  164,   81,  164,   81,
-      239,  165,  165,  165,  165,  165,  165,  165,  240,  309,
-      751,  259,  750,  310,   78,   81,   83,   83,   83,   83,
-       83,   83,   83,  202,  260,  749,  203,  204,  241,  748,
-      205,  326,  206,   81,  747,  249,  242,  249,  524,  327,
-      250,  250,  250,  250,  250,  250,  250,  746,  525,   81,
-      162,  162,  162,  162,  162,  162,  162,  295,  296,  297,
-      332,  333,  334,  251,  745,  251,  744,  163,  252,  252,
+      218,  232,  219,  266,  267,  215,  164,   81,  164,   81,
+      240,  165,  165,  165,  165,  165,  165,  165,  241,  310,
+      755,  260,  754,  311,   78,   81,   83,   83,   83,   83,
+       83,   83,   83,  202,  261,  753,  203,  204,  242,  752,
+      205,  328,  206,   81,  751,  250,  243,  250,  526,  329,
+      251,  251,  251,  251,  251,  251,  251,  750,  527,   81,
+      162,  162,  162,  162,  162,  162,  162,  296,  297,  298,
+      334,  335,  336,  252,  749,  252,  748,  163,  253,  253,
 
-      252,  252,  252,  252,  252,  165,  165,  165,  165,  165,
-      165,  165,  743,  163,  165,  165,  165,  165,  165,  165,
-      165,  250,  250,  250,  250,  250,  250,  250,  250,  250,
-      250,  250,  250,  250,  250,  252,  252,  252,  252,  252,
-      252,  252,  252,  252,  252,  252,  252,  252,  252,  343,
-      344,  345,  355,  356,  357,  363,  364,  365,  367,  368,
-      369,  378,  379,  380,  429,  430,  431,  476,  477,  478,
-      502,  503,  504,  742,  741,  526,  740,  432,  433,  608,
-      479,  480,  739,  505,  506,  527,  541,  542,  543,  609,
-      572,  573,  590,  591,  610,  738,  611,  612,  737,  544,
+      253,  253,  253,  253,  253,  165,  165,  165,  165,  165,
+      165,  165,  747,  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,  431,  432,  433,  478,  479,  480,
+      504,  505,  506,  746,  745,  528,  744,  434,  435,  610,
+      481,  482,  743,  507,  508,  529,  543,  544,  545,  611,
+      574,  575,  592,  593,  612,  742,  613,  614,  741,  546,
 
-      545,  736,  546,  574,  735,  592,   58,   58,   58,   58,
-       92,   92,  159,  159,  161,  734,  161,  161,  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,  667,  666,  665,  664,  663,  662,
-      661,  660,  659,  658,  657,  656,  655,  654,  651,  650,
+      547,  740,  548,  576,  739,  594,   58,   58,   58,   58,
+       92,   92,  159,  159,  161,  738,  161,  161,  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,  667,  666,
+      665,  664,  663,  662,  661,  660,  659,  658,  657,  656,
 
-      649,  648,  647,  646,  645,  644,  643,  642,  641,  640,
-      639,  638,  637,  634,  633,  632,  631,  630,  629,  628,
-      627,  626,  625,  624,  623,  622,  621,  620,  619,  618,
-      617,  616,  615,  614,  613,  607,  606,  605,  604,  603,
-      602,  601,  600,  599,  598,  597,  596,  595,  594,  593,
-      589,  588,  587,  586,  585,  584,  583,  582,  581,  580,
-      579,  578,  577,  576,  575,  571,  570,  569,  568,  567,
-      566,  565,  564,  563,  562,  561,  560,  559,  558,  557,
-      556,  555,  554,  553,  552,  551,  550,  549,  548,  547,
-      540,  539,  538,  537,  536,  535,  534,  533,  532,  531,
+      653,  652,  651,  650,  649,  648,  647,  646,  645,  644,
+      643,  642,  641,  640,  639,  636,  635,  634,  633,  632,
+      631,  630,  629,  628,  627,  626,  625,  624,  623,  622,
+      621,  620,  619,  618,  617,  616,  615,  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,  573,  572,  571,
+      570,  569,  568,  567,  566,  565,  564,  563,  562,  561,
+      560,  559,  558,  557,  556,  555,  554,  553,  552,  551,
+      550,  549,  542,  541,  540,  539,  538,  537,  536,  535,
 
-      530,  529,  528,  523,  522,  521,  520,  519,  518,  517,
-      516,  515,  514,  513,  512,  511,  510,  509,  508,  507,
-      501,  500,  499,  498,  497,  496,  495,  494,  493,  492,
-      491,  490,  489,  488,  487,  486,  485,  484,  483,  482,
-      481,  475,  474,  473,  472,  471,  470,  469,  468,  467,
-      466,  465,  464,  463,  462,  461,  460,  459,  458,  457,
-      456,  455,  454,  453,  452,  451,  450,  449,  448,  447,
-      446,  445,  444,  443,  442,  441,  440,  439,  438,  437,
-      436,  435,  434,  428,  427,  426,  425,  424,  423,  422,
-      421,  420,  419,  418,  417,  416,  415,  414,  413,  412,
+      534,  533,  532,  531,  530,  525,  524,  523,  522,  521,
+      520,  519,  518,  517,  516,  515,  514,  513,  512,  511,
+      510,  509,  503,  502,  501,  500,  499,  498,  497,  496,
+      495,  494,  493,  492,  491,  490,  489,  488,  487,  486,
+      485,  484,  483,  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,  451,
+      450,  449,  448,  447,  446,  445,  444,  443,  442,  441,
+      440,  439,  438,  437,  436,  430,  429,  428,  427,  426,
+      425,  424,  423,  422,  421,  420,  419,  418,  417,  416,
 
-      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,  382,
-      381,  377,  376,  375,  374,  373,  372,  371,  370,  366,
-      362,  361,  360,  359,  358,  354,  353,  352,  351,  350,
-      349,  348,  347,  346,  342,  341,  340,  339,  338,  337,
-      336,  335,  331,  330,  329,  328,  325,  324,  323,  322,
-      321,  320,  319,  318,  317,  316,  315,  314,  313,  312,
-      311,  308,  307,  306,  305,  304,  303,  302,  301,  300,
-      299,  298,  294,  293,  292,  291,  290,  289,  288,  287,
+      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,  305,  304,
+      303,  302,  301,  300,  299,  295,  294,  293,  292,  291,
 
-      286,  285,  284,  283,  282,  281,  280,  279,  278,  277,
-      276,  275,  274,  273,  272,  271,  270,  269,  268,  267,
-      264,  263,  262,  261,  258,  257,  256,  255,  254,  253,
-      248,  247,  244,  243,  238,  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,   64,  758,    7,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      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,   64,  760,
+        7,  760,  760,  760,  760,  760,  760,  760,  760,  760,
 
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760
     } ;
 
-static yyconst flex_int16_t yy_chk[1061] =
+static yyconst flex_int16_t yy_chk[1063] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -848,108 +849,109 @@
         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,  763,   35,   34,   34,   33,   21,   22,
-       26,   22,   22,   22,   22,   22,   22,   22,   23,  755,
+       35,   53,  127,  765,   35,   34,   34,   33,   21,   22,
+       26,   22,   22,   22,   22,   22,   22,   22,   23,  757,
        23,   23,   23,   23,   23,   23,   23,   26,   22,   26,
 
        26,  153,   36,  153,   37,   22,   36,   23,   37,   38,
        55,   38,   36,   37,   22,   36,   39,   41,   44,   37,
-       38,  753,   44,   23,   39,   41,   39,   42,   47,   39,
-       42,   22,   45,   42,   42,   39,   41,  605,   42,  605,
-       49,   42,  623,   47,  623,   45,   47,   49,   49,  141,
+       38,  755,   44,   23,   39,   41,   39,   42,   47,   39,
+       42,   22,   45,   42,   42,   39,   41,  607,   42,  607,
+       49,   42,  625,   47,  625,   45,   47,   49,   49,  141,
        50,   49,   52,   50,   55,   51,   52,   49,   49,   51,
-       49,   50,   97,   51,  141,   52,   97,  752,   50,   74,
+       49,   50,   97,   51,  141,   52,   97,  754,   50,   74,
        74,   74,   74,   74,   74,   74,   78,   78,   78,   78,
-       78,   78,   78,  104,  181,  181,   74,  104,  104,  136,
+       78,   78,   78,  104,  148,  148,   74,  104,  104,  136,
       113,  114,   79,   78,   79,   79,   79,   79,   79,   79,
 
-       79,  113,   74,  748,  114,  136,  136,  133,  142,   78,
+       79,  113,   74,  750,  114,  136,  136,  133,  142,   78,
        80,   79,   80,   80,   80,   80,   80,   80,   80,  131,
-      133,  142,  133,  747,  746,  131,   81,   79,   81,   80,
+      133,  142,  133,  181,  181,  131,   81,   79,   81,   80,
       149,   81,   81,   81,   81,   81,   81,   81,  149,  223,
-      744,  176,  743,  223,   83,   80,   83,   83,   83,   83,
-       83,   83,   83,  124,  176,  742,  124,  124,  150,  741,
-      124,  239,  124,   83,  740,  160,  150,  160,  481,  239,
-      160,  160,  160,  160,  160,  160,  160,  738,  481,   83,
+      749,  176,  748,  223,   83,   80,   83,   83,   83,   83,
+       83,   83,   83,  124,  176,  746,  124,  124,  150,  745,
+      124,  240,  124,   83,  744,  160,  150,  160,  483,  240,
+      160,  160,  160,  160,  160,  160,  160,  743,  483,   83,
       162,  162,  162,  162,  162,  162,  162,  211,  211,  211,
-      244,  244,  244,  163,  737,  163,  736,  162,  163,  163,
+      245,  245,  245,  163,  742,  163,  740,  162,  163,  163,
 
       163,  163,  163,  163,  163,  164,  164,  164,  164,  164,
-      164,  164,  735,  162,  165,  165,  165,  165,  165,  165,
-      165,  249,  249,  249,  249,  249,  249,  249,  250,  250,
-      250,  250,  250,  250,  250,  251,  251,  251,  251,  251,
-      251,  251,  252,  252,  252,  252,  252,  252,  252,  258,
-      258,  258,  270,  270,  270,  279,  279,  279,  283,  283,
-      283,  292,  292,  292,  371,  371,  371,  428,  428,  428,
-      461,  461,  461,  734,  732,  482,  730,  371,  371,  579,
-      428,  428,  729,  461,  461,  482,  498,  498,  498,  579,
-      532,  532,  555,  555,  580,  727,  580,  580,  726,  498,
+      164,  164,  739,  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,  430,  430,  430,
+      463,  463,  463,  738,  737,  484,  736,  373,  373,  581,
+      430,  430,  734,  463,  463,  484,  500,  500,  500,  581,
+      534,  534,  557,  557,  582,  732,  582,  582,  731,  500,
 
-      498,  724,  498,  532,  723,  555,  759,  759,  759,  759,
-      760,  760,  761,  761,  762,  720,  762,  762,  719,  718,
-      717,  716,  715,  714,  713,  710,  709,  708,  707,  706,
-      705,  704,  703,  700,  697,  696,  695,  694,  693,  691,
-      690,  689,  688,  686,  684,  681,  680,  679,  678,  676,
-      675,  674,  673,  672,  671,  670,  669,  668,  667,  666,
-      665,  664,  663,  662,  661,  660,  659,  658,  656,  655,
-      654,  653,  652,  651,  650,  649,  648,  647,  645,  644,
-      643,  642,  641,  640,  639,  638,  637,  636,  635,  634,
-      632,  631,  630,  629,  628,  627,  626,  624,  622,  620,
+      500,  729,  500,  534,  728,  557,  761,  761,  761,  761,
+      762,  762,  763,  763,  764,  726,  764,  764,  725,  722,
+      721,  720,  719,  718,  717,  716,  715,  712,  711,  710,
+      709,  708,  707,  706,  705,  702,  699,  698,  697,  696,
+      695,  693,  692,  691,  690,  688,  686,  683,  682,  681,
+      680,  678,  677,  676,  675,  674,  673,  672,  671,  670,
+      669,  668,  667,  666,  665,  664,  663,  662,  661,  660,
+      658,  657,  656,  655,  654,  653,  652,  651,  650,  649,
+      647,  646,  645,  644,  643,  642,  641,  640,  639,  638,
+      637,  636,  634,  633,  632,  631,  630,  629,  628,  626,
 
-      619,  618,  616,  615,  614,  613,  612,  611,  610,  609,
-      608,  607,  606,  604,  603,  602,  601,  600,  599,  597,
-      596,  595,  594,  592,  591,  590,  589,  588,  587,  586,
-      585,  584,  583,  582,  581,  576,  574,  573,  572,  568,
-      567,  566,  565,  564,  563,  562,  561,  560,  558,  557,
-      553,  552,  550,  549,  547,  546,  545,  544,  543,  542,
-      541,  537,  536,  535,  533,  531,  530,  529,  528,  527,
-      526,  525,  524,  523,  522,  520,  519,  514,  513,  512,
-      511,  509,  508,  506,  505,  504,  503,  502,  500,  499,
-      497,  496,  495,  494,  493,  492,  491,  490,  488,  487,
+      624,  622,  621,  620,  618,  617,  616,  615,  614,  613,
+      612,  611,  610,  609,  608,  606,  605,  604,  603,  602,
+      601,  599,  598,  597,  596,  594,  593,  592,  591,  590,
+      589,  588,  587,  586,  585,  584,  583,  578,  576,  575,
+      574,  570,  569,  568,  567,  566,  565,  564,  563,  562,
+      560,  559,  555,  554,  552,  551,  549,  548,  547,  546,
+      545,  544,  543,  539,  538,  537,  535,  533,  532,  531,
+      530,  529,  528,  527,  526,  525,  524,  522,  521,  516,
+      515,  514,  513,  511,  510,  508,  507,  506,  505,  504,
+      502,  501,  499,  498,  497,  496,  495,  494,  493,  492,
 
-      486,  485,  484,  480,  479,  478,  477,  476,  475,  472,
-      471,  470,  469,  468,  467,  466,  465,  464,  463,  462,
-      460,  459,  456,  451,  449,  448,  447,  445,  444,  441,
-      440,  439,  438,  437,  436,  435,  433,  432,  431,  430,
-      429,  426,  424,  423,  422,  420,  419,  418,  417,  415,
-      413,  412,  410,  409,  407,  406,  405,  404,  403,  402,
-      401,  400,  399,  398,  397,  395,  394,  393,  392,  391,
-      390,  389,  387,  386,  385,  384,  383,  382,  381,  377,
-      376,  375,  372,  370,  360,  358,  354,  353,  352,  351,
-      349,  348,  346,  341,  340,  339,  338,  337,  336,  331,
+      490,  489,  488,  487,  486,  482,  481,  480,  479,  478,
+      477,  474,  473,  472,  471,  470,  469,  468,  467,  466,
+      465,  464,  462,  461,  458,  453,  451,  450,  449,  447,
+      446,  443,  442,  441,  440,  439,  438,  437,  435,  434,
+      433,  432,  431,  428,  426,  425,  424,  422,  421,  420,
+      419,  417,  415,  414,  412,  411,  409,  408,  407,  406,
+      405,  404,  403,  402,  401,  400,  399,  397,  396,  395,
+      394,  393,  392,  391,  389,  388,  387,  386,  385,  384,
+      383,  379,  378,  377,  374,  372,  362,  360,  356,  355,
+      354,  353,  351,  350,  348,  343,  342,  341,  340,  339,
 
-      330,  329,  328,  327,  326,  325,  324,  321,  320,  319,
-      318,  317,  316,  315,  314,  313,  312,  311,  310,  309,
-      308,  307,  306,  305,  304,  303,  302,  301,  300,  299,
-      298,  291,  290,  289,  288,  287,  286,  285,  284,  282,
-      278,  276,  275,  274,  273,  269,  268,  267,  266,  265,
-      264,  263,  262,  261,  257,  255,  254,  253,  248,  247,
-      246,  245,  243,  242,  241,  240,  238,  237,  236,  235,
-      234,  233,  232,  231,  230,  229,  228,  227,  226,  225,
-      224,  222,  221,  220,  219,  218,  217,  216,  215,  214,
-      213,  212,  210,  209,  208,  207,  206,  205,  204,  203,
+      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,  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,  218,  217,
+      216,  215,  214,  213,  212,  210,  209,  208,  207,  206,
 
-      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,  148,  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,   11,    7,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
+      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,   11,    7,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
 
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
-      758,  758,  758,  758,  758,  758,  758,  758,  758,  758
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
+      760,  760
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[215] =
+static yyconst flex_int32_t yy_rule_can_match_eol[216] =
     {   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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,     };
+    0, 0, 0, 0, 0, 0, 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.
@@ -1005,6 +1007,7 @@
 static int reserved_word(yyscan_t yyscanner);
 static int ES2_reserved_ES3_keyword(TParseContext *context, int token);
 static int ES2_keyword_ES3_reserved(TParseContext *context, int token);
+static int ES2_identifier_ES3_keyword(TParseContext *context, int token);
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1295,13 +1298,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 >= 759 )
+				if ( yy_current_state >= 761 )
 					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 != 758 );
+		while ( yy_current_state != 760 );
 		yy_cp = yyg->yy_last_accepting_cpos;
 		yy_current_state = yyg->yy_last_accepting_state;
 
@@ -1462,106 +1465,109 @@
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(VOID_TYPE); }
+{ return ES2_identifier_ES3_keyword(context, UINT_TYPE); }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(BOOL_TYPE); }
+{ context->lexAfterType = true; return(VOID_TYPE); }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-{ yylval->lex.b = true;  return(BOOLCONSTANT); }
+{ context->lexAfterType = true; return(BOOL_TYPE); }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-{ yylval->lex.b = false; return(BOOLCONSTANT); }
+{ yylval->lex.b = true;  return(BOOLCONSTANT); }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-{ return(DISCARD); }
+{ yylval->lex.b = false; return(BOOLCONSTANT); }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-{ return(RETURN); }
+{ return(DISCARD); }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(MATRIX2); }
+{ return(RETURN); }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(MATRIX3); }
+{ context->lexAfterType = true; return(MATRIX2); }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return(MATRIX4); }
+{ context->lexAfterType = true; return(MATRIX3); }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (VEC2); }
+{ context->lexAfterType = true; return(MATRIX4); }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (VEC3); }
+{ context->lexAfterType = true; return (VEC2); }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (VEC4); }
+{ context->lexAfterType = true; return (VEC3); }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (IVEC2); }
+{ context->lexAfterType = true; return (VEC4); }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (IVEC3); }
+{ context->lexAfterType = true; return (IVEC2); }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (IVEC4); }
+{ context->lexAfterType = true; return (IVEC3); }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (BVEC2); }
+{ context->lexAfterType = true; return (IVEC4); }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (BVEC3); }
+{ context->lexAfterType = true; return (BVEC2); }
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return (BVEC4); }
+{ context->lexAfterType = true; return (BVEC3); }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER2D; }
+{ context->lexAfterType = true; return (BVEC4); }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLERCUBE; }
+{ context->lexAfterType = true; return SAMPLER2D; }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
+{ context->lexAfterType = true; return SAMPLERCUBE; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-{ context->lexAfterType = true; return SAMPLER3D; }
+{ context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-{ return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
+{ context->lexAfterType = true; return SAMPLER3D; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-{ return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
+{ return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
+{ return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
+	YY_BREAK
+case 58:
+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 58:
 case 59:
 case 60:
 case 61:
@@ -1617,6 +1623,7 @@
 case 111:
 case 112:
 case 113:
+case 114:
 YY_RULE_SETUP
 { 
     if (context->shaderVersion < 300) {
@@ -1627,7 +1634,6 @@
 }
 	YY_BREAK
 /* Reserved keywords */
-case 114:
 case 115:
 case 116:
 case 117:
@@ -1670,35 +1676,32 @@
 case 154:
 case 155:
 case 156:
+case 157:
 YY_RULE_SETUP
 { return reserved_word(yyscanner); }
 	YY_BREAK
-case 157:
+case 158:
 YY_RULE_SETUP
 {
    yylval->lex.string = NewPoolTString(yytext); 
    return check_type(yyscanner);
 }
 	YY_BREAK
-case 158:
-YY_RULE_SETUP
-{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
-	YY_BREAK
 case 159:
 YY_RULE_SETUP
 { yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
 	YY_BREAK
 case 160:
 YY_RULE_SETUP
-{ context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
+{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
 	YY_BREAK
 case 161:
 YY_RULE_SETUP
-{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
+{ context->error(yylineno, "Invalid Octal number.", yytext); context->recover(); return 0;}
 	YY_BREAK
 case 162:
 YY_RULE_SETUP
-{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
+{ yylval->lex.i = strtol(yytext, 0, 0); return(INTCONSTANT); }
 	YY_BREAK
 case 163:
 YY_RULE_SETUP
@@ -1710,198 +1713,202 @@
 	YY_BREAK
 case 165:
 YY_RULE_SETUP
-{  return(ADD_ASSIGN); }
+{ yylval->lex.f = static_cast<float>(atof_dot(yytext)); return(FLOATCONSTANT); }
 	YY_BREAK
 case 166:
 YY_RULE_SETUP
-{  return(SUB_ASSIGN); }
+{  return(ADD_ASSIGN); }
 	YY_BREAK
 case 167:
 YY_RULE_SETUP
-{  return(MUL_ASSIGN); }
+{  return(SUB_ASSIGN); }
 	YY_BREAK
 case 168:
 YY_RULE_SETUP
-{  return(DIV_ASSIGN); }
+{  return(MUL_ASSIGN); }
 	YY_BREAK
 case 169:
 YY_RULE_SETUP
-{  return(MOD_ASSIGN); }
+{  return(DIV_ASSIGN); }
 	YY_BREAK
 case 170:
 YY_RULE_SETUP
-{  return(LEFT_ASSIGN); }
+{  return(MOD_ASSIGN); }
 	YY_BREAK
 case 171:
 YY_RULE_SETUP
-{  return(RIGHT_ASSIGN); }
+{  return(LEFT_ASSIGN); }
 	YY_BREAK
 case 172:
 YY_RULE_SETUP
-{  return(AND_ASSIGN); }
+{  return(RIGHT_ASSIGN); }
 	YY_BREAK
 case 173:
 YY_RULE_SETUP
-{  return(XOR_ASSIGN); }
+{  return(AND_ASSIGN); }
 	YY_BREAK
 case 174:
 YY_RULE_SETUP
-{  return(OR_ASSIGN); }
+{  return(XOR_ASSIGN); }
 	YY_BREAK
 case 175:
 YY_RULE_SETUP
-{  return(INC_OP); }
+{  return(OR_ASSIGN); }
 	YY_BREAK
 case 176:
 YY_RULE_SETUP
-{  return(DEC_OP); }
+{  return(INC_OP); }
 	YY_BREAK
 case 177:
 YY_RULE_SETUP
-{  return(AND_OP); }
+{  return(DEC_OP); }
 	YY_BREAK
 case 178:
 YY_RULE_SETUP
-{  return(OR_OP); }
+{  return(AND_OP); }
 	YY_BREAK
 case 179:
 YY_RULE_SETUP
-{  return(XOR_OP); }
+{  return(OR_OP); }
 	YY_BREAK
 case 180:
 YY_RULE_SETUP
-{  return(LE_OP); }
+{  return(XOR_OP); }
 	YY_BREAK
 case 181:
 YY_RULE_SETUP
-{  return(GE_OP); }
+{  return(LE_OP); }
 	YY_BREAK
 case 182:
 YY_RULE_SETUP
-{  return(EQ_OP); }
+{  return(GE_OP); }
 	YY_BREAK
 case 183:
 YY_RULE_SETUP
-{  return(NE_OP); }
+{  return(EQ_OP); }
 	YY_BREAK
 case 184:
 YY_RULE_SETUP
-{  return(LEFT_OP); }
+{  return(NE_OP); }
 	YY_BREAK
 case 185:
 YY_RULE_SETUP
-{  return(RIGHT_OP); }
+{  return(LEFT_OP); }
 	YY_BREAK
 case 186:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(SEMICOLON); }
+{  return(RIGHT_OP); }
 	YY_BREAK
 case 187:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(LEFT_BRACE); }
+{ context->lexAfterType = false; return(SEMICOLON); }
 	YY_BREAK
 case 188:
 YY_RULE_SETUP
-{ return(RIGHT_BRACE); }
+{ context->lexAfterType = false; return(LEFT_BRACE); }
 	YY_BREAK
 case 189:
 YY_RULE_SETUP
-{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
+{ return(RIGHT_BRACE); }
 	YY_BREAK
 case 190:
 YY_RULE_SETUP
-{ return(COLON); }
+{ if (context->inTypeParen) context->lexAfterType = false; return(COMMA); }
 	YY_BREAK
 case 191:
 YY_RULE_SETUP
-{ context->lexAfterType = false; return(EQUAL); }
+{ return(COLON); }
 	YY_BREAK
 case 192:
 YY_RULE_SETUP
-{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
+{ context->lexAfterType = false; return(EQUAL); }
 	YY_BREAK
 case 193:
 YY_RULE_SETUP
-{ context->inTypeParen = false; return(RIGHT_PAREN); }
+{ context->lexAfterType = false; context->inTypeParen = true; return(LEFT_PAREN); }
 	YY_BREAK
 case 194:
 YY_RULE_SETUP
-{ return(LEFT_BRACKET); }
+{ context->inTypeParen = false; return(RIGHT_PAREN); }
 	YY_BREAK
 case 195:
 YY_RULE_SETUP
-{ return(RIGHT_BRACKET); }
+{ return(LEFT_BRACKET); }
 	YY_BREAK
 case 196:
 YY_RULE_SETUP
-{ BEGIN(FIELDS);  return(DOT); }
+{ return(RIGHT_BRACKET); }
 	YY_BREAK
 case 197:
 YY_RULE_SETUP
-{ return(BANG); }
+{ BEGIN(FIELDS);  return(DOT); }
 	YY_BREAK
 case 198:
 YY_RULE_SETUP
-{ return(DASH); }
+{ return(BANG); }
 	YY_BREAK
 case 199:
 YY_RULE_SETUP
-{ return(TILDE); }
+{ return(DASH); }
 	YY_BREAK
 case 200:
 YY_RULE_SETUP
-{ return(PLUS); }
+{ return(TILDE); }
 	YY_BREAK
 case 201:
 YY_RULE_SETUP
-{ return(STAR); }
+{ return(PLUS); }
 	YY_BREAK
 case 202:
 YY_RULE_SETUP
-{ return(SLASH); }
+{ return(STAR); }
 	YY_BREAK
 case 203:
 YY_RULE_SETUP
-{ return(PERCENT); }
+{ return(SLASH); }
 	YY_BREAK
 case 204:
 YY_RULE_SETUP
-{ return(LEFT_ANGLE); }
+{ return(PERCENT); }
 	YY_BREAK
 case 205:
 YY_RULE_SETUP
-{ return(RIGHT_ANGLE); }
+{ return(LEFT_ANGLE); }
 	YY_BREAK
 case 206:
 YY_RULE_SETUP
-{ return(VERTICAL_BAR); }
+{ return(RIGHT_ANGLE); }
 	YY_BREAK
 case 207:
 YY_RULE_SETUP
-{ return(CARET); }
+{ return(VERTICAL_BAR); }
 	YY_BREAK
 case 208:
 YY_RULE_SETUP
-{ return(AMPERSAND); }
+{ return(CARET); }
 	YY_BREAK
 case 209:
 YY_RULE_SETUP
-{ return(QUESTION); }
+{ return(AMPERSAND); }
 	YY_BREAK
 case 210:
 YY_RULE_SETUP
+{ return(QUESTION); }
+	YY_BREAK
+case 211:
+YY_RULE_SETUP
 { 
     BEGIN(INITIAL);
     yylval->lex.string = NewPoolTString(yytext); 
     return FIELD_SELECTION;
 }
 	YY_BREAK
-case 211:
+case 212:
 YY_RULE_SETUP
 {}
 	YY_BREAK
-case 212:
-/* rule 212 can match eol */
+case 213:
+/* rule 213 can match eol */
 YY_RULE_SETUP
 {  }
 	YY_BREAK
@@ -1910,11 +1917,11 @@
 case YY_STATE_EOF(FIELDS):
 { context->AfterEOF = true; yyterminate(); }
 	YY_BREAK
-case 213:
+case 214:
 YY_RULE_SETUP
 { context->warning(yylineno, "Unknown char", yytext, ""); return 0; }
 	YY_BREAK
-case 214:
+case 215:
 YY_RULE_SETUP
 ECHO;
 	YY_BREAK
@@ -2210,7 +2217,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 >= 759 )
+			if ( yy_current_state >= 761 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2239,11 +2246,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 >= 759 )
+		if ( yy_current_state >= 761 )
 			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 == 758);
+	yy_is_jam = (yy_current_state == 760);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3154,6 +3161,21 @@
     return token;
 }
 
+int ES2_identifier_ES3_keyword(TParseContext *context, int token)
+{
+    struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
+    yyscan_t yyscanner = (yyscan_t) context->scanner;
+
+    // not a reserved word in GLSL ES 1.00, so could be used as an identifier/type name
+    if (context->shaderVersion < 300)
+    {
+        yylval->lex.string = NewPoolTString(yytext);
+        return check_type(yyscanner);
+    }
+
+    return token;
+}
+
 void yyerror(TParseContext* context, const char* reason) {
     struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
 
diff --git a/src/OpenGL/compiler/glslang_tab.cpp b/src/OpenGL/compiler/glslang_tab.cpp
index 0553c00..dbda52d 100644
--- a/src/OpenGL/compiler/glslang_tab.cpp
+++ b/src/OpenGL/compiler/glslang_tab.cpp
@@ -133,98 +133,99 @@
      BOOL_TYPE = 265,
      FLOAT_TYPE = 266,
      INT_TYPE = 267,
-     BREAK = 268,
-     CONTINUE = 269,
-     DO = 270,
-     ELSE = 271,
-     FOR = 272,
-     IF = 273,
-     DISCARD = 274,
-     RETURN = 275,
-     SWITCH = 276,
-     CASE = 277,
-     DEFAULT = 278,
-     BVEC2 = 279,
-     BVEC3 = 280,
-     BVEC4 = 281,
-     IVEC2 = 282,
-     IVEC3 = 283,
-     IVEC4 = 284,
-     VEC2 = 285,
-     VEC3 = 286,
-     VEC4 = 287,
-     MATRIX2 = 288,
-     MATRIX3 = 289,
-     MATRIX4 = 290,
-     IN_QUAL = 291,
-     OUT_QUAL = 292,
-     INOUT_QUAL = 293,
-     UNIFORM = 294,
-     VARYING = 295,
-     CENTROID = 296,
-     FLAT = 297,
-     SMOOTH = 298,
-     STRUCT = 299,
-     VOID_TYPE = 300,
-     WHILE = 301,
-     SAMPLER2D = 302,
-     SAMPLERCUBE = 303,
-     SAMPLER_EXTERNAL_OES = 304,
-     SAMPLER2DRECT = 305,
-     SAMPLER3D = 306,
-     SAMPLER3DRECT = 307,
-     SAMPLER2DSHADOW = 308,
-     IDENTIFIER = 309,
-     TYPE_NAME = 310,
-     FLOATCONSTANT = 311,
-     INTCONSTANT = 312,
-     BOOLCONSTANT = 313,
-     FIELD_SELECTION = 314,
-     LEFT_OP = 315,
-     RIGHT_OP = 316,
-     INC_OP = 317,
-     DEC_OP = 318,
-     LE_OP = 319,
-     GE_OP = 320,
-     EQ_OP = 321,
-     NE_OP = 322,
-     AND_OP = 323,
-     OR_OP = 324,
-     XOR_OP = 325,
-     MUL_ASSIGN = 326,
-     DIV_ASSIGN = 327,
-     ADD_ASSIGN = 328,
-     MOD_ASSIGN = 329,
-     LEFT_ASSIGN = 330,
-     RIGHT_ASSIGN = 331,
-     AND_ASSIGN = 332,
-     XOR_ASSIGN = 333,
-     OR_ASSIGN = 334,
-     SUB_ASSIGN = 335,
-     LEFT_PAREN = 336,
-     RIGHT_PAREN = 337,
-     LEFT_BRACKET = 338,
-     RIGHT_BRACKET = 339,
-     LEFT_BRACE = 340,
-     RIGHT_BRACE = 341,
-     DOT = 342,
-     COMMA = 343,
-     COLON = 344,
-     EQUAL = 345,
-     SEMICOLON = 346,
-     BANG = 347,
-     DASH = 348,
-     TILDE = 349,
-     PLUS = 350,
-     STAR = 351,
-     SLASH = 352,
-     PERCENT = 353,
-     LEFT_ANGLE = 354,
-     RIGHT_ANGLE = 355,
-     VERTICAL_BAR = 356,
-     CARET = 357,
-     AMPERSAND = 358,
-     QUESTION = 359
+     UINT_TYPE = 268,
+     BREAK = 269,
+     CONTINUE = 270,
+     DO = 271,
+     ELSE = 272,
+     FOR = 273,
+     IF = 274,
+     DISCARD = 275,
+     RETURN = 276,
+     SWITCH = 277,
+     CASE = 278,
+     DEFAULT = 279,
+     BVEC2 = 280,
+     BVEC3 = 281,
+     BVEC4 = 282,
+     IVEC2 = 283,
+     IVEC3 = 284,
+     IVEC4 = 285,
+     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,
+     CENTROID = 297,
+     FLAT = 298,
+     SMOOTH = 299,
+     STRUCT = 300,
+     VOID_TYPE = 301,
+     WHILE = 302,
+     SAMPLER2D = 303,
+     SAMPLERCUBE = 304,
+     SAMPLER_EXTERNAL_OES = 305,
+     SAMPLER2DRECT = 306,
+     SAMPLER3D = 307,
+     SAMPLER3DRECT = 308,
+     SAMPLER2DSHADOW = 309,
+     IDENTIFIER = 310,
+     TYPE_NAME = 311,
+     FLOATCONSTANT = 312,
+     INTCONSTANT = 313,
+     BOOLCONSTANT = 314,
+     FIELD_SELECTION = 315,
+     LEFT_OP = 316,
+     RIGHT_OP = 317,
+     INC_OP = 318,
+     DEC_OP = 319,
+     LE_OP = 320,
+     GE_OP = 321,
+     EQ_OP = 322,
+     NE_OP = 323,
+     AND_OP = 324,
+     OR_OP = 325,
+     XOR_OP = 326,
+     MUL_ASSIGN = 327,
+     DIV_ASSIGN = 328,
+     ADD_ASSIGN = 329,
+     MOD_ASSIGN = 330,
+     LEFT_ASSIGN = 331,
+     RIGHT_ASSIGN = 332,
+     AND_ASSIGN = 333,
+     XOR_ASSIGN = 334,
+     OR_ASSIGN = 335,
+     SUB_ASSIGN = 336,
+     LEFT_PAREN = 337,
+     RIGHT_PAREN = 338,
+     LEFT_BRACKET = 339,
+     RIGHT_BRACKET = 340,
+     LEFT_BRACE = 341,
+     RIGHT_BRACE = 342,
+     DOT = 343,
+     COMMA = 344,
+     COLON = 345,
+     EQUAL = 346,
+     SEMICOLON = 347,
+     BANG = 348,
+     DASH = 349,
+     TILDE = 350,
+     PLUS = 351,
+     STAR = 352,
+     SLASH = 353,
+     PERCENT = 354,
+     LEFT_ANGLE = 355,
+     RIGHT_ANGLE = 356,
+     VERTICAL_BAR = 357,
+     CARET = 358,
+     AMPERSAND = 359,
+     QUESTION = 360
    };
 #endif
 
@@ -529,22 +530,22 @@
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  77
+#define YYFINAL  78
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1554
+#define YYLAST   1562
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  105
+#define YYNTOKENS  106
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  85
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  207
+#define YYNRULES  208
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  311
+#define YYNSTATES  312
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   359
+#define YYMAXUTOK   360
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -587,7 +588,8 @@
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       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
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105
 };
 
 #if YYDEBUG
@@ -609,103 +611,103 @@
      324,   326,   328,   331,   334,   336,   338,   341,   343,   345,
      347,   349,   354,   356,   358,   360,   362,   364,   366,   368,
      370,   372,   374,   376,   378,   380,   382,   384,   386,   388,
-     390,   392,   394,   396,   398,   399,   406,   407,   413,   415,
-     418,   422,   424,   428,   430,   435,   437,   439,   441,   443,
-     445,   447,   449,   451,   453,   456,   457,   458,   464,   466,
-     468,   469,   472,   473,   476,   479,   483,   485,   488,   490,
-     493,   499,   503,   505,   507,   512,   513,   520,   521,   530,
-     531,   539,   541,   543,   545,   546,   549,   553,   556,   559,
-     562,   566,   569,   571,   574,   576,   578,   579
+     390,   392,   394,   396,   398,   400,   401,   408,   409,   415,
+     417,   420,   424,   426,   430,   432,   437,   439,   441,   443,
+     445,   447,   449,   451,   453,   455,   458,   459,   460,   466,
+     468,   470,   471,   474,   475,   478,   481,   485,   487,   490,
+     492,   495,   501,   505,   507,   509,   514,   515,   522,   523,
+     532,   533,   541,   543,   545,   547,   548,   551,   555,   558,
+     561,   564,   568,   571,   573,   576,   578,   580,   581
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     186,     0,    -1,    54,    -1,   106,    -1,    57,    -1,    56,
-      -1,    58,    -1,    81,   133,    82,    -1,   107,    -1,   108,
-      83,   109,    84,    -1,   110,    -1,   108,    87,    59,    -1,
-     108,    62,    -1,   108,    63,    -1,   133,    -1,   111,    -1,
-     112,    -1,   108,    87,   112,    -1,   114,    82,    -1,   113,
-      82,    -1,   115,    45,    -1,   115,    -1,   115,   131,    -1,
-     114,    88,   131,    -1,   116,    81,    -1,   153,    -1,    54,
-      -1,    59,    -1,   108,    -1,    62,   117,    -1,    63,   117,
-      -1,   118,   117,    -1,    95,    -1,    93,    -1,    92,    -1,
-     117,    -1,   119,    96,   117,    -1,   119,    97,   117,    -1,
-     119,    -1,   120,    95,   119,    -1,   120,    93,   119,    -1,
-     120,    -1,   121,    -1,   122,    99,   121,    -1,   122,   100,
-     121,    -1,   122,    64,   121,    -1,   122,    65,   121,    -1,
-     122,    -1,   123,    66,   122,    -1,   123,    67,   122,    -1,
-     123,    -1,   124,    -1,   125,    -1,   126,    -1,   127,    68,
-     126,    -1,   127,    -1,   128,    70,   127,    -1,   128,    -1,
-     129,    69,   128,    -1,   129,    -1,   129,   104,   133,    89,
-     131,    -1,   130,    -1,   117,   132,   131,    -1,    90,    -1,
-      71,    -1,    72,    -1,    73,    -1,    80,    -1,   131,    -1,
-     133,    88,   131,    -1,   130,    -1,   136,    91,    -1,   144,
-      91,    -1,     7,   151,   152,    91,    -1,   137,    82,    -1,
-     139,    -1,   138,    -1,   139,   141,    -1,   138,    88,   141,
-      -1,   146,    54,    81,    -1,   150,    54,    -1,   150,    54,
-      83,   134,    84,    -1,   147,   142,   140,    -1,   142,   140,
-      -1,   147,   142,   143,    -1,   142,   143,    -1,    -1,    36,
-      -1,    37,    -1,    38,    -1,   150,    -1,   145,    -1,   144,
-      88,    54,    -1,   144,    88,    54,    83,    84,    -1,   144,
-      88,    54,    83,   134,    84,    -1,   144,    88,    54,    90,
-     161,    -1,   146,    -1,   146,    54,    -1,   146,    54,    83,
-      84,    -1,   146,    54,    83,   134,    84,    -1,   146,    54,
-      90,   161,    -1,     3,    54,    -1,   150,    -1,   148,   150,
-      -1,     9,    -1,     8,    -1,    40,    -1,     3,    40,    -1,
-     149,    -1,     9,    -1,    36,    -1,    37,    -1,    41,    36,
-      -1,    41,    37,    -1,    39,    -1,   152,    -1,   151,   152,
-      -1,     4,    -1,     5,    -1,     6,    -1,   153,    -1,   153,
-      83,   134,    84,    -1,    45,    -1,    11,    -1,    12,    -1,
-      10,    -1,    30,    -1,    31,    -1,    32,    -1,    24,    -1,
+     187,     0,    -1,    55,    -1,   107,    -1,    58,    -1,    57,
+      -1,    59,    -1,    82,   134,    83,    -1,   108,    -1,   109,
+      84,   110,    85,    -1,   111,    -1,   109,    88,    60,    -1,
+     109,    63,    -1,   109,    64,    -1,   134,    -1,   112,    -1,
+     113,    -1,   109,    88,   113,    -1,   115,    83,    -1,   114,
+      83,    -1,   116,    46,    -1,   116,    -1,   116,   132,    -1,
+     115,    89,   132,    -1,   117,    82,    -1,   154,    -1,    55,
+      -1,    60,    -1,   109,    -1,    63,   118,    -1,    64,   118,
+      -1,   119,   118,    -1,    96,    -1,    94,    -1,    93,    -1,
+     118,    -1,   120,    97,   118,    -1,   120,    98,   118,    -1,
+     120,    -1,   121,    96,   120,    -1,   121,    94,   120,    -1,
+     121,    -1,   122,    -1,   123,   100,   122,    -1,   123,   101,
+     122,    -1,   123,    65,   122,    -1,   123,    66,   122,    -1,
+     123,    -1,   124,    67,   123,    -1,   124,    68,   123,    -1,
+     124,    -1,   125,    -1,   126,    -1,   127,    -1,   128,    69,
+     127,    -1,   128,    -1,   129,    71,   128,    -1,   129,    -1,
+     130,    70,   129,    -1,   130,    -1,   130,   105,   134,    90,
+     132,    -1,   131,    -1,   118,   133,   132,    -1,    91,    -1,
+      72,    -1,    73,    -1,    74,    -1,    81,    -1,   132,    -1,
+     134,    89,   132,    -1,   131,    -1,   137,    92,    -1,   145,
+      92,    -1,     7,   152,   153,    92,    -1,   138,    83,    -1,
+     140,    -1,   139,    -1,   140,   142,    -1,   139,    89,   142,
+      -1,   147,    55,    82,    -1,   151,    55,    -1,   151,    55,
+      84,   135,    85,    -1,   148,   143,   141,    -1,   143,   141,
+      -1,   148,   143,   144,    -1,   143,   144,    -1,    -1,    37,
+      -1,    38,    -1,    39,    -1,   151,    -1,   146,    -1,   145,
+      89,    55,    -1,   145,    89,    55,    84,    85,    -1,   145,
+      89,    55,    84,   135,    85,    -1,   145,    89,    55,    91,
+     162,    -1,   147,    -1,   147,    55,    -1,   147,    55,    84,
+      85,    -1,   147,    55,    84,   135,    85,    -1,   147,    55,
+      91,   162,    -1,     3,    55,    -1,   151,    -1,   149,   151,
+      -1,     9,    -1,     8,    -1,    41,    -1,     3,    41,    -1,
+     150,    -1,     9,    -1,    37,    -1,    38,    -1,    42,    37,
+      -1,    42,    38,    -1,    40,    -1,   153,    -1,   152,   153,
+      -1,     4,    -1,     5,    -1,     6,    -1,   154,    -1,   154,
+      84,   135,    85,    -1,    46,    -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,
-      33,    -1,    34,    -1,    35,    -1,    47,    -1,    48,    -1,
-      49,    -1,    51,    -1,   154,    -1,    55,    -1,    -1,    44,
-      54,    85,   155,   157,    86,    -1,    -1,    44,    85,   156,
-     157,    86,    -1,   158,    -1,   157,   158,    -1,   150,   159,
-      91,    -1,   160,    -1,   159,    88,   160,    -1,    54,    -1,
-      54,    83,   134,    84,    -1,   131,    -1,   135,    -1,   165,
-      -1,   164,    -1,   162,    -1,   174,    -1,   175,    -1,   178,
-      -1,   185,    -1,    85,    86,    -1,    -1,    -1,    85,   166,
-     173,   167,    86,    -1,   172,    -1,   164,    -1,    -1,   170,
-     172,    -1,    -1,   171,   164,    -1,    85,    86,    -1,    85,
-     173,    86,    -1,   163,    -1,   173,   163,    -1,    91,    -1,
-     133,    91,    -1,    18,    81,   133,    82,   176,    -1,   169,
-      16,   169,    -1,   169,    -1,   133,    -1,   146,    54,    90,
-     161,    -1,    -1,    46,    81,   179,   177,    82,   168,    -1,
-      -1,    15,   180,   169,    46,    81,   133,    82,    91,    -1,
-      -1,    17,    81,   181,   182,   184,    82,   168,    -1,   174,
-      -1,   162,    -1,   177,    -1,    -1,   183,    91,    -1,   183,
-      91,   133,    -1,    14,    91,    -1,    13,    91,    -1,    20,
-      91,    -1,    20,   133,    91,    -1,    19,    91,    -1,   187,
-      -1,   186,   187,    -1,   188,    -1,   135,    -1,    -1,   136,
-     189,   172,    -1
+      30,    -1,    34,    -1,    35,    -1,    36,    -1,    48,    -1,
+      49,    -1,    50,    -1,    52,    -1,   155,    -1,    56,    -1,
+      -1,    45,    55,    86,   156,   158,    87,    -1,    -1,    45,
+      86,   157,   158,    87,    -1,   159,    -1,   158,   159,    -1,
+     151,   160,    92,    -1,   161,    -1,   160,    89,   161,    -1,
+      55,    -1,    55,    84,   135,    85,    -1,   132,    -1,   136,
+      -1,   166,    -1,   165,    -1,   163,    -1,   175,    -1,   176,
+      -1,   179,    -1,   186,    -1,    86,    87,    -1,    -1,    -1,
+      86,   167,   174,   168,    87,    -1,   173,    -1,   165,    -1,
+      -1,   171,   173,    -1,    -1,   172,   165,    -1,    86,    87,
+      -1,    86,   174,    87,    -1,   164,    -1,   174,   164,    -1,
+      92,    -1,   134,    92,    -1,    19,    82,   134,    83,   177,
+      -1,   170,    17,   170,    -1,   170,    -1,   134,    -1,   147,
+      55,    91,   162,    -1,    -1,    47,    82,   180,   178,    83,
+     169,    -1,    -1,    16,   181,   170,    47,    82,   134,    83,
+      92,    -1,    -1,    18,    82,   182,   183,   185,    83,   169,
+      -1,   175,    -1,   163,    -1,   178,    -1,    -1,   184,    92,
+      -1,   184,    92,   134,    -1,    15,    92,    -1,    14,    92,
+      -1,    21,    92,    -1,    21,   134,    92,    -1,    20,    92,
+      -1,   188,    -1,   187,   188,    -1,   189,    -1,   136,    -1,
+      -1,   137,   190,   173,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   183,   183,   218,   221,   234,   239,   244,   250,   253,
-     332,   335,   436,   446,   459,   467,   567,   570,   578,   582,
-     589,   593,   600,   606,   615,   623,   678,   685,   695,   698,
-     708,   718,   739,   740,   741,   746,   747,   756,   768,   769,
-     777,   788,   792,   793,   803,   813,   823,   836,   837,   847,
-     860,   864,   868,   872,   873,   886,   887,   900,   901,   914,
-     915,   932,   933,   946,   947,   948,   949,   950,   954,   957,
-     968,   976,  1003,  1008,  1018,  1056,  1059,  1066,  1074,  1095,
-    1116,  1127,  1156,  1161,  1171,  1176,  1186,  1189,  1192,  1195,
-    1201,  1208,  1211,  1233,  1251,  1275,  1298,  1302,  1320,  1328,
-    1360,  1380,  1468,  1477,  1500,  1506,  1513,  1522,  1531,  1537,
-    1541,  1546,  1551,  1557,  1563,  1572,  1582,  1589,  1592,  1595,
-    1601,  1604,  1619,  1623,  1627,  1631,  1640,  1645,  1650,  1655,
-    1660,  1665,  1670,  1675,  1680,  1685,  1691,  1697,  1703,  1708,
-    1713,  1722,  1727,  1732,  1745,  1745,  1759,  1759,  1768,  1771,
-    1786,  1818,  1822,  1828,  1836,  1852,  1856,  1860,  1861,  1867,
-    1868,  1869,  1870,  1871,  1875,  1876,  1876,  1876,  1886,  1887,
-    1891,  1891,  1892,  1892,  1897,  1900,  1910,  1913,  1919,  1920,
-    1924,  1932,  1936,  1946,  1951,  1968,  1968,  1973,  1973,  1980,
-    1980,  1988,  1991,  1997,  2000,  2006,  2010,  2017,  2024,  2031,
-    2038,  2049,  2058,  2062,  2069,  2072,  2078,  2078
+       0,   183,   183,   218,   221,   226,   231,   236,   242,   245,
+     324,   327,   428,   438,   451,   459,   559,   562,   570,   574,
+     581,   585,   592,   598,   607,   615,   670,   677,   687,   690,
+     700,   710,   731,   732,   733,   738,   739,   748,   760,   761,
+     769,   780,   784,   785,   795,   805,   815,   828,   829,   839,
+     852,   856,   860,   864,   865,   878,   879,   892,   893,   906,
+     907,   924,   925,   938,   939,   940,   941,   942,   946,   949,
+     960,   968,   995,  1000,  1010,  1048,  1051,  1058,  1066,  1087,
+    1108,  1119,  1148,  1153,  1163,  1168,  1178,  1181,  1184,  1187,
+    1193,  1200,  1203,  1225,  1243,  1267,  1290,  1294,  1312,  1320,
+    1352,  1372,  1460,  1469,  1492,  1498,  1505,  1514,  1523,  1529,
+    1533,  1538,  1543,  1549,  1555,  1564,  1574,  1581,  1584,  1587,
+    1593,  1596,  1611,  1615,  1619,  1623,  1627,  1631,  1636,  1641,
+    1646,  1651,  1656,  1661,  1666,  1671,  1676,  1682,  1688,  1694,
+    1699,  1704,  1713,  1718,  1723,  1736,  1736,  1750,  1750,  1759,
+    1762,  1777,  1809,  1813,  1819,  1827,  1843,  1847,  1851,  1852,
+    1858,  1859,  1860,  1861,  1862,  1866,  1867,  1867,  1867,  1877,
+    1878,  1882,  1882,  1883,  1883,  1888,  1891,  1901,  1904,  1910,
+    1911,  1915,  1923,  1927,  1937,  1942,  1959,  1959,  1964,  1964,
+    1971,  1971,  1979,  1982,  1988,  1991,  1997,  2001,  2008,  2015,
+    2022,  2029,  2040,  2049,  2053,  2060,  2063,  2069,  2069
 };
 #endif
 
@@ -716,23 +718,23 @@
 {
   "$end", "error", "$undefined", "INVARIANT", "HIGH_PRECISION",
   "MEDIUM_PRECISION", "LOW_PRECISION", "PRECISION", "ATTRIBUTE",
-  "CONST_QUAL", "BOOL_TYPE", "FLOAT_TYPE", "INT_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", "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",
+  "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", "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",
@@ -780,34 +782,34 @@
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      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
+     355,   356,   357,   358,   359,   360
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   105,   106,   107,   107,   107,   107,   107,   108,   108,
-     108,   108,   108,   108,   109,   110,   111,   111,   112,   112,
-     113,   113,   114,   114,   115,   116,   116,   116,   117,   117,
-     117,   117,   118,   118,   118,   119,   119,   119,   120,   120,
-     120,   121,   122,   122,   122,   122,   122,   123,   123,   123,
-     124,   125,   126,   127,   127,   128,   128,   129,   129,   130,
-     130,   131,   131,   132,   132,   132,   132,   132,   133,   133,
-     134,   135,   135,   135,   136,   137,   137,   138,   138,   139,
-     140,   140,   141,   141,   141,   141,   142,   142,   142,   142,
-     143,   144,   144,   144,   144,   144,   145,   145,   145,   145,
-     145,   145,   146,   146,   147,   148,   148,   148,   148,   149,
-     149,   149,   149,   149,   149,   150,   150,   151,   151,   151,
-     152,   152,   153,   153,   153,   153,   153,   153,   153,   153,
-     153,   153,   153,   153,   153,   153,   153,   153,   153,   153,
-     153,   153,   153,   153,   155,   154,   156,   154,   157,   157,
-     158,   159,   159,   160,   160,   161,   162,   163,   163,   164,
-     164,   164,   164,   164,   165,   166,   167,   165,   168,   168,
-     170,   169,   171,   169,   172,   172,   173,   173,   174,   174,
-     175,   176,   176,   177,   177,   179,   178,   180,   178,   181,
-     178,   182,   182,   183,   183,   184,   184,   185,   185,   185,
-     185,   185,   186,   186,   187,   187,   189,   188
+       0,   106,   107,   108,   108,   108,   108,   108,   109,   109,
+     109,   109,   109,   109,   110,   111,   112,   112,   113,   113,
+     114,   114,   115,   115,   116,   117,   117,   117,   118,   118,
+     118,   118,   119,   119,   119,   120,   120,   120,   121,   121,
+     121,   122,   123,   123,   123,   123,   123,   124,   124,   124,
+     125,   126,   127,   128,   128,   129,   129,   130,   130,   131,
+     131,   132,   132,   133,   133,   133,   133,   133,   134,   134,
+     135,   136,   136,   136,   137,   138,   138,   139,   139,   140,
+     141,   141,   142,   142,   142,   142,   143,   143,   143,   143,
+     144,   145,   145,   145,   145,   145,   146,   146,   146,   146,
+     146,   146,   147,   147,   148,   149,   149,   149,   149,   150,
+     150,   150,   150,   150,   150,   151,   151,   152,   152,   152,
+     153,   153,   154,   154,   154,   154,   154,   154,   154,   154,
+     154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
+     154,   154,   154,   154,   154,   156,   155,   157,   155,   158,
+     158,   159,   160,   160,   161,   161,   162,   163,   164,   164,
+     165,   165,   165,   165,   165,   166,   167,   168,   166,   169,
+     169,   171,   170,   172,   170,   173,   173,   174,   174,   175,
+     175,   176,   177,   177,   178,   178,   180,   179,   181,   179,
+     182,   179,   183,   183,   184,   184,   185,   185,   186,   186,
+     186,   186,   186,   187,   187,   188,   188,   190,   189
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -827,13 +829,13 @@
        1,     1,     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,     0,     6,     0,     5,     1,     2,
-       3,     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,     0,     6,     0,     5,     1,
+       2,     3,     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 rule to reduce with in state
@@ -841,430 +843,432 @@
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,   117,   118,   119,     0,   105,   109,   125,   123,
-     124,   129,   130,   131,   132,   133,   134,   126,   127,   128,
-     135,   136,   137,   110,   111,   114,   106,     0,     0,   122,
-     138,   139,   140,   141,   143,   205,   206,     0,    76,    86,
-       0,    91,    96,     0,   108,   102,     0,   115,   120,   142,
-       0,   202,   204,   107,   101,     0,   112,   113,     0,   146,
-      71,     0,    74,    86,   104,    87,    88,    89,    77,     0,
-      86,     0,    72,    97,   103,   116,     0,     1,   203,     0,
-     144,     0,     0,   207,    78,    83,    85,    90,     0,    92,
-      79,     0,     0,     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,
-      73,     0,     0,     0,   148,     0,     0,   187,     0,     0,
-       0,     0,     0,   165,   174,   178,    35,    61,    68,     0,
-     156,     0,   120,   159,   176,   158,   157,     0,   160,   161,
-     162,   163,    80,    82,    84,     0,     0,    98,     0,   155,
-     100,    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,   121,
-       0,   153,     0,   151,   147,   149,   198,   197,   172,   189,
-       0,   201,   199,     0,   185,   164,     0,    64,    65,    66,
-      67,    63,     0,     0,   179,   175,   177,     0,    93,     0,
-      95,    99,     7,     0,    14,    26,    11,    17,    23,    36,
-      37,    40,    39,    45,    46,    43,    44,    48,    49,    54,
-      56,    58,     0,   145,     0,     0,   150,     0,     0,     0,
-       0,     0,   200,     0,   166,    62,    69,     0,    94,     9,
-       0,     0,   152,     0,   171,   173,   192,   191,   194,   172,
-       0,   183,     0,     0,     0,    81,    60,   154,     0,   193,
-       0,     0,   182,   180,     0,     0,   167,     0,   195,     0,
-     172,     0,   169,   186,   168,     0,   196,   190,   181,   184,
-     188
+       0,     0,   117,   118,   119,     0,   105,   109,   126,   123,
+     124,   125,   130,   131,   132,   133,   134,   135,   127,   128,
+     129,   136,   137,   138,   110,   111,   114,   106,     0,     0,
+     122,   139,   140,   141,   142,   144,   206,   207,     0,    76,
+      86,     0,    91,    96,     0,   108,   102,     0,   115,   120,
+     143,     0,   203,   205,   107,   101,     0,   112,   113,     0,
+     147,    71,     0,    74,    86,   104,    87,    88,    89,    77,
+       0,    86,     0,    72,    97,   103,   116,     0,     1,   204,
+       0,   145,     0,     0,   208,    78,    83,    85,    90,     0,
+      92,    79,     0,     0,     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,    73,     0,     0,     0,   149,     0,     0,   188,     0,
+       0,     0,     0,     0,   166,   175,   179,    35,    61,    68,
+       0,   157,     0,   120,   160,   177,   159,   158,     0,   161,
+     162,   163,   164,    80,    82,    84,     0,     0,    98,     0,
+     156,   100,    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,
+     121,     0,   154,     0,   152,   148,   150,   199,   198,   173,
+     190,     0,   202,   200,     0,   186,   165,     0,    64,    65,
+      66,    67,    63,     0,     0,   180,   176,   178,     0,    93,
+       0,    95,    99,     7,     0,    14,    26,    11,    17,    23,
+      36,    37,    40,    39,    45,    46,    43,    44,    48,    49,
+      54,    56,    58,     0,   146,     0,     0,   151,     0,     0,
+       0,     0,     0,   201,     0,   167,    62,    69,     0,    94,
+       9,     0,     0,   153,     0,   172,   174,   193,   192,   195,
+     173,     0,   184,     0,     0,     0,    81,    60,   155,     0,
+     194,     0,     0,   183,   181,     0,     0,   168,     0,   196,
+       0,   173,     0,   170,   187,   169,     0,   197,   191,   182,
+     185,   189
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   104,   105,   106,   233,   107,   108,   109,   110,   111,
-     112,   113,   146,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   147,   148,   222,   149,   128,
-     150,   151,    37,    38,    39,    85,    68,    69,    86,    40,
-      41,    42,    70,    43,    44,    45,    46,    47,   129,    49,
-     131,    81,   133,   134,   202,   203,   170,   153,   154,   155,
-     156,   216,   284,   303,   257,   258,   259,   304,   157,   158,
-     159,   293,   283,   160,   263,   208,   260,   278,   290,   291,
-     161,    50,    51,    52,    61
+      -1,   105,   106,   107,   234,   108,   109,   110,   111,   112,
+     113,   114,   147,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   148,   149,   223,   150,   129,
+     151,   152,    38,    39,    40,    86,    69,    70,    87,    41,
+      42,    43,    71,    44,    45,    46,    47,    48,   130,    50,
+     132,    82,   134,   135,   203,   204,   171,   154,   155,   156,
+     157,   217,   285,   304,   258,   259,   260,   305,   158,   159,
+     160,   294,   284,   161,   264,   209,   261,   279,   291,   292,
+     162,    51,    52,    53,    62
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -268
+#define YYPACT_NINF -265
 static const yytype_int16 yypact[] =
 {
-    1363,    -6,  -268,  -268,  -268,   135,  -268,  -268,  -268,  -268,
-    -268,  -268,  -268,  -268,  -268,  -268,  -268,  -268,  -268,  -268,
-    -268,  -268,  -268,  -268,  -268,  -268,  -268,   -21,   -26,  -268,
-    -268,  -268,  -268,  -268,  -268,  -268,   -51,   -47,     6,    16,
-     -20,  -268,    46,  1411,  -268,  -268,  1499,  -268,    29,  -268,
-    1310,  -268,  -268,  -268,  -268,  1499,  -268,  -268,    31,  -268,
-    -268,    67,  -268,    27,  -268,  -268,  -268,  -268,  -268,  1411,
-     111,   102,  -268,   -11,  -268,  -268,  1055,  -268,  -268,    69,
-    -268,  1411,   297,  -268,  -268,  -268,  -268,   104,  1411,   -45,
-    -268,   193,  1055,    80,  -268,  -268,  -268,  -268,  1055,  1055,
-    1055,  -268,  -268,  -268,  -268,  -268,    21,  -268,  -268,  -268,
-      81,   -15,  1127,    84,  -268,  1055,   -22,    20,  -268,   -43,
-      70,  -268,  -268,  -268,    94,    96,   -55,  -268,    83,  -268,
-    -268,  1411,   114,  1199,  -268,    82,    85,  -268,    90,    91,
-      86,   908,    93,    89,  -268,  -268,   -53,  -268,  -268,    14,
-    -268,   -51,    49,  -268,  -268,  -268,  -268,   390,  -268,  -268,
-    -268,  -268,    95,  -268,  -268,   980,  1055,  -268,    97,  -268,
-    -268,  -268,  -268,     5,  -268,  -268,  1055,  1453,  -268,  -268,
-    1055,   103,  -268,  -268,  -268,  1055,  1055,  1055,  1055,  1055,
-    1055,  1055,  1055,  1055,  1055,  1055,  1055,  1055,  1055,  -268,
-    1247,   100,    18,  -268,  -268,  -268,  -268,  -268,   105,  -268,
-    1055,  -268,  -268,    19,  -268,  -268,   483,  -268,  -268,  -268,
-    -268,  -268,  1055,  1055,  -268,  -268,  -268,  1055,  -268,   101,
-    -268,  -268,  -268,   107,    99,  -268,   112,  -268,  -268,  -268,
-    -268,   -22,   -22,  -268,  -268,  -268,  -268,   -43,   -43,  -268,
-      94,    96,    -3,  -268,  1055,   114,  -268,   142,    67,   669,
-     762,     7,  -268,   836,   483,  -268,  -268,   108,  -268,  -268,
-    1055,   110,  -268,   115,  -268,  -268,  -268,  -268,   836,   105,
-     155,    99,   143,   116,   120,  -268,  -268,  -268,  1055,  -268,
-     117,   119,   191,  -268,   121,   576,  -268,     8,  1055,   576,
-     105,  1055,  -268,  -268,  -268,   118,    99,  -268,  -268,  -268,
-    -268
+    1359,   -22,  -265,  -265,  -265,   108,  -265,  -265,  -265,  -265,
+    -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,
+    -265,  -265,  -265,  -265,  -265,  -265,  -265,  -265,    -6,   -37,
+    -265,  -265,  -265,  -265,  -265,  -265,  -265,   -40,    -9,   -11,
+       1,   -32,  -265,    31,  1408,  -265,  -265,  1506,  -265,    20,
+    -265,  1305,  -265,  -265,  -265,  -265,  1506,  -265,  -265,    15,
+    -265,  -265,    59,  -265,    27,  -265,  -265,  -265,  -265,  -265,
+    1408,   103,   101,  -265,     3,  -265,  -265,  1047,  -265,  -265,
+      67,  -265,  1408,   298,  -265,  -265,  -265,  -265,   105,  1408,
+     -64,  -265,   822,  1047,    79,  -265,  -265,  -265,  -265,  1047,
+    1047,  1047,  -265,  -265,  -265,  -265,  -265,     4,  -265,  -265,
+    -265,    83,   -28,  1120,    81,  -265,  1047,    40,   -53,  -265,
+     -42,    80,  -265,  -265,  -265,    93,    96,   -57,  -265,    84,
+    -265,  -265,  1408,   113,  1193,  -265,    82,    85,  -265,    89,
+      90,    86,   898,    91,    88,  -265,  -265,    -1,  -265,  -265,
+      13,  -265,   -40,    62,  -265,  -265,  -265,  -265,   392,  -265,
+    -265,  -265,  -265,    92,  -265,  -265,   971,  1047,  -265,    97,
+    -265,  -265,  -265,  -265,   -14,  -265,  -265,  1047,  1455,  -265,
+    -265,  1047,    99,  -265,  -265,  -265,  1047,  1047,  1047,  1047,
+    1047,  1047,  1047,  1047,  1047,  1047,  1047,  1047,  1047,  1047,
+    -265,  1242,   102,    39,  -265,  -265,  -265,  -265,  -265,   104,
+    -265,  1047,  -265,  -265,    41,  -265,  -265,   486,  -265,  -265,
+    -265,  -265,  -265,  1047,  1047,  -265,  -265,  -265,  1047,  -265,
+     100,  -265,  -265,  -265,   106,    98,  -265,   110,  -265,  -265,
+    -265,  -265,    40,    40,  -265,  -265,  -265,  -265,   -42,   -42,
+    -265,    93,    96,    60,  -265,  1047,   113,  -265,   141,    59,
+     674,   199,    14,  -265,   749,   486,  -265,  -265,   109,  -265,
+    -265,  1047,   111,  -265,   115,  -265,  -265,  -265,  -265,   749,
+     104,   152,    98,   140,   130,   128,  -265,  -265,  -265,  1047,
+    -265,   124,   135,   181,  -265,   129,   580,  -265,    17,  1047,
+     580,   104,  1047,  -265,  -265,  -265,   127,    98,  -265,  -265,
+    -265,  -265
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -268,  -268,  -268,  -268,  -268,  -268,  -268,    33,  -268,  -268,
-    -268,  -268,   -68,  -268,   -37,  -268,   -46,   -39,  -268,  -268,
-    -268,    17,    34,    32,  -268,   -74,   -88,  -268,   -99,   -85,
-      10,    11,  -268,  -268,  -268,   126,   152,   161,   144,  -268,
-    -268,  -234,  -268,  -268,  -268,   -30,   228,   -14,     0,  -268,
-    -268,  -268,   122,  -124,  -268,   -19,  -163,   -25,  -150,  -233,
-    -268,  -268,  -268,   -65,  -267,  -268,  -268,   -56,    23,   -17,
-    -268,  -268,   -33,  -268,  -268,  -268,  -268,  -268,  -268,  -268,
-    -268,  -268,   196,  -268,  -268
+    -265,  -265,  -265,  -265,  -265,  -265,  -265,    43,  -265,  -265,
+    -265,  -265,   -71,  -265,   -34,  -265,   -83,   -43,  -265,  -265,
+    -265,    26,    45,    25,  -265,   -75,   -88,  -265,  -100,   -85,
+      11,    12,  -265,  -265,  -265,   149,   179,   175,   161,  -265,
+    -265,  -249,  -265,  -265,  -265,   -36,   247,   -21,     0,  -265,
+    -265,  -265,   121,  -125,  -265,    10,  -163,     6,  -136,  -246,
+    -265,  -265,  -265,   -31,  -264,  -265,  -265,   -59,    51,     9,
+    -265,  -265,    -8,  -265,  -265,  -265,  -265,  -265,  -265,  -265,
+    -265,  -265,   221,  -265,  -265
 };
 
 /* 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 zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -171
+#define YYTABLE_NINF -172
 static const yytype_int16 yytable[] =
 {
-      48,   173,   127,   230,   169,    83,   168,   226,   114,   205,
-      35,    36,   292,    74,   197,    56,    57,   127,   217,   218,
-     219,   189,   190,   114,   182,    64,   275,   220,    58,   282,
-     171,   172,    75,   308,    53,    62,    64,   221,   165,    87,
-      60,    79,   213,    48,   282,   166,    48,   184,    54,   198,
-      48,   132,    65,    66,    67,    48,   191,   192,    87,    59,
-      35,    36,   302,    65,    66,    67,   302,   179,    71,    48,
-      90,    72,    91,   180,   185,   186,   205,   234,   169,    92,
-     229,    48,   152,   174,   175,   223,   270,   232,    48,   279,
-     305,   127,   238,   223,    63,   223,   223,   114,   -75,   252,
-      73,   132,   223,   132,   176,   224,   255,   223,   177,   256,
-     262,   261,    76,   187,   226,   188,    80,   239,   240,   114,
-     114,   114,   114,   114,   114,   114,   114,   114,   114,   114,
-     -25,    48,    76,    48,   265,   266,   193,   194,   309,     2,
-       3,     4,   267,   243,   244,   245,   246,    65,    66,    67,
-     241,   242,    82,   127,   247,   248,    89,   152,   162,   114,
-     130,   -26,   195,   178,   281,   183,   196,   199,   201,   271,
-     132,   209,   210,   206,   214,   215,   207,   211,   227,   281,
-     127,   231,   286,   254,  -122,   268,   114,   223,   273,   297,
-    -170,   269,   285,   -27,   287,    53,   288,   294,   295,   306,
-      48,   299,   274,     8,     9,    10,   296,   300,   298,   310,
-     237,   301,   249,   169,   163,    84,   152,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,   251,
-     250,    88,   164,    55,   307,   276,   272,    28,    29,   264,
-      30,    31,    32,   277,    33,   289,    78,    93,    34,    94,
-      95,    96,    97,   200,     0,    98,    99,     0,     0,   152,
-     152,     0,     0,   152,   152,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   100,     0,     0,   167,   152,     0,
-       0,     0,     0,     0,     0,   101,   102,     0,   103,     0,
-       0,     0,     0,     0,     0,   152,     0,     0,     0,   152,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-     135,   136,   137,     0,   138,   139,   140,   141,     0,     0,
-       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,    25,    26,    27,     0,
-       0,    28,    29,   142,    30,    31,    32,     0,    33,     0,
-       0,    93,    34,    94,    95,    96,    97,     0,     0,    98,
-      99,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   100,     0,
-       0,     0,   143,   144,     0,     0,     0,     0,   145,   101,
-     102,     0,   103,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,   135,   136,   137,     0,   138,   139,   140,
-     141,     0,     0,     0,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,    25,
-      26,    27,     0,     0,    28,    29,   142,    30,    31,    32,
-       0,    33,     0,     0,    93,    34,    94,    95,    96,    97,
-       0,     0,    98,    99,     0,     0,     0,     0,     0,     0,
+      49,   174,   128,    84,   231,   170,   115,   169,    75,   206,
+      65,    36,    37,   198,   276,   283,   293,   128,    59,    54,
+     166,   115,   227,   190,   191,   183,    76,   167,   172,   173,
+     283,    57,    58,    55,    88,    80,    65,   309,    66,    67,
+      68,   188,   214,   189,    49,   185,   133,    49,   199,    60,
+     303,    49,    61,    88,   303,   180,    49,    72,   192,   193,
+      73,   181,    36,    37,    66,    67,    68,   175,   176,   233,
+      49,   218,   219,   220,    63,   224,   206,   235,    64,   170,
+     221,   230,    49,   153,   -75,    91,    74,    92,   177,    49,
+     222,   128,   178,   239,    93,   115,   133,   280,   133,   253,
+     306,    81,   224,   224,    77,   225,   224,   244,   245,   246,
+     247,   262,     2,     3,     4,   240,   241,   115,   115,   115,
+     115,   115,   115,   115,   115,   115,   115,   115,   256,   227,
+     224,   257,    49,   263,    49,   266,   267,   186,   187,   310,
+      66,    67,    68,   268,   -25,    83,    77,   194,   195,   224,
+     271,   248,   249,   128,   242,   243,    90,   115,   153,   131,
+     163,   -26,   196,   184,   282,   133,   179,   197,   202,   200,
+     272,   210,   211,   215,   207,   216,   228,   208,   212,   282,
+     128,  -122,   232,   287,   115,   269,   255,   224,   274,   298,
+    -171,   270,   -27,    54,   286,   295,   288,   289,   301,   307,
+     275,    49,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,   296,   170,   297,   299,   153,   300,   311,
+     302,   238,   250,   252,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,   164,    26,
+      27,    28,   251,    85,    29,    30,    89,    31,    32,    33,
+     165,    34,    56,   201,    94,    35,    95,    96,    97,    98,
+     153,   153,    99,   100,   153,   153,   273,   277,   265,   308,
+     278,   290,    79,     0,     0,     0,     0,     0,     0,   153,
+       0,   101,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   146,   102,   103,     0,   104,   153,     0,     0,     0,
+     153,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,   136,   137,   138,     0,   139,   140,   141,   142,
+       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,    26,    27,
+      28,     0,     0,    29,    30,   143,    31,    32,    33,     0,
+      34,     0,     0,    94,    35,    95,    96,    97,    98,     0,
+       0,    99,   100,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   100,     0,     0,     0,   143,   225,     0,     0,     0,
-       0,   145,   101,   102,     0,   103,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,   135,   136,   137,     0,
-     138,   139,   140,   141,     0,     0,     0,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,    25,    26,    27,     0,     0,    28,    29,   142,
-      30,    31,    32,     0,    33,     0,     0,    93,    34,    94,
-      95,    96,    97,     0,     0,    98,    99,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   100,     0,     0,     0,   143,     0,
-       0,     0,     0,     0,   145,   101,   102,     0,   103,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,   135,
-     136,   137,     0,   138,   139,   140,   141,     0,     0,     0,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,    25,    26,    27,     0,     0,
-      28,    29,   142,    30,    31,    32,     0,    33,     0,     0,
-      93,    34,    94,    95,    96,    97,     0,     0,    98,    99,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   100,     0,     0,
-       0,    82,     0,     0,     0,     0,     0,   145,   101,   102,
-       0,   103,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,   135,   136,   137,     0,   138,   139,   140,   141,
-       0,     0,     0,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,    25,    26,
-      27,     0,     0,    28,    29,   142,    30,    31,    32,     0,
-      33,     0,     0,    93,    34,    94,    95,    96,    97,     0,
-       0,    98,    99,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     100,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     145,   101,   102,     0,   103,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    11,    12,    13,    14,
+     101,     0,     0,     0,   144,   145,     0,     0,     0,     0,
+     146,   102,   103,     0,   104,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   136,   137,   138,     0,
+     139,   140,   141,   142,     0,     0,     0,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,    25,    26,    27,     0,     0,    28,    29,     0,    30,
-      31,    32,     0,    33,     0,     0,    93,    34,    94,    95,
-      96,    97,     0,     0,    98,    99,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   280,
-       2,     3,     4,   100,     6,     7,     8,     9,    10,     0,
-       0,     0,     0,   145,   101,   102,     0,   103,     0,     0,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,    25,    26,    27,     0,     0,
-      28,    29,     0,    30,    31,    32,     0,    33,     0,     0,
-      93,    34,    94,    95,    96,    97,     0,     0,    98,    99,
+      25,     0,    26,    27,    28,     0,     0,    29,    30,   143,
+      31,    32,    33,     0,    34,     0,     0,    94,    35,    95,
+      96,    97,    98,     0,     0,    99,   100,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   100,     8,     9,
-      10,     0,     0,     0,     0,     0,     0,     0,   101,   102,
-       0,   103,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,     0,     0,     0,     0,     0,     0,
-       0,     0,    28,    29,     0,    30,    31,    32,     0,    33,
-       0,     0,    93,    34,    94,    95,    96,    97,     0,     0,
-      98,    99,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   100,
-       8,     9,    10,     0,     0,     0,     0,     0,     0,   212,
-     101,   102,     0,   103,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,     0,     0,     0,     0,
-       0,     0,     0,     0,    28,    29,     0,    30,    31,    32,
-       0,    33,     0,     0,    93,    34,    94,    95,    96,    97,
-       0,     0,    98,    99,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   101,     0,     0,     0,   144,   226,
+       0,     0,     0,     0,   146,   102,   103,     0,   104,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+     136,   137,   138,     0,   139,   140,   141,   142,     0,     0,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,    26,    27,    28,     0,
+       0,    29,    30,   143,    31,    32,    33,     0,    34,     0,
+       0,    94,    35,    95,    96,    97,    98,     0,     0,    99,
+     100,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   101,     0,
+       0,     0,   144,     0,     0,     0,     0,     0,   146,   102,
+     103,     0,   104,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,   136,   137,   138,     0,   139,   140,
+     141,   142,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+      26,    27,    28,     0,     0,    29,    30,   143,    31,    32,
+      33,     0,    34,     0,     0,    94,    35,    95,    96,    97,
+      98,     0,     0,    99,   100,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   100,     0,     0,   228,     8,     9,    10,     0,     0,
-       0,     0,   101,   102,     0,   103,     0,     0,     0,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,     0,     0,     0,     0,     0,     0,     0,     0,    28,
-      29,     0,    30,    31,    32,     0,    33,     0,     0,    93,
-      34,    94,    95,    96,    97,     0,     0,    98,    99,     0,
+       0,     0,   101,     0,     0,     0,    83,     0,     0,     0,
+       0,     0,   146,   102,   103,     0,   104,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,   136,   137,
+     138,     0,   139,   140,   141,   142,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,    26,    27,    28,     0,     0,    29,
+      30,   143,    31,    32,    33,     0,    34,     0,     0,    94,
+      35,    95,    96,    97,    98,     0,     0,    99,   100,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   100,     8,     9,    10,
-       0,     0,     0,     0,     0,     0,     0,   101,   102,     0,
-     103,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,     0,     0,     0,     0,     0,     0,     0,
-       0,    28,   181,     0,    30,    31,    32,     0,    33,     0,
-       0,    93,    34,    94,    95,    96,    97,     0,     0,    98,
-      99,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     2,     3,     4,     0,     0,   100,     8,
-       9,    10,     0,     0,     0,     0,     0,     0,     0,   101,
-     102,     0,   103,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,     0,     0,     0,     0,     0,
-       0,     0,     0,    28,    29,     0,    30,    31,    32,     0,
-      33,     2,     3,     4,    34,     0,     0,     8,     9,    10,
+       0,     0,   281,     2,     3,     4,   101,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,   146,   102,   103,     0,
+     104,     0,     0,     0,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,    26,
+      27,    28,     0,     0,    29,    30,     0,    31,    32,    33,
+       0,    34,     0,     0,    94,    35,    95,    96,    97,    98,
+       0,     0,    99,   100,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,     0,     0,   204,     0,     0,     0,     0,
-       0,    28,    29,     0,    30,    31,    32,     0,    33,     0,
-       0,     0,    34,     0,     0,     0,     0,     0,     0,     0,
-      77,     0,     0,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   253,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,    25,
-      26,    27,     0,     0,    28,    29,     0,    30,    31,    32,
-       0,    33,     0,     0,     0,    34,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    11,    12,    13,
+       0,   101,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,   102,   103,     0,   104,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,     0,
+       0,     0,     0,     0,     0,     0,     0,    29,    30,     0,
+      31,    32,    33,     0,    34,     0,     0,    94,    35,    95,
+      96,    97,    98,     0,     0,    99,   100,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   101,     0,     0,   168,     8,     9,
+      10,    11,     0,     0,     0,   102,   103,     0,   104,     0,
+       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,     0,     0,     0,     0,     0,
+       0,     0,     0,    29,    30,     0,    31,    32,    33,     0,
+      34,     0,     0,    94,    35,    95,    96,    97,    98,     0,
+       0,    99,   100,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     101,     8,     9,    10,    11,     0,     0,     0,     0,     0,
+     213,   102,   103,     0,   104,     0,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,     0,     0,
+       0,     0,     0,     0,     0,     0,    29,    30,     0,    31,
+      32,    33,     0,    34,     0,     0,    94,    35,    95,    96,
+      97,    98,     0,     0,    99,   100,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   101,     0,     0,   229,     8,     9,    10,
+      11,     0,     0,     0,   102,   103,     0,   104,     0,     0,
+       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,     0,     0,     0,     0,     0,     0,
+       0,     0,    29,    30,     0,    31,    32,    33,     0,    34,
+       0,     0,    94,    35,    95,    96,    97,    98,     0,     0,
+      99,   100,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   101,
+       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
+     102,   103,     0,   104,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,     0,     0,     0,
+       0,     0,     0,     0,     0,    29,   182,     0,    31,    32,
+      33,     0,    34,     0,     0,    94,    35,    95,    96,    97,
+      98,     0,     0,    99,   100,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     2,     3,     4,
+       0,     0,   101,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,   102,   103,     0,   104,     0,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,    25,    26,    27,     0,     0,    28,    29,     0,
-      30,    31,    32,     0,    33,     2,     3,     4,    34,     0,
-       0,     8,     9,    10,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,     0,     0,     0,
-       0,     0,     0,     0,     0,    28,    29,     0,    30,    31,
-      32,     0,    33,     8,     9,    10,    34,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,     0,
-       0,     0,     0,     0,     0,     0,     0,    28,    29,     0,
-      30,    31,    32,     0,    33,     0,     0,   235,    34,     8,
-       9,    10,   236,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,     0,     0,     0,     0,     0,
-       0,     0,     0,    28,    29,     0,    30,    31,    32,     0,
-      33,     0,     0,     0,    34
+       0,     0,     0,     0,     0,     0,     0,     0,    29,    30,
+       0,    31,    32,    33,     0,    34,     2,     3,     4,    35,
+       0,     0,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,     0,
+     205,     0,     0,     0,     0,     0,     0,    29,    30,     0,
+      31,    32,    33,     0,    34,     0,     0,     0,    35,     0,
+       0,     0,     0,     0,     0,    78,     0,     0,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   254,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,    26,    27,    28,     0,     0,
+      29,    30,     0,    31,    32,    33,     0,    34,     0,     0,
+       0,    35,     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,     0,     0,    29,    30,     0,    31,    32,    33,
+       0,    34,     2,     3,     4,    35,     0,     0,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,     0,     0,     0,     0,     0,
+       0,     0,     0,    29,    30,     0,    31,    32,    33,     0,
+      34,     0,     0,     0,    35,     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,     0,     0,     0,
+      29,    30,     0,    31,    32,    33,     0,    34,     0,     0,
+     236,    35,     0,     0,     0,   237,     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,     0,     0,
+       0,    29,    30,     0,    31,    32,    33,     0,    34,     0,
+       0,     0,    35
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   100,    76,   166,    92,    61,    91,   157,    76,   133,
-       0,     0,   279,    43,    69,    36,    37,    91,    71,    72,
-      73,    64,    65,    91,   112,     9,   259,    80,    54,   263,
-      98,    99,    46,   300,    40,    82,     9,    90,    83,    69,
-      91,    55,   141,    43,   278,    90,    46,   115,    54,   104,
-      50,    81,    36,    37,    38,    55,    99,   100,    88,    85,
-      50,    50,   295,    36,    37,    38,   299,    82,    88,    69,
-      81,    91,    83,    88,    96,    97,   200,   176,   166,    90,
-     165,    81,    82,    62,    63,    88,    89,    82,    88,    82,
-      82,   165,   180,    88,    88,    88,    88,   165,    82,   198,
-      54,   131,    88,   133,    83,    91,    88,    88,    87,    91,
-      91,   210,    83,    93,   264,    95,    85,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-      81,   131,    83,   133,   222,   223,    66,    67,   301,     4,
-       5,     6,   227,   189,   190,   191,   192,    36,    37,    38,
-     187,   188,    85,   227,   193,   194,    54,   157,    54,   227,
-      91,    81,    68,    82,   263,    81,    70,    84,    54,   254,
-     200,    81,    81,    91,    81,    86,    91,    91,    83,   278,
-     254,    84,   270,    83,    81,    84,   254,    88,    46,   288,
-      85,    84,    84,    81,    84,    40,    81,    54,    82,   298,
-     200,    82,   258,    10,    11,    12,    86,    16,    91,    91,
-     177,    90,   195,   301,    88,    63,   216,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,   197,
-     196,    70,    88,     5,   299,   260,   255,    44,    45,   216,
-      47,    48,    49,   260,    51,   278,    50,    54,    55,    56,
-      57,    58,    59,   131,    -1,    62,    63,    -1,    -1,   259,
-     260,    -1,    -1,   263,   264,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    81,    -1,    -1,    84,   278,    -1,
-      -1,    -1,    -1,    -1,    -1,    92,    93,    -1,    95,    -1,
-      -1,    -1,    -1,    -1,    -1,   295,    -1,    -1,    -1,   299,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    -1,    17,    18,    19,    20,    -1,    -1,
-      -1,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    -1,    39,    40,    41,    -1,
-      -1,    44,    45,    46,    47,    48,    49,    -1,    51,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,
-      -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    91,    92,
-      93,    -1,    95,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    -1,    17,    18,    19,
-      20,    -1,    -1,    -1,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    44,    45,    46,    47,    48,    49,
-      -1,    51,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,
+       0,   101,    77,    62,   167,    93,    77,    92,    44,   134,
+       9,     0,     0,    70,   260,   264,   280,    92,    55,    41,
+      84,    92,   158,    65,    66,   113,    47,    91,    99,   100,
+     279,    37,    38,    55,    70,    56,     9,   301,    37,    38,
+      39,    94,   142,    96,    44,   116,    82,    47,   105,    86,
+     296,    51,    92,    89,   300,    83,    56,    89,   100,   101,
+      92,    89,    51,    51,    37,    38,    39,    63,    64,    83,
+      70,    72,    73,    74,    83,    89,   201,   177,    89,   167,
+      81,   166,    82,    83,    83,    82,    55,    84,    84,    89,
+      91,   166,    88,   181,    91,   166,   132,    83,   134,   199,
+      83,    86,    89,    89,    84,    92,    89,   190,   191,   192,
+     193,   211,     4,     5,     6,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,    89,   265,
+      89,    92,   132,    92,   134,   223,   224,    97,    98,   302,
+      37,    38,    39,   228,    82,    86,    84,    67,    68,    89,
+      90,   194,   195,   228,   188,   189,    55,   228,   158,    92,
+      55,    82,    69,    82,   264,   201,    83,    71,    55,    85,
+     255,    82,    82,    82,    92,    87,    84,    92,    92,   279,
+     255,    82,    85,   271,   255,    85,    84,    89,    47,   289,
+      86,    85,    82,    41,    85,    55,    85,    82,    17,   299,
+     259,   201,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    83,   302,    87,    92,   217,    83,    92,
+      91,   178,   196,   198,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    89,    40,
+      41,    42,   197,    64,    45,    46,    71,    48,    49,    50,
+      89,    52,     5,   132,    55,    56,    57,    58,    59,    60,
+     260,   261,    63,    64,   264,   265,   256,   261,   217,   300,
+     261,   279,    51,    -1,    -1,    -1,    -1,    -1,    -1,   279,
+      -1,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    92,    93,    94,    -1,    96,   296,    -1,    -1,    -1,
+     300,     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,    -1,    -1,    45,    46,    47,    48,    49,    50,    -1,
+      52,    -1,    -1,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    81,    -1,    -1,    -1,    85,    86,    -1,    -1,    -1,
-      -1,    91,    92,    93,    -1,    95,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    -1,
-      17,    18,    19,    20,    -1,    -1,    -1,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    44,    45,    46,
-      47,    48,    49,    -1,    51,    -1,    -1,    54,    55,    56,
-      57,    58,    59,    -1,    -1,    62,    63,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    81,    -1,    -1,    -1,    85,    -1,
-      -1,    -1,    -1,    -1,    91,    92,    93,    -1,    95,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    -1,    17,    18,    19,    20,    -1,    -1,    -1,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      44,    45,    46,    47,    48,    49,    -1,    51,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    -1,    -1,
-      -1,    85,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
-      -1,    95,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    -1,    17,    18,    19,    20,
-      -1,    -1,    -1,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    -1,    39,    40,
-      41,    -1,    -1,    44,    45,    46,    47,    48,    49,    -1,
-      51,    -1,    -1,    54,    55,    56,    57,    58,    59,    -1,
-      -1,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      91,    92,    93,    -1,    95,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    26,    27,
+      82,    -1,    -1,    -1,    86,    87,    -1,    -1,    -1,    -1,
+      92,    93,    94,    -1,    96,     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,
-      -1,    39,    40,    41,    -1,    -1,    44,    45,    -1,    47,
-      48,    49,    -1,    51,    -1,    -1,    54,    55,    56,    57,
-      58,    59,    -1,    -1,    62,    63,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
-       4,     5,     6,    81,     8,     9,    10,    11,    12,    -1,
-      -1,    -1,    -1,    91,    92,    93,    -1,    95,    -1,    -1,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    -1,    39,    40,    41,    -1,    -1,
-      44,    45,    -1,    47,    48,    49,    -1,    51,    -1,    -1,
-      54,    55,    56,    57,    58,    59,    -1,    -1,    62,    63,
+      38,    -1,    40,    41,    42,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    52,    -1,    -1,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    63,    64,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    10,    11,
-      12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,
-      -1,    95,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    44,    45,    -1,    47,    48,    49,    -1,    51,
-      -1,    -1,    54,    55,    56,    57,    58,    59,    -1,    -1,
-      62,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,
-      10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    91,
-      92,    93,    -1,    95,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    44,    45,    -1,    47,    48,    49,
-      -1,    51,    -1,    -1,    54,    55,    56,    57,    58,    59,
-      -1,    -1,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    92,    93,    94,    -1,    96,     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,    -1,
+      -1,    45,    46,    47,    48,    49,    50,    -1,    52,    -1,
+      -1,    55,    56,    57,    58,    59,    60,    -1,    -1,    63,
+      64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,
+      -1,    -1,    86,    -1,    -1,    -1,    -1,    -1,    92,    93,
+      94,    -1,    96,     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,    -1,    -1,    45,    46,    47,    48,    49,
+      50,    -1,    52,    -1,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    63,    64,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    81,    -1,    -1,    84,    10,    11,    12,    -1,    -1,
-      -1,    -1,    92,    93,    -1,    95,    -1,    -1,    -1,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,
-      45,    -1,    47,    48,    49,    -1,    51,    -1,    -1,    54,
-      55,    56,    57,    58,    59,    -1,    -1,    62,    63,    -1,
+      -1,    -1,    82,    -1,    -1,    -1,    86,    -1,    -1,    -1,
+      -1,    -1,    92,    93,    94,    -1,    96,     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,    -1,    -1,    45,
+      46,    47,    48,    49,    50,    -1,    52,    -1,    -1,    55,
+      56,    57,    58,    59,    60,    -1,    -1,    63,    64,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    81,    10,    11,    12,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    -1,
-      95,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    44,    45,    -1,    47,    48,    49,    -1,    51,    -1,
-      -1,    54,    55,    56,    57,    58,    59,    -1,    -1,    62,
-      63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     4,     5,     6,    -1,    -1,    81,    10,
-      11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    92,
-      93,    -1,    95,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    44,    45,    -1,    47,    48,    49,    -1,
-      51,     4,     5,     6,    55,    -1,    -1,    10,    11,    12,
+      -1,    -1,     3,     4,     5,     6,    82,     8,     9,    10,
+      11,    12,    13,    -1,    -1,    -1,    92,    93,    94,    -1,
+      96,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    -1,    40,
+      41,    42,    -1,    -1,    45,    46,    -1,    48,    49,    50,
+      -1,    52,    -1,    -1,    55,    56,    57,    58,    59,    60,
+      -1,    -1,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    -1,    -1,    86,    -1,    -1,    -1,    -1,
-      -1,    44,    45,    -1,    47,    48,    49,    -1,    51,    -1,
-      -1,    -1,    55,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       0,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    86,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    -1,    39,
-      40,    41,    -1,    -1,    44,    45,    -1,    47,    48,    49,
-      -1,    51,    -1,    -1,    -1,    55,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    26,
+      -1,    82,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,    93,    94,    -1,    96,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
+      48,    49,    50,    -1,    52,    -1,    -1,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    63,    64,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    10,    11,
+      12,    13,    -1,    -1,    -1,    93,    94,    -1,    96,    -1,
+      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    45,    46,    -1,    48,    49,    50,    -1,
+      52,    -1,    -1,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      82,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
+      92,    93,    94,    -1,    96,    -1,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,    48,
+      49,    50,    -1,    52,    -1,    -1,    55,    56,    57,    58,
+      59,    60,    -1,    -1,    63,    64,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    82,    -1,    -1,    85,    10,    11,    12,
+      13,    -1,    -1,    -1,    93,    94,    -1,    96,    -1,    -1,
+      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    45,    46,    -1,    48,    49,    50,    -1,    52,
+      -1,    -1,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
+      93,    94,    -1,    96,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    45,    46,    -1,    48,    49,
+      50,    -1,    52,    -1,    -1,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    63,    64,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,
+      -1,    -1,    82,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,    -1,    -1,    93,    94,    -1,    96,    -1,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    -1,    39,    40,    41,    -1,    -1,    44,    45,    -1,
-      47,    48,    49,    -1,    51,     4,     5,     6,    55,    -1,
-      -1,    10,    11,    12,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    44,    45,    -1,    47,    48,
-      49,    -1,    51,    10,    11,    12,    55,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    44,    45,    -1,
-      47,    48,    49,    -1,    51,    -1,    -1,    54,    55,    10,
-      11,    12,    59,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    44,    45,    -1,    47,    48,    49,    -1,
-      51,    -1,    -1,    -1,    55
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    46,
+      -1,    48,    49,    50,    -1,    52,     4,     5,     6,    56,
+      -1,    -1,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    -1,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
+      48,    49,    50,    -1,    52,    -1,    -1,    -1,    56,    -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,    87,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    -1,    40,    41,    42,    -1,    -1,
+      45,    46,    -1,    48,    49,    50,    -1,    52,    -1,    -1,
+      -1,    56,     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,    -1,    -1,    45,    46,    -1,    48,    49,    50,
+      -1,    52,     4,     5,     6,    56,    -1,    -1,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    45,    46,    -1,    48,    49,    50,    -1,
+      52,    -1,    -1,    -1,    56,    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,    -1,    -1,    -1,
+      45,    46,    -1,    48,    49,    50,    -1,    52,    -1,    -1,
+      55,    56,    -1,    -1,    -1,    60,    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,    -1,    -1,
+      -1,    45,    46,    -1,    48,    49,    50,    -1,    52,    -1,
+      -1,    -1,    56
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1272,37 +1276,37 @@
 static const yytype_uint8 yystos[] =
 {
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    39,    40,    41,    44,    45,
-      47,    48,    49,    51,    55,   135,   136,   137,   138,   139,
-     144,   145,   146,   148,   149,   150,   151,   152,   153,   154,
-     186,   187,   188,    40,    54,   151,    36,    37,    54,    85,
-      91,   189,    82,    88,     9,    36,    37,    38,   141,   142,
-     147,    88,    91,    54,   150,   152,    83,     0,   187,   152,
-      85,   156,    85,   172,   141,   140,   143,   150,   142,    54,
-      81,    83,    90,    54,    56,    57,    58,    59,    62,    63,
-      81,    92,    93,    95,   106,   107,   108,   110,   111,   112,
+      12,    13,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    40,    41,    42,    45,
+      46,    48,    49,    50,    52,    56,   136,   137,   138,   139,
+     140,   145,   146,   147,   149,   150,   151,   152,   153,   154,
+     155,   187,   188,   189,    41,    55,   152,    37,    38,    55,
+      86,    92,   190,    83,    89,     9,    37,    38,    39,   142,
+     143,   148,    89,    92,    55,   151,   153,    84,     0,   188,
+     153,    86,   157,    86,   173,   142,   141,   144,   151,   143,
+      55,    82,    84,    91,    55,    57,    58,    59,    60,    63,
+      64,    82,    93,    94,    96,   107,   108,   109,   111,   112,
      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   134,   153,
-      91,   155,   150,   157,   158,    13,    14,    15,    17,    18,
-      19,    20,    46,    85,    86,    91,   117,   130,   131,   133,
-     135,   136,   153,   162,   163,   164,   165,   173,   174,   175,
-     178,   185,    54,   140,   143,    83,    90,    84,   134,   131,
-     161,   117,   117,   133,    62,    63,    83,    87,    82,    82,
-      88,    45,   131,    81,   117,    96,    97,    93,    95,    64,
-      65,    99,   100,    66,    67,    68,    70,    69,   104,    84,
-     157,    54,   159,   160,    86,   158,    91,    91,   180,    81,
-      81,    91,    91,   133,    81,    86,   166,    71,    72,    73,
-      80,    90,   132,    88,    91,    86,   163,    83,    84,   134,
-     161,    84,    82,   109,   133,    54,    59,   112,   131,   117,
-     117,   119,   119,   121,   121,   121,   121,   122,   122,   126,
-     127,   128,   133,    86,    83,    88,    91,   169,   170,   171,
-     181,   133,    91,   179,   173,   131,   131,   134,    84,    84,
-      89,   134,   160,    46,   172,   164,   162,   174,   182,    82,
-       3,   133,   146,   177,   167,    84,   131,    84,    81,   177,
-     183,   184,   169,   176,    54,    82,    86,   133,    91,    82,
-      16,    90,   164,   168,   172,    82,   133,   168,   169,   161,
-      91
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   135,
+     154,    92,   156,   151,   158,   159,    14,    15,    16,    18,
+      19,    20,    21,    47,    86,    87,    92,   118,   131,   132,
+     134,   136,   137,   154,   163,   164,   165,   166,   174,   175,
+     176,   179,   186,    55,   141,   144,    84,    91,    85,   135,
+     132,   162,   118,   118,   134,    63,    64,    84,    88,    83,
+      83,    89,    46,   132,    82,   118,    97,    98,    94,    96,
+      65,    66,   100,   101,    67,    68,    69,    71,    70,   105,
+      85,   158,    55,   160,   161,    87,   159,    92,    92,   181,
+      82,    82,    92,    92,   134,    82,    87,   167,    72,    73,
+      74,    81,    91,   133,    89,    92,    87,   164,    84,    85,
+     135,   162,    85,    83,   110,   134,    55,    60,   113,   132,
+     118,   118,   120,   120,   122,   122,   122,   122,   123,   123,
+     127,   128,   129,   134,    87,    84,    89,    92,   170,   171,
+     172,   182,   134,    92,   180,   174,   132,   132,   135,    85,
+      85,    90,   135,   161,    47,   173,   165,   163,   175,   183,
+      83,     3,   134,   147,   178,   168,    85,   132,    85,    82,
+     178,   184,   185,   170,   177,    55,    83,    87,   134,    92,
+      83,    17,    91,   165,   169,   173,    83,   134,   169,   170,
+     162,    92
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2164,14 +2168,6 @@
   case 4:
 
     {
-        //
-        // INT_TYPE is only 16-bit plus sign bit for vertex/fragment shaders,
-        // check for overflow for constants
-        //
-        if (abs((yyvsp[(1) - (1)].lex).i) >= (1 << 16)) {
-            context->error((yyvsp[(1) - (1)].lex).line, " integer constant overflow", "");
-            context->recover();
-        }
         ConstantUnion *unionArray = new ConstantUnion[1];
         unionArray->setIConst((yyvsp[(1) - (1)].lex).i);
         (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtInt, EbpUndefined, EvqConst), (yyvsp[(1) - (1)].lex).line);
@@ -3836,7 +3832,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setBasic(EbtUInt, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3844,8 +3840,7 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
@@ -3854,7 +3849,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3863,7 +3858,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
@@ -3871,8 +3866,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtFloat, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
     }
     break;
 
@@ -3881,7 +3876,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3890,7 +3885,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
@@ -3898,8 +3893,8 @@
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
-        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(2);
+        (yyval.interm.type).setBasic(EbtBool, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
     }
     break;
 
@@ -3908,7 +3903,7 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(3);
+        (yyval.interm.type).setAggregate(2);
     }
     break;
 
@@ -3917,13 +3912,22 @@
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
         (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
-        (yyval.interm.type).setAggregate(4);
+        (yyval.interm.type).setAggregate(3);
     }
     break;
 
   case 135:
 
     {
+        TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
+        (yyval.interm.type).setBasic(EbtInt, qual, (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm.type).setAggregate(4);
+    }
+    break;
+
+  case 136:
+
+    {
         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);
@@ -3931,7 +3935,7 @@
     }
     break;
 
-  case 136:
+  case 137:
 
     {
         FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
@@ -3941,7 +3945,7 @@
     }
     break;
 
-  case 137:
+  case 138:
 
     {
         FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
@@ -3951,7 +3955,7 @@
     }
     break;
 
-  case 138:
+  case 139:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -3960,7 +3964,7 @@
     }
     break;
 
-  case 139:
+  case 140:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -3969,7 +3973,7 @@
     }
     break;
 
-  case 140:
+  case 141:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -3982,7 +3986,7 @@
     }
     break;
 
-  case 141:
+  case 142:
 
     {
         FRAG_VERT_ONLY("sampler3D", (yyvsp[(1) - (1)].lex).line);
@@ -3991,7 +3995,7 @@
     }
     break;
 
-  case 142:
+  case 143:
 
     {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
@@ -4000,7 +4004,7 @@
     }
     break;
 
-  case 143:
+  case 144:
 
     {
         //
@@ -4014,12 +4018,12 @@
     }
     break;
 
-  case 144:
+  case 145:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (3)].lex).line, *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 145:
+  case 146:
 
     {
         if (context->reservedErrorCheck((yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string))
@@ -4037,12 +4041,12 @@
     }
     break;
 
-  case 146:
+  case 147:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 147:
+  case 148:
 
     {
         TType* structure = new TType((yyvsp[(4) - (5)].interm.typeList), TString(""));
@@ -4052,14 +4056,14 @@
     }
     break;
 
-  case 148:
+  case 149:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
     }
     break;
 
-  case 149:
+  case 150:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
@@ -4075,7 +4079,7 @@
     }
     break;
 
-  case 150:
+  case 151:
 
     {
         (yyval.interm.typeList) = (yyvsp[(2) - (3)].interm.typeList);
@@ -4108,7 +4112,7 @@
     }
     break;
 
-  case 151:
+  case 152:
 
     {
         (yyval.interm.typeList) = NewPoolTTypeList();
@@ -4116,14 +4120,14 @@
     }
     break;
 
-  case 152:
+  case 153:
 
     {
         (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
     }
     break;
 
-  case 153:
+  case 154:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
@@ -4135,7 +4139,7 @@
     }
     break;
 
-  case 154:
+  case 155:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4152,24 +4156,19 @@
     }
     break;
 
-  case 155:
+  case 156:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 156:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
   case 157:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 158:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
   case 159:
@@ -4199,21 +4198,26 @@
 
   case 164:
 
-    { (yyval.interm.intermAggregate) = 0; }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 165:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermAggregate) = 0; }
     break;
 
   case 166:
 
-    { context->symbolTable.pop(); }
+    { context->symbolTable.push(); }
     break;
 
   case 167:
 
+    { context->symbolTable.pop(); }
+    break;
+
+  case 168:
+
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
             (yyvsp[(3) - (5)].interm.intermAggregate)->setOp(EOpSequence);
@@ -4223,11 +4227,6 @@
     }
     break;
 
-  case 168:
-
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
-    break;
-
   case 169:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
@@ -4235,32 +4234,37 @@
 
   case 170:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 171:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    { context->symbolTable.push(); }
     break;
 
   case 172:
 
-    { context->symbolTable.push(); }
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
   case 173:
 
-    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    { context->symbolTable.push(); }
     break;
 
   case 174:
 
+    { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
+    break;
+
+  case 175:
+
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 175:
+  case 176:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4271,31 +4275,31 @@
     }
     break;
 
-  case 176:
+  case 177:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     }
     break;
 
-  case 177:
+  case 178:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     }
     break;
 
-  case 178:
+  case 179:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 179:
+  case 180:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 180:
+  case 181:
 
     {
         if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4304,7 +4308,7 @@
     }
     break;
 
-  case 181:
+  case 182:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4312,7 +4316,7 @@
     }
     break;
 
-  case 182:
+  case 183:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4320,7 +4324,7 @@
     }
     break;
 
-  case 183:
+  case 184:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4329,7 +4333,7 @@
     }
     break;
 
-  case 184:
+  case 185:
 
     {
         TIntermNode* intermNode;
@@ -4347,12 +4351,12 @@
     }
     break;
 
-  case 185:
+  case 186:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 186:
+  case 187:
 
     {
         context->symbolTable.pop();
@@ -4361,12 +4365,12 @@
     }
     break;
 
-  case 187:
+  case 188:
 
     { ++context->loopNestingLevel; }
     break;
 
-  case 188:
+  case 189:
 
     {
         if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4377,24 +4381,17 @@
     }
     break;
 
-  case 189:
-
-    { context->symbolTable.push(); ++context->loopNestingLevel; }
-    break;
-
   case 190:
 
-    {
-        context->symbolTable.pop();
-        (yyval.interm.intermNode) = context->intermediate.addLoop(ELoopFor, (yyvsp[(4) - (7)].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node2), (yyvsp[(7) - (7)].interm.intermNode), (yyvsp[(1) - (7)].lex).line);
-        --context->loopNestingLevel;
-    }
+    { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
   case 191:
 
     {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+        context->symbolTable.pop();
+        (yyval.interm.intermNode) = context->intermediate.addLoop(ELoopFor, (yyvsp[(4) - (7)].interm.intermNode), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node1), reinterpret_cast<TIntermTyped*>((yyvsp[(5) - (7)].interm.nodePair).node2), (yyvsp[(7) - (7)].interm.intermNode), (yyvsp[(1) - (7)].lex).line);
+        --context->loopNestingLevel;
     }
     break;
 
@@ -4408,26 +4405,33 @@
   case 193:
 
     {
-        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
   case 194:
 
     {
-        (yyval.interm.intermTypedNode) = 0;
+        (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
   case 195:
 
     {
+        (yyval.interm.intermTypedNode) = 0;
+    }
+    break;
+
+  case 196:
+
+    {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
     break;
 
-  case 196:
+  case 197:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4435,7 +4439,7 @@
     }
     break;
 
-  case 197:
+  case 198:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4446,7 +4450,7 @@
     }
     break;
 
-  case 198:
+  case 199:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4457,7 +4461,7 @@
     }
     break;
 
-  case 199:
+  case 200:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4468,7 +4472,7 @@
     }
     break;
 
-  case 200:
+  case 201:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4483,7 +4487,7 @@
     }
     break;
 
-  case 201:
+  case 202:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4491,18 +4495,10 @@
     }
     break;
 
-  case 202:
-
-    {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
-        context->treeRoot = (yyval.interm.intermNode);
-    }
-    break;
-
   case 203:
 
     {
-        (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
         context->treeRoot = (yyval.interm.intermNode);
     }
     break;
@@ -4510,7 +4506,8 @@
   case 204:
 
     {
-        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+        (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
+        context->treeRoot = (yyval.interm.intermNode);
     }
     break;
 
@@ -4524,6 +4521,13 @@
   case 206:
 
     {
+        (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
+    }
+    break;
+
+  case 207:
+
+    {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
         
         const TSymbol *builtIn = context->symbolTable.findBuiltIn(function->getMangledName());
@@ -4610,7 +4614,7 @@
     }
     break;
 
-  case 207:
+  case 208:
 
     {
         //?? Check that all paths return a value if return type != void ?
@@ -4855,4 +4859,3 @@
     return yyparse(context);
 }
 
-
diff --git a/src/OpenGL/compiler/glslang_tab.h b/src/OpenGL/compiler/glslang_tab.h
index 0ae6d96..f74bc36 100644
--- a/src/OpenGL/compiler/glslang_tab.h
+++ b/src/OpenGL/compiler/glslang_tab.h
@@ -49,98 +49,99 @@
      BOOL_TYPE = 265,
      FLOAT_TYPE = 266,
      INT_TYPE = 267,
-     BREAK = 268,
-     CONTINUE = 269,
-     DO = 270,
-     ELSE = 271,
-     FOR = 272,
-     IF = 273,
-     DISCARD = 274,
-     RETURN = 275,
-     SWITCH = 276,
-     CASE = 277,
-     DEFAULT = 278,
-     BVEC2 = 279,
-     BVEC3 = 280,
-     BVEC4 = 281,
-     IVEC2 = 282,
-     IVEC3 = 283,
-     IVEC4 = 284,
-     VEC2 = 285,
-     VEC3 = 286,
-     VEC4 = 287,
-     MATRIX2 = 288,
-     MATRIX3 = 289,
-     MATRIX4 = 290,
-     IN_QUAL = 291,
-     OUT_QUAL = 292,
-     INOUT_QUAL = 293,
-     UNIFORM = 294,
-     VARYING = 295,
-     CENTROID = 296,
-     FLAT = 297,
-     SMOOTH = 298,
-     STRUCT = 299,
-     VOID_TYPE = 300,
-     WHILE = 301,
-     SAMPLER2D = 302,
-     SAMPLERCUBE = 303,
-     SAMPLER_EXTERNAL_OES = 304,
-     SAMPLER2DRECT = 305,
-     SAMPLER3D = 306,
-     SAMPLER3DRECT = 307,
-     SAMPLER2DSHADOW = 308,
-     IDENTIFIER = 309,
-     TYPE_NAME = 310,
-     FLOATCONSTANT = 311,
-     INTCONSTANT = 312,
-     BOOLCONSTANT = 313,
-     FIELD_SELECTION = 314,
-     LEFT_OP = 315,
-     RIGHT_OP = 316,
-     INC_OP = 317,
-     DEC_OP = 318,
-     LE_OP = 319,
-     GE_OP = 320,
-     EQ_OP = 321,
-     NE_OP = 322,
-     AND_OP = 323,
-     OR_OP = 324,
-     XOR_OP = 325,
-     MUL_ASSIGN = 326,
-     DIV_ASSIGN = 327,
-     ADD_ASSIGN = 328,
-     MOD_ASSIGN = 329,
-     LEFT_ASSIGN = 330,
-     RIGHT_ASSIGN = 331,
-     AND_ASSIGN = 332,
-     XOR_ASSIGN = 333,
-     OR_ASSIGN = 334,
-     SUB_ASSIGN = 335,
-     LEFT_PAREN = 336,
-     RIGHT_PAREN = 337,
-     LEFT_BRACKET = 338,
-     RIGHT_BRACKET = 339,
-     LEFT_BRACE = 340,
-     RIGHT_BRACE = 341,
-     DOT = 342,
-     COMMA = 343,
-     COLON = 344,
-     EQUAL = 345,
-     SEMICOLON = 346,
-     BANG = 347,
-     DASH = 348,
-     TILDE = 349,
-     PLUS = 350,
-     STAR = 351,
-     SLASH = 352,
-     PERCENT = 353,
-     LEFT_ANGLE = 354,
-     RIGHT_ANGLE = 355,
-     VERTICAL_BAR = 356,
-     CARET = 357,
-     AMPERSAND = 358,
-     QUESTION = 359
+     UINT_TYPE = 268,
+     BREAK = 269,
+     CONTINUE = 270,
+     DO = 271,
+     ELSE = 272,
+     FOR = 273,
+     IF = 274,
+     DISCARD = 275,
+     RETURN = 276,
+     SWITCH = 277,
+     CASE = 278,
+     DEFAULT = 279,
+     BVEC2 = 280,
+     BVEC3 = 281,
+     BVEC4 = 282,
+     IVEC2 = 283,
+     IVEC3 = 284,
+     IVEC4 = 285,
+     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,
+     CENTROID = 297,
+     FLAT = 298,
+     SMOOTH = 299,
+     STRUCT = 300,
+     VOID_TYPE = 301,
+     WHILE = 302,
+     SAMPLER2D = 303,
+     SAMPLERCUBE = 304,
+     SAMPLER_EXTERNAL_OES = 305,
+     SAMPLER2DRECT = 306,
+     SAMPLER3D = 307,
+     SAMPLER3DRECT = 308,
+     SAMPLER2DSHADOW = 309,
+     IDENTIFIER = 310,
+     TYPE_NAME = 311,
+     FLOATCONSTANT = 312,
+     INTCONSTANT = 313,
+     BOOLCONSTANT = 314,
+     FIELD_SELECTION = 315,
+     LEFT_OP = 316,
+     RIGHT_OP = 317,
+     INC_OP = 318,
+     DEC_OP = 319,
+     LE_OP = 320,
+     GE_OP = 321,
+     EQ_OP = 322,
+     NE_OP = 323,
+     AND_OP = 324,
+     OR_OP = 325,
+     XOR_OP = 326,
+     MUL_ASSIGN = 327,
+     DIV_ASSIGN = 328,
+     ADD_ASSIGN = 329,
+     MOD_ASSIGN = 330,
+     LEFT_ASSIGN = 331,
+     RIGHT_ASSIGN = 332,
+     AND_ASSIGN = 333,
+     XOR_ASSIGN = 334,
+     OR_ASSIGN = 335,
+     SUB_ASSIGN = 336,
+     LEFT_PAREN = 337,
+     RIGHT_PAREN = 338,
+     LEFT_BRACKET = 339,
+     RIGHT_BRACKET = 340,
+     LEFT_BRACE = 341,
+     RIGHT_BRACE = 342,
+     DOT = 343,
+     COMMA = 344,
+     COLON = 345,
+     EQUAL = 346,
+     SEMICOLON = 347,
+     BANG = 348,
+     DASH = 349,
+     TILDE = 350,
+     PLUS = 351,
+     STAR = 352,
+     SLASH = 353,
+     PERCENT = 354,
+     LEFT_ANGLE = 355,
+     RIGHT_ANGLE = 356,
+     VERTICAL_BAR = 357,
+     CARET = 358,
+     AMPERSAND = 359,
+     QUESTION = 360
    };
 #endif
 
diff --git a/src/OpenGL/compiler/intermOut.cpp b/src/OpenGL/compiler/intermOut.cpp
index c88564b..2892830 100644
--- a/src/OpenGL/compiler/intermOut.cpp
+++ b/src/OpenGL/compiler/intermOut.cpp
@@ -223,6 +223,7 @@
         case EOpConstructIVec2: out << "Construct ivec2"; break;
         case EOpConstructIVec3: out << "Construct ivec3"; break;
         case EOpConstructIVec4: out << "Construct ivec4"; break;
+        case EOpConstructUInt:  out << "Construct uint";   break;
         case EOpConstructMat2:  out << "Construct mat2";  break;
         case EOpConstructMat3:  out << "Construct mat3";  break;
         case EOpConstructMat4:  out << "Construct mat4";  break;
@@ -325,6 +326,10 @@
                 out << node->getUnionArrayPointer()[i].getIConst();
                 out << " (const int)\n";
                 break;
+            case EbtUInt:
+                out << node->getUnionArrayPointer()[i].getUConst();
+                out << " (const uint)\n";
+                break;
             default:
                 out.message(EPrefixInternalError, "Unknown constant", node->getLine());
                 break;
diff --git a/src/OpenGL/compiler/intermediate.h b/src/OpenGL/compiler/intermediate.h
index e20676a..926ae25 100644
--- a/src/OpenGL/compiler/intermediate.h
+++ b/src/OpenGL/compiler/intermediate.h
@@ -145,6 +145,7 @@
     //
 
     EOpConstructInt,
+    EOpConstructUInt,
     EOpConstructBool,
     EOpConstructFloat,
     EOpConstructVec2,
@@ -248,6 +249,7 @@
     bool isArray()  const { return type.isArray(); }
     bool isVector() const { return type.isVector(); }
     bool isScalar() const { return type.isScalar(); }
+    bool isScalarInt() const { return type.isScalarInt(); }
 	bool isRegister() const { return type.isRegister(); }   // Fits in a 4-element register
 	bool isStruct() const { return type.isStruct(); }
     const char* getBasicString() const { return type.getBasicString(); }
@@ -356,6 +358,7 @@
     ConstantUnion* getUnionArrayPointer() const { return unionArrayPointer; }
     
     int getIConst(int index) const { return unionArrayPointer ? unionArrayPointer[index].getIConst() : 0; }
+    int getUConst(int index) const { return unionArrayPointer ? unionArrayPointer[index].getUConst() : 0; }
     float getFConst(int index) const { return unionArrayPointer ? unionArrayPointer[index].getFConst() : 0.0f; }
     bool getBConst(int index) const { return unionArrayPointer ? unionArrayPointer[index].getBConst() : false; }