GLSL/SPV: Implement SPV_EXT_descriptor_indexing and GL_EXT_nonuniform_qualifier
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
index 74cb9e9..1434cba 100755
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -102,6 +102,7 @@
 struct OpDecorations {
     spv::Decoration precision;
     spv::Decoration noContraction;
+    spv::Decoration nonUniform;
 };
 
 } // namespace
@@ -136,12 +137,14 @@
 
     spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier);
     spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier);
+    spv::Decoration TranslateNonUniformDecoration(const glslang::TQualifier& qualifier);
     spv::BuiltIn TranslateBuiltInDecoration(glslang::TBuiltInVariable, bool memberDeclaration);
     spv::ImageFormat TranslateImageFormat(const glslang::TType& type);
     spv::SelectionControlMask TranslateSelectionControl(const glslang::TIntermSelection&) const;
     spv::SelectionControlMask TranslateSwitchControl(const glslang::TIntermSwitch&) const;
     spv::LoopControlMask TranslateLoopControl(const glslang::TIntermLoop&, unsigned int& dependencyLength) const;
     spv::StorageClass TranslateStorageClass(const glslang::TType&);
+    void addIndirectionIndexCapabilities(const glslang::TType& baseType, const glslang::TType& indexType);
     spv::Id createSpvVariable(const glslang::TIntermSymbol*);
     spv::Id getSampledType(const glslang::TSampler&);
     spv::Id getInvertedSwizzleType(const glslang::TIntermTyped&);
@@ -443,6 +446,17 @@
         return spv::DecorationMax;
 }
 
+// If glslang type is nonUniform, return SPIR-V NonUniform decoration.
+spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(const glslang::TQualifier& qualifier)
+{
+    if (qualifier.isNonUniform()) {
+        builder.addExtension("SPV_EXT_descriptor_indexing");
+        builder.addCapability(spv::CapabilityShaderNonUniformEXT);
+        return spv::DecorationNonUniformEXT;
+    } else
+        return spv::DecorationMax;
+}
+
 // Translate a glslang built-in variable to a SPIR-V built in decoration.  Also generate
 // associated capabilities when required.  For some built-in variables, a capability
 // is generated only when using the variable in an executable instruction, but not when
@@ -889,6 +903,42 @@
     return spv::StorageClassFunction;
 }
 
+// Add capabilities pertaining to how an array is indexed.
+void TGlslangToSpvTraverser::addIndirectionIndexCapabilities(const glslang::TType& baseType,
+                                                             const glslang::TType& indexType)
+{
+    if (indexType.getQualifier().isNonUniform()) {
+        // deal with an asserted non-uniform index
+        if (baseType.getBasicType() == glslang::EbtSampler) {
+            if (baseType.getQualifier().hasAttachment())
+                builder.addCapability(spv::CapabilityInputAttachmentArrayNonUniformIndexingEXT);
+            else if (baseType.isImage() && baseType.getSampler().dim == glslang::EsdBuffer)
+                builder.addCapability(spv::CapabilityStorageTexelBufferArrayNonUniformIndexingEXT);
+            else if (baseType.isTexture() && baseType.getSampler().dim == glslang::EsdBuffer)
+                builder.addCapability(spv::CapabilityUniformTexelBufferArrayNonUniformIndexingEXT);
+            else if (baseType.isImage())
+                builder.addCapability(spv::CapabilityStorageImageArrayNonUniformIndexingEXT);
+            else if (baseType.isTexture())
+                builder.addCapability(spv::CapabilitySampledImageArrayNonUniformIndexingEXT);
+        } else if (baseType.getBasicType() == glslang::EbtBlock) {
+            if (baseType.getQualifier().storage == glslang::EvqBuffer)
+                builder.addCapability(spv::CapabilityStorageBufferArrayNonUniformIndexingEXT);
+            else if (baseType.getQualifier().storage == glslang::EvqUniform)
+                builder.addCapability(spv::CapabilityUniformBufferArrayNonUniformIndexingEXT);
+        }
+    } else {
+        // assume a dynamically uniform index
+        if (baseType.getBasicType() == glslang::EbtSampler) {
+            if (baseType.getQualifier().hasAttachment())
+                builder.addCapability(spv::CapabilityInputAttachmentArrayDynamicIndexingEXT);
+            else if (baseType.isImage() && baseType.getSampler().dim == glslang::EsdBuffer)
+                builder.addCapability(spv::CapabilityStorageTexelBufferArrayDynamicIndexingEXT);
+            else if (baseType.isTexture() && baseType.getSampler().dim == glslang::EsdBuffer)
+                builder.addCapability(spv::CapabilityUniformTexelBufferArrayDynamicIndexingEXT);
+        }
+    }
+}
+
 // Return whether or not the given type is something that should be tied to a
 // descriptor set.
 bool IsDescriptorResource(const glslang::TType& type)
@@ -1286,7 +1336,8 @@
 
                 // do the operation
                 OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
-                                              TranslateNoContractionDecoration(node->getType().getQualifier()) };
+                                              TranslateNoContractionDecoration(node->getType().getQualifier()),
+                                              TranslateNonUniformDecoration(node->getType().getQualifier()) };
                 rValue = createBinaryOperation(node->getOp(), decorations,
                                                convertGlslangToSpvType(node->getType()), leftRValue, rValue,
                                                node->getType().getBasicType());
@@ -1362,6 +1413,8 @@
             node->getRight()->traverse(this);
             spv::Id index = accessChainLoad(node->getRight()->getType());
 
+            addIndirectionIndexCapabilities(node->getLeft()->getType(), node->getRight()->getType());
+
             // restore the saved access chain
             builder.setAccessChain(partial);
 
@@ -1415,7 +1468,8 @@
 
     // get result
     OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
-                                  TranslateNoContractionDecoration(node->getType().getQualifier()) };
+                                  TranslateNoContractionDecoration(node->getType().getQualifier()),
+                                  TranslateNonUniformDecoration(node->getType().getQualifier()) };
     spv::Id result = createBinaryOperation(node->getOp(), decorations,
                                            convertGlslangToSpvType(node->getType()), left, right,
                                            node->getLeft()->getType().getBasicType());
@@ -1454,6 +1508,11 @@
     if (node->getOp() == glslang::EOpArrayLength) {
         // Quite special; won't want to evaluate the operand.
 
+        // Currently, the front-end does not allow .length() on an array until it is sized,
+        // except for the last block membeor of an SSBO.
+        // TODO: If this changes, link-time sized arrays might show up here, and need their
+        // size extracted.
+
         // Normal .length() would have been constant folded by the front-end.
         // So, this has to be block.lastMember.length().
         // SPV wants "block" and member number as the operands, go get them.
@@ -1495,7 +1554,8 @@
         operand = accessChainLoad(node->getOperand()->getType());
 
     OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()),
-                                  TranslateNoContractionDecoration(node->getType().getQualifier()) };
+                                  TranslateNoContractionDecoration(node->getType().getQualifier()),
+                                  TranslateNonUniformDecoration(node->getType().getQualifier()) };
 
     // it could be a conversion
     if (! result)
@@ -1506,8 +1566,10 @@
         result = createUnaryOperation(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType());
 
     if (result) {
-        if (invertedType)
+        if (invertedType) {
             result = createInvertedSwizzle(decorations.precision, *node->getOperand(), result);
+            builder.addDecoration(result, decorations.nonUniform);
+        }
 
         builder.clearAccessChain();
         builder.setAccessChainRValue(result);
@@ -1934,7 +1996,8 @@
 
         builder.setLine(node->getLoc().line);
         OpDecorations decorations = { precision,
-                                      TranslateNoContractionDecoration(node->getType().getQualifier()) };
+                                      TranslateNoContractionDecoration(node->getType().getQualifier()),
+                                      TranslateNonUniformDecoration(node->getType().getQualifier()) };
         result = createBinaryOperation(binOp, decorations,
                                        resultType(), leftId, rightId,
                                        left->getType().getBasicType(), reduceComparison);
@@ -2035,7 +2098,8 @@
         case 1:
             {
                 OpDecorations decorations = { precision, 
-                                              TranslateNoContractionDecoration(node->getType().getQualifier()) };
+                                              TranslateNoContractionDecoration(node->getType().getQualifier()),
+                                              TranslateNonUniformDecoration(node->getType().getQualifier()) };
                 result = createUnaryOperation(
                     node->getOp(), decorations,
                     resultType(), operands.front(),
@@ -2651,8 +2715,13 @@
         // (Unsized arrays that survive through linking will be runtime-sized arrays)
         if (type.isSizedArray())
             spvType = builder.makeArrayType(spvType, makeArraySizeId(*type.getArraySizes(), 0), stride);
-        else
+        else {
+            if (!lastBufferBlockMember) {
+                builder.addExtension("SPV_EXT_descriptor_indexing");
+                builder.addCapability(spv::CapabilityRuntimeDescriptorArrayEXT);
+            }
             spvType = builder.makeRuntimeArray(spvType);
+        }
         if (stride > 0)
             builder.addDecoration(spvType, spv::DecorationArrayStride, stride);
     }
@@ -2824,6 +2893,9 @@
         if (builtIn != spv::BuiltInMax)
             builder.addMemberDecoration(spvType, member, spv::DecorationBuiltIn, (int)builtIn);
 
+        // nonuniform
+        builder.addMemberDecoration(spvType, member, TranslateNonUniformDecoration(glslangMember.getQualifier()));
+
         if (glslangIntermediate->getHlslFunctionality1() && memberQualifier.semanticName != nullptr) {
             builder.addExtension("SPV_GOOGLE_hlsl_functionality1");
             builder.addMemberDecoration(spvType, member, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE,
@@ -2891,7 +2963,8 @@
 spv::Id TGlslangToSpvTraverser::accessChainLoad(const glslang::TType& type)
 {
     spv::Id nominalTypeId = builder.accessChainGetInferredType();
-    spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type), nominalTypeId);
+    spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type),
+                                               TranslateNonUniformDecoration(type.getQualifier()), nominalTypeId);
 
     // Need to convert to abstract types when necessary
     if (type.getBasicType() == glslang::EbtBool) {
@@ -4102,6 +4175,7 @@
 
         spv::Id result = builder.createBinOp(binOp, typeId, left, right);
         builder.addDecoration(result, decorations.noContraction);
+        builder.addDecoration(result, decorations.nonUniform);
         return builder.setPrecision(result, decorations.precision);
     }
 
@@ -4113,6 +4187,7 @@
     if (reduceComparison && (op == glslang::EOpEqual || op == glslang::EOpNotEqual)
                          && (builder.isVector(left) || builder.isMatrix(left) || builder.isAggregate(left))) {
         spv::Id result = builder.createCompositeCompare(decorations.precision, left, right, op == glslang::EOpEqual);
+        builder.addDecoration(result, decorations.nonUniform);
         return result;
     }
 
@@ -4174,6 +4249,7 @@
     if (binOp != spv::OpNop) {
         spv::Id result = builder.createBinOp(binOp, typeId, left, right);
         builder.addDecoration(result, decorations.noContraction);
+        builder.addDecoration(result, decorations.nonUniform);
         return builder.setPrecision(result, decorations.precision);
     }
 
@@ -4235,6 +4311,7 @@
     if (firstClass) {
         spv::Id result = builder.createBinOp(op, typeId, left, right);
         builder.addDecoration(result, decorations.noContraction);
+        builder.addDecoration(result, decorations.nonUniform);
         return builder.setPrecision(result, decorations.precision);
     }
 
@@ -4274,11 +4351,13 @@
             spv::Id rightVec = rightMat ? builder.createCompositeExtract(right, vecType, indexes) : smearVec;
             spv::Id result = builder.createBinOp(op, vecType, leftVec, rightVec);
             builder.addDecoration(result, decorations.noContraction);
+            builder.addDecoration(result, decorations.nonUniform);
             results.push_back(builder.setPrecision(result, decorations.precision));
         }
 
         // put the pieces together
         spv::Id result = builder.setPrecision(builder.createCompositeConstruct(typeId, results), decorations.precision);
+        builder.addDecoration(result, decorations.nonUniform);
         return result;
     }
     default:
@@ -4687,6 +4766,7 @@
     }
 
     builder.addDecoration(id, decorations.noContraction);
+    builder.addDecoration(id, decorations.nonUniform);
     return builder.setPrecision(id, decorations.precision);
 }
 
@@ -4715,11 +4795,13 @@
         spv::Id srcVec  = builder.createCompositeExtract(operand, srcVecType, indexes);
         spv::Id destVec = builder.createUnaryOp(op, destVecType, srcVec);
         builder.addDecoration(destVec, decorations.noContraction);
+        builder.addDecoration(destVec, decorations.nonUniform);
         results.push_back(builder.setPrecision(destVec, decorations.precision));
     }
 
     // put the pieces together
     spv::Id result = builder.setPrecision(builder.createCompositeConstruct(typeId, results), decorations.precision);
+    builder.addDecoration(result, decorations.nonUniform);
     return result;
 }
 
@@ -5177,6 +5259,7 @@
         result = builder.createUnaryOp(convOp, destType, operand);
 
     result = builder.setPrecision(result, decorations.precision);
+    builder.addDecoration(result, decorations.nonUniform);
     return result;
 }
 
@@ -6396,6 +6479,9 @@
     if (builtIn != spv::BuiltInMax)
         builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
 
+    // nonuniform
+    builder.addDecoration(id, TranslateNonUniformDecoration(symbol->getType().getQualifier()));
+
 #ifdef NV_EXTENSIONS
     if (builtIn == spv::BuiltInSampleMask) {
           spv::Decoration decoration;
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index 1660787..27ce71c 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -2331,7 +2331,7 @@
 }
 
 // Comments in header
-Id Builder::accessChainLoad(Decoration precision, Id resultType)
+Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType)
 {
     Id id;
 
@@ -2377,6 +2377,7 @@
         // load through the access chain
         id = createLoad(collapseAccessChain());
         setPrecision(id, precision);
+        addDecoration(id, nonUniform);
     }
 
     // Done, unless there are swizzles to do
@@ -2397,6 +2398,7 @@
     if (accessChain.component != NoResult)
         id = setPrecision(createVectorExtractDynamic(id, resultType, accessChain.component), precision);
 
+    addDecoration(id, nonUniform);
     return id;
 }
 
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index dc76dae..099b1d9 100755
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -554,7 +554,7 @@
     void accessChainStore(Id rvalue);
 
     // use accessChain and swizzle to load an r-value
-    Id accessChainLoad(Decoration precision, Id ResultType);
+    Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType);
 
     // get the direct pointer for an l-value
     Id accessChainGetLValue();
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
index 9317d50..a905968 100755
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -255,6 +255,7 @@
     case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV";
 #endif
 
+    case DecorationNonUniformEXT:           return "DecorationNonUniformEXT";
     case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE";
     case DecorationHlslSemanticGOOGLE:      return "DecorationHlslSemanticGOOGLE";
     }
@@ -815,6 +816,19 @@
 
     case CapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT";
 
+    case CapabilityShaderNonUniformEXT:                          return "CapabilityShaderNonUniformEXT";
+    case CapabilityRuntimeDescriptorArrayEXT:                    return "CapabilityRuntimeDescriptorArrayEXT";
+    case CapabilityInputAttachmentArrayDynamicIndexingEXT:       return "CapabilityInputAttachmentArrayDynamicIndexingEXT";
+    case CapabilityUniformTexelBufferArrayDynamicIndexingEXT:    return "CapabilityUniformTexelBufferArrayDynamicIndexingEXT";
+    case CapabilityStorageTexelBufferArrayDynamicIndexingEXT:    return "CapabilityStorageTexelBufferArrayDynamicIndexingEXT";
+    case CapabilityUniformBufferArrayNonUniformIndexingEXT:      return "CapabilityUniformBufferArrayNonUniformIndexingEXT";
+    case CapabilitySampledImageArrayNonUniformIndexingEXT:       return "CapabilitySampledImageArrayNonUniformIndexingEXT";
+    case CapabilityStorageBufferArrayNonUniformIndexingEXT:      return "CapabilityStorageBufferArrayNonUniformIndexingEXT";
+    case CapabilityStorageImageArrayNonUniformIndexingEXT:       return "CapabilityStorageImageArrayNonUniformIndexingEXT";
+    case CapabilityInputAttachmentArrayNonUniformIndexingEXT:    return "CapabilityInputAttachmentArrayNonUniformIndexingEXT";
+    case CapabilityUniformTexelBufferArrayNonUniformIndexingEXT: return "CapabilityUniformTexelBufferArrayNonUniformIndexingEXT";
+    case CapabilityStorageTexelBufferArrayNonUniformIndexingEXT: return "CapabilityStorageTexelBufferArrayNonUniformIndexingEXT";
+
     default: return "Bad";
     }
 }
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
old mode 100755
new mode 100644
index 3c599f1..e21762d
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -393,6 +393,7 @@
     DecorationPassthroughNV = 5250,
     DecorationViewportRelativeNV = 5252,
     DecorationSecondaryViewportRelativeNV = 5256,
+    DecorationNonUniformEXT = 5300,
     DecorationHlslCounterBufferGOOGLE = 5634,
     DecorationHlslSemanticGOOGLE = 5635,
     DecorationMax = 0x7fffffff,
@@ -692,6 +693,18 @@
     CapabilityPerViewAttributesNV = 5260,
     CapabilityFragmentFullyCoveredEXT = 5265,
     CapabilityGroupNonUniformPartitionedNV = 5297,
+    CapabilityShaderNonUniformEXT = 5301,
+    CapabilityRuntimeDescriptorArrayEXT = 5302,
+    CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303,
+    CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304,
+    CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305,
+    CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306,
+    CapabilitySampledImageArrayNonUniformIndexingEXT = 5307,
+    CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308,
+    CapabilityStorageImageArrayNonUniformIndexingEXT = 5309,
+    CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310,
+    CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311,
+    CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
     CapabilitySubgroupShuffleINTEL = 5568,
     CapabilitySubgroupBufferBlockIOINTEL = 5569,
     CapabilitySubgroupImageBlockIOINTEL = 5570,
diff --git a/Test/310runtimeArray.vert b/Test/310runtimeArray.vert
new file mode 100644
index 0000000..3d7b018
--- /dev/null
+++ b/Test/310runtimeArray.vert
@@ -0,0 +1,18 @@
+#version 310 es
+
+precision highp float;
+layout(location=0) out float o;
+
+struct S  { float f; };
+buffer b1 { S s[]; };
+buffer b2 { S s[]; } b2name;
+buffer b3 { S s[]; } b3name[];
+buffer b4 { S s[]; } b4name[4];
+
+void main()
+{
+  o = s[5].f;
+  o += b2name.s[6].f;
+  o += b3name[3].s[7].f;
+  o += b4name[2].s[8].f;
+}
diff --git a/Test/baseResults/310runtimeArray.vert.out b/Test/baseResults/310runtimeArray.vert.out
new file mode 100755
index 0000000..84c731e
--- /dev/null
+++ b/Test/baseResults/310runtimeArray.vert.out
@@ -0,0 +1,145 @@
+310runtimeArray.vert
+ERROR: 0:9: '' : array size required 
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 310
+ERROR: node is still EOpNull!
+0:12  Function Definition: main( ( global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      move second child to first child ( temp highp float)
+0:14        'o' (layout( location=0) smooth out highp float)
+0:14        f: direct index for structure ( global highp float)
+0:14          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:14            s: direct index for structure (layout( column_major shared) buffer unsized 6-element array of structure{ global highp float f})
+0:14              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 6-element array of structure{ global highp float f} s})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            Constant:
+0:14              5 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:15      add second child into first child ( temp highp float)
+0:15        'o' (layout( location=0) smooth out highp float)
+0:15        f: direct index for structure ( global highp float)
+0:15          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:15            s: direct index for structure (layout( column_major shared) buffer unsized 7-element array of structure{ global highp float f})
+0:15              'b2name' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 7-element array of structure{ global highp float f} s})
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              6 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:16      add second child into first child ( temp highp float)
+0:16        'o' (layout( location=0) smooth out highp float)
+0:16        f: direct index for structure ( global highp float)
+0:16          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:16            s: direct index for structure (layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f})
+0:16              direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f} s})
+0:16                'b3name' (layout( column_major shared) buffer unsized 4-element array of block{layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f} s})
+0:16                Constant:
+0:16                  3 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Constant:
+0:16              7 (const int)
+0:16          Constant:
+0:16            0 (const int)
+0:17      add second child into first child ( temp highp float)
+0:17        'o' (layout( location=0) smooth out highp float)
+0:17        f: direct index for structure ( global highp float)
+0:17          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:17            s: direct index for structure (layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f})
+0:17              direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f} s})
+0:17                'b4name' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f} s})
+0:17                Constant:
+0:17                  2 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Constant:
+0:17              8 (const int)
+0:17          Constant:
+0:17            0 (const int)
+0:?   Linker Objects
+0:?     'o' (layout( location=0) smooth out highp float)
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 6-element array of structure{ global highp float f} s})
+0:?     'b2name' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 7-element array of structure{ global highp float f} s})
+0:?     'b3name' (layout( column_major shared) buffer unsized 4-element array of block{layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f} s})
+0:?     'b4name' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f} s})
+0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 310
+ERROR: node is still EOpNull!
+0:12  Function Definition: main( ( global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      move second child to first child ( temp highp float)
+0:14        'o' (layout( location=0) smooth out highp float)
+0:14        f: direct index for structure ( global highp float)
+0:14          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:14            s: direct index for structure (layout( column_major shared) buffer unsized 6-element array of structure{ global highp float f})
+0:14              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 6-element array of structure{ global highp float f} s})
+0:14              Constant:
+0:14                0 (const uint)
+0:14            Constant:
+0:14              5 (const int)
+0:14          Constant:
+0:14            0 (const int)
+0:15      add second child into first child ( temp highp float)
+0:15        'o' (layout( location=0) smooth out highp float)
+0:15        f: direct index for structure ( global highp float)
+0:15          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:15            s: direct index for structure (layout( column_major shared) buffer unsized 7-element array of structure{ global highp float f})
+0:15              'b2name' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 7-element array of structure{ global highp float f} s})
+0:15              Constant:
+0:15                0 (const int)
+0:15            Constant:
+0:15              6 (const int)
+0:15          Constant:
+0:15            0 (const int)
+0:16      add second child into first child ( temp highp float)
+0:16        'o' (layout( location=0) smooth out highp float)
+0:16        f: direct index for structure ( global highp float)
+0:16          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:16            s: direct index for structure (layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f})
+0:16              direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f} s})
+0:16                'b3name' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f} s})
+0:16                Constant:
+0:16                  3 (const int)
+0:16              Constant:
+0:16                0 (const int)
+0:16            Constant:
+0:16              7 (const int)
+0:16          Constant:
+0:16            0 (const int)
+0:17      add second child into first child ( temp highp float)
+0:17        'o' (layout( location=0) smooth out highp float)
+0:17        f: direct index for structure ( global highp float)
+0:17          direct index (layout( column_major shared) temp structure{ global highp float f})
+0:17            s: direct index for structure (layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f})
+0:17              direct index (layout( column_major shared) temp block{layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f} s})
+0:17                'b4name' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f} s})
+0:17                Constant:
+0:17                  2 (const int)
+0:17              Constant:
+0:17                0 (const int)
+0:17            Constant:
+0:17              8 (const int)
+0:17          Constant:
+0:17            0 (const int)
+0:?   Linker Objects
+0:?     'o' (layout( location=0) smooth out highp float)
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 6-element array of structure{ global highp float f} s})
+0:?     'b2name' (layout( column_major shared) buffer block{layout( column_major shared) buffer unsized 7-element array of structure{ global highp float f} s})
+0:?     'b3name' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer unsized 8-element array of structure{ global highp float f} s})
+0:?     'b4name' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer unsized 9-element array of structure{ global highp float f} s})
+0:?     'gl_VertexID' ( gl_VertexId highp int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId highp int InstanceId)
+
diff --git a/Test/baseResults/420.vert.out b/Test/baseResults/420.vert.out
index 4fa8516..25bce16 100644
--- a/Test/baseResults/420.vert.out
+++ b/Test/baseResults/420.vert.out
@@ -51,7 +51,7 @@
 ERROR: 0:157: 'assign' :  cannot convert from ' const float' to ' temp int'
 ERROR: 0:158: 'textureQueryLevels' : no matching overloaded function found 
 ERROR: 0:158: 'assign' :  cannot convert from ' const float' to ' temp int'
-WARNING: 0:161: '[]' : assuming array size of one for compile-time checking of binding numbers for unsized array 
+WARNING: 0:161: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
 ERROR: 51 compilation errors.  No code generated.
 
 
diff --git a/Test/baseResults/array.frag.out b/Test/baseResults/array.frag.out
index 9f50b4f..fadccf5 100644
--- a/Test/baseResults/array.frag.out
+++ b/Test/baseResults/array.frag.out
@@ -25,7 +25,7 @@
 ERROR: 0:104: 'constructor' : array constructor must have at least one argument 
 ERROR: 0:104: '=' :  cannot convert from ' const float' to ' global unsized 1-element array of int'
 ERROR: 0:106: 'constructor' : array argument must be sized 
-ERROR: 0:111: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:111: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
 ERROR: 0:111: 'variable indexing sampler array' : not supported with this profile: none
 ERROR: 28 compilation errors.  No code generated.
 
diff --git a/Test/baseResults/nonuniform.frag.out b/Test/baseResults/nonuniform.frag.out
new file mode 100755
index 0000000..2d4e9b0
--- /dev/null
+++ b/Test/baseResults/nonuniform.frag.out
@@ -0,0 +1,92 @@
+nonuniform.frag
+ERROR: 0:10: 'nonuniformEXT' : for non-parameter, can only apply to 'in' or no storage qualifier 
+ERROR: 0:11: 'nonuniformEXT' : for non-parameter, can only apply to 'in' or no storage qualifier 
+ERROR: 0:12: 'nonuniformEXT' : for non-parameter, can only apply to 'in' or no storage qualifier 
+ERROR: 0:22: 'nonuniformEXT' : for non-parameter, can only apply to 'in' or no storage qualifier 
+ERROR: 0:28: 'constructor' : too many arguments 
+ERROR: 0:28: 'assign' :  cannot convert from ' const float' to ' nonuniform temp int'
+ERROR: 0:29: 'constructor' : not enough data provided for construction 
+ERROR: 0:29: 'assign' :  cannot convert from ' const float' to ' nonuniform temp int'
+ERROR: 0:32: 'nonuniformEXT' : not allowed on block or structure members 
+ERROR: 0:33: 'nonuniformEXT' : not allowed on block or structure members 
+ERROR: 10 compilation errors.  No code generated.
+
+
+Shader version: 450
+Requested GL_EXT_nonuniform_qualifier
+ERROR: node is still EOpNull!
+0:14  Function Definition: foo(i1;i1; ( nonuniform temp int)
+0:14    Function Parameters: 
+0:14      'nupi' ( nonuniform in int)
+0:14      'f' ( nonuniform out int)
+0:16    Sequence
+0:16      Branch: Return with expression
+0:16        'nupi' ( nonuniform in int)
+0:19  Function Definition: main( ( global void)
+0:19    Function Parameters: 
+0:?     Sequence
+0:24      Function Call: foo(i1;i1; ( nonuniform temp int)
+0:24        'nu_li' ( nonuniform temp int)
+0:24        'nu_li' ( nonuniform temp int)
+0:27      move second child to first child ( temp int)
+0:27        'nu_li' ( nonuniform temp int)
+0:27        add ( nonuniform temp int)
+0:27          'a' ( nonuniform temp int)
+0:27          component-wise multiply ( nonuniform temp int)
+0:27            'a' ( temp int)
+0:27            Constant:
+0:27              2 (const int)
+0:28      'nu_li' ( nonuniform temp int)
+0:29      'nu_li' ( nonuniform temp int)
+0:?   Linker Objects
+0:?     'nonuniformEXT' ( global int)
+0:?     'nu_inv4' ( smooth nonuniform in 4-component vector of float)
+0:?     'nu_gf' ( nonuniform temp float)
+0:?     'nu_outv4' ( nonuniform out 4-component vector of float)
+0:?     'nu_uv4' ( nonuniform uniform 4-component vector of float)
+0:?     'nu_constf' ( nonuniform const float)
+0:?       1.000000
+0:?     'ins' (layout( location=1) smooth in structure{ global float a,  temp float b})
+0:?     'inb' (layout( location=3) in block{ in float a,  in float b})
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+Requested GL_EXT_nonuniform_qualifier
+ERROR: node is still EOpNull!
+0:14  Function Definition: foo(i1;i1; ( nonuniform temp int)
+0:14    Function Parameters: 
+0:14      'nupi' ( nonuniform in int)
+0:14      'f' ( nonuniform out int)
+0:16    Sequence
+0:16      Branch: Return with expression
+0:16        'nupi' ( nonuniform in int)
+0:19  Function Definition: main( ( global void)
+0:19    Function Parameters: 
+0:?     Sequence
+0:24      Function Call: foo(i1;i1; ( nonuniform temp int)
+0:24        'nu_li' ( nonuniform temp int)
+0:24        'nu_li' ( nonuniform temp int)
+0:27      move second child to first child ( temp int)
+0:27        'nu_li' ( nonuniform temp int)
+0:27        add ( nonuniform temp int)
+0:27          'a' ( nonuniform temp int)
+0:27          component-wise multiply ( nonuniform temp int)
+0:27            'a' ( temp int)
+0:27            Constant:
+0:27              2 (const int)
+0:28      'nu_li' ( nonuniform temp int)
+0:29      'nu_li' ( nonuniform temp int)
+0:?   Linker Objects
+0:?     'nonuniformEXT' ( global int)
+0:?     'nu_inv4' ( smooth nonuniform in 4-component vector of float)
+0:?     'nu_gf' ( nonuniform temp float)
+0:?     'nu_outv4' ( nonuniform out 4-component vector of float)
+0:?     'nu_uv4' ( nonuniform uniform 4-component vector of float)
+0:?     'nu_constf' ( nonuniform const float)
+0:?       1.000000
+0:?     'ins' (layout( location=1) smooth in structure{ global float a,  temp float b})
+0:?     'inb' (layout( location=3) in block{ in float a,  in float b})
+
diff --git a/Test/baseResults/runtimeArray.vert.out b/Test/baseResults/runtimeArray.vert.out
index 65c14f6..839c5bd 100755
--- a/Test/baseResults/runtimeArray.vert.out
+++ b/Test/baseResults/runtimeArray.vert.out
@@ -1,246 +1,316 @@
 runtimeArray.vert
-ERROR: 0:52: '[' :  array must be redeclared with a size before being indexed with a variable
-ERROR: 0:53: '[' :  array must be redeclared with a size before being indexed with a variable
-ERROR: 0:54: '[' :  array must be redeclared with a size before being indexed with a variable
-ERROR: 0:57: 'length' :  array must be declared with a size before using this method
-ERROR: 0:58: 'length' :  array must be declared with a size before using this method
-ERROR: 0:59: 'length' :  array must be declared with a size before using this method
+WARNING: 0:33: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
+WARNING: 0:34: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
+WARNING: 0:37: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
+WARNING: 0:38: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
+WARNING: 0:39: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
+WARNING: 0:40: '[]' : assuming binding count of one for compile-time checking of binding numbers for unsized array 
+ERROR: 0:61: '[' :  array must be redeclared with a size before being indexed with a variable
 ERROR: 0:62: '[' :  array must be redeclared with a size before being indexed with a variable
 ERROR: 0:63: '[' :  array must be redeclared with a size before being indexed with a variable
-ERROR: 0:64: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:66: 'length' :  array must be declared with a size before using this method
 ERROR: 0:67: 'length' :  array must be declared with a size before using this method
 ERROR: 0:68: 'length' :  array must be declared with a size before using this method
-ERROR: 0:69: 'length' :  array must be declared with a size before using this method
+ERROR: 0:71: '[' :  array must be redeclared with a size before being indexed with a variable
 ERROR: 0:72: '[' :  array must be redeclared with a size before being indexed with a variable
 ERROR: 0:73: '[' :  array must be redeclared with a size before being indexed with a variable
-ERROR: 0:74: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:76: 'length' :  array must be declared with a size before using this method
 ERROR: 0:77: 'length' :  array must be declared with a size before using this method
 ERROR: 0:78: 'length' :  array must be declared with a size before using this method
-ERROR: 0:79: 'length' :  array must be declared with a size before using this method
-ERROR: 18 compilation errors.  No code generated.
+ERROR: 0:81: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:82: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:83: '[' :  array must be redeclared with a size before being indexed with a variable
+ERROR: 0:86: 'length' :  array must be declared with a size before using this method
+ERROR: 0:87: 'length' :  array must be declared with a size before using this method
+ERROR: 0:88: 'length' :  array must be declared with a size before using this method
+ERROR: 0:100: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:101: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:102: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:103: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:104: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:105: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:106: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 0:107: 'variable index' : required extension not requested: GL_EXT_nonuniform_qualifier
+ERROR: 26 compilation errors.  No code generated.
 
 
 Shader version: 450
 ERROR: node is still EOpNull!
-0:35  Function Definition: main( ( global void)
-0:35    Function Parameters: 
-0:37    Sequence
-0:37      direct index (layout( column_major shared) temp int)
-0:37        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
-0:37          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:37          Constant:
-0:37            0 (const int)
-0:37        Constant:
-0:37          3 (const int)
-0:38      direct index (layout( column_major shared) temp float)
-0:38        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
-0:38          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:38          Constant:
-0:38            1 (const int)
-0:38        Constant:
-0:38          3 (const int)
-0:39      direct index (layout( column_major shared) temp int)
-0:39        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
-0:39          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:39          Constant:
-0:39            0 (const int)
-0:39        Constant:
-0:39          3 (const int)
-0:40      direct index (layout( column_major shared) temp float)
-0:40        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:40          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:40          Constant:
-0:40            1 (const int)
-0:40        Constant:
-0:40          3 (const int)
-0:42      direct index (layout( column_major shared) temp int)
-0:42        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
-0:42          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:42            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:42            Constant:
-0:42              3 (const int)
-0:42          Constant:
-0:42            0 (const int)
-0:42        Constant:
-0:42          3 (const int)
-0:43      direct index (layout( column_major shared) temp float)
-0:43        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
-0:43          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:43            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:43            Constant:
-0:43              3 (const int)
-0:43          Constant:
-0:43            1 (const int)
-0:43        Constant:
-0:43          3 (const int)
-0:44      direct index (layout( column_major shared) temp int)
-0:44        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
-0:44          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:44            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:44            Constant:
-0:44              3 (const int)
-0:44          Constant:
-0:44            0 (const int)
-0:44        Constant:
-0:44          3 (const int)
-0:45      direct index (layout( column_major shared) temp float)
-0:45        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:45          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:45            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:45            Constant:
-0:45              3 (const int)
-0:45          Constant:
-0:45            1 (const int)
-0:45        Constant:
-0:45          3 (const int)
-0:47      direct index (layout( column_major shared) temp int)
-0:47        aua: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
-0:47          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:44  Function Definition: main( ( global void)
+0:44    Function Parameters: 
+0:46    Sequence
+0:46      direct index (layout( column_major shared) temp int)
+0:46        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:46          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:46          Constant:
+0:46            0 (const int)
+0:46        Constant:
+0:46          3 (const int)
+0:47      direct index (layout( column_major shared) temp float)
+0:47        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:47          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
 0:47          Constant:
-0:47            0 (const uint)
+0:47            1 (const int)
 0:47        Constant:
 0:47          3 (const int)
-0:48      direct index (layout( column_major shared) temp float)
-0:48        aub: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
-0:48          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:48      direct index (layout( column_major shared) temp int)
+0:48        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:48          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
 0:48          Constant:
-0:48            1 (const uint)
+0:48            0 (const int)
 0:48        Constant:
 0:48          3 (const int)
-0:49      direct index (layout( column_major shared) temp int)
-0:49        aba: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
-0:49          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:49      direct index (layout( column_major shared) temp float)
+0:49        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:49          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
 0:49          Constant:
-0:49            0 (const uint)
+0:49            1 (const int)
 0:49        Constant:
 0:49          3 (const int)
-0:50      direct index (layout( column_major shared) temp float)
-0:50        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:50          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
-0:50          Constant:
-0:50            1 (const uint)
-0:50        Constant:
-0:50          3 (const int)
-0:52      indirect index (layout( column_major shared) temp int)
-0:52        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
-0:52          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:51      direct index (layout( column_major shared) temp int)
+0:51        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:51          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:51            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:51            Constant:
+0:51              3 (const int)
+0:51          Constant:
+0:51            0 (const int)
+0:51        Constant:
+0:51          3 (const int)
+0:52      direct index (layout( column_major shared) temp float)
+0:52        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:52          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:52            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:52            Constant:
+0:52              3 (const int)
 0:52          Constant:
-0:52            0 (const int)
-0:52        'i' ( global int)
-0:53      indirect index (layout( column_major shared) temp float)
-0:53        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
-0:53          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:52            1 (const int)
+0:52        Constant:
+0:52          3 (const int)
+0:53      direct index (layout( column_major shared) temp int)
+0:53        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:53          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:53            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:53            Constant:
+0:53              3 (const int)
 0:53          Constant:
-0:53            1 (const int)
-0:53        'i' ( global int)
-0:54      indirect index (layout( column_major shared) temp int)
-0:54        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
-0:54          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:53            0 (const int)
+0:53        Constant:
+0:53          3 (const int)
+0:54      direct index (layout( column_major shared) temp float)
+0:54        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:54          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:54            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:54            Constant:
+0:54              3 (const int)
 0:54          Constant:
-0:54            0 (const int)
-0:54        'i' ( global int)
-0:55      indirect index (layout( column_major shared) temp float)
-0:55        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:55          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:55          Constant:
-0:55            1 (const int)
-0:55        'i' ( global int)
-0:57      Constant:
-0:57        1 (const int)
-0:58      Constant:
-0:58        1 (const int)
-0:59      Constant:
-0:59        1 (const int)
-0:60      array length ( temp int)
-0:60        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:60          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:60          Constant:
-0:60            1 (const int)
-0:62      indirect index (layout( column_major shared) temp int)
-0:62        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
-0:62          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:62            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:62            Constant:
-0:62              1 (const int)
+0:54            1 (const int)
+0:54        Constant:
+0:54          3 (const int)
+0:56      direct index (layout( column_major shared) temp int)
+0:56        aua: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:56          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:56          Constant:
+0:56            0 (const uint)
+0:56        Constant:
+0:56          3 (const int)
+0:57      direct index (layout( column_major shared) temp float)
+0:57        aub: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:57          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:57          Constant:
+0:57            1 (const uint)
+0:57        Constant:
+0:57          3 (const int)
+0:58      direct index (layout( column_major shared) temp int)
+0:58        aba: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:58          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:58          Constant:
+0:58            0 (const uint)
+0:58        Constant:
+0:58          3 (const int)
+0:59      direct index (layout( column_major shared) temp float)
+0:59        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:59          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:59          Constant:
+0:59            1 (const uint)
+0:59        Constant:
+0:59          3 (const int)
+0:61      indirect index (layout( column_major shared) temp int)
+0:61        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:61          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:61          Constant:
+0:61            0 (const int)
+0:61        'i' ( global int)
+0:62      indirect index (layout( column_major shared) temp float)
+0:62        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:62          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
 0:62          Constant:
-0:62            0 (const int)
+0:62            1 (const int)
 0:62        'i' ( global int)
-0:63      indirect index (layout( column_major shared) temp float)
-0:63        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
-0:63          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:63            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:63            Constant:
-0:63              1 (const int)
+0:63      indirect index (layout( column_major shared) temp int)
+0:63        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:63          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
 0:63          Constant:
-0:63            1 (const int)
+0:63            0 (const int)
 0:63        'i' ( global int)
-0:64      indirect index (layout( column_major shared) temp int)
-0:64        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
-0:64          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:64            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:64            Constant:
-0:64              1 (const int)
+0:64      indirect index (layout( column_major shared) temp float)
+0:64        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:64          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
 0:64          Constant:
-0:64            0 (const int)
+0:64            1 (const int)
 0:64        'i' ( global int)
-0:65      indirect index (layout( column_major shared) temp float)
-0:65        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:65          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:65            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:65            Constant:
-0:65              1 (const int)
-0:65          Constant:
-0:65            1 (const int)
-0:65        'i' ( global int)
+0:66      Constant:
+0:66        1 (const int)
 0:67      Constant:
 0:67        1 (const int)
 0:68      Constant:
 0:68        1 (const int)
-0:69      Constant:
-0:69        1 (const int)
-0:70      array length ( temp int)
-0:70        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:70          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:70            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:70            Constant:
-0:70              1 (const int)
-0:70          Constant:
-0:70            1 (const int)
-0:72      indirect index (layout( column_major shared) temp int)
-0:72        aua: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
-0:72          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:69      array length ( temp int)
+0:69        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:69          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:69          Constant:
+0:69            1 (const int)
+0:71      indirect index (layout( column_major shared) temp int)
+0:71        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:71          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:71            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:71            Constant:
+0:71              1 (const int)
+0:71          Constant:
+0:71            0 (const int)
+0:71        'i' ( global int)
+0:72      indirect index (layout( column_major shared) temp float)
+0:72        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:72          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:72            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:72            Constant:
+0:72              1 (const int)
 0:72          Constant:
-0:72            0 (const uint)
+0:72            1 (const int)
 0:72        'i' ( global int)
-0:73      indirect index (layout( column_major shared) temp float)
-0:73        aub: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
-0:73          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:73      indirect index (layout( column_major shared) temp int)
+0:73        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:73          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:73            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:73            Constant:
+0:73              1 (const int)
 0:73          Constant:
-0:73            1 (const uint)
+0:73            0 (const int)
 0:73        'i' ( global int)
-0:74      indirect index (layout( column_major shared) temp int)
-0:74        aba: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
-0:74          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:74      indirect index (layout( column_major shared) temp float)
+0:74        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:74          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:74            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:74            Constant:
+0:74              1 (const int)
 0:74          Constant:
-0:74            0 (const uint)
+0:74            1 (const int)
 0:74        'i' ( global int)
-0:75      indirect index (layout( column_major shared) temp float)
-0:75        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:75          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
-0:75          Constant:
-0:75            1 (const uint)
-0:75        'i' ( global int)
+0:76      Constant:
+0:76        1 (const int)
 0:77      Constant:
 0:77        1 (const int)
 0:78      Constant:
 0:78        1 (const int)
-0:79      Constant:
-0:79        1 (const int)
-0:80      array length ( temp int)
-0:80        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:80          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
-0:80          Constant:
-0:80            1 (const uint)
+0:79      array length ( temp int)
+0:79        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:79          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:79            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:79            Constant:
+0:79              1 (const int)
+0:79          Constant:
+0:79            1 (const int)
+0:81      indirect index (layout( column_major shared) temp int)
+0:81        aua: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:81          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:81          Constant:
+0:81            0 (const uint)
+0:81        'i' ( global int)
+0:82      indirect index (layout( column_major shared) temp float)
+0:82        aub: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:82          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:82          Constant:
+0:82            1 (const uint)
+0:82        'i' ( global int)
+0:83      indirect index (layout( column_major shared) temp int)
+0:83        aba: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:83          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:83          Constant:
+0:83            0 (const uint)
+0:83        'i' ( global int)
+0:84      indirect index (layout( column_major shared) temp float)
+0:84        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:84          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:84          Constant:
+0:84            1 (const uint)
+0:84        'i' ( global int)
+0:86      Constant:
+0:86        1 (const int)
+0:87      Constant:
+0:87        1 (const int)
+0:88      Constant:
+0:88        1 (const int)
+0:89      array length ( temp int)
+0:89        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:89          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:89          Constant:
+0:89            1 (const uint)
+0:91      direct index (layout( binding=1) temp samplerBuffer)
+0:91        'uniformTexelBufferDyn' (layout( binding=1) uniform runtime-sized array of samplerBuffer)
+0:91        Constant:
+0:91          1 (const int)
+0:92      direct index (layout( binding=2 r32f) temp imageBuffer)
+0:92        'storageTexelBufferDyn' (layout( binding=2 r32f) uniform runtime-sized array of imageBuffer)
+0:92        Constant:
+0:92          1 (const int)
+0:93      direct index (layout( binding=3 column_major shared) temp block{layout( column_major shared) uniform float a})
+0:93        'uniformBuffer' (layout( binding=3 column_major shared) uniform runtime-sized array of block{layout( column_major shared) uniform float a})
+0:93        Constant:
+0:93          1 (const int)
+0:94      direct index (layout( binding=4 column_major shared) temp block{layout( column_major shared) buffer float b})
+0:94        'storageBuffer' (layout( binding=4 column_major shared) buffer runtime-sized array of block{layout( column_major shared) buffer float b})
+0:94        Constant:
+0:94          1 (const int)
+0:95      direct index (layout( binding=5) temp sampler2D)
+0:95        'sampledImage' (layout( binding=5) uniform runtime-sized array of sampler2D)
+0:95        Constant:
+0:95          1 (const int)
+0:96      direct index (layout( binding=6 r32f) temp image2D)
+0:96        'storageImage' (layout( binding=6 r32f) uniform runtime-sized array of image2D)
+0:96        Constant:
+0:96          1 (const int)
+0:97      direct index (layout( binding=8) temp samplerBuffer)
+0:97        'uniformTexelBuffer' (layout( binding=8) uniform runtime-sized array of samplerBuffer)
+0:97        Constant:
+0:97          1 (const int)
+0:98      direct index (layout( binding=9 r32f) temp imageBuffer)
+0:98        'storageTexelBuffer' (layout( binding=9 r32f) uniform runtime-sized array of imageBuffer)
+0:98        Constant:
+0:98          1 (const int)
+0:100      indirect index (layout( binding=1) temp samplerBuffer)
+0:100        'uniformTexelBufferDyn' (layout( binding=1) uniform runtime-sized array of samplerBuffer)
+0:100        'i' ( global int)
+0:101      indirect index (layout( binding=2 r32f) temp imageBuffer)
+0:101        'storageTexelBufferDyn' (layout( binding=2 r32f) uniform runtime-sized array of imageBuffer)
+0:101        'i' ( global int)
+0:102      indirect index (layout( binding=3 column_major shared) temp block{layout( column_major shared) uniform float a})
+0:102        'uniformBuffer' (layout( binding=3 column_major shared) uniform runtime-sized array of block{layout( column_major shared) uniform float a})
+0:102        'i' ( global int)
+0:103      indirect index (layout( binding=4 column_major shared) temp block{layout( column_major shared) buffer float b})
+0:103        'storageBuffer' (layout( binding=4 column_major shared) buffer runtime-sized array of block{layout( column_major shared) buffer float b})
+0:103        'i' ( global int)
+0:104      indirect index (layout( binding=5) temp sampler2D)
+0:104        'sampledImage' (layout( binding=5) uniform runtime-sized array of sampler2D)
+0:104        'i' ( global int)
+0:105      indirect index (layout( binding=6 r32f) temp image2D)
+0:105        'storageImage' (layout( binding=6 r32f) uniform runtime-sized array of image2D)
+0:105        'i' ( global int)
+0:106      indirect index (layout( binding=8) temp samplerBuffer)
+0:106        'uniformTexelBuffer' (layout( binding=8) uniform runtime-sized array of samplerBuffer)
+0:106        'i' ( global int)
+0:107      indirect index (layout( binding=9 r32f) temp imageBuffer)
+0:107        'storageTexelBuffer' (layout( binding=9 r32f) uniform runtime-sized array of imageBuffer)
+0:107        'i' ( global int)
 0:?   Linker Objects
 0:?     'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
 0:?     'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
@@ -248,6 +318,14 @@
 0:?     'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
 0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
 0:?     'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:?     'uniformTexelBufferDyn' (layout( binding=1) uniform runtime-sized array of samplerBuffer)
+0:?     'storageTexelBufferDyn' (layout( binding=2 r32f) uniform runtime-sized array of imageBuffer)
+0:?     'uniformBuffer' (layout( binding=3 column_major shared) uniform runtime-sized array of block{layout( column_major shared) uniform float a})
+0:?     'storageBuffer' (layout( binding=4 column_major shared) buffer runtime-sized array of block{layout( column_major shared) buffer float b})
+0:?     'sampledImage' (layout( binding=5) uniform runtime-sized array of sampler2D)
+0:?     'storageImage' (layout( binding=6 r32f) uniform runtime-sized array of image2D)
+0:?     'uniformTexelBuffer' (layout( binding=8) uniform runtime-sized array of samplerBuffer)
+0:?     'storageTexelBuffer' (layout( binding=9 r32f) uniform runtime-sized array of imageBuffer)
 0:?     'i' ( global int)
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
@@ -258,225 +336,281 @@
 
 Shader version: 450
 ERROR: node is still EOpNull!
-0:35  Function Definition: main( ( global void)
-0:35    Function Parameters: 
-0:37    Sequence
-0:37      direct index (layout( column_major shared) temp int)
-0:37        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
-0:37          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:37          Constant:
-0:37            0 (const int)
-0:37        Constant:
-0:37          3 (const int)
-0:38      direct index (layout( column_major shared) temp float)
-0:38        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
-0:38          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:38          Constant:
-0:38            1 (const int)
-0:38        Constant:
-0:38          3 (const int)
-0:39      direct index (layout( column_major shared) temp int)
-0:39        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
-0:39          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:39          Constant:
-0:39            0 (const int)
-0:39        Constant:
-0:39          3 (const int)
-0:40      direct index (layout( column_major shared) temp float)
-0:40        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:40          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:40          Constant:
-0:40            1 (const int)
-0:40        Constant:
-0:40          3 (const int)
-0:42      direct index (layout( column_major shared) temp int)
-0:42        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
-0:42          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:42            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:42            Constant:
-0:42              3 (const int)
-0:42          Constant:
-0:42            0 (const int)
-0:42        Constant:
-0:42          3 (const int)
-0:43      direct index (layout( column_major shared) temp float)
-0:43        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
-0:43          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:43            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:43            Constant:
-0:43              3 (const int)
-0:43          Constant:
-0:43            1 (const int)
-0:43        Constant:
-0:43          3 (const int)
-0:44      direct index (layout( column_major shared) temp int)
-0:44        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
-0:44          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:44            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:44            Constant:
-0:44              3 (const int)
-0:44          Constant:
-0:44            0 (const int)
-0:44        Constant:
-0:44          3 (const int)
-0:45      direct index (layout( column_major shared) temp float)
-0:45        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:45          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:45            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:45            Constant:
-0:45              3 (const int)
-0:45          Constant:
-0:45            1 (const int)
-0:45        Constant:
-0:45          3 (const int)
-0:47      direct index (layout( column_major shared) temp int)
-0:47        aua: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
-0:47          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:44  Function Definition: main( ( global void)
+0:44    Function Parameters: 
+0:46    Sequence
+0:46      direct index (layout( column_major shared) temp int)
+0:46        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:46          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:46          Constant:
+0:46            0 (const int)
+0:46        Constant:
+0:46          3 (const int)
+0:47      direct index (layout( column_major shared) temp float)
+0:47        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:47          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
 0:47          Constant:
-0:47            0 (const uint)
+0:47            1 (const int)
 0:47        Constant:
 0:47          3 (const int)
-0:48      direct index (layout( column_major shared) temp float)
-0:48        aub: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
-0:48          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:48      direct index (layout( column_major shared) temp int)
+0:48        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:48          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
 0:48          Constant:
-0:48            1 (const uint)
+0:48            0 (const int)
 0:48        Constant:
 0:48          3 (const int)
-0:49      direct index (layout( column_major shared) temp int)
-0:49        aba: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
-0:49          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:49      direct index (layout( column_major shared) temp float)
+0:49        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:49          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
 0:49          Constant:
-0:49            0 (const uint)
+0:49            1 (const int)
 0:49        Constant:
 0:49          3 (const int)
-0:50      direct index (layout( column_major shared) temp float)
-0:50        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:50          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
-0:50          Constant:
-0:50            1 (const uint)
-0:50        Constant:
-0:50          3 (const int)
-0:52      indirect index (layout( column_major shared) temp int)
-0:52        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
-0:52          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:51      direct index (layout( column_major shared) temp int)
+0:51        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:51          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:51            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:51            Constant:
+0:51              3 (const int)
+0:51          Constant:
+0:51            0 (const int)
+0:51        Constant:
+0:51          3 (const int)
+0:52      direct index (layout( column_major shared) temp float)
+0:52        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:52          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:52            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:52            Constant:
+0:52              3 (const int)
 0:52          Constant:
-0:52            0 (const int)
-0:52        'i' ( global int)
-0:53      indirect index (layout( column_major shared) temp float)
-0:53        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
-0:53          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:52            1 (const int)
+0:52        Constant:
+0:52          3 (const int)
+0:53      direct index (layout( column_major shared) temp int)
+0:53        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:53          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:53            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:53            Constant:
+0:53              3 (const int)
 0:53          Constant:
-0:53            1 (const int)
-0:53        'i' ( global int)
-0:54      indirect index (layout( column_major shared) temp int)
-0:54        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
-0:54          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:53            0 (const int)
+0:53        Constant:
+0:53          3 (const int)
+0:54      direct index (layout( column_major shared) temp float)
+0:54        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:54          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:54            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:54            Constant:
+0:54              3 (const int)
 0:54          Constant:
-0:54            0 (const int)
-0:54        'i' ( global int)
-0:55      indirect index (layout( column_major shared) temp float)
-0:55        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:55          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:55          Constant:
-0:55            1 (const int)
-0:55        'i' ( global int)
-0:57      Constant:
-0:57        1 (const int)
-0:58      Constant:
-0:58        1 (const int)
-0:59      Constant:
-0:59        1 (const int)
-0:60      array length ( temp int)
-0:60        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:60          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:60          Constant:
-0:60            1 (const int)
-0:62      indirect index (layout( column_major shared) temp int)
-0:62        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
-0:62          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:62            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:62            Constant:
-0:62              1 (const int)
+0:54            1 (const int)
+0:54        Constant:
+0:54          3 (const int)
+0:56      direct index (layout( column_major shared) temp int)
+0:56        aua: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:56          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:56          Constant:
+0:56            0 (const uint)
+0:56        Constant:
+0:56          3 (const int)
+0:57      direct index (layout( column_major shared) temp float)
+0:57        aub: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:57          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:57          Constant:
+0:57            1 (const uint)
+0:57        Constant:
+0:57          3 (const int)
+0:58      direct index (layout( column_major shared) temp int)
+0:58        aba: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:58          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:58          Constant:
+0:58            0 (const uint)
+0:58        Constant:
+0:58          3 (const int)
+0:59      direct index (layout( column_major shared) temp float)
+0:59        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:59          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:59          Constant:
+0:59            1 (const uint)
+0:59        Constant:
+0:59          3 (const int)
+0:61      indirect index (layout( column_major shared) temp int)
+0:61        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:61          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:61          Constant:
+0:61            0 (const int)
+0:61        'i' ( global int)
+0:62      indirect index (layout( column_major shared) temp float)
+0:62        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:62          'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
 0:62          Constant:
-0:62            0 (const int)
+0:62            1 (const int)
 0:62        'i' ( global int)
-0:63      indirect index (layout( column_major shared) temp float)
-0:63        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
-0:63          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:63            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
-0:63            Constant:
-0:63              1 (const int)
+0:63      indirect index (layout( column_major shared) temp int)
+0:63        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:63          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
 0:63          Constant:
-0:63            1 (const int)
+0:63            0 (const int)
 0:63        'i' ( global int)
-0:64      indirect index (layout( column_major shared) temp int)
-0:64        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
-0:64          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:64            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:64            Constant:
-0:64              1 (const int)
+0:64      indirect index (layout( column_major shared) temp float)
+0:64        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:64          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
 0:64          Constant:
-0:64            0 (const int)
+0:64            1 (const int)
 0:64        'i' ( global int)
-0:65      indirect index (layout( column_major shared) temp float)
-0:65        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:65          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:65            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:65            Constant:
-0:65              1 (const int)
-0:65          Constant:
-0:65            1 (const int)
-0:65        'i' ( global int)
+0:66      Constant:
+0:66        1 (const int)
 0:67      Constant:
 0:67        1 (const int)
 0:68      Constant:
 0:68        1 (const int)
-0:69      Constant:
-0:69        1 (const int)
-0:70      array length ( temp int)
-0:70        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:70          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:70            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
-0:70            Constant:
-0:70              1 (const int)
-0:70          Constant:
-0:70            1 (const int)
-0:72      indirect index (layout( column_major shared) temp int)
-0:72        aua: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
-0:72          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:69      array length ( temp int)
+0:69        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:69          'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:69          Constant:
+0:69            1 (const int)
+0:71      indirect index (layout( column_major shared) temp int)
+0:71        a: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:71          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:71            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:71            Constant:
+0:71              1 (const int)
+0:71          Constant:
+0:71            0 (const int)
+0:71        'i' ( global int)
+0:72      indirect index (layout( column_major shared) temp float)
+0:72        b: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:72          direct index (layout( column_major shared) temp block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:72            'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
+0:72            Constant:
+0:72              1 (const int)
 0:72          Constant:
-0:72            0 (const uint)
+0:72            1 (const int)
 0:72        'i' ( global int)
-0:73      indirect index (layout( column_major shared) temp float)
-0:73        aub: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
-0:73          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:73      indirect index (layout( column_major shared) temp int)
+0:73        a: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:73          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:73            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:73            Constant:
+0:73              1 (const int)
 0:73          Constant:
-0:73            1 (const uint)
+0:73            0 (const int)
 0:73        'i' ( global int)
-0:74      indirect index (layout( column_major shared) temp int)
-0:74        aba: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
-0:74          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:74      indirect index (layout( column_major shared) temp float)
+0:74        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:74          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:74            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:74            Constant:
+0:74              1 (const int)
 0:74          Constant:
-0:74            0 (const uint)
+0:74            1 (const int)
 0:74        'i' ( global int)
-0:75      indirect index (layout( column_major shared) temp float)
-0:75        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:75          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
-0:75          Constant:
-0:75            1 (const uint)
-0:75        'i' ( global int)
+0:76      Constant:
+0:76        1 (const int)
 0:77      Constant:
 0:77        1 (const int)
 0:78      Constant:
 0:78        1 (const int)
-0:79      Constant:
-0:79        1 (const int)
-0:80      array length ( temp int)
-0:80        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
-0:80          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
-0:80          Constant:
-0:80            1 (const uint)
+0:79      array length ( temp int)
+0:79        b: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:79          direct index (layout( column_major shared) temp block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:79            'bufa' (layout( column_major shared) buffer 4-element array of block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
+0:79            Constant:
+0:79              1 (const int)
+0:79          Constant:
+0:79            1 (const int)
+0:81      indirect index (layout( column_major shared) temp int)
+0:81        aua: direct index for structure (layout( column_major shared) uniform runtime-sized array of int)
+0:81          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:81          Constant:
+0:81            0 (const uint)
+0:81        'i' ( global int)
+0:82      indirect index (layout( column_major shared) temp float)
+0:82        aub: direct index for structure (layout( column_major shared) uniform runtime-sized array of float)
+0:82          'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:82          Constant:
+0:82            1 (const uint)
+0:82        'i' ( global int)
+0:83      indirect index (layout( column_major shared) temp int)
+0:83        aba: direct index for structure (layout( column_major shared) buffer runtime-sized array of int)
+0:83          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:83          Constant:
+0:83            0 (const uint)
+0:83        'i' ( global int)
+0:84      indirect index (layout( column_major shared) temp float)
+0:84        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:84          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:84          Constant:
+0:84            1 (const uint)
+0:84        'i' ( global int)
+0:86      Constant:
+0:86        1 (const int)
+0:87      Constant:
+0:87        1 (const int)
+0:88      Constant:
+0:88        1 (const int)
+0:89      array length ( temp int)
+0:89        abb: direct index for structure (layout( column_major shared) buffer runtime-sized array of float)
+0:89          'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
+0:89          Constant:
+0:89            1 (const uint)
+0:91      direct index (layout( binding=1) temp samplerBuffer)
+0:91        'uniformTexelBufferDyn' (layout( binding=1) uniform runtime-sized array of samplerBuffer)
+0:91        Constant:
+0:91          1 (const int)
+0:92      direct index (layout( binding=2 r32f) temp imageBuffer)
+0:92        'storageTexelBufferDyn' (layout( binding=2 r32f) uniform runtime-sized array of imageBuffer)
+0:92        Constant:
+0:92          1 (const int)
+0:93      direct index (layout( binding=3 column_major shared) temp block{layout( column_major shared) uniform float a})
+0:93        'uniformBuffer' (layout( binding=3 column_major shared) uniform runtime-sized array of block{layout( column_major shared) uniform float a})
+0:93        Constant:
+0:93          1 (const int)
+0:94      direct index (layout( binding=4 column_major shared) temp block{layout( column_major shared) buffer float b})
+0:94        'storageBuffer' (layout( binding=4 column_major shared) buffer runtime-sized array of block{layout( column_major shared) buffer float b})
+0:94        Constant:
+0:94          1 (const int)
+0:95      direct index (layout( binding=5) temp sampler2D)
+0:95        'sampledImage' (layout( binding=5) uniform runtime-sized array of sampler2D)
+0:95        Constant:
+0:95          1 (const int)
+0:96      direct index (layout( binding=6 r32f) temp image2D)
+0:96        'storageImage' (layout( binding=6 r32f) uniform runtime-sized array of image2D)
+0:96        Constant:
+0:96          1 (const int)
+0:97      direct index (layout( binding=8) temp samplerBuffer)
+0:97        'uniformTexelBuffer' (layout( binding=8) uniform runtime-sized array of samplerBuffer)
+0:97        Constant:
+0:97          1 (const int)
+0:98      direct index (layout( binding=9 r32f) temp imageBuffer)
+0:98        'storageTexelBuffer' (layout( binding=9 r32f) uniform runtime-sized array of imageBuffer)
+0:98        Constant:
+0:98          1 (const int)
+0:100      indirect index (layout( binding=1) temp samplerBuffer)
+0:100        'uniformTexelBufferDyn' (layout( binding=1) uniform runtime-sized array of samplerBuffer)
+0:100        'i' ( global int)
+0:101      indirect index (layout( binding=2 r32f) temp imageBuffer)
+0:101        'storageTexelBufferDyn' (layout( binding=2 r32f) uniform runtime-sized array of imageBuffer)
+0:101        'i' ( global int)
+0:102      indirect index (layout( binding=3 column_major shared) temp block{layout( column_major shared) uniform float a})
+0:102        'uniformBuffer' (layout( binding=3 column_major shared) uniform runtime-sized array of block{layout( column_major shared) uniform float a})
+0:102        'i' ( global int)
+0:103      indirect index (layout( binding=4 column_major shared) temp block{layout( column_major shared) buffer float b})
+0:103        'storageBuffer' (layout( binding=4 column_major shared) buffer runtime-sized array of block{layout( column_major shared) buffer float b})
+0:103        'i' ( global int)
+0:104      indirect index (layout( binding=5) temp sampler2D)
+0:104        'sampledImage' (layout( binding=5) uniform runtime-sized array of sampler2D)
+0:104        'i' ( global int)
+0:105      indirect index (layout( binding=6 r32f) temp image2D)
+0:105        'storageImage' (layout( binding=6 r32f) uniform runtime-sized array of image2D)
+0:105        'i' ( global int)
+0:106      indirect index (layout( binding=8) temp samplerBuffer)
+0:106        'uniformTexelBuffer' (layout( binding=8) uniform runtime-sized array of samplerBuffer)
+0:106        'i' ( global int)
+0:107      indirect index (layout( binding=9 r32f) temp imageBuffer)
+0:107        'storageTexelBuffer' (layout( binding=9 r32f) uniform runtime-sized array of imageBuffer)
+0:107        'i' ( global int)
 0:?   Linker Objects
 0:?     'buf' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int a, layout( column_major shared) buffer runtime-sized array of float b})
 0:?     'ubuf' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
@@ -484,6 +618,14 @@
 0:?     'ubufa' (layout( column_major shared) uniform 4-element array of block{layout( column_major shared) uniform runtime-sized array of int a, layout( column_major shared) uniform runtime-sized array of float b})
 0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer runtime-sized array of int aba, layout( column_major shared) buffer runtime-sized array of float abb})
 0:?     'anon@1' (layout( column_major shared) uniform block{layout( column_major shared) uniform runtime-sized array of int aua, layout( column_major shared) uniform runtime-sized array of float aub})
+0:?     'uniformTexelBufferDyn' (layout( binding=1) uniform runtime-sized array of samplerBuffer)
+0:?     'storageTexelBufferDyn' (layout( binding=2 r32f) uniform runtime-sized array of imageBuffer)
+0:?     'uniformBuffer' (layout( binding=3 column_major shared) uniform runtime-sized array of block{layout( column_major shared) uniform float a})
+0:?     'storageBuffer' (layout( binding=4 column_major shared) buffer runtime-sized array of block{layout( column_major shared) buffer float b})
+0:?     'sampledImage' (layout( binding=5) uniform runtime-sized array of sampler2D)
+0:?     'storageImage' (layout( binding=6 r32f) uniform runtime-sized array of image2D)
+0:?     'uniformTexelBuffer' (layout( binding=8) uniform runtime-sized array of samplerBuffer)
+0:?     'storageTexelBuffer' (layout( binding=9 r32f) uniform runtime-sized array of imageBuffer)
 0:?     'i' ( global int)
 0:?     'gl_VertexID' ( gl_VertexId int VertexId)
 0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out
new file mode 100755
index 0000000..dff71cf
--- /dev/null
+++ b/Test/baseResults/spv.nonuniform.frag.out
@@ -0,0 +1,359 @@
+spv.nonuniform.frag
+// Module Version 10000
+// Generated by (magic number): 80006
+// Id's are bound by 210
+
+                              Capability Shader
+                              Capability InputAttachment
+                              Capability SampledBuffer
+                              Capability ImageBuffer
+                              Capability CapabilityShaderNonUniformEXT
+                              Capability CapabilityRuntimeDescriptorArrayEXT
+                              Capability CapabilityInputAttachmentArrayDynamicIndexingEXT
+                              Capability CapabilityUniformTexelBufferArrayDynamicIndexingEXT
+                              Capability CapabilityStorageTexelBufferArrayDynamicIndexingEXT
+                              Capability CapabilityUniformBufferArrayNonUniformIndexingEXT
+                              Capability CapabilitySampledImageArrayNonUniformIndexingEXT
+                              Capability CapabilityStorageBufferArrayNonUniformIndexingEXT
+                              Capability CapabilityStorageImageArrayNonUniformIndexingEXT
+                              Capability CapabilityInputAttachmentArrayNonUniformIndexingEXT
+                              Capability CapabilityUniformTexelBufferArrayNonUniformIndexingEXT
+                              Capability CapabilityStorageTexelBufferArrayNonUniformIndexingEXT
+                              Extension  "SPV_EXT_descriptor_indexing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 33 90
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_nonuniform_qualifier"
+                              Name 4  "main"
+                              Name 11  "foo(i1;i1;"
+                              Name 9  "nupi"
+                              Name 10  "f"
+                              Name 16  "a"
+                              Name 17  "nu_li"
+                              Name 18  "param"
+                              Name 20  "param"
+                              Name 30  "b"
+                              Name 33  "nu_inv4"
+                              Name 39  "nu_gf"
+                              Name 45  "inputAttachmentDyn"
+                              Name 46  "dyn_i"
+                              Name 62  "uniformTexelBufferDyn"
+                              Name 76  "storageTexelBufferDyn"
+                              Name 85  "uname"
+                              MemberName 85(uname) 0  "a"
+                              Name 88  "uniformBuffer"
+                              Name 90  "nu_ii"
+                              Name 97  "bname"
+                              MemberName 97(bname) 0  "b"
+                              Name 100  "storageBuffer"
+                              Name 110  "sampledImage"
+                              Name 125  "storageImage"
+                              Name 137  "inputAttachment"
+                              Name 147  "uniformTexelBuffer"
+                              Name 158  "storageTexelBuffer"
+                              Name 168  "v"
+                              Name 183  "uv"
+                              Name 193  "m"
+                              Name 201  "S"
+                              MemberName 201(S) 0  "a"
+                              Name 203  "s"
+                              Decorate 13 DecorationNonUniformEXT
+                              Decorate 17(nu_li) DecorationNonUniformEXT
+                              Decorate 19 DecorationNonUniformEXT
+                              Decorate 23 DecorationNonUniformEXT
+                              Decorate 26 DecorationNonUniformEXT
+                              Decorate 27 DecorationNonUniformEXT
+                              Decorate 33(nu_inv4) Location 0
+                              Decorate 33(nu_inv4) DecorationNonUniformEXT
+                              Decorate 38 DecorationNonUniformEXT
+                              Decorate 39(nu_gf) DecorationNonUniformEXT
+                              Decorate 40 DecorationNonUniformEXT
+                              Decorate 41 DecorationNonUniformEXT
+                              Decorate 45(inputAttachmentDyn) DescriptorSet 0
+                              Decorate 45(inputAttachmentDyn) Binding 0
+                              Decorate 45(inputAttachmentDyn) InputAttachmentIndex 0
+                              Decorate 62(uniformTexelBufferDyn) DescriptorSet 0
+                              Decorate 62(uniformTexelBufferDyn) Binding 1
+                              Decorate 76(storageTexelBufferDyn) DescriptorSet 0
+                              Decorate 76(storageTexelBufferDyn) Binding 2
+                              MemberDecorate 85(uname) 0 Offset 0
+                              Decorate 85(uname) Block
+                              Decorate 88(uniformBuffer) DescriptorSet 0
+                              Decorate 88(uniformBuffer) Binding 3
+                              Decorate 90(nu_ii) Flat
+                              Decorate 90(nu_ii) Location 1
+                              Decorate 90(nu_ii) DecorationNonUniformEXT
+                              Decorate 91 DecorationNonUniformEXT
+                              Decorate 94 DecorationNonUniformEXT
+                              MemberDecorate 97(bname) 0 Offset 0
+                              Decorate 97(bname) BufferBlock
+                              Decorate 100(storageBuffer) DescriptorSet 0
+                              Decorate 100(storageBuffer) Binding 4
+                              Decorate 101 DecorationNonUniformEXT
+                              Decorate 103 DecorationNonUniformEXT
+                              Decorate 110(sampledImage) DescriptorSet 0
+                              Decorate 110(sampledImage) Binding 5
+                              Decorate 111 DecorationNonUniformEXT
+                              Decorate 114 DecorationNonUniformEXT
+                              Decorate 125(storageImage) DescriptorSet 0
+                              Decorate 125(storageImage) Binding 6
+                              Decorate 126 DecorationNonUniformEXT
+                              Decorate 129 DecorationNonUniformEXT
+                              Decorate 137(inputAttachment) DescriptorSet 0
+                              Decorate 137(inputAttachment) Binding 7
+                              Decorate 137(inputAttachment) InputAttachmentIndex 1
+                              Decorate 138 DecorationNonUniformEXT
+                              Decorate 140 DecorationNonUniformEXT
+                              Decorate 147(uniformTexelBuffer) DescriptorSet 0
+                              Decorate 147(uniformTexelBuffer) Binding 8
+                              Decorate 148 DecorationNonUniformEXT
+                              Decorate 150 DecorationNonUniformEXT
+                              Decorate 158(storageTexelBuffer) DescriptorSet 0
+                              Decorate 158(storageTexelBuffer) Binding 9
+                              Decorate 159 DecorationNonUniformEXT
+                              Decorate 161 DecorationNonUniformEXT
+                              Decorate 168(v) DecorationNonUniformEXT
+                              Decorate 171 DecorationNonUniformEXT
+                              Decorate 173 DecorationNonUniformEXT
+                              Decorate 178 DecorationNonUniformEXT
+                              Decorate 180 DecorationNonUniformEXT
+                              Decorate 184 DecorationNonUniformEXT
+                              Decorate 186 DecorationNonUniformEXT
+                              Decorate 188 DecorationNonUniformEXT
+                              Decorate 193(m) DecorationNonUniformEXT
+                              Decorate 195 DecorationNonUniformEXT
+                              Decorate 203(s) DecorationNonUniformEXT
+                              Decorate 205 DecorationNonUniformEXT
+                              Decorate 207 DecorationNonUniformEXT
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               8:             TypeFunction 6(int) 7(ptr) 7(ptr)
+              25:      6(int) Constant 2
+              28:             TypeFloat 32
+              29:             TypePointer Function 28(float)
+              31:             TypeVector 28(float) 4
+              32:             TypePointer Input 31(fvec4)
+     33(nu_inv4):     32(ptr) Variable Input
+              34:             TypeInt 32 0
+              35:     34(int) Constant 0
+              36:             TypePointer Input 28(float)
+              42:             TypeImage 28(float) SubpassData nonsampled format:Unknown
+              43:             TypeRuntimeArray 42
+              44:             TypePointer UniformConstant 43
+45(inputAttachmentDyn):     44(ptr) Variable UniformConstant
+              48:             TypePointer UniformConstant 42
+              51:      6(int) Constant 0
+              52:             TypeVector 6(int) 2
+              53:   52(ivec2) ConstantComposite 51 51
+              58:             TypeImage 28(float) Buffer sampled format:Unknown
+              59:             TypeSampledImage 58
+              60:             TypeRuntimeArray 59
+              61:             TypePointer UniformConstant 60
+62(uniformTexelBufferDyn):     61(ptr) Variable UniformConstant
+              64:             TypePointer UniformConstant 59
+              67:      6(int) Constant 1
+              73:             TypeImage 28(float) Buffer nonsampled format:R32f
+              74:             TypeRuntimeArray 73
+              75:             TypePointer UniformConstant 74
+76(storageTexelBufferDyn):     75(ptr) Variable UniformConstant
+              78:             TypePointer UniformConstant 73
+       85(uname):             TypeStruct 28(float)
+              86:             TypeRuntimeArray 85(uname)
+              87:             TypePointer Uniform 86
+88(uniformBuffer):     87(ptr) Variable Uniform
+              89:             TypePointer Input 6(int)
+       90(nu_ii):     89(ptr) Variable Input
+              92:             TypePointer Uniform 28(float)
+       97(bname):             TypeStruct 28(float)
+              98:             TypeRuntimeArray 97(bname)
+              99:             TypePointer Uniform 98
+100(storageBuffer):     99(ptr) Variable Uniform
+             106:             TypeImage 28(float) 2D sampled format:Unknown
+             107:             TypeSampledImage 106
+             108:             TypeRuntimeArray 107
+             109:             TypePointer UniformConstant 108
+110(sampledImage):    109(ptr) Variable UniformConstant
+             112:             TypePointer UniformConstant 107
+             115:             TypeVector 28(float) 2
+             116:   28(float) Constant 1056964608
+             117:  115(fvec2) ConstantComposite 116 116
+             122:             TypeImage 28(float) 2D nonsampled format:R32f
+             123:             TypeRuntimeArray 122
+             124:             TypePointer UniformConstant 123
+125(storageImage):    124(ptr) Variable UniformConstant
+             127:             TypePointer UniformConstant 122
+             130:   52(ivec2) ConstantComposite 67 67
+             135:             TypeRuntimeArray 42
+             136:             TypePointer UniformConstant 135
+137(inputAttachment):    136(ptr) Variable UniformConstant
+             145:             TypeRuntimeArray 59
+             146:             TypePointer UniformConstant 145
+147(uniformTexelBuffer):    146(ptr) Variable UniformConstant
+             156:             TypeRuntimeArray 73
+             157:             TypePointer UniformConstant 156
+158(storageTexelBuffer):    157(ptr) Variable UniformConstant
+             166:             TypeVector 6(int) 4
+             167:             TypePointer Function 166(ivec4)
+             169:     34(int) Constant 1
+             176:     34(int) Constant 2
+             191:             TypeMatrix 31(fvec4) 4
+             192:             TypePointer Function 191
+          201(S):             TypeStruct 6(int)
+             202:             TypePointer Function 201(S)
+         4(main):           2 Function None 3
+               5:             Label
+           16(a):      7(ptr) Variable Function
+       17(nu_li):      7(ptr) Variable Function
+       18(param):      7(ptr) Variable Function
+       20(param):      7(ptr) Variable Function
+           30(b):     29(ptr) Variable Function
+       39(nu_gf):     29(ptr) Variable Function
+       46(dyn_i):      7(ptr) Variable Function
+          168(v):    167(ptr) Variable Function
+         183(uv):    167(ptr) Variable Function
+          193(m):    192(ptr) Variable Function
+          203(s):    202(ptr) Variable Function
+              19:      6(int) Load 17(nu_li)
+                              Store 18(param) 19
+              21:      6(int) FunctionCall 11(foo(i1;i1;) 18(param) 20(param)
+              22:      6(int) Load 20(param)
+                              Store 17(nu_li) 22
+                              Store 16(a) 21
+              23:      6(int) Load 16(a)
+              24:      6(int) Load 16(a)
+              26:      6(int) IMul 24 25
+              27:      6(int) IAdd 23 26
+                              Store 17(nu_li) 27
+              37:     36(ptr) AccessChain 33(nu_inv4) 35
+              38:   28(float) Load 37
+              40:   28(float) Load 39(nu_gf)
+              41:   28(float) FMul 38 40
+                              Store 30(b) 41
+              47:      6(int) Load 46(dyn_i)
+              49:     48(ptr) AccessChain 45(inputAttachmentDyn) 47
+              50:          42 Load 49
+              54:   31(fvec4) ImageRead 50 53
+              55:   28(float) CompositeExtract 54 0
+              56:   28(float) Load 30(b)
+              57:   28(float) FAdd 56 55
+                              Store 30(b) 57
+              63:      6(int) Load 46(dyn_i)
+              65:     64(ptr) AccessChain 62(uniformTexelBufferDyn) 63
+              66:          59 Load 65
+              68:          58 Image 66
+              69:   31(fvec4) ImageFetch 68 67
+              70:   28(float) CompositeExtract 69 0
+              71:   28(float) Load 30(b)
+              72:   28(float) FAdd 71 70
+                              Store 30(b) 72
+              77:      6(int) Load 46(dyn_i)
+              79:     78(ptr) AccessChain 76(storageTexelBufferDyn) 77
+              80:          73 Load 79
+              81:   31(fvec4) ImageRead 80 67
+              82:   28(float) CompositeExtract 81 0
+              83:   28(float) Load 30(b)
+              84:   28(float) FAdd 83 82
+                              Store 30(b) 84
+              91:      6(int) Load 90(nu_ii)
+              93:     92(ptr) AccessChain 88(uniformBuffer) 91 51
+              94:   28(float) Load 93
+              95:   28(float) Load 30(b)
+              96:   28(float) FAdd 95 94
+                              Store 30(b) 96
+             101:      6(int) Load 90(nu_ii)
+             102:     92(ptr) AccessChain 100(storageBuffer) 101 51
+             103:   28(float) Load 102
+             104:   28(float) Load 30(b)
+             105:   28(float) FAdd 104 103
+                              Store 30(b) 105
+             111:      6(int) Load 90(nu_ii)
+             113:    112(ptr) AccessChain 110(sampledImage) 111
+             114:         107 Load 113
+             118:   31(fvec4) ImageSampleImplicitLod 114 117
+             119:   28(float) CompositeExtract 118 0
+             120:   28(float) Load 30(b)
+             121:   28(float) FAdd 120 119
+                              Store 30(b) 121
+             126:      6(int) Load 90(nu_ii)
+             128:    127(ptr) AccessChain 125(storageImage) 126
+             129:         122 Load 128
+             131:   31(fvec4) ImageRead 129 130
+             132:   28(float) CompositeExtract 131 0
+             133:   28(float) Load 30(b)
+             134:   28(float) FAdd 133 132
+                              Store 30(b) 134
+             138:      6(int) Load 90(nu_ii)
+             139:     48(ptr) AccessChain 137(inputAttachment) 138
+             140:          42 Load 139
+             141:   31(fvec4) ImageRead 140 53
+             142:   28(float) CompositeExtract 141 0
+             143:   28(float) Load 30(b)
+             144:   28(float) FAdd 143 142
+                              Store 30(b) 144
+             148:      6(int) Load 90(nu_ii)
+             149:     64(ptr) AccessChain 147(uniformTexelBuffer) 148
+             150:          59 Load 149
+             151:          58 Image 150
+             152:   31(fvec4) ImageFetch 151 67
+             153:   28(float) CompositeExtract 152 0
+             154:   28(float) Load 30(b)
+             155:   28(float) FAdd 154 153
+                              Store 30(b) 155
+             159:      6(int) Load 90(nu_ii)
+             160:     78(ptr) AccessChain 158(storageTexelBuffer) 159
+             161:          73 Load 160
+             162:   31(fvec4) ImageRead 161 67
+             163:   28(float) CompositeExtract 162 0
+             164:   28(float) Load 30(b)
+             165:   28(float) FAdd 164 163
+                              Store 30(b) 165
+             170:      7(ptr) AccessChain 168(v) 169
+             171:      6(int) Load 170
+             172:     92(ptr) AccessChain 88(uniformBuffer) 171 51
+             173:   28(float) Load 172
+             174:   28(float) Load 30(b)
+             175:   28(float) FAdd 174 173
+                              Store 30(b) 175
+             177:      7(ptr) AccessChain 168(v) 176
+             178:      6(int) Load 177
+             179:     92(ptr) AccessChain 88(uniformBuffer) 178 51
+             180:   28(float) Load 179
+             181:   28(float) Load 30(b)
+             182:   28(float) FAdd 181 180
+                              Store 30(b) 182
+             184:      6(int) Load 90(nu_ii)
+             185:      7(ptr) AccessChain 183(uv) 184
+             186:      6(int) Load 185
+             187:     92(ptr) AccessChain 88(uniformBuffer) 186 51
+             188:   28(float) Load 187
+             189:   28(float) Load 30(b)
+             190:   28(float) FAdd 189 188
+                              Store 30(b) 190
+             194:     29(ptr) AccessChain 193(m) 25 176
+             195:   28(float) Load 194
+             196:      6(int) ConvertFToS 195
+             197:     92(ptr) AccessChain 88(uniformBuffer) 196 51
+             198:   28(float) Load 197
+             199:   28(float) Load 30(b)
+             200:   28(float) FAdd 199 198
+                              Store 30(b) 200
+             204:      7(ptr) AccessChain 203(s) 51
+             205:      6(int) Load 204
+             206:     92(ptr) AccessChain 88(uniformBuffer) 205 51
+             207:   28(float) Load 206
+             208:   28(float) Load 30(b)
+             209:   28(float) FAdd 208 207
+                              Store 30(b) 209
+                              Return
+                              FunctionEnd
+  11(foo(i1;i1;):      6(int) Function None 8
+         9(nupi):      7(ptr) FunctionParameter
+           10(f):      7(ptr) FunctionParameter
+              12:             Label
+              13:      6(int) Load 9(nupi)
+                              ReturnValue 13
+                              FunctionEnd
diff --git a/Test/nonuniform.frag b/Test/nonuniform.frag
new file mode 100644
index 0000000..3f3dd67
--- /dev/null
+++ b/Test/nonuniform.frag
@@ -0,0 +1,33 @@
+#version 450

+

+int nonuniformEXT;

+

+#extension GL_EXT_nonuniform_qualifier : enable

+

+nonuniformEXT in vec4 nu_inv4;

+nonuniformEXT float nu_gf;

+

+nonuniformEXT out vec4 nu_outv4;           // ERROR, out

+nonuniformEXT uniform vec4 nu_uv4;         // ERROR, uniform

+nonuniformEXT const float nu_constf = 1.0; // ERROR, const

+

+nonuniformEXT int foo(nonuniformEXT int nupi, nonuniformEXT out int f)

+{

+    return nupi;

+}

+

+void main()

+{

+    nonuniformEXT int nu_li;

+    nonuniformEXT const int nu_ci = 2; // ERROR, const

+

+    foo(nu_li, nu_li);

+

+    int a;

+    nu_li = nonuniformEXT(a) + nonuniformEXT(a * 2);

+    nu_li = nonuniformEXT(a, a);       // ERROR, too many arguments

+    nu_li = nonuniformEXT();           // ERROR, no arguments

+}

+

+layout(location=1) in struct S { float a; nonuniformEXT float b; } ins;  // ERROR, not on member

+layout(location=3) in inbName { float a; nonuniformEXT float b; } inb;   // ERROR, not on member

diff --git a/Test/runtimeArray.vert b/Test/runtimeArray.vert
index 4ddb2dc..5961433 100644
--- a/Test/runtimeArray.vert
+++ b/Test/runtimeArray.vert
@@ -30,6 +30,15 @@
     float aub[];

 };

 

+layout(binding=1)                             uniform samplerBuffer       uniformTexelBufferDyn[];

+layout(binding=2, r32f)                       uniform imageBuffer         storageTexelBufferDyn[];

+layout(binding=3)                             uniform uname { float a; }  uniformBuffer[];

+layout(binding=4)                             buffer  bname { float b; }  storageBuffer[];

+layout(binding=5)                             uniform sampler2D           sampledImage[];

+layout(binding=6, r32f)                       uniform image2D             storageImage[];

+layout(binding=8)                             uniform samplerBuffer       uniformTexelBuffer[];

+layout(binding=9, r32f)                       uniform imageBuffer         storageTexelBuffer[];

+

 int i;

 

 void main()

@@ -78,4 +87,22 @@
     aub.length();          // ERROR

     aba.length();          // ERROR

     abb.length();

+

+    uniformTexelBufferDyn[1];

+    storageTexelBufferDyn[1];

+    uniformBuffer[1];

+    storageBuffer[1];

+    sampledImage[1];

+    storageImage[1];

+    uniformTexelBuffer[1];

+    storageTexelBuffer[1];

+

+    uniformTexelBufferDyn[i];  // ERROR, need extension

+    storageTexelBufferDyn[i];  // ERROR, need extension

+    uniformBuffer[i];          // ERROR, need extension

+    storageBuffer[i];          // ERROR, need extension

+    sampledImage[i];           // ERROR, need extension

+    storageImage[i];           // ERROR, need extension

+    uniformTexelBuffer[i];     // ERROR, need extension

+    storageTexelBuffer[i];     // ERROR, need extension

 }

diff --git a/Test/spv.nonuniform.frag b/Test/spv.nonuniform.frag
new file mode 100644
index 0000000..d3b05a5
--- /dev/null
+++ b/Test/spv.nonuniform.frag
@@ -0,0 +1,55 @@
+#version 450

+

+#extension GL_EXT_nonuniform_qualifier : enable

+

+layout(location=0) nonuniformEXT in vec4 nu_inv4;

+nonuniformEXT float nu_gf;

+layout(location=1) in nonuniformEXT flat int nu_ii;

+

+layout(binding=0, input_attachment_index = 0) uniform subpassInput        inputAttachmentDyn[];

+layout(binding=1)                             uniform samplerBuffer       uniformTexelBufferDyn[];

+layout(binding=2, r32f)                       uniform imageBuffer         storageTexelBufferDyn[];

+layout(binding=3)                             uniform uname { float a; }  uniformBuffer[];

+layout(binding=4)                             buffer  bname { float b; }  storageBuffer[];

+layout(binding=5)                             uniform sampler2D           sampledImage[];

+layout(binding=6, r32f)                       uniform image2D             storageImage[];

+layout(binding=7, input_attachment_index = 1) uniform subpassInput        inputAttachment[];

+layout(binding=8)                             uniform samplerBuffer       uniformTexelBuffer[];

+layout(binding=9, r32f)                       uniform imageBuffer         storageTexelBuffer[];

+

+nonuniformEXT int foo(nonuniformEXT int nupi, nonuniformEXT out int f)

+{

+    return nupi;

+}

+

+void main()

+{

+    nonuniformEXT int nu_li;

+    int dyn_i;

+

+    int a = foo(nu_li, nu_li);

+    nu_li = nonuniformEXT(a) + nonuniformEXT(a * 2);

+

+    float b;

+    b = nu_inv4.x * nu_gf;

+    b += subpassLoad(inputAttachmentDyn[dyn_i]).x;

+    b += texelFetch(uniformTexelBufferDyn[dyn_i], 1).x;

+    b += imageLoad(storageTexelBufferDyn[dyn_i], 1).x;

+    b += uniformBuffer[nu_ii].a;

+    b += storageBuffer[nu_ii].b;

+    b += texture(sampledImage[nu_ii], vec2(0.5)).x;

+    b += imageLoad(storageImage[nu_ii], ivec2(1)).x;

+    b += subpassLoad(inputAttachment[nu_ii]).x;

+    b += texelFetch(uniformTexelBuffer[nu_ii], 1).x;

+    b += imageLoad(storageTexelBuffer[nu_ii], 1).x;

+

+    nonuniformEXT ivec4 v;

+    nonuniformEXT mat4 m;

+    nonuniformEXT struct S { int a; } s;

+    ivec4 uv;

+    b += uniformBuffer[v.y].a;

+    b += uniformBuffer[v[2]].a;

+    b += uniformBuffer[uv[nu_ii]].a;

+    b += uniformBuffer[int(m[2].z)].a;

+    b += uniformBuffer[s.a].a;

+}

diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index 03f3c34..39d6737 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -437,6 +437,7 @@
         clearInterstage();
         clearMemory();
         specConstant = false;
+        nonUniform = false;
         clearLayout();
     }
 
@@ -478,6 +479,7 @@
     {
         storage      = EvqTemporary;
         specConstant = false;
+        nonUniform   = false;
     }
 
     const char*         semanticName;
@@ -502,6 +504,7 @@
     bool readonly     : 1;
     bool writeonly    : 1;
     bool specConstant : 1;  // having a constant_id is not sufficient: expressions have no id, but are still specConstant
+    bool nonUniform   : 1;
 
     bool isMemory() const
     {
@@ -833,6 +836,10 @@
         // true front-end constant.
         return specConstant;
     }
+    bool isNonUniform() const
+    {
+        return nonUniform;
+    }
     bool isFrontEndConstant() const
     {
         // True if the front-end knows the final constant value.
@@ -1383,8 +1390,9 @@
     virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; }
 
     // "Image" is a superset of "Subpass"
-    virtual bool isImage() const   { return basicType == EbtSampler && getSampler().isImage(); }
+    virtual bool isImage()   const { return basicType == EbtSampler && getSampler().isImage(); }
     virtual bool isSubpass() const { return basicType == EbtSampler && getSampler().isSubpass(); }
+    virtual bool isTexture() const { return basicType == EbtSampler && getSampler().isTexture(); }
 
     // return true if this type contains any subtype which satisfies the given predicate.
     template <typename P>
@@ -1689,6 +1697,8 @@
             appendStr(" writeonly");
         if (qualifier.specConstant)
             appendStr(" specialization-constant");
+        if (qualifier.nonUniform)
+            appendStr(" nonuniform");
         appendStr(" ");
         appendStr(getStorageQualifierString());
         if (isArray()) {
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index abf37c6..19eb7aa 100755
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -729,6 +729,7 @@
     EOpConstructF16Mat4x4,
     EOpConstructStruct,
     EOpConstructTextureSampler,
+    EOpConstructNonuniform,     // expected to be transformed away, not present in final AST
     EOpConstructGuardEnd,
 
     //
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index 1e02f4b..9e5beac 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -158,6 +158,11 @@
     if (specConstantPropagates(*node->getLeft(), *node->getRight()) && isSpecializationOperation(*node))
         node->getWritableType().getQualifier().makeSpecConstant();
 
+    // If must propagate nonuniform, make a nonuniform.
+    if ((node->getLeft()->getQualifier().nonUniform || node->getRight()->getQualifier().nonUniform) &&
+            isNonuniformPropagating(node->getOp()))
+        node->getWritableType().getQualifier().nonUniform = true;
+
     return node;
 }
 
@@ -366,6 +371,10 @@
     if (node->getOperand()->getType().getQualifier().isSpecConstant() && isSpecializationOperation(*node))
         node->getWritableType().getQualifier().makeSpecConstant();
 
+    // If must propagate nonuniform, make a nonuniform.
+    if (node->getOperand()->getQualifier().nonUniform && isNonuniformPropagating(node->getOp()))
+        node->getWritableType().getQualifier().nonUniform = true;
+
     return node;
 }
 
@@ -1748,6 +1757,9 @@
 {
     TOperator op = EOpNull;
 
+    if (type.getQualifier().nonUniform)
+        return EOpConstructNonuniform;
+
     switch (type.getBasicType()) {
     case EbtStruct:
         op = EOpConstructStruct;
@@ -2800,6 +2812,64 @@
     }
 }
 
+// Is the operation one that must propagate nonuniform?
+bool TIntermediate::isNonuniformPropagating(TOperator op) const
+{
+    // "* All Operators in Section 5.1 (Operators), except for assignment,
+    //    arithmetic assignment, and sequence
+    //  * Component selection in Section 5.5
+    //  * Matrix components in Section 5.6
+    //  * Structure and Array Operations in Section 5.7, except for the length
+    //    method."
+    switch (op) {
+    case EOpPostIncrement:
+    case EOpPostDecrement:
+    case EOpPreIncrement:
+    case EOpPreDecrement:
+
+    case EOpNegative:
+    case EOpLogicalNot:
+    case EOpVectorLogicalNot:
+    case EOpBitwiseNot:
+
+    case EOpAdd:
+    case EOpSub:
+    case EOpMul:
+    case EOpDiv:
+    case EOpMod:
+    case EOpRightShift:
+    case EOpLeftShift:
+    case EOpAnd:
+    case EOpInclusiveOr:
+    case EOpExclusiveOr:
+    case EOpEqual:
+    case EOpNotEqual:
+    case EOpLessThan:
+    case EOpGreaterThan:
+    case EOpLessThanEqual:
+    case EOpGreaterThanEqual:
+    case EOpVectorTimesScalar:
+    case EOpVectorTimesMatrix:
+    case EOpMatrixTimesVector:
+    case EOpMatrixTimesScalar:
+
+    case EOpLogicalOr:
+    case EOpLogicalXor:
+    case EOpLogicalAnd:
+
+    case EOpIndexDirect:
+    case EOpIndexIndirect:
+    case EOpIndexDirectStruct:
+    case EOpVectorSwizzle:
+        return true;
+
+    default:
+        break;
+    }
+
+    return false;
+}
+
 ////////////////////////////////////////////////////////////////
 //
 // Member functions of the nodes used for building the tree.
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 5111bb7..2f5b449 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -381,6 +381,8 @@
         if (index->getQualifier().isFrontEndConstant()) {
             if (base->getType().isUnsizedArray())
                 base->getWritableType().updateImplicitArraySize(indexValue + 1);
+            else
+                checkIndex(loc, base->getType(), indexValue);
             result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
         } else {
             if (base->getType().isUnsizedArray()) {
@@ -390,8 +392,7 @@
                     error(loc, "", "[", "array must be sized by a redeclaration or layout qualifier before being indexed with a variable");
                 else {
                     // it is okay for a run-time sized array
-                    if (!isRuntimeSizable(*base))
-                        error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable");
+                    checkRuntimeSizable(loc, *base);
                 }
                 base->getWritableType().setArrayVariablyIndexed();
             }
@@ -434,6 +435,10 @@
         }
         result->setType(newType);
 
+        // Propagate nonuniform
+        if (base->getQualifier().isNonUniform() || index->getQualifier().isNonUniform())
+            result->getWritableType().getQualifier().nonUniform = true;
+
         if (anyIndexLimits)
             handleIndexLimits(loc, base, index);
     }
@@ -742,6 +747,10 @@
     if (base->getQualifier().noContraction)
         result->getWritableType().getQualifier().noContraction = true;
 
+    // Propagate nonuniform
+    if (base->getQualifier().isNonUniform())
+        result->getWritableType().getQualifier().nonUniform = true;
+
     return result;
 }
 
@@ -2622,6 +2631,10 @@
 {
     globalQualifierFixCheck(publicType.loc, publicType.qualifier);
     checkNoShaderLayouts(publicType.loc, publicType.shaderQualifiers);
+    if (publicType.qualifier.isNonUniform()) {
+        error(publicType.loc, "not allowed on block or structure members", "nonuniformEXT", "");
+        publicType.qualifier.nonUniform = false;
+    }
 }
 
 //
@@ -2629,12 +2642,15 @@
 //
 void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& qualifier)
 {
+    bool nonuniformOkay = false;
+
     // move from parameter/unknown qualifiers to pipeline in/out qualifiers
     switch (qualifier.storage) {
     case EvqIn:
         profileRequires(loc, ENoProfile, 130, nullptr, "in for stage inputs");
         profileRequires(loc, EEsProfile, 300, nullptr, "in for stage inputs");
         qualifier.storage = EvqVaryingIn;
+        nonuniformOkay = true;
         break;
     case EvqOut:
         profileRequires(loc, ENoProfile, 130, nullptr, "out for stage outputs");
@@ -2645,10 +2661,17 @@
         qualifier.storage = EvqVaryingIn;
         error(loc, "cannot use 'inout' at global scope", "", "");
         break;
+    case EvqGlobal:
+    case EvqTemporary:
+        nonuniformOkay = true;
+        break;
     default:
         break;
     }
 
+    if (!nonuniformOkay && qualifier.nonUniform)
+        error(loc, "for non-parameter, can only apply to 'in' or no storage qualifier", "nonuniformEXT", "");
+
     invariantCheck(loc, qualifier);
 }
 
@@ -2897,6 +2920,7 @@
     MERGE_SINGLETON(readonly);
     MERGE_SINGLETON(writeonly);
     MERGE_SINGLETON(specConstant);
+    MERGE_SINGLETON(nonUniform);
 
     if (repeated)
         error(loc, "replicated qualifiers", "", "");
@@ -3268,11 +3292,25 @@
         checkIoArraysConsistency(loc);
 }
 
-// Policy decision for whether a node could potentially be sized at runtime.
-bool TParseContext::isRuntimeSizable(const TIntermTyped& base) const
+// Policy and error check for needing a runtime sized array.
+void TParseContext::checkRuntimeSizable(const TSourceLoc& loc, const TIntermTyped& base)
 {
-    const TType& type = base.getType();
-    if (type.getQualifier().storage == EvqBuffer) {
+    // runtime length implies runtime sizeable, so no problem
+    if (isRuntimeLength(base))
+        return;
+
+    // check for additional things allowed by GL_EXT_nonuniform_qualifier
+    if (base.getBasicType() == EbtSampler ||
+            (base.getBasicType() == EbtBlock && base.getType().getQualifier().isUniformOrBuffer()))
+        requireExtensions(loc, 1, &E_GL_EXT_nonuniform_qualifier, "variable index");
+    else
+        error(loc, "", "[", "array must be redeclared with a size before being indexed with a variable");
+}
+
+// Policy decision for whether a run-time .length() is allowed.
+bool TParseContext::isRuntimeLength(const TIntermTyped& base) const
+{
+    if (base.getType().getQualifier().storage == EvqBuffer) {
         // in a buffer block
         const TIntermBinary* binary = base.getAsBinaryNode();
         if (binary != nullptr && binary->getOp() == EOpIndexDirectStruct) {
@@ -3287,12 +3325,6 @@
     return false;
 }
 
-// Policy decision for whether a run-time .length() is allowed.
-bool TParseContext::isRuntimeLength(const TIntermTyped& base) const
-{
-    return isRuntimeSizable(base);
-}
-
 // Returns true if the first argument to the #line directive is the line number for the next line.
 //
 // Desktop, pre-version 3.30:  "After processing this directive
@@ -3703,6 +3735,8 @@
         else
             warn(loc, "qualifier has no effect on non-output parameters", "precise", "");
     }
+    if (qualifier.isNonUniform())
+        type.getQualifier().nonUniform = qualifier.nonUniform;
 
     paramCheckFixStorage(loc, qualifier.storage, type);
 }
@@ -4680,11 +4714,16 @@
         if (type.getBasicType() == EbtSampler) {
             int lastBinding = qualifier.layoutBinding;
             if (type.isArray()) {
-                if (type.isSizedArray())
-                    lastBinding += type.getCumulativeArraySize();
-                else {
+                if (spvVersion.vulkan > 0)
                     lastBinding += 1;
-                    warn(loc, "assuming array size of one for compile-time checking of binding numbers for unsized array", "[]", "");
+                else {
+                    if (type.isSizedArray())
+                        lastBinding += type.getCumulativeArraySize();
+                    else {
+                        lastBinding += 1;
+                        if (spvVersion.vulkan == 0)
+                            warn(loc, "assuming binding count of one for compile-time checking of binding numbers for unsized array", "[]", "");
+                    }
                 }
             }
             if (spvVersion.vulkan == 0 && lastBinding >= resources.maxCombinedTextureImageUnits)
@@ -5852,6 +5891,11 @@
         basicOp = EOpConstructBool;
         break;
 
+    case EOpConstructNonuniform:
+        node->getWritableType().getQualifier().nonUniform = true;
+        return node;
+        break;
+
     default:
         error(loc, "unsupported construction", "", "");
 
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 7dabb01..21779c7 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -427,7 +427,7 @@
     TVariable* makeInternalVariable(const char* name, const TType&) const;
     TVariable* declareNonArray(const TSourceLoc&, const TString& identifier, const TType&);
     void declareArray(const TSourceLoc&, const TString& identifier, const TType&, TSymbol*&);
-    bool isRuntimeSizable(const TIntermTyped&) const;
+    void checkRuntimeSizable(const TSourceLoc&, const TIntermTyped&);
     bool isRuntimeLength(const TIntermTyped&) const;
     TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index feb9bed..7232bae 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -341,6 +341,7 @@
 
     (*KeywordMap)["const"] =                   CONST;
     (*KeywordMap)["uniform"] =                 UNIFORM;
+    (*KeywordMap)["nonuniformEXT"] =           NONUNIFORM;
     (*KeywordMap)["in"] =                      IN;
     (*KeywordMap)["out"] =                     OUT;
     (*KeywordMap)["inout"] =                   INOUT;
@@ -873,6 +874,12 @@
     case CASE:
         return keyword;
 
+    case NONUNIFORM:
+        if (parseContext.extensionTurnedOn(E_GL_EXT_nonuniform_qualifier))
+            return keyword;
+        else
+            return identifierOrType();
+
     case SWITCH:
     case DEFAULT:
         if ((parseContext.profile == EEsProfile && parseContext.version < 300) ||
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index 462c63c..56919ff 100755
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -199,6 +199,7 @@
     extensionBehavior[E_GL_EXT_shader_image_load_formatted]             = EBhDisable;
     extensionBehavior[E_GL_EXT_post_depth_coverage]                     = EBhDisable;
     extensionBehavior[E_GL_EXT_control_flow_attributes]                 = EBhDisable;
+    extensionBehavior[E_GL_EXT_nonuniform_qualifier]                    = EBhDisable;
 
     // #line and #include
     extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive]          = EBhDisable;
@@ -360,6 +361,7 @@
             "#define GL_EXT_shader_image_load_formatted 1\n"
             "#define GL_EXT_post_depth_coverage 1\n"
             "#define GL_EXT_control_flow_attributes 1\n"
+            "#define GL_EXT_nonuniform_qualifier 1\n"
 
             // GL_KHR_shader_subgroup
             "#define GL_KHR_shader_subgroup_basic 1\n"
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
index 7f0d657..b297d27 100755
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -157,6 +157,7 @@
 const char* const E_GL_EXT_multiview                    = "GL_EXT_multiview";
 const char* const E_GL_EXT_post_depth_coverage          = "GL_EXT_post_depth_coverage";
 const char* const E_GL_EXT_control_flow_attributes      = "GL_EXT_control_flow_attributes";
+const char* const E_GL_EXT_nonuniform_qualifier         = "GL_EXT_nonuniform_qualifier";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index 10660f7..6e45922 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -140,7 +140,7 @@
 %token <lex> U8VEC2  U8VEC3  U8VEC4
 %token <lex> VEC2 VEC3 VEC4
 %token <lex> MAT2 MAT3 MAT4 CENTROID IN OUT INOUT
-%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED
+%token <lex> UNIFORM PATCH SAMPLE BUFFER SHARED NONUNIFORM
 %token <lex> COHERENT VOLATILE RESTRICT READONLY WRITEONLY
 %token <lex> DVEC2 DVEC3 DVEC4 DMAT2 DMAT3 DMAT4
 %token <lex> F16VEC2 F16VEC3 F16VEC4 F16MAT2 F16MAT3 F16MAT4
@@ -268,6 +268,7 @@
 %type <interm> array_specifier
 %type <interm.type> precise_qualifier invariant_qualifier interpolation_qualifier storage_qualifier precision_qualifier
 %type <interm.type> layout_qualifier layout_qualifier_id_list layout_qualifier_id
+%type <interm.type> non_uniform_qualifier
 
 %type <interm.type> type_qualifier fully_specified_type type_specifier
 %type <interm.type> single_type_qualifier
@@ -473,6 +474,11 @@
             $$.function = new TFunction(&empty, TType(EbtVoid), EOpNull);
         }
     }
+    | non_uniform_qualifier {
+        // Constructor
+        $$.intermNode = 0;
+        $$.function = parseContext.handleConstructorCall($1.loc, $1);
+    }
     ;
 
 unary_expression
@@ -1217,6 +1223,9 @@
         // allow inheritance of storage qualifier from block declaration
         $$ = $1;
     }
+    | non_uniform_qualifier {
+        $$ = $1;
+    }
     ;
 
 storage_qualifier
@@ -1337,6 +1346,13 @@
     }
     ;
 
+non_uniform_qualifier
+    : NONUNIFORM {
+        $$.init($1.loc);
+        $$.qualifier.nonUniform = true;
+    }
+    ;
+
 type_name_list
     : IDENTIFIER {
         // TODO
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index b3014a6..93115bb 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -202,314 +202,315 @@
     SAMPLE = 334,
     BUFFER = 335,
     SHARED = 336,
-    COHERENT = 337,
-    VOLATILE = 338,
-    RESTRICT = 339,
-    READONLY = 340,
-    WRITEONLY = 341,
-    DVEC2 = 342,
-    DVEC3 = 343,
-    DVEC4 = 344,
-    DMAT2 = 345,
-    DMAT3 = 346,
-    DMAT4 = 347,
-    F16VEC2 = 348,
-    F16VEC3 = 349,
-    F16VEC4 = 350,
-    F16MAT2 = 351,
-    F16MAT3 = 352,
-    F16MAT4 = 353,
-    F32VEC2 = 354,
-    F32VEC3 = 355,
-    F32VEC4 = 356,
-    F32MAT2 = 357,
-    F32MAT3 = 358,
-    F32MAT4 = 359,
-    F64VEC2 = 360,
-    F64VEC3 = 361,
-    F64VEC4 = 362,
-    F64MAT2 = 363,
-    F64MAT3 = 364,
-    F64MAT4 = 365,
-    NOPERSPECTIVE = 366,
-    FLAT = 367,
-    SMOOTH = 368,
-    LAYOUT = 369,
-    __EXPLICITINTERPAMD = 370,
-    MAT2X2 = 371,
-    MAT2X3 = 372,
-    MAT2X4 = 373,
-    MAT3X2 = 374,
-    MAT3X3 = 375,
-    MAT3X4 = 376,
-    MAT4X2 = 377,
-    MAT4X3 = 378,
-    MAT4X4 = 379,
-    DMAT2X2 = 380,
-    DMAT2X3 = 381,
-    DMAT2X4 = 382,
-    DMAT3X2 = 383,
-    DMAT3X3 = 384,
-    DMAT3X4 = 385,
-    DMAT4X2 = 386,
-    DMAT4X3 = 387,
-    DMAT4X4 = 388,
-    F16MAT2X2 = 389,
-    F16MAT2X3 = 390,
-    F16MAT2X4 = 391,
-    F16MAT3X2 = 392,
-    F16MAT3X3 = 393,
-    F16MAT3X4 = 394,
-    F16MAT4X2 = 395,
-    F16MAT4X3 = 396,
-    F16MAT4X4 = 397,
-    F32MAT2X2 = 398,
-    F32MAT2X3 = 399,
-    F32MAT2X4 = 400,
-    F32MAT3X2 = 401,
-    F32MAT3X3 = 402,
-    F32MAT3X4 = 403,
-    F32MAT4X2 = 404,
-    F32MAT4X3 = 405,
-    F32MAT4X4 = 406,
-    F64MAT2X2 = 407,
-    F64MAT2X3 = 408,
-    F64MAT2X4 = 409,
-    F64MAT3X2 = 410,
-    F64MAT3X3 = 411,
-    F64MAT3X4 = 412,
-    F64MAT4X2 = 413,
-    F64MAT4X3 = 414,
-    F64MAT4X4 = 415,
-    ATOMIC_UINT = 416,
-    SAMPLER1D = 417,
-    SAMPLER2D = 418,
-    SAMPLER3D = 419,
-    SAMPLERCUBE = 420,
-    SAMPLER1DSHADOW = 421,
-    SAMPLER2DSHADOW = 422,
-    SAMPLERCUBESHADOW = 423,
-    SAMPLER1DARRAY = 424,
-    SAMPLER2DARRAY = 425,
-    SAMPLER1DARRAYSHADOW = 426,
-    SAMPLER2DARRAYSHADOW = 427,
-    ISAMPLER1D = 428,
-    ISAMPLER2D = 429,
-    ISAMPLER3D = 430,
-    ISAMPLERCUBE = 431,
-    ISAMPLER1DARRAY = 432,
-    ISAMPLER2DARRAY = 433,
-    USAMPLER1D = 434,
-    USAMPLER2D = 435,
-    USAMPLER3D = 436,
-    USAMPLERCUBE = 437,
-    USAMPLER1DARRAY = 438,
-    USAMPLER2DARRAY = 439,
-    SAMPLER2DRECT = 440,
-    SAMPLER2DRECTSHADOW = 441,
-    ISAMPLER2DRECT = 442,
-    USAMPLER2DRECT = 443,
-    SAMPLERBUFFER = 444,
-    ISAMPLERBUFFER = 445,
-    USAMPLERBUFFER = 446,
-    SAMPLERCUBEARRAY = 447,
-    SAMPLERCUBEARRAYSHADOW = 448,
-    ISAMPLERCUBEARRAY = 449,
-    USAMPLERCUBEARRAY = 450,
-    SAMPLER2DMS = 451,
-    ISAMPLER2DMS = 452,
-    USAMPLER2DMS = 453,
-    SAMPLER2DMSARRAY = 454,
-    ISAMPLER2DMSARRAY = 455,
-    USAMPLER2DMSARRAY = 456,
-    SAMPLEREXTERNALOES = 457,
-    F16SAMPLER1D = 458,
-    F16SAMPLER2D = 459,
-    F16SAMPLER3D = 460,
-    F16SAMPLER2DRECT = 461,
-    F16SAMPLERCUBE = 462,
-    F16SAMPLER1DARRAY = 463,
-    F16SAMPLER2DARRAY = 464,
-    F16SAMPLERCUBEARRAY = 465,
-    F16SAMPLERBUFFER = 466,
-    F16SAMPLER2DMS = 467,
-    F16SAMPLER2DMSARRAY = 468,
-    F16SAMPLER1DSHADOW = 469,
-    F16SAMPLER2DSHADOW = 470,
-    F16SAMPLER1DARRAYSHADOW = 471,
-    F16SAMPLER2DARRAYSHADOW = 472,
-    F16SAMPLER2DRECTSHADOW = 473,
-    F16SAMPLERCUBESHADOW = 474,
-    F16SAMPLERCUBEARRAYSHADOW = 475,
-    SAMPLER = 476,
-    SAMPLERSHADOW = 477,
-    TEXTURE1D = 478,
-    TEXTURE2D = 479,
-    TEXTURE3D = 480,
-    TEXTURECUBE = 481,
-    TEXTURE1DARRAY = 482,
-    TEXTURE2DARRAY = 483,
-    ITEXTURE1D = 484,
-    ITEXTURE2D = 485,
-    ITEXTURE3D = 486,
-    ITEXTURECUBE = 487,
-    ITEXTURE1DARRAY = 488,
-    ITEXTURE2DARRAY = 489,
-    UTEXTURE1D = 490,
-    UTEXTURE2D = 491,
-    UTEXTURE3D = 492,
-    UTEXTURECUBE = 493,
-    UTEXTURE1DARRAY = 494,
-    UTEXTURE2DARRAY = 495,
-    TEXTURE2DRECT = 496,
-    ITEXTURE2DRECT = 497,
-    UTEXTURE2DRECT = 498,
-    TEXTUREBUFFER = 499,
-    ITEXTUREBUFFER = 500,
-    UTEXTUREBUFFER = 501,
-    TEXTURECUBEARRAY = 502,
-    ITEXTURECUBEARRAY = 503,
-    UTEXTURECUBEARRAY = 504,
-    TEXTURE2DMS = 505,
-    ITEXTURE2DMS = 506,
-    UTEXTURE2DMS = 507,
-    TEXTURE2DMSARRAY = 508,
-    ITEXTURE2DMSARRAY = 509,
-    UTEXTURE2DMSARRAY = 510,
-    F16TEXTURE1D = 511,
-    F16TEXTURE2D = 512,
-    F16TEXTURE3D = 513,
-    F16TEXTURE2DRECT = 514,
-    F16TEXTURECUBE = 515,
-    F16TEXTURE1DARRAY = 516,
-    F16TEXTURE2DARRAY = 517,
-    F16TEXTURECUBEARRAY = 518,
-    F16TEXTUREBUFFER = 519,
-    F16TEXTURE2DMS = 520,
-    F16TEXTURE2DMSARRAY = 521,
-    SUBPASSINPUT = 522,
-    SUBPASSINPUTMS = 523,
-    ISUBPASSINPUT = 524,
-    ISUBPASSINPUTMS = 525,
-    USUBPASSINPUT = 526,
-    USUBPASSINPUTMS = 527,
-    F16SUBPASSINPUT = 528,
-    F16SUBPASSINPUTMS = 529,
-    IMAGE1D = 530,
-    IIMAGE1D = 531,
-    UIMAGE1D = 532,
-    IMAGE2D = 533,
-    IIMAGE2D = 534,
-    UIMAGE2D = 535,
-    IMAGE3D = 536,
-    IIMAGE3D = 537,
-    UIMAGE3D = 538,
-    IMAGE2DRECT = 539,
-    IIMAGE2DRECT = 540,
-    UIMAGE2DRECT = 541,
-    IMAGECUBE = 542,
-    IIMAGECUBE = 543,
-    UIMAGECUBE = 544,
-    IMAGEBUFFER = 545,
-    IIMAGEBUFFER = 546,
-    UIMAGEBUFFER = 547,
-    IMAGE1DARRAY = 548,
-    IIMAGE1DARRAY = 549,
-    UIMAGE1DARRAY = 550,
-    IMAGE2DARRAY = 551,
-    IIMAGE2DARRAY = 552,
-    UIMAGE2DARRAY = 553,
-    IMAGECUBEARRAY = 554,
-    IIMAGECUBEARRAY = 555,
-    UIMAGECUBEARRAY = 556,
-    IMAGE2DMS = 557,
-    IIMAGE2DMS = 558,
-    UIMAGE2DMS = 559,
-    IMAGE2DMSARRAY = 560,
-    IIMAGE2DMSARRAY = 561,
-    UIMAGE2DMSARRAY = 562,
-    F16IMAGE1D = 563,
-    F16IMAGE2D = 564,
-    F16IMAGE3D = 565,
-    F16IMAGE2DRECT = 566,
-    F16IMAGECUBE = 567,
-    F16IMAGE1DARRAY = 568,
-    F16IMAGE2DARRAY = 569,
-    F16IMAGECUBEARRAY = 570,
-    F16IMAGEBUFFER = 571,
-    F16IMAGE2DMS = 572,
-    F16IMAGE2DMSARRAY = 573,
-    STRUCT = 574,
-    VOID = 575,
-    WHILE = 576,
-    IDENTIFIER = 577,
-    TYPE_NAME = 578,
-    FLOATCONSTANT = 579,
-    DOUBLECONSTANT = 580,
-    INT16CONSTANT = 581,
-    UINT16CONSTANT = 582,
-    INT32CONSTANT = 583,
-    UINT32CONSTANT = 584,
-    INTCONSTANT = 585,
-    UINTCONSTANT = 586,
-    INT64CONSTANT = 587,
-    UINT64CONSTANT = 588,
-    BOOLCONSTANT = 589,
-    FLOAT16CONSTANT = 590,
-    LEFT_OP = 591,
-    RIGHT_OP = 592,
-    INC_OP = 593,
-    DEC_OP = 594,
-    LE_OP = 595,
-    GE_OP = 596,
-    EQ_OP = 597,
-    NE_OP = 598,
-    AND_OP = 599,
-    OR_OP = 600,
-    XOR_OP = 601,
-    MUL_ASSIGN = 602,
-    DIV_ASSIGN = 603,
-    ADD_ASSIGN = 604,
-    MOD_ASSIGN = 605,
-    LEFT_ASSIGN = 606,
-    RIGHT_ASSIGN = 607,
-    AND_ASSIGN = 608,
-    XOR_ASSIGN = 609,
-    OR_ASSIGN = 610,
-    SUB_ASSIGN = 611,
-    LEFT_PAREN = 612,
-    RIGHT_PAREN = 613,
-    LEFT_BRACKET = 614,
-    RIGHT_BRACKET = 615,
-    LEFT_BRACE = 616,
-    RIGHT_BRACE = 617,
-    DOT = 618,
-    COMMA = 619,
-    COLON = 620,
-    EQUAL = 621,
-    SEMICOLON = 622,
-    BANG = 623,
-    DASH = 624,
-    TILDE = 625,
-    PLUS = 626,
-    STAR = 627,
-    SLASH = 628,
-    PERCENT = 629,
-    LEFT_ANGLE = 630,
-    RIGHT_ANGLE = 631,
-    VERTICAL_BAR = 632,
-    CARET = 633,
-    AMPERSAND = 634,
-    QUESTION = 635,
-    INVARIANT = 636,
-    PRECISE = 637,
-    HIGH_PRECISION = 638,
-    MEDIUM_PRECISION = 639,
-    LOW_PRECISION = 640,
-    PRECISION = 641,
-    PACKED = 642,
-    RESOURCE = 643,
-    SUPERP = 644
+    NONUNIFORM = 337,
+    COHERENT = 338,
+    VOLATILE = 339,
+    RESTRICT = 340,
+    READONLY = 341,
+    WRITEONLY = 342,
+    DVEC2 = 343,
+    DVEC3 = 344,
+    DVEC4 = 345,
+    DMAT2 = 346,
+    DMAT3 = 347,
+    DMAT4 = 348,
+    F16VEC2 = 349,
+    F16VEC3 = 350,
+    F16VEC4 = 351,
+    F16MAT2 = 352,
+    F16MAT3 = 353,
+    F16MAT4 = 354,
+    F32VEC2 = 355,
+    F32VEC3 = 356,
+    F32VEC4 = 357,
+    F32MAT2 = 358,
+    F32MAT3 = 359,
+    F32MAT4 = 360,
+    F64VEC2 = 361,
+    F64VEC3 = 362,
+    F64VEC4 = 363,
+    F64MAT2 = 364,
+    F64MAT3 = 365,
+    F64MAT4 = 366,
+    NOPERSPECTIVE = 367,
+    FLAT = 368,
+    SMOOTH = 369,
+    LAYOUT = 370,
+    __EXPLICITINTERPAMD = 371,
+    MAT2X2 = 372,
+    MAT2X3 = 373,
+    MAT2X4 = 374,
+    MAT3X2 = 375,
+    MAT3X3 = 376,
+    MAT3X4 = 377,
+    MAT4X2 = 378,
+    MAT4X3 = 379,
+    MAT4X4 = 380,
+    DMAT2X2 = 381,
+    DMAT2X3 = 382,
+    DMAT2X4 = 383,
+    DMAT3X2 = 384,
+    DMAT3X3 = 385,
+    DMAT3X4 = 386,
+    DMAT4X2 = 387,
+    DMAT4X3 = 388,
+    DMAT4X4 = 389,
+    F16MAT2X2 = 390,
+    F16MAT2X3 = 391,
+    F16MAT2X4 = 392,
+    F16MAT3X2 = 393,
+    F16MAT3X3 = 394,
+    F16MAT3X4 = 395,
+    F16MAT4X2 = 396,
+    F16MAT4X3 = 397,
+    F16MAT4X4 = 398,
+    F32MAT2X2 = 399,
+    F32MAT2X3 = 400,
+    F32MAT2X4 = 401,
+    F32MAT3X2 = 402,
+    F32MAT3X3 = 403,
+    F32MAT3X4 = 404,
+    F32MAT4X2 = 405,
+    F32MAT4X3 = 406,
+    F32MAT4X4 = 407,
+    F64MAT2X2 = 408,
+    F64MAT2X3 = 409,
+    F64MAT2X4 = 410,
+    F64MAT3X2 = 411,
+    F64MAT3X3 = 412,
+    F64MAT3X4 = 413,
+    F64MAT4X2 = 414,
+    F64MAT4X3 = 415,
+    F64MAT4X4 = 416,
+    ATOMIC_UINT = 417,
+    SAMPLER1D = 418,
+    SAMPLER2D = 419,
+    SAMPLER3D = 420,
+    SAMPLERCUBE = 421,
+    SAMPLER1DSHADOW = 422,
+    SAMPLER2DSHADOW = 423,
+    SAMPLERCUBESHADOW = 424,
+    SAMPLER1DARRAY = 425,
+    SAMPLER2DARRAY = 426,
+    SAMPLER1DARRAYSHADOW = 427,
+    SAMPLER2DARRAYSHADOW = 428,
+    ISAMPLER1D = 429,
+    ISAMPLER2D = 430,
+    ISAMPLER3D = 431,
+    ISAMPLERCUBE = 432,
+    ISAMPLER1DARRAY = 433,
+    ISAMPLER2DARRAY = 434,
+    USAMPLER1D = 435,
+    USAMPLER2D = 436,
+    USAMPLER3D = 437,
+    USAMPLERCUBE = 438,
+    USAMPLER1DARRAY = 439,
+    USAMPLER2DARRAY = 440,
+    SAMPLER2DRECT = 441,
+    SAMPLER2DRECTSHADOW = 442,
+    ISAMPLER2DRECT = 443,
+    USAMPLER2DRECT = 444,
+    SAMPLERBUFFER = 445,
+    ISAMPLERBUFFER = 446,
+    USAMPLERBUFFER = 447,
+    SAMPLERCUBEARRAY = 448,
+    SAMPLERCUBEARRAYSHADOW = 449,
+    ISAMPLERCUBEARRAY = 450,
+    USAMPLERCUBEARRAY = 451,
+    SAMPLER2DMS = 452,
+    ISAMPLER2DMS = 453,
+    USAMPLER2DMS = 454,
+    SAMPLER2DMSARRAY = 455,
+    ISAMPLER2DMSARRAY = 456,
+    USAMPLER2DMSARRAY = 457,
+    SAMPLEREXTERNALOES = 458,
+    F16SAMPLER1D = 459,
+    F16SAMPLER2D = 460,
+    F16SAMPLER3D = 461,
+    F16SAMPLER2DRECT = 462,
+    F16SAMPLERCUBE = 463,
+    F16SAMPLER1DARRAY = 464,
+    F16SAMPLER2DARRAY = 465,
+    F16SAMPLERCUBEARRAY = 466,
+    F16SAMPLERBUFFER = 467,
+    F16SAMPLER2DMS = 468,
+    F16SAMPLER2DMSARRAY = 469,
+    F16SAMPLER1DSHADOW = 470,
+    F16SAMPLER2DSHADOW = 471,
+    F16SAMPLER1DARRAYSHADOW = 472,
+    F16SAMPLER2DARRAYSHADOW = 473,
+    F16SAMPLER2DRECTSHADOW = 474,
+    F16SAMPLERCUBESHADOW = 475,
+    F16SAMPLERCUBEARRAYSHADOW = 476,
+    SAMPLER = 477,
+    SAMPLERSHADOW = 478,
+    TEXTURE1D = 479,
+    TEXTURE2D = 480,
+    TEXTURE3D = 481,
+    TEXTURECUBE = 482,
+    TEXTURE1DARRAY = 483,
+    TEXTURE2DARRAY = 484,
+    ITEXTURE1D = 485,
+    ITEXTURE2D = 486,
+    ITEXTURE3D = 487,
+    ITEXTURECUBE = 488,
+    ITEXTURE1DARRAY = 489,
+    ITEXTURE2DARRAY = 490,
+    UTEXTURE1D = 491,
+    UTEXTURE2D = 492,
+    UTEXTURE3D = 493,
+    UTEXTURECUBE = 494,
+    UTEXTURE1DARRAY = 495,
+    UTEXTURE2DARRAY = 496,
+    TEXTURE2DRECT = 497,
+    ITEXTURE2DRECT = 498,
+    UTEXTURE2DRECT = 499,
+    TEXTUREBUFFER = 500,
+    ITEXTUREBUFFER = 501,
+    UTEXTUREBUFFER = 502,
+    TEXTURECUBEARRAY = 503,
+    ITEXTURECUBEARRAY = 504,
+    UTEXTURECUBEARRAY = 505,
+    TEXTURE2DMS = 506,
+    ITEXTURE2DMS = 507,
+    UTEXTURE2DMS = 508,
+    TEXTURE2DMSARRAY = 509,
+    ITEXTURE2DMSARRAY = 510,
+    UTEXTURE2DMSARRAY = 511,
+    F16TEXTURE1D = 512,
+    F16TEXTURE2D = 513,
+    F16TEXTURE3D = 514,
+    F16TEXTURE2DRECT = 515,
+    F16TEXTURECUBE = 516,
+    F16TEXTURE1DARRAY = 517,
+    F16TEXTURE2DARRAY = 518,
+    F16TEXTURECUBEARRAY = 519,
+    F16TEXTUREBUFFER = 520,
+    F16TEXTURE2DMS = 521,
+    F16TEXTURE2DMSARRAY = 522,
+    SUBPASSINPUT = 523,
+    SUBPASSINPUTMS = 524,
+    ISUBPASSINPUT = 525,
+    ISUBPASSINPUTMS = 526,
+    USUBPASSINPUT = 527,
+    USUBPASSINPUTMS = 528,
+    F16SUBPASSINPUT = 529,
+    F16SUBPASSINPUTMS = 530,
+    IMAGE1D = 531,
+    IIMAGE1D = 532,
+    UIMAGE1D = 533,
+    IMAGE2D = 534,
+    IIMAGE2D = 535,
+    UIMAGE2D = 536,
+    IMAGE3D = 537,
+    IIMAGE3D = 538,
+    UIMAGE3D = 539,
+    IMAGE2DRECT = 540,
+    IIMAGE2DRECT = 541,
+    UIMAGE2DRECT = 542,
+    IMAGECUBE = 543,
+    IIMAGECUBE = 544,
+    UIMAGECUBE = 545,
+    IMAGEBUFFER = 546,
+    IIMAGEBUFFER = 547,
+    UIMAGEBUFFER = 548,
+    IMAGE1DARRAY = 549,
+    IIMAGE1DARRAY = 550,
+    UIMAGE1DARRAY = 551,
+    IMAGE2DARRAY = 552,
+    IIMAGE2DARRAY = 553,
+    UIMAGE2DARRAY = 554,
+    IMAGECUBEARRAY = 555,
+    IIMAGECUBEARRAY = 556,
+    UIMAGECUBEARRAY = 557,
+    IMAGE2DMS = 558,
+    IIMAGE2DMS = 559,
+    UIMAGE2DMS = 560,
+    IMAGE2DMSARRAY = 561,
+    IIMAGE2DMSARRAY = 562,
+    UIMAGE2DMSARRAY = 563,
+    F16IMAGE1D = 564,
+    F16IMAGE2D = 565,
+    F16IMAGE3D = 566,
+    F16IMAGE2DRECT = 567,
+    F16IMAGECUBE = 568,
+    F16IMAGE1DARRAY = 569,
+    F16IMAGE2DARRAY = 570,
+    F16IMAGECUBEARRAY = 571,
+    F16IMAGEBUFFER = 572,
+    F16IMAGE2DMS = 573,
+    F16IMAGE2DMSARRAY = 574,
+    STRUCT = 575,
+    VOID = 576,
+    WHILE = 577,
+    IDENTIFIER = 578,
+    TYPE_NAME = 579,
+    FLOATCONSTANT = 580,
+    DOUBLECONSTANT = 581,
+    INT16CONSTANT = 582,
+    UINT16CONSTANT = 583,
+    INT32CONSTANT = 584,
+    UINT32CONSTANT = 585,
+    INTCONSTANT = 586,
+    UINTCONSTANT = 587,
+    INT64CONSTANT = 588,
+    UINT64CONSTANT = 589,
+    BOOLCONSTANT = 590,
+    FLOAT16CONSTANT = 591,
+    LEFT_OP = 592,
+    RIGHT_OP = 593,
+    INC_OP = 594,
+    DEC_OP = 595,
+    LE_OP = 596,
+    GE_OP = 597,
+    EQ_OP = 598,
+    NE_OP = 599,
+    AND_OP = 600,
+    OR_OP = 601,
+    XOR_OP = 602,
+    MUL_ASSIGN = 603,
+    DIV_ASSIGN = 604,
+    ADD_ASSIGN = 605,
+    MOD_ASSIGN = 606,
+    LEFT_ASSIGN = 607,
+    RIGHT_ASSIGN = 608,
+    AND_ASSIGN = 609,
+    XOR_ASSIGN = 610,
+    OR_ASSIGN = 611,
+    SUB_ASSIGN = 612,
+    LEFT_PAREN = 613,
+    RIGHT_PAREN = 614,
+    LEFT_BRACKET = 615,
+    RIGHT_BRACKET = 616,
+    LEFT_BRACE = 617,
+    RIGHT_BRACE = 618,
+    DOT = 619,
+    COMMA = 620,
+    COLON = 621,
+    EQUAL = 622,
+    SEMICOLON = 623,
+    BANG = 624,
+    DASH = 625,
+    TILDE = 626,
+    PLUS = 627,
+    STAR = 628,
+    SLASH = 629,
+    PERCENT = 630,
+    LEFT_ANGLE = 631,
+    RIGHT_ANGLE = 632,
+    VERTICAL_BAR = 633,
+    CARET = 634,
+    AMPERSAND = 635,
+    QUESTION = 636,
+    INVARIANT = 637,
+    PRECISE = 638,
+    HIGH_PRECISION = 639,
+    MEDIUM_PRECISION = 640,
+    LOW_PRECISION = 641,
+    PRECISION = 642,
+    PACKED = 643,
+    RESOURCE = 644,
+    SUPERP = 645
   };
 #endif
 
@@ -553,7 +554,7 @@
         };
     } interm;
 
-#line 557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
+#line 558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355  */
 };
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
@@ -582,7 +583,7 @@
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 586 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
+#line 587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -803,23 +804,23 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  364
+#define YYFINAL  366
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   8818
+#define YYLAST   8949
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  390
+#define YYNTOKENS  391
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  106
+#define YYNNTS  107
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  553
+#define YYNRULES  556
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  693
+#define YYNSTATES  697
 
 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
    by yylex, with out-of-bounds checking.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   644
+#define YYMAXUTOK   645
 
 #define YYTRANSLATE(YYX)                                                \
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -892,69 +893,69 @@
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
      365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
      375,   376,   377,   378,   379,   380,   381,   382,   383,   384,
-     385,   386,   387,   388,   389
+     385,   386,   387,   388,   389,   390
 };
 
 #if YYDEBUG
   /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   292,   292,   298,   301,   305,   309,   312,   316,   320,
-     324,   328,   332,   335,   339,   343,   346,   354,   357,   360,
-     363,   366,   371,   379,   386,   393,   399,   403,   410,   413,
-     419,   426,   436,   444,   449,   479,   485,   489,   493,   513,
-     514,   515,   516,   522,   523,   528,   533,   542,   543,   548,
-     556,   557,   563,   572,   573,   578,   583,   588,   596,   597,
-     605,   616,   617,   626,   627,   636,   637,   646,   647,   655,
-     656,   664,   665,   673,   674,   674,   692,   693,   708,   712,
-     716,   720,   725,   729,   733,   737,   741,   745,   749,   756,
-     759,   770,   777,   782,   787,   795,   799,   803,   807,   812,
-     817,   826,   826,   837,   841,   848,   855,   858,   865,   873,
-     893,   916,   931,   956,   967,   977,   987,   997,  1006,  1009,
-    1013,  1017,  1022,  1030,  1035,  1040,  1045,  1050,  1059,  1070,
-    1097,  1106,  1113,  1120,  1131,  1143,  1149,  1152,  1159,  1163,
-    1167,  1175,  1184,  1187,  1198,  1201,  1204,  1208,  1212,  1216,
-    1223,  1227,  1239,  1253,  1258,  1264,  1270,  1277,  1283,  1288,
-    1293,  1298,  1306,  1310,  1314,  1318,  1322,  1326,  1332,  1341,
-    1344,  1352,  1356,  1365,  1370,  1378,  1382,  1392,  1396,  1400,
-    1405,  1410,  1415,  1420,  1424,  1429,  1434,  1439,  1444,  1449,
-    1454,  1459,  1464,  1469,  1473,  1478,  1483,  1488,  1494,  1500,
-    1506,  1512,  1518,  1524,  1530,  1536,  1542,  1548,  1554,  1560,
-    1565,  1570,  1575,  1580,  1585,  1590,  1596,  1602,  1608,  1614,
-    1620,  1626,  1632,  1638,  1644,  1650,  1656,  1662,  1668,  1674,
-    1680,  1686,  1692,  1698,  1704,  1710,  1716,  1722,  1728,  1734,
-    1740,  1746,  1752,  1757,  1762,  1767,  1772,  1777,  1782,  1787,
-    1792,  1797,  1802,  1807,  1812,  1818,  1824,  1830,  1836,  1842,
-    1848,  1854,  1860,  1866,  1872,  1878,  1884,  1890,  1896,  1902,
-    1908,  1914,  1920,  1926,  1932,  1938,  1944,  1950,  1956,  1962,
-    1968,  1974,  1980,  1986,  1992,  1998,  2004,  2010,  2016,  2022,
-    2028,  2034,  2040,  2046,  2052,  2058,  2064,  2070,  2076,  2082,
-    2088,  2094,  2100,  2105,  2110,  2115,  2120,  2125,  2130,  2135,
-    2140,  2145,  2150,  2155,  2160,  2165,  2170,  2178,  2186,  2194,
-    2202,  2210,  2218,  2226,  2234,  2242,  2250,  2258,  2266,  2274,
-    2279,  2284,  2289,  2294,  2299,  2304,  2309,  2314,  2319,  2324,
-    2329,  2334,  2339,  2344,  2349,  2354,  2362,  2370,  2375,  2380,
-    2385,  2393,  2398,  2403,  2408,  2416,  2421,  2426,  2431,  2439,
-    2444,  2449,  2454,  2459,  2464,  2472,  2477,  2485,  2490,  2498,
-    2503,  2511,  2516,  2524,  2529,  2537,  2542,  2550,  2555,  2560,
-    2565,  2570,  2575,  2580,  2585,  2590,  2595,  2600,  2605,  2610,
-    2615,  2620,  2625,  2633,  2638,  2643,  2648,  2656,  2661,  2666,
-    2671,  2679,  2684,  2689,  2694,  2702,  2707,  2712,  2717,  2725,
-    2730,  2735,  2740,  2748,  2753,  2758,  2763,  2771,  2776,  2781,
-    2786,  2794,  2799,  2804,  2809,  2817,  2822,  2827,  2832,  2840,
-    2845,  2850,  2855,  2863,  2868,  2873,  2878,  2886,  2891,  2896,
-    2901,  2909,  2914,  2919,  2924,  2932,  2937,  2942,  2947,  2955,
-    2960,  2965,  2971,  2977,  2983,  2992,  3001,  3007,  3013,  3019,
-    3025,  3030,  3046,  3051,  3056,  3064,  3064,  3075,  3075,  3085,
-    3088,  3101,  3123,  3150,  3154,  3160,  3165,  3176,  3179,  3185,
-    3194,  3197,  3203,  3207,  3208,  3214,  3215,  3216,  3217,  3218,
-    3219,  3220,  3224,  3225,  3229,  3225,  3241,  3242,  3246,  3246,
-    3253,  3253,  3267,  3270,  3278,  3286,  3297,  3298,  3302,  3305,
-    3311,  3318,  3322,  3330,  3334,  3347,  3350,  3356,  3356,  3376,
-    3379,  3385,  3397,  3409,  3412,  3418,  3418,  3433,  3433,  3449,
-    3449,  3470,  3473,  3479,  3482,  3488,  3492,  3499,  3504,  3509,
-    3516,  3519,  3528,  3532,  3541,  3544,  3547,  3555,  3555,  3577,
-    3583,  3586,  3591,  3594
+       0,   293,   293,   299,   302,   306,   310,   313,   317,   321,
+     325,   329,   333,   336,   340,   344,   347,   355,   358,   361,
+     364,   367,   372,   380,   387,   394,   400,   404,   411,   414,
+     420,   427,   437,   445,   450,   477,   485,   491,   495,   499,
+     519,   520,   521,   522,   528,   529,   534,   539,   548,   549,
+     554,   562,   563,   569,   578,   579,   584,   589,   594,   602,
+     603,   611,   622,   623,   632,   633,   642,   643,   652,   653,
+     661,   662,   670,   671,   679,   680,   680,   698,   699,   714,
+     718,   722,   726,   731,   735,   739,   743,   747,   751,   755,
+     762,   765,   776,   783,   788,   793,   801,   805,   809,   813,
+     818,   823,   832,   832,   843,   847,   854,   861,   864,   871,
+     879,   899,   922,   937,   962,   973,   983,   993,  1003,  1012,
+    1015,  1019,  1023,  1028,  1036,  1041,  1046,  1051,  1056,  1065,
+    1076,  1103,  1112,  1119,  1126,  1137,  1149,  1155,  1158,  1165,
+    1169,  1173,  1181,  1190,  1193,  1204,  1207,  1210,  1214,  1218,
+    1222,  1226,  1232,  1236,  1248,  1262,  1267,  1273,  1279,  1286,
+    1292,  1297,  1302,  1307,  1315,  1319,  1323,  1327,  1331,  1335,
+    1341,  1350,  1357,  1360,  1368,  1372,  1381,  1386,  1394,  1398,
+    1408,  1412,  1416,  1421,  1426,  1431,  1436,  1440,  1445,  1450,
+    1455,  1460,  1465,  1470,  1475,  1480,  1485,  1489,  1494,  1499,
+    1504,  1510,  1516,  1522,  1528,  1534,  1540,  1546,  1552,  1558,
+    1564,  1570,  1576,  1581,  1586,  1591,  1596,  1601,  1606,  1612,
+    1618,  1624,  1630,  1636,  1642,  1648,  1654,  1660,  1666,  1672,
+    1678,  1684,  1690,  1696,  1702,  1708,  1714,  1720,  1726,  1732,
+    1738,  1744,  1750,  1756,  1762,  1768,  1773,  1778,  1783,  1788,
+    1793,  1798,  1803,  1808,  1813,  1818,  1823,  1828,  1834,  1840,
+    1846,  1852,  1858,  1864,  1870,  1876,  1882,  1888,  1894,  1900,
+    1906,  1912,  1918,  1924,  1930,  1936,  1942,  1948,  1954,  1960,
+    1966,  1972,  1978,  1984,  1990,  1996,  2002,  2008,  2014,  2020,
+    2026,  2032,  2038,  2044,  2050,  2056,  2062,  2068,  2074,  2080,
+    2086,  2092,  2098,  2104,  2110,  2116,  2121,  2126,  2131,  2136,
+    2141,  2146,  2151,  2156,  2161,  2166,  2171,  2176,  2181,  2186,
+    2194,  2202,  2210,  2218,  2226,  2234,  2242,  2250,  2258,  2266,
+    2274,  2282,  2290,  2295,  2300,  2305,  2310,  2315,  2320,  2325,
+    2330,  2335,  2340,  2345,  2350,  2355,  2360,  2365,  2370,  2378,
+    2386,  2391,  2396,  2401,  2409,  2414,  2419,  2424,  2432,  2437,
+    2442,  2447,  2455,  2460,  2465,  2470,  2475,  2480,  2488,  2493,
+    2501,  2506,  2514,  2519,  2527,  2532,  2540,  2545,  2553,  2558,
+    2566,  2571,  2576,  2581,  2586,  2591,  2596,  2601,  2606,  2611,
+    2616,  2621,  2626,  2631,  2636,  2641,  2649,  2654,  2659,  2664,
+    2672,  2677,  2682,  2687,  2695,  2700,  2705,  2710,  2718,  2723,
+    2728,  2733,  2741,  2746,  2751,  2756,  2764,  2769,  2774,  2779,
+    2787,  2792,  2797,  2802,  2810,  2815,  2820,  2825,  2833,  2838,
+    2843,  2848,  2856,  2861,  2866,  2871,  2879,  2884,  2889,  2894,
+    2902,  2907,  2912,  2917,  2925,  2930,  2935,  2940,  2948,  2953,
+    2958,  2963,  2971,  2976,  2981,  2987,  2993,  2999,  3008,  3017,
+    3023,  3029,  3035,  3041,  3046,  3062,  3067,  3072,  3080,  3080,
+    3091,  3091,  3101,  3104,  3117,  3139,  3166,  3170,  3176,  3181,
+    3192,  3195,  3201,  3210,  3213,  3219,  3223,  3224,  3230,  3231,
+    3232,  3233,  3234,  3235,  3236,  3240,  3241,  3245,  3241,  3257,
+    3258,  3262,  3262,  3269,  3269,  3283,  3286,  3294,  3302,  3313,
+    3314,  3318,  3321,  3327,  3334,  3338,  3346,  3350,  3363,  3366,
+    3372,  3372,  3392,  3395,  3401,  3413,  3425,  3428,  3434,  3434,
+    3449,  3449,  3465,  3465,  3486,  3489,  3495,  3498,  3504,  3508,
+    3515,  3520,  3525,  3532,  3535,  3544,  3548,  3557,  3560,  3563,
+    3571,  3571,  3593,  3599,  3602,  3607,  3610
 };
 #endif
 
@@ -975,36 +976,36 @@
   "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4", "U8VEC2", "U8VEC3",
   "U8VEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "CENTROID",
   "IN", "OUT", "INOUT", "UNIFORM", "PATCH", "SAMPLE", "BUFFER", "SHARED",
-  "COHERENT", "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", "DVEC2",
-  "DVEC3", "DVEC4", "DMAT2", "DMAT3", "DMAT4", "F16VEC2", "F16VEC3",
-  "F16VEC4", "F16MAT2", "F16MAT3", "F16MAT4", "F32VEC2", "F32VEC3",
-  "F32VEC4", "F32MAT2", "F32MAT3", "F32MAT4", "F64VEC2", "F64VEC3",
-  "F64VEC4", "F64MAT2", "F64MAT3", "F64MAT4", "NOPERSPECTIVE", "FLAT",
-  "SMOOTH", "LAYOUT", "__EXPLICITINTERPAMD", "MAT2X2", "MAT2X3", "MAT2X4",
-  "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3", "MAT4X4", "DMAT2X2",
-  "DMAT2X3", "DMAT2X4", "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2",
-  "DMAT4X3", "DMAT4X4", "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2",
-  "F16MAT3X3", "F16MAT3X4", "F16MAT4X2", "F16MAT4X3", "F16MAT4X4",
-  "F32MAT2X2", "F32MAT2X3", "F32MAT2X4", "F32MAT3X2", "F32MAT3X3",
-  "F32MAT3X4", "F32MAT4X2", "F32MAT4X3", "F32MAT4X4", "F64MAT2X2",
-  "F64MAT2X3", "F64MAT2X4", "F64MAT3X2", "F64MAT3X3", "F64MAT3X4",
-  "F64MAT4X2", "F64MAT4X3", "F64MAT4X4", "ATOMIC_UINT", "SAMPLER1D",
-  "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", "SAMPLER1DSHADOW",
-  "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW", "SAMPLER1DARRAY",
-  "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW", "SAMPLER2DARRAYSHADOW",
-  "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE",
-  "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D", "USAMPLER2D",
-  "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY", "USAMPLER2DARRAY",
-  "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT",
-  "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER",
-  "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY",
-  "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS",
-  "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY",
-  "SAMPLEREXTERNALOES", "F16SAMPLER1D", "F16SAMPLER2D", "F16SAMPLER3D",
-  "F16SAMPLER2DRECT", "F16SAMPLERCUBE", "F16SAMPLER1DARRAY",
-  "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY", "F16SAMPLERBUFFER",
-  "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY", "F16SAMPLER1DSHADOW",
-  "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
+  "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT", "READONLY",
+  "WRITEONLY", "DVEC2", "DVEC3", "DVEC4", "DMAT2", "DMAT3", "DMAT4",
+  "F16VEC2", "F16VEC3", "F16VEC4", "F16MAT2", "F16MAT3", "F16MAT4",
+  "F32VEC2", "F32VEC3", "F32VEC4", "F32MAT2", "F32MAT3", "F32MAT4",
+  "F64VEC2", "F64VEC3", "F64VEC4", "F64MAT2", "F64MAT3", "F64MAT4",
+  "NOPERSPECTIVE", "FLAT", "SMOOTH", "LAYOUT", "__EXPLICITINTERPAMD",
+  "MAT2X2", "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2",
+  "MAT4X3", "MAT4X4", "DMAT2X2", "DMAT2X3", "DMAT2X4", "DMAT3X2",
+  "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4", "F16MAT2X2",
+  "F16MAT2X3", "F16MAT2X4", "F16MAT3X2", "F16MAT3X3", "F16MAT3X4",
+  "F16MAT4X2", "F16MAT4X3", "F16MAT4X4", "F32MAT2X2", "F32MAT2X3",
+  "F32MAT2X4", "F32MAT3X2", "F32MAT3X3", "F32MAT3X4", "F32MAT4X2",
+  "F32MAT4X3", "F32MAT4X4", "F64MAT2X2", "F64MAT2X3", "F64MAT2X4",
+  "F64MAT3X2", "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", "F64MAT4X3",
+  "F64MAT4X4", "ATOMIC_UINT", "SAMPLER1D", "SAMPLER2D", "SAMPLER3D",
+  "SAMPLERCUBE", "SAMPLER1DSHADOW", "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW",
+  "SAMPLER1DARRAY", "SAMPLER2DARRAY", "SAMPLER1DARRAYSHADOW",
+  "SAMPLER2DARRAYSHADOW", "ISAMPLER1D", "ISAMPLER2D", "ISAMPLER3D",
+  "ISAMPLERCUBE", "ISAMPLER1DARRAY", "ISAMPLER2DARRAY", "USAMPLER1D",
+  "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER1DARRAY",
+  "USAMPLER2DARRAY", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW",
+  "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER",
+  "USAMPLERBUFFER", "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW",
+  "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY", "SAMPLER2DMS", "ISAMPLER2DMS",
+  "USAMPLER2DMS", "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY",
+  "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES", "F16SAMPLER1D",
+  "F16SAMPLER2D", "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE",
+  "F16SAMPLER1DARRAY", "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY",
+  "F16SAMPLERBUFFER", "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY",
+  "F16SAMPLER1DSHADOW", "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
   "F16SAMPLER2DARRAYSHADOW", "F16SAMPLER2DRECTSHADOW",
   "F16SAMPLERCUBESHADOW", "F16SAMPLERCUBEARRAYSHADOW", "SAMPLER",
   "SAMPLERSHADOW", "TEXTURE1D", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE",
@@ -1064,11 +1065,12 @@
   "fully_specified_type", "invariant_qualifier", "interpolation_qualifier",
   "layout_qualifier", "layout_qualifier_id_list", "layout_qualifier_id",
   "precise_qualifier", "type_qualifier", "single_type_qualifier",
-  "storage_qualifier", "type_name_list", "type_specifier",
-  "array_specifier", "type_specifier_nonarray", "precision_qualifier",
-  "struct_specifier", "$@3", "$@4", "struct_declaration_list",
-  "struct_declaration", "struct_declarator_list", "struct_declarator",
-  "initializer", "initializer_list", "declaration_statement", "statement",
+  "storage_qualifier", "non_uniform_qualifier", "type_name_list",
+  "type_specifier", "array_specifier", "type_specifier_nonarray",
+  "precision_qualifier", "struct_specifier", "$@3", "$@4",
+  "struct_declaration_list", "struct_declaration",
+  "struct_declarator_list", "struct_declarator", "initializer",
+  "initializer_list", "declaration_statement", "statement",
   "simple_statement", "compound_statement", "$@5", "$@6",
   "statement_no_new_scope", "statement_scoped", "$@7", "$@8",
   "compound_statement_no_new_scope", "statement_list",
@@ -1127,16 +1129,17 @@
      605,   606,   607,   608,   609,   610,   611,   612,   613,   614,
      615,   616,   617,   618,   619,   620,   621,   622,   623,   624,
      625,   626,   627,   628,   629,   630,   631,   632,   633,   634,
-     635,   636,   637,   638,   639,   640,   641,   642,   643,   644
+     635,   636,   637,   638,   639,   640,   641,   642,   643,   644,
+     645
 };
 # endif
 
-#define YYPACT_NINF -495
+#define YYPACT_NINF -634
 
 #define yypact_value_is_default(Yystate) \
-  (!!((Yystate) == (-495)))
+  (!!((Yystate) == (-634)))
 
-#define YYTABLE_NINF -499
+#define YYTABLE_NINF -502
 
 #define yytable_value_is_error(Yytable_value) \
   0
@@ -1145,76 +1148,76 @@
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-      -1,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -328,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,   -12,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,    17,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,    80,  -495,    20,     7,    39,
-      52,  5289,   -17,  -495,    99,  -495,  -495,  -495,  -495,  3757,
-    -495,  -495,  -495,    73,  -495,  -495,   686,  -495,  -495,   119,
-     250,   105,  -495,  8210,     3,  -495,  -495,   110,  -495,  5289,
-    -495,  -495,  -495,  5289,   161,   166,  -495,  -335,    35,  -495,
-    -495,  -495,  6008,    78,  -495,  -495,  -495,    64,  -495,   129,
-      76,  -495,  -495,  5289,   130,  -495,    56,  1070,  -495,  -495,
-    -495,  -495,    73,  -336,  -495,  6375,    59,  -495,   176,  -495,
-      -3,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  7476,  7476,  7476,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,    29,  -495,  -495,  -495,   142,    91,
-    7843,   144,  -495,  7476,    95,    90,   138,    54,   135,   123,
-     125,   127,   162,   159,    10,   147,  -495,  6742,  -495,   186,
-    7476,  -495,   250,  5289,  5289,   187,  4140,  -495,  -495,  -495,
-     143,   145,  -495,   154,   156,   150,  7109,   157,  7476,   153,
-     163,   160,   164,  -495,  -495,    58,  -495,  -495,    12,  -495,
-       7,   165,  -495,  -495,  -495,  -495,  1454,  -495,  -495,  -495,
-    -495,  -495,  -495,  -495,  -495,  -495,   300,    78,  6375,    60,
-    6375,  -495,  -495,  6375,  5289,  -495,   199,  -495,  -495,  -495,
-      93,  -495,  -495,  7476,   201,  -495,  -495,  7476,   167,  -495,
-    -495,  -495,  7476,  7476,  7476,  7476,  7476,  7476,  7476,  7476,
-    7476,  7476,  7476,  7476,  7476,  7476,  7476,  7476,  7476,  7476,
-    7476,  -495,  -495,  -495,   168,  -495,  -495,  -495,  -495,  4523,
-     187,    73,    34,  -495,  -495,  -495,  -495,  -495,  1838,  -495,
-    7476,  -495,  -495,    53,  7476,   115,  -495,  -495,   205,  -495,
-    1838,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  7476,  7476,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  6375,  -495,   108,  -495,  4906,  -495,  -495,   169,   170,
-    -495,  -495,  -495,  -495,  -495,    95,    95,    90,    90,   138,
-     138,   138,   138,    54,    54,   135,   123,   125,   127,   162,
-     159,  7476,  -495,  -495,    75,    78,   187,  -495,   210,  2990,
-      94,  -495,    96,  -495,  3374,   175,     5,  -495,  1838,  -495,
-    -495,  -495,  -495,  5641,  -495,  -495,   117,  -495,  -495,   178,
-    -495,  -495,  3374,   172,  -495,   170,   214,  5289,   179,  7476,
-     180,   205,   181,  -495,  -495,  7476,  7476,  -495,   171,   184,
-     522,   188,  2606,  -495,   189,   185,  2222,   194,  -495,  -495,
-    -495,  -495,    98,  7476,  2222,   172,  -495,  -495,  1838,  6375,
-    -495,  -495,  -495,  -495,   190,   170,  -495,  -495,  1838,   191,
-    -495,  -495,  -495
+    3391,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -311,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -295,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -301,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -241,  -634,  -302,  -342,
+    -290,  -254,  5696,  -300,  -634,  -210,  -634,  -634,  -634,  -634,
+    4160,  -634,  -634,  -634,  -634,  -219,  -634,  -634,   696,  -634,
+    -634,  -189,   -69,  -207,  -634,  8625,  -320,  -634,  -634,  -203,
+    -634,  5696,  -634,  -634,  -634,  5696,  -155,  -154,  -634,  -324,
+    -288,  -634,  -634,  -634,  6417,  -190,  -634,  -634,  -634,  -292,
+    -634,  -196,  -287,  -634,  -634,  5696,  -195,  -634,  -306,  1081,
+    -634,  -634,  -634,  -634,  -219,  -325,  -634,  6785,  -310,  -634,
+    -151,  -634,  -277,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  7889,  7889,  7889,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  -309,  -634,  -634,  -634,
+    -185,  -283,  8257,  -183,  -634,  7889,  -227,  -263,  -299,  -318,
+    -194,  -204,  -202,  -200,  -165,  -166,  -321,  -179,  -634,  -634,
+    7153,  -634,  -140,  7889,  -634,   -69,  5696,  5696,  -139,  4544,
+    -634,  -634,  -634,  -182,  -180,  -634,  -173,  -169,  -178,  7521,
+    -164,  7889,  -174,  -163,  -167,  -162,  -634,  -634,  -252,  -634,
+    -634,  -237,  -634,  -342,  -161,  -158,  -634,  -634,  -634,  -634,
+    1466,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+     -19,  -190,  6785,  -296,  6785,  -634,  -634,  6785,  5696,  -634,
+    -127,  -634,  -634,  -634,  -278,  -634,  -634,  7889,  -121,  -634,
+    -634,  7889,  -156,  -634,  -634,  -634,  7889,  7889,  7889,  7889,
+    7889,  7889,  7889,  7889,  7889,  7889,  7889,  7889,  7889,  7889,
+    7889,  7889,  7889,  7889,  7889,  -634,  -634,  -634,  -157,  -634,
+    -634,  -634,  -634,  4928,  -139,  -219,  -236,  -634,  -634,  -634,
+    -634,  -634,  1851,  -634,  7889,  -634,  -634,  -230,  7889,  -213,
+    -634,  -634,  -118,  -634,  1851,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  -634,  7889,  7889,  -634,  -634,
+    -634,  -634,  -634,  -634,  -634,  6785,  -634,  -270,  -634,  5312,
+    -634,  -634,  -153,  -150,  -634,  -634,  -634,  -634,  -634,  -227,
+    -227,  -263,  -263,  -299,  -299,  -299,  -299,  -318,  -318,  -194,
+    -204,  -202,  -200,  -165,  -166,  7889,  -634,  -634,  -226,  -190,
+    -139,  -634,  -113,  3006,  -275,  -634,  -253,  -634,  3776,  -148,
+    -282,  -634,  1851,  -634,  -634,  -634,  -634,  6049,  -634,  -634,
+    -208,  -634,  -634,  -147,  -634,  -634,  3776,  -146,  -634,  -150,
+    -111,  5696,  -145,  7889,  -144,  -118,  -143,  -634,  -634,  7889,
+    7889,  -634,  -149,  -141,   196,  -136,  2621,  -634,  -116,  -120,
+    2236,  -137,  -634,  -634,  -634,  -634,  -239,  7889,  2236,  -146,
+    -634,  -634,  1851,  6785,  -634,  -634,  -634,  -634,  -119,  -150,
+    -634,  -634,  1851,  -112,  -634,  -634,  -634
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1222,108 +1225,108 @@
      means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,   151,   152,   180,   178,   181,   179,   182,   150,   193,
-     183,   184,   191,   192,   189,   190,   187,   188,   185,   186,
-     167,   209,   210,   211,   212,   213,   214,   227,   228,   229,
-     224,   225,   226,   239,   240,   241,   221,   222,   223,   236,
-     237,   238,   218,   219,   220,   233,   234,   235,   215,   216,
-     217,   230,   231,   232,   194,   195,   196,   242,   243,   244,
-     156,   154,   155,   153,   159,   157,   158,   160,   161,   162,
-     163,   164,   165,   166,   197,   198,   199,   254,   255,   256,
-     200,   201,   202,   266,   267,   268,   203,   204,   205,   278,
-     279,   280,   206,   207,   208,   290,   291,   292,   133,   132,
-     131,     0,   134,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     329,   330,   331,   332,   333,   334,   336,   337,   338,   339,
-     340,   341,   343,   344,   347,   348,   349,   351,   352,   314,
-     315,   335,   342,   353,   355,   356,   357,   359,   360,   451,
-     316,   317,   318,   345,   319,   323,   324,   327,   350,   354,
-     358,   320,   321,   325,   326,   346,   322,   328,   361,   362,
-     363,   365,   367,   369,   371,   373,   377,   378,   379,   380,
-     381,   382,   384,   385,   386,   387,   388,   389,   391,   393,
-     394,   395,   397,   398,   375,   383,   390,   399,   401,   402,
-     403,   405,   406,   364,   366,   368,   392,   370,   372,   374,
-     376,   396,   400,   404,   452,   453,   456,   457,   458,   459,
-     454,   455,   407,   409,   410,   411,   413,   414,   415,   417,
-     418,   419,   421,   422,   423,   425,   426,   427,   429,   430,
-     431,   433,   434,   435,   437,   438,   439,   441,   442,   443,
-     445,   446,   447,   449,   450,   408,   412,   416,   420,   424,
-     432,   436,   440,   428,   444,   448,     0,   177,   461,   546,
-     130,   141,   462,   463,   464,     0,   545,     0,   547,     0,
-     107,   106,     0,   118,   123,   148,   147,   145,   149,     0,
-     142,   144,   128,   171,   146,   460,     0,   542,   544,     0,
-       0,     0,   467,     0,     0,    95,    92,     0,   105,     0,
-     114,   108,   116,     0,   117,     0,    93,   124,     0,    98,
-     143,   129,     0,   172,     1,   543,   169,     0,   140,   138,
-       0,   136,   465,     0,     0,    96,     0,     0,   548,   109,
-     113,   115,   111,   119,   110,     0,   125,   101,     0,    99,
-       0,     2,    12,    13,    10,    11,     4,     5,     6,     7,
-       8,     9,    15,    14,     0,     0,     0,   173,    41,    40,
-      42,    39,     3,    17,    35,    19,    24,    25,     0,     0,
-      29,     0,    43,     0,    47,    50,    53,    58,    61,    63,
-      65,    67,    69,    71,    73,     0,    33,     0,   168,     0,
-       0,   135,     0,     0,     0,     0,     0,   469,    94,    97,
-       0,     0,   527,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   493,   502,   506,    43,    76,    89,     0,   482,
-       0,   128,   485,   504,   484,   483,     0,   486,   487,   508,
-     488,   515,   489,   490,   523,   491,     0,   112,     0,   120,
-       0,   477,   127,     0,     0,   103,     0,   100,    36,    37,
-       0,    21,    22,     0,     0,    27,    26,     0,   177,    30,
-      32,    38,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   153,   154,   183,   181,   184,   182,   185,   152,   196,
+     186,   187,   194,   195,   192,   193,   190,   191,   188,   189,
+     169,   212,   213,   214,   215,   216,   217,   230,   231,   232,
+     227,   228,   229,   242,   243,   244,   224,   225,   226,   239,
+     240,   241,   221,   222,   223,   236,   237,   238,   218,   219,
+     220,   233,   234,   235,   197,   198,   199,   245,   246,   247,
+     158,   156,   157,   155,   161,   159,   160,   162,   163,   171,
+     164,   165,   166,   167,   168,   200,   201,   202,   257,   258,
+     259,   203,   204,   205,   269,   270,   271,   206,   207,   208,
+     281,   282,   283,   209,   210,   211,   293,   294,   295,   134,
+     133,   132,     0,   135,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
+     316,   332,   333,   334,   335,   336,   337,   339,   340,   341,
+     342,   343,   344,   346,   347,   350,   351,   352,   354,   355,
+     317,   318,   338,   345,   356,   358,   359,   360,   362,   363,
+     454,   319,   320,   321,   348,   322,   326,   327,   330,   353,
+     357,   361,   323,   324,   328,   329,   349,   325,   331,   364,
+     365,   366,   368,   370,   372,   374,   376,   380,   381,   382,
+     383,   384,   385,   387,   388,   389,   390,   391,   392,   394,
+     396,   397,   398,   400,   401,   378,   386,   393,   402,   404,
+     405,   406,   408,   409,   367,   369,   371,   395,   373,   375,
+     377,   379,   399,   403,   407,   455,   456,   459,   460,   461,
+     462,   457,   458,   410,   412,   413,   414,   416,   417,   418,
+     420,   421,   422,   424,   425,   426,   428,   429,   430,   432,
+     433,   434,   436,   437,   438,   440,   441,   442,   444,   445,
+     446,   448,   449,   450,   452,   453,   411,   415,   419,   423,
+     427,   435,   439,   443,   431,   447,   451,     0,   180,   464,
+     549,   131,   142,   465,   466,   467,     0,   548,     0,   550,
+       0,   108,   107,     0,   119,   124,   149,   148,   146,   150,
+       0,   143,   145,   151,   129,   174,   147,   463,     0,   545,
+     547,     0,     0,     0,   470,     0,     0,    96,    93,     0,
+     106,     0,   115,   109,   117,     0,   118,     0,    94,   125,
+       0,    99,   144,   130,     0,   175,     1,   546,   172,     0,
+     141,   139,     0,   137,   468,     0,     0,    97,     0,     0,
+     551,   110,   114,   116,   112,   120,   111,     0,   126,   102,
+       0,   100,     0,     2,    12,    13,    10,    11,     4,     5,
+       6,     7,     8,     9,    15,    14,     0,     0,     0,   176,
+      42,    41,    43,    40,     3,    17,    36,    19,    24,    25,
+       0,     0,    29,     0,    44,     0,    48,    51,    54,    59,
+      62,    64,    66,    68,    70,    72,    74,     0,    35,    33,
+       0,   170,     0,     0,   136,     0,     0,     0,     0,     0,
+     472,    95,    98,     0,     0,   530,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   496,   505,   509,    44,    77,
+      90,     0,   485,     0,   151,   129,   488,   507,   487,   486,
+       0,   489,   490,   511,   491,   518,   492,   493,   526,   494,
+       0,   113,     0,   121,     0,   480,   128,     0,     0,   104,
+       0,   101,    37,    38,     0,    21,    22,     0,     0,    27,
+      26,     0,   180,    30,    32,    39,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    74,   174,   175,     0,   170,    91,   139,   137,     0,
-       0,   475,     0,   473,   468,   470,   538,   537,     0,   529,
-       0,   541,   539,     0,     0,     0,   522,   525,     0,   492,
-       0,    79,    80,    82,    81,    84,    85,    86,    87,    88,
-      83,    78,     0,     0,   507,   503,   505,   509,   516,   524,
-     122,     0,   480,     0,   126,     0,   104,    16,     0,    23,
-      20,    31,    44,    45,    46,    49,    48,    51,    52,    56,
-      57,    54,    55,    59,    60,    62,    64,    66,    68,    70,
-      72,     0,   176,   466,     0,   476,     0,   471,     0,     0,
-       0,   540,     0,   521,     0,   552,     0,   550,   494,    77,
-      90,   121,   478,     0,   102,    18,     0,   472,   474,     0,
-     532,   531,   534,   500,   517,   513,     0,     0,     0,     0,
-       0,     0,     0,   479,   481,     0,     0,   533,     0,     0,
-     512,     0,     0,   510,     0,     0,     0,     0,   549,   551,
-     495,    75,     0,   535,     0,   500,   499,   501,   519,     0,
-     497,   526,   496,   553,     0,   536,   530,   511,   520,     0,
-     514,   528,   518
+       0,     0,     0,     0,     0,    75,   177,   178,     0,   173,
+      92,   140,   138,     0,     0,   478,     0,   476,   471,   473,
+     541,   540,     0,   532,     0,   544,   542,     0,     0,     0,
+     525,   528,     0,   495,     0,    80,    81,    83,    82,    85,
+      86,    87,    88,    89,    84,    79,     0,     0,   510,   506,
+     508,   512,   519,   527,   123,     0,   483,     0,   127,     0,
+     105,    16,     0,    23,    20,    31,    45,    46,    47,    50,
+      49,    52,    53,    57,    58,    55,    56,    60,    61,    63,
+      65,    67,    69,    71,    73,     0,   179,   469,     0,   479,
+       0,   474,     0,     0,     0,   543,     0,   524,     0,   555,
+       0,   553,   497,    78,    91,   122,   481,     0,   103,    18,
+       0,   475,   477,     0,   535,   534,   537,   503,   520,   516,
+       0,     0,     0,     0,     0,     0,     0,   482,   484,     0,
+       0,   536,     0,     0,   515,     0,     0,   513,     0,     0,
+       0,     0,   552,   554,   498,    76,     0,   538,     0,   503,
+     502,   504,   522,     0,   500,   529,   499,   556,     0,   539,
+     533,   514,   523,     0,   517,   531,   521
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-    -495,  -495,  8169,  -495,   -29,   -27,  -494,   -31,    30,    28,
-      31,    33,    27,    32,  -495,   -37,  -495,   -57,  -495,   -65,
-     -86,     1,  -495,  -495,  -495,    21,  -495,  -495,  -495,   211,
-     216,   213,  -495,  -495,  -284,  -495,  -495,  -495,  -495,   126,
-    -495,     2,    -9,  -495,  -495,     0,   -11,  -495,   252,  -495,
-    -495,  -495,  -105,  -112,    38,   -47,  -134,  -495,   -49,  -144,
-    -314,   -90,  -495,  -495,  -101,  -100,  -495,  -495,   227,  -225,
-     -40,  -495,    97,  -495,   -62,  -495,   100,  -495,  -495,  -495,
-    -495,   102,  -495,  -495,  -495,  -495,  -495,  -495,  -495,  -495,
-     245,  -495,  -495,  -495,  -495,   -69
+    -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,  -634,  -289,  -634,  -358,  -355,  -401,  -364,  -279,  -307,
+    -276,  -280,  -273,  -281,  -634,  -354,  -634,  -378,  -634,  -367,
+    -397,     1,  -634,  -634,  -634,     2,  -634,  -634,  -634,   -98,
+     -93,   -92,  -634,  -634,  -600,  -634,  -634,  -634,  -634,  -181,
+    -634,  -319,  -326,  -634,     6,  -634,     0,  -332,  -634,   -54,
+    -634,  -634,  -634,  -428,  -433,  -272,  -353,  -477,  -634,  -357,
+    -467,  -633,  -400,  -634,  -634,  -410,  -408,  -634,  -634,   -80,
+    -545,  -350,  -634,  -216,  -634,  -371,  -634,  -214,  -634,  -634,
+    -634,  -634,  -212,  -634,  -634,  -634,  -634,  -634,  -634,  -634,
+    -634,   -61,  -634,  -634,  -634,  -634,  -375
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   412,   413,   414,   588,   415,   416,   417,   418,   419,
-     420,   421,   465,   423,   424,   425,   426,   427,   428,   429,
-     430,   431,   432,   433,   434,   466,   611,   467,   572,   468,
-     537,   469,   317,   494,   390,   470,   319,   320,   321,   350,
-     351,   352,   322,   323,   324,   325,   326,   327,   370,   371,
-     328,   329,   330,   331,   367,   436,   363,   333,   334,   335,
-     443,   373,   446,   447,   542,   543,   492,   583,   472,   473,
-     474,   475,   560,   652,   681,   660,   661,   662,   682,   476,
-     477,   478,   479,   663,   648,   480,   481,   664,   689,   482,
-     483,   484,   624,   548,   619,   642,   658,   659,   485,   336,
-     337,   338,   347,   486,   626,   627
+      -1,   414,   415,   416,   592,   417,   418,   419,   420,   421,
+     422,   423,   468,   425,   426,   427,   428,   429,   430,   431,
+     432,   433,   434,   435,   436,   469,   615,   470,   576,   471,
+     541,   472,   318,   498,   392,   473,   320,   321,   322,   352,
+     353,   354,   323,   324,   325,   326,   327,   328,   372,   373,
+     329,   330,   331,   332,   438,   369,   439,   365,   335,   336,
+     337,   446,   375,   449,   450,   546,   547,   496,   587,   476,
+     477,   478,   479,   564,   656,   685,   664,   665,   666,   686,
+     480,   481,   482,   483,   667,   652,   484,   485,   668,   693,
+     486,   487,   488,   628,   552,   623,   646,   662,   663,   489,
+     338,   339,   340,   349,   490,   630,   631
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1331,75 +1334,76 @@
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     332,   316,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,   318,   384,   362,   362,   599,   600,   601,   602,   339,
-     488,   385,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     360,   354,   308,   353,   452,   435,   453,   454,   491,   361,
-     457,   368,   576,   376,   545,   628,   332,   316,   539,   341,
-     646,   500,   344,   374,   360,   340,   386,   355,   677,   354,
-     356,   353,   680,   354,   580,   530,   582,   318,   646,   584,
-     680,   496,   362,   509,   497,   650,   309,   501,   502,   651,
-     375,   487,   489,   445,   346,   444,   573,   471,   342,   574,
-     310,   311,   312,   313,   314,   315,   -34,   345,   503,   585,
-     531,   553,   504,   555,   519,   520,   387,   348,   616,   388,
-     534,   617,   389,   536,   618,   561,   562,   563,   564,   565,
-     566,   567,   568,   569,   570,   437,   349,   573,   437,   437,
-     621,   357,   438,   449,   571,   493,   581,   545,   439,   521,
-     522,   491,   362,   491,   441,   360,   491,   437,   589,   616,
-     442,   366,   637,   445,   540,   444,   445,   631,   444,   506,
-     591,   587,   643,   688,   644,   507,   684,   573,   573,   515,
-     573,   516,   573,   312,   313,   314,   372,   512,   513,   514,
-     632,   377,   633,   545,   517,   518,   471,   523,   524,   573,
-     623,   573,   655,   382,   576,   620,   595,   596,   383,   622,
-     597,   598,   603,   604,   445,   440,   444,   448,   495,   654,
-     505,   510,   525,   526,   527,   529,   528,   532,   535,   541,
-     546,   549,   547,   550,   554,   629,   630,   551,   556,   558,
-     557,   586,   -33,   590,   491,   -28,   559,   625,   612,   635,
-     615,   639,   649,  -498,   573,   656,   665,   666,   673,   445,
-     668,   444,   674,   670,   576,   690,   636,   675,   471,   462,
-     678,   679,   683,   692,   606,   605,   609,   691,   607,   645,
-     471,   608,   610,   667,   380,   379,   381,   343,   538,   638,
-     640,   676,   369,   686,   378,   687,   491,   645,   614,   641,
-     657,   365,   669,   577,     0,   445,   578,   444,   579,     0,
-       0,   672,     0,     0,     0,     0,     0,     0,   671,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   685,     0,
-       0,     0,   536,     0,     0,     0,     0,     0,     0,   471,
-       0,   460,   491,     0,   471,     0,   647,     0,   471,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   360,     0,
-       0,     0,   471,     0,   647,     0,     0,   361,     0,     0,
+     334,   317,   319,   355,   362,   455,   333,   456,   457,   495,
+     437,   460,   370,   580,   378,   584,   549,   586,   543,   632,
+     588,   346,   343,   523,   524,   534,   348,   388,   650,   362,
+     505,   506,   355,   681,   386,   364,   364,   684,   521,   522,
+     364,   504,   492,   387,   513,   684,   650,   341,   377,   -34,
+     440,   507,   491,   493,   440,   508,   447,   497,   525,   526,
+     535,   344,   452,   342,   440,   357,   347,   441,   358,   350,
+     589,   585,   444,   442,   389,   424,   510,   390,   445,   654,
+     391,   591,   511,   655,   647,   622,   538,   577,   500,   540,
+     577,   501,   557,   636,   559,   637,   565,   566,   567,   568,
+     569,   570,   571,   572,   573,   574,   648,   519,   635,   520,
+     549,   351,   577,   359,   495,   575,   495,   502,   503,   495,
+     688,   362,   603,   604,   605,   606,   577,   447,   577,   620,
+     447,   578,   621,   595,   368,   577,   515,   692,   625,   620,
+     593,   364,   641,   313,   314,   315,   516,   517,   518,   527,
+     528,   424,   577,   627,   424,   374,   549,   577,   659,   379,
+     658,   599,   600,   607,   608,   580,   601,   602,   384,   385,
+     440,   443,   499,   451,   509,   514,   529,   530,   531,   447,
+     532,   533,   536,   539,   545,   553,   550,   624,   551,   554,
+     555,   626,   560,   562,   558,   561,   590,   -35,   633,   634,
+     -33,   563,   594,   -28,   616,   629,   694,   495,   639,   643,
+     653,   660,   669,   619,   670,   577,  -501,   672,   678,   677,
+     674,   679,   687,   610,   447,   580,   465,   596,   597,   598,
+     424,   424,   424,   424,   424,   424,   424,   424,   424,   424,
+     424,   424,   424,   424,   424,   424,   682,   683,   640,   695,
+     609,   696,   612,   614,   371,   611,   671,   382,   381,   495,
+     613,   649,   345,   383,   542,   680,   644,   642,   690,   380,
+     447,   691,   618,   645,   581,   661,   582,   367,   583,   649,
+     673,   675,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   676,     0,     0,     0,     0,     0,   540,
+       0,     0,     0,   463,     0,   495,     0,     0,     0,   651,
+     689,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   356,     0,     0,   362,     0,   651,   333,     0,
+     363,     0,     0,     0,     0,     0,   333,     0,   334,   317,
+     319,     0,     0,     0,   333,   376,     0,     0,     0,     0,
+       0,   356,     0,     0,     0,   356,     0,   333,     0,     0,
+       0,   333,     0,     0,   424,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   448,     0,     0,     0,   475,
+       0,   333,     0,     0,     0,   474,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   471,     0,     0,     0,   471,     0,     0,     0,
-       0,     0,     0,     0,   471,     0,     0,     0,   471,     0,
-       0,     0,     0,     0,     0,     0,   364,     0,   471,     1,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   448,   544,     0,   448,
+       0,     0,   333,   333,     0,   333,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     475,     0,     0,     0,     0,     0,   474,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   448,     0,
+       0,     0,     0,     0,   333,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   448,     0,     0,     0,     0,     0,   333,
+       0,     0,   475,     0,     0,     0,     0,     0,   474,     0,
+       0,     0,     0,     0,   475,     0,     0,     0,     0,     0,
+     474,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   448,
+       0,     0,     0,     0,     0,   333,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   475,     0,     0,     0,     0,   475,   474,
+       0,     0,   475,     0,   474,     0,     0,     0,   474,     0,
+       0,     0,     0,     0,     0,     0,   475,     0,     0,     0,
+       0,   363,   474,     0,     0,     0,     0,   333,     0,     0,
+       0,     0,     0,     0,     0,     0,   475,     0,     0,     0,
+     475,     0,   474,     0,     0,     0,   474,     0,   475,     0,
+       0,     0,   475,     0,   474,     0,     0,     0,   474,     0,
+       0,     0,   475,     0,     0,     0,   366,     0,   474,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
@@ -1431,170 +1435,55 @@
      271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
      281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
      291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,     0,     0,   308,
+     301,   302,   303,   304,   305,   306,   307,   308,     0,     0,
+     309,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   309,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   310,   311,   312,
-     313,   314,   315,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,   450,   451,   452,     0,   453,   454,   455,   456,
-     457,   458,   459,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   460,   391,   308,   392,   393,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,   403,     0,     0,   404,   405,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   406,     0,   461,
-       0,   462,   463,     0,     0,     0,     0,   464,   408,   409,
-     410,   411,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   310,   311,   312,   313,   314,   315,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,   450,   451,   452,     0,
-     453,   454,   455,   456,   457,   458,   459,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   460,   391,   308,   392,   393,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-       0,     0,   404,   405,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   406,     0,   461,     0,   462,   575,     0,     0,     0,
-       0,   464,   408,   409,   410,   411,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   310,   311,   312,   313,   314,
-     315,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-     450,   451,   452,     0,   453,   454,   455,   456,   457,   458,
-     459,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   460,
-     391,   308,   392,   393,   394,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,     0,     0,   404,   405,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   406,     0,   461,     0,   462,
-       0,     0,     0,     0,     0,   464,   408,   409,   410,   411,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   310,
-     311,   312,   313,   314,   315,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,   450,   451,   452,     0,   453,   454,
-     455,   456,   457,   458,   459,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,   460,   391,   308,   392,   393,   394,   395,
-     396,   397,   398,   399,   400,   401,   402,   403,     0,     0,
-     404,   405,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   406,
-       0,   461,     0,   377,     0,     0,     0,     0,     0,   464,
-     408,   409,   410,   411,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   310,   311,   312,   313,   314,   315,     1,
+       0,     0,     0,     0,   310,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
+     313,   314,   315,   316,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,   453,   454,   455,     0,   456,   457,   458,
+     459,   460,   461,   462,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   463,   393,   309,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,   404,   405,     0,     0,
+     406,   407,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
+       0,   464,     0,   465,   466,     0,     0,     0,     0,   467,
+     410,   411,   412,   413,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   311,   312,   313,   314,   315,   316,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,   450,   451,
-     452,     0,   453,   454,   455,   456,   457,   458,   459,    20,
+      12,    13,    14,    15,    16,    17,    18,    19,   453,   454,
+     455,     0,   456,   457,   458,   459,   460,   461,   462,    20,
       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
@@ -1623,13 +1512,244 @@
      271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
      281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
      291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   460,   391,   308,
-     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,     0,     0,   404,   405,     0,     0,     0,     0,
+     301,   302,   303,   304,   305,   306,   307,   308,   463,   393,
+     309,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+     403,   404,   405,     0,     0,   406,   407,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   406,     0,   461,     0,     0,     0,     0,
-       0,     0,     0,   464,   408,   409,   410,   411,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   310,   311,   312,
+       0,     0,     0,     0,   408,     0,   464,     0,   465,   579,
+       0,     0,     0,     0,   467,   410,   411,   412,   413,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
+     313,   314,   315,   316,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,   453,   454,   455,     0,   456,   457,   458,
+     459,   460,   461,   462,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   463,   393,   309,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,   404,   405,     0,     0,
+     406,   407,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
+       0,   464,     0,   465,     0,     0,     0,     0,     0,   467,
+     410,   411,   412,   413,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   311,   312,   313,   314,   315,   316,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,   453,   454,
+     455,     0,   456,   457,   458,   459,   460,   461,   462,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   463,   393,
+     309,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+     403,   404,   405,     0,     0,   406,   407,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   408,     0,   464,     0,   379,     0,
+       0,     0,     0,     0,   467,   410,   411,   412,   413,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
+     313,   314,   315,   316,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,   453,   454,   455,     0,   456,   457,   458,
+     459,   460,   461,   462,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,   463,   393,   309,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,   404,   405,     0,     0,
+     406,   407,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
+       0,   464,     0,     0,     0,     0,     0,     0,     0,   467,
+     410,   411,   412,   413,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   311,   312,   313,   314,   315,   316,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,     0,   393,
+     309,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+     403,   404,   405,     0,     0,   406,   407,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   408,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   467,   410,   411,   412,   413,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
+     313,   314,   315,   316,     1,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,     0,     0,   309,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   310,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   311,   312,   313,   314,   315,   316,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,     0,   393,
+     309,   394,   395,   396,   397,   398,   399,   400,   401,   402,
+     403,   404,   405,     0,     0,   406,   407,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   408,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   410,   411,   412,   413,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   311,   312,
      313,   314,   315,     1,     2,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -1662,13 +1782,13 @@
      277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
      287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
      297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,     0,   391,   308,   392,   393,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,   403,     0,     0,   404,   405,
+     307,   308,     0,   360,   309,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   406,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   464,   408,   409,
-     410,   411,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   310,   311,   312,   313,   314,   315,     1,     2,     3,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   361,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   311,   312,   313,   314,   315,     1,     2,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    20,    21,    22,
@@ -1700,128 +1820,90 @@
      273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
      283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
      293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,     0,   391,   308,   392,   393,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
-       0,     0,   404,   405,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   406,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   408,   409,   410,   411,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   310,   311,   312,   313,   314,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,     0,   358,
-     308,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     303,   304,   305,   306,   307,   308,     0,     0,   309,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   359,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   310,   311,
-     312,   313,   314,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,     0,     0,   308,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   548,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   311,   312,   313,   314,
+     315,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+       0,     0,   309,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   544,     0,     0,     0,     0,     0,     0,     0,
+       0,   617,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   310,   311,   312,   313,   314,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,     0,     0,   308,     0,     0,     0,
+     311,   312,   313,   314,   315,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,     0,     0,   309,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   613,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   638,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   310,   311,   312,   313,   314,     1,
+       0,     0,     0,     0,   311,   312,   313,   314,   315,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,    20,
@@ -1853,25 +1935,22 @@
      271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
      281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
      291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,     0,     0,   308,
+     301,   302,   303,   304,   305,   306,   307,   308,     0,     0,
+     309,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   634,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   310,   311,   312,
-     313,   314,     1,     2,     3,     4,     5,     6,     7,     8,
+       0,     0,     0,     0,     3,     4,     5,     6,     7,     0,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    20,    21,    22,    23,    24,    25,    26,    27,
+      19,     0,     0,     0,     0,     0,     0,     0,   311,   312,
+     313,   314,   315,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      58,    59,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    69,     0,     0,     0,     0,     0,    75,    76,    77,
       78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
       88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+      98,     0,     0,     0,     0,     0,   104,   105,   106,   107,
      108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
      118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
      128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
@@ -1892,83 +1971,48 @@
      278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
      288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
      298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-       0,     0,   308,     0,     0,     0,     0,     0,     0,     0,
+     308,     0,   393,   309,   394,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,   404,   405,     0,     0,   406,   407,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   408,     0,     0,
+       0,   494,   657,     0,     0,     0,     0,     0,   410,   411,
+     412,   413,     3,     4,     5,     6,     7,     0,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     3,     4,     5,     6,
-       7,     0,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
-     310,   311,   312,   313,   314,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,     0,     0,     0,     0,     0,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,     0,   391,   308,   392,   393,   394,   395,   396,
-     397,   398,   399,   400,   401,   402,   403,     0,     0,   404,
-     405,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   406,     0,
-       0,     0,   490,   653,     0,     0,     0,     0,     0,   408,
-     409,   410,   411,     3,     4,     5,     6,     7,     0,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+       0,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
+       0,     0,     0,     0,     0,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,     0,
+       0,     0,     0,     0,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   308,     0,
+     393,   309,   394,   395,   396,   397,   398,   399,   400,   401,
+     402,   403,   404,   405,     0,     0,   406,   407,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    74,    75,    76,    77,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,     0,
-       0,     0,     0,     0,   103,   104,   105,   106,   107,   108,
-     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,     0,
-     391,   308,   392,   393,   394,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,     0,     0,   404,   405,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   406,     0,     0,   407,     0,
-       0,     0,     0,     0,     0,     0,   408,   409,   410,   411,
+       0,     0,     0,     0,     0,   408,     0,     0,   409,     0,
+       0,     0,     0,     0,     0,     0,   410,   411,   412,   413,
        3,     4,     5,     6,     7,     0,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,    21,
@@ -1976,11 +2020,11 @@
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
       52,    53,    54,    55,    56,    57,    58,    59,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    74,    75,    76,    77,    78,    79,    80,    81,
+       0,     0,     0,     0,     0,     0,     0,    69,     0,     0,
+       0,     0,     0,    75,    76,    77,    78,    79,    80,    81,
       82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,     0,     0,     0,     0,
-       0,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+      92,    93,    94,    95,    96,    97,    98,     0,     0,     0,
+       0,     0,   104,   105,   106,   107,   108,   109,   110,   111,
      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
      122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
      132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
@@ -2000,122 +2044,12 @@
      272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
      282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
      292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,     0,   391,   308,   392,
-     393,   394,   395,   396,   397,   398,   399,   400,   401,   402,
-     403,     0,     0,   404,   405,     0,     0,     0,     0,     0,
+     302,   303,   304,   305,   306,   307,   308,     0,   393,   309,
+     394,   395,   396,   397,   398,   399,   400,   401,   402,   403,
+     404,   405,     0,     0,   406,   407,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   406,     0,     0,     0,   490,     0,     0,     0,
-       0,     0,     0,   408,   409,   410,   411,     3,     4,     5,
-       6,     7,     0,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,     0,     0,     0,     0,     0,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
-     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
-     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
-     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
-     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
-     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
-     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
-     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
-     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
-     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
-     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
-     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
-     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
-     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
-     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
-     305,   306,   307,     0,   391,   308,   392,   393,   394,   395,
-     396,   397,   398,   399,   400,   401,   402,   403,     0,     0,
-     404,   405,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   406,
-       0,     0,   533,     0,     0,     0,     0,     0,     0,     0,
-     408,   409,   410,   411,     3,     4,     5,     6,     7,     0,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-       0,     0,     0,     0,     0,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-       0,   391,   308,   392,   393,   394,   395,   396,   397,   398,
-     399,   400,   401,   402,   403,     0,     0,   404,   405,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   406,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   552,   408,   409,   410,
-     411,     3,     4,     5,     6,     7,     0,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,     0,     0,     0,
-       0,     0,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,     0,   391,   308,
-     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,   403,     0,     0,   404,   405,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   406,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   408,   409,   410,   411,     3,     4,
+       0,     0,     0,   408,     0,     0,     0,   494,     0,     0,
+       0,     0,     0,     0,   410,   411,   412,   413,     3,     4,
        5,     6,     7,     0,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    21,    22,    23,
@@ -2123,10 +2057,10 @@
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,    55,    56,    57,    58,    59,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+       0,     0,     0,     0,     0,    69,     0,     0,     0,     0,
+       0,    75,    76,    77,    78,    79,    80,    81,    82,    83,
       84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,     0,     0,     0,     0,     0,   103,
+      94,    95,    96,    97,    98,     0,     0,     0,     0,     0,
      104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
@@ -2147,145 +2081,228 @@
      274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
      284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
      294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   508,     0,   391,   308,   392,   393,   394,
-     395,   396,   397,   398,   399,   400,   401,   402,   403,     0,
-       0,   404,   405,     0,     0,     0,     0,     0,     0,     0,
+     304,   305,   306,   307,   308,     0,   393,   309,   394,   395,
+     396,   397,   398,   399,   400,   401,   402,   403,   404,   405,
+       0,     0,   406,   407,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     406,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   408,   409,   410,   411,     3,     4,     5,     6,     7,
-       0,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,     0,     0,     0,     0,     0,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   422,     0,   308,     0,     0,     0,     0,     0,     0,
+       0,   408,     0,     0,   537,     0,     0,     0,     0,     0,
+       0,     0,   410,   411,   412,   413,     3,     4,     5,     6,
+       7,     0,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    69,     0,     0,     0,     0,     0,    75,
+      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
+      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,    97,    98,     0,     0,     0,     0,     0,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
+     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
+     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
+     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
+     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
+     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
+     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
+     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
+     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
+     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
+     306,   307,   308,     0,   393,   309,   394,   395,   396,   397,
+     398,   399,   400,   401,   402,   403,   404,   405,     0,     0,
+     406,   407,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   408,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   556,
+     410,   411,   412,   413,     3,     4,     5,     6,     7,     0,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    69,     0,     0,     0,     0,     0,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,     0,     0,     0,     0,     0,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,     0,   393,   309,   394,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,   404,   405,     0,     0,   406,   407,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   408,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   410,   411,
+     412,   413,     3,     4,     5,     6,     7,     0,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
+       0,     0,     0,     0,     0,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,     0,
+       0,     0,     0,     0,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
+     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
+     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
+     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
+     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
+     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
+     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
+     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
+     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
+     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
+     300,   301,   302,   303,   304,   305,   306,   307,   512,     0,
+     393,   309,   394,   395,   396,   397,   398,   399,   400,   401,
+     402,   403,   404,   405,     0,     0,   406,   407,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   498,   499,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   408,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   410,   411,   412,   413,
+       3,     4,     5,     6,     7,     0,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   511,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   422,     0,     0,   422,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   592,   593,   594,   422,   422,   422,   422,   422,   422,
-     422,   422,   422,   422,   422,   422,   422,   422,   422,   422,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   422
+       0,     0,     0,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,     0,     0,     0,
+       0,     0,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,     0,     0,   309
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,     0,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,     0,   357,   359,   359,   519,   520,   521,   522,   357,
-     366,   366,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     329,   321,   323,   321,    24,   362,    26,    27,   385,   329,
-      30,    81,   476,   344,   446,   560,   336,   336,   443,   322,
-     624,   406,   322,   343,   353,   357,   357,   364,   662,   349,
-     367,   349,   666,   353,   488,   345,   490,   336,   642,   493,
-     674,   364,   359,   420,   367,   360,   367,   338,   339,   364,
-     367,   382,   383,   373,   367,   373,   364,   377,   361,   367,
-     381,   382,   383,   384,   385,   386,   357,   367,   359,   494,
-     380,   456,   363,   458,   340,   341,   361,   358,   364,   364,
-     437,   367,   367,   440,   548,   347,   348,   349,   350,   351,
-     352,   353,   354,   355,   356,   359,   364,   364,   359,   359,
-     367,   322,   358,   367,   366,   366,   366,   539,   364,   375,
-     376,   488,   359,   490,   358,   444,   493,   359,   503,   364,
-     364,   322,   367,   443,   444,   443,   446,   581,   446,   358,
-     507,   358,   358,   678,   358,   364,   358,   364,   364,   369,
-     364,   371,   364,   383,   384,   385,   361,   372,   373,   374,
-     362,   361,   364,   585,   336,   337,   476,   342,   343,   364,
-     365,   364,   365,   322,   628,   550,   515,   516,   322,   554,
-     517,   518,   523,   524,   494,   366,   494,   367,   322,   633,
-     358,   357,   379,   378,   377,   346,   344,   360,   322,   322,
-     367,   357,   367,   357,   357,   572,   573,   367,   365,   359,
-     357,   322,   357,   322,   581,   358,   362,   322,   360,   360,
-     541,   321,   357,   361,   364,   357,   322,   358,   367,   539,
-     360,   539,   358,   362,   688,   679,   611,    25,   548,   361,
-     361,   366,   358,   362,   526,   525,   529,   367,   527,   624,
-     560,   528,   530,   649,   353,   349,   353,   315,   442,   616,
-     619,   661,   322,   674,   347,   675,   633,   642,   540,   619,
-     642,   336,   651,   486,    -1,   585,   486,   585,   486,    -1,
-      -1,   656,    -1,    -1,    -1,    -1,    -1,    -1,   655,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   673,    -1,
-      -1,    -1,   649,    -1,    -1,    -1,    -1,    -1,    -1,   619,
-      -1,   321,   679,    -1,   624,    -1,   624,    -1,   628,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   647,    -1,
-      -1,    -1,   642,    -1,   642,    -1,    -1,   647,    -1,    -1,
+       0,     0,     0,   322,   330,    24,     0,    26,    27,   387,
+     364,    30,    81,   480,   346,   492,   449,   494,   446,   564,
+     497,   323,   323,   341,   342,   346,   368,   359,   628,   355,
+     339,   340,   351,   666,   358,   360,   360,   670,   337,   338,
+     360,   408,   367,   367,   422,   678,   646,   358,   368,   358,
+     360,   360,   384,   385,   360,   364,   375,   367,   376,   377,
+     381,   362,   368,   358,   360,   365,   368,   359,   368,   359,
+     498,   367,   359,   365,   362,   364,   359,   365,   365,   361,
+     368,   359,   365,   365,   359,   552,   440,   365,   365,   443,
+     365,   368,   459,   363,   461,   365,   348,   349,   350,   351,
+     352,   353,   354,   355,   356,   357,   359,   370,   585,   372,
+     543,   365,   365,   323,   492,   367,   494,   406,   407,   497,
+     359,   447,   523,   524,   525,   526,   365,   446,   365,   365,
+     449,   368,   368,   511,   323,   365,   425,   682,   368,   365,
+     507,   360,   368,   384,   385,   386,   373,   374,   375,   343,
+     344,   440,   365,   366,   443,   362,   589,   365,   366,   362,
+     637,   519,   520,   527,   528,   632,   521,   522,   323,   323,
+     360,   367,   323,   368,   359,   358,   380,   379,   378,   498,
+     345,   347,   361,   323,   323,   358,   368,   554,   368,   358,
+     368,   558,   366,   360,   358,   358,   323,   358,   576,   577,
+     358,   363,   323,   359,   361,   323,   683,   585,   361,   322,
+     358,   358,   323,   545,   359,   365,   362,   361,   359,   368,
+     363,    25,   359,   530,   543,   692,   362,   516,   517,   518,
+     519,   520,   521,   522,   523,   524,   525,   526,   527,   528,
+     529,   530,   531,   532,   533,   534,   362,   367,   615,   368,
+     529,   363,   532,   534,   323,   531,   653,   355,   351,   637,
+     533,   628,   316,   355,   445,   665,   623,   620,   678,   349,
+     589,   679,   544,   623,   490,   646,   490,   338,   490,   646,
+     655,   659,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   660,    -1,    -1,    -1,    -1,    -1,   653,
+      -1,    -1,    -1,   322,    -1,   683,    -1,    -1,    -1,   628,
+     677,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   322,    -1,    -1,   651,    -1,   646,   322,    -1,
+     330,    -1,    -1,    -1,    -1,    -1,   330,    -1,   338,   338,
+     338,    -1,    -1,    -1,   338,   345,    -1,    -1,    -1,    -1,
+      -1,   351,    -1,    -1,    -1,   355,    -1,   351,    -1,    -1,
+      -1,   355,    -1,    -1,   653,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   375,    -1,    -1,    -1,   379,
+      -1,   375,    -1,    -1,    -1,   379,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   662,    -1,    -1,    -1,   666,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   674,    -1,    -1,    -1,   678,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     0,    -1,   688,     3,
+      -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,   446,   447,    -1,   449,
+      -1,    -1,   446,   447,    -1,   449,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     480,    -1,    -1,    -1,    -1,    -1,   480,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   498,    -1,
+      -1,    -1,    -1,    -1,   498,    -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,   543,    -1,    -1,    -1,    -1,    -1,   543,
+      -1,    -1,   552,    -1,    -1,    -1,    -1,    -1,   552,    -1,
+      -1,    -1,    -1,    -1,   564,    -1,    -1,    -1,    -1,    -1,
+     564,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   589,
+      -1,    -1,    -1,    -1,    -1,   589,    -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,   623,    -1,    -1,    -1,    -1,   628,   623,
+      -1,    -1,   632,    -1,   628,    -1,    -1,    -1,   632,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   646,    -1,    -1,    -1,
+      -1,   651,   646,    -1,    -1,    -1,    -1,   651,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   666,    -1,    -1,    -1,
+     670,    -1,   666,    -1,    -1,    -1,   670,    -1,   678,    -1,
+      -1,    -1,   682,    -1,   678,    -1,    -1,    -1,   682,    -1,
+      -1,    -1,   692,    -1,    -1,    -1,     0,    -1,   692,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
@@ -2317,167 +2334,52 @@
      284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
      294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
      304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,    -1,    -1,   323,
+     314,   315,   316,   317,   318,   319,   320,   321,    -1,    -1,
+     324,    -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,    -1,   367,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,
-     384,   385,   386,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    -1,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     330,   331,   332,   333,   334,   335,    -1,    -1,   338,   339,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,    -1,   359,
-      -1,   361,   362,    -1,    -1,    -1,    -1,   367,   368,   369,
-     370,   371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   381,   382,   383,   384,   385,   386,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    -1,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,   202,   203,   204,   205,
-     206,   207,   208,   209,   210,   211,   212,   213,   214,   215,
-     216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   237,   238,   239,   240,   241,   242,   243,   244,   245,
-     246,   247,   248,   249,   250,   251,   252,   253,   254,   255,
-     256,   257,   258,   259,   260,   261,   262,   263,   264,   265,
-     266,   267,   268,   269,   270,   271,   272,   273,   274,   275,
-     276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-     286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
-     296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
-     306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,   324,   325,
-     326,   327,   328,   329,   330,   331,   332,   333,   334,   335,
-      -1,    -1,   338,   339,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   357,    -1,   359,    -1,   361,   362,    -1,    -1,    -1,
-      -1,   367,   368,   369,   370,   371,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,
-     386,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    -1,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
-     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
-     332,   333,   334,   335,    -1,    -1,   338,   339,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   357,    -1,   359,    -1,   361,
-      -1,    -1,    -1,    -1,    -1,   367,   368,   369,   370,   371,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,
-     382,   383,   384,   385,   386,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    -1,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-     318,   319,   320,   321,   322,   323,   324,   325,   326,   327,
-     328,   329,   330,   331,   332,   333,   334,   335,    -1,    -1,
-     338,   339,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,
-      -1,   359,    -1,   361,    -1,    -1,    -1,    -1,    -1,   367,
-     368,   369,   370,   371,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   381,   382,   383,   384,   385,   386,     3,
+      -1,    -1,    -1,    -1,   368,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,   386,   387,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
+     339,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,
+      -1,   360,    -1,   362,   363,    -1,    -1,    -1,    -1,   368,
+     369,   370,   371,   372,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   382,   383,   384,   385,   386,   387,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    -1,    26,    27,    28,    29,    30,    31,    32,    33,
@@ -2511,11 +2413,242 @@
      304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
      324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
-     334,   335,    -1,    -1,   338,   339,    -1,    -1,    -1,    -1,
+     334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   357,    -1,   359,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   367,   368,   369,   370,   371,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,
+      -1,    -1,    -1,    -1,   358,    -1,   360,    -1,   362,   363,
+      -1,    -1,    -1,    -1,   368,   369,   370,   371,   372,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,   386,   387,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
+     339,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,
+      -1,   360,    -1,   362,    -1,    -1,    -1,    -1,    -1,   368,
+     369,   370,   371,   372,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   382,   383,   384,   385,   386,   387,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    -1,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   358,    -1,   360,    -1,   362,    -1,
+      -1,    -1,    -1,    -1,   368,   369,   370,   371,   372,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,   386,   387,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    -1,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,   322,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
+     339,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,
+      -1,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,
+     369,   370,   371,   372,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   382,   383,   384,   385,   386,   387,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,    -1,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   358,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   368,   369,   370,   371,   372,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,   386,   387,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,    -1,    -1,   324,    -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,   368,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   382,   383,   384,   385,   386,   387,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
+      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
+      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
+     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
+     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
+     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
+     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
+     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
+     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
+     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
+     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
+     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
+     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
+     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
+     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
+     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
+     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
+     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
+     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
+     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
+     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
+     314,   315,   316,   317,   318,   319,   320,   321,    -1,   323,
+     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
+     334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   358,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   369,   370,   371,   372,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
      384,   385,   386,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -2548,13 +2681,13 @@
      290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
      300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
      310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,    -1,   322,   323,   324,   325,   326,   327,   328,   329,
-     330,   331,   332,   333,   334,   335,    -1,    -1,   338,   339,
+     320,   321,    -1,   323,   324,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   367,   368,   369,
-     370,   371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   381,   382,   383,   384,   385,   386,     3,     4,     5,
+      -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,   368,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   382,   383,   384,   385,   386,     3,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    35,
@@ -2586,128 +2719,90 @@
      286,   287,   288,   289,   290,   291,   292,   293,   294,   295,
      296,   297,   298,   299,   300,   301,   302,   303,   304,   305,
      306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
-     316,   317,   318,   319,   320,    -1,   322,   323,   324,   325,
-     326,   327,   328,   329,   330,   331,   332,   333,   334,   335,
-      -1,    -1,   338,   339,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   357,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   368,   369,   370,   371,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
-     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
-     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
-     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
-     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
-     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
-     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
-     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
-     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
-     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
-     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
-     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
-     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
-     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
-     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
-     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
-     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
-     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
-     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,    -1,   322,
-     323,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     316,   317,   318,   319,   320,   321,    -1,    -1,   324,    -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,   367,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,
-     383,   384,   385,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,    -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   382,   383,   384,   385,
+     386,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
+     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
+     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
+     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
+     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
+     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
+     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
+     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
+     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
+     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
+     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
+     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
+      -1,    -1,   324,    -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,   362,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   381,   382,   383,   384,   385,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,   111,   112,   113,   114,   115,   116,
-     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
-     127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   171,   172,   173,   174,   175,   176,
-     177,   178,   179,   180,   181,   182,   183,   184,   185,   186,
-     187,   188,   189,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   209,   210,   211,   212,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   238,   239,   240,   241,   242,   243,   244,   245,   246,
-     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
-     257,   258,   259,   260,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   273,   274,   275,   276,
-     277,   278,   279,   280,   281,   282,   283,   284,   285,   286,
-     287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
-     297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
-     307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,    -1,    -1,   323,    -1,    -1,    -1,
+     382,   383,   384,   385,   386,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
+     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
+     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
+     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
+     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
+     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
+     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
+     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
+     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
+     318,   319,   320,   321,    -1,    -1,   324,    -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,   362,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   381,   382,   383,   384,   385,     3,
+      -1,    -1,    -1,    -1,   382,   383,   384,   385,   386,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    33,
@@ -2739,25 +2834,22 @@
      284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
      294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
      304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,    -1,    -1,   323,
+     314,   315,   316,   317,   318,   319,   320,   321,    -1,    -1,
+     324,    -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,   362,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,
-     384,   385,     3,     4,     5,     6,     7,     8,     9,    10,
+      -1,    -1,    -1,    -1,     5,     6,     7,     8,     9,    -1,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    33,    34,    35,    36,    37,    38,    39,    40,
+      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   382,   383,
+     384,   385,   386,    34,    35,    36,    37,    38,    39,    40,
       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
+      71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    82,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
       91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
      101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-     111,   112,   113,   114,   115,   116,   117,   118,   119,   120,
+     111,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
      121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
      131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
      141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
@@ -2778,83 +2870,48 @@
      291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
      301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
      311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-      -1,    -1,   323,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     321,    -1,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,    -1,    -1,   339,   340,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,
+      -1,   362,   363,    -1,    -1,    -1,    -1,    -1,   369,   370,
+     371,   372,     5,     6,     7,     8,     9,    -1,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     5,     6,     7,     8,
-       9,    -1,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     381,   382,   383,   384,   385,    34,    35,    36,    37,    38,
-      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
-      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
-      69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
-      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
-     109,   110,    -1,    -1,    -1,    -1,    -1,   116,   117,   118,
-     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
-     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
-     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
-     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
-     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
-     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
-     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
-     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
-     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
-     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
-     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
-     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
-     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
-     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
-     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
-     319,   320,    -1,   322,   323,   324,   325,   326,   327,   328,
-     329,   330,   331,   332,   333,   334,   335,    -1,    -1,   338,
-     339,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,    -1,
-      -1,    -1,   361,   362,    -1,    -1,    -1,    -1,    -1,   368,
-     369,   370,   371,     5,     6,     7,     8,     9,    -1,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      -1,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,    -1,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,    -1,
-      -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,   198,   199,   200,   201,
-     202,   203,   204,   205,   206,   207,   208,   209,   210,   211,
-     212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
-     232,   233,   234,   235,   236,   237,   238,   239,   240,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   251,
-     252,   253,   254,   255,   256,   257,   258,   259,   260,   261,
-     262,   263,   264,   265,   266,   267,   268,   269,   270,   271,
-     272,   273,   274,   275,   276,   277,   278,   279,   280,   281,
-     282,   283,   284,   285,   286,   287,   288,   289,   290,   291,
-     292,   293,   294,   295,   296,   297,   298,   299,   300,   301,
-     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
-     312,   313,   314,   315,   316,   317,   318,   319,   320,    -1,
-     322,   323,   324,   325,   326,   327,   328,   329,   330,   331,
-     332,   333,   334,   335,    -1,    -1,   338,   339,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   357,    -1,    -1,   360,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   368,   369,   370,   371,
+      -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,   361,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   369,   370,   371,   372,
        5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,
@@ -2862,11 +2919,11 @@
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    88,    89,    90,    91,    92,    93,    94,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,
+      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,    -1,    -1,    -1,    -1,
-      -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     105,   106,   107,   108,   109,   110,   111,    -1,    -1,    -1,
+      -1,    -1,   117,   118,   119,   120,   121,   122,   123,   124,
      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
      135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
      145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
@@ -2886,122 +2943,12 @@
      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
-     315,   316,   317,   318,   319,   320,    -1,   322,   323,   324,
+     315,   316,   317,   318,   319,   320,   321,    -1,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,    -1,    -1,   338,   339,    -1,    -1,    -1,    -1,    -1,
+     335,   336,    -1,    -1,   339,   340,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   357,    -1,    -1,    -1,   361,    -1,    -1,    -1,
-      -1,    -1,    -1,   368,   369,   370,   371,     5,     6,     7,
-       8,     9,    -1,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,    -1,    -1,    -1,    -1,    -1,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   194,   195,   196,   197,
-     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
-     208,   209,   210,   211,   212,   213,   214,   215,   216,   217,
-     218,   219,   220,   221,   222,   223,   224,   225,   226,   227,
-     228,   229,   230,   231,   232,   233,   234,   235,   236,   237,
-     238,   239,   240,   241,   242,   243,   244,   245,   246,   247,
-     248,   249,   250,   251,   252,   253,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   264,   265,   266,   267,
-     268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
-     278,   279,   280,   281,   282,   283,   284,   285,   286,   287,
-     288,   289,   290,   291,   292,   293,   294,   295,   296,   297,
-     298,   299,   300,   301,   302,   303,   304,   305,   306,   307,
-     308,   309,   310,   311,   312,   313,   314,   315,   316,   317,
-     318,   319,   320,    -1,   322,   323,   324,   325,   326,   327,
-     328,   329,   330,   331,   332,   333,   334,   335,    -1,    -1,
-     338,   339,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,
-      -1,    -1,   360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     368,   369,   370,   371,     5,     6,     7,     8,     9,    -1,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    34,    35,    36,    37,    38,    39,    40,
-      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
-      -1,    -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,
-     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
-     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
-     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
-     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
-     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
-     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
-     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
-     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
-     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
-     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
-     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
-     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-      -1,   322,   323,   324,   325,   326,   327,   328,   329,   330,
-     331,   332,   333,   334,   335,    -1,    -1,   338,   339,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   357,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   367,   368,   369,   370,
-     371,     5,     6,     7,     8,     9,    -1,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,    -1,    -1,    -1,
-      -1,    -1,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
-     204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
-     224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   235,   236,   237,   238,   239,   240,   241,   242,   243,
-     244,   245,   246,   247,   248,   249,   250,   251,   252,   253,
-     254,   255,   256,   257,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   268,   269,   270,   271,   272,   273,
-     274,   275,   276,   277,   278,   279,   280,   281,   282,   283,
-     284,   285,   286,   287,   288,   289,   290,   291,   292,   293,
-     294,   295,   296,   297,   298,   299,   300,   301,   302,   303,
-     304,   305,   306,   307,   308,   309,   310,   311,   312,   313,
-     314,   315,   316,   317,   318,   319,   320,    -1,   322,   323,
-     324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
-     334,   335,    -1,    -1,   338,   339,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   357,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   368,   369,   370,   371,     5,     6,
+      -1,    -1,    -1,   358,    -1,    -1,    -1,   362,    -1,    -1,
+      -1,    -1,    -1,    -1,   369,   370,   371,   372,     5,     6,
        7,     8,     9,    -1,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,    35,    36,
@@ -3009,10 +2956,10 @@
       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
       57,    58,    59,    60,    61,    62,    63,    64,    65,    66,
       67,    68,    69,    70,    71,    72,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    96,
+      -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,
+      -1,    88,    89,    90,    91,    92,    93,    94,    95,    96,
       97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
-     107,   108,   109,   110,    -1,    -1,    -1,    -1,    -1,   116,
+     107,   108,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,
      117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
      127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
      137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
@@ -3033,72 +2980,154 @@
      287,   288,   289,   290,   291,   292,   293,   294,   295,   296,
      297,   298,   299,   300,   301,   302,   303,   304,   305,   306,
      307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
-     317,   318,   319,   320,    -1,   322,   323,   324,   325,   326,
-     327,   328,   329,   330,   331,   332,   333,   334,   335,    -1,
-      -1,   338,   339,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     317,   318,   319,   320,   321,    -1,   323,   324,   325,   326,
+     327,   328,   329,   330,   331,   332,   333,   334,   335,   336,
+      -1,    -1,   339,   340,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     357,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   368,   369,   370,   371,     5,     6,     7,     8,     9,
-      -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,    -1,    -1,    -1,    -1,    -1,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   194,   195,   196,   197,   198,   199,
-     200,   201,   202,   203,   204,   205,   206,   207,   208,   209,
-     210,   211,   212,   213,   214,   215,   216,   217,   218,   219,
-     220,   221,   222,   223,   224,   225,   226,   227,   228,   229,
-     230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     260,   261,   262,   263,   264,   265,   266,   267,   268,   269,
-     270,   271,   272,   273,   274,   275,   276,   277,   278,   279,
-     280,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   291,   292,   293,   294,   295,   296,   297,   298,   299,
-     300,   301,   302,   303,   304,   305,   306,   307,   308,   309,
-     310,   311,   312,   313,   314,   315,   316,   317,   318,   319,
-     320,   362,    -1,   323,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   358,    -1,    -1,   361,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   369,   370,   371,   372,     5,     6,     7,     8,
+       9,    -1,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    61,    62,    63,    64,    65,    66,    67,    68,
+      69,    70,    71,    72,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,    -1,    88,
+      89,    90,    91,    92,    93,    94,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   111,    -1,    -1,    -1,    -1,    -1,   117,   118,
+     119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+     159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
+     189,   190,   191,   192,   193,   194,   195,   196,   197,   198,
+     199,   200,   201,   202,   203,   204,   205,   206,   207,   208,
+     209,   210,   211,   212,   213,   214,   215,   216,   217,   218,
+     219,   220,   221,   222,   223,   224,   225,   226,   227,   228,
+     229,   230,   231,   232,   233,   234,   235,   236,   237,   238,
+     239,   240,   241,   242,   243,   244,   245,   246,   247,   248,
+     249,   250,   251,   252,   253,   254,   255,   256,   257,   258,
+     259,   260,   261,   262,   263,   264,   265,   266,   267,   268,
+     269,   270,   271,   272,   273,   274,   275,   276,   277,   278,
+     279,   280,   281,   282,   283,   284,   285,   286,   287,   288,
+     289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   302,   303,   304,   305,   306,   307,   308,
+     309,   310,   311,   312,   313,   314,   315,   316,   317,   318,
+     319,   320,   321,    -1,   323,   324,   325,   326,   327,   328,
+     329,   330,   331,   332,   333,   334,   335,   336,    -1,    -1,
+     339,   340,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,
+     369,   370,   371,   372,     5,     6,     7,     8,     9,    -1,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+      71,    72,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    82,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
+      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
+     101,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
+     121,   122,   123,   124,   125,   126,   127,   128,   129,   130,
+     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
+     161,   162,   163,   164,   165,   166,   167,   168,   169,   170,
+     171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
+     181,   182,   183,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     201,   202,   203,   204,   205,   206,   207,   208,   209,   210,
+     211,   212,   213,   214,   215,   216,   217,   218,   219,   220,
+     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
+     231,   232,   233,   234,   235,   236,   237,   238,   239,   240,
+     241,   242,   243,   244,   245,   246,   247,   248,   249,   250,
+     251,   252,   253,   254,   255,   256,   257,   258,   259,   260,
+     261,   262,   263,   264,   265,   266,   267,   268,   269,   270,
+     271,   272,   273,   274,   275,   276,   277,   278,   279,   280,
+     281,   282,   283,   284,   285,   286,   287,   288,   289,   290,
+     291,   292,   293,   294,   295,   296,   297,   298,   299,   300,
+     301,   302,   303,   304,   305,   306,   307,   308,   309,   310,
+     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
+     321,    -1,   323,   324,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,    -1,    -1,   339,   340,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   369,   370,
+     371,   372,     5,     6,     7,     8,     9,    -1,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,    -1,
+      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   194,   195,   196,   197,   198,   199,   200,   201,   202,
+     203,   204,   205,   206,   207,   208,   209,   210,   211,   212,
+     213,   214,   215,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   226,   227,   228,   229,   230,   231,   232,
+     233,   234,   235,   236,   237,   238,   239,   240,   241,   242,
+     243,   244,   245,   246,   247,   248,   249,   250,   251,   252,
+     253,   254,   255,   256,   257,   258,   259,   260,   261,   262,
+     263,   264,   265,   266,   267,   268,   269,   270,   271,   272,
+     273,   274,   275,   276,   277,   278,   279,   280,   281,   282,
+     283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
+     293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
+     303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
+     313,   314,   315,   316,   317,   318,   319,   320,   321,    -1,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+     333,   334,   335,   336,    -1,    -1,   339,   340,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   404,   405,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   358,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   369,   370,   371,   372,
+       5,     6,     7,     8,     9,    -1,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   423,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   437,    -1,    -1,   440,
-      -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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   512,   513,   514,   515,   516,   517,   518,   519,   520,
-     521,   522,   523,   524,   525,   526,   527,   528,   529,   530,
-      -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,    -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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   649
+      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,    -1,    -1,    -1,
+      -1,    -1,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   194,
+     195,   196,   197,   198,   199,   200,   201,   202,   203,   204,
+     205,   206,   207,   208,   209,   210,   211,   212,   213,   214,
+     215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
+     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
+     235,   236,   237,   238,   239,   240,   241,   242,   243,   244,
+     245,   246,   247,   248,   249,   250,   251,   252,   253,   254,
+     255,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+     275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+     285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+     295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+     305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+     315,   316,   317,   318,   319,   320,   321,    -1,    -1,   324
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -3135,107 +3164,107 @@
      283,   284,   285,   286,   287,   288,   289,   290,   291,   292,
      293,   294,   295,   296,   297,   298,   299,   300,   301,   302,
      303,   304,   305,   306,   307,   308,   309,   310,   311,   312,
-     313,   314,   315,   316,   317,   318,   319,   320,   323,   367,
-     381,   382,   383,   384,   385,   386,   421,   422,   425,   426,
-     427,   428,   432,   433,   434,   435,   436,   437,   440,   441,
-     442,   443,   445,   447,   448,   449,   489,   490,   491,   357,
-     357,   322,   361,   448,   322,   367,   367,   492,   358,   364,
-     429,   430,   431,   441,   445,   364,   367,   322,   322,   367,
-     442,   445,   359,   446,     0,   490,   322,   444,    81,   322,
-     438,   439,   361,   451,   445,   367,   446,   361,   468,   430,
-     429,   431,   322,   322,   357,   366,   446,   361,   364,   367,
-     424,   322,   324,   325,   326,   327,   328,   329,   330,   331,
-     332,   333,   334,   335,   338,   339,   357,   360,   368,   369,
-     370,   371,   391,   392,   393,   395,   396,   397,   398,   399,
-     400,   401,   402,   403,   404,   405,   406,   407,   408,   409,
-     410,   411,   412,   413,   414,   415,   445,   359,   358,   364,
-     366,   358,   364,   450,   441,   445,   452,   453,   367,   367,
-      22,    23,    24,    26,    27,    28,    29,    30,    31,    32,
-     321,   359,   361,   362,   367,   402,   415,   417,   419,   421,
-     425,   445,   458,   459,   460,   461,   469,   470,   471,   472,
-     475,   476,   479,   480,   481,   488,   493,   446,   366,   446,
-     361,   417,   456,   366,   423,   322,   364,   367,   402,   402,
-     419,   338,   339,   359,   363,   358,   358,   364,   320,   417,
-     357,   402,   372,   373,   374,   369,   371,   336,   337,   340,
-     341,   375,   376,   342,   343,   379,   378,   377,   344,   346,
-     345,   380,   360,   360,   415,   322,   415,   420,   439,   452,
-     445,   322,   454,   455,   362,   453,   367,   367,   483,   357,
-     357,   367,   367,   419,   357,   419,   365,   357,   359,   362,
-     462,   347,   348,   349,   350,   351,   352,   353,   354,   355,
-     356,   366,   418,   364,   367,   362,   459,   472,   476,   481,
-     456,   366,   456,   457,   456,   452,   322,   358,   394,   419,
-     322,   417,   402,   402,   402,   404,   404,   405,   405,   406,
-     406,   406,   406,   407,   407,   408,   409,   410,   411,   412,
-     413,   416,   360,   362,   454,   446,   364,   367,   459,   484,
-     419,   367,   419,   365,   482,   322,   494,   495,   469,   417,
-     417,   456,   362,   364,   362,   360,   419,   367,   455,   321,
-     458,   470,   485,   358,   358,   419,   434,   441,   474,   357,
-     360,   364,   463,   362,   456,   365,   357,   474,   486,   487,
-     465,   466,   467,   473,   477,   322,   358,   420,   360,   495,
-     362,   417,   419,   367,   358,    25,   461,   460,   361,   366,
-     460,   464,   468,   358,   358,   419,   464,   465,   469,   478,
-     456,   367,   362
+     313,   314,   315,   316,   317,   318,   319,   320,   321,   324,
+     368,   382,   383,   384,   385,   386,   387,   422,   423,   426,
+     427,   428,   429,   433,   434,   435,   436,   437,   438,   441,
+     442,   443,   444,   445,   447,   449,   450,   451,   491,   492,
+     493,   358,   358,   323,   362,   450,   323,   368,   368,   494,
+     359,   365,   430,   431,   432,   442,   447,   365,   368,   323,
+     323,   368,   443,   447,   360,   448,     0,   492,   323,   446,
+      81,   323,   439,   440,   362,   453,   447,   368,   448,   362,
+     470,   431,   430,   432,   323,   323,   358,   367,   448,   362,
+     365,   368,   425,   323,   325,   326,   327,   328,   329,   330,
+     331,   332,   333,   334,   335,   336,   339,   340,   358,   361,
+     369,   370,   371,   372,   392,   393,   394,   396,   397,   398,
+     399,   400,   401,   402,   403,   404,   405,   406,   407,   408,
+     409,   410,   411,   412,   413,   414,   415,   416,   445,   447,
+     360,   359,   365,   367,   359,   365,   452,   442,   447,   454,
+     455,   368,   368,    22,    23,    24,    26,    27,    28,    29,
+      30,    31,    32,   322,   360,   362,   363,   368,   403,   416,
+     418,   420,   422,   426,   445,   447,   460,   461,   462,   463,
+     471,   472,   473,   474,   477,   478,   481,   482,   483,   490,
+     495,   448,   367,   448,   362,   418,   458,   367,   424,   323,
+     365,   368,   403,   403,   420,   339,   340,   360,   364,   359,
+     359,   365,   321,   418,   358,   403,   373,   374,   375,   370,
+     372,   337,   338,   341,   342,   376,   377,   343,   344,   380,
+     379,   378,   345,   347,   346,   381,   361,   361,   416,   323,
+     416,   421,   440,   454,   447,   323,   456,   457,   363,   455,
+     368,   368,   485,   358,   358,   368,   368,   420,   358,   420,
+     366,   358,   360,   363,   464,   348,   349,   350,   351,   352,
+     353,   354,   355,   356,   357,   367,   419,   365,   368,   363,
+     461,   474,   478,   483,   458,   367,   458,   459,   458,   454,
+     323,   359,   395,   420,   323,   418,   403,   403,   403,   405,
+     405,   406,   406,   407,   407,   407,   407,   408,   408,   409,
+     410,   411,   412,   413,   414,   417,   361,   363,   456,   448,
+     365,   368,   461,   486,   420,   368,   420,   366,   484,   323,
+     496,   497,   471,   418,   418,   458,   363,   365,   363,   361,
+     420,   368,   457,   322,   460,   472,   487,   359,   359,   420,
+     435,   442,   476,   358,   361,   365,   465,   363,   458,   366,
+     358,   476,   488,   489,   467,   468,   469,   475,   479,   323,
+     359,   421,   361,   497,   363,   418,   420,   368,   359,    25,
+     463,   462,   362,   367,   462,   466,   470,   359,   359,   420,
+     466,   467,   471,   480,   458,   368,   363
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint16 yyr1[] =
 {
-       0,   390,   391,   392,   392,   392,   392,   392,   392,   392,
-     392,   392,   392,   392,   392,   392,   392,   393,   393,   393,
-     393,   393,   393,   394,   395,   396,   397,   397,   398,   398,
-     399,   399,   400,   401,   401,   402,   402,   402,   402,   403,
-     403,   403,   403,   404,   404,   404,   404,   405,   405,   405,
-     406,   406,   406,   407,   407,   407,   407,   407,   408,   408,
-     408,   409,   409,   410,   410,   411,   411,   412,   412,   413,
-     413,   414,   414,   415,   416,   415,   417,   417,   418,   418,
-     418,   418,   418,   418,   418,   418,   418,   418,   418,   419,
-     419,   420,   421,   421,   421,   421,   421,   421,   421,   421,
-     421,   423,   422,   424,   424,   425,   426,   426,   427,   427,
-     428,   429,   429,   430,   430,   430,   430,   431,   432,   432,
-     432,   432,   432,   433,   433,   433,   433,   433,   434,   434,
-     435,   436,   436,   436,   436,   437,   438,   438,   439,   439,
-     439,   440,   441,   441,   442,   442,   442,   442,   442,   442,
-     443,   443,   443,   443,   443,   443,   443,   443,   443,   443,
-     443,   443,   443,   443,   443,   443,   443,   443,   443,   444,
-     444,   445,   445,   446,   446,   446,   446,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   447,   447,   447,   447,   447,   447,   447,   447,
-     447,   447,   448,   448,   448,   450,   449,   451,   449,   452,
-     452,   453,   453,   454,   454,   455,   455,   456,   456,   456,
-     457,   457,   458,   459,   459,   460,   460,   460,   460,   460,
-     460,   460,   461,   462,   463,   461,   464,   464,   466,   465,
-     467,   465,   468,   468,   469,   469,   470,   470,   471,   471,
-     472,   473,   473,   474,   474,   475,   475,   477,   476,   478,
-     478,   479,   479,   480,   480,   482,   481,   483,   481,   484,
-     481,   485,   485,   486,   486,   487,   487,   488,   488,   488,
-     488,   488,   489,   489,   490,   490,   490,   492,   491,   493,
-     494,   494,   495,   495
+       0,   391,   392,   393,   393,   393,   393,   393,   393,   393,
+     393,   393,   393,   393,   393,   393,   393,   394,   394,   394,
+     394,   394,   394,   395,   396,   397,   398,   398,   399,   399,
+     400,   400,   401,   402,   402,   402,   403,   403,   403,   403,
+     404,   404,   404,   404,   405,   405,   405,   405,   406,   406,
+     406,   407,   407,   407,   408,   408,   408,   408,   408,   409,
+     409,   409,   410,   410,   411,   411,   412,   412,   413,   413,
+     414,   414,   415,   415,   416,   417,   416,   418,   418,   419,
+     419,   419,   419,   419,   419,   419,   419,   419,   419,   419,
+     420,   420,   421,   422,   422,   422,   422,   422,   422,   422,
+     422,   422,   424,   423,   425,   425,   426,   427,   427,   428,
+     428,   429,   430,   430,   431,   431,   431,   431,   432,   433,
+     433,   433,   433,   433,   434,   434,   434,   434,   434,   435,
+     435,   436,   437,   437,   437,   437,   438,   439,   439,   440,
+     440,   440,   441,   442,   442,   443,   443,   443,   443,   443,
+     443,   443,   444,   444,   444,   444,   444,   444,   444,   444,
+     444,   444,   444,   444,   444,   444,   444,   444,   444,   444,
+     444,   445,   446,   446,   447,   447,   448,   448,   448,   448,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   449,   449,   449,   449,   449,
+     449,   449,   449,   449,   449,   450,   450,   450,   452,   451,
+     453,   451,   454,   454,   455,   455,   456,   456,   457,   457,
+     458,   458,   458,   459,   459,   460,   461,   461,   462,   462,
+     462,   462,   462,   462,   462,   463,   464,   465,   463,   466,
+     466,   468,   467,   469,   467,   470,   470,   471,   471,   472,
+     472,   473,   473,   474,   475,   475,   476,   476,   477,   477,
+     479,   478,   480,   480,   481,   481,   482,   482,   484,   483,
+     485,   483,   486,   483,   487,   487,   488,   488,   489,   489,
+     490,   490,   490,   490,   490,   491,   491,   492,   492,   492,
+     494,   493,   495,   496,   496,   497,   497
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -3244,21 +3273,21 @@
        0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     3,     1,     4,     1,
        3,     2,     2,     1,     1,     1,     2,     2,     2,     1,
-       2,     3,     2,     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,     0,     6,     1,     3,     1,     1,
+       2,     3,     2,     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,     0,     6,     1,     3,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       3,     1,     2,     2,     4,     2,     3,     4,     2,     3,
-       4,     0,     6,     2,     3,     2,     1,     1,     2,     3,
-       3,     2,     3,     2,     1,     2,     1,     1,     1,     3,
-       4,     6,     5,     1,     2,     3,     5,     4,     1,     2,
-       1,     1,     1,     1,     1,     4,     1,     3,     1,     3,
-       1,     1,     1,     2,     1,     1,     1,     1,     1,     1,
+       1,     3,     1,     2,     2,     4,     2,     3,     4,     2,
+       3,     4,     0,     6,     2,     3,     2,     1,     1,     2,
+       3,     3,     2,     3,     2,     1,     2,     1,     1,     1,
+       3,     4,     6,     5,     1,     2,     3,     5,     4,     1,
+       2,     1,     1,     1,     1,     1,     4,     1,     3,     1,
+       3,     1,     1,     1,     2,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     4,     1,
-       3,     1,     2,     2,     3,     3,     4,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       4,     1,     1,     3,     1,     2,     2,     3,     3,     4,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
@@ -3287,16 +3316,16 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     6,     0,     5,     1,
-       2,     3,     4,     1,     3,     1,     2,     1,     3,     4,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     2,     0,     0,     5,     1,     1,     0,     2,
-       0,     2,     2,     3,     1,     2,     1,     2,     1,     2,
-       5,     3,     1,     1,     4,     1,     2,     0,     8,     0,
-       1,     3,     2,     1,     2,     0,     6,     0,     8,     0,
-       7,     1,     1,     1,     0,     2,     3,     2,     2,     2,
-       3,     2,     1,     2,     1,     1,     1,     0,     3,     5,
-       1,     3,     1,     4
+       1,     1,     1,     1,     1,     1,     1,     1,     0,     6,
+       0,     5,     1,     2,     3,     4,     1,     3,     1,     2,
+       1,     3,     4,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     2,     0,     0,     5,     1,
+       1,     0,     2,     0,     2,     2,     3,     1,     2,     1,
+       2,     1,     2,     5,     3,     1,     1,     4,     1,     2,
+       0,     8,     0,     1,     3,     2,     1,     2,     0,     6,
+       0,     8,     0,     7,     1,     1,     1,     0,     2,     3,
+       2,     2,     2,     3,     2,     1,     2,     1,     1,     1,
+       0,     3,     5,     1,     3,     1,     4
 };
 
 
@@ -3979,250 +4008,250 @@
   switch (yyn)
     {
         case 2:
-#line 292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 3987 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 3:
-#line 298 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 3995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 4:
-#line 301 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4033 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 5:
-#line 305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 306 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4013 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 6:
-#line 309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 310 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 7:
-#line 312 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 313 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4059 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 8:
-#line 316 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 317 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i64, (yyvsp[0].lex).loc, true);
     }
-#line 4039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 9:
-#line 320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 321 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u64, (yyvsp[0].lex).loc, true);
     }
-#line 4048 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 10:
-#line 324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((short)(yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 4057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 11:
-#line 328 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 329 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((unsigned short)(yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 4066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 12:
-#line 332 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 333 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 4074 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 13:
-#line 335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 336 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtDouble, (yyvsp[0].lex).loc, true);
     }
-#line 4083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4112 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 14:
-#line 339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 340 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat16, (yyvsp[0].lex).loc, true);
     }
-#line 4092 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 15:
-#line 343 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 4100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 16:
-#line 346 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 347 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 4110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 17:
-#line 354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 355 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4118 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 18:
-#line 357 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 358 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 19:
-#line 360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 361 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 20:
-#line 363 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 364 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
     }
-#line 4142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 21:
-#line 366 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 367 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "++", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "++", EOpPostIncrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4152 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 22:
-#line 371 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode));
         parseContext.lValueErrorCheck((yyvsp[0].lex).loc, "--", (yyvsp[-1].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[0].lex).loc, "--", EOpPostDecrement, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 4162 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 23:
-#line 379 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 380 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 24:
-#line 386 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 387 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 4180 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 25:
-#line 393 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 26:
-#line 399 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 27:
-#line 403 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 404 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4235 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 28:
-#line 410 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 411 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 4214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 29:
-#line 413 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 414 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 4222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4251 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 30:
-#line 419 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -4230,11 +4259,11 @@
         (yyval.interm).function = (yyvsp[-1].interm).function;
         (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 31:
-#line 426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 427 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType };
         param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
@@ -4242,29 +4271,29 @@
         (yyval.interm).function = (yyvsp[-2].interm).function;
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
     }
-#line 4246 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4275 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 32:
-#line 436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 437 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 4254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 33:
-#line 444 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 4264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 34:
-#line 449 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -4292,40 +4321,50 @@
             (yyval.interm).function = new TFunction(&empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 4296 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 35:
-#line 479 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 477 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // Constructor
+        (yyval.interm).intermNode = 0;
+        (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
+    }
+#line 4335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 36:
+#line 485 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.variableCheck((yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode())
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), "");
     }
-#line 4307 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 36:
-#line 485 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 37:
+#line 491 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "++", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "++", EOpPreIncrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4355 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 37:
-#line 489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 38:
+#line 495 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.lValueErrorCheck((yyvsp[-1].lex).loc, "--", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.handleUnaryMath((yyvsp[-1].lex).loc, "--", EOpPreDecrement, (yyvsp[0].interm.intermTypedNode));
     }
-#line 4325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 38:
-#line 493 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 39:
+#line 499 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
@@ -4342,179 +4381,179 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 4346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 39:
-#line 513 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 4352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 40:
-#line 514 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 4358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 519 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
+#line 4391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 41:
-#line 515 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 4364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 520 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
+#line 4397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 42:
-#line 516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
-              parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 4371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 521 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
+#line 4403 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 43:
 #line 522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
+              parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
+#line 4410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 44:
-#line 523 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 45:
+#line 529 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 45:
-#line 528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 46:
+#line 534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 46:
-#line 533 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 47:
+#line 539 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4408 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 47:
-#line 542 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 48:
-#line 543 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 49:
+#line 549 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 49:
-#line 548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 50:
+#line 554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 50:
-#line 556 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 51:
-#line 557 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 562 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 52:
+#line 563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 52:
-#line 563 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 53:
+#line 569 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4462 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 53:
-#line 572 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 54:
-#line 573 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 578 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 55:
+#line 579 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 55:
-#line 578 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 56:
+#line 584 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4488 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 56:
-#line 583 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 57:
+#line 589 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 57:
-#line 588 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 58:
+#line 594 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 58:
-#line 596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4514 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 59:
-#line 597 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 60:
+#line 603 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
@@ -4523,11 +4562,11 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4566 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 60:
-#line 605 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 61:
+#line 611 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
@@ -4536,124 +4575,124 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 61:
-#line 616 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 62:
-#line 617 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 622 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 63:
+#line 623 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 63:
-#line 626 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4596 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 64:
-#line 627 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4602 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 65:
+#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4574 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 65:
-#line 636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 66:
-#line 637 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 67:
+#line 643 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or");
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
     }
-#line 4591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 67:
-#line 646 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 68:
-#line 647 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 652 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 69:
+#line 653 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 69:
-#line 655 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4646 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 70:
-#line 656 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 661 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4652 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 71:
+#line 662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 71:
-#line 664 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 72:
-#line 665 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 670 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 73:
+#line 671 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 4639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 73:
-#line 673 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 74:
-#line 674 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        ++parseContext.controlFlowNestingLevel;
-    }
-#line 4653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 679 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4684 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 75:
-#line 677 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 680 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        ++parseContext.controlFlowNestingLevel;
+    }
+#line 4692 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 76:
+#line 683 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
@@ -4666,17 +4705,17 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 76:
-#line 692 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 4676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 77:
-#line 693 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 698 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
+#line 4715 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 78:
+#line 699 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
         parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
@@ -4689,119 +4728,119 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 4693 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 78:
-#line 708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 79:
+#line 714 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 4702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 79:
-#line 712 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 80:
+#line 718 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 4711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 80:
-#line 716 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 81:
+#line 722 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 4720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 81:
-#line 720 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 82:
+#line 726 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 4730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 82:
-#line 725 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 83:
+#line 731 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 4739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 83:
-#line 729 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 84:
+#line 735 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 4748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4787 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 84:
-#line 733 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 85:
+#line 739 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 4757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 85:
-#line 737 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 86:
+#line 743 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 4766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4805 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 86:
-#line 741 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 87:
+#line 747 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 4775 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 87:
-#line 745 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 88:
+#line 751 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 4784 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 88:
-#line 749 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 89:
+#line 755 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 4793 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 89:
-#line 756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
-    }
-#line 4801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 90:
-#line 759 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 762 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
+    }
+#line 4840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 91:
+#line 765 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode));
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
@@ -4810,40 +4849,40 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 4814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 91:
-#line 770 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 92:
+#line 776 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 4823 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 92:
-#line 777 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 93:
+#line 783 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */);
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 4833 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 93:
-#line 782 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 94:
+#line 788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm).intermNode && (yyvsp[-1].interm).intermNode->getAsAggregate())
             (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence);
         (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode;
     }
-#line 4843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 94:
-#line 787 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 95:
+#line 793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
 
@@ -4852,75 +4891,75 @@
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 4856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 95:
-#line 795 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 96:
+#line 801 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 4865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4904 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 96:
-#line 799 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 97:
+#line 805 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 97:
-#line 803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 98:
+#line 809 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 4883 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 98:
-#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 99:
+#line 813 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type));
         (yyval.interm.intermNode) = 0;
     }
-#line 4893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4932 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 99:
-#line 812 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 100:
+#line 818 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers);
         parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 4903 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 100:
-#line 817 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 101:
+#line 823 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers);
         (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string);
         parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList));
         (yyval.interm.intermNode) = 0;
     }
-#line 4914 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 101:
-#line 826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 4920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 102:
-#line 826 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 832 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
+#line 4959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 103:
+#line 832 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         --parseContext.structNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
@@ -4930,54 +4969,54 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 4934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 103:
-#line 837 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 104:
+#line 843 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4943 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4982 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 104:
-#line 841 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 105:
+#line 847 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 4952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 4991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 105:
-#line 848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 106:
+#line 854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 4961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 106:
-#line 855 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.function) = (yyvsp[0].interm.function);
-    }
-#line 4969 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 107:
-#line 858 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 861 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 4977 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5008 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 108:
-#line 865 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 864 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.function) = (yyvsp[0].interm.function);
+    }
+#line 5016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 109:
+#line 871 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
@@ -4986,11 +5025,11 @@
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 4990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 109:
-#line 873 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 110:
+#line 879 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         //
         // Only first parameter of one-parameter functions can be void
@@ -5008,11 +5047,11 @@
             (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
         }
     }
-#line 5012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 110:
-#line 893 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 111:
+#line 899 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) {
             parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return",
@@ -5032,11 +5071,11 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 5036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 111:
-#line 916 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 112:
+#line 922 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-1].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -5052,11 +5091,11 @@
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 112:
-#line 931 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 113:
+#line 937 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -5076,11 +5115,11 @@
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 5080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 113:
-#line 956 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 114:
+#line 962 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5092,11 +5131,11 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 5096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 114:
-#line 967 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 115:
+#line 973 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -5104,11 +5143,11 @@
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 5108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 115:
-#line 977 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 116:
+#line 983 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -5119,11 +5158,11 @@
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
     }
-#line 5123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5162 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 116:
-#line 987 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 117:
+#line 993 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -5131,118 +5170,118 @@
         parseContext.paramCheckFixStorage((yyvsp[0].interm).loc, EvqTemporary, *(yyval.interm).param.type);
         parseContext.precisionQualifierCheck((yyval.interm).loc, (yyval.interm).param.type->getBasicType(), (yyval.interm).param.type->getQualifier());
     }
-#line 5135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 117:
-#line 997 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 118:
+#line 1003 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
         (yyval.interm).param = param;
         if ((yyvsp[0].interm.type).arraySizes)
             parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes);
     }
-#line 5146 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 118:
-#line 1006 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm) = (yyvsp[0].interm);
-    }
-#line 5154 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 119:
-#line 1009 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1012 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm) = (yyvsp[0].interm);
+    }
+#line 5193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 120:
+#line 1015 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 5163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 120:
-#line 1013 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 121:
+#line 1019 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 5172 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 121:
-#line 1017 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 122:
+#line 1023 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-5].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-5].interm).type, (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-5].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5182 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 122:
-#line 1022 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 123:
+#line 1028 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm).type;
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-4].interm).type, 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-4].interm).intermNode, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5192 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 123:
-#line 1030 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 124:
+#line 1036 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[0].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
     }
-#line 5202 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 124:
-#line 1035 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 125:
+#line 1041 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-1].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type));
     }
-#line 5212 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5251 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 125:
-#line 1040 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 126:
+#line 1046 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-2].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes);
     }
-#line 5222 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 126:
-#line 1045 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 127:
+#line 1051 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-4].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-3].lex).loc, *(yyvsp[-3].lex).string, (yyvsp[-4].interm.type), (yyvsp[-2].interm).arraySizes, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5232 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 127:
-#line 1050 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 128:
+#line 1056 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).type = (yyvsp[-3].interm.type);
         TIntermNode* initNode = parseContext.declareVariable((yyvsp[-2].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[-3].interm.type), 0, (yyvsp[0].interm.intermTypedNode));
         (yyval.interm).intermNode = parseContext.intermediate.growAggregate(0, initNode, (yyvsp[-1].lex).loc);
     }
-#line 5242 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 128:
-#line 1059 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 129:
+#line 1065 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -5254,11 +5293,11 @@
 
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier);
     }
-#line 5258 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 129:
-#line 1070 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 130:
+#line 1076 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier);
         parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
@@ -5283,22 +5322,22 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5287 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 130:
-#line 1097 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 131:
+#line 1103 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "invariant");
         parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.invariant = true;
     }
-#line 5298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 131:
-#line 1106 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 132:
+#line 1112 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -5306,11 +5345,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 5310 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5349 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 132:
-#line 1113 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 133:
+#line 1119 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -5318,11 +5357,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 5322 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 133:
-#line 1120 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 134:
+#line 1126 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
 #ifdef NV_EXTENSIONS
@@ -5334,11 +5373,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 5338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5377 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 134:
-#line 1131 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 135:
+#line 1137 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
@@ -5348,84 +5387,84 @@
         (yyval.interm.type).qualifier.explicitInterp = true;
 #endif
     }
-#line 5352 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 135:
-#line 1143 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[-1].interm.type);
-    }
-#line 5360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 136:
 #line 1149 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
+        (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 5368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5399 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 137:
-#line 1152 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1155 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5407 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 138:
+#line 1158 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-2].interm.type);
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 138:
-#line 1159 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 139:
+#line 1165 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 5387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 139:
-#line 1163 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 140:
+#line 1169 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[-2].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode));
     }
-#line 5396 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 140:
-#line 1167 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 141:
+#line 1173 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     { // because "shared" is both an identifier and a keyword
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         TString strShared("shared");
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared);
     }
-#line 5406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 141:
-#line 1175 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 142:
+#line 1181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.noContraction = true;
     }
-#line 5417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 142:
-#line 1184 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 143:
-#line 1187 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1190 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 144:
+#line 1193 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -5434,72 +5473,80 @@
         (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers);
         parseContext.mergeQualifiers((yyval.interm.type).loc, (yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false);
     }
-#line 5438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 144:
-#line 1198 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5477 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 145:
-#line 1201 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1204 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 146:
-#line 1204 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1207 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 147:
+#line 1210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 147:
-#line 1208 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        // allow inheritance of storage qualifier from block declaration
-        (yyval.interm.type) = (yyvsp[0].interm.type);
-    }
-#line 5472 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 148:
-#line 1212 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1214 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 149:
-#line 1216 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1218 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 5490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 150:
-#line 1223 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1222 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        // allow inheritance of storage qualifier from block declaration
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5529 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 151:
+#line 1226 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type) = (yyvsp[0].interm.type);
+    }
+#line 5537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 152:
+#line 1232 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqConst;  // will later turn into EvqConstReadOnly, if the initializer is not constant
     }
-#line 5499 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 151:
-#line 1227 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 153:
+#line 1236 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -5512,11 +5559,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 152:
-#line 1239 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 154:
+#line 1248 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -5531,43 +5578,43 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 5535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 153:
-#line 1253 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 155:
+#line 1262 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 5545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 154:
-#line 1258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 156:
+#line 1267 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "in");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqIn;
     }
-#line 5556 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 155:
-#line 1264 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 157:
+#line 1273 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "out");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later
         (yyval.interm.type).qualifier.storage = EvqOut;
     }
-#line 5567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 156:
-#line 1270 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 158:
+#line 1279 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
@@ -5575,52 +5622,52 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 5579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 157:
-#line 1277 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 159:
+#line 1286 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "patch");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.patch = true;
     }
-#line 5590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 158:
-#line 1283 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 160:
+#line 1292 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 5600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 159:
-#line 1288 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 161:
+#line 1297 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 5610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 160:
-#line 1293 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 162:
+#line 1302 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 5620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 161:
-#line 1298 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 163:
+#line 1307 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
@@ -5629,126 +5676,135 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 5633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 162:
-#line 1306 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 164:
+#line 1315 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 5642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 163:
-#line 1310 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 165:
+#line 1319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 5651 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 164:
-#line 1314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 166:
+#line 1323 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 5660 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 165:
-#line 1318 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 167:
+#line 1327 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 5669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 166:
-#line 1322 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 168:
+#line 1331 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 5678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5725 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 167:
-#line 1326 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 169:
+#line 1335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
     }
-#line 5689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 168:
-#line 1332 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 170:
+#line 1341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine");
         parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine");
         parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine");
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
     }
-#line 5700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 169:
-#line 1341 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 171:
+#line 1350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).qualifier.nonUniform = true;
+    }
+#line 5756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 172:
+#line 1357 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO
     }
-#line 5708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 170:
-#line 1344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 173:
+#line 1360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         // TODO: 4.0 semantics: subroutines
         // 1) make sure each identifier is a type declared earlier with SUBROUTINE
         // 2) save all of the identifiers for future comparison with the declared function
     }
-#line 5718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 171:
-#line 1352 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 174:
+#line 1368 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type) = (yyvsp[0].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
     }
-#line 5727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 172:
-#line 1356 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 175:
+#line 1372 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
         (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
     }
-#line 5738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 173:
-#line 1365 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 176:
+#line 1381 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 174:
-#line 1370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 177:
+#line 1386 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -5757,20 +5813,20 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 175:
-#line 1378 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 178:
+#line 1394 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 5770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5826 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 176:
-#line 1382 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 179:
+#line 1398 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -5778,1484 +5834,1484 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size);
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 5782 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 177:
-#line 1392 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 180:
+#line 1408 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 5791 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 178:
-#line 1396 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 181:
+#line 1412 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 5800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 179:
-#line 1400 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 182:
+#line 1416 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 5810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5866 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 180:
-#line 1405 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 183:
+#line 1421 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
     }
-#line 5820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5876 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 181:
-#line 1410 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 184:
+#line 1426 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 5830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 182:
-#line 1415 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 185:
+#line 1431 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 5840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 183:
-#line 1420 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 186:
+#line 1436 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 5849 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5905 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 184:
-#line 1424 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 187:
+#line 1440 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 5859 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 185:
-#line 1429 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 188:
+#line 1445 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
     }
-#line 5869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5925 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 186:
-#line 1434 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 189:
+#line 1450 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
     }
-#line 5879 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 187:
-#line 1439 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 190:
+#line 1455 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt16;
     }
-#line 5889 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 188:
-#line 1444 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 191:
+#line 1460 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint16;
     }
-#line 5899 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5955 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 189:
-#line 1449 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 192:
+#line 1465 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 5909 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 190:
-#line 1454 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 193:
+#line 1470 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
     }
-#line 5919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5975 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 191:
-#line 1459 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 194:
+#line 1475 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
     }
-#line 5929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 192:
-#line 1464 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 195:
+#line 1480 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
     }
-#line 5939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 5995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 193:
-#line 1469 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 196:
+#line 1485 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 5948 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 194:
-#line 1473 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(2);
-    }
-#line 5958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 195:
-#line 1478 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(3);
-    }
-#line 5968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 196:
-#line 1483 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(4);
-    }
-#line 5978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 197:
-#line 1488 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1489 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
-#line 5989 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 198:
 #line 1494 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
-#line 6000 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 199:
-#line 1500 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1499 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 200:
+#line 1504 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 201:
+#line 1510 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 202:
+#line 1516 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 6011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6067 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 200:
-#line 1506 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 203:
+#line 1522 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(2);
     }
-#line 6022 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6078 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 201:
-#line 1512 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 204:
+#line 1528 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(3);
     }
-#line 6033 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 202:
-#line 1518 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 205:
+#line 1534 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setVector(4);
     }
-#line 6044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 203:
-#line 1524 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
-    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-    	(yyval.interm.type).basicType = EbtFloat;
-    	(yyval.interm.type).setVector(2);
-    }
-#line 6055 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 204:
-#line 1530 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
-    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-    	(yyval.interm.type).basicType = EbtFloat;
-    	(yyval.interm.type).setVector(3);
-    }
-#line 6066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 205:
-#line 1536 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
-    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-    	(yyval.interm.type).basicType = EbtFloat;
-    	(yyval.interm.type).setVector(4);
-    }
-#line 6077 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6100 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 206:
-#line 1542 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1540 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setVector(2);
+    }
+#line 6111 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 207:
+#line 1546 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setVector(3);
+    }
+#line 6122 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 208:
+#line 1552 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setVector(4);
+    }
+#line 6133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 209:
+#line 1558 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setVector(2);
     }
-#line 6088 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6144 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 207:
-#line 1548 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 210:
+#line 1564 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setVector(3);
     }
-#line 6099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 208:
-#line 1554 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
-    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-    	(yyval.interm.type).basicType = EbtDouble;
-    	(yyval.interm.type).setVector(4);
-    }
-#line 6110 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 209:
-#line 1560 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 210:
-#line 1565 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 211:
 #line 1570 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setVector(4);
+    }
+#line 6166 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 212:
+#line 1576 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 213:
+#line 1581 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 214:
+#line 1586 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
         (yyval.interm.type).setVector(4);
     }
-#line 6140 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6196 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 212:
-#line 1575 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 215:
+#line 1591 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 6150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 213:
-#line 1580 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 214:
-#line 1585 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 215:
-#line 1590 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
- 	   parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
- 	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
- 	   (yyval.interm.type).basicType = EbtInt8;
- 	   (yyval.interm.type).setVector(2);
-    }
-#line 6181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 216:
 #line 1596 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 217:
+#line 1601 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 218:
+#line 1606 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+ 	   parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+ 	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+ 	   (yyval.interm.type).basicType = EbtInt8;
+ 	   (yyval.interm.type).setVector(2);
+    }
+#line 6237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 219:
+#line 1612 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
  	   parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  	   (yyval.interm.type).basicType = EbtInt8;
  	   (yyval.interm.type).setVector(3);
     }
-#line 6192 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 217:
-#line 1602 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 220:
+#line 1618 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
  	   parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  	   (yyval.interm.type).basicType = EbtInt8;
  	   (yyval.interm.type).setVector(4);
     }
-#line 6203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6259 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 218:
-#line 1608 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 221:
+#line 1624 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
  	   parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  	   (yyval.interm.type).basicType = EbtInt16;
  	   (yyval.interm.type).setVector(2);
     }
-#line 6214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 219:
-#line 1614 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 222:
+#line 1630 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
  	   parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  	   (yyval.interm.type).basicType = EbtInt16;
  	   (yyval.interm.type).setVector(3);
     }
-#line 6225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 220:
-#line 1620 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 223:
+#line 1636 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
  	   parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
  	   (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
  	   (yyval.interm.type).basicType = EbtInt16;
  	   (yyval.interm.type).setVector(4);
     }
-#line 6236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 221:
-#line 1626 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 222:
-#line 1632 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6258 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 223:
-#line 1638 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 224:
-#line 1644 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1642 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).basicType = EbtInt;
         (yyval.interm.type).setVector(2);
     }
-#line 6280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 225:
-#line 1650 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1648 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 226:
+#line 1654 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 227:
+#line 1660 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt64;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 228:
+#line 1666 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(3);
     }
-#line 6291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6347 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 226:
-#line 1656 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 229:
+#line 1672 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt64;
         (yyval.interm.type).setVector(4);
     }
-#line 6302 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6358 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 227:
-#line 1662 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 230:
+#line 1678 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(2);
     }
-#line 6313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6369 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 228:
-#line 1668 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 231:
+#line 1684 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 6324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 229:
-#line 1674 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 232:
+#line 1690 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 6335 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 230:
-#line 1680 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 233:
+#line 1696 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(2);
     }
-#line 6346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6402 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 231:
-#line 1686 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 234:
+#line 1702 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt8;
         (yyval.interm.type).setVector(3);
     }
-#line 6357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 232:
-#line 1692 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 235:
+#line 1708 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt8Check((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint8;
         (yyval.interm.type).setVector(4);
     }
-#line 6368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 233:
-#line 1698 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-        (yyval.interm.type).setVector(2);
-    }
-#line 6379 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 234:
-#line 1704 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-        (yyval.interm.type).setVector(3);
-    }
-#line 6390 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 235:
-#line 1710 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint16;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 236:
-#line 1716 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1714 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).basicType = EbtUint16;
         (yyval.interm.type).setVector(2);
     }
-#line 6412 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6435 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 237:
-#line 1722 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1720 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(3);
+    }
+#line 6446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 238:
+#line 1726 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt16Check((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint16;
+        (yyval.interm.type).setVector(4);
+    }
+#line 6457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 239:
+#line 1732 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtUint;
+        (yyval.interm.type).setVector(2);
+    }
+#line 6468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 240:
+#line 1738 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(3);
     }
-#line 6423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 238:
-#line 1728 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 241:
+#line 1744 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint;
         (yyval.interm.type).setVector(4);
     }
-#line 6434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 239:
-#line 1734 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 242:
+#line 1750 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(2);
     }
-#line 6445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 240:
-#line 1740 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 243:
+#line 1756 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtUint64;
         (yyval.interm.type).setVector(3);
     }
-#line 6456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 241:
-#line 1746 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtUint64;
-        (yyval.interm.type).setVector(4);
-    }
-#line 6467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 242:
-#line 1752 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 6477 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 243:
-#line 1757 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 6487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6512 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 244:
 #line 1762 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+        parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 4);
+        (yyval.interm.type).basicType = EbtUint64;
+        (yyval.interm.type).setVector(4);
     }
-#line 6497 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 245:
-#line 1767 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1768 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6533 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 246:
-#line 1772 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 3);
-    }
-#line 6517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 247:
-#line 1777 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 4);
-    }
-#line 6527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 248:
-#line 1782 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 2);
-    }
-#line 6537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 249:
-#line 1787 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1773 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6543 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 250:
-#line 1792 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 4);
-    }
-#line 6557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 251:
-#line 1797 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 2);
-    }
-#line 6567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 252:
-#line 1802 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 3);
-    }
-#line 6577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 253:
-#line 1807 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 247:
+#line 1778 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6553 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 248:
+#line 1783 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 249:
+#line 1788 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 6573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 250:
+#line 1793 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 6583 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 251:
+#line 1798 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 6593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 252:
+#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 6603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 253:
+#line 1808 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 4);
+    }
+#line 6613 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 254:
-#line 1812 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1813 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 2);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6598 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 255:
 #line 1818 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(3, 3);
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 256:
-#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1823 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
-        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6643 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 257:
-#line 1830 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1828 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6631 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6654 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 258:
-#line 1836 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
-        (yyval.interm.type).setMatrix(2, 3);
+        (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 259:
-#line 1842 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1840 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 6676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 260:
+#line 1846 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 261:
+#line 1852 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtDouble;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 6698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 262:
+#line 1858 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 260:
-#line 1848 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 263:
+#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6664 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 261:
-#line 1854 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 264:
+#line 1870 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6675 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 262:
-#line 1860 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 265:
+#line 1876 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6742 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 263:
-#line 1866 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 266:
+#line 1882 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6697 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6753 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 264:
-#line 1872 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 267:
+#line 1888 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6764 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 265:
-#line 1878 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 268:
+#line 1894 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6775 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 266:
-#line 1884 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 269:
+#line 1900 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 267:
-#line 1890 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 270:
+#line 1906 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6741 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6797 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 268:
-#line 1896 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 271:
+#line 1912 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6808 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 269:
-#line 1902 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 272:
+#line 1918 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 6763 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 270:
-#line 1908 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 273:
+#line 1924 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 6774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 271:
-#line 1914 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 274:
+#line 1930 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 6785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6841 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 272:
-#line 1920 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 275:
+#line 1936 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 6796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6852 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 273:
-#line 1926 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 276:
+#line 1942 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 6807 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 274:
-#line 1932 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 277:
+#line 1948 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 6818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 275:
-#line 1938 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 278:
+#line 1954 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 6829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 276:
-#line 1944 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 279:
+#line 1960 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 6840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6896 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 277:
-#line 1950 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 280:
+#line 1966 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat16;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 6851 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 278:
-#line 1956 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-    	(yyval.interm.type).basicType = EbtFloat;
-    	(yyval.interm.type).setMatrix(2, 2);
-    }
-#line 6862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 279:
-#line 1962 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-    	(yyval.interm.type).basicType = EbtFloat;
-    	(yyval.interm.type).setMatrix(3, 3);
-    }
-#line 6873 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 280:
-#line 1968 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
-    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-    	(yyval.interm.type).basicType = EbtFloat;
-    	(yyval.interm.type).setMatrix(4, 4);
-    }
-#line 6884 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6907 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 281:
-#line 1974 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1972 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtFloat;
     	(yyval.interm.type).setMatrix(2, 2);
     }
-#line 6895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6918 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 282:
-#line 1980 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1978 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtFloat;
-    	(yyval.interm.type).setMatrix(2, 3);
+    	(yyval.interm.type).setMatrix(3, 3);
     }
-#line 6906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 283:
-#line 1986 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+#line 1984 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(4, 4);
+    }
+#line 6940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 284:
+#line 1990 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(2, 2);
+    }
+#line 6951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 285:
+#line 1996 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+    	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtFloat;
+    	(yyval.interm.type).setMatrix(2, 3);
+    }
+#line 6962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 286:
+#line 2002 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtFloat;
     	(yyval.interm.type).setMatrix(2, 4);
     }
-#line 6917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 284:
-#line 1992 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 287:
+#line 2008 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtFloat;
     	(yyval.interm.type).setMatrix(3, 2);
     }
-#line 6928 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6984 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 285:
-#line 1998 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 288:
+#line 2014 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtFloat;
     	(yyval.interm.type).setMatrix(3, 3);
     }
-#line 6939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 6995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 286:
-#line 2004 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 289:
+#line 2020 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtFloat;
     	(yyval.interm.type).setMatrix(3, 4);
     }
-#line 6950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 287:
-#line 2010 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 290:
+#line 2026 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtFloat;
     	(yyval.interm.type).setMatrix(4, 2);
     }
-#line 6961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 288:
-#line 2016 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 291:
+#line 2032 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtFloat;
     	(yyval.interm.type).setMatrix(4, 3);
     }
-#line 6972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 289:
-#line 2022 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 292:
+#line 2038 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtFloat;
     	(yyval.interm.type).setMatrix(4, 4);
     }
-#line 6983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 290:
-#line 2028 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 293:
+#line 2044 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setMatrix(2, 2);
     }
-#line 6994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 291:
-#line 2034 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 294:
+#line 2050 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setMatrix(3, 3);
     }
-#line 7005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7061 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 292:
-#line 2040 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 295:
+#line 2056 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setMatrix(4, 4);
     }
-#line 7016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 293:
-#line 2046 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 296:
+#line 2062 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setMatrix(2, 2);
     }
-#line 7027 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 294:
-#line 2052 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 297:
+#line 2068 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setMatrix(2, 3);
     }
-#line 7038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7094 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 295:
-#line 2058 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 298:
+#line 2074 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setMatrix(2, 4);
     }
-#line 7049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 296:
-#line 2064 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 299:
+#line 2080 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setMatrix(3, 2);
     }
-#line 7060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 297:
-#line 2070 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 300:
+#line 2086 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setMatrix(3, 3);
     }
-#line 7071 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7127 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 298:
-#line 2076 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 301:
+#line 2092 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setMatrix(3, 4);
     }
-#line 7082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 299:
-#line 2082 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 302:
+#line 2098 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setMatrix(4, 2);
     }
-#line 7093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 300:
-#line 2088 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 303:
+#line 2104 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
     	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
     	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
     	(yyval.interm.type).basicType = EbtDouble;
     	(yyval.interm.type).setMatrix(4, 3);
     }
-#line 7104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 301:
-#line 2094 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
-    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-    	(yyval.interm.type).basicType = EbtDouble;
-    	(yyval.interm.type).setMatrix(4, 4);
-    }
-#line 7115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 302:
-#line 2100 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtAtomicUint;
-    }
-#line 7125 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
-    break;
-
-  case 303:
-#line 2105 "MachineIndependent/glslang.y" /* yacc.c:1646  */
-    {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtSampler;
-        (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
-    }
-#line 7135 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7160 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
   case 304:
 #line 2110 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
+    	parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel());
+    	(yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+    	(yyval.interm.type).basicType = EbtDouble;
+    	(yyval.interm.type).setMatrix(4, 4);
+    }
+#line 7171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 305:
+#line 2116 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types");
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtAtomicUint;
+    }
+#line 7181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 306:
+#line 2121 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtSampler;
+        (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
+    }
+#line 7191 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+    break;
+
+  case 307:
+#line 2126 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 7145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7201 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 305:
-#line 2115 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 308:
+#line 2131 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 7155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7211 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 306:
-#line 2120 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 309:
+#line 2136 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 7165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 307:
-#line 2125 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 310:
+#line 2141 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true);
     }
-#line 7175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 308:
-#line 2130 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 311:
+#line 2146 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true);
     }
-#line 7185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 309:
-#line 2135 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 312:
+#line 2151 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true);
     }
-#line 7195 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7251 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 310:
-#line 2140 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 313:
+#line 2156 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true);
     }
-#line 7205 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 311:
-#line 2145 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 314:
+#line 2161 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true);
     }
-#line 7215 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7271 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 312:
-#line 2150 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 315:
+#line 2166 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true);
     }
-#line 7225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 313:
-#line 2155 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 316:
+#line 2171 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true);
     }
-#line 7235 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 314:
-#line 2160 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 317:
+#line 2176 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true);
     }
-#line 7245 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7301 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 315:
-#line 2165 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 318:
+#line 2181 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true);
     }
-#line 7255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 316:
-#line 2170 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 319:
+#line 2186 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7264,11 +7320,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D);
 #endif
     }
-#line 7268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 317:
-#line 2178 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 320:
+#line 2194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7277,11 +7333,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D);
 #endif
     }
-#line 7281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 318:
-#line 2186 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 321:
+#line 2202 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7290,11 +7346,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd3D);
 #endif
     }
-#line 7294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 319:
-#line 2194 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 322:
+#line 2210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7303,11 +7359,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube);
 #endif
     }
-#line 7307 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7363 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 320:
-#line 2202 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 323:
+#line 2218 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7316,11 +7372,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true);
 #endif
     }
-#line 7320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7376 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 321:
-#line 2210 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 324:
+#line 2226 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7329,11 +7385,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true);
 #endif
     }
-#line 7333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7389 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 322:
-#line 2218 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 325:
+#line 2234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7342,11 +7398,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true);
 #endif
     }
-#line 7346 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7402 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 323:
-#line 2226 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 326:
+#line 2242 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7355,11 +7411,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true);
 #endif
     }
-#line 7359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 324:
-#line 2234 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 327:
+#line 2250 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7368,11 +7424,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true);
 #endif
     }
-#line 7372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7428 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 325:
-#line 2242 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 328:
+#line 2258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7381,11 +7437,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true);
 #endif
     }
-#line 7385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 326:
-#line 2250 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 329:
+#line 2266 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7394,11 +7450,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true);
 #endif
     }
-#line 7398 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 327:
-#line 2258 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 330:
+#line 2274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7407,11 +7463,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true);
 #endif
     }
-#line 7411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 328:
-#line 2266 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 331:
+#line 2282 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7420,171 +7476,171 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true);
 #endif
     }
-#line 7424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 329:
-#line 2274 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 332:
+#line 2290 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 7434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7490 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 330:
-#line 2279 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 333:
+#line 2295 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 7444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7500 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 331:
-#line 2284 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 334:
+#line 2300 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 7454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 332:
-#line 2289 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 335:
+#line 2305 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 7464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7520 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 333:
-#line 2294 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 336:
+#line 2310 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D, true);
     }
-#line 7474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7530 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 334:
-#line 2299 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 337:
+#line 2315 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D, true);
     }
-#line 7484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 335:
-#line 2304 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 338:
+#line 2320 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube, true);
     }
-#line 7494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 336:
-#line 2309 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 339:
+#line 2325 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D);
     }
-#line 7504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 337:
-#line 2314 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 340:
+#line 2330 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 7514 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 338:
-#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 341:
+#line 2335 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 7524 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 339:
-#line 2324 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 342:
+#line 2340 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 7534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 340:
-#line 2329 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 343:
+#line 2345 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D, true);
     }
-#line 7544 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 341:
-#line 2334 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 344:
+#line 2350 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D, true);
     }
-#line 7554 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 342:
-#line 2339 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 345:
+#line 2355 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube, true);
     }
-#line 7564 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 343:
-#line 2344 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 346:
+#line 2360 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
     }
-#line 7574 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7630 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 344:
-#line 2349 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 347:
+#line 2365 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true);
     }
-#line 7584 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 345:
-#line 2354 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 348:
+#line 2370 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7593,11 +7649,11 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect);
 #endif
     }
-#line 7597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
     break;
 
-  case 346:
-#line 2362 "MachineIndependent/glslang.y" /* yacc.c:1646  */
+  case 349:
+#line 2378 "MachineIndependent/glslang.y" /* yacc.c:1646  */
     {
 #ifdef AMD_EXTENSIONS
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel());
@@ -7606,41 +7662,41 @@
         (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true);
 #endif
     }
-#line 7610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646  */
+#line 7666 "MachineIndependent/glslang_tab.cpp" /*