OSDN Git Service

Adding bitwise operators to parser
authorAlexis Hetu <sugoi@google.com>
Wed, 13 May 2015 15:28:22 +0000 (11:28 -0400)
committerAlexis Hétu <sugoi@google.com>
Wed, 13 May 2015 16:44:26 +0000 (16:44 +0000)
Added ~, %, &, |, ^, <<, >>,
      %=, &=, |=, ^=, <<=, >>=
to the parser and related enums.

Change-Id: Ic95b2362ec3a066ea5285b195bdcda9b6853fd3f
Reviewed-on: https://swiftshader-review.googlesource.com/3120
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Alexis Hétu <sugoi@google.com>
src/OpenGL/compiler/Intermediate.cpp
src/OpenGL/compiler/glslang.y
src/OpenGL/compiler/glslang_tab.cpp
src/OpenGL/compiler/intermOut.cpp
src/OpenGL/compiler/intermediate.h

index 0ebab3a..7f056fb 100644 (file)
@@ -28,6 +28,12 @@ const char* getOperatorString(TOperator op) {
       case EOpAddAssign: return "+=";
       case EOpSubAssign: return "-=";
       case EOpDivAssign: return "/=";
+      case EOpIModAssign: return "%=";
+      case EOpBitShiftLeftAssign: return "<<=";
+      case EOpBitShiftRightAssign: return ">>=";
+      case EOpBitwiseAndAssign: return "&=";
+      case EOpBitwiseXorAssign: return "^=";
+      case EOpBitwiseOrAssign: return "|=";
 
       // Fall-through.
       case EOpMulAssign:
@@ -64,9 +70,16 @@ const char* getOperatorString(TOperator op) {
       case EOpLogicalOr: return "||";
       case EOpLogicalXor: return "^^";
       case EOpLogicalAnd: return "&&";
+      case EOpIMod: return "%";
+      case EOpBitShiftLeft: return "<<";
+      case EOpBitShiftRight: return ">>";
+      case EOpBitwiseAnd: return "&";
+      case EOpBitwiseXor: return "^";
+      case EOpBitwiseOr: return "|";
       case EOpNegative: return "-";
       case EOpVectorLogicalNot: return "not";
       case EOpLogicalNot: return "!";
+      case EOpBitwiseNot: return "~";
       case EOpPostIncrement: return "++";
       case EOpPostDecrement: return "--";
       case EOpPreIncrement: return "++";
@@ -589,6 +602,12 @@ bool TIntermOperator::modifiesState() const
         case EOpMatrixTimesScalarAssign:
         case EOpMatrixTimesMatrixAssign:
         case EOpDivAssign:
+        case EOpIModAssign:
+        case EOpBitShiftLeftAssign:
+        case EOpBitShiftRightAssign:
+        case EOpBitwiseAndAssign:
+        case EOpBitwiseXorAssign:
+        case EOpBitwiseOrAssign:
             return true;
         default:
             return false;
@@ -836,6 +855,12 @@ bool TIntermBinary::promote(TInfoSink& infoSink)
         case EOpAddAssign:
         case EOpSubAssign:
         case EOpDivAssign:
+        case EOpIModAssign:
+        case EOpBitShiftLeftAssign:
+        case EOpBitShiftRightAssign:
+        case EOpBitwiseAndAssign:
+        case EOpBitwiseXorAssign:
+        case EOpBitwiseOrAssign:
             if ((left->isMatrix() && right->isVector()) ||
                 (left->isVector() && right->isMatrix()))
                 return false;
index 11fd123..9fba3a7 100644 (file)
@@ -765,6 +765,10 @@ unary_operator
     : PLUS  { $$.line = $1.line; $$.op = EOpNull; }
     | DASH  { $$.line = $1.line; $$.op = EOpNegative; }
     | BANG  { $$.line = $1.line; $$.op = EOpLogicalNot; }
+    | TILDE {
+        ES3_ONLY("~", $1.line);
+        $$.line = $1.line; $$.op = EOpBitwiseNot;
+    }
     ;
 // Grammar Note:  No '*' or '&' unary ops.  Pointers are not supported.
 
@@ -788,6 +792,16 @@ multiplicative_expression
             $$ = $1;
         }
     }
+    | multiplicative_expression PERCENT unary_expression {
+        FRAG_VERT_ONLY("%", $2.line);
+        ES3_ONLY("%", $2.line);
+        $$ = context->intermediate.addBinaryMath(EOpIMod, $1, $3, $2.line);
+        if ($$ == 0) {
+            context->binaryOpError($2.line, "%", $1->getCompleteString(), $3->getCompleteString());
+            context->recover();
+            $$ = $1;
+        }
+    }
     ;
 
 additive_expression
@@ -812,6 +826,24 @@ additive_expression
 
 shift_expression
     : additive_expression { $$ = $1; }
+    | shift_expression LEFT_OP additive_expression {
+        ES3_ONLY("<<", $2.line);
+        context->intermediate.addBinaryMath(EOpBitShiftLeft, $1, $3, $2.line);
+        if ($$ == 0) {
+            context->binaryOpError($2.line, "<<", $1->getCompleteString(), $3->getCompleteString());
+            context->recover();
+            $$ = $1;
+        }
+    }
+    | shift_expression RIGHT_OP additive_expression {
+        ES3_ONLY(">>", $2.line);
+        context->intermediate.addBinaryMath(EOpBitShiftRight, $1, $3, $2.line);
+        if ($$ == 0) {
+            context->binaryOpError($2.line, ">>", $1->getCompleteString(), $3->getCompleteString());
+            context->recover();
+            $$ = $1;
+        }
+    }
     ;
 
 relational_expression
@@ -884,14 +916,47 @@ equality_expression
 
 and_expression
     : equality_expression { $$ = $1; }
+    | and_expression AMPERSAND equality_expression {
+        ES3_ONLY("&", $2.line);
+        $$ = context->intermediate.addBinaryMath(EOpBitwiseAnd, $1, $3, $2.line);
+        if ($$ == 0) {
+            context->binaryOpError($2.line, "&", $1->getCompleteString(), $3->getCompleteString());
+            context->recover();
+            ConstantUnion *unionArray = new ConstantUnion[1];
+            unionArray->setBConst(false);
+            $$ = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConstExpr), $2.line);
+        }
+    }
     ;
 
 exclusive_or_expression
     : and_expression { $$ = $1; }
+    | exclusive_or_expression CARET and_expression {
+        ES3_ONLY("^", $2.line);
+        $$ = context->intermediate.addBinaryMath(EOpBitwiseXor, $1, $3, $2.line);
+        if ($$ == 0) {
+            context->binaryOpError($2.line, "^", $1->getCompleteString(), $3->getCompleteString());
+            context->recover();
+            ConstantUnion *unionArray = new ConstantUnion[1];
+            unionArray->setBConst(false);
+            $$ = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConstExpr), $2.line);
+        }
+    }
     ;
 
 inclusive_or_expression
     : exclusive_or_expression { $$ = $1; }
+    | inclusive_or_expression VERTICAL_BAR exclusive_or_expression {
+        ES3_ONLY("|", $2.line);
+        $$ = context->intermediate.addBinaryMath(EOpBitwiseOr, $1, $3, $2.line);
+        if ($$ == 0) {
+            context->binaryOpError($2.line, "|", $1->getCompleteString(), $3->getCompleteString());
+            context->recover();
+            ConstantUnion *unionArray = new ConstantUnion[1];
+            unionArray->setBConst(false);
+            $$ = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConstExpr), $2.line);
+        }
+    }
     ;
 
 logical_and_expression
@@ -972,8 +1037,20 @@ assignment_operator
     : EQUAL        {                                    $$.line = $1.line; $$.op = EOpAssign; }
     | MUL_ASSIGN   { FRAG_VERT_ONLY("*=", $1.line);     $$.line = $1.line; $$.op = EOpMulAssign; }
     | DIV_ASSIGN   { FRAG_VERT_ONLY("/=", $1.line);     $$.line = $1.line; $$.op = EOpDivAssign; }
+    | MOD_ASSIGN   { ES3_ONLY("%=", $1.line); 
+                     FRAG_VERT_ONLY("%=", $1.line);     $$.line = $1.line; $$.op = EOpIModAssign; }
     | ADD_ASSIGN   {                                    $$.line = $1.line; $$.op = EOpAddAssign; }
     | SUB_ASSIGN   {                                    $$.line = $1.line; $$.op = EOpSubAssign; }
+    | LEFT_ASSIGN  { ES3_ONLY("<<=", $1.line);
+                     FRAG_VERT_ONLY("<<=", $1.line);    $$.line = $1.line; $$.op = EOpBitShiftLeftAssign; }
+    | RIGHT_ASSIGN { ES3_ONLY(">>=", $1.line);
+                     FRAG_VERT_ONLY(">>=", $1.line);    $$.line = $1.line; $$.op = EOpBitShiftRightAssign; }
+    | AND_ASSIGN   { ES3_ONLY("&=", $1.line);
+                     FRAG_VERT_ONLY("&=", $1.line);     $$.line = $1.line; $$.op = EOpBitwiseAndAssign; }
+    | XOR_ASSIGN   { ES3_ONLY("^=", $1.line);
+                     FRAG_VERT_ONLY("^=", $1.line);     $$.line = $1.line; $$.op = EOpBitwiseXorAssign; }
+    | OR_ASSIGN    { ES3_ONLY("|=", $1.line);
+                     FRAG_VERT_ONLY("|=", $1.line);     $$.line = $1.line; $$.op = EOpBitwiseOrAssign; }
     ;
 
 expression
index 2b0f042..d73a1f4 100644 (file)
@@ -556,16 +556,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  107
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2024
+#define YYLAST   2056
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  128
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  89
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  242
+#define YYNRULES  255
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  351
+#define YYNSTATES  370
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -626,28 +626,29 @@ static const yytype_uint16 yyprhs[] =
        0,     0,     3,     5,     7,     9,    11,    13,    15,    19,
       21,    26,    28,    32,    35,    38,    40,    42,    44,    48,
       51,    54,    57,    59,    62,    66,    69,    71,    73,    75,
-      77,    80,    83,    86,    88,    90,    92,    94,    98,   102,
-     104,   108,   112,   114,   116,   120,   124,   128,   132,   134,
-     138,   142,   144,   146,   148,   150,   154,   156,   160,   162,
-     166,   168,   174,   176,   180,   182,   184,   186,   188,   190,
-     192,   196,   198,   201,   204,   209,   212,   214,   216,   219,
-     223,   227,   230,   236,   240,   243,   247,   250,   251,   253,
-     255,   257,   259,   261,   265,   271,   278,   284,   286,   289,
-     294,   300,   305,   308,   310,   313,   315,   317,   319,   321,
-     323,   326,   328,   331,   333,   335,   338,   340,   342,   344,
-     347,   350,   352,   354,   357,   359,   361,   363,   368,   370,
-     374,   376,   380,   384,   386,   391,   393,   395,   397,   399,
-     401,   403,   405,   407,   409,   411,   413,   415,   417,   419,
-     421,   423,   425,   427,   429,   431,   433,   435,   437,   439,
-     441,   443,   445,   447,   449,   451,   453,   455,   457,   459,
-     461,   463,   465,   467,   469,   471,   473,   475,   477,   479,
-     480,   487,   488,   494,   496,   499,   503,   505,   509,   511,
-     516,   518,   520,   522,   524,   526,   528,   530,   532,   534,
-     537,   538,   539,   545,   547,   549,   550,   553,   554,   557,
-     560,   564,   566,   569,   571,   574,   580,   584,   586,   588,
-     593,   594,   601,   602,   611,   612,   620,   622,   624,   626,
-     627,   630,   634,   637,   640,   643,   647,   650,   652,   655,
-     657,   659,   660
+      77,    80,    83,    86,    88,    90,    92,    94,    96,   100,
+     104,   108,   110,   114,   118,   120,   124,   128,   130,   134,
+     138,   142,   146,   148,   152,   156,   158,   162,   164,   168,
+     170,   174,   176,   180,   182,   186,   188,   192,   194,   200,
+     202,   206,   208,   210,   212,   214,   216,   218,   220,   222,
+     224,   226,   228,   230,   234,   236,   239,   242,   247,   250,
+     252,   254,   257,   261,   265,   268,   274,   278,   281,   285,
+     288,   289,   291,   293,   295,   297,   299,   303,   309,   316,
+     322,   324,   327,   332,   338,   343,   346,   348,   351,   353,
+     355,   357,   359,   361,   364,   366,   369,   371,   373,   376,
+     378,   380,   382,   385,   388,   390,   392,   395,   397,   399,
+     401,   406,   408,   412,   414,   418,   422,   424,   429,   431,
+     433,   435,   437,   439,   441,   443,   445,   447,   449,   451,
+     453,   455,   457,   459,   461,   463,   465,   467,   469,   471,
+     473,   475,   477,   479,   481,   483,   485,   487,   489,   491,
+     493,   495,   497,   499,   501,   503,   505,   507,   509,   511,
+     513,   515,   517,   518,   525,   526,   532,   534,   537,   541,
+     543,   547,   549,   554,   556,   558,   560,   562,   564,   566,
+     568,   570,   572,   575,   576,   577,   583,   585,   587,   588,
+     591,   592,   595,   598,   602,   604,   607,   609,   612,   618,
+     622,   624,   626,   631,   632,   639,   640,   649,   650,   658,
+     660,   662,   664,   665,   668,   672,   675,   678,   681,   685,
+     688,   690,   693,   695,   697,   698
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -662,64 +663,68 @@ static const yytype_int16 yyrhs[] =
      154,    -1,   137,   111,   154,    -1,   139,   104,    -1,   180,
       -1,    76,    -1,    82,    -1,   131,    -1,    85,   140,    -1,
       86,   140,    -1,   141,   140,    -1,   118,    -1,   116,    -1,
-     115,    -1,   140,    -1,   142,   119,   140,    -1,   142,   120,
-     140,    -1,   142,    -1,   143,   118,   142,    -1,   143,   116,
-     142,    -1,   143,    -1,   144,    -1,   145,   122,   144,    -1,
-     145,   123,   144,    -1,   145,    87,   144,    -1,   145,    88,
-     144,    -1,   145,    -1,   146,    89,   145,    -1,   146,    90,
-     145,    -1,   146,    -1,   147,    -1,   148,    -1,   149,    -1,
-     150,    91,   149,    -1,   150,    -1,   151,    93,   150,    -1,
-     151,    -1,   152,    92,   151,    -1,   152,    -1,   152,   127,
-     156,   112,   154,    -1,   153,    -1,   140,   155,   154,    -1,
-     113,    -1,    94,    -1,    95,    -1,    96,    -1,   103,    -1,
-     154,    -1,   156,   111,   154,    -1,   153,    -1,   159,   114,
-      -1,   167,   114,    -1,     7,   175,   179,   114,    -1,   160,
-     105,    -1,   162,    -1,   161,    -1,   162,   164,    -1,   161,
-     111,   164,    -1,   169,    76,   104,    -1,   174,    76,    -1,
-     174,    76,   106,   157,   107,    -1,   171,   165,   163,    -1,
-     165,   163,    -1,   171,   165,   166,    -1,   165,   166,    -1,
-      -1,    40,    -1,    41,    -1,    42,    -1,   174,    -1,   168,
-      -1,   167,   111,    76,    -1,   167,   111,    76,   106,   107,
-      -1,   167,   111,    76,   106,   157,   107,    -1,   167,   111,
-      76,   113,   188,    -1,   169,    -1,   169,    76,    -1,   169,
-      76,   106,   107,    -1,   169,    76,   106,   157,   107,    -1,
-     169,    76,   113,   188,    -1,     3,    76,    -1,   174,    -1,
-     172,   174,    -1,    53,    -1,    52,    -1,     9,    -1,     8,
-      -1,    44,    -1,     3,    44,    -1,   173,    -1,   170,   173,
-      -1,   170,    -1,   176,    -1,   176,   173,    -1,     9,    -1,
-      40,    -1,    41,    -1,    51,    40,    -1,    51,    41,    -1,
-      43,    -1,   179,    -1,   175,   179,    -1,     4,    -1,     5,
-      -1,     6,    -1,    75,   104,   177,   105,    -1,   178,    -1,
-     177,   111,   178,    -1,    76,    -1,    76,   113,    79,    -1,
-      76,   113,    80,    -1,   180,    -1,   180,   106,   157,   107,
-      -1,    55,    -1,    11,    -1,    12,    -1,    13,    -1,    10,
-      -1,    31,    -1,    32,    -1,    33,    -1,    25,    -1,    26,
-      -1,    27,    -1,    28,    -1,    29,    -1,    30,    -1,    34,
-      -1,    35,    -1,    36,    -1,    37,    -1,    38,    -1,    39,
-      -1,    45,    -1,    46,    -1,    47,    -1,    48,    -1,    49,
-      -1,    50,    -1,    57,    -1,    58,    -1,    59,    -1,    70,
-      -1,    61,    -1,    62,    -1,    63,    -1,    64,    -1,    65,
-      -1,    66,    -1,    67,    -1,    68,    -1,    69,    -1,    72,
-      -1,    73,    -1,    74,    -1,   181,    -1,    77,    -1,    -1,
-      54,    76,   108,   182,   184,   109,    -1,    -1,    54,   108,
-     183,   184,   109,    -1,   185,    -1,   184,   185,    -1,   174,
-     186,   114,    -1,   187,    -1,   186,   111,   187,    -1,    76,
-      -1,    76,   106,   157,   107,    -1,   154,    -1,   158,    -1,
-     192,    -1,   191,    -1,   189,    -1,   201,    -1,   202,    -1,
-     205,    -1,   212,    -1,   108,   109,    -1,    -1,    -1,   108,
-     193,   200,   194,   109,    -1,   199,    -1,   191,    -1,    -1,
-     197,   199,    -1,    -1,   198,   191,    -1,   108,   109,    -1,
-     108,   200,   109,    -1,   190,    -1,   200,   190,    -1,   114,
-      -1,   156,   114,    -1,    19,   104,   156,   105,   203,    -1,
-     196,    17,   196,    -1,   196,    -1,   156,    -1,   169,    76,
-     113,   188,    -1,    -1,    56,   104,   206,   204,   105,   195,
-      -1,    -1,    16,   207,   196,    56,   104,   156,   105,   114,
-      -1,    -1,    18,   104,   208,   209,   211,   105,   195,    -1,
-     201,    -1,   189,    -1,   204,    -1,    -1,   210,   114,    -1,
-     210,   114,   156,    -1,    15,   114,    -1,    14,   114,    -1,
-      21,   114,    -1,    21,   156,   114,    -1,    20,   114,    -1,
-     214,    -1,   213,   214,    -1,   215,    -1,   158,    -1,    -1,
-     159,   216,   199,    -1
+     115,    -1,   117,    -1,   140,    -1,   142,   119,   140,    -1,
+     142,   120,   140,    -1,   142,   121,   140,    -1,   142,    -1,
+     143,   118,   142,    -1,   143,   116,   142,    -1,   143,    -1,
+     144,    83,   143,    -1,   144,    84,   143,    -1,   144,    -1,
+     145,   122,   144,    -1,   145,   123,   144,    -1,   145,    87,
+     144,    -1,   145,    88,   144,    -1,   145,    -1,   146,    89,
+     145,    -1,   146,    90,   145,    -1,   146,    -1,   147,   126,
+     146,    -1,   147,    -1,   148,   125,   147,    -1,   148,    -1,
+     149,   124,   148,    -1,   149,    -1,   150,    91,   149,    -1,
+     150,    -1,   151,    93,   150,    -1,   151,    -1,   152,    92,
+     151,    -1,   152,    -1,   152,   127,   156,   112,   154,    -1,
+     153,    -1,   140,   155,   154,    -1,   113,    -1,    94,    -1,
+      95,    -1,    97,    -1,    96,    -1,   103,    -1,    98,    -1,
+      99,    -1,   100,    -1,   101,    -1,   102,    -1,   154,    -1,
+     156,   111,   154,    -1,   153,    -1,   159,   114,    -1,   167,
+     114,    -1,     7,   175,   179,   114,    -1,   160,   105,    -1,
+     162,    -1,   161,    -1,   162,   164,    -1,   161,   111,   164,
+      -1,   169,    76,   104,    -1,   174,    76,    -1,   174,    76,
+     106,   157,   107,    -1,   171,   165,   163,    -1,   165,   163,
+      -1,   171,   165,   166,    -1,   165,   166,    -1,    -1,    40,
+      -1,    41,    -1,    42,    -1,   174,    -1,   168,    -1,   167,
+     111,    76,    -1,   167,   111,    76,   106,   107,    -1,   167,
+     111,    76,   106,   157,   107,    -1,   167,   111,    76,   113,
+     188,    -1,   169,    -1,   169,    76,    -1,   169,    76,   106,
+     107,    -1,   169,    76,   106,   157,   107,    -1,   169,    76,
+     113,   188,    -1,     3,    76,    -1,   174,    -1,   172,   174,
+      -1,    53,    -1,    52,    -1,     9,    -1,     8,    -1,    44,
+      -1,     3,    44,    -1,   173,    -1,   170,   173,    -1,   170,
+      -1,   176,    -1,   176,   173,    -1,     9,    -1,    40,    -1,
+      41,    -1,    51,    40,    -1,    51,    41,    -1,    43,    -1,
+     179,    -1,   175,   179,    -1,     4,    -1,     5,    -1,     6,
+      -1,    75,   104,   177,   105,    -1,   178,    -1,   177,   111,
+     178,    -1,    76,    -1,    76,   113,    79,    -1,    76,   113,
+      80,    -1,   180,    -1,   180,   106,   157,   107,    -1,    55,
+      -1,    11,    -1,    12,    -1,    13,    -1,    10,    -1,    31,
+      -1,    32,    -1,    33,    -1,    25,    -1,    26,    -1,    27,
+      -1,    28,    -1,    29,    -1,    30,    -1,    34,    -1,    35,
+      -1,    36,    -1,    37,    -1,    38,    -1,    39,    -1,    45,
+      -1,    46,    -1,    47,    -1,    48,    -1,    49,    -1,    50,
+      -1,    57,    -1,    58,    -1,    59,    -1,    70,    -1,    61,
+      -1,    62,    -1,    63,    -1,    64,    -1,    65,    -1,    66,
+      -1,    67,    -1,    68,    -1,    69,    -1,    72,    -1,    73,
+      -1,    74,    -1,   181,    -1,    77,    -1,    -1,    54,    76,
+     108,   182,   184,   109,    -1,    -1,    54,   108,   183,   184,
+     109,    -1,   185,    -1,   184,   185,    -1,   174,   186,   114,
+      -1,   187,    -1,   186,   111,   187,    -1,    76,    -1,    76,
+     106,   157,   107,    -1,   154,    -1,   158,    -1,   192,    -1,
+     191,    -1,   189,    -1,   201,    -1,   202,    -1,   205,    -1,
+     212,    -1,   108,   109,    -1,    -1,    -1,   108,   193,   200,
+     194,   109,    -1,   199,    -1,   191,    -1,    -1,   197,   199,
+      -1,    -1,   198,   191,    -1,   108,   109,    -1,   108,   200,
+     109,    -1,   190,    -1,   200,   190,    -1,   114,    -1,   156,
+     114,    -1,    19,   104,   156,   105,   203,    -1,   196,    17,
+     196,    -1,   196,    -1,   156,    -1,   169,    76,   113,   188,
+      -1,    -1,    56,   104,   206,   204,   105,   195,    -1,    -1,
+      16,   207,   196,    56,   104,   156,   105,   114,    -1,    -1,
+      18,   104,   208,   209,   211,   105,   195,    -1,   201,    -1,
+     189,    -1,   204,    -1,    -1,   210,   114,    -1,   210,   114,
+     156,    -1,    15,   114,    -1,    14,   114,    -1,    21,   114,
+      -1,    21,   156,   114,    -1,    20,   114,    -1,   214,    -1,
+     213,   214,    -1,   215,    -1,   158,    -1,    -1,   159,   216,
+     199,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -728,28 +733,29 @@ static const yytype_uint16 yyrline[] =
        0,   190,   190,   225,   228,   233,   238,   243,   248,   254,
      257,   336,   339,   440,   450,   463,   471,   571,   574,   582,
      586,   593,   597,   604,   610,   619,   627,   704,   711,   721,
-     724,   734,   744,   765,   766,   767,   772,   773,   782,   794,
-     795,   803,   814,   818,   819,   829,   839,   849,   862,   863,
-     873,   886,   890,   894,   898,   899,   912,   913,   926,   927,
-     940,   941,   958,   959,   972,   973,   974,   975,   976,   980,
-     983,   994,  1002,  1029,  1034,  1044,  1082,  1085,  1092,  1100,
-    1121,  1142,  1153,  1182,  1187,  1197,  1202,  1212,  1215,  1218,
-    1221,  1227,  1234,  1237,  1259,  1277,  1301,  1324,  1328,  1346,
-    1354,  1386,  1406,  1494,  1503,  1526,  1529,  1535,  1541,  1548,
-    1557,  1566,  1569,  1572,  1579,  1583,  1590,  1594,  1599,  1604,
-    1610,  1616,  1625,  1635,  1642,  1645,  1648,  1654,  1661,  1664,
-    1670,  1673,  1676,  1682,  1685,  1700,  1704,  1708,  1712,  1716,
-    1720,  1725,  1730,  1735,  1740,  1745,  1750,  1755,  1760,  1765,
-    1770,  1775,  1780,  1786,  1792,  1798,  1804,  1810,  1816,  1822,
-    1828,  1834,  1839,  1844,  1853,  1858,  1863,  1868,  1873,  1878,
-    1883,  1888,  1893,  1898,  1903,  1908,  1913,  1918,  1923,  1936,
-    1936,  1950,  1950,  1959,  1962,  1977,  2009,  2013,  2019,  2027,
-    2043,  2047,  2051,  2052,  2058,  2059,  2060,  2061,  2062,  2066,
-    2067,  2067,  2067,  2077,  2078,  2082,  2082,  2083,  2083,  2088,
-    2091,  2101,  2104,  2110,  2111,  2115,  2123,  2127,  2137,  2142,
-    2159,  2159,  2164,  2164,  2171,  2171,  2179,  2182,  2188,  2191,
-    2197,  2201,  2208,  2215,  2222,  2229,  2240,  2249,  2253,  2260,
-    2263,  2269,  2269
+     724,   734,   744,   765,   766,   767,   768,   776,   777,   786,
+     795,   808,   809,   817,   828,   829,   838,   850,   851,   861,
+     871,   881,   894,   895,   905,   918,   919,   933,   934,   948,
+     949,   963,   964,   977,   978,   991,   992,  1005,  1006,  1023,
+    1024,  1037,  1038,  1039,  1040,  1042,  1043,  1044,  1046,  1048,
+    1050,  1052,  1057,  1060,  1071,  1079,  1106,  1111,  1121,  1159,
+    1162,  1169,  1177,  1198,  1219,  1230,  1259,  1264,  1274,  1279,
+    1289,  1292,  1295,  1298,  1304,  1311,  1314,  1336,  1354,  1378,
+    1401,  1405,  1423,  1431,  1463,  1483,  1571,  1580,  1603,  1606,
+    1612,  1618,  1625,  1634,  1643,  1646,  1649,  1656,  1660,  1667,
+    1671,  1676,  1681,  1687,  1693,  1702,  1712,  1719,  1722,  1725,
+    1731,  1738,  1741,  1747,  1750,  1753,  1759,  1762,  1777,  1781,
+    1785,  1789,  1793,  1797,  1802,  1807,  1812,  1817,  1822,  1827,
+    1832,  1837,  1842,  1847,  1852,  1857,  1863,  1869,  1875,  1881,
+    1887,  1893,  1899,  1905,  1911,  1916,  1921,  1930,  1935,  1940,
+    1945,  1950,  1955,  1960,  1965,  1970,  1975,  1980,  1985,  1990,
+    1995,  2000,  2013,  2013,  2027,  2027,  2036,  2039,  2054,  2086,
+    2090,  2096,  2104,  2120,  2124,  2128,  2129,  2135,  2136,  2137,
+    2138,  2139,  2143,  2144,  2144,  2144,  2154,  2155,  2159,  2159,
+    2160,  2160,  2165,  2168,  2178,  2181,  2187,  2188,  2192,  2200,
+    2204,  2214,  2219,  2236,  2236,  2241,  2241,  2248,  2248,  2256,
+    2259,  2265,  2268,  2274,  2278,  2285,  2292,  2299,  2306,  2317,
+    2326,  2330,  2337,  2340,  2346,  2346
 };
 #endif
 
@@ -842,28 +848,29 @@ static const yytype_uint8 yyr1[] =
        0,   128,   129,   130,   130,   130,   130,   130,   130,   131,
      131,   131,   131,   131,   131,   132,   133,   134,   134,   135,
      135,   136,   136,   137,   137,   138,   139,   139,   139,   140,
-     140,   140,   140,   141,   141,   141,   142,   142,   142,   143,
-     143,   143,   144,   145,   145,   145,   145,   145,   146,   146,
-     146,   147,   148,   149,   150,   150,   151,   151,   152,   152,
-     153,   153,   154,   154,   155,   155,   155,   155,   155,   156,
-     156,   157,   158,   158,   158,   159,   160,   160,   161,   161,
-     162,   163,   163,   164,   164,   164,   164,   165,   165,   165,
-     165,   166,   167,   167,   167,   167,   167,   168,   168,   168,
-     168,   168,   168,   169,   169,   170,   170,   171,   172,   172,
-     172,   172,   172,   172,   172,   172,   173,   173,   173,   173,
-     173,   173,   174,   174,   175,   175,   175,   176,   177,   177,
-     178,   178,   178,   179,   179,   180,   180,   180,   180,   180,
+     140,   140,   140,   141,   141,   141,   141,   142,   142,   142,
+     142,   143,   143,   143,   144,   144,   144,   145,   145,   145,
+     145,   145,   146,   146,   146,   147,   147,   148,   148,   149,
+     149,   150,   150,   151,   151,   152,   152,   153,   153,   154,
+     154,   155,   155,   155,   155,   155,   155,   155,   155,   155,
+     155,   155,   156,   156,   157,   158,   158,   158,   159,   160,
+     160,   161,   161,   162,   163,   163,   164,   164,   164,   164,
+     165,   165,   165,   165,   166,   167,   167,   167,   167,   167,
+     168,   168,   168,   168,   168,   168,   169,   169,   170,   170,
+     171,   172,   172,   172,   172,   172,   172,   172,   172,   173,
+     173,   173,   173,   173,   173,   174,   174,   175,   175,   175,
+     176,   177,   177,   178,   178,   178,   179,   179,   180,   180,
      180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
      180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
      180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
-     180,   180,   180,   180,   180,   180,   180,   180,   180,   182,
-     181,   183,   181,   184,   184,   185,   186,   186,   187,   187,
-     188,   189,   190,   190,   191,   191,   191,   191,   191,   192,
-     193,   194,   192,   195,   195,   197,   196,   198,   196,   199,
-     199,   200,   200,   201,   201,   202,   203,   203,   204,   204,
-     206,   205,   207,   205,   208,   205,   209,   209,   210,   210,
-     211,   211,   212,   212,   212,   212,   212,   213,   213,   214,
-     214,   216,   215
+     180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
+     180,   180,   182,   181,   183,   181,   184,   184,   185,   186,
+     186,   187,   187,   188,   189,   190,   190,   191,   191,   191,
+     191,   191,   192,   193,   194,   192,   195,   195,   197,   196,
+     198,   196,   199,   199,   200,   200,   201,   201,   202,   203,
+     203,   204,   204,   206,   205,   207,   205,   208,   205,   209,
+     209,   210,   210,   211,   211,   212,   212,   212,   212,   212,
+     213,   213,   214,   214,   216,   215
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -872,28 +879,29 @@ static const yytype_uint8 yyr2[] =
        0,     2,     1,     1,     1,     1,     1,     1,     3,     1,
        4,     1,     3,     2,     2,     1,     1,     1,     3,     2,
        2,     2,     1,     2,     3,     2,     1,     1,     1,     1,
-       2,     2,     2,     1,     1,     1,     1,     3,     3,     1,
-       3,     3,     1,     1,     3,     3,     3,     3,     1,     3,
-       3,     1,     1,     1,     1,     3,     1,     3,     1,     3,
-       1,     5,     1,     3,     1,     1,     1,     1,     1,     1,
-       3,     1,     2,     2,     4,     2,     1,     1,     2,     3,
-       3,     2,     5,     3,     2,     3,     2,     0,     1,     1,
-       1,     1,     1,     3,     5,     6,     5,     1,     2,     4,
-       5,     4,     2,     1,     2,     1,     1,     1,     1,     1,
-       2,     1,     2,     1,     1,     2,     1,     1,     1,     2,
-       2,     1,     1,     2,     1,     1,     1,     4,     1,     3,
-       1,     3,     3,     1,     4,     1,     1,     1,     1,     1,
+       2,     2,     2,     1,     1,     1,     1,     1,     3,     3,
+       3,     1,     3,     3,     1,     3,     3,     1,     3,     3,
+       3,     3,     1,     3,     3,     1,     3,     1,     3,     1,
+       3,     1,     3,     1,     3,     1,     3,     1,     5,     1,
+       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     3,     1,     2,     2,     4,     2,     1,
+       1,     2,     3,     3,     2,     5,     3,     2,     3,     2,
+       0,     1,     1,     1,     1,     1,     3,     5,     6,     5,
+       1,     2,     4,     5,     4,     2,     1,     2,     1,     1,
+       1,     1,     1,     2,     1,     2,     1,     1,     2,     1,
+       1,     1,     2,     2,     1,     1,     2,     1,     1,     1,
+       4,     1,     3,     1,     3,     3,     1,     4,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     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,     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
@@ -901,236 +909,269 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,   124,   125,   126,     0,   108,   116,   139,   136,
-     137,   138,   143,   144,   145,   146,   147,   148,   140,   141,
-     142,   149,   150,   151,   152,   153,   154,   117,   118,   121,
-     109,   155,   156,   157,   158,   159,   160,     0,   106,   105,
-       0,   135,   161,   162,   163,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   164,   174,   175,   176,     0,   178,
-     240,   241,     0,    77,    87,     0,    92,    97,   113,     0,
-     111,   103,     0,   114,   122,   133,   177,     0,   237,   239,
-     110,   102,     0,   119,   120,     0,   181,     0,    72,     0,
-      75,    87,   107,    88,    89,    90,    78,     0,    87,     0,
-      73,    98,   112,   104,   123,   115,     0,     1,   238,     0,
-     179,     0,   130,     0,   128,     0,   242,    79,    84,    86,
-      91,     0,    93,    80,     0,     0,     2,     6,     4,     5,
-       7,    28,     0,     0,     0,    35,    34,    33,     3,     9,
-      29,    11,    16,    17,     0,     0,    22,     0,    36,     0,
-      39,    42,    43,    48,    51,    52,    53,    54,    56,    58,
-      60,    71,     0,    26,    74,     0,     0,     0,   183,     0,
-     127,     0,     0,     0,   222,     0,     0,     0,     0,     0,
-     200,   209,   213,    36,    62,    69,     0,   191,     0,   133,
-     194,   211,   193,   192,     0,   195,   196,   197,   198,    81,
-      83,    85,     0,     0,    99,     0,   190,   101,    30,    31,
-       0,    13,    14,     0,     0,    20,    19,     0,    21,    23,
-      25,    32,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   134,     0,   188,     0,
-     186,   182,   184,   131,   132,   129,   233,   232,   207,   224,
-       0,   236,   234,     0,   220,   199,     0,    65,    66,    67,
-      68,    64,     0,     0,   214,   210,   212,     0,    94,     0,
-      96,   100,     8,     0,    15,    27,    12,    18,    24,    37,
-      38,    41,    40,    46,    47,    44,    45,    49,    50,    55,
-      57,    59,     0,   180,     0,     0,   185,     0,     0,     0,
-       0,     0,   235,     0,   201,    63,    70,     0,    95,    10,
-       0,     0,   187,     0,   206,   208,   227,   226,   229,   207,
-       0,   218,     0,     0,     0,    82,    61,   189,     0,   228,
-       0,     0,   217,   215,     0,     0,   202,     0,   230,     0,
-     207,     0,   204,   221,   203,     0,   231,   225,   216,   219,
-     223
+       0,     0,   137,   138,   139,     0,   121,   129,   152,   149,
+     150,   151,   156,   157,   158,   159,   160,   161,   153,   154,
+     155,   162,   163,   164,   165,   166,   167,   130,   131,   134,
+     122,   168,   169,   170,   171,   172,   173,     0,   119,   118,
+       0,   148,   174,   175,   176,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   177,   187,   188,   189,     0,   191,
+     253,   254,     0,    90,   100,     0,   105,   110,   126,     0,
+     124,   116,     0,   127,   135,   146,   190,     0,   250,   252,
+     123,   115,     0,   132,   133,     0,   194,     0,    85,     0,
+      88,   100,   120,   101,   102,   103,    91,     0,   100,     0,
+      86,   111,   125,   117,   136,   128,     0,     1,   251,     0,
+     192,     0,   143,     0,   141,     0,   255,    92,    97,    99,
+     104,     0,   106,    93,     0,     0,     2,     6,     4,     5,
+       7,    28,     0,     0,     0,    35,    34,    36,    33,     3,
+       9,    29,    11,    16,    17,     0,     0,    22,     0,    37,
+       0,    41,    44,    47,    52,    55,    57,    59,    61,    63,
+      65,    67,    84,     0,    26,    87,     0,     0,     0,   196,
+       0,   140,     0,     0,     0,   235,     0,     0,     0,     0,
+       0,   213,   222,   226,    37,    69,    82,     0,   204,     0,
+     146,   207,   224,   206,   205,     0,   208,   209,   210,   211,
+      94,    96,    98,     0,     0,   112,     0,   203,   114,    30,
+      31,     0,    13,    14,     0,     0,    20,    19,     0,    21,
+      23,    25,    32,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   147,     0,   201,     0,   199,   195,   197,
+     144,   145,   142,   246,   245,   220,   237,     0,   249,   247,
+       0,   233,   212,     0,    72,    73,    75,    74,    77,    78,
+      79,    80,    81,    76,    71,     0,     0,   227,   223,   225,
+       0,   107,     0,   109,   113,     8,     0,    15,    27,    12,
+      18,    24,    38,    39,    40,    43,    42,    45,    46,    50,
+      51,    48,    49,    53,    54,    56,    58,    60,    62,    64,
+      66,     0,   193,     0,     0,   198,     0,     0,     0,     0,
+       0,   248,     0,   214,    70,    83,     0,   108,    10,     0,
+       0,   200,     0,   219,   221,   240,   239,   242,   220,     0,
+     231,     0,     0,     0,    95,    68,   202,     0,   241,     0,
+       0,   230,   228,     0,     0,   215,     0,   243,     0,   220,
+       0,   217,   234,   216,     0,   244,   238,   229,   232,   236
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   138,   139,   140,   273,   141,   142,   143,   144,   145,
-     146,   147,   183,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   184,   185,   262,   186,   162,
-     187,   188,    62,    63,    64,   118,    96,    97,   119,    65,
+      -1,   139,   140,   141,   286,   142,   143,   144,   145,   146,
+     147,   148,   184,   150,   151,   152,   153,   154,   155,   156,
+     157,   158,   159,   160,   161,   185,   186,   275,   187,   163,
+     188,   189,    62,    63,    64,   118,    96,    97,   119,    65,
       66,    67,    68,    98,    69,    70,    71,    72,    73,   113,
-     114,    74,   163,    76,   165,   111,   167,   168,   239,   240,
-     207,   190,   191,   192,   193,   256,   324,   343,   297,   298,
-     299,   344,   194,   195,   196,   333,   323,   197,   303,   248,
-     300,   318,   330,   331,   198,    77,    78,    79,    89
+     114,    74,   164,    76,   166,   111,   168,   169,   246,   247,
+     208,   191,   192,   193,   194,   263,   343,   362,   316,   317,
+     318,   363,   195,   196,   197,   352,   342,   198,   322,   255,
+     319,   337,   349,   350,   199,    77,    78,    79,    89
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -300
+#define YYPACT_NINF -324
 static const yytype_int16 yypact[] =
 {
-    1737,   -20,  -300,  -300,  -300,   150,  -300,  -300,  -300,  -300,
-    -300,  -300,  -300,  -300,  -300,  -300,  -300,  -300,  -300,  -300,
-    -300,  -300,  -300,  -300,  -300,  -300,  -300,  -300,  -300,  -300,
-    -300,  -300,  -300,  -300,  -300,  -300,  -300,   -22,  -300,  -300,
-     -50,  -300,  -300,  -300,  -300,  -300,  -300,  -300,  -300,  -300,
-    -300,  -300,  -300,  -300,  -300,  -300,  -300,  -300,   -67,  -300,
-    -300,   -85,   -37,   -24,     2,    -1,  -300,    15,    14,  1811,
-    -300,  -300,  1947,    14,  -300,   -33,  -300,  1662,  -300,  -300,
-    -300,  -300,  1947,  -300,  -300,    -4,  -300,    19,  -300,    28,
-    -300,     5,  -300,  -300,  -300,  -300,  -300,  1811,   117,    46,
-    -300,   -43,  -300,  -300,  -300,  -300,  1302,  -300,  -300,    38,
-    -300,  1811,    53,   -75,  -300,   337,  -300,  -300,  -300,  -300,
-      93,  1811,   -78,  -300,   216,  1302,    68,  -300,  -300,  -300,
-    -300,  -300,  1302,  1302,  1302,  -300,  -300,  -300,  -300,  -300,
-     -46,  -300,  -300,  -300,    69,   -30,  1397,    71,  -300,  1302,
-      -3,   -38,  -300,   -56,    52,  -300,  -300,  -300,    86,    88,
-     -76,  -300,    75,  -300,  -300,  1811,   107,  1492,  -300,    81,
-    -300,    19,    70,    73,  -300,    85,    89,    76,  1109,    92,
-      83,  -300,  -300,     6,  -300,  -300,    26,  -300,   -85,     8,
-    -300,  -300,  -300,  -300,   453,  -300,  -300,  -300,  -300,    79,
-    -300,  -300,  1204,  1302,  -300,    90,  -300,  -300,  -300,  -300,
-     -17,  -300,  -300,  1302,  1879,  -300,  -300,  1302,    95,  -300,
-    -300,  -300,  1302,  1302,  1302,  1302,  1302,  1302,  1302,  1302,
-    1302,  1302,  1302,  1302,  1302,  1302,  -300,  1577,    94,    37,
-    -300,  -300,  -300,  -300,  -300,  -300,  -300,  -300,    96,  -300,
-    1302,  -300,  -300,    39,  -300,  -300,   569,  -300,  -300,  -300,
-    -300,  -300,  1302,  1302,  -300,  -300,  -300,  1302,  -300,    98,
-    -300,  -300,  -300,    99,    91,  -300,    97,  -300,  -300,  -300,
-    -300,    -3,    -3,  -300,  -300,  -300,  -300,   -56,   -56,  -300,
-      86,    88,    51,  -300,  1302,   107,  -300,   147,    28,   801,
-     917,   -15,  -300,  1014,   569,  -300,  -300,   100,  -300,  -300,
-    1302,   102,  -300,   106,  -300,  -300,  -300,  -300,  1014,    96,
-     168,    91,   137,   109,   110,  -300,  -300,  -300,  1302,  -300,
-     101,   111,   201,  -300,   108,   685,  -300,   -13,  1302,   685,
-      96,  1302,  -300,  -300,  -300,   116,    91,  -300,  -300,  -300,
-    -300
+    1769,   -31,  -324,  -324,  -324,   144,  -324,  -324,  -324,  -324,
+    -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,
+    -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,
+    -324,  -324,  -324,  -324,  -324,  -324,  -324,    69,  -324,  -324,
+     -60,  -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,
+    -324,  -324,  -324,  -324,  -324,  -324,  -324,  -324,   -82,  -324,
+    -324,   -88,   -52,   -48,     1,   -23,  -324,     2,    11,  1843,
+    -324,  -324,  1979,    11,  -324,    -7,  -324,  1694,  -324,  -324,
+    -324,  -324,  1979,  -324,  -324,    18,  -324,    31,  -324,    59,
+    -324,    78,  -324,  -324,  -324,  -324,  -324,  1843,   113,    85,
+    -324,   -79,  -324,  -324,  -324,  -324,  1419,  -324,  -324,    55,
+    -324,  1843,    61,   -55,  -324,   356,  -324,  -324,  -324,  -324,
+     102,  1843,   -67,  -324,  1128,  1419,    75,  -324,  -324,  -324,
+    -324,  -324,  1419,  1419,  1419,  -324,  -324,  -324,  -324,  -324,
+    -324,   -27,  -324,  -324,  -324,    76,   -44,  1514,    79,  -324,
+    1419,    37,   -45,    30,   -57,    27,    56,    62,    60,    95,
+      96,   -83,  -324,    81,  -324,  -324,  1843,   114,   243,  -324,
+      80,  -324,    31,    77,    83,  -324,    89,    90,    84,  1226,
+      97,    91,  -324,  -324,   230,  -324,  -324,   -19,  -324,   -88,
+      -1,  -324,  -324,  -324,  -324,   472,  -324,  -324,  -324,  -324,
+      93,  -324,  -324,  1321,  1419,  -324,    99,  -324,  -324,  -324,
+    -324,   -37,  -324,  -324,  1419,  1911,  -324,  -324,  1419,    98,
+    -324,  -324,  -324,  1419,  1419,  1419,  1419,  1419,  1419,  1419,
+    1419,  1419,  1419,  1419,  1419,  1419,  1419,  1419,  1419,  1419,
+    1419,  1419,  1419,  -324,  1609,   103,   -18,  -324,  -324,  -324,
+    -324,  -324,  -324,  -324,  -324,   100,  -324,  1419,  -324,  -324,
+     -13,  -324,  -324,   588,  -324,  -324,  -324,  -324,  -324,  -324,
+    -324,  -324,  -324,  -324,  -324,  1419,  1419,  -324,  -324,  -324,
+    1419,  -324,   104,  -324,  -324,  -324,   105,    92,  -324,   109,
+    -324,  -324,  -324,  -324,  -324,    37,    37,   -45,   -45,    30,
+      30,    30,    30,   -57,   -57,    27,    56,    62,    60,    95,
+      96,    53,  -324,  1419,   114,  -324,   148,    59,   820,   936,
+     -35,  -324,  1033,   588,  -324,  -324,   107,  -324,  -324,  1419,
+     108,  -324,   112,  -324,  -324,  -324,  -324,  1033,   100,   175,
+      92,   145,   115,   116,  -324,  -324,  -324,  1419,  -324,   110,
+     117,   206,  -324,   118,   704,  -324,   -30,  1419,   704,   100,
+    1419,  -324,  -324,  -324,   119,    92,  -324,  -324,  -324,  -324
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -300,  -300,  -300,  -300,  -300,  -300,  -300,    10,  -300,  -300,
-    -300,  -300,   -99,  -300,   -54,  -300,   -82,   -51,  -300,  -300,
-    -300,   -12,   -11,    -9,  -300,  -103,  -124,  -300,  -130,  -118,
-       9,    12,  -300,  -300,  -300,   112,   132,   133,   113,  -300,
-    -300,  -244,  -300,  -300,  -300,     3,   -59,   227,  -300,  -300,
-      64,   -55,     0,  -300,  -300,  -300,    74,  -152,  -300,   -57,
-    -198,   -64,  -186,  -286,  -300,  -300,  -300,   -81,  -299,  -300,
-    -300,   -87,   -16,   -41,  -300,  -300,   -61,  -300,  -300,  -300,
-    -300,  -300,  -300,  -300,  -300,  -300,   183,  -300,  -300
+    -324,  -324,  -324,  -324,  -324,  -324,  -324,    13,  -324,  -324,
+    -324,  -324,   -95,  -324,   -56,   -53,  -108,   -62,   -10,    -8,
+      -6,    -5,    -3,    -2,  -324,  -103,  -124,  -324,  -130,  -117,
+       8,    12,  -324,  -324,  -324,   120,   147,   137,   121,  -324,
+    -324,  -305,  -324,  -324,  -324,   -33,   -64,   235,  -324,  -324,
+      71,   -54,     0,  -324,  -324,  -324,    86,  -154,  -324,   -69,
+    -198,   -73,  -176,  -294,  -324,  -324,  -324,  -107,  -323,  -324,
+    -324,   -87,    -4,   -61,  -324,  -324,   -80,  -324,  -324,  -324,
+    -324,  -324,  -324,  -324,  -324,  -324,   173,  -324,  -324
 };
 
 /* 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 -206
+#define YYTABLE_NINF -219
 static const yytype_int16 yytable[] =
 {
-      75,   206,   116,   161,   210,   270,   205,   148,   266,    60,
-     103,    92,    61,   315,    92,   242,   234,   104,    83,    84,
-     332,   161,   219,     7,    80,   148,    85,   109,   202,    88,
-     170,   226,   227,   208,   209,   203,   171,    87,   120,   211,
-     212,   348,    93,    94,    95,    93,    94,    95,   253,   342,
-     221,   235,   166,   342,    27,    28,    81,    29,    86,   322,
-     213,   123,   120,   124,   214,    37,   228,   229,    90,    75,
-     125,   102,    75,   106,   322,   216,   105,    75,   224,   206,
-     225,   217,    75,   274,   269,   242,    60,    91,   272,    61,
-     319,   101,   345,   278,   263,   112,   263,    75,   263,   161,
-     257,   258,   259,   148,   110,   292,   166,   -76,   166,   260,
-      99,    75,   -26,   100,   106,   189,   222,   223,   266,   261,
-     301,    75,   122,   279,   280,   148,   148,   148,   148,   148,
-     148,   148,   148,   148,   148,   148,   115,   263,   305,   306,
-     264,   230,   231,   349,   283,   284,   285,   286,   295,   307,
-     263,   296,   164,   302,     2,     3,     4,    93,    94,    95,
-     243,   244,   263,   310,   161,    75,   169,    75,   148,   199,
-     281,   282,   -27,   321,   215,   220,   311,   232,   166,   287,
-     288,   233,   236,   238,   246,   267,   326,   247,   321,   249,
-     251,   161,   255,   250,   189,   148,   254,   271,   337,  -135,
-     294,   -28,   263,   313,  -205,   308,   309,   325,   346,   327,
-     328,   314,    80,   334,   335,   338,   339,   206,   340,   336,
-     289,   341,   290,   117,   277,   291,     8,     9,    10,    11,
-     350,   121,    82,   200,   201,   245,   316,    75,   312,   237,
-     304,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,   189,   329,   347,   317,
-     108,    31,    32,    33,    34,    35,    36,     0,     0,     0,
-      40,    41,     0,    42,    43,    44,     0,    45,    46,    47,
+      75,   207,   116,   162,   211,   103,   283,   206,    60,   241,
+      92,   149,    61,    80,   249,   351,    85,   341,   104,   279,
+       7,   162,    87,   220,   334,   123,    88,   124,   109,   149,
+     230,   231,   341,   120,   125,   102,   367,   209,   210,   203,
+     105,    93,    94,    95,   242,    81,   204,   167,    86,   260,
+     171,    27,    28,    90,    29,   222,   172,   120,   212,   213,
+     361,   217,    37,    91,   361,   232,   233,   218,   285,    75,
+     338,   226,    75,   227,   276,   364,   276,    75,   101,   214,
+     207,   276,    75,   215,   287,    60,   282,    92,    99,    61,
+     249,   100,   276,   314,   291,   277,   315,    75,   276,   106,
+     162,   321,   167,   -26,   167,   106,   -89,   112,   149,    83,
+      84,    75,   311,   228,   229,   190,   234,   235,    93,    94,
+      95,    75,   299,   300,   301,   302,   110,   320,   292,   293,
+     294,   149,   149,   149,   149,   149,   149,   149,   149,   149,
+     149,   149,   149,   149,   149,   149,   149,   279,     2,     3,
+       4,   324,   325,    93,    94,    95,   223,   224,   225,   250,
+     251,   122,   368,   326,   276,   329,    75,   115,    75,   165,
+     295,   296,   303,   304,   170,   297,   298,   162,   200,   -27,
+     167,   216,   236,   221,   238,   149,   239,   237,   243,   240,
+     245,   253,   340,   256,   257,   190,   330,   254,   258,   280,
+     262,   261,  -148,   276,   332,   345,   284,   340,  -218,   313,
+     162,   327,   328,   -28,   344,   346,   347,   356,   149,    80,
+     354,   353,   358,   359,   357,   355,   305,   365,   290,   306,
+     333,   360,   307,   369,   308,   121,   207,   309,   117,   310,
+      82,   201,   202,   252,    75,   331,   335,     2,     3,     4,
+     108,   366,   244,     8,     9,    10,    11,   348,   336,   323,
+       0,     0,     0,   190,     0,     0,     0,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,     0,     0,     0,     0,     0,    31,    32,
+      33,    34,    35,    36,     0,     0,     0,    40,    41,     0,
+      42,    43,    44,     0,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,     0,    55,    56,    57,   190,   190,
+      59,     0,   190,   190,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,     0,     0,     0,   190,     0,     0,
+       0,     0,     0,   274,     0,     0,     0,     0,     0,     0,
+       0,     0,   248,     0,   190,     0,     0,     0,   190,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+     173,   174,   175,     0,   176,   177,   178,   179,     0,     0,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   180,    42,    43,    44,     0,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,     0,    55,    56,
-      57,     0,   126,    59,   127,   128,   129,   130,   131,   189,
-     189,   132,   133,   189,   189,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   189,     0,
-     134,     0,     0,   204,     0,     0,     0,     0,     0,     0,
-       0,   135,   136,     0,   137,   189,     0,     0,     0,   189,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,   172,   173,   174,     0,   175,   176,   177,   178,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,   179,    42,    43,    44,     0,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,    58,   126,    59,   127,   128,   129,   130,   131,
-       0,     0,   132,   133,     0,     0,     0,     0,     0,     0,
+      57,    58,   126,    59,   127,   128,   129,   130,   131,     0,
+       0,   132,   133,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     134,     0,     0,     0,   181,   182,     0,     0,     0,     0,
+     183,   135,   136,   137,   138,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   173,   174,   175,     0,
+     176,   177,   178,   179,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,   180,    42,
+      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,     0,    55,    56,    57,    58,   126,    59,
+     127,   128,   129,   130,   131,     0,     0,   132,   133,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   134,     0,     0,     0,
+     181,   278,     0,     0,     0,     0,   183,   135,   136,   137,
+     138,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,   173,   174,   175,     0,   176,   177,   178,   179,
+       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,   180,    42,    43,    44,     0,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
+      55,    56,    57,    58,   126,    59,   127,   128,   129,   130,
+     131,     0,     0,   132,   133,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   134,     0,     0,     0,   181,     0,     0,     0,
+       0,     0,   183,   135,   136,   137,   138,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,   173,   174,
+     175,     0,   176,   177,   178,   179,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+     180,    42,    43,    44,     0,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,     0,    55,    56,    57,    58,
+     126,    59,   127,   128,   129,   130,   131,     0,     0,   132,
+     133,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   134,     0,
+       0,     0,   115,     0,     0,     0,     0,     0,   183,   135,
+     136,   137,   138,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,   173,   174,   175,     0,   176,   177,
+     178,   179,     0,     0,     0,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,   180,    42,    43,    44,
+       0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,     0,    55,    56,    57,    58,   126,    59,   127,   128,
+     129,   130,   131,     0,     0,   132,   133,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   134,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   183,   135,   136,   137,   138,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   134,     0,     0,     0,   180,   181,     0,     0,     0,
-       0,   182,   135,   136,     0,   137,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,   172,   173,   174,
-       0,   175,   176,   177,   178,     0,     0,     0,    12,    13,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,     0,    42,    43,    44,     0,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,     0,    55,    56,
+      57,    58,   126,    59,   127,   128,   129,   130,   131,     0,
+       0,   132,   133,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   339,     2,     3,     4,
+     134,     6,     7,     8,     9,    10,    11,     0,     0,     0,
+     183,   135,   136,   137,   138,     0,     0,     0,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,   179,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,     0,
       42,    43,    44,     0,    45,    46,    47,    48,    49,    50,
       51,    52,    53,    54,     0,    55,    56,    57,    58,   126,
       59,   127,   128,   129,   130,   131,     0,     0,   132,   133,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   134,     0,     0,
-       0,   180,   265,     0,     0,     0,     0,   182,   135,   136,
-       0,   137,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,   172,   173,   174,     0,   175,   176,   177,
-     178,     0,     0,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,   179,    42,    43,    44,     0,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-       0,    55,    56,    57,    58,   126,    59,   127,   128,   129,
-     130,   131,     0,     0,   132,   133,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   134,     8,     9,
+      10,    11,     0,     0,     0,     0,     0,     0,   135,   136,
+     137,   138,     0,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
+       0,     0,     0,    31,    32,    33,    34,    35,    36,     0,
+       0,     0,    40,    41,     0,    42,    43,    44,     0,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
+      55,    56,    57,     0,   126,    59,   127,   128,   129,   130,
+     131,     0,     0,   132,   133,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   134,     0,     0,     0,   180,     0,     0,
-       0,     0,     0,   182,   135,   136,     0,   137,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,   172,
-     173,   174,     0,   175,   176,   177,   178,     0,     0,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,   179,    42,    43,    44,     0,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-      58,   126,    59,   127,   128,   129,   130,   131,     0,     0,
-     132,   133,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   134,
-       0,     0,     0,   115,     0,     0,     0,     0,     0,   182,
-     135,   136,     0,   137,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,   172,   173,   174,     0,   175,
-     176,   177,   178,     0,     0,     0,    12,    13,    14,    15,
+       0,     0,   134,     0,     0,   205,     8,     9,    10,    11,
+       0,     0,     0,   135,   136,   137,   138,     0,     0,     0,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
+       0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
+      40,    41,     0,    42,    43,    44,     0,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,     0,    55,    56,
+      57,     0,   126,    59,   127,   128,   129,   130,   131,     0,
+       0,   132,   133,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     134,     8,     9,    10,    11,     0,     0,     0,     0,     0,
+     259,   135,   136,   137,   138,     0,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,   179,    42,    43,
+      26,     0,     0,     0,     0,     0,    31,    32,    33,    34,
+      35,    36,     0,     0,     0,    40,    41,     0,    42,    43,
       44,     0,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,     0,    55,    56,    57,    58,   126,    59,   127,
+      53,    54,     0,    55,    56,    57,     0,   126,    59,   127,
      128,   129,   130,   131,     0,     0,   132,   133,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   134,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   182,   135,   136,     0,   137,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,     0,    42,    43,    44,     0,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,    58,   126,    59,   127,   128,   129,   130,   131,
-       0,     0,   132,   133,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   320,     2,     3,
-       4,   134,     6,     7,     8,     9,    10,    11,     0,     0,
-       0,   182,   135,   136,     0,   137,     0,     0,     0,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-       0,    42,    43,    44,     0,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,     0,    55,    56,    57,    58,
-     126,    59,   127,   128,   129,   130,   131,     0,     0,   132,
-     133,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   134,     8,
-       9,    10,    11,     0,     0,     0,     0,     0,     0,   135,
-     136,     0,   137,     0,    12,    13,    14,    15,    16,    17,
+       0,     0,     0,     0,     0,   134,     0,     0,   281,     8,
+       9,    10,    11,     0,     0,     0,   135,   136,   137,   138,
+       0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
        0,     0,     0,     0,    31,    32,    33,    34,    35,    36,
        0,     0,     0,    40,    41,     0,    42,    43,    44,     0,
@@ -1139,205 +1180,208 @@ static const yytype_int16 yytable[] =
      130,   131,     0,     0,   132,   133,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   134,     8,     9,    10,    11,     0,     0,
-       0,     0,     0,   252,   135,   136,     0,   137,     0,    12,
+       0,     0,     0,     0,   135,   136,   137,   138,     0,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,     0,     0,     0,     0,     0,    31,
-      32,    33,    34,    35,    36,     0,     0,     0,    40,    41,
+      32,    33,    34,    35,    36,     0,     0,     0,    40,   219,
        0,    42,    43,    44,     0,    45,    46,    47,    48,    49,
       50,    51,    52,    53,    54,     0,    55,    56,    57,     0,
      126,    59,   127,   128,   129,   130,   131,     0,     0,   132,
      133,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   134,     0,
-       0,   268,     8,     9,    10,    11,     0,     0,     0,   135,
-     136,     0,   137,     0,     0,     0,     0,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,     0,     0,     0,     0,     0,    31,    32,    33,
-      34,    35,    36,     0,     0,     0,    40,    41,     0,    42,
-      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,     0,    55,    56,    57,     0,   126,    59,
-     127,   128,   129,   130,   131,     0,     0,   132,   133,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   134,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,     0,   135,   136,     0,
-     137,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,    31,    32,    33,    34,    35,    36,     0,     0,
-       0,    40,   218,     0,    42,    43,    44,     0,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,     0,   126,    59,   127,   128,   129,   130,   131,
-       0,     0,   132,   133,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     2,     3,     4,     0,
-       0,   134,     8,     9,    10,    11,     0,     0,     0,     0,
-       0,     0,   135,   136,     0,   137,     0,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,     0,     0,     0,     0,     0,    31,    32,    33,
-      34,    35,    36,     0,     0,     0,    40,    41,     0,    42,
-      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,     0,    55,    56,    57,     0,     0,    59,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     2,     3,     4,     0,     0,     0,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   241,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,    31,    32,    33,    34,    35,    36,     0,     0,
-       0,    40,    41,     0,    42,    43,    44,     0,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,     0,     0,    59,     0,     0,     0,     0,     0,
-       0,     0,   107,     0,     0,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   293,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
-      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,     0,    55,    56,    57,    58,     0,    59,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,     0,    42,    43,    44,     0,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,    58,     0,    59,     2,     3,     4,     0,     0,
-       0,     8,     9,    10,    11,     0,     0,     0,     0,     0,
+       0,     0,     0,     2,     3,     4,     0,     0,   134,     8,
+       9,    10,    11,     0,     0,     0,     0,     0,     0,   135,
+     136,   137,   138,     0,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
+       0,     0,     0,     0,    31,    32,    33,    34,    35,    36,
+       0,     0,     0,    40,    41,     0,    42,    43,    44,     0,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+       0,    55,    56,    57,     0,     0,    59,     0,     0,     0,
+       0,     0,     0,     0,   107,     0,     0,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   312,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+       0,    42,    43,    44,     0,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,     0,    55,    56,    57,    58,
+       0,    59,     1,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,     0,    42,    43,    44,     0,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+       0,    55,    56,    57,    58,     0,    59,     2,     3,     4,
+       0,     0,     0,     8,     9,    10,    11,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,     0,     0,     0,     0,     0,    31,    32,
+      33,    34,    35,    36,     0,     0,     0,    40,    41,     0,
+      42,    43,    44,     0,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,     0,    55,    56,    57,     0,     0,
+      59,     8,     9,    10,    11,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,     0,     0,     0,     0,     0,    31,    32,    33,    34,
       35,    36,     0,     0,     0,    40,    41,     0,    42,    43,
       44,     0,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,     0,    55,    56,    57,     0,     0,    59,     8,
-       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
+      53,    54,     0,    55,    56,    57,     0,   288,    59,     8,
+       9,    10,    11,   289,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
        0,     0,     0,     0,    31,    32,    33,    34,    35,    36,
        0,     0,     0,    40,    41,     0,    42,    43,    44,     0,
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-       0,    55,    56,    57,     0,   275,    59,     8,     9,    10,
-      11,   276,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,    31,    32,    33,    34,    35,    36,     0,     0,
-       0,    40,    41,     0,    42,    43,    44,     0,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,     0,     0,    59
+       0,    55,    56,    57,     0,     0,    59
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   125,    89,   106,   134,   203,   124,   106,   194,     0,
-      69,     9,     0,   299,     9,   167,    92,    72,    40,    41,
-     319,   124,   146,     9,    44,   124,    76,    82,   106,   114,
-     105,    87,    88,   132,   133,   113,   111,   104,    97,    85,
-      86,   340,    40,    41,    42,    40,    41,    42,   178,   335,
-     149,   127,   111,   339,    40,    41,    76,    43,   108,   303,
-     106,   104,   121,   106,   110,    51,   122,   123,   105,    69,
-     113,    68,    72,   106,   318,   105,    73,    77,   116,   203,
-     118,   111,    82,   213,   202,   237,    77,   111,   105,    77,
-     105,    76,   105,   217,   111,    76,   111,    97,   111,   202,
-      94,    95,    96,   202,   108,   235,   165,   105,   167,   103,
-     111,   111,   104,   114,   106,   115,   119,   120,   304,   113,
-     250,   121,    76,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   108,   111,   262,   263,
-     114,    89,    90,   341,   226,   227,   228,   229,   111,   267,
-     111,   114,   114,   114,     4,     5,     6,    40,    41,    42,
-      79,    80,   111,   112,   267,   165,   113,   167,   267,    76,
-     224,   225,   104,   303,   105,   104,   294,    91,   237,   230,
-     231,    93,   107,    76,   114,   106,   310,   114,   318,   104,
-     114,   294,   109,   104,   194,   294,   104,   107,   328,   104,
-     106,   104,   111,    56,   108,   107,   107,   107,   338,   107,
-     104,   298,    44,    76,   105,   114,   105,   341,    17,   109,
-     232,   113,   233,    91,   214,   234,    10,    11,    12,    13,
-     114,    98,     5,   121,   121,   171,   300,   237,   295,   165,
-     256,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,   256,   318,   339,   300,
-      77,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
-      54,    55,    -1,    57,    58,    59,    -1,    61,    62,    63,
+       0,   125,    89,   106,   134,    69,   204,   124,     0,    92,
+       9,   106,     0,    44,   168,   338,    76,   322,    72,   195,
+       9,   124,   104,   147,   318,   104,   114,   106,    82,   124,
+      87,    88,   337,    97,   113,    68,   359,   132,   133,   106,
+      73,    40,    41,    42,   127,    76,   113,   111,   108,   179,
+     105,    40,    41,   105,    43,   150,   111,   121,    85,    86,
+     354,   105,    51,   111,   358,   122,   123,   111,   105,    69,
+     105,   116,    72,   118,   111,   105,   111,    77,    76,   106,
+     204,   111,    82,   110,   214,    77,   203,     9,   111,    77,
+     244,   114,   111,   111,   218,   114,   114,    97,   111,   106,
+     203,   114,   166,   104,   168,   106,   105,    76,   203,    40,
+      41,   111,   242,    83,    84,   115,    89,    90,    40,    41,
+      42,   121,   230,   231,   232,   233,   108,   257,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   323,     4,     5,
+       6,   275,   276,    40,    41,    42,   119,   120,   121,    79,
+      80,    76,   360,   280,   111,   112,   166,   108,   168,   114,
+     226,   227,   234,   235,   113,   228,   229,   280,    76,   104,
+     244,   105,   126,   104,   124,   280,    91,   125,   107,    93,
+      76,   114,   322,   104,   104,   195,   313,   114,   114,   106,
+     109,   104,   104,   111,    56,   329,   107,   337,   108,   106,
+     313,   107,   107,   104,   107,   107,   104,   347,   313,    44,
+     105,    76,   105,    17,   114,   109,   236,   357,   215,   237,
+     317,   113,   238,   114,   239,    98,   360,   240,    91,   241,
+       5,   121,   121,   172,   244,   314,   319,     4,     5,     6,
+      77,   358,   166,    10,    11,    12,    13,   337,   319,   263,
+      -1,    -1,    -1,   263,    -1,    -1,    -1,    -1,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
+      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,   318,   319,
+      77,    -1,   322,   323,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,    -1,    -1,    -1,   337,    -1,    -1,
+      -1,    -1,    -1,   113,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,   354,    -1,    -1,    -1,   358,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    -1,    18,    19,    20,    21,    -1,    -1,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    -1,    61,    62,    63,
       64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
-      74,    -1,    76,    77,    78,    79,    80,    81,    82,   299,
-     300,    85,    86,   303,   304,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   318,    -1,
-     104,    -1,    -1,   107,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   115,   116,    -1,   118,   335,    -1,    -1,    -1,   339,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    -1,    18,    19,    20,    21,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    -1,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     104,    -1,    -1,    -1,   108,   109,    -1,    -1,    -1,    -1,
+     114,   115,   116,   117,   118,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    -1,    -1,    85,    86,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,
+     108,   109,    -1,    -1,    -1,    -1,   114,   115,   116,   117,
+     118,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
+      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   104,    -1,    -1,    -1,   108,    -1,    -1,    -1,
+      -1,    -1,   114,   115,   116,   117,   118,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    -1,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,
+      -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,   114,   115,
+     116,   117,   118,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      20,    21,    -1,    -1,    -1,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      -1,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   114,   115,   116,   117,   118,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   104,    -1,    -1,    -1,   108,   109,    -1,    -1,    -1,
-      -1,   114,   115,   116,    -1,   118,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      -1,    18,    19,    20,    21,    -1,    -1,    -1,    25,    26,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    -1,    57,    58,    59,    -1,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
+     104,     8,     9,    10,    11,    12,    13,    -1,    -1,    -1,
+     114,   115,   116,   117,   118,    -1,    -1,    -1,    25,    26,
       27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
       37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    -1,
       57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    -1,    72,    73,    74,    75,    76,
       77,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,
-      -1,   108,   109,    -1,    -1,    -1,    -1,   114,   115,   116,
-      -1,   118,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
-      21,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    -1,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      -1,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    10,    11,
+      12,    13,    -1,    -1,    -1,    -1,    -1,    -1,   115,   116,
+     117,   118,    -1,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
+      -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    -1,
+      -1,    -1,    54,    55,    -1,    57,    58,    59,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
+      82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   104,    -1,    -1,    -1,   108,    -1,    -1,
-      -1,    -1,    -1,   114,   115,   116,    -1,   118,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    -1,    18,    19,    20,    21,    -1,    -1,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    -1,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
-      -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,   114,
-     115,   116,    -1,   118,     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,
+      -1,    -1,   104,    -1,    -1,   107,    10,    11,    12,    13,
+      -1,    -1,    -1,   115,   116,   117,   118,    -1,    -1,    -1,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
+      54,    55,    -1,    57,    58,    59,    -1,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     104,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
+     114,   115,   116,   117,   118,    -1,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
+      49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,
       59,    -1,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    -1,    72,    73,    74,    75,    76,    77,    78,
+      69,    70,    -1,    72,    73,    74,    -1,    76,    77,    78,
       79,    80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   114,   115,   116,    -1,   118,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
-       6,   104,     8,     9,    10,    11,    12,    13,    -1,    -1,
-      -1,   114,   115,   116,    -1,   118,    -1,    -1,    -1,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      -1,    57,    58,    59,    -1,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    -1,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,   115,
-     116,    -1,   118,    -1,    25,    26,    27,    28,    29,    30,
+      -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,   107,    10,
+      11,    12,    13,    -1,    -1,    -1,   115,   116,   117,   118,
+      -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
       -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
       -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,    -1,
@@ -1346,7 +1390,7 @@ static const yytype_int16 yycheck[] =
       81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,   104,    10,    11,    12,    13,    -1,    -1,
-      -1,    -1,    -1,   114,   115,   116,    -1,   118,    -1,    25,
+      -1,    -1,    -1,    -1,   115,   116,   117,   118,    -1,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
       46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
@@ -1354,79 +1398,51 @@ static const yytype_int16 yycheck[] =
       66,    67,    68,    69,    70,    -1,    72,    73,    74,    -1,
       76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
       86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,
-      -1,   107,    10,    11,    12,    13,    -1,    -1,    -1,   115,
-     116,    -1,   118,    -1,    -1,    -1,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
-      48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,
-      58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    72,    73,    74,    -1,    76,    77,
-      78,    79,    80,    81,    82,    -1,    -1,    85,    86,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   104,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    -1,    -1,   115,   116,    -1,
-     118,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
-      -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
-      -1,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     4,     5,     6,    -1,
-      -1,   104,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
-      -1,    -1,   115,   116,    -1,   118,    -1,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
-      48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,
-      58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    72,    73,    74,    -1,    -1,    77,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     4,     5,     6,    -1,    -1,    -1,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   109,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
-      -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
-      -1,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    -1,    -1,    77,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     0,    -1,    -1,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   109,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
-      58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    72,    73,    74,    75,    -1,    77,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    75,    -1,    77,     4,     5,     6,    -1,    -1,
-      -1,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     4,     5,     6,    -1,    -1,   104,    10,
+      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,   115,
+     116,   117,   118,    -1,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
+      -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
+      -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,    -1,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    72,    73,    74,    -1,    -1,    77,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     0,    -1,    -1,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      -1,    57,    58,    59,    -1,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    72,    73,    74,    75,
+      -1,    77,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    -1,    57,    58,    59,    -1,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      -1,    72,    73,    74,    75,    -1,    77,     4,     5,     6,
+      -1,    -1,    -1,    10,    11,    12,    13,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
+      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
+      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    -1,    72,    73,    74,    -1,    -1,
+      77,    10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
       39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
       49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,    58,
       59,    -1,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    -1,    72,    73,    74,    -1,    -1,    77,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      69,    70,    -1,    72,    73,    74,    -1,    76,    77,    10,
+      11,    12,    13,    82,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
       -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
       -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,    -1,
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      -1,    72,    73,    74,    -1,    76,    77,    10,    11,    12,
-      13,    82,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
-      -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
-      -1,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    -1,    -1,    77
+      -1,    72,    73,    74,    -1,    -1,    77
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1446,29 +1462,30 @@ static const yytype_uint8 yystos[] =
      114,    76,   173,   174,   179,   173,   106,     0,   214,   179,
      108,   183,    76,   177,   178,   108,   199,   164,   163,   166,
      174,   165,    76,   104,   106,   113,    76,    78,    79,    80,
-      81,    82,    85,    86,   104,   115,   116,   118,   129,   130,
-     131,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   157,   180,   114,   182,   174,   184,   185,   113,
-     105,   111,    14,    15,    16,    18,    19,    20,    21,    56,
-     108,   109,   114,   140,   153,   154,   156,   158,   159,   180,
-     189,   190,   191,   192,   200,   201,   202,   205,   212,    76,
-     163,   166,   106,   113,   107,   157,   154,   188,   140,   140,
-     156,    85,    86,   106,   110,   105,   105,   111,    55,   154,
-     104,   140,   119,   120,   116,   118,    87,    88,   122,   123,
-      89,    90,    91,    93,    92,   127,   107,   184,    76,   186,
-     187,   109,   185,    79,    80,   178,   114,   114,   207,   104,
-     104,   114,   114,   156,   104,   109,   193,    94,    95,    96,
-     103,   113,   155,   111,   114,   109,   190,   106,   107,   157,
-     188,   107,   105,   132,   156,    76,    82,   135,   154,   140,
-     140,   142,   142,   144,   144,   144,   144,   145,   145,   149,
-     150,   151,   156,   109,   106,   111,   114,   196,   197,   198,
-     208,   156,   114,   206,   200,   154,   154,   157,   107,   107,
-     112,   157,   187,    56,   199,   191,   189,   201,   209,   105,
-       3,   156,   169,   204,   194,   107,   154,   107,   104,   204,
-     210,   211,   196,   203,    76,   105,   109,   156,   114,   105,
-      17,   113,   191,   195,   199,   105,   156,   195,   196,   188,
-     114
+      81,    82,    85,    86,   104,   115,   116,   117,   118,   129,
+     130,   131,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   157,   180,   114,   182,   174,   184,   185,
+     113,   105,   111,    14,    15,    16,    18,    19,    20,    21,
+      56,   108,   109,   114,   140,   153,   154,   156,   158,   159,
+     180,   189,   190,   191,   192,   200,   201,   202,   205,   212,
+      76,   163,   166,   106,   113,   107,   157,   154,   188,   140,
+     140,   156,    85,    86,   106,   110,   105,   105,   111,    55,
+     154,   104,   140,   119,   120,   121,   116,   118,    83,    84,
+      87,    88,   122,   123,    89,    90,   126,   125,   124,    91,
+      93,    92,   127,   107,   184,    76,   186,   187,   109,   185,
+      79,    80,   178,   114,   114,   207,   104,   104,   114,   114,
+     156,   104,   109,   193,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   113,   155,   111,   114,   109,   190,
+     106,   107,   157,   188,   107,   105,   132,   156,    76,    82,
+     135,   154,   140,   140,   140,   142,   142,   143,   143,   144,
+     144,   144,   144,   145,   145,   146,   147,   148,   149,   150,
+     151,   156,   109,   106,   111,   114,   196,   197,   198,   208,
+     156,   114,   206,   200,   154,   154,   157,   107,   107,   112,
+     157,   187,    56,   199,   191,   189,   201,   209,   105,     3,
+     156,   169,   204,   194,   107,   154,   107,   104,   204,   210,
+     211,   196,   203,    76,   105,   109,   156,   114,   105,    17,
+     113,   191,   195,   199,   105,   156,   195,   196,   188,   114
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2961,11 +2978,19 @@ yyreduce:
 
   case 36:
 
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+    {
+        ES3_ONLY("~", (yyvsp[(1) - (1)].lex).line);
+        (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpBitwiseNot;
+    }
     break;
 
   case 37:
 
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+    break;
+
+  case 38:
+
     {
         FRAG_VERT_ONLY("*", (yyvsp[(2) - (3)].lex).line);
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpMul, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
@@ -2977,7 +3002,7 @@ yyreduce:
     }
     break;
 
-  case 38:
+  case 39:
 
     {
         FRAG_VERT_ONLY("/", (yyvsp[(2) - (3)].lex).line);
@@ -2990,12 +3015,26 @@ yyreduce:
     }
     break;
 
-  case 39:
+  case 40:
+
+    {
+        FRAG_VERT_ONLY("%", (yyvsp[(2) - (3)].lex).line);
+        ES3_ONLY("%", (yyvsp[(2) - (3)].lex).line);
+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpIMod, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
+        if ((yyval.interm.intermTypedNode) == 0) {
+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "%", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            context->recover();
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
+        }
+    }
+    break;
+
+  case 41:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 40:
+  case 42:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpAdd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
@@ -3007,7 +3046,7 @@ yyreduce:
     }
     break;
 
-  case 41:
+  case 43:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpSub, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
@@ -3019,17 +3058,43 @@ yyreduce:
     }
     break;
 
-  case 42:
+  case 44:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 43:
+  case 45:
+
+    {
+        ES3_ONLY("<<", (yyvsp[(2) - (3)].lex).line);
+        context->intermediate.addBinaryMath(EOpBitShiftLeft, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
+        if ((yyval.interm.intermTypedNode) == 0) {
+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "<<", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            context->recover();
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
+        }
+    }
+    break;
+
+  case 46:
+
+    {
+        ES3_ONLY(">>", (yyvsp[(2) - (3)].lex).line);
+        context->intermediate.addBinaryMath(EOpBitShiftRight, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
+        if ((yyval.interm.intermTypedNode) == 0) {
+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, ">>", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            context->recover();
+            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
+        }
+    }
+    break;
+
+  case 47:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 44:
+  case 48:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLessThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
@@ -3043,7 +3108,7 @@ yyreduce:
     }
     break;
 
-  case 45:
+  case 49:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpGreaterThan, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
@@ -3057,7 +3122,7 @@ yyreduce:
     }
     break;
 
-  case 46:
+  case 50:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLessThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
@@ -3071,7 +3136,7 @@ yyreduce:
     }
     break;
 
-  case 47:
+  case 51:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpGreaterThanEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
@@ -3085,12 +3150,12 @@ yyreduce:
     }
     break;
 
-  case 48:
+  case 52:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 49:
+  case 53:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
@@ -3104,7 +3169,7 @@ yyreduce:
     }
     break;
 
-  case 50:
+  case 54:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpNotEqual, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
@@ -3118,32 +3183,38 @@ yyreduce:
     }
     break;
 
-  case 51:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
-    break;
-
-  case 52:
+  case 55:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 53:
+  case 56:
 
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+    {
+        ES3_ONLY("&", (yyvsp[(2) - (3)].lex).line);
+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpBitwiseAnd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
+        if ((yyval.interm.intermTypedNode) == 0) {
+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "&", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            context->recover();
+            ConstantUnion *unionArray = new ConstantUnion[1];
+            unionArray->setBConst(false);
+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConstExpr), (yyvsp[(2) - (3)].lex).line);
+        }
+    }
     break;
 
-  case 54:
+  case 57:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 55:
+  case 58:
 
     {
-        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalAnd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
+        ES3_ONLY("^", (yyvsp[(2) - (3)].lex).line);
+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpBitwiseXor, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
         if ((yyval.interm.intermTypedNode) == 0) {
-            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "&&", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "^", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
             context->recover();
             ConstantUnion *unionArray = new ConstantUnion[1];
             unionArray->setBConst(false);
@@ -3152,17 +3223,18 @@ yyreduce:
     }
     break;
 
-  case 56:
+  case 59:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 57:
+  case 60:
 
     {
-        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalXor, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
+        ES3_ONLY("|", (yyvsp[(2) - (3)].lex).line);
+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpBitwiseOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
         if ((yyval.interm.intermTypedNode) == 0) {
-            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "^^", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "|", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
             context->recover();
             ConstantUnion *unionArray = new ConstantUnion[1];
             unionArray->setBConst(false);
@@ -3171,17 +3243,17 @@ yyreduce:
     }
     break;
 
-  case 58:
+  case 61:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 59:
+  case 62:
 
     {
-        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalAnd, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
         if ((yyval.interm.intermTypedNode) == 0) {
-            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "||", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "&&", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
             context->recover();
             ConstantUnion *unionArray = new ConstantUnion[1];
             unionArray->setBConst(false);
@@ -3190,17 +3262,55 @@ yyreduce:
     }
     break;
 
-  case 60:
+  case 63:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 61:
+  case 64:
 
     {
-       if (context->boolErrorCheck((yyvsp[(2) - (5)].lex).line, (yyvsp[(1) - (5)].interm.intermTypedNode)))
-            context->recover();
-
+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalXor, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
+        if ((yyval.interm.intermTypedNode) == 0) {
+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "^^", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            context->recover();
+            ConstantUnion *unionArray = new ConstantUnion[1];
+            unionArray->setBConst(false);
+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConstExpr), (yyvsp[(2) - (3)].lex).line);
+        }
+    }
+    break;
+
+  case 65:
+
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+    break;
+
+  case 66:
+
+    {
+        (yyval.interm.intermTypedNode) = context->intermediate.addBinaryMath(EOpLogicalOr, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
+        if ((yyval.interm.intermTypedNode) == 0) {
+            context->binaryOpError((yyvsp[(2) - (3)].lex).line, "||", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
+            context->recover();
+            ConstantUnion *unionArray = new ConstantUnion[1];
+            unionArray->setBConst(false);
+            (yyval.interm.intermTypedNode) = context->intermediate.addConstantUnion(unionArray, TType(EbtBool, EbpUndefined, EvqConstExpr), (yyvsp[(2) - (3)].lex).line);
+        }
+    }
+    break;
+
+  case 67:
+
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
+    break;
+
+  case 68:
+
+    {
+       if (context->boolErrorCheck((yyvsp[(2) - (5)].lex).line, (yyvsp[(1) - (5)].interm.intermTypedNode)))
+            context->recover();
+
         (yyval.interm.intermTypedNode) = context->intermediate.addSelection((yyvsp[(1) - (5)].interm.intermTypedNode), (yyvsp[(3) - (5)].interm.intermTypedNode), (yyvsp[(5) - (5)].interm.intermTypedNode), (yyvsp[(2) - (5)].lex).line);
         if ((yyvsp[(3) - (5)].interm.intermTypedNode)->getType() != (yyvsp[(5) - (5)].interm.intermTypedNode)->getType())
             (yyval.interm.intermTypedNode) = 0;
@@ -3213,12 +3323,12 @@ yyreduce:
     }
     break;
 
-  case 62:
+  case 69:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 63:
+  case 70:
 
     {
         if (context->lValueErrorCheck((yyvsp[(2) - (3)].interm).line, "assign", (yyvsp[(1) - (3)].interm.intermTypedNode)))
@@ -3232,39 +3342,75 @@ yyreduce:
     }
     break;
 
-  case 64:
+  case 71:
 
     {                                    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpAssign; }
     break;
 
-  case 65:
+  case 72:
 
     { FRAG_VERT_ONLY("*=", (yyvsp[(1) - (1)].lex).line);     (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpMulAssign; }
     break;
 
-  case 66:
+  case 73:
 
     { FRAG_VERT_ONLY("/=", (yyvsp[(1) - (1)].lex).line);     (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpDivAssign; }
     break;
 
-  case 67:
+  case 74:
+
+    { ES3_ONLY("%=", (yyvsp[(1) - (1)].lex).line); 
+                     FRAG_VERT_ONLY("%=", (yyvsp[(1) - (1)].lex).line);     (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpIModAssign; }
+    break;
+
+  case 75:
 
     {                                    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpAddAssign; }
     break;
 
-  case 68:
+  case 76:
 
     {                                    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpSubAssign; }
     break;
 
-  case 69:
+  case 77:
+
+    { ES3_ONLY("<<=", (yyvsp[(1) - (1)].lex).line);
+                     FRAG_VERT_ONLY("<<=", (yyvsp[(1) - (1)].lex).line);    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpBitShiftLeftAssign; }
+    break;
+
+  case 78:
+
+    { ES3_ONLY(">>=", (yyvsp[(1) - (1)].lex).line);
+                     FRAG_VERT_ONLY(">>=", (yyvsp[(1) - (1)].lex).line);    (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpBitShiftRightAssign; }
+    break;
+
+  case 79:
+
+    { ES3_ONLY("&=", (yyvsp[(1) - (1)].lex).line);
+                     FRAG_VERT_ONLY("&=", (yyvsp[(1) - (1)].lex).line);     (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpBitwiseAndAssign; }
+    break;
+
+  case 80:
+
+    { ES3_ONLY("^=", (yyvsp[(1) - (1)].lex).line);
+                     FRAG_VERT_ONLY("^=", (yyvsp[(1) - (1)].lex).line);     (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpBitwiseXorAssign; }
+    break;
+
+  case 81:
+
+    { ES3_ONLY("|=", (yyvsp[(1) - (1)].lex).line);
+                     FRAG_VERT_ONLY("|=", (yyvsp[(1) - (1)].lex).line);     (yyval.interm).line = (yyvsp[(1) - (1)].lex).line; (yyval.interm).op = EOpBitwiseOrAssign; }
+    break;
+
+  case 82:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 70:
+  case 83:
 
     {
         (yyval.interm.intermTypedNode) = context->intermediate.addComma((yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yyvsp[(2) - (3)].lex).line);
@@ -3276,7 +3422,7 @@ yyreduce:
     }
     break;
 
-  case 71:
+  case 84:
 
     {
         if (context->constErrorCheck((yyvsp[(1) - (1)].interm.intermTypedNode)))
@@ -3285,7 +3431,7 @@ yyreduce:
     }
     break;
 
-  case 72:
+  case 85:
 
     {
         TFunction &function = *((yyvsp[(1) - (2)].interm).function);
@@ -3316,7 +3462,7 @@ yyreduce:
     }
     break;
 
-  case 73:
+  case 86:
 
     {
         if ((yyvsp[(1) - (2)].interm).intermAggregate)
@@ -3325,7 +3471,7 @@ yyreduce:
     }
     break;
 
-  case 74:
+  case 87:
 
     {
         if (!context->symbolTable.setDefaultPrecision( (yyvsp[(3) - (4)].interm.type), (yyvsp[(2) - (4)].interm.precision) )) {
@@ -3336,7 +3482,7 @@ yyreduce:
     }
     break;
 
-  case 75:
+  case 88:
 
     {
         //
@@ -3375,21 +3521,21 @@ yyreduce:
     }
     break;
 
-  case 76:
+  case 89:
 
     {
         (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
     }
     break;
 
-  case 77:
+  case 90:
 
     {
         (yyval.interm.function) = (yyvsp[(1) - (1)].interm.function);
     }
     break;
 
-  case 78:
+  case 91:
 
     {
         // Add the parameter
@@ -3401,7 +3547,7 @@ yyreduce:
     }
     break;
 
-  case 79:
+  case 92:
 
     {
         //
@@ -3423,7 +3569,7 @@ yyreduce:
     }
     break;
 
-  case 80:
+  case 93:
 
     {
         if ((yyvsp[(1) - (3)].interm.type).qualifier != EvqGlobal && (yyvsp[(1) - (3)].interm.type).qualifier != EvqTemporary) {
@@ -3444,7 +3590,7 @@ yyreduce:
     }
     break;
 
-  case 81:
+  case 94:
 
     {
         if ((yyvsp[(1) - (2)].interm.type).type == EbtVoid) {
@@ -3459,7 +3605,7 @@ yyreduce:
     }
     break;
 
-  case 82:
+  case 95:
 
     {
         // Check that we can make an array out of this type
@@ -3481,7 +3627,7 @@ yyreduce:
     }
     break;
 
-  case 83:
+  case 96:
 
     {
         (yyval.interm) = (yyvsp[(3) - (3)].interm);
@@ -3490,7 +3636,7 @@ yyreduce:
     }
     break;
 
-  case 84:
+  case 97:
 
     {
         (yyval.interm) = (yyvsp[(2) - (2)].interm);
@@ -3501,7 +3647,7 @@ yyreduce:
     }
     break;
 
-  case 85:
+  case 98:
 
     {
         (yyval.interm) = (yyvsp[(3) - (3)].interm);
@@ -3510,7 +3656,7 @@ yyreduce:
     }
     break;
 
-  case 86:
+  case 99:
 
     {
         (yyval.interm) = (yyvsp[(2) - (2)].interm);
@@ -3521,35 +3667,35 @@ yyreduce:
     }
     break;
 
-  case 87:
+  case 100:
 
     {
         (yyval.interm.qualifier) = EvqIn;
     }
     break;
 
-  case 88:
+  case 101:
 
     {
         (yyval.interm.qualifier) = EvqIn;
     }
     break;
 
-  case 89:
+  case 102:
 
     {
         (yyval.interm.qualifier) = EvqOut;
     }
     break;
 
-  case 90:
+  case 103:
 
     {
         (yyval.interm.qualifier) = EvqInOut;
     }
     break;
 
-  case 91:
+  case 104:
 
     {
         TParameter param = { 0, new TType((yyvsp[(1) - (1)].interm.type)) };
@@ -3557,14 +3703,14 @@ yyreduce:
     }
     break;
 
-  case 92:
+  case 105:
 
     {
         (yyval.interm) = (yyvsp[(1) - (1)].interm);
     }
     break;
 
-  case 93:
+  case 106:
 
     {
         if ((yyvsp[(1) - (3)].interm).type.type == EbtInvariant && !(yyvsp[(3) - (3)].lex).symbol)
@@ -3590,7 +3736,7 @@ yyreduce:
     }
     break;
 
-  case 94:
+  case 107:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
@@ -3612,7 +3758,7 @@ yyreduce:
     }
     break;
 
-  case 95:
+  case 108:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (6)].lex).line, (yyvsp[(1) - (6)].interm).type))
@@ -3640,7 +3786,7 @@ yyreduce:
     }
     break;
 
-  case 96:
+  case 109:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(3) - (5)].lex).line, (yyvsp[(1) - (5)].interm).type))
@@ -3664,7 +3810,7 @@ yyreduce:
     }
     break;
 
-  case 97:
+  case 110:
 
     {
         (yyval.interm).type = (yyvsp[(1) - (1)].interm.type);
@@ -3672,7 +3818,7 @@ yyreduce:
     }
     break;
 
-  case 98:
+  case 111:
 
     {
         TIntermSymbol* symbol = context->intermediate.addSymbol(0, *(yyvsp[(2) - (2)].lex).string, TType((yyvsp[(1) - (2)].interm.type)), (yyvsp[(2) - (2)].lex).line);
@@ -3694,7 +3840,7 @@ yyreduce:
     }
     break;
 
-  case 99:
+  case 112:
 
     {
         context->error((yyvsp[(2) - (4)].lex).line, "unsized array declarations not supported", (yyvsp[(2) - (4)].lex).string->c_str());
@@ -3706,7 +3852,7 @@ yyreduce:
     }
     break;
 
-  case 100:
+  case 113:
 
     {
         TType type = TType((yyvsp[(1) - (5)].interm.type));
@@ -3742,7 +3888,7 @@ yyreduce:
     }
     break;
 
-  case 101:
+  case 114:
 
     {
         if (context->structQualifierErrorCheck((yyvsp[(2) - (4)].lex).line, (yyvsp[(1) - (4)].interm.type)))
@@ -3766,7 +3912,7 @@ yyreduce:
     }
     break;
 
-  case 102:
+  case 115:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (2)].lex).line, context->symbolTable.atGlobalLevel(), "invariant varying"))
@@ -3787,7 +3933,7 @@ yyreduce:
     }
     break;
 
-  case 103:
+  case 116:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3800,7 +3946,7 @@ yyreduce:
     }
     break;
 
-  case 104:
+  case 117:
 
     {
         if ((yyvsp[(2) - (2)].interm.type).array) {
@@ -3824,28 +3970,28 @@ yyreduce:
     }
     break;
 
-  case 105:
+  case 118:
 
     {
         (yyval.interm.type).qualifier = EvqSmooth;
     }
     break;
 
-  case 106:
+  case 119:
 
     {
         (yyval.interm.type).qualifier = EvqFlat;
     }
     break;
 
-  case 107:
+  case 120:
 
     {
         (yyval.interm.qualifier) = EvqConstReadOnly;
     }
     break;
 
-  case 108:
+  case 121:
 
     {
         VERTEX_ONLY("attribute", (yyvsp[(1) - (1)].lex).line);
@@ -3856,7 +4002,7 @@ yyreduce:
     }
     break;
 
-  case 109:
+  case 122:
 
     {
         ES2_ONLY("varying", (yyvsp[(1) - (1)].lex).line);
@@ -3869,7 +4015,7 @@ yyreduce:
     }
     break;
 
-  case 110:
+  case 123:
 
     {
         ES2_ONLY("varying", (yyvsp[(1) - (2)].lex).line);
@@ -3882,21 +4028,21 @@ yyreduce:
     }
     break;
 
-  case 111:
+  case 124:
 
     {
         (yyval.interm.type).setBasic(EbtVoid, (yyvsp[(1) - (1)].interm.type).qualifier, (yyvsp[(1) - (1)].interm.type).line);
     }
     break;
 
-  case 112:
+  case 125:
 
     {
         (yyval.interm.type) = context->joinInterpolationQualifiers((yyvsp[(1) - (2)].interm.type).line, (yyvsp[(1) - (2)].interm.type).qualifier, (yyvsp[(2) - (2)].interm.type).line, (yyvsp[(2) - (2)].interm.type).qualifier);
     }
     break;
 
-  case 113:
+  case 126:
 
     {
         context->error((yyvsp[(1) - (1)].interm.type).line, "interpolation qualifier requires a fragment 'in' or vertex 'out' storage qualifier", getQualifierString((yyvsp[(1) - (1)].interm.type).qualifier));
@@ -3907,7 +4053,7 @@ yyreduce:
     }
     break;
 
-  case 114:
+  case 127:
 
     {
         (yyval.interm.type).qualifier = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -3915,7 +4061,7 @@ yyreduce:
     }
     break;
 
-  case 115:
+  case 128:
 
     {
         (yyval.interm.type).setBasic(EbtVoid, (yyvsp[(2) - (2)].interm.type).qualifier, (yyvsp[(2) - (2)].interm.type).line);
@@ -3923,7 +4069,7 @@ yyreduce:
     }
     break;
 
-  case 116:
+  case 129:
 
     {
         (yyval.interm.type).qualifier = EvqConstExpr;
@@ -3931,7 +4077,7 @@ yyreduce:
     }
     break;
 
-  case 117:
+  case 130:
 
     {
                ES3_ONLY("in", (yyvsp[(1) - (1)].lex).line);
@@ -3940,7 +4086,7 @@ yyreduce:
     }
     break;
 
-  case 118:
+  case 131:
 
     {
                ES3_ONLY("out", (yyvsp[(1) - (1)].lex).line);
@@ -3949,7 +4095,7 @@ yyreduce:
     }
     break;
 
-  case 119:
+  case 132:
 
     {
                ES3_ONLY("in", (yyvsp[(1) - (2)].lex).line);
@@ -3959,7 +4105,7 @@ yyreduce:
     }
     break;
 
-  case 120:
+  case 133:
 
     {
                ES3_ONLY("out", (yyvsp[(1) - (2)].lex).line);
@@ -3969,7 +4115,7 @@ yyreduce:
     }
     break;
 
-  case 121:
+  case 134:
 
     {
         if (context->globalErrorCheck((yyvsp[(1) - (1)].lex).line, context->symbolTable.atGlobalLevel(), "uniform"))
@@ -3979,7 +4125,7 @@ yyreduce:
     }
     break;
 
-  case 122:
+  case 135:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
@@ -3993,7 +4139,7 @@ yyreduce:
     }
     break;
 
-  case 123:
+  case 136:
 
     {
         (yyval.interm.type) = (yyvsp[(2) - (2)].interm.type);
@@ -4001,28 +4147,28 @@ yyreduce:
     }
     break;
 
-  case 124:
+  case 137:
 
     {
         (yyval.interm.precision) = EbpHigh;
     }
     break;
 
-  case 125:
+  case 138:
 
     {
         (yyval.interm.precision) = EbpMedium;
     }
     break;
 
-  case 126:
+  case 139:
 
     {
         (yyval.interm.precision) = EbpLow;
     }
     break;
 
-  case 127:
+  case 140:
 
     {
         ES3_ONLY("layout", (yyvsp[(1) - (4)].lex).line);
@@ -4030,49 +4176,49 @@ yyreduce:
     }
     break;
 
-  case 128:
+  case 141:
 
     {
         (yyval.interm.layoutQualifier) = (yyvsp[(1) - (1)].interm.layoutQualifier);
     }
     break;
 
-  case 129:
+  case 142:
 
     {
         (yyval.interm.layoutQualifier) = context->joinLayoutQualifiers((yyvsp[(1) - (3)].interm.layoutQualifier), (yyvsp[(3) - (3)].interm.layoutQualifier));
     }
     break;
 
-  case 130:
+  case 143:
 
     {
         (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (1)].lex).string, (yyvsp[(1) - (1)].lex).line);
     }
     break;
 
-  case 131:
+  case 144:
 
     {
         (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (3)].lex).string, (yyvsp[(1) - (3)].lex).line, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(3) - (3)].lex).i, (yyvsp[(3) - (3)].lex).line);
     }
     break;
 
-  case 132:
+  case 145:
 
     {
         (yyval.interm.layoutQualifier) = context->parseLayoutQualifier(*(yyvsp[(1) - (3)].lex).string, (yyvsp[(1) - (3)].lex).line, *(yyvsp[(3) - (3)].lex).string, (yyvsp[(3) - (3)].lex).i, (yyvsp[(3) - (3)].lex).line);
     }
     break;
 
-  case 133:
+  case 146:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (1)].interm.type);
     }
     break;
 
-  case 134:
+  case 147:
 
     {
         (yyval.interm.type) = (yyvsp[(1) - (4)].interm.type);
@@ -4088,7 +4234,7 @@ yyreduce:
     }
     break;
 
-  case 135:
+  case 148:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4096,7 +4242,7 @@ yyreduce:
     }
     break;
 
-  case 136:
+  case 149:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4104,7 +4250,7 @@ yyreduce:
     }
     break;
 
-  case 137:
+  case 150:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4112,7 +4258,7 @@ yyreduce:
     }
     break;
 
-  case 138:
+  case 151:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4120,7 +4266,7 @@ yyreduce:
     }
     break;
 
-  case 139:
+  case 152:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4128,7 +4274,7 @@ yyreduce:
     }
     break;
 
-  case 140:
+  case 153:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4137,7 +4283,7 @@ yyreduce:
     }
     break;
 
-  case 141:
+  case 154:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4146,7 +4292,7 @@ yyreduce:
     }
     break;
 
-  case 142:
+  case 155:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4155,7 +4301,7 @@ yyreduce:
     }
     break;
 
-  case 143:
+  case 156:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4164,7 +4310,7 @@ yyreduce:
     }
     break;
 
-  case 144:
+  case 157:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4173,7 +4319,7 @@ yyreduce:
     }
     break;
 
-  case 145:
+  case 158:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4182,7 +4328,7 @@ yyreduce:
     }
     break;
 
-  case 146:
+  case 159:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4191,7 +4337,7 @@ yyreduce:
     }
     break;
 
-  case 147:
+  case 160:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4200,7 +4346,7 @@ yyreduce:
     }
     break;
 
-  case 148:
+  case 161:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4209,7 +4355,7 @@ yyreduce:
     }
     break;
 
-  case 149:
+  case 162:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4218,7 +4364,7 @@ yyreduce:
     }
     break;
 
-  case 150:
+  case 163:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4227,7 +4373,7 @@ yyreduce:
     }
     break;
 
-  case 151:
+  case 164:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4236,7 +4382,7 @@ yyreduce:
     }
     break;
 
-  case 152:
+  case 165:
 
     {
         FRAG_VERT_ONLY("mat2", (yyvsp[(1) - (1)].lex).line);
@@ -4246,7 +4392,7 @@ yyreduce:
     }
     break;
 
-  case 153:
+  case 166:
 
     {
         FRAG_VERT_ONLY("mat3", (yyvsp[(1) - (1)].lex).line);
@@ -4256,7 +4402,7 @@ yyreduce:
     }
     break;
 
-  case 154:
+  case 167:
 
     {
         FRAG_VERT_ONLY("mat4", (yyvsp[(1) - (1)].lex).line);
@@ -4266,7 +4412,7 @@ yyreduce:
     }
     break;
 
-  case 155:
+  case 168:
 
     {
         FRAG_VERT_ONLY("mat2x3", (yyvsp[(1) - (1)].lex).line);
@@ -4276,7 +4422,7 @@ yyreduce:
     }
     break;
 
-  case 156:
+  case 169:
 
     {
         FRAG_VERT_ONLY("mat3x2", (yyvsp[(1) - (1)].lex).line);
@@ -4286,7 +4432,7 @@ yyreduce:
     }
     break;
 
-  case 157:
+  case 170:
 
     {
         FRAG_VERT_ONLY("mat2x4", (yyvsp[(1) - (1)].lex).line);
@@ -4296,7 +4442,7 @@ yyreduce:
     }
     break;
 
-  case 158:
+  case 171:
 
     {
         FRAG_VERT_ONLY("mat4x2", (yyvsp[(1) - (1)].lex).line);
@@ -4306,7 +4452,7 @@ yyreduce:
     }
     break;
 
-  case 159:
+  case 172:
 
     {
         FRAG_VERT_ONLY("mat3x4", (yyvsp[(1) - (1)].lex).line);
@@ -4316,7 +4462,7 @@ yyreduce:
     }
     break;
 
-  case 160:
+  case 173:
 
     {
         FRAG_VERT_ONLY("mat4x3", (yyvsp[(1) - (1)].lex).line);
@@ -4326,7 +4472,7 @@ yyreduce:
     }
     break;
 
-  case 161:
+  case 174:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -4335,7 +4481,7 @@ yyreduce:
     }
     break;
 
-  case 162:
+  case 175:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -4344,7 +4490,7 @@ yyreduce:
     }
     break;
 
-  case 163:
+  case 176:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -4357,7 +4503,7 @@ yyreduce:
     }
     break;
 
-  case 164:
+  case 177:
 
     {
         FRAG_VERT_ONLY("sampler3D", (yyvsp[(1) - (1)].lex).line);
@@ -4366,7 +4512,7 @@ yyreduce:
     }
     break;
 
-  case 165:
+  case 178:
 
     {
         FRAG_VERT_ONLY("sampler2DArray", (yyvsp[(1) - (1)].lex).line);
@@ -4375,7 +4521,7 @@ yyreduce:
     }
     break;
 
-  case 166:
+  case 179:
 
     {
         FRAG_VERT_ONLY("isampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -4384,7 +4530,7 @@ yyreduce:
     }
     break;
 
-  case 167:
+  case 180:
 
     {
         FRAG_VERT_ONLY("isampler3D", (yyvsp[(1) - (1)].lex).line);
@@ -4393,7 +4539,7 @@ yyreduce:
     }
     break;
 
-  case 168:
+  case 181:
 
     {
         FRAG_VERT_ONLY("isamplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -4402,7 +4548,7 @@ yyreduce:
     }
     break;
 
-  case 169:
+  case 182:
 
     {
         FRAG_VERT_ONLY("isampler2DArray", (yyvsp[(1) - (1)].lex).line);
@@ -4411,7 +4557,7 @@ yyreduce:
     }
     break;
 
-  case 170:
+  case 183:
 
     {
         FRAG_VERT_ONLY("usampler2D", (yyvsp[(1) - (1)].lex).line);
@@ -4420,7 +4566,7 @@ yyreduce:
     }
     break;
 
-  case 171:
+  case 184:
 
     {
         FRAG_VERT_ONLY("usampler3D", (yyvsp[(1) - (1)].lex).line);
@@ -4429,7 +4575,7 @@ yyreduce:
     }
     break;
 
-  case 172:
+  case 185:
 
     {
         FRAG_VERT_ONLY("usamplerCube", (yyvsp[(1) - (1)].lex).line);
@@ -4438,7 +4584,7 @@ yyreduce:
     }
     break;
 
-  case 173:
+  case 186:
 
     {
         FRAG_VERT_ONLY("usampler2DArray", (yyvsp[(1) - (1)].lex).line);
@@ -4447,7 +4593,7 @@ yyreduce:
     }
     break;
 
-  case 174:
+  case 187:
 
     {
         FRAG_VERT_ONLY("sampler2DShadow", (yyvsp[(1) - (1)].lex).line);
@@ -4456,7 +4602,7 @@ yyreduce:
     }
     break;
 
-  case 175:
+  case 188:
 
     {
         FRAG_VERT_ONLY("samplerCubeShadow", (yyvsp[(1) - (1)].lex).line);
@@ -4465,7 +4611,7 @@ yyreduce:
     }
     break;
 
-  case 176:
+  case 189:
 
     {
         FRAG_VERT_ONLY("sampler2DArrayShadow", (yyvsp[(1) - (1)].lex).line);
@@ -4474,7 +4620,7 @@ yyreduce:
     }
     break;
 
-  case 177:
+  case 190:
 
     {
         FRAG_VERT_ONLY("struct", (yyvsp[(1) - (1)].interm.type).line);
@@ -4483,7 +4629,7 @@ yyreduce:
     }
     break;
 
-  case 178:
+  case 191:
 
     {
         //
@@ -4497,12 +4643,12 @@ yyreduce:
     }
     break;
 
-  case 179:
+  case 192:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (3)].lex).line, *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 180:
+  case 193:
 
     {
         if (context->reservedErrorCheck((yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string))
@@ -4520,12 +4666,12 @@ yyreduce:
     }
     break;
 
-  case 181:
+  case 194:
 
     { if (context->enterStructDeclaration((yyvsp[(2) - (2)].lex).line, *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 182:
+  case 195:
 
     {
         TType* structure = new TType((yyvsp[(4) - (5)].interm.typeList), TString(""));
@@ -4535,14 +4681,14 @@ yyreduce:
     }
     break;
 
-  case 183:
+  case 196:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (1)].interm.typeList);
     }
     break;
 
-  case 184:
+  case 197:
 
     {
         (yyval.interm.typeList) = (yyvsp[(1) - (2)].interm.typeList);
@@ -4558,7 +4704,7 @@ yyreduce:
     }
     break;
 
-  case 185:
+  case 198:
 
     {
         (yyval.interm.typeList) = (yyvsp[(2) - (3)].interm.typeList);
@@ -4591,7 +4737,7 @@ yyreduce:
     }
     break;
 
-  case 186:
+  case 199:
 
     {
         (yyval.interm.typeList) = NewPoolTTypeList();
@@ -4599,14 +4745,14 @@ yyreduce:
     }
     break;
 
-  case 187:
+  case 200:
 
     {
         (yyval.interm.typeList)->push_back((yyvsp[(3) - (3)].interm.typeLine));
     }
     break;
 
-  case 188:
+  case 201:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (1)].lex).line, *(yyvsp[(1) - (1)].lex).string))
@@ -4618,7 +4764,7 @@ yyreduce:
     }
     break;
 
-  case 189:
+  case 202:
 
     {
         if (context->reservedErrorCheck((yyvsp[(1) - (4)].lex).line, *(yyvsp[(1) - (4)].lex).string))
@@ -4635,67 +4781,67 @@ yyreduce:
     }
     break;
 
-  case 190:
+  case 203:
 
     { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
-  case 191:
+  case 204:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 192:
+  case 205:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
-  case 193:
+  case 206:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 194:
+  case 207:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 195:
+  case 208:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 196:
+  case 209:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 197:
+  case 210:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 198:
+  case 211:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 199:
+  case 212:
 
     { (yyval.interm.intermAggregate) = 0; }
     break;
 
-  case 200:
+  case 213:
 
     { context->symbolTable.push(); }
     break;
 
-  case 201:
+  case 214:
 
     { context->symbolTable.pop(); }
     break;
 
-  case 202:
+  case 215:
 
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
@@ -4706,44 +4852,44 @@ yyreduce:
     }
     break;
 
-  case 203:
+  case 216:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 204:
+  case 217:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 205:
+  case 218:
 
     { context->symbolTable.push(); }
     break;
 
-  case 206:
+  case 219:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
-  case 207:
+  case 220:
 
     { context->symbolTable.push(); }
     break;
 
-  case 208:
+  case 221:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
-  case 209:
+  case 222:
 
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 210:
+  case 223:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4754,31 +4900,31 @@ yyreduce:
     }
     break;
 
-  case 211:
+  case 224:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     }
     break;
 
-  case 212:
+  case 225:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     }
     break;
 
-  case 213:
+  case 226:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 214:
+  case 227:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 215:
+  case 228:
 
     {
         if (context->boolErrorCheck((yyvsp[(1) - (5)].lex).line, (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4787,7 +4933,7 @@ yyreduce:
     }
     break;
 
-  case 216:
+  case 229:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4795,7 +4941,7 @@ yyreduce:
     }
     break;
 
-  case 217:
+  case 230:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4803,7 +4949,7 @@ yyreduce:
     }
     break;
 
-  case 218:
+  case 231:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4812,7 +4958,7 @@ yyreduce:
     }
     break;
 
-  case 219:
+  case 232:
 
     {
         TIntermNode* intermNode;
@@ -4830,12 +4976,12 @@ yyreduce:
     }
     break;
 
-  case 220:
+  case 233:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 221:
+  case 234:
 
     {
         context->symbolTable.pop();
@@ -4844,12 +4990,12 @@ yyreduce:
     }
     break;
 
-  case 222:
+  case 235:
 
     { ++context->loopNestingLevel; }
     break;
 
-  case 223:
+  case 236:
 
     {
         if (context->boolErrorCheck((yyvsp[(8) - (8)].lex).line, (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4860,12 +5006,12 @@ yyreduce:
     }
     break;
 
-  case 224:
+  case 237:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 225:
+  case 238:
 
     {
         context->symbolTable.pop();
@@ -4874,35 +5020,35 @@ yyreduce:
     }
     break;
 
-  case 226:
+  case 239:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 227:
+  case 240:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 228:
+  case 241:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 229:
+  case 242:
 
     {
         (yyval.interm.intermTypedNode) = 0;
     }
     break;
 
-  case 230:
+  case 243:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
@@ -4910,7 +5056,7 @@ yyreduce:
     }
     break;
 
-  case 231:
+  case 244:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4918,7 +5064,7 @@ yyreduce:
     }
     break;
 
-  case 232:
+  case 245:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4929,7 +5075,7 @@ yyreduce:
     }
     break;
 
-  case 233:
+  case 246:
 
     {
         if (context->loopNestingLevel <= 0) {
@@ -4940,7 +5086,7 @@ yyreduce:
     }
     break;
 
-  case 234:
+  case 247:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(1) - (2)].lex).line);
@@ -4951,7 +5097,7 @@ yyreduce:
     }
     break;
 
-  case 235:
+  case 248:
 
     {
         (yyval.interm.intermNode) = context->intermediate.addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
@@ -4966,7 +5112,7 @@ yyreduce:
     }
     break;
 
-  case 236:
+  case 249:
 
     {
         FRAG_ONLY("discard", (yyvsp[(1) - (2)].lex).line);
@@ -4974,7 +5120,7 @@ yyreduce:
     }
     break;
 
-  case 237:
+  case 250:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4982,7 +5128,7 @@ yyreduce:
     }
     break;
 
-  case 238:
+  case 251:
 
     {
         (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
@@ -4990,21 +5136,21 @@ yyreduce:
     }
     break;
 
-  case 239:
+  case 252:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 240:
+  case 253:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 241:
+  case 254:
 
     {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
@@ -5093,7 +5239,7 @@ yyreduce:
     }
     break;
 
-  case 242:
+  case 255:
 
     {
         //?? Check that all paths return a value if return type != void ?
index 521a57d..b190e26 100644 (file)
@@ -99,8 +99,14 @@ bool TOutputTraverser::visitBinary(Visit visit, TIntermBinary* node)
         case EOpVectorTimesMatrixAssign:  out << "matrix mult second child into first child";  break;
         case EOpVectorTimesScalarAssign:  out << "vector scale second child into first child"; break;
         case EOpMatrixTimesScalarAssign:  out << "matrix scale second child into first child"; break;
-        case EOpMatrixTimesMatrixAssign:  out << "matrix mult second child into first child"; break;
+        case EOpMatrixTimesMatrixAssign:  out << "matrix mult second child into first child";  break;
         case EOpDivAssign:                out << "divide second child into first child";       break;
+        case EOpIModAssign:               out << "modulo second child into first child";       break;
+        case EOpBitShiftLeftAssign:       out << "bit-wise shift first child left by second child";  break;
+        case EOpBitShiftRightAssign:      out << "bit-wise shift first child right by second child"; break;
+        case EOpBitwiseAndAssign:         out << "bit-wise and second child into first child"; break;
+        case EOpBitwiseXorAssign:         out << "bit-wise xor second child into first child"; break;
+        case EOpBitwiseOrAssign:          out << "bit-wise or second child into first child";  break;
         case EOpIndexDirect:   out << "direct index";   break;
         case EOpIndexIndirect: out << "indirect index"; break;
         case EOpIndexDirectStruct:   out << "direct index for structure";   break;
@@ -110,6 +116,12 @@ bool TOutputTraverser::visitBinary(Visit visit, TIntermBinary* node)
         case EOpSub:    out << "subtract";                break;
         case EOpMul:    out << "component-wise multiply"; break;
         case EOpDiv:    out << "divide";                  break;
+        case EOpIMod:   out << "modulo";                  break;
+        case EOpBitShiftLeft:     out << "bit-wise shift left";           break;
+        case EOpBitShiftRight:    out << "bit-wise shift right";          break;
+        case EOpBitwiseAnd:       out << "bit-wise and";                  break;
+        case EOpBitwiseXor:       out << "bit-wise xor";                  break;
+        case EOpBitwiseOr:        out << "bit-wise or";                   break;
         case EOpEqual:            out << "Compare Equal";                 break;
         case EOpNotEqual:         out << "Compare Not Equal";             break;
         case EOpLessThan:         out << "Compare Less Than";             break;
@@ -146,6 +158,7 @@ bool TOutputTraverser::visitUnary(Visit visit, TIntermUnary* node)
         case EOpNegative:       out << "Negate value";         break;
         case EOpVectorLogicalNot:
         case EOpLogicalNot:     out << "Negate conditional";   break;
+        case EOpBitwiseNot:     out << "bit-wise not";         break;
 
         case EOpPostIncrement:  out << "Post-Increment";       break;
         case EOpPostDecrement:  out << "Post-Decrement";       break;
index b48d15f..e0ca128 100644 (file)
@@ -40,6 +40,7 @@ enum TOperator {
     EOpNegative,
     EOpLogicalNot,
     EOpVectorLogicalNot,
+    EOpBitwiseNot,
 
     EOpPostIncrement,
     EOpPostDecrement,
@@ -78,6 +79,13 @@ enum TOperator {
     EOpLogicalXor,
     EOpLogicalAnd,
 
+    EOpIMod,
+    EOpBitShiftLeft,
+    EOpBitShiftRight,
+    EOpBitwiseAnd,
+    EOpBitwiseXor,
+    EOpBitwiseOr,
+
     EOpIndexDirect,
     EOpIndexIndirect,
     EOpIndexDirectStruct,
@@ -210,7 +218,13 @@ enum TOperator {
     EOpVectorTimesScalarAssign,
     EOpMatrixTimesScalarAssign,
     EOpMatrixTimesMatrixAssign,
-    EOpDivAssign
+    EOpDivAssign,
+    EOpIModAssign,
+    EOpBitShiftLeftAssign,
+    EOpBitShiftRightAssign,
+    EOpBitwiseAndAssign,
+    EOpBitwiseXorAssign,
+    EOpBitwiseOrAssign
 };
 
 extern const char* getOperatorString(TOperator op);