Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 4a9ccc35f7b5fed64bf53eee245fc9caa37f687d)
+++ src/Parser/DeclarationNode.cc	(revision 9e45e461b4c2f340f08ce1debda8324c0d1bb001)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jan 14 14:36:23 2017
-// Update Count     : 669
+// Last Modified On : Mon Feb  6 16:01:29 2017
+// Update Count     : 739
 //
 
@@ -83,15 +83,20 @@
 DeclarationNode * DeclarationNode::clone() const {
 	DeclarationNode * newnode = new DeclarationNode;
+	newnode->set_next( maybeClone( get_next() ) );
+	newnode->name = name ? new string( *name ) : nullptr;
+
 	newnode->type = maybeClone( type );
-	newnode->name = name ? new string( *name ) : nullptr;
 	newnode->storageClass = storageClass;
+	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
 	newnode->isInline = isInline;
 	newnode->isNoreturn = isNoreturn;
-	newnode->bitfieldWidth = maybeClone( bitfieldWidth );
+	newnode->enumeratorValue.reset( maybeClone( enumeratorValue.get() ) );
 	newnode->hasEllipsis = hasEllipsis;
-	newnode->initializer = maybeClone( initializer );
-	newnode->set_next( maybeClone( get_next() ) );
 	newnode->linkage = linkage;
 	newnode->asmName = maybeClone( asmName );
+	cloneAll( attributes, newnode->attributes );
+	newnode->initializer = maybeClone( initializer );
+	newnode->extension = extension;
+	newnode->error = error;
 
 //	newnode->variable.name = variable.name ? new string( *variable.name ) : nullptr;
@@ -159,4 +164,5 @@
 	newnode->type->function.newStyle = newStyle;
 	newnode->type->function.body = body;
+
 	// ignore unnamed routine declarations: void p( int (*)(int) );
 	if ( newnode->name ) {
@@ -436,5 +442,5 @@
 	} // if
 	appendError( error, q->error );
-} // DeclarationNode::copyStorageClasses
+} // DeclarationNode::checkStorageClasses
 
 DeclarationNode * DeclarationNode::copyStorageClasses( DeclarationNode * q ) {
@@ -446,5 +452,8 @@
 		storageClass = q->storageClass;
 	} // if
-	attributes.splice( attributes.end(), q->attributes );
+
+	for ( Attribute *attr: reverseIterate( q->attributes ) ) {
+		attributes.push_front( attr->clone() );
+	} // for
 	return this;
 } // DeclarationNode::copyStorageClasses
@@ -656,8 +665,8 @@
 }
 
-DeclarationNode * DeclarationNode::addAsmName( ConstantExpr * newname ) {
+DeclarationNode * DeclarationNode::addAsmName( DeclarationNode * newname ) {
 	assert( ! asmName );
-	asmName = newname;
-	return this;
+	asmName = newname ? newname->asmName : nullptr;
+	return this->addQualifiers( newname );
 }
 
@@ -690,5 +699,5 @@
 }
 
-static void setBase( TypeData *&type, TypeData * newType ) {
+DeclarationNode * DeclarationNode::setBase( TypeData * newType ) {
 	if ( type ) {
 		TypeData * prevBase = type;
@@ -702,11 +711,23 @@
 		type = newType;
 	} // if
-}
+	return this;
+}
+
+DeclarationNode * DeclarationNode::copyAttribute( DeclarationNode * a ) {
+	if ( a ) {
+		for ( Attribute *attr: reverseIterate( a->attributes ) ) {
+			attributes.push_front( attr );
+		} // for
+		a->attributes.clear();
+	} // if
+	return this;
+} // copyAttribute
 
 DeclarationNode * DeclarationNode::addPointer( DeclarationNode * p ) {
 	if ( p ) {
 		assert( p->type->kind == TypeData::Pointer );
-		setBase( type, p->type );
+		setBase( p->type );
 		p->type = nullptr;
+		copyAttribute( p );
 		delete p;
 	} // if
@@ -717,6 +738,7 @@
 	if ( a ) {
 		assert( a->type->kind == TypeData::Array );
-		setBase( type, a->type );
+		setBase( a->type );
 		a->type = nullptr;
+		copyAttribute( a );
 		delete a;
 	} // if
@@ -790,5 +812,5 @@
 	TypeData * ftype = new TypeData( TypeData::Function );
 	ftype->function.params = params;
-	setBase( type, ftype );
+	setBase( ftype );
 	return this;
 }
@@ -836,4 +858,5 @@
 		TypeData * srcType = type;
 
+		// search for the base type by scanning off pointers and array designators
 		while ( srcType->base ) {
 			srcType = srcType->base;
@@ -986,24 +1009,28 @@
 	if ( attr.expr ) {
 //		return new AttrType( buildQualifiers( type ), *attr.name, attr.expr->build() );
-		return new AttrType( buildQualifiers( type ), *name, attr.expr->build() );
+		return new AttrType( buildQualifiers( type ), *name, attr.expr->build(), attributes );
 	} else if ( attr.type ) {
 //		return new AttrType( buildQualifiers( type ), *attr.name, attr.type->buildType() );
-		return new AttrType( buildQualifiers( type ), *name, attr.type->buildType() );
+		return new AttrType( buildQualifiers( type ), *name, attr.type->buildType(), attributes );
 	} // if
 
 	switch ( type->kind ) {
-	  case TypeData::Enum:
-		return new EnumInstType( buildQualifiers( type ), *type->enumeration.name );
+	  case TypeData::Enum: {
+		  EnumDecl * typedecl = buildEnum( type, attributes );
+		  return new EnumInstType( buildQualifiers( type ), typedecl );
+	  }
 	  case TypeData::Aggregate: {
+		  AggregateDecl * typedecl = buildAggregate( type, attributes );
 		  ReferenceToType * ret;
 		  switch ( type->aggregate.kind ) {
 			case DeclarationNode::Struct:
-			  ret = new StructInstType( buildQualifiers( type ), *type->aggregate.name );
+			  ret = new StructInstType( buildQualifiers( type ), (StructDecl *)typedecl );
 			  break;
 			case DeclarationNode::Union:
-			  ret = new UnionInstType( buildQualifiers( type ), *type->aggregate.name );
+			  ret = new UnionInstType( buildQualifiers( type ), (UnionDecl *)typedecl );
 			  break;
 			case DeclarationNode::Trait:
-			  ret = new TraitInstType( buildQualifiers( type ), *type->aggregate.name );
+			  assert( false );
+			  //ret = new TraitInstType( buildQualifiers( type ), (TraitDecl *)typedecl );
 			  break;
 			default:
@@ -1014,10 +1041,12 @@
 	  }
 	  case TypeData::Symbolic: {
-		  TypeInstType * ret = new TypeInstType( buildQualifiers( type ), *type->symbolic.name, false );
+		  TypeInstType * ret = new TypeInstType( buildQualifiers( type ), *type->symbolic.name, false, attributes );
 		  buildList( type->symbolic.actuals, ret->get_parameters() );
 		  return ret;
 	  }
 	  default:
-		return typebuild( type );
+		Type * simpletypes = typebuild( type );
+		simpletypes->get_attributes() = attributes;		// copy because member is const
+		return simpletypes;
 	} // switch
 }
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 4a9ccc35f7b5fed64bf53eee245fc9caa37f687d)
+++ src/Parser/ParseNode.h	(revision 9e45e461b4c2f340f08ce1debda8324c0d1bb001)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jan 18 16:20:43 2017
-// Update Count     : 650
+// Last Modified On : Mon Feb  6 15:52:21 2017
+// Update Count     : 657
 //
 
@@ -198,4 +198,9 @@
   public:
 	// These must remain in the same order as the corresponding DeclarationNode names.
+
+	// enum StorageClass { Extern, Static, Auto, Register, NoStorageClass };
+	// enum FunctionSpec { Inline, Fortran, Noreturn, NoFunctionSpec };
+	// enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic, Threadlocal, Mutex, NoQualifier };
+
 	enum StorageClass { Extern, Static, Auto, Register, Inline, Fortran, Noreturn, Threadlocal, NoStorageClass, };
 	enum Qualifier { Const, Restrict, Volatile, Lvalue, Atomic, NoQualifier };
@@ -259,9 +264,11 @@
 	DeclarationNode * addAssertions( DeclarationNode * );
 	DeclarationNode * addName( std::string * );
-	DeclarationNode * addAsmName( ConstantExpr * );
+	DeclarationNode * addAsmName( DeclarationNode * );
 	DeclarationNode * addBitfield( ExpressionNode * size );
 	DeclarationNode * addVarArgs();
 	DeclarationNode * addFunctionBody( StatementNode * body );
 	DeclarationNode * addOldDeclList( DeclarationNode * list );
+	DeclarationNode * setBase( TypeData * newType );
+	DeclarationNode * copyAttribute( DeclarationNode * attr );
 	DeclarationNode * addPointer( DeclarationNode * qualifiers );
 	DeclarationNode * addArray( DeclarationNode * array );
Index: src/Parser/StatementNode.cc
===================================================================
--- src/Parser/StatementNode.cc	(revision 4a9ccc35f7b5fed64bf53eee245fc9caa37f687d)
+++ src/Parser/StatementNode.cc	(revision 9e45e461b4c2f340f08ce1debda8324c0d1bb001)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 14:59:41 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Aug 21 11:59:37 2016
-// Update Count     : 325
+// Last Modified On : Thu Feb  2 22:16:40 2017
+// Update Count     : 327
 //
 
@@ -28,25 +28,22 @@
 
 StatementNode::StatementNode( DeclarationNode *decl ) {
-	if ( decl ) {
-		DeclarationNode *agg = decl->extractAggregate();
-		if ( agg ) {
-			StatementNode *nextStmt = new StatementNode( new DeclStmt( noLabels, maybeBuild< Declaration >( decl ) ) );
-			set_next( nextStmt );
-			if ( decl->get_next() ) {
-				get_next()->set_next( new StatementNode( dynamic_cast< DeclarationNode * >(decl->get_next()) ) );
-				decl->set_next( 0 );
-			} // if
-		} else {
-			if ( decl->get_next() ) {
-				set_next(new StatementNode( dynamic_cast< DeclarationNode * >( decl->get_next() ) ) );
-				decl->set_next( 0 );
-			} // if
-			agg = decl;
+	assert( decl );
+	DeclarationNode *agg = decl->extractAggregate();
+	if ( agg ) {
+		StatementNode *nextStmt = new StatementNode( new DeclStmt( noLabels, maybeBuild< Declaration >( decl ) ) );
+		set_next( nextStmt );
+		if ( decl->get_next() ) {
+			get_next()->set_next( new StatementNode( dynamic_cast< DeclarationNode * >(decl->get_next()) ) );
+			decl->set_next( 0 );
 		} // if
-		stmt.reset( new DeclStmt( noLabels, maybeMoveBuild< Declaration >(agg) ) );
 	} else {
-		assert( false );
+		if ( decl->get_next() ) {
+			set_next( new StatementNode( dynamic_cast< DeclarationNode * >( decl->get_next() ) ) );
+			decl->set_next( 0 );
+		} // if
+		agg = decl;
 	} // if
-}
+	stmt.reset( new DeclStmt( noLabels, maybeMoveBuild< Declaration >(agg) ) );
+} // StatementNode::StatementNode
 
 StatementNode *StatementNode::append_last_case( StatementNode *stmt ) {
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 4a9ccc35f7b5fed64bf53eee245fc9caa37f687d)
+++ src/Parser/TypeData.cc	(revision 9e45e461b4c2f340f08ce1debda8324c0d1bb001)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jan 13 15:47:37 2017
-// Update Count     : 423
+// Last Modified On : Fri Jan 27 15:28:56 2017
+// Update Count     : 428
 //
 
@@ -617,18 +617,18 @@
 } // buildPointer
 
-AggregateDecl * buildAggregate( const TypeData * td ) {
+AggregateDecl * buildAggregate( const TypeData * td, std::list< Attribute * > attributes ) {
 	assert( td->kind == TypeData::Aggregate );
 	AggregateDecl * at;
 	switch ( td->aggregate.kind ) {
 	  case DeclarationNode::Struct:
-		at = new StructDecl( *td->aggregate.name );
+		at = new StructDecl( *td->aggregate.name, attributes );
 		buildForall( td->aggregate.params, at->get_parameters() );
 		break;
 	  case DeclarationNode::Union:
-		at = new UnionDecl( *td->aggregate.name );
+		at = new UnionDecl( *td->aggregate.name, attributes );
 		buildForall( td->aggregate.params, at->get_parameters() );
 		break;
 	  case DeclarationNode::Trait:
-		at = new TraitDecl( *td->aggregate.name );
+		at = new TraitDecl( *td->aggregate.name, attributes );
 		buildList( td->aggregate.params, at->get_parameters() );
 		break;
@@ -685,7 +685,7 @@
 } // buildSymbolic
 
-EnumDecl * buildEnum( const TypeData * td ) {
+EnumDecl * buildEnum( const TypeData * td, std::list< Attribute * > attributes ) {
 	assert( td->kind == TypeData::Enum );
-	EnumDecl * ret = new EnumDecl( *td->enumeration.name );
+	EnumDecl * ret = new EnumDecl( *td->enumeration.name, attributes );
 	buildList( td->enumeration.constants, ret->get_members() );
 	list< Declaration * >::iterator members = ret->get_members().begin();
@@ -746,11 +746,11 @@
 		return decl->set_asmName( asmName );
 	} else if ( td->kind == TypeData::Aggregate ) {
-		return buildAggregate( td );
+		return buildAggregate( td, attributes );
 	} else if ( td->kind == TypeData::Enum ) {
-		return buildEnum( td );
+		return buildEnum( td, attributes );
 	} else if ( td->kind == TypeData::Symbolic ) {
 		return buildSymbolic( td, name, sc );
 	} else {
-		return (new ObjectDecl( name, sc, linkage, bitfieldWidth, typebuild( td ), init, list< Attribute * >(), isInline, isNoreturn ))->set_asmName( asmName );
+		return (new ObjectDecl( name, sc, linkage, bitfieldWidth, typebuild( td ), init, attributes, isInline, isNoreturn ))->set_asmName( asmName );
 	} // if
 	return nullptr;
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 4a9ccc35f7b5fed64bf53eee245fc9caa37f687d)
+++ src/Parser/TypeData.h	(revision 9e45e461b4c2f340f08ce1debda8324c0d1bb001)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jan 13 16:11:23 2017
-// Update Count     : 144
+// Last Modified On : Thu Feb  2 17:02:09 2017
+// Update Count     : 146
 //
 
@@ -103,9 +103,9 @@
 PointerType * buildPointer( const TypeData * );
 ArrayType * buildArray( const TypeData * );
-AggregateDecl * buildAggregate( const TypeData * );
+AggregateDecl * buildAggregate( const TypeData *, std::list< Attribute * > );
 ReferenceToType * buildAggInst( const TypeData * );
 NamedTypeDecl * buildSymbolic( const TypeData *, const std::string &name, DeclarationNode::StorageClass sc );
 TypeDecl * buildVariable( const TypeData * );
-EnumDecl * buildEnum( const TypeData * );
+EnumDecl * buildEnum( const TypeData *, std::list< Attribute * > );
 TypeInstType * buildSymbolicInst( const TypeData * );
 TupleType * buildTuple( const TypeData * );
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 4a9ccc35f7b5fed64bf53eee245fc9caa37f687d)
+++ src/Parser/parser.cc	(revision 9e45e461b4c2f340f08ce1debda8324c0d1bb001)
@@ -67,5 +67,5 @@
 
 /* Line 268 of yacc.c  */
-#line 41 "parser.yy"
+#line 42 "parser.yy"
 
 #define YYDEBUG_LEXER_TEXT (yylval)						// lexer loads this up each time
@@ -95,7 +95,26 @@
 } // appendStr
 
+DeclarationNode * distAttr( DeclarationNode * specifier, DeclarationNode * declList ) {
+	// distribute declaration_specifier across all declared variables, e.g., static, const, __attribute__.
+	DeclarationNode * cur = declList, * cl = (new DeclarationNode)->addType( specifier );
+	//cur->addType( specifier );
+	for ( cur = dynamic_cast< DeclarationNode * >( cur->get_next() ); cur != nullptr; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ) ) {
+		cl->cloneBaseType( cur );
+	} // for
+	declList->addType( cl );
+//	delete cl;
+	return declList;
+} // distAttr
+
+void distExt( DeclarationNode * declaration ) {
+	// distribute EXTENSION across all declarations
+	for ( DeclarationNode *iter = declaration; iter != nullptr; iter = (DeclarationNode *)iter->get_next() ) {
+		iter->set_extension( true );
+	} // for
+} // distExt
+
 
 /* Line 268 of yacc.c  */
-#line 100 "Parser/parser.cc"
+#line 119 "Parser/parser.cc"
 
 /* Enabling traces.  */
@@ -358,19 +377,19 @@
 
 /* Line 293 of yacc.c  */
-#line 119 "parser.yy"
+#line 139 "parser.yy"
 
 	Token tok;
-	ParseNode *pn;
-	ExpressionNode *en;
-	DeclarationNode *decl;
+	ParseNode * pn;
+	ExpressionNode * en;
+	DeclarationNode * decl;
 	DeclarationNode::Aggregate aggKey;
 	DeclarationNode::TypeClass tclass;
-	StatementNode *sn;
-	ConstantExpr *constant;
-	ForCtl *fctl;
-	LabelNode *label;
-	InitializerNode *in;
+	StatementNode * sn;
+	ConstantExpr * constant;
+	ForCtl * fctl;
+	LabelNode * label;
+	InitializerNode * in;
 	OperKinds op;
-	std::string *str;
+	std::string * str;
 	bool flag;
 
@@ -378,5 +397,5 @@
 
 /* Line 293 of yacc.c  */
-#line 381 "Parser/parser.cc"
+#line 400 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -390,5 +409,5 @@
 
 /* Line 343 of yacc.c  */
-#line 393 "Parser/parser.cc"
+#line 412 "Parser/parser.cc"
 
 #ifdef short
@@ -607,16 +626,16 @@
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  251
+#define YYFINAL  240
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   10498
+#define YYLAST   10925
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  138
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  243
+#define YYNNTS  242
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  758
+#define YYNRULES  756
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1546
+#define YYNSTATES  1550
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
@@ -689,65 +708,65 @@
      408,   410,   414,   416,   420,   421,   423,   425,   427,   429,
      431,   433,   435,   437,   439,   446,   451,   454,   462,   464,
-     468,   470,   473,   475,   478,   480,   483,   486,   492,   500,
-     506,   516,   522,   532,   534,   538,   540,   542,   546,   550,
-     553,   555,   558,   561,   562,   564,   567,   571,   572,   574,
-     577,   581,   585,   590,   591,   593,   595,   598,   604,   612,
-     619,   626,   631,   635,   640,   643,   647,   650,   654,   658,
-     662,   666,   672,   676,   680,   685,   687,   693,   700,   706,
-     713,   723,   734,   744,   755,   758,   760,   763,   766,   769,
-     771,   778,   787,   798,   811,   826,   827,   829,   830,   832,
-     834,   838,   843,   851,   852,   854,   858,   860,   864,   866,
-     868,   870,   874,   876,   878,   880,   884,   885,   887,   891,
-     896,   898,   902,   904,   906,   910,   914,   918,   922,   926,
-     929,   933,   940,   944,   948,   953,   955,   958,   961,   965,
-     971,   979,   987,   993,  1003,  1006,  1009,  1015,  1019,  1025,
-    1030,  1034,  1039,  1044,  1052,  1056,  1060,  1064,  1068,  1073,
-    1080,  1082,  1084,  1086,  1088,  1090,  1092,  1094,  1096,  1097,
-    1099,  1101,  1104,  1106,  1108,  1110,  1112,  1114,  1116,  1118,
-    1119,  1125,  1127,  1130,  1134,  1136,  1139,  1141,  1143,  1145,
-    1147,  1149,  1151,  1153,  1155,  1157,  1159,  1161,  1163,  1165,
-    1167,  1169,  1171,  1173,  1175,  1177,  1179,  1181,  1183,  1185,
-    1187,  1190,  1193,  1197,  1201,  1203,  1207,  1209,  1212,  1215,
-    1218,  1223,  1228,  1233,  1238,  1240,  1243,  1246,  1250,  1252,
-    1255,  1258,  1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,
-    1282,  1287,  1290,  1291,  1298,  1306,  1309,  1312,  1315,  1316,
-    1319,  1322,  1326,  1329,  1333,  1335,  1338,  1342,  1345,  1348,
-    1353,  1354,  1356,  1359,  1362,  1364,  1365,  1367,  1370,  1373,
-    1379,  1382,  1383,  1391,  1394,  1399,  1400,  1403,  1404,  1406,
-    1408,  1410,  1416,  1422,  1428,  1430,  1436,  1442,  1452,  1454,
-    1460,  1461,  1463,  1465,  1471,  1473,  1475,  1481,  1487,  1489,
-    1493,  1497,  1502,  1504,  1506,  1508,  1510,  1513,  1515,  1519,
-    1523,  1525,  1528,  1530,  1534,  1536,  1538,  1540,  1542,  1544,
-    1546,  1548,  1550,  1552,  1554,  1556,  1559,  1561,  1563,  1565,
-    1568,  1569,  1572,  1575,  1577,  1582,  1583,  1585,  1588,  1592,
-    1597,  1600,  1603,  1605,  1608,  1611,  1617,  1623,  1631,  1638,
-    1640,  1643,  1646,  1650,  1652,  1655,  1658,  1663,  1666,  1671,
-    1672,  1677,  1680,  1682,  1684,  1686,  1688,  1689,  1692,  1698,
-    1704,  1718,  1720,  1722,  1726,  1730,  1733,  1737,  1741,  1744,
-    1749,  1751,  1758,  1768,  1769,  1781,  1783,  1787,  1791,  1795,
-    1797,  1799,  1805,  1808,  1814,  1815,  1817,  1819,  1823,  1824,
-    1826,  1828,  1830,  1832,  1833,  1840,  1843,  1845,  1848,  1853,
-    1856,  1860,  1864,  1868,  1873,  1879,  1885,  1891,  1898,  1900,
-    1902,  1904,  1908,  1909,  1915,  1916,  1918,  1920,  1923,  1930,
-    1932,  1936,  1937,  1939,  1944,  1946,  1948,  1950,  1952,  1955,
-    1957,  1960,  1963,  1965,  1969,  1972,  1976,  1980,  1983,  1988,
-    1993,  1997,  2006,  2010,  2013,  2015,  2018,  2025,  2034,  2038,
-    2041,  2045,  2049,  2054,  2059,  2063,  2065,  2067,  2069,  2074,
-    2081,  2085,  2088,  2092,  2096,  2101,  2106,  2110,  2113,  2115,
-    2118,  2121,  2123,  2127,  2130,  2134,  2138,  2141,  2146,  2151,
-    2155,  2162,  2171,  2175,  2178,  2180,  2183,  2186,  2189,  2193,
-    2197,  2200,  2205,  2210,  2214,  2221,  2230,  2234,  2237,  2239,
-    2242,  2245,  2247,  2249,  2252,  2256,  2260,  2263,  2268,  2275,
-    2284,  2286,  2289,  2292,  2294,  2297,  2300,  2304,  2308,  2310,
-    2315,  2320,  2324,  2330,  2339,  2343,  2346,  2350,  2352,  2358,
-    2364,  2371,  2378,  2380,  2383,  2386,  2388,  2391,  2394,  2398,
-    2402,  2404,  2409,  2414,  2418,  2424,  2433,  2437,  2439,  2442,
-    2444,  2447,  2454,  2460,  2467,  2475,  2483,  2485,  2488,  2491,
-    2493,  2496,  2499,  2503,  2507,  2509,  2514,  2519,  2523,  2532,
-    2536,  2538,  2540,  2543,  2545,  2547,  2550,  2554,  2557,  2561,
-    2564,  2568,  2572,  2575,  2580,  2584,  2587,  2591,  2594,  2599,
-    2603,  2606,  2613,  2620,  2627,  2635,  2637,  2640,  2642,  2644,
-    2646,  2649,  2653,  2656,  2660,  2663,  2667,  2671,  2676,  2679,
-    2683,  2688,  2691,  2697,  2704,  2711,  2712,  2714,  2715
+     468,   470,   473,   475,   478,   481,   483,   486,   489,   495,
+     503,   509,   519,   525,   535,   537,   541,   543,   545,   549,
+     553,   556,   558,   561,   564,   565,   567,   570,   574,   575,
+     577,   580,   584,   588,   593,   594,   596,   598,   601,   607,
+     615,   622,   629,   634,   638,   643,   646,   650,   653,   657,
+     661,   665,   669,   675,   679,   683,   688,   690,   696,   703,
+     709,   716,   726,   737,   747,   758,   761,   763,   766,   769,
+     772,   774,   781,   790,   801,   814,   829,   830,   832,   833,
+     835,   837,   841,   846,   854,   855,   857,   861,   863,   867,
+     869,   871,   873,   877,   879,   881,   883,   887,   888,   890,
+     894,   899,   901,   905,   907,   909,   913,   917,   921,   925,
+     929,   932,   936,   943,   947,   951,   956,   958,   961,   964,
+     968,   974,   982,   990,   996,  1006,  1009,  1012,  1018,  1022,
+    1028,  1033,  1037,  1042,  1047,  1055,  1060,  1064,  1068,  1072,
+    1076,  1083,  1085,  1087,  1089,  1091,  1093,  1095,  1097,  1099,
+    1100,  1102,  1104,  1107,  1109,  1111,  1113,  1115,  1117,  1119,
+    1121,  1122,  1128,  1130,  1133,  1137,  1139,  1142,  1144,  1146,
+    1148,  1150,  1152,  1154,  1156,  1158,  1160,  1162,  1164,  1166,
+    1168,  1170,  1172,  1174,  1176,  1178,  1180,  1182,  1184,  1186,
+    1188,  1190,  1193,  1196,  1200,  1204,  1206,  1210,  1212,  1215,
+    1218,  1221,  1226,  1231,  1236,  1241,  1243,  1246,  1249,  1253,
+    1255,  1258,  1261,  1263,  1266,  1269,  1273,  1275,  1278,  1281,
+    1283,  1285,  1291,  1295,  1296,  1304,  1313,  1317,  1319,  1321,
+    1322,  1325,  1328,  1332,  1336,  1341,  1343,  1346,  1350,  1353,
+    1355,  1360,  1361,  1363,  1366,  1369,  1371,  1372,  1374,  1377,
+    1384,  1388,  1389,  1398,  1401,  1406,  1407,  1410,  1411,  1413,
+    1415,  1417,  1423,  1429,  1435,  1437,  1443,  1449,  1459,  1461,
+    1467,  1468,  1470,  1472,  1478,  1480,  1482,  1488,  1494,  1496,
+    1500,  1504,  1509,  1511,  1513,  1515,  1517,  1520,  1522,  1526,
+    1530,  1532,  1535,  1537,  1541,  1543,  1545,  1547,  1549,  1551,
+    1553,  1555,  1557,  1559,  1561,  1563,  1566,  1568,  1570,  1571,
+    1574,  1577,  1579,  1584,  1585,  1587,  1590,  1594,  1599,  1602,
+    1605,  1607,  1610,  1613,  1619,  1625,  1633,  1640,  1642,  1645,
+    1648,  1652,  1654,  1657,  1660,  1665,  1668,  1673,  1674,  1679,
+    1682,  1684,  1686,  1688,  1690,  1691,  1694,  1700,  1706,  1720,
+    1722,  1724,  1728,  1732,  1735,  1739,  1743,  1746,  1751,  1753,
+    1760,  1770,  1771,  1783,  1785,  1789,  1793,  1797,  1799,  1801,
+    1807,  1810,  1816,  1817,  1819,  1821,  1825,  1826,  1828,  1830,
+    1832,  1834,  1835,  1842,  1845,  1847,  1850,  1855,  1858,  1862,
+    1866,  1870,  1875,  1881,  1887,  1893,  1900,  1902,  1904,  1906,
+    1910,  1911,  1917,  1918,  1920,  1922,  1925,  1932,  1934,  1938,
+    1939,  1941,  1946,  1948,  1950,  1952,  1954,  1957,  1959,  1962,
+    1965,  1967,  1971,  1974,  1978,  1983,  1986,  1991,  1996,  2000,
+    2009,  2013,  2016,  2018,  2021,  2028,  2037,  2041,  2044,  2048,
+    2052,  2057,  2062,  2066,  2068,  2070,  2072,  2077,  2086,  2090,
+    2093,  2097,  2101,  2106,  2111,  2115,  2118,  2120,  2123,  2126,
+    2128,  2132,  2135,  2139,  2144,  2147,  2152,  2157,  2161,  2168,
+    2177,  2181,  2184,  2186,  2189,  2192,  2195,  2199,  2204,  2207,
+    2212,  2217,  2221,  2228,  2237,  2241,  2244,  2246,  2249,  2252,
+    2254,  2256,  2259,  2263,  2268,  2271,  2276,  2283,  2292,  2294,
+    2297,  2300,  2302,  2305,  2308,  2312,  2317,  2319,  2324,  2329,
+    2333,  2339,  2348,  2352,  2355,  2359,  2361,  2367,  2373,  2380,
+    2387,  2389,  2392,  2395,  2397,  2400,  2403,  2407,  2412,  2414,
+    2419,  2424,  2428,  2434,  2443,  2447,  2449,  2452,  2454,  2457,
+    2464,  2470,  2477,  2485,  2493,  2495,  2498,  2501,  2503,  2506,
+    2509,  2513,  2518,  2520,  2525,  2530,  2534,  2543,  2547,  2549,
+    2551,  2554,  2556,  2558,  2561,  2565,  2568,  2572,  2575,  2579,
+    2583,  2586,  2591,  2595,  2598,  2602,  2605,  2610,  2614,  2617,
+    2624,  2631,  2638,  2646,  2648,  2651,  2653,  2655,  2657,  2660,
+    2664,  2667,  2671,  2674,  2678,  2682,  2687,  2690,  2694,  2699,
+    2702,  2708,  2715,  2722,  2723,  2725,  2726
 };
 
@@ -755,5 +774,5 @@
 static const yytype_int16 yyrhs[] =
 {
-     309,     0,    -1,    -1,    -1,    82,    -1,    85,    -1,    86,
+     308,     0,    -1,    -1,    -1,    82,    -1,    85,    -1,    86,
       -1,    87,    -1,    83,    -1,    75,    -1,    79,    -1,   145,
       -1,    75,    -1,    79,    -1,    75,    -1,   145,    -1,    88,
@@ -765,5 +784,5 @@
      149,    86,    -1,   149,    90,   144,    -1,   149,    90,   116,
      139,   152,   140,   117,    -1,   149,    91,    -1,   149,    92,
-      -1,   114,   282,   115,   119,   286,   379,   120,    -1,   149,
+      -1,   114,   281,   115,   119,   285,   378,   120,    -1,   149,
      119,   150,   120,    -1,   151,    -1,   150,   121,   151,    -1,
       -1,   172,    -1,   153,    -1,   152,   121,   153,    -1,   154,
@@ -775,9 +794,9 @@
      141,    -1,   146,    -1,    43,   159,    -1,   157,   159,    -1,
      158,   159,    -1,    91,   156,    -1,    92,   156,    -1,    40,
-     156,    -1,    40,   114,   282,   115,    -1,    69,   156,    -1,
-      69,   114,   282,   115,    -1,    41,   114,   282,   121,   144,
+     156,    -1,    40,   114,   281,   115,    -1,    69,   156,    -1,
+      69,   114,   281,   115,    -1,    41,   114,   281,   121,   144,
      115,    -1,    79,    -1,    79,   114,   151,   115,    -1,    79,
-     114,   283,   115,    -1,   122,    -1,   123,    -1,   124,    -1,
-     125,    -1,   126,    -1,   127,    -1,   156,    -1,   114,   282,
+     114,   282,   115,    -1,   122,    -1,   123,    -1,   124,    -1,
+     125,    -1,   126,    -1,   127,    -1,   156,    -1,   114,   281,
      115,   159,    -1,   159,    -1,   160,   122,   159,    -1,   160,
      128,   159,    -1,   160,   129,   159,    -1,   160,    -1,   161,
@@ -799,232 +818,233 @@
       -1,   177,    -1,   180,    -1,   181,    -1,   185,    -1,   186,
       -1,   198,    -1,   200,    -1,   201,    -1,   206,    -1,   132,
-     149,   119,   150,   120,   137,    -1,   279,   135,   319,   179,
+     149,   119,   150,   120,   137,    -1,   278,   135,   318,   179,
       -1,   119,   120,    -1,   119,   139,   139,   217,   182,   140,
      120,    -1,   183,    -1,   182,   139,   183,    -1,   220,    -1,
-      43,   220,    -1,   315,    -1,   179,   140,    -1,   179,    -1,
-     184,   179,    -1,   178,   137,    -1,    44,   114,   177,   115,
-     179,    -1,    44,   114,   177,   115,   179,    45,   179,    -1,
-      46,   114,   177,   115,   191,    -1,    46,   114,   177,   115,
-     119,   139,   213,   192,   120,    -1,    56,   114,   177,   115,
-     191,    -1,    56,   114,   177,   115,   119,   139,   213,   194,
-     120,    -1,   171,    -1,   171,   101,   171,    -1,   317,    -1,
-     187,    -1,   188,   121,   187,    -1,    47,   188,   135,    -1,
-      48,   135,    -1,   189,    -1,   190,   189,    -1,   190,   179,
-      -1,    -1,   193,    -1,   190,   184,    -1,   193,   190,   184,
-      -1,    -1,   195,    -1,   190,   197,    -1,   190,   184,   196,
-      -1,   195,   190,   197,    -1,   195,   190,   184,   196,    -1,
-      -1,   197,    -1,    59,    -1,    59,   137,    -1,    50,   114,
-     177,   115,   179,    -1,    49,   179,    50,   114,   177,   115,
-     137,    -1,    51,   114,   139,   199,   115,   179,    -1,   178,
-     140,   137,   178,   137,   178,    -1,   220,   178,   137,   178,
-      -1,    54,   279,   137,    -1,    54,   122,   177,   137,    -1,
-      53,   137,    -1,    53,   279,   137,    -1,    52,   137,    -1,
-      52,   279,   137,    -1,    55,   178,   137,    -1,    64,   173,
-     137,    -1,    65,   173,   137,    -1,    65,   173,    66,   172,
-     137,    -1,    60,   181,   202,    -1,    60,   181,   204,    -1,
-      60,   181,   202,   204,    -1,   203,    -1,    61,   114,   101,
-     115,   181,    -1,   203,    61,   114,   101,   115,   181,    -1,
-      62,   114,   101,   115,   181,    -1,   203,    62,   114,   101,
-     115,   181,    -1,    61,   114,   139,   139,   205,   140,   115,
-     181,   140,    -1,   203,    61,   114,   139,   139,   205,   140,
-     115,   181,   140,    -1,    62,   114,   139,   139,   205,   140,
-     115,   181,   140,    -1,   203,    62,   114,   139,   139,   205,
-     140,   115,   181,   140,    -1,    63,   181,    -1,   233,    -1,
-     233,   316,    -1,   233,   364,    -1,   373,   144,    -1,   373,
-      -1,    67,   207,   114,   146,   115,   137,    -1,    67,   207,
-     114,   146,   135,   208,   115,   137,    -1,    67,   207,   114,
-     146,   135,   208,   135,   208,   115,   137,    -1,    67,   207,
-     114,   146,   135,   208,   135,   208,   135,   211,   115,   137,
-      -1,    67,   207,    54,   114,   146,   135,   135,   208,   135,
-     211,   135,   212,   115,   137,    -1,    -1,    11,    -1,    -1,
-     209,    -1,   210,    -1,   209,   121,   210,    -1,   146,   114,
-     171,   115,    -1,   116,   171,   117,   146,   114,   171,   115,
-      -1,    -1,   146,    -1,   211,   121,   146,    -1,   144,    -1,
-     212,   121,   144,    -1,   140,    -1,   214,    -1,   220,    -1,
-     214,   139,   220,    -1,   140,    -1,   216,    -1,   230,    -1,
-     216,   139,   230,    -1,    -1,   218,    -1,    31,   219,   137,
-      -1,   218,    31,   219,   137,    -1,   281,    -1,   219,   121,
-     281,    -1,   221,    -1,   230,    -1,   222,   140,   137,    -1,
-     227,   140,   137,    -1,   224,   140,   137,    -1,   300,   140,
-     137,    -1,   303,   140,   137,    -1,   223,   284,    -1,   239,
-     223,   284,    -1,   222,   140,   121,   139,   279,   284,    -1,
-     374,   279,   318,    -1,   377,   279,   318,    -1,   235,   377,
-     279,   318,    -1,   225,    -1,   235,   225,    -1,   239,   225,
-      -1,   239,   235,   225,    -1,   224,   140,   121,   139,   279,
-      -1,   377,   279,   114,   139,   267,   140,   115,    -1,   226,
-     279,   114,   139,   267,   140,   115,    -1,   116,   139,   269,
-     140,   117,    -1,   116,   139,   269,   140,   121,   139,   270,
-     140,   117,    -1,     3,   223,    -1,     3,   225,    -1,   227,
-     140,   121,   139,   144,    -1,     3,   233,   316,    -1,   228,
-     140,   121,   139,   316,    -1,   235,     3,   233,   316,    -1,
-     233,     3,   316,    -1,   233,     3,   235,   316,    -1,     3,
-     144,   136,   172,    -1,   229,   140,   121,   139,   144,   136,
-     172,    -1,   231,   140,   137,    -1,   228,   140,   137,    -1,
-     229,   140,   137,    -1,   247,   140,   137,    -1,   232,   316,
-     318,   284,    -1,   231,   121,   319,   316,   318,   284,    -1,
-     243,    -1,   247,    -1,   249,    -1,   290,    -1,   244,    -1,
-     248,    -1,   250,    -1,   291,    -1,    -1,   235,    -1,   236,
-      -1,   235,   236,    -1,   237,    -1,   321,    -1,    10,    -1,
-      12,    -1,    11,    -1,    14,    -1,    70,    -1,    -1,    13,
-     114,   238,   293,   115,    -1,   240,    -1,   235,   240,    -1,
-     239,   235,   240,    -1,   241,    -1,   240,   241,    -1,     5,
-      -1,     7,    -1,     4,    -1,     6,    -1,     8,    -1,     9,
-      -1,    72,    -1,    74,    -1,    16,    -1,    21,    -1,    20,
-      -1,    18,    -1,    19,    -1,    17,    -1,    22,    -1,    23,
-      -1,    15,    -1,    27,    -1,    28,    -1,    29,    -1,    26,
-      -1,    24,    -1,    25,    -1,   244,    -1,   239,   244,    -1,
-     243,   241,    -1,   243,   241,   235,    -1,   243,   241,   244,
-      -1,   245,    -1,   234,   246,   234,    -1,   242,    -1,   235,
-     242,    -1,   245,   236,    -1,   245,   242,    -1,    30,   114,
-     283,   115,    -1,    30,   114,   177,   115,    -1,    81,   114,
-     283,   115,    -1,    81,   114,   177,   115,    -1,   248,    -1,
-     239,   248,    -1,   247,   241,    -1,   247,   241,   235,    -1,
-     251,    -1,   235,   251,    -1,   248,   236,    -1,   250,    -1,
-     239,   250,    -1,   249,   241,    -1,   249,   241,   235,    -1,
-      77,    -1,   235,    77,    -1,   250,   236,    -1,   252,    -1,
-     263,    -1,   254,   119,   255,   120,    -1,   254,   281,    -1,
-      -1,   254,   281,   253,   119,   255,   120,    -1,   254,   114,
-     299,   115,   119,   255,   120,    -1,   254,   292,    -1,    33,
-     319,    -1,    34,   319,    -1,    -1,   255,   256,    -1,   257,
-     137,    -1,    43,   257,   137,    -1,   258,   137,    -1,    43,
-     258,   137,    -1,   373,    -1,   373,   281,    -1,   257,   121,
-     281,    -1,   257,   121,    -1,   233,   259,    -1,   258,   121,
-     319,   259,    -1,    -1,   261,    -1,   325,   260,    -1,   338,
-     260,    -1,   364,    -1,    -1,   261,    -1,   135,   171,    -1,
-      32,   319,    -1,   262,   119,   265,   379,   120,    -1,   262,
-     281,    -1,    -1,   262,   281,   264,   119,   265,   379,   120,
-      -1,   281,   266,    -1,   265,   121,   281,   266,    -1,    -1,
-     136,   171,    -1,    -1,   268,    -1,   270,    -1,   269,    -1,
-     269,   140,   121,   139,   270,    -1,   270,   140,   121,   139,
-     101,    -1,   269,   140,   121,   139,   101,    -1,   274,    -1,
-     270,   140,   121,   139,   274,    -1,   269,   140,   121,   139,
-     274,    -1,   269,   140,   121,   139,   270,   140,   121,   139,
-     274,    -1,   275,    -1,   270,   140,   121,   139,   275,    -1,
-      -1,   272,    -1,   273,    -1,   273,   140,   121,   139,   101,
-      -1,   277,    -1,   276,    -1,   273,   140,   121,   139,   277,
-      -1,   273,   140,   121,   139,   276,    -1,   276,    -1,   369,
-     279,   380,    -1,   377,   279,   380,    -1,   235,   377,   279,
-     380,    -1,   225,    -1,   277,    -1,   369,    -1,   377,    -1,
-     235,   377,    -1,   378,    -1,   232,   343,   380,    -1,   232,
-     347,   380,    -1,   232,    -1,   232,   358,    -1,   144,    -1,
-     278,   121,   144,    -1,   142,    -1,    77,    -1,    78,    -1,
-     143,    -1,    77,    -1,    78,    -1,   144,    -1,    77,    -1,
-      78,    -1,   373,    -1,   233,    -1,   233,   364,    -1,   373,
-      -1,   378,    -1,   233,    -1,   233,   352,    -1,    -1,   136,
-     285,    -1,   112,   285,    -1,   172,    -1,   119,   286,   379,
-     120,    -1,    -1,   285,    -1,   287,   285,    -1,   286,   121,
-     285,    -1,   286,   121,   287,   285,    -1,   288,   135,    -1,
-     281,   135,    -1,   289,    -1,   288,   289,    -1,   118,   281,
-      -1,   116,   139,   172,   140,   117,    -1,   116,   139,   317,
-     140,   117,    -1,   116,   139,   171,   101,   171,   140,   117,
-      -1,   118,   116,   139,   152,   140,   117,    -1,   291,    -1,
-     239,   291,    -1,   290,   241,    -1,   290,   241,   235,    -1,
-     292,    -1,   235,   292,    -1,   291,   236,    -1,    78,   114,
-     299,   115,    -1,   294,   380,    -1,   293,   121,   294,   380,
-      -1,    -1,   296,   281,   295,   297,    -1,   233,   343,    -1,
-      35,    -1,    37,    -1,    36,    -1,    38,    -1,    -1,   297,
-     298,    -1,   133,   281,   114,   299,   115,    -1,   133,   119,
-     139,   305,   120,    -1,   133,   114,   139,   293,   140,   115,
-     119,   139,   305,   120,   114,   299,   115,    -1,   283,    -1,
-     172,    -1,   299,   121,   283,    -1,   299,   121,   172,    -1,
-      35,   301,    -1,   240,    35,   301,    -1,   300,   121,   301,
-      -1,   302,   297,    -1,   302,   297,   136,   283,    -1,   281,
-      -1,   280,   114,   139,   293,   140,   115,    -1,    39,   281,
-     114,   139,   293,   140,   115,   119,   120,    -1,    -1,    39,
-     281,   114,   139,   293,   140,   115,   119,   304,   305,   120,
-      -1,   306,    -1,   305,   139,   306,    -1,   307,   140,   137,
-      -1,   308,   140,   137,    -1,   223,    -1,   225,    -1,   307,
-     140,   121,   139,   279,    -1,   233,   316,    -1,   308,   140,
-     121,   139,   316,    -1,    -1,   310,    -1,   312,    -1,   310,
-     139,   312,    -1,    -1,   310,    -1,   220,    -1,   314,    -1,
-     206,    -1,    -1,     5,    84,   313,   119,   311,   120,    -1,
-      43,   312,    -1,   315,    -1,   330,   181,    -1,   334,   139,
-     215,   181,    -1,   224,   181,    -1,   232,   330,   181,    -1,
-     235,   330,   181,    -1,   239,   330,   181,    -1,   239,   235,
-     330,   181,    -1,   232,   334,   139,   215,   181,    -1,   235,
-     334,   139,   215,   181,    -1,   239,   334,   139,   215,   181,
-      -1,   239,   235,   334,   139,   215,   181,    -1,   325,    -1,
-     338,    -1,   330,    -1,   171,   127,   171,    -1,    -1,    67,
-     114,   146,   115,   319,    -1,    -1,   320,    -1,   321,    -1,
-     320,   321,    -1,    42,   114,   114,   322,   115,   115,    -1,
-     323,    -1,   322,   121,   323,    -1,    -1,   324,    -1,   324,
-     114,   150,   115,    -1,    75,    -1,    77,    -1,    78,    -1,
-      10,    -1,   326,   319,    -1,   327,    -1,   328,   319,    -1,
-     329,   319,    -1,   142,    -1,   114,   326,   115,    -1,   157,
-     325,    -1,   157,   235,   325,    -1,   114,   327,   115,    -1,
-     326,   356,    -1,   114,   327,   115,   356,    -1,   114,   328,
-     115,   357,    -1,   114,   328,   115,    -1,   114,   327,   115,
-     114,   139,   271,   140,   115,    -1,   114,   329,   115,    -1,
-     331,   319,    -1,   332,    -1,   333,   319,    -1,   326,   114,
-     139,   271,   140,   115,    -1,   114,   332,   115,   114,   139,
-     271,   140,   115,    -1,   114,   331,   115,    -1,   157,   330,
-      -1,   157,   235,   330,    -1,   114,   332,   115,    -1,   114,
-     332,   115,   356,    -1,   114,   333,   115,   357,    -1,   114,
-     333,   115,    -1,   335,    -1,   336,    -1,   337,    -1,   326,
-     114,   278,   115,    -1,   114,   336,   115,   114,   278,   115,
-      -1,   114,   335,   115,    -1,   157,   334,    -1,   157,   235,
-     334,    -1,   114,   336,   115,    -1,   114,   336,   115,   356,
-      -1,   114,   337,   115,   357,    -1,   114,   337,   115,    -1,
-     339,   319,    -1,   340,    -1,   341,   319,    -1,   342,   319,
-      -1,   348,    -1,   114,   339,   115,    -1,   157,   338,    -1,
-     157,   235,   338,    -1,   114,   340,   115,    -1,   339,   356,
-      -1,   114,   340,   115,   356,    -1,   114,   341,   115,   357,
-      -1,   114,   341,   115,    -1,   339,   114,   139,   271,   140,
-     115,    -1,   114,   340,   115,   114,   139,   271,   140,   115,
-      -1,   114,   342,   115,    -1,   326,   319,    -1,   344,    -1,
-     345,   319,    -1,   346,   319,    -1,   157,   343,    -1,   157,
-     235,   343,    -1,   114,   344,   115,    -1,   326,   362,    -1,
-     114,   344,   115,   356,    -1,   114,   345,   115,   357,    -1,
-     114,   345,   115,    -1,   326,   114,   139,   271,   140,   115,
-      -1,   114,   344,   115,   114,   139,   271,   140,   115,    -1,
-     114,   346,   115,    -1,   348,   319,    -1,   349,    -1,   350,
-     319,    -1,   351,   319,    -1,    77,    -1,    78,    -1,   157,
-     347,    -1,   157,   235,   347,    -1,   114,   349,   115,    -1,
-     348,   362,    -1,   114,   349,   115,   362,    -1,   348,   114,
-     139,   271,   140,   115,    -1,   114,   349,   115,   114,   139,
-     271,   140,   115,    -1,   353,    -1,   354,   319,    -1,   355,
-     319,    -1,   157,    -1,   157,   235,    -1,   157,   352,    -1,
-     157,   235,   352,    -1,   114,   353,   115,    -1,   356,    -1,
-     114,   353,   115,   356,    -1,   114,   354,   115,   357,    -1,
-     114,   354,   115,    -1,   114,   139,   271,   140,   115,    -1,
-     114,   353,   115,   114,   139,   271,   140,   115,    -1,   114,
-     355,   115,    -1,   116,   117,    -1,   116,   117,   357,    -1,
-     357,    -1,   116,   139,   172,   140,   117,    -1,   116,   139,
-     122,   140,   117,    -1,   357,   116,   139,   172,   140,   117,
-      -1,   357,   116,   139,   122,   140,   117,    -1,   359,    -1,
-     360,   319,    -1,   361,   319,    -1,   157,    -1,   157,   235,
-      -1,   157,   358,    -1,   157,   235,   358,    -1,   114,   359,
-     115,    -1,   362,    -1,   114,   359,   115,   362,    -1,   114,
-     360,   115,   357,    -1,   114,   360,   115,    -1,   114,   139,
-     271,   140,   115,    -1,   114,   359,   115,   114,   139,   271,
-     140,   115,    -1,   114,   361,   115,    -1,   363,    -1,   363,
-     357,    -1,   357,    -1,   116,   117,    -1,   116,   139,   235,
+      43,   220,    -1,   314,    -1,    43,   314,    -1,   179,   140,
+      -1,   179,    -1,   184,   179,    -1,   178,   137,    -1,    44,
+     114,   177,   115,   179,    -1,    44,   114,   177,   115,   179,
+      45,   179,    -1,    46,   114,   177,   115,   191,    -1,    46,
+     114,   177,   115,   119,   139,   213,   192,   120,    -1,    56,
+     114,   177,   115,   191,    -1,    56,   114,   177,   115,   119,
+     139,   213,   194,   120,    -1,   171,    -1,   171,   101,   171,
+      -1,   316,    -1,   187,    -1,   188,   121,   187,    -1,    47,
+     188,   135,    -1,    48,   135,    -1,   189,    -1,   190,   189,
+      -1,   190,   179,    -1,    -1,   193,    -1,   190,   184,    -1,
+     193,   190,   184,    -1,    -1,   195,    -1,   190,   197,    -1,
+     190,   184,   196,    -1,   195,   190,   197,    -1,   195,   190,
+     184,   196,    -1,    -1,   197,    -1,    59,    -1,    59,   137,
+      -1,    50,   114,   177,   115,   179,    -1,    49,   179,    50,
+     114,   177,   115,   137,    -1,    51,   114,   139,   199,   115,
+     179,    -1,   178,   140,   137,   178,   137,   178,    -1,   220,
+     178,   137,   178,    -1,    54,   278,   137,    -1,    54,   122,
+     177,   137,    -1,    53,   137,    -1,    53,   278,   137,    -1,
+      52,   137,    -1,    52,   278,   137,    -1,    55,   178,   137,
+      -1,    64,   173,   137,    -1,    65,   173,   137,    -1,    65,
+     173,    66,   172,   137,    -1,    60,   181,   202,    -1,    60,
+     181,   204,    -1,    60,   181,   202,   204,    -1,   203,    -1,
+      61,   114,   101,   115,   181,    -1,   203,    61,   114,   101,
+     115,   181,    -1,    62,   114,   101,   115,   181,    -1,   203,
+      62,   114,   101,   115,   181,    -1,    61,   114,   139,   139,
+     205,   140,   115,   181,   140,    -1,   203,    61,   114,   139,
+     139,   205,   140,   115,   181,   140,    -1,    62,   114,   139,
+     139,   205,   140,   115,   181,   140,    -1,   203,    62,   114,
+     139,   139,   205,   140,   115,   181,   140,    -1,    63,   181,
+      -1,   233,    -1,   233,   315,    -1,   233,   363,    -1,   372,
+     144,    -1,   372,    -1,    67,   207,   114,   146,   115,   137,
+      -1,    67,   207,   114,   146,   135,   208,   115,   137,    -1,
+      67,   207,   114,   146,   135,   208,   135,   208,   115,   137,
+      -1,    67,   207,   114,   146,   135,   208,   135,   208,   135,
+     211,   115,   137,    -1,    67,   207,    54,   114,   146,   135,
+     135,   208,   135,   211,   135,   212,   115,   137,    -1,    -1,
+      11,    -1,    -1,   209,    -1,   210,    -1,   209,   121,   210,
+      -1,   146,   114,   171,   115,    -1,   116,   171,   117,   146,
+     114,   171,   115,    -1,    -1,   146,    -1,   211,   121,   146,
+      -1,   144,    -1,   212,   121,   144,    -1,   140,    -1,   214,
+      -1,   220,    -1,   214,   139,   220,    -1,   140,    -1,   216,
+      -1,   230,    -1,   216,   139,   230,    -1,    -1,   218,    -1,
+      31,   219,   137,    -1,   218,    31,   219,   137,    -1,   280,
+      -1,   219,   121,   280,    -1,   221,    -1,   230,    -1,   222,
+     140,   137,    -1,   227,   140,   137,    -1,   224,   140,   137,
+      -1,   299,   140,   137,    -1,   302,   140,   137,    -1,   223,
+     283,    -1,   239,   223,   283,    -1,   222,   140,   121,   139,
+     278,   283,    -1,   373,   278,   317,    -1,   376,   278,   317,
+      -1,   235,   376,   278,   317,    -1,   225,    -1,   235,   225,
+      -1,   239,   225,    -1,   239,   235,   225,    -1,   224,   140,
+     121,   139,   278,    -1,   376,   278,   114,   139,   266,   140,
+     115,    -1,   226,   278,   114,   139,   266,   140,   115,    -1,
+     116,   139,   268,   140,   117,    -1,   116,   139,   268,   140,
+     121,   139,   269,   140,   117,    -1,     3,   223,    -1,     3,
+     225,    -1,   227,   140,   121,   139,   144,    -1,     3,   233,
+     315,    -1,   228,   140,   121,   139,   315,    -1,   235,     3,
+     233,   315,    -1,   233,     3,   315,    -1,   233,     3,   235,
+     315,    -1,     3,   144,   136,   172,    -1,   229,   140,   121,
+     139,   144,   136,   172,    -1,   232,   231,   140,   137,    -1,
+     228,   140,   137,    -1,   229,   140,   137,    -1,   247,   140,
+     137,    -1,   315,   317,   283,    -1,   231,   121,   318,   315,
+     317,   283,    -1,   243,    -1,   247,    -1,   249,    -1,   289,
+      -1,   244,    -1,   248,    -1,   250,    -1,   290,    -1,    -1,
+     235,    -1,   236,    -1,   235,   236,    -1,   237,    -1,   320,
+      -1,    10,    -1,    12,    -1,    11,    -1,    14,    -1,    70,
+      -1,    -1,    13,   114,   238,   292,   115,    -1,   240,    -1,
+     235,   240,    -1,   239,   235,   240,    -1,   241,    -1,   240,
+     241,    -1,     5,    -1,     7,    -1,     4,    -1,     6,    -1,
+       8,    -1,     9,    -1,    72,    -1,    74,    -1,    16,    -1,
+      21,    -1,    20,    -1,    18,    -1,    19,    -1,    17,    -1,
+      22,    -1,    23,    -1,    15,    -1,    27,    -1,    28,    -1,
+      29,    -1,    26,    -1,    24,    -1,    25,    -1,   244,    -1,
+     239,   244,    -1,   243,   241,    -1,   243,   241,   235,    -1,
+     243,   241,   244,    -1,   245,    -1,   234,   246,   234,    -1,
+     242,    -1,   235,   242,    -1,   245,   236,    -1,   245,   242,
+      -1,    30,   114,   282,   115,    -1,    30,   114,   177,   115,
+      -1,    81,   114,   282,   115,    -1,    81,   114,   177,   115,
+      -1,   248,    -1,   239,   248,    -1,   247,   241,    -1,   247,
+     241,   235,    -1,   251,    -1,   235,   251,    -1,   248,   236,
+      -1,   250,    -1,   239,   250,    -1,   249,   241,    -1,   249,
+     241,   235,    -1,    77,    -1,   235,    77,    -1,   250,   236,
+      -1,   252,    -1,   262,    -1,   254,   318,   119,   255,   120,
+      -1,   254,   318,   280,    -1,    -1,   254,   318,   280,   253,
+     119,   255,   120,    -1,   254,   318,   114,   298,   115,   119,
+     255,   120,    -1,   254,   318,   291,    -1,    33,    -1,    34,
+      -1,    -1,   255,   256,    -1,   257,   137,    -1,    43,   257,
+     137,    -1,   233,   258,   137,    -1,    43,   233,   258,   137,
+      -1,   372,    -1,   372,   280,    -1,   257,   121,   280,    -1,
+     257,   121,    -1,   259,    -1,   258,   121,   318,   259,    -1,
+      -1,   261,    -1,   324,   260,    -1,   337,   260,    -1,   363,
+      -1,    -1,   261,    -1,   135,   171,    -1,    32,   318,   119,
+     264,   378,   120,    -1,    32,   318,   280,    -1,    -1,    32,
+     318,   280,   263,   119,   264,   378,   120,    -1,   280,   265,
+      -1,   264,   121,   280,   265,    -1,    -1,   136,   171,    -1,
+      -1,   267,    -1,   269,    -1,   268,    -1,   268,   140,   121,
+     139,   269,    -1,   269,   140,   121,   139,   101,    -1,   268,
+     140,   121,   139,   101,    -1,   273,    -1,   269,   140,   121,
+     139,   273,    -1,   268,   140,   121,   139,   273,    -1,   268,
+     140,   121,   139,   269,   140,   121,   139,   273,    -1,   274,
+      -1,   269,   140,   121,   139,   274,    -1,    -1,   271,    -1,
+     272,    -1,   272,   140,   121,   139,   101,    -1,   276,    -1,
+     275,    -1,   272,   140,   121,   139,   276,    -1,   272,   140,
+     121,   139,   275,    -1,   275,    -1,   368,   278,   379,    -1,
+     376,   278,   379,    -1,   235,   376,   278,   379,    -1,   225,
+      -1,   276,    -1,   368,    -1,   376,    -1,   235,   376,    -1,
+     377,    -1,   232,   342,   379,    -1,   232,   346,   379,    -1,
+     232,    -1,   232,   357,    -1,   144,    -1,   277,   121,   144,
+      -1,   142,    -1,    77,    -1,    78,    -1,   143,    -1,    77,
+      -1,    78,    -1,   144,    -1,    77,    -1,    78,    -1,   372,
+      -1,   233,    -1,   233,   351,    -1,   281,    -1,   377,    -1,
+      -1,   136,   284,    -1,   112,   284,    -1,   172,    -1,   119,
+     285,   378,   120,    -1,    -1,   284,    -1,   286,   284,    -1,
+     285,   121,   284,    -1,   285,   121,   286,   284,    -1,   287,
+     135,    -1,   280,   135,    -1,   288,    -1,   287,   288,    -1,
+     118,   280,    -1,   116,   139,   172,   140,   117,    -1,   116,
+     139,   316,   140,   117,    -1,   116,   139,   171,   101,   171,
+     140,   117,    -1,   118,   116,   139,   152,   140,   117,    -1,
+     290,    -1,   239,   290,    -1,   289,   241,    -1,   289,   241,
+     235,    -1,   291,    -1,   235,   291,    -1,   290,   236,    -1,
+      78,   114,   298,   115,    -1,   293,   379,    -1,   292,   121,
+     293,   379,    -1,    -1,   295,   280,   294,   296,    -1,   233,
+     342,    -1,    35,    -1,    37,    -1,    36,    -1,    38,    -1,
+      -1,   296,   297,    -1,   133,   280,   114,   298,   115,    -1,
+     133,   119,   139,   304,   120,    -1,   133,   114,   139,   292,
+     140,   115,   119,   139,   304,   120,   114,   298,   115,    -1,
+     282,    -1,   172,    -1,   298,   121,   282,    -1,   298,   121,
+     172,    -1,    35,   300,    -1,   240,    35,   300,    -1,   299,
+     121,   300,    -1,   301,   296,    -1,   301,   296,   136,   282,
+      -1,   280,    -1,   279,   114,   139,   292,   140,   115,    -1,
+      39,   280,   114,   139,   292,   140,   115,   119,   120,    -1,
+      -1,    39,   280,   114,   139,   292,   140,   115,   119,   303,
+     304,   120,    -1,   305,    -1,   304,   139,   305,    -1,   306,
+     140,   137,    -1,   307,   140,   137,    -1,   223,    -1,   225,
+      -1,   306,   140,   121,   139,   278,    -1,   233,   315,    -1,
+     307,   140,   121,   139,   315,    -1,    -1,   309,    -1,   311,
+      -1,   309,   139,   311,    -1,    -1,   309,    -1,   220,    -1,
+     313,    -1,   206,    -1,    -1,     5,    84,   312,   119,   310,
+     120,    -1,    43,   311,    -1,   314,    -1,   329,   181,    -1,
+     333,   139,   215,   181,    -1,   224,   181,    -1,   232,   329,
+     181,    -1,   235,   329,   181,    -1,   239,   329,   181,    -1,
+     239,   235,   329,   181,    -1,   232,   333,   139,   215,   181,
+      -1,   235,   333,   139,   215,   181,    -1,   239,   333,   139,
+     215,   181,    -1,   239,   235,   333,   139,   215,   181,    -1,
+     324,    -1,   337,    -1,   329,    -1,   171,   127,   171,    -1,
+      -1,    67,   114,   146,   115,   318,    -1,    -1,   319,    -1,
+     320,    -1,   319,   320,    -1,    42,   114,   114,   321,   115,
+     115,    -1,   322,    -1,   321,   121,   322,    -1,    -1,   323,
+      -1,   323,   114,   150,   115,    -1,    75,    -1,    77,    -1,
+      78,    -1,    10,    -1,   325,   318,    -1,   326,    -1,   327,
+     318,    -1,   328,   318,    -1,   142,    -1,   114,   325,   115,
+      -1,   157,   324,    -1,   157,   235,   324,    -1,   114,   326,
+     115,   318,    -1,   325,   355,    -1,   114,   326,   115,   355,
+      -1,   114,   327,   115,   356,    -1,   114,   327,   115,    -1,
+     114,   326,   115,   114,   139,   270,   140,   115,    -1,   114,
+     328,   115,    -1,   330,   318,    -1,   331,    -1,   332,   318,
+      -1,   325,   114,   139,   270,   140,   115,    -1,   114,   331,
+     115,   114,   139,   270,   140,   115,    -1,   114,   330,   115,
+      -1,   157,   329,    -1,   157,   235,   329,    -1,   114,   331,
+     115,    -1,   114,   331,   115,   355,    -1,   114,   332,   115,
+     356,    -1,   114,   332,   115,    -1,   334,    -1,   335,    -1,
+     336,    -1,   325,   114,   277,   115,    -1,   114,   335,   115,
+     114,   139,   270,   140,   115,    -1,   114,   334,   115,    -1,
+     157,   333,    -1,   157,   235,   333,    -1,   114,   335,   115,
+      -1,   114,   335,   115,   355,    -1,   114,   336,   115,   356,
+      -1,   114,   336,   115,    -1,   338,   318,    -1,   339,    -1,
+     340,   318,    -1,   341,   318,    -1,   347,    -1,   114,   338,
+     115,    -1,   157,   337,    -1,   157,   235,   337,    -1,   114,
+     339,   115,   318,    -1,   338,   355,    -1,   114,   339,   115,
+     355,    -1,   114,   340,   115,   356,    -1,   114,   340,   115,
+      -1,   338,   114,   139,   270,   140,   115,    -1,   114,   339,
+     115,   114,   139,   270,   140,   115,    -1,   114,   341,   115,
+      -1,   325,   318,    -1,   343,    -1,   344,   318,    -1,   345,
+     318,    -1,   157,   342,    -1,   157,   235,   342,    -1,   114,
+     343,   115,   318,    -1,   325,   361,    -1,   114,   343,   115,
+     355,    -1,   114,   344,   115,   356,    -1,   114,   344,   115,
+      -1,   325,   114,   139,   270,   140,   115,    -1,   114,   343,
+     115,   114,   139,   270,   140,   115,    -1,   114,   345,   115,
+      -1,   347,   318,    -1,   348,    -1,   349,   318,    -1,   350,
+     318,    -1,    77,    -1,    78,    -1,   157,   346,    -1,   157,
+     235,   346,    -1,   114,   348,   115,   318,    -1,   347,   361,
+      -1,   114,   348,   115,   361,    -1,   347,   114,   139,   270,
+     140,   115,    -1,   114,   348,   115,   114,   139,   270,   140,
+     115,    -1,   352,    -1,   353,   318,    -1,   354,   318,    -1,
+     157,    -1,   157,   235,    -1,   157,   351,    -1,   157,   235,
+     351,    -1,   114,   352,   115,   318,    -1,   355,    -1,   114,
+     352,   115,   355,    -1,   114,   353,   115,   356,    -1,   114,
+     353,   115,    -1,   114,   139,   270,   140,   115,    -1,   114,
+     352,   115,   114,   139,   270,   140,   115,    -1,   114,   354,
+     115,    -1,   116,   117,    -1,   116,   117,   356,    -1,   356,
+      -1,   116,   139,   172,   140,   117,    -1,   116,   139,   122,
+     140,   117,    -1,   356,   116,   139,   172,   140,   117,    -1,
+     356,   116,   139,   122,   140,   117,    -1,   358,    -1,   359,
+     318,    -1,   360,   318,    -1,   157,    -1,   157,   235,    -1,
+     157,   357,    -1,   157,   235,   357,    -1,   114,   358,   115,
+     318,    -1,   361,    -1,   114,   358,   115,   361,    -1,   114,
+     359,   115,   356,    -1,   114,   359,   115,    -1,   114,   139,
+     270,   140,   115,    -1,   114,   358,   115,   114,   139,   270,
+     140,   115,    -1,   114,   360,   115,    -1,   362,    -1,   362,
+     356,    -1,   356,    -1,   116,   117,    -1,   116,   139,   235,
      122,   140,   117,    -1,   116,   139,   235,   140,   117,    -1,
      116,   139,   235,   172,   140,   117,    -1,   116,   139,     7,
      234,   172,   140,   117,    -1,   116,   139,   235,     7,   172,
-     140,   117,    -1,   365,    -1,   366,   319,    -1,   367,   319,
-      -1,   157,    -1,   157,   235,    -1,   157,   364,    -1,   157,
-     235,   364,    -1,   114,   365,   115,    -1,   356,    -1,   114,
-     365,   115,   356,    -1,   114,   366,   115,   357,    -1,   114,
-     366,   115,    -1,   114,   365,   115,   114,   139,   271,   140,
-     115,    -1,   114,   367,   115,    -1,   369,    -1,   377,    -1,
-     235,   377,    -1,   370,    -1,   371,    -1,   157,   233,    -1,
-     235,   157,   233,    -1,   157,   378,    -1,   235,   157,   378,
-      -1,   157,   368,    -1,   235,   157,   368,    -1,   116,   117,
-     233,    -1,   372,   233,    -1,   116,   117,   357,   233,    -1,
-     372,   357,   233,    -1,   357,   233,    -1,   116,   117,   370,
-      -1,   372,   370,    -1,   116,   117,   357,   370,    -1,   372,
-     357,   370,    -1,   357,   370,    -1,   116,   139,   235,   122,
-     140,   117,    -1,   116,   139,   235,   172,   140,   117,    -1,
-     116,   139,   239,   172,   140,   117,    -1,   116,   139,   239,
-     235,   172,   140,   117,    -1,   377,    -1,   235,   377,    -1,
-     374,    -1,   375,    -1,   376,    -1,   157,   233,    -1,   235,
-     157,   233,    -1,   157,   378,    -1,   235,   157,   378,    -1,
-     157,   373,    -1,   235,   157,   373,    -1,   116,   117,   233,
-      -1,   116,   117,   357,   233,    -1,   357,   233,    -1,   116,
-     117,   375,    -1,   116,   117,   357,   375,    -1,   357,   375,
-      -1,   116,   139,   270,   140,   117,    -1,   377,   114,   139,
-     267,   140,   115,    -1,   226,   114,   139,   267,   140,   115,
-      -1,    -1,   121,    -1,    -1,   136,   172,    -1
+     140,   117,    -1,   364,    -1,   365,   318,    -1,   366,   318,
+      -1,   157,    -1,   157,   235,    -1,   157,   363,    -1,   157,
+     235,   363,    -1,   114,   364,   115,   318,    -1,   355,    -1,
+     114,   364,   115,   355,    -1,   114,   365,   115,   356,    -1,
+     114,   365,   115,    -1,   114,   364,   115,   114,   139,   270,
+     140,   115,    -1,   114,   366,   115,    -1,   368,    -1,   376,
+      -1,   235,   376,    -1,   369,    -1,   370,    -1,   157,   233,
+      -1,   235,   157,   233,    -1,   157,   377,    -1,   235,   157,
+     377,    -1,   157,   367,    -1,   235,   157,   367,    -1,   116,
+     117,   233,    -1,   371,   233,    -1,   116,   117,   356,   233,
+      -1,   371,   356,   233,    -1,   356,   233,    -1,   116,   117,
+     369,    -1,   371,   369,    -1,   116,   117,   356,   369,    -1,
+     371,   356,   369,    -1,   356,   369,    -1,   116,   139,   235,
+     122,   140,   117,    -1,   116,   139,   235,   172,   140,   117,
+      -1,   116,   139,   239,   172,   140,   117,    -1,   116,   139,
+     239,   235,   172,   140,   117,    -1,   376,    -1,   235,   376,
+      -1,   373,    -1,   374,    -1,   375,    -1,   157,   233,    -1,
+     235,   157,   233,    -1,   157,   377,    -1,   235,   157,   377,
+      -1,   157,   372,    -1,   235,   157,   372,    -1,   116,   117,
+     233,    -1,   116,   117,   356,   233,    -1,   356,   233,    -1,
+     116,   117,   374,    -1,   116,   117,   356,   374,    -1,   356,
+     374,    -1,   116,   139,   269,   140,   117,    -1,   376,   114,
+     139,   266,   140,   115,    -1,   226,   114,   139,   266,   140,
+     115,    -1,    -1,   121,    -1,    -1,   136,   172,    -1
 };
 
@@ -1032,80 +1052,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   305,   305,   309,   316,   317,   318,   319,   320,   324,
-     325,   326,   330,   331,   335,   336,   340,   341,   345,   349,
-     350,   361,   363,   365,   366,   368,   373,   374,   380,   382,
-     384,   386,   388,   390,   392,   394,   396,   398,   407,   408,
-     414,   415,   419,   420,   424,   425,   427,   429,   431,   433,
-     435,   440,   442,   444,   456,   457,   465,   468,   470,   472,
-     477,   490,   492,   494,   496,   498,   500,   502,   504,   506,
-     508,   510,   517,   518,   524,   525,   526,   527,   531,   532,
-     539,   540,   542,   544,   549,   550,   552,   557,   558,   560,
-     565,   566,   568,   570,   572,   577,   578,   580,   585,   586,
-     591,   592,   597,   598,   603,   604,   609,   610,   615,   616,
-     619,   626,   631,   632,   640,   641,   645,   646,   647,   648,
-     649,   650,   651,   652,   653,   654,   655,   656,   666,   668,
-     673,   674,   679,   680,   686,   687,   693,   694,   695,   696,
-     697,   698,   699,   700,   701,   711,   718,   720,   730,   731,
-     736,   738,   744,   746,   750,   751,   756,   761,   764,   766,
-     768,   778,   780,   791,   792,   794,   798,   800,   804,   805,
-     810,   811,   815,   820,   821,   825,   827,   833,   834,   838,
-     840,   842,   844,   850,   851,   855,   857,   862,   864,   866,
-     871,   873,   878,   880,   884,   887,   891,   894,   898,   900,
-     902,   904,   909,   911,   913,   918,   920,   922,   924,   926,
-     931,   933,   935,   937,   942,   954,   955,   960,   962,   967,
-     971,   973,   975,   977,   979,   985,   986,   992,   993,   997,
-     998,  1003,  1005,  1011,  1012,  1014,  1020,  1025,  1035,  1037,
-    1041,  1042,  1047,  1049,  1053,  1054,  1058,  1060,  1064,  1065,
-    1069,  1070,  1074,  1075,  1090,  1091,  1092,  1093,  1094,  1098,
-    1103,  1110,  1120,  1125,  1130,  1138,  1143,  1148,  1153,  1158,
-    1188,  1193,  1200,  1202,  1209,  1214,  1219,  1230,  1235,  1240,
-    1245,  1250,  1259,  1264,  1272,  1273,  1274,  1275,  1281,  1286,
-    1294,  1295,  1296,  1297,  1301,  1302,  1303,  1304,  1309,  1310,
-    1319,  1320,  1325,  1326,  1330,  1332,  1334,  1336,  1338,  1341,
-    1340,  1352,  1353,  1355,  1365,  1366,  1371,  1373,  1375,  1377,
-    1379,  1382,  1384,  1387,  1392,  1394,  1396,  1398,  1400,  1402,
-    1404,  1406,  1408,  1410,  1412,  1414,  1416,  1418,  1420,  1426,
-    1427,  1429,  1431,  1433,  1438,  1439,  1445,  1446,  1448,  1450,
-    1455,  1457,  1459,  1461,  1466,  1467,  1469,  1471,  1476,  1477,
-    1479,  1484,  1485,  1487,  1489,  1494,  1496,  1498,  1503,  1504,
-    1508,  1510,  1516,  1515,  1519,  1521,  1526,  1528,  1534,  1535,
-    1540,  1541,  1543,  1544,  1553,  1554,  1556,  1558,  1563,  1565,
-    1571,  1572,  1574,  1577,  1580,  1585,  1586,  1591,  1596,  1600,
-    1602,  1608,  1607,  1614,  1616,  1622,  1623,  1631,  1632,  1636,
-    1637,  1638,  1640,  1642,  1649,  1650,  1652,  1654,  1659,  1660,
-    1666,  1667,  1671,  1672,  1677,  1678,  1679,  1681,  1689,  1690,
-    1692,  1695,  1697,  1701,  1702,  1703,  1705,  1707,  1711,  1716,
-    1724,  1725,  1734,  1736,  1741,  1742,  1743,  1747,  1748,  1749,
-    1753,  1754,  1755,  1759,  1760,  1761,  1766,  1767,  1768,  1769,
-    1775,  1776,  1778,  1783,  1784,  1789,  1790,  1791,  1792,  1793,
-    1808,  1809,  1814,  1815,  1821,  1823,  1826,  1828,  1830,  1853,
-    1854,  1856,  1858,  1863,  1864,  1866,  1871,  1876,  1877,  1883,
-    1882,  1886,  1890,  1892,  1894,  1896,  1902,  1903,  1908,  1913,
-    1915,  1920,  1922,  1923,  1925,  1930,  1932,  1934,  1939,  1941,
-    1946,  1951,  1959,  1965,  1964,  1978,  1979,  1984,  1985,  1989,
-    1994,  1999,  2007,  2012,  2023,  2024,  2029,  2030,  2036,  2037,
-    2041,  2042,  2043,  2046,  2045,  2056,  2065,  2071,  2077,  2086,
-    2092,  2098,  2104,  2110,  2118,  2124,  2132,  2138,  2147,  2148,
-    2149,  2153,  2159,  2160,  2166,  2167,  2171,  2172,  2177,  2182,
-    2183,  2189,  2190,  2192,  2197,  2198,  2199,  2200,  2235,  2237,
-    2238,  2240,  2245,  2250,  2255,  2257,  2259,  2264,  2266,  2268,
-    2270,  2275,  2277,  2286,  2288,  2289,  2294,  2296,  2298,  2303,
-    2305,  2307,  2312,  2314,  2316,  2325,  2326,  2327,  2331,  2333,
-    2335,  2340,  2342,  2344,  2349,  2351,  2353,  2368,  2370,  2371,
-    2373,  2378,  2379,  2384,  2386,  2388,  2393,  2395,  2397,  2399,
-    2404,  2406,  2408,  2418,  2420,  2421,  2423,  2428,  2430,  2432,
-    2437,  2439,  2441,  2443,  2448,  2450,  2452,  2483,  2485,  2486,
-    2488,  2493,  2498,  2506,  2508,  2510,  2515,  2517,  2522,  2524,
-    2538,  2539,  2541,  2546,  2548,  2550,  2552,  2554,  2559,  2560,
-    2562,  2564,  2569,  2571,  2573,  2579,  2581,  2583,  2587,  2589,
-    2591,  2593,  2607,  2608,  2610,  2615,  2617,  2619,  2621,  2623,
-    2628,  2629,  2631,  2633,  2638,  2640,  2642,  2648,  2649,  2651,
-    2660,  2663,  2665,  2668,  2670,  2672,  2685,  2686,  2688,  2693,
-    2695,  2697,  2699,  2701,  2706,  2707,  2709,  2711,  2716,  2718,
-    2726,  2727,  2728,  2733,  2734,  2738,  2740,  2742,  2744,  2746,
-    2748,  2755,  2757,  2759,  2761,  2763,  2766,  2768,  2770,  2772,
-    2774,  2779,  2781,  2783,  2788,  2814,  2815,  2817,  2821,  2822,
-    2826,  2828,  2830,  2832,  2834,  2836,  2843,  2845,  2847,  2849,
-    2851,  2853,  2858,  2865,  2867,  2885,  2887,  2892,  2893
+       0,   326,   326,   330,   337,   338,   339,   340,   341,   345,
+     346,   347,   351,   352,   356,   357,   361,   362,   366,   370,
+     371,   382,   384,   386,   387,   389,   394,   395,   401,   403,
+     405,   407,   409,   411,   413,   415,   417,   419,   428,   429,
+     435,   436,   440,   441,   445,   446,   448,   450,   452,   454,
+     456,   461,   463,   465,   477,   478,   486,   489,   491,   493,
+     498,   511,   513,   515,   517,   519,   521,   523,   525,   527,
+     529,   531,   538,   539,   545,   546,   547,   548,   552,   553,
+     560,   561,   563,   565,   570,   571,   573,   578,   579,   581,
+     586,   587,   589,   591,   593,   598,   599,   601,   606,   607,
+     612,   613,   618,   619,   624,   625,   630,   631,   636,   637,
+     640,   647,   652,   653,   661,   662,   666,   667,   668,   669,
+     670,   671,   672,   673,   674,   675,   676,   677,   687,   689,
+     694,   695,   700,   701,   707,   708,   714,   715,   716,   717,
+     718,   719,   720,   721,   722,   732,   739,   741,   752,   753,
+     758,   760,   765,   767,   772,   776,   777,   782,   787,   790,
+     792,   794,   804,   806,   817,   818,   820,   824,   826,   830,
+     831,   836,   837,   841,   846,   847,   851,   853,   859,   860,
+     864,   866,   868,   870,   876,   877,   881,   883,   888,   890,
+     892,   897,   899,   904,   906,   910,   913,   917,   920,   924,
+     926,   928,   930,   935,   937,   939,   944,   946,   948,   950,
+     952,   957,   959,   961,   963,   968,   980,   981,   986,   988,
+     993,   997,   999,  1001,  1003,  1005,  1011,  1012,  1018,  1019,
+    1023,  1024,  1029,  1031,  1037,  1038,  1040,  1046,  1051,  1061,
+    1063,  1067,  1068,  1073,  1075,  1079,  1080,  1084,  1086,  1090,
+    1091,  1095,  1096,  1100,  1101,  1116,  1117,  1118,  1119,  1120,
+    1124,  1129,  1136,  1146,  1151,  1156,  1164,  1169,  1174,  1179,
+    1184,  1214,  1219,  1226,  1228,  1235,  1240,  1245,  1256,  1261,
+    1266,  1271,  1276,  1285,  1290,  1320,  1324,  1325,  1326,  1332,
+    1337,  1345,  1346,  1347,  1348,  1352,  1353,  1354,  1355,  1360,
+    1361,  1370,  1371,  1376,  1377,  1381,  1383,  1385,  1387,  1389,
+    1392,  1391,  1403,  1404,  1406,  1416,  1417,  1422,  1424,  1426,
+    1428,  1430,  1433,  1435,  1438,  1443,  1445,  1447,  1449,  1451,
+    1453,  1455,  1457,  1459,  1461,  1463,  1465,  1467,  1469,  1471,
+    1477,  1478,  1480,  1482,  1484,  1489,  1490,  1496,  1497,  1499,
+    1501,  1506,  1508,  1510,  1512,  1517,  1518,  1520,  1522,  1527,
+    1528,  1530,  1535,  1536,  1538,  1540,  1545,  1547,  1549,  1554,
+    1555,  1559,  1561,  1567,  1566,  1570,  1572,  1577,  1579,  1585,
+    1586,  1591,  1592,  1597,  1600,  1608,  1609,  1611,  1613,  1618,
+    1619,  1625,  1626,  1628,  1631,  1634,  1639,  1640,  1645,  1650,
+    1652,  1658,  1657,  1664,  1666,  1672,  1673,  1681,  1682,  1686,
+    1687,  1688,  1690,  1692,  1699,  1700,  1702,  1704,  1709,  1710,
+    1716,  1717,  1721,  1722,  1727,  1728,  1729,  1731,  1739,  1740,
+    1742,  1745,  1747,  1751,  1752,  1753,  1755,  1757,  1761,  1766,
+    1774,  1775,  1784,  1786,  1791,  1792,  1793,  1797,  1798,  1799,
+    1803,  1804,  1805,  1809,  1810,  1811,  1816,  1817,  1822,  1823,
+    1825,  1830,  1831,  1836,  1837,  1838,  1839,  1840,  1855,  1856,
+    1861,  1862,  1868,  1870,  1873,  1875,  1877,  1900,  1901,  1903,
+    1905,  1910,  1911,  1913,  1918,  1923,  1924,  1930,  1929,  1933,
+    1937,  1939,  1941,  1943,  1949,  1950,  1955,  1960,  1962,  1967,
+    1969,  1970,  1972,  1977,  1979,  1981,  1986,  1988,  1993,  1998,
+    2006,  2012,  2011,  2025,  2026,  2031,  2032,  2036,  2041,  2046,
+    2054,  2059,  2070,  2071,  2076,  2077,  2083,  2084,  2088,  2089,
+    2090,  2093,  2092,  2103,  2111,  2117,  2123,  2132,  2138,  2144,
+    2150,  2156,  2164,  2170,  2178,  2184,  2193,  2194,  2195,  2199,
+    2205,  2206,  2216,  2217,  2221,  2222,  2227,  2232,  2233,  2239,
+    2240,  2242,  2247,  2248,  2249,  2250,  2285,  2287,  2288,  2290,
+    2295,  2300,  2305,  2307,  2309,  2314,  2316,  2318,  2320,  2325,
+    2327,  2336,  2338,  2339,  2344,  2346,  2348,  2353,  2355,  2357,
+    2362,  2364,  2366,  2378,  2379,  2380,  2384,  2386,  2388,  2393,
+    2395,  2397,  2402,  2404,  2406,  2421,  2423,  2424,  2426,  2431,
+    2432,  2437,  2439,  2441,  2446,  2448,  2450,  2452,  2457,  2459,
+    2461,  2471,  2473,  2474,  2476,  2481,  2483,  2485,  2490,  2492,
+    2494,  2496,  2501,  2503,  2505,  2518,  2520,  2521,  2523,  2528,
+    2533,  2541,  2543,  2545,  2550,  2552,  2557,  2559,  2576,  2577,
+    2579,  2584,  2586,  2588,  2590,  2592,  2597,  2598,  2600,  2602,
+    2607,  2609,  2611,  2617,  2619,  2621,  2625,  2627,  2629,  2631,
+    2665,  2666,  2668,  2673,  2675,  2677,  2679,  2681,  2686,  2687,
+    2689,  2691,  2696,  2698,  2700,  2706,  2707,  2709,  2718,  2721,
+    2723,  2726,  2728,  2730,  2744,  2745,  2747,  2752,  2754,  2756,
+    2758,  2760,  2765,  2766,  2768,  2770,  2775,  2777,  2785,  2786,
+    2787,  2792,  2793,  2797,  2799,  2801,  2803,  2805,  2807,  2814,
+    2816,  2818,  2820,  2822,  2825,  2827,  2829,  2831,  2833,  2838,
+    2840,  2842,  2847,  2873,  2874,  2876,  2880,  2881,  2885,  2887,
+    2889,  2891,  2893,  2895,  2902,  2904,  2906,  2908,  2910,  2912,
+    2917,  2924,  2926,  2944,  2946,  2951,  2952
 };
 #endif
@@ -1161,11 +1181,11 @@
   "asm_volatile_opt", "asm_operands_opt", "asm_operands_list",
   "asm_operand", "asm_clobbers_list_opt", "label_list",
-  "declaration_list_opt", "declaration_list", "old_declaration_list_opt",
-  "old_declaration_list", "local_label_declaration_opt",
+  "declaration_list_opt", "declaration_list", "KR_declaration_list_opt",
+  "KR_declaration_list", "local_label_declaration_opt",
   "local_label_declaration_list", "local_label_list", "declaration",
-  "new_declaration", "new_variable_declaration", "new_variable_specifier",
-  "new_function_declaration", "new_function_specifier",
-  "new_function_return", "new_typedef_declaration", "typedef_declaration",
-  "typedef_expression", "old_declaration", "declaring_list",
+  "cfa_declaration", "cfa_variable_declaration", "cfa_variable_specifier",
+  "cfa_function_declaration", "cfa_function_specifier",
+  "cfa_function_return", "cfa_typedef_declaration", "typedef_declaration",
+  "typedef_expression", "c_declaration", "declaring_list",
   "declaration_specifier", "type_specifier", "type_qualifier_list_opt",
   "type_qualifier_list", "type_qualifier", "type_qualifier_name", "$@1",
@@ -1174,24 +1194,24 @@
   "direct_type_name", "indirect_type_name", "sue_declaration_specifier",
   "sue_type_specifier", "typedef_declaration_specifier",
-  "typedef_type_specifier", "elaborated_type_name", "aggregate_name",
-  "$@2", "aggregate_key", "field_declaration_list", "field_declaration",
-  "new_field_declaring_list", "field_declaring_list", "field_declarator",
-  "bit_subrange_size_opt", "bit_subrange_size", "enum_key", "enum_name",
-  "$@3", "enumerator_list", "enumerator_value_opt",
-  "new_parameter_type_list_opt", "new_parameter_type_list",
-  "new_parameter_list", "new_abstract_parameter_list",
-  "parameter_type_list_opt", "parameter_type_list", "parameter_list",
-  "new_parameter_declaration", "new_abstract_parameter_declaration",
-  "parameter_declaration", "abstract_parameter_declaration",
-  "identifier_list", "identifier_or_type_name",
-  "no_01_identifier_or_type_name", "no_attr_identifier_or_type_name",
-  "type_name_no_function", "type_name", "initializer_opt", "initializer",
-  "initializer_list", "designation", "designator_list", "designator",
-  "typegen_declaration_specifier", "typegen_type_specifier",
-  "typegen_name", "type_parameter_list", "type_parameter", "$@4",
-  "type_class", "assertion_list_opt", "assertion", "type_name_list",
-  "type_declaring_list", "type_declarator", "type_declarator_name",
-  "trait_specifier", "$@5", "trait_declaration_list", "trait_declaration",
-  "new_trait_declaring_list", "trait_declaring_list", "translation_unit",
+  "typedef_type_specifier", "elaborated_type", "aggregate_type", "$@2",
+  "aggregate_key", "field_declaration_list", "field_declaration",
+  "cfa_field_declaring_list", "field_declaring_list", "field_declarator",
+  "bit_subrange_size_opt", "bit_subrange_size", "enum_type", "$@3",
+  "enumerator_list", "enumerator_value_opt", "cfa_parameter_type_list_opt",
+  "cfa_parameter_type_list", "cfa_parameter_list",
+  "cfa_abstract_parameter_list", "parameter_type_list_opt",
+  "parameter_type_list", "parameter_list", "cfa_parameter_declaration",
+  "cfa_abstract_parameter_declaration", "parameter_declaration",
+  "abstract_parameter_declaration", "identifier_list",
+  "identifier_or_type_name", "no_01_identifier_or_type_name",
+  "no_attr_identifier_or_type_name", "type_name_no_function", "type_name",
+  "initializer_opt", "initializer", "initializer_list", "designation",
+  "designator_list", "designator", "typegen_declaration_specifier",
+  "typegen_type_specifier", "typegen_name", "type_parameter_list",
+  "type_parameter", "$@4", "type_class", "assertion_list_opt", "assertion",
+  "type_name_list", "type_declaring_list", "type_declarator",
+  "type_declarator_name", "trait_specifier", "$@5",
+  "trait_declaration_list", "trait_declaration",
+  "cfa_trait_declaring_list", "trait_declaring_list", "translation_unit",
   "external_definition_list", "external_definition_list_opt",
   "external_definition", "$@6", "external_function_definition",
@@ -1202,6 +1222,6 @@
   "variable_array", "variable_function", "function_declarator",
   "function_no_ptr", "function_ptr", "function_array",
-  "old_function_declarator", "old_function_no_ptr", "old_function_ptr",
-  "old_function_array", "variable_type_redeclarator", "paren_type",
+  "KR_function_declarator", "KR_function_no_ptr", "KR_function_ptr",
+  "KR_function_array", "variable_type_redeclarator", "paren_type",
   "type_ptr", "type_array", "type_function",
   "identifier_parameter_declarator", "identifier_parameter_ptr",
@@ -1216,10 +1236,10 @@
   "variable_abstract_ptr", "variable_abstract_array",
   "variable_abstract_function",
-  "new_identifier_parameter_declarator_tuple",
-  "new_identifier_parameter_declarator_no_tuple",
-  "new_identifier_parameter_ptr", "new_identifier_parameter_array",
-  "new_array_parameter_1st_dimension", "new_abstract_declarator_tuple",
-  "new_abstract_declarator_no_tuple", "new_abstract_ptr",
-  "new_abstract_array", "new_abstract_tuple", "new_abstract_function",
+  "cfa_identifier_parameter_declarator_tuple",
+  "cfa_identifier_parameter_declarator_no_tuple",
+  "cfa_identifier_parameter_ptr", "cfa_identifier_parameter_array",
+  "cfa_array_parameter_1st_dimension", "cfa_abstract_declarator_tuple",
+  "cfa_abstract_declarator_no_tuple", "cfa_abstract_ptr",
+  "cfa_abstract_array", "cfa_abstract_tuple", "cfa_abstract_function",
   "comma_opt", "assignment_opt", 0
 };
@@ -1266,65 +1286,65 @@
      176,   176,   177,   177,   178,   178,   179,   179,   179,   179,
      179,   179,   179,   179,   179,   180,   181,   181,   182,   182,
-     183,   183,   183,   183,   184,   184,   185,   186,   186,   186,
-     186,   186,   186,   187,   187,   187,   188,   188,   189,   189,
-     190,   190,   191,   192,   192,   193,   193,   194,   194,   195,
-     195,   195,   195,   196,   196,   197,   197,   198,   198,   198,
-     199,   199,   200,   200,   200,   200,   200,   200,   200,   200,
-     200,   200,   201,   201,   201,   202,   202,   202,   202,   202,
-     203,   203,   203,   203,   204,   205,   205,   205,   205,   205,
-     206,   206,   206,   206,   206,   207,   207,   208,   208,   209,
-     209,   210,   210,   211,   211,   211,   212,   212,   213,   213,
-     214,   214,   215,   215,   216,   216,   217,   217,   218,   218,
-     219,   219,   220,   220,   221,   221,   221,   221,   221,   222,
-     222,   222,   223,   223,   223,   224,   224,   224,   224,   224,
-     225,   225,   226,   226,   227,   227,   227,   228,   228,   228,
-     228,   228,   229,   229,   230,   230,   230,   230,   231,   231,
-     232,   232,   232,   232,   233,   233,   233,   233,   234,   234,
-     235,   235,   236,   236,   237,   237,   237,   237,   237,   238,
-     237,   239,   239,   239,   240,   240,   241,   241,   241,   241,
-     241,   241,   241,   241,   242,   242,   242,   242,   242,   242,
-     242,   242,   242,   242,   242,   242,   242,   242,   242,   243,
-     243,   243,   243,   243,   244,   244,   245,   245,   245,   245,
-     246,   246,   246,   246,   247,   247,   247,   247,   248,   248,
-     248,   249,   249,   249,   249,   250,   250,   250,   251,   251,
-     252,   252,   253,   252,   252,   252,   254,   254,   255,   255,
-     256,   256,   256,   256,   257,   257,   257,   257,   258,   258,
-     259,   259,   259,   259,   259,   260,   260,   261,   262,   263,
-     263,   264,   263,   265,   265,   266,   266,   267,   267,   268,
-     268,   268,   268,   268,   269,   269,   269,   269,   270,   270,
-     271,   271,   272,   272,   273,   273,   273,   273,   274,   274,
-     274,   274,   274,   275,   275,   275,   275,   275,   276,   276,
-     277,   277,   278,   278,   279,   279,   279,   280,   280,   280,
-     281,   281,   281,   282,   282,   282,   283,   283,   283,   283,
-     284,   284,   284,   285,   285,   286,   286,   286,   286,   286,
-     287,   287,   288,   288,   289,   289,   289,   289,   289,   290,
-     290,   290,   290,   291,   291,   291,   292,   293,   293,   295,
-     294,   294,   296,   296,   296,   296,   297,   297,   298,   298,
-     298,   299,   299,   299,   299,   300,   300,   300,   301,   301,
-     302,   302,   303,   304,   303,   305,   305,   306,   306,   307,
+     183,   183,   183,   183,   183,   184,   184,   185,   186,   186,
+     186,   186,   186,   186,   187,   187,   187,   188,   188,   189,
+     189,   190,   190,   191,   192,   192,   193,   193,   194,   194,
+     195,   195,   195,   195,   196,   196,   197,   197,   198,   198,
+     198,   199,   199,   200,   200,   200,   200,   200,   200,   200,
+     200,   200,   200,   201,   201,   201,   202,   202,   202,   202,
+     202,   203,   203,   203,   203,   204,   205,   205,   205,   205,
+     205,   206,   206,   206,   206,   206,   207,   207,   208,   208,
+     209,   209,   210,   210,   211,   211,   211,   212,   212,   213,
+     213,   214,   214,   215,   215,   216,   216,   217,   217,   218,
+     218,   219,   219,   220,   220,   221,   221,   221,   221,   221,
+     222,   222,   222,   223,   223,   223,   224,   224,   224,   224,
+     224,   225,   225,   226,   226,   227,   227,   227,   228,   228,
+     228,   228,   228,   229,   229,   230,   230,   230,   230,   231,
+     231,   232,   232,   232,   232,   233,   233,   233,   233,   234,
+     234,   235,   235,   236,   236,   237,   237,   237,   237,   237,
+     238,   237,   239,   239,   239,   240,   240,   241,   241,   241,
+     241,   241,   241,   241,   241,   242,   242,   242,   242,   242,
+     242,   242,   242,   242,   242,   242,   242,   242,   242,   242,
+     243,   243,   243,   243,   243,   244,   244,   245,   245,   245,
+     245,   246,   246,   246,   246,   247,   247,   247,   247,   248,
+     248,   248,   249,   249,   249,   249,   250,   250,   250,   251,
+     251,   252,   252,   253,   252,   252,   252,   254,   254,   255,
+     255,   256,   256,   256,   256,   257,   257,   257,   257,   258,
+     258,   259,   259,   259,   259,   259,   260,   260,   261,   262,
+     262,   263,   262,   264,   264,   265,   265,   266,   266,   267,
+     267,   267,   267,   267,   268,   268,   268,   268,   269,   269,
+     270,   270,   271,   271,   272,   272,   272,   272,   273,   273,
+     273,   273,   273,   274,   274,   274,   274,   274,   275,   275,
+     276,   276,   277,   277,   278,   278,   278,   279,   279,   279,
+     280,   280,   280,   281,   281,   281,   282,   282,   283,   283,
+     283,   284,   284,   285,   285,   285,   285,   285,   286,   286,
+     287,   287,   288,   288,   288,   288,   288,   289,   289,   289,
+     289,   290,   290,   290,   291,   292,   292,   294,   293,   293,
+     295,   295,   295,   295,   296,   296,   297,   297,   297,   298,
+     298,   298,   298,   299,   299,   299,   300,   300,   301,   301,
+     302,   303,   302,   304,   304,   305,   305,   306,   306,   306,
      307,   307,   308,   308,   309,   309,   310,   310,   311,   311,
-     312,   312,   312,   313,   312,   312,   314,   314,   314,   315,
-     315,   315,   315,   315,   315,   315,   315,   315,   316,   316,
-     316,   317,   318,   318,   319,   319,   320,   320,   321,   322,
-     322,   323,   323,   323,   324,   324,   324,   324,   325,   325,
-     325,   325,   326,   326,   327,   327,   327,   328,   328,   328,
-     328,   329,   329,   330,   330,   330,   331,   331,   331,   332,
-     332,   332,   333,   333,   333,   334,   334,   334,   335,   335,
-     335,   336,   336,   336,   337,   337,   337,   338,   338,   338,
-     338,   339,   339,   340,   340,   340,   341,   341,   341,   341,
-     342,   342,   342,   343,   343,   343,   343,   344,   344,   344,
-     345,   345,   345,   345,   346,   346,   346,   347,   347,   347,
-     347,   348,   348,   349,   349,   349,   350,   350,   351,   351,
-     352,   352,   352,   353,   353,   353,   353,   353,   354,   354,
-     354,   354,   355,   355,   355,   356,   356,   356,   357,   357,
-     357,   357,   358,   358,   358,   359,   359,   359,   359,   359,
-     360,   360,   360,   360,   361,   361,   361,   362,   362,   362,
-     363,   363,   363,   363,   363,   363,   364,   364,   364,   365,
-     365,   365,   365,   365,   366,   366,   366,   366,   367,   367,
-     368,   368,   368,   369,   369,   370,   370,   370,   370,   370,
-     370,   371,   371,   371,   371,   371,   371,   371,   371,   371,
-     371,   372,   372,   372,   372,   373,   373,   373,   374,   374,
-     375,   375,   375,   375,   375,   375,   376,   376,   376,   376,
-     376,   376,   377,   378,   378,   379,   379,   380,   380
+     311,   312,   311,   311,   313,   313,   313,   314,   314,   314,
+     314,   314,   314,   314,   314,   314,   315,   315,   315,   316,
+     317,   317,   318,   318,   319,   319,   320,   321,   321,   322,
+     322,   322,   323,   323,   323,   323,   324,   324,   324,   324,
+     325,   325,   326,   326,   326,   327,   327,   327,   327,   328,
+     328,   329,   329,   329,   330,   330,   330,   331,   331,   331,
+     332,   332,   332,   333,   333,   333,   334,   334,   334,   335,
+     335,   335,   336,   336,   336,   337,   337,   337,   337,   338,
+     338,   339,   339,   339,   340,   340,   340,   340,   341,   341,
+     341,   342,   342,   342,   342,   343,   343,   343,   344,   344,
+     344,   344,   345,   345,   345,   346,   346,   346,   346,   347,
+     347,   348,   348,   348,   349,   349,   350,   350,   351,   351,
+     351,   352,   352,   352,   352,   352,   353,   353,   353,   353,
+     354,   354,   354,   355,   355,   355,   356,   356,   356,   356,
+     357,   357,   357,   358,   358,   358,   358,   358,   359,   359,
+     359,   359,   360,   360,   360,   361,   361,   361,   362,   362,
+     362,   362,   362,   362,   363,   363,   363,   364,   364,   364,
+     364,   364,   365,   365,   365,   365,   366,   366,   367,   367,
+     367,   368,   368,   369,   369,   369,   369,   369,   369,   370,
+     370,   370,   370,   370,   370,   370,   370,   370,   370,   371,
+     371,   371,   371,   372,   372,   372,   373,   373,   374,   374,
+     374,   374,   374,   374,   375,   375,   375,   375,   375,   375,
+     376,   377,   377,   378,   378,   379,   379
 };
 
@@ -1347,65 +1367,65 @@
        1,     3,     1,     3,     0,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     6,     4,     2,     7,     1,     3,
-       1,     2,     1,     2,     1,     2,     2,     5,     7,     5,
-       9,     5,     9,     1,     3,     1,     1,     3,     3,     2,
-       1,     2,     2,     0,     1,     2,     3,     0,     1,     2,
-       3,     3,     4,     0,     1,     1,     2,     5,     7,     6,
-       6,     4,     3,     4,     2,     3,     2,     3,     3,     3,
-       3,     5,     3,     3,     4,     1,     5,     6,     5,     6,
-       9,    10,     9,    10,     2,     1,     2,     2,     2,     1,
-       6,     8,    10,    12,    14,     0,     1,     0,     1,     1,
-       3,     4,     7,     0,     1,     3,     1,     3,     1,     1,
-       1,     3,     1,     1,     1,     3,     0,     1,     3,     4,
-       1,     3,     1,     1,     3,     3,     3,     3,     3,     2,
-       3,     6,     3,     3,     4,     1,     2,     2,     3,     5,
-       7,     7,     5,     9,     2,     2,     5,     3,     5,     4,
-       3,     4,     4,     7,     3,     3,     3,     3,     4,     6,
-       1,     1,     1,     1,     1,     1,     1,     1,     0,     1,
-       1,     2,     1,     1,     1,     1,     1,     1,     1,     0,
-       5,     1,     2,     3,     1,     2,     1,     1,     1,     1,
+       1,     2,     1,     2,     2,     1,     2,     2,     5,     7,
+       5,     9,     5,     9,     1,     3,     1,     1,     3,     3,
+       2,     1,     2,     2,     0,     1,     2,     3,     0,     1,
+       2,     3,     3,     4,     0,     1,     1,     2,     5,     7,
+       6,     6,     4,     3,     4,     2,     3,     2,     3,     3,
+       3,     3,     5,     3,     3,     4,     1,     5,     6,     5,
+       6,     9,    10,     9,    10,     2,     1,     2,     2,     2,
+       1,     6,     8,    10,    12,    14,     0,     1,     0,     1,
+       1,     3,     4,     7,     0,     1,     3,     1,     3,     1,
+       1,     1,     3,     1,     1,     1,     3,     0,     1,     3,
+       4,     1,     3,     1,     1,     3,     3,     3,     3,     3,
+       2,     3,     6,     3,     3,     4,     1,     2,     2,     3,
+       5,     7,     7,     5,     9,     2,     2,     5,     3,     5,
+       4,     3,     4,     4,     7,     4,     3,     3,     3,     3,
+       6,     1,     1,     1,     1,     1,     1,     1,     1,     0,
+       1,     1,     2,     1,     1,     1,     1,     1,     1,     1,
+       0,     5,     1,     2,     3,     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,
-       2,     2,     3,     3,     1,     3,     1,     2,     2,     2,
-       4,     4,     4,     4,     1,     2,     2,     3,     1,     2,
-       2,     1,     2,     2,     3,     1,     2,     2,     1,     1,
-       4,     2,     0,     6,     7,     2,     2,     2,     0,     2,
-       2,     3,     2,     3,     1,     2,     3,     2,     2,     4,
-       0,     1,     2,     2,     1,     0,     1,     2,     2,     5,
-       2,     0,     7,     2,     4,     0,     2,     0,     1,     1,
+       1,     2,     2,     3,     3,     1,     3,     1,     2,     2,
+       2,     4,     4,     4,     4,     1,     2,     2,     3,     1,
+       2,     2,     1,     2,     2,     3,     1,     2,     2,     1,
+       1,     5,     3,     0,     7,     8,     3,     1,     1,     0,
+       2,     2,     3,     3,     4,     1,     2,     3,     2,     1,
+       4,     0,     1,     2,     2,     1,     0,     1,     2,     6,
+       3,     0,     8,     2,     4,     0,     2,     0,     1,     1,
        1,     5,     5,     5,     1,     5,     5,     9,     1,     5,
        0,     1,     1,     5,     1,     1,     5,     5,     1,     3,
        3,     4,     1,     1,     1,     1,     2,     1,     3,     3,
        1,     2,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     2,     1,     1,     1,     2,
-       0,     2,     2,     1,     4,     0,     1,     2,     3,     4,
-       2,     2,     1,     2,     2,     5,     5,     7,     6,     1,
-       2,     2,     3,     1,     2,     2,     4,     2,     4,     0,
-       4,     2,     1,     1,     1,     1,     0,     2,     5,     5,
-      13,     1,     1,     3,     3,     2,     3,     3,     2,     4,
-       1,     6,     9,     0,    11,     1,     3,     3,     3,     1,
-       1,     5,     2,     5,     0,     1,     1,     3,     0,     1,
-       1,     1,     1,     0,     6,     2,     1,     2,     4,     2,
-       3,     3,     3,     4,     5,     5,     5,     6,     1,     1,
-       1,     3,     0,     5,     0,     1,     1,     2,     6,     1,
-       3,     0,     1,     4,     1,     1,     1,     1,     2,     1,
-       2,     2,     1,     3,     2,     3,     3,     2,     4,     4,
-       3,     8,     3,     2,     1,     2,     6,     8,     3,     2,
-       3,     3,     4,     4,     3,     1,     1,     1,     4,     6,
-       3,     2,     3,     3,     4,     4,     3,     2,     1,     2,
-       2,     1,     3,     2,     3,     3,     2,     4,     4,     3,
-       6,     8,     3,     2,     1,     2,     2,     2,     3,     3,
-       2,     4,     4,     3,     6,     8,     3,     2,     1,     2,
-       2,     1,     1,     2,     3,     3,     2,     4,     6,     8,
-       1,     2,     2,     1,     2,     2,     3,     3,     1,     4,
-       4,     3,     5,     8,     3,     2,     3,     1,     5,     5,
-       6,     6,     1,     2,     2,     1,     2,     2,     3,     3,
-       1,     4,     4,     3,     5,     8,     3,     1,     2,     1,
-       2,     6,     5,     6,     7,     7,     1,     2,     2,     1,
-       2,     2,     3,     3,     1,     4,     4,     3,     8,     3,
-       1,     1,     2,     1,     1,     2,     3,     2,     3,     2,
-       3,     3,     2,     4,     3,     2,     3,     2,     4,     3,
-       2,     6,     6,     6,     7,     1,     2,     1,     1,     1,
-       2,     3,     2,     3,     2,     3,     3,     4,     2,     3,
-       4,     2,     5,     6,     6,     0,     1,     0,     2
+       1,     1,     1,     1,     1,     2,     1,     1,     0,     2,
+       2,     1,     4,     0,     1,     2,     3,     4,     2,     2,
+       1,     2,     2,     5,     5,     7,     6,     1,     2,     2,
+       3,     1,     2,     2,     4,     2,     4,     0,     4,     2,
+       1,     1,     1,     1,     0,     2,     5,     5,    13,     1,
+       1,     3,     3,     2,     3,     3,     2,     4,     1,     6,
+       9,     0,    11,     1,     3,     3,     3,     1,     1,     5,
+       2,     5,     0,     1,     1,     3,     0,     1,     1,     1,
+       1,     0,     6,     2,     1,     2,     4,     2,     3,     3,
+       3,     4,     5,     5,     5,     6,     1,     1,     1,     3,
+       0,     5,     0,     1,     1,     2,     6,     1,     3,     0,
+       1,     4,     1,     1,     1,     1,     2,     1,     2,     2,
+       1,     3,     2,     3,     4,     2,     4,     4,     3,     8,
+       3,     2,     1,     2,     6,     8,     3,     2,     3,     3,
+       4,     4,     3,     1,     1,     1,     4,     8,     3,     2,
+       3,     3,     4,     4,     3,     2,     1,     2,     2,     1,
+       3,     2,     3,     4,     2,     4,     4,     3,     6,     8,
+       3,     2,     1,     2,     2,     2,     3,     4,     2,     4,
+       4,     3,     6,     8,     3,     2,     1,     2,     2,     1,
+       1,     2,     3,     4,     2,     4,     6,     8,     1,     2,
+       2,     1,     2,     2,     3,     4,     1,     4,     4,     3,
+       5,     8,     3,     2,     3,     1,     5,     5,     6,     6,
+       1,     2,     2,     1,     2,     2,     3,     4,     1,     4,
+       4,     3,     5,     8,     3,     1,     2,     1,     2,     6,
+       5,     6,     7,     7,     1,     2,     2,     1,     2,     2,
+       3,     4,     1,     4,     4,     3,     8,     3,     1,     1,
+       2,     1,     1,     2,     3,     2,     3,     2,     3,     3,
+       2,     4,     3,     2,     3,     2,     4,     3,     2,     6,
+       6,     6,     7,     1,     2,     1,     1,     1,     2,     3,
+       2,     3,     2,     3,     3,     4,     2,     3,     4,     2,
+       5,     6,     6,     0,     1,     0,     2
 };
 
@@ -1415,159 +1435,159 @@
 static const yytype_uint16 yydefact[] =
 {
-     298,   298,   318,   316,   319,   317,   320,   321,   304,   306,
-     305,     0,   307,   332,   324,   329,   327,   328,   326,   325,
-     330,   331,   337,   338,   336,   333,   334,   335,   554,   554,
-     554,     0,     0,     0,   298,   225,   308,   322,   323,     9,
-     365,     0,    10,    16,    17,     0,     2,    72,    73,   572,
-      11,   298,   532,   530,   252,     3,   460,     3,   265,     0,
-       3,     3,     3,   253,     3,     0,     0,     0,   299,   300,
-     302,   298,   311,   314,   346,   290,   339,   344,   291,   354,
-     292,   361,   358,   368,     0,     0,   369,   293,   479,   483,
-       3,     3,     0,     2,   526,   531,   536,   303,     0,     0,
-     554,   584,   554,     2,   595,   596,   597,   298,     0,   738,
-     739,     0,    14,     0,    15,   298,   274,   275,     0,   299,
-     294,   295,   296,   297,   533,   309,   398,   555,   556,   376,
-     377,    14,   451,   452,    13,   447,   450,     0,   510,   505,
-     496,   451,   452,     0,     0,   535,   226,     0,   298,     0,
-       0,     0,     0,     0,     0,     0,     0,   298,   298,     0,
-     740,   299,   589,   601,   744,   737,   735,   742,     0,     0,
-       0,   259,     2,     0,   539,   445,   446,   444,     0,     0,
-       0,     0,   554,     0,   641,   642,     0,     0,   552,   548,
-     554,   569,   554,   554,   550,     2,   549,   554,   608,   554,
-     554,   611,     0,     0,     0,   298,   298,   316,   366,     2,
-     298,   266,   301,   312,   347,   359,   484,     0,     2,     0,
-     460,   267,   299,   340,   355,   362,   480,     0,     2,     0,
-     315,   341,   348,   349,     0,   356,   360,   363,   367,   452,
-     298,   378,   371,   375,     0,   400,   481,   485,     0,     0,
-       0,     1,   298,     2,   537,   583,   585,   298,     2,   748,
-     299,   751,   552,   552,     0,   299,     0,     0,   277,   554,
-     550,     2,   298,     0,     0,   298,   557,     2,   508,     2,
-     561,     0,     0,     0,     0,     0,     0,    21,    69,     4,
-       8,    19,     5,     6,     7,     0,     0,   298,     2,    74,
-      75,    76,    77,    57,    22,    58,    18,    26,    56,    78,
-     298,     0,    80,    84,    87,    90,    95,    98,   100,   102,
-     104,   106,   108,   112,   502,    23,   458,   501,     0,   456,
-     457,     0,   573,   588,   591,   594,   600,   603,   606,     2,
-     746,   298,   749,     2,    72,   298,     3,   432,     0,   440,
-     299,   298,   311,   339,   291,   354,   361,     3,     3,   414,
-     418,   428,   433,   479,   298,   434,   713,   714,   298,   435,
-     437,     2,   590,   602,   736,     2,     2,   254,     2,   465,
-       0,   463,   462,   461,   146,     2,     2,   256,     2,     2,
-     255,     2,   285,     2,   286,     0,   284,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   574,   613,     0,   460,
-       2,   568,   577,   667,   570,   571,   540,   298,     2,   607,
-     616,   609,   610,     0,   280,   298,   298,   345,   299,     0,
-     299,   298,   741,   745,   743,   541,   298,   552,   260,   268,
-     313,     0,     2,   542,   298,   506,   342,   343,   287,   357,
-     364,     0,   298,     0,   755,   405,     0,   482,   507,   257,
-     258,   527,   298,   442,     0,   298,   242,     0,     2,   244,
-       0,   299,     0,   262,     2,   263,   282,     0,     0,     2,
-     298,   552,   298,   492,   494,   493,   495,     0,     0,   757,
-       0,   298,     0,   298,   497,   298,   567,   564,   565,   566,
-       0,   559,   562,     0,     0,   298,    64,   298,    78,    59,
-     298,    66,   298,   298,    62,    63,     2,   132,     0,     0,
-     454,     0,   453,   735,   298,    20,    31,     0,    34,    35,
-      40,     2,     0,    40,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   117,   116,     0,    60,    61,     0,
+     299,   299,   319,   317,   320,   318,   321,   322,   305,   307,
+     306,     0,   308,   333,   325,   330,   328,   329,   327,   326,
+     331,   332,   338,   339,   337,   334,   335,   336,   552,   377,
+     378,     0,     0,     0,   299,   226,   309,   323,   324,     9,
+     366,     0,    10,    16,    17,     0,     2,    72,    73,   570,
+      11,   299,   530,   528,   253,     3,   458,     3,   266,     0,
+       3,     3,     3,   254,     0,     0,     0,   300,   301,   303,
+     299,   312,   315,   347,   291,   340,   345,   292,   355,   293,
+     362,   359,   369,   552,   370,   294,   477,   481,     3,     3,
+       0,     2,   524,   529,   534,   304,     0,     0,   552,   582,
+     552,     2,   593,   594,   595,   299,     0,   736,   737,     0,
+      14,     0,    15,   299,   275,   276,     0,   300,   295,   296,
+     297,   298,   531,   310,     0,   553,   554,    14,   451,   452,
+      13,   447,   450,     0,   508,   503,   494,   451,   452,     0,
+       0,   533,   227,     0,   299,     0,     0,     0,     0,     0,
+       0,     0,     0,   299,   299,     0,   738,   300,   587,   599,
+     742,   735,   733,   740,     0,     0,     0,   260,     2,     0,
+     537,   445,   446,   444,     0,     0,     0,     0,   639,   640,
+       0,     0,     3,   550,   546,   552,   567,   552,   552,   548,
+       2,   547,   552,   606,   552,   552,   609,     0,     0,     0,
+     299,   299,   317,   367,     2,   299,   267,   302,   313,   348,
+     360,   482,     0,     2,     0,   458,   268,   300,   341,   356,
+     363,   478,     0,     2,     0,   316,   342,   349,   350,     0,
+     357,   361,   364,   368,     0,   479,   483,     0,     0,     0,
+       1,   299,     2,   535,   581,   583,   299,     2,   746,   300,
+     749,   550,   550,     0,   300,     0,     0,   278,   552,   548,
+       2,   299,     0,     0,   299,     0,   400,   555,     2,   506,
+       2,   559,     0,     0,     0,     0,     0,     0,    21,    69,
+       4,     8,    19,     5,     6,     7,     0,     0,   299,     2,
+      74,    75,    76,    77,    57,    22,    58,    18,    26,    56,
+      78,   299,     0,    80,    84,    87,    90,    95,    98,   100,
+     102,   104,   106,   108,   112,   500,    23,   454,   456,   499,
+       0,   453,   457,     0,   571,   586,   589,   592,   598,   601,
+     604,     2,   744,   299,   747,     2,    72,   299,     3,   432,
+       0,   440,   300,   299,   312,   340,   292,   355,   362,     3,
+       3,   414,   418,   428,   433,   477,   299,   434,   711,   712,
+     299,   435,   437,     2,   588,   600,   734,     2,     2,   255,
+       2,   463,     0,   461,   460,   459,   146,     2,     2,   257,
+       2,     2,   256,     2,   286,     2,   287,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   572,   611,   552,     0,
+       0,   458,     2,   566,   575,   665,   568,   569,   538,   299,
+       2,   605,   614,   607,   608,     0,   281,   299,   299,   346,
+     300,     0,   300,   299,   739,   743,   741,   539,   299,   550,
+     261,   269,   314,     0,     2,   540,   299,   504,   343,   344,
+     288,   358,   365,   452,   299,   379,   372,   376,   480,   505,
+     258,   259,   525,   299,   442,     0,   299,   243,     0,     2,
+     245,     0,   300,     0,   263,     2,   264,   283,     0,     0,
+       2,   299,   550,   299,   490,   492,   491,   493,     0,     0,
+     755,     0,   753,   405,     0,   299,     0,   299,   495,   299,
+     565,   562,   563,   564,     0,   557,   560,     0,     0,   299,
+      64,   299,    78,    59,   299,    66,   299,   299,    62,    63,
+       2,   132,     0,     0,     0,   733,   299,    20,    31,     0,
+      34,    35,    40,     2,     0,    40,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   117,   116,     0,    60,
+      61,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     2,   653,
-     459,   650,   554,   554,   658,   486,   298,     2,   592,   593,
-       0,   604,   605,     0,   747,   750,   298,   298,     0,   715,
-     299,   719,   710,   711,   717,     0,     2,     2,   675,   554,
-     757,   624,   554,   554,   757,   554,   638,   554,   554,   689,
-     441,   672,   554,   554,   680,   687,   298,   436,   299,     0,
-       0,   298,   725,   299,   730,   757,   722,   298,   727,   757,
-     298,   298,     0,     0,    21,     2,     0,    22,     0,   466,
-     755,     0,     0,   472,   246,     0,   298,     0,     0,     0,
-     552,   576,   580,   582,   612,   615,   619,   622,   575,   614,
-       0,   288,   665,     0,   298,   281,     0,     0,     0,     0,
-     279,     2,     0,   264,   543,   298,     0,     0,   298,     2,
-     370,   390,   379,     0,     0,   384,   378,   756,     0,     0,
-     403,     0,   299,     3,   421,     3,   425,   424,   598,     0,
-     538,   298,    72,     3,   298,   440,   299,     3,   434,   435,
-       2,     0,     0,     0,   491,   310,   298,     0,   487,   489,
-       3,     2,     2,     0,   509,     3,     0,   561,    40,     0,
-       0,   227,     0,     0,     0,     0,    41,     0,     0,   298,
-      24,     0,    25,     0,   699,   704,   455,   696,   554,   554,
+       2,   651,   455,   648,   552,   552,   656,   484,   299,     2,
+     590,   591,     2,   602,   603,     0,   745,   748,   299,   299,
+       0,   713,   300,   717,   708,   709,   715,     0,     2,     2,
+     673,   552,   755,   622,   552,   552,   755,   552,   636,   552,
+     552,   687,   441,   670,   552,   552,   678,   685,   299,   436,
+     300,     0,     0,   299,   723,   300,   728,   755,   720,   299,
+     725,   755,   299,   299,     0,     0,    21,     2,     0,    22,
+       0,   464,   753,     0,     0,   470,   247,     0,   299,     0,
+       0,     0,   552,   578,   580,   610,   552,   617,   620,   573,
+     612,     0,   285,     0,   289,   663,     0,   299,   282,     0,
+       0,     0,     0,   280,     2,     0,   265,   541,   299,     0,
+       0,   299,     0,   300,     3,   421,     3,   425,   424,   596,
+       0,   536,   299,    72,     3,   299,   440,   300,     3,   434,
+     435,     2,     0,     0,     0,   489,   311,   299,     0,   485,
+     487,   754,     0,     0,   403,     0,     3,     2,     2,     0,
+     507,     3,     0,   559,    40,     0,     0,   228,     0,     2,
+       0,     0,     0,    41,     0,     0,   299,    24,     0,    25,
        0,   114,     3,     2,    32,     0,    38,     0,     2,    29,
        0,   113,    81,    82,    83,    85,    86,    88,    89,    93,
       94,    91,    92,    96,    97,    99,   101,   103,   105,   107,
-       0,     0,   298,     0,     0,     0,   654,   655,   651,   652,
-     504,   503,   298,     0,   721,   298,   726,   299,   298,   669,
-     712,   668,     2,   298,     0,     0,     0,     0,     0,     0,
-       0,     0,   690,     0,   676,   627,   643,   677,     2,   623,
-     630,   438,   625,   626,   439,     2,   637,   646,   639,   640,
-     673,   674,   688,   716,   720,   718,   757,   272,     2,   752,
-       2,   429,   724,   729,   430,     3,   408,     3,     3,     3,
-     460,     0,     0,     2,   474,   471,   756,     0,   467,     2,
-     470,   473,     0,   298,   247,   269,     3,   276,   278,     0,
-     460,     2,   578,   579,     2,   617,   618,     0,   666,   544,
-       3,   351,   350,   353,   352,   298,   545,     0,   546,   378,
-       0,     0,   298,     0,     0,   699,   388,   391,   395,   554,
-     395,   394,   387,   380,   554,   382,   385,   298,   405,   399,
-     111,   406,   755,     0,     0,   443,   245,     0,     0,     3,
-       2,   675,   436,     0,   534,     0,   757,   758,   496,     0,
-     298,   298,   298,     0,   558,   560,     0,     0,   220,     0,
-       0,     0,   228,   229,    65,     0,    67,    70,    71,     0,
-     133,     0,     0,     0,   700,   701,   697,   698,   465,    79,
-     115,   130,     3,   114,     0,    28,    40,     3,     0,    37,
-     110,     0,     3,   657,   661,   664,   656,     3,   599,   723,
-     728,     2,    72,   298,     3,     3,   299,     0,     3,   629,
-     633,   636,   645,   679,   683,   686,   298,     3,   628,   644,
-     678,   298,   298,   431,   298,   298,     0,     0,     0,     0,
-     261,   111,     0,     3,     3,     0,   468,     0,   464,     0,
-       0,   250,   298,     0,     0,   134,     0,     0,     0,     0,
-       0,   134,     0,     0,   114,   114,    21,   365,   446,    69,
-       0,    22,   135,     0,     3,   136,   137,     2,   148,   138,
-     139,   140,   141,   142,   143,   150,     0,   152,     0,     0,
-       0,   289,   298,   298,   554,     0,   547,   298,   381,   383,
-       0,   397,   700,   392,   396,   393,   386,   390,   373,   404,
-       0,   586,     2,   671,   670,     0,   676,     2,   488,   490,
-     511,     3,   519,   520,     0,     2,   515,     3,     3,     0,
-       0,   563,   227,     0,     0,     0,   227,     0,     0,   703,
-     707,   709,   702,   755,   114,     0,     3,    54,     0,    54,
+       0,     0,   299,     0,     0,     0,   652,   653,   649,   650,
+     502,   501,   299,   299,   719,   299,   724,   300,   299,   667,
+     710,   666,     2,   299,     0,     0,     0,     0,     0,     0,
+       0,     0,   688,     0,   674,   625,   641,   675,     2,   621,
+     628,   438,   623,   624,   439,     2,   635,   644,   637,   638,
+     671,   672,   686,   714,   718,   716,   755,   273,     2,   750,
+       2,   429,   722,   727,   430,     3,   408,     3,     3,     3,
+     458,     0,     0,     2,   472,   469,   754,     0,   465,     2,
+     468,   471,     0,   299,   248,   270,     3,   277,   279,     0,
+       2,   574,   576,   577,     2,   613,   615,   616,   550,     0,
+     664,   542,     3,   352,   351,   354,   353,   299,   543,     0,
+     544,     0,   299,   371,   391,   380,     0,   385,   379,     0,
+       0,   443,   246,     0,     0,     3,     2,   673,   436,     0,
+     532,     0,   755,   756,   494,   405,   399,   111,   406,   753,
+       0,   299,   299,   299,     0,   556,   558,     0,     0,   221,
+       0,     0,     0,   229,   230,    65,   299,     0,    67,    70,
+      71,     0,   133,   463,    79,   115,   130,     3,   114,     0,
+      28,    40,     3,     0,    37,   110,     0,     3,   552,   659,
+     662,   654,     3,     3,   721,   726,     2,    72,   299,     3,
+       3,   300,     0,     3,   552,   631,   634,   552,   552,   681,
+     684,   299,     3,   626,   642,   676,   299,   299,   431,   299,
+     299,     0,     0,     0,     0,   262,   111,     0,     3,     3,
+       0,   466,     0,   462,     0,     0,   251,   299,     0,     0,
+     134,     0,     0,     0,     0,     0,   134,     0,     0,   114,
+     114,    21,   366,   446,    69,     0,    22,   135,     0,     3,
+     136,   137,     2,   148,   138,   139,   140,   141,   142,   143,
+     150,     0,   152,     0,     0,     0,   299,   299,   458,   552,
+       0,   545,   379,   391,     0,     0,     0,   697,     0,   389,
+     392,   396,   552,   396,   702,   395,   694,   552,   552,   388,
+     381,   386,   299,   584,     2,   669,   668,     0,   674,     2,
+     486,   488,   404,     0,   509,     3,   517,   518,     0,     2,
+     513,     3,     3,     0,     0,   561,   228,     0,     0,     0,
+     228,     0,     0,   753,   114,     0,     3,    54,     0,    54,
       54,     3,    42,    44,    39,     0,     3,   109,     0,     2,
-     659,   660,     0,   298,     0,     0,     0,     3,   645,     0,
-       2,   631,   632,     2,   647,     2,   681,   682,     0,     0,
-      72,     0,     3,     3,     3,     3,   416,   415,   419,   754,
-       2,     2,   753,     0,     0,     0,     0,     3,   469,     3,
-       0,   248,   151,     3,   299,   298,     0,     0,     0,     0,
-       2,   196,     0,   194,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   156,   153,   298,     0,   554,     0,   271,
-     283,     3,     3,   553,   620,   374,   389,   402,   298,   270,
-     298,     0,   522,   499,   298,     0,     0,   498,   513,     0,
-       0,     0,   221,     0,   230,    68,     2,   705,   706,     0,
-     131,   128,     0,    51,     2,    45,    52,    53,     0,     0,
-       0,     0,    27,     0,   662,   298,   587,   731,   732,   733,
-       0,   684,   298,   298,   298,     3,     3,     0,   692,     0,
-       0,     0,     0,   298,   298,     3,   551,   475,   476,     0,
-     251,   299,     0,     0,     0,     0,   298,   197,   195,     0,
-     192,   198,     0,     0,     0,     0,   202,   205,   203,   199,
-       0,   200,    40,   149,   147,   134,   249,     0,     0,   423,
-     427,   426,     0,   516,     2,   517,     2,   518,   512,   298,
-     233,     0,   231,     0,   233,   298,    36,   129,    55,     0,
-      43,    33,     2,    49,     2,    47,    30,     3,   734,     3,
-       3,     3,     0,     0,   691,   693,   634,   648,   273,     2,
-     413,     3,   412,     0,   478,   134,     0,     0,   134,     3,
-       0,   134,   193,     0,     2,     2,   214,   204,     0,     0,
-       0,     0,   145,   581,   621,     2,     0,     0,     2,   234,
-       0,     0,   222,     0,     3,     3,     0,     0,     0,     0,
-       0,     0,   694,   695,   298,     0,   477,   157,     0,     0,
-       2,   170,   134,   159,     0,   187,     0,   134,     0,     2,
-     161,     0,     2,     0,     2,     2,     2,   201,    37,   298,
-     521,   523,   514,     0,     0,     0,     0,     0,     0,     3,
-       3,   663,   635,   649,   685,   417,   134,   163,   166,     0,
-     165,   169,     3,   172,   171,     0,   134,   189,   134,     3,
-       0,   298,     0,   298,     0,     2,     0,     2,   144,     2,
-     235,   236,     0,   232,   223,   708,    46,     0,     0,   158,
-       0,     0,   168,   238,   173,     2,   240,   188,     0,   191,
-     177,   206,     3,   215,   219,   208,     3,     0,   298,     0,
-     298,     0,     0,     0,    50,    48,   164,   167,   134,     0,
-     174,   298,   134,   134,     0,   178,     0,     0,   699,   216,
-     217,   218,     0,   207,     3,   209,     3,   298,   224,   237,
-     154,   175,   160,   134,   241,   190,   185,   183,   179,   162,
-     134,     0,   700,     0,     0,     0,     0,   155,   176,   186,
-     180,   184,   183,   181,     3,     3,     0,     0,   500,   182,
-     210,   212,     3,     3,   211,   213
+     655,   657,   658,     0,     0,   299,     0,     0,     0,     3,
+     552,     0,     2,   627,   629,   630,     2,   643,   645,     2,
+     677,   679,   680,     0,     0,    72,     0,     3,     3,     3,
+       3,   416,   415,   419,   752,     2,     2,   751,     0,     0,
+       0,     0,     3,   467,     3,     0,   249,   151,   153,     0,
+       0,     0,     0,     2,   197,     0,   195,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   157,   154,   299,     0,
+     552,     0,   272,   284,     3,     3,   290,   551,   618,   299,
+       0,   382,     0,     0,     0,     0,   398,   698,   699,   552,
+     383,   393,   397,   394,   695,   696,   387,   374,   299,   271,
+     299,   402,     0,   520,   497,   299,     0,     0,   496,   511,
+       0,     0,     0,   222,     0,   231,    68,     0,   131,   128,
+       0,    51,     2,    45,    52,    53,     0,     0,     0,     0,
+      27,     0,   660,   299,   585,   597,   729,   730,   731,     0,
+     682,   299,   299,   299,     3,     3,     0,   690,     0,     0,
+       0,     0,   299,   299,     3,   549,   473,   474,     0,   252,
+       0,     0,     0,     0,   299,   198,   196,     0,   193,   199,
+       0,     0,     0,     0,   203,   206,   204,   200,     0,   201,
+      40,   149,   147,   134,   250,     0,     0,   375,   384,   552,
+     705,   707,   700,   391,   423,   427,   426,     0,   514,     2,
+     515,     2,   516,   510,   299,   234,     0,   232,     0,   234,
+      36,   129,    55,     0,    43,    33,     2,    49,     2,    47,
+      30,     3,   732,     3,     3,     3,     0,     0,   689,   691,
+     632,   646,   274,     2,   413,     3,   412,     0,   476,   134,
+       0,     0,   134,     3,     0,   134,     3,   300,   299,   194,
+       0,     2,     2,   215,   205,     0,     0,     0,     0,   145,
+     579,   619,     2,   701,   703,   704,   390,     2,     0,     0,
+       2,   235,     0,     0,   223,     0,     3,     0,     0,     0,
+       0,     0,     0,   692,   693,   299,     0,   475,   158,     0,
+       0,     2,   171,   134,   160,     0,   188,     0,   134,     0,
+     300,     2,   162,     0,     2,     0,     2,     2,     2,   202,
+      37,   299,   299,   519,   521,   512,     0,     0,     0,     0,
+       0,     3,     3,   661,   633,   647,   683,   417,   134,   164,
+     167,     0,   166,   170,     3,   173,   172,     0,   134,   190,
+     134,     3,     0,   299,     0,   299,     0,     2,     0,     2,
+     144,     3,     2,   236,   237,     0,   233,   224,    46,     0,
+       0,   159,     0,     0,   169,   239,   174,     2,   241,   189,
+       0,   192,   178,   207,     3,   216,   220,   209,     3,     0,
+     299,     0,   299,     0,     0,     0,     0,    50,    48,   165,
+     168,   134,     0,   175,   299,   134,   134,     0,   179,     0,
+       0,   697,   217,   218,   219,     0,   208,     3,   210,     3,
+     706,   299,   225,   238,   155,   176,   161,   134,   242,   191,
+     186,   184,   180,   163,   134,     0,   698,     0,     0,     0,
+       0,   156,   177,   187,   181,   185,   184,   182,     3,     3,
+       0,     0,   498,   183,   211,   213,     3,     3,   212,   214
 };
 
@@ -1575,191 +1595,191 @@
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   803,   466,   303,    49,   135,   136,   304,   305,   306,
-     307,   308,   755,   756,  1121,  1122,  1123,  1233,   309,   380,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,  1012,   517,   961,   546,   325,   962,  1042,
-    1043,  1510,  1045,  1046,  1047,  1048,  1511,  1049,  1050,  1428,
-    1429,  1391,  1392,  1393,  1489,  1490,  1494,  1495,  1530,  1531,
-    1051,  1350,  1052,  1053,  1286,  1287,  1288,  1472,  1054,   147,
-     941,   942,   943,  1370,  1452,  1464,  1465,   467,   468,   863,
-     864,  1020,    53,    54,    55,    56,    57,   347,   159,    60,
-      61,    62,    63,    64,   349,    66,    67,   265,    69,    70,
-     275,   351,   352,    73,    74,    75,   120,    77,   205,   354,
-     121,    80,   122,    82,    83,   453,    84,   452,   682,   683,
-     684,   896,  1073,   897,    85,    86,   456,   454,   690,   845,
-     846,   357,   358,   693,   694,   695,   359,   360,   361,   362,
-     464,  1056,   137,   138,   521,   327,   171,   639,   640,   641,
-     642,   643,    87,   123,    89,   488,   489,   928,   490,   278,
-     494,   328,    90,   139,   140,    91,  1309,  1095,  1096,  1097,
-    1098,    92,    93,   711,    94,   274,    95,    96,   188,  1014,
-     673,   411,   127,    97,   500,   501,   502,   189,   269,   191,
-     192,   193,   270,   100,   101,   102,   103,   104,   105,   106,
-     196,   197,   198,   199,   200,   815,   601,   602,   603,   604,
-     201,   606,   607,   608,   570,   571,   572,   573,   745,   107,
-     610,   611,   612,   613,   614,   615,   955,   747,   748,   749,
-     591,   365,   366,   367,   368,   329,   165,   109,   110,   111,
-     370,   688,   718
+      -1,   783,   457,   294,    49,   131,   132,   295,   296,   297,
+     298,   299,   735,   736,  1091,  1092,  1093,  1221,   300,   372,
+     302,   303,   304,   305,   306,   307,   308,   309,   310,   311,
+     312,   313,   314,   977,   511,   926,   538,   316,   927,  1007,
+    1008,  1514,  1010,  1011,  1012,  1013,  1515,  1014,  1015,  1430,
+    1431,  1392,  1393,  1394,  1492,  1493,  1497,  1498,  1534,  1535,
+    1016,  1344,  1017,  1018,  1274,  1275,  1276,  1474,  1019,   143,
+     912,   913,   914,  1372,  1455,  1466,  1467,   458,   459,   843,
+     844,   985,    53,    54,    55,    56,    57,   339,   155,    60,
+      61,    62,    63,   182,   341,    65,    66,   254,    68,    69,
+     264,   343,   344,    72,    73,    74,   118,    76,   200,   346,
+     119,    79,   120,    81,    82,   672,    83,   671,   875,   876,
+    1038,  1039,  1191,  1040,    84,   484,   482,   704,   825,   826,
+     349,   350,   674,   675,   676,   351,   352,   677,   354,   455,
+    1021,   133,   134,   318,   319,   167,   631,   632,   633,   634,
+     635,    85,   121,    87,   479,   480,   894,   481,   269,   488,
+     320,    88,   135,   136,    89,  1304,  1069,  1070,  1071,  1072,
+      90,    91,   692,    92,   263,    93,    94,   183,   979,   666,
+     403,   125,    95,   494,   495,   496,   184,   258,   186,   187,
+     188,   259,    98,    99,   100,   101,   102,   103,   104,   191,
+     192,   193,   194,   195,   795,   593,   594,   595,   596,   196,
+     598,   599,   600,   562,   563,   564,   565,  1044,   105,   602,
+     603,   604,   605,   606,   607,  1045,  1046,  1047,  1048,   583,
+     357,   358,   359,   360,   321,   161,   107,   108,   109,   362,
+     702,   699
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1328
+#define YYPACT_NINF -1276
 static const yytype_int16 yypact[] =
 {
-    7094,  5192, -1328,    47, -1328, -1328, -1328, -1328, -1328, -1328,
-   -1328,    41, -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328,
-   -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328,   209,   209,
-     209,  1263,  1027,   118,  7336,   312, -1328, -1328, -1328, -1328,
-   -1328,   248, -1328, -1328, -1328,  1020,   187, -1328, -1328, -1328,
-   -1328,  8977, -1328, -1328, -1328, -1328,   126,   266, -1328,  1653,
-   -1328, -1328, -1328, -1328,   285,  1985,   410,    77,  7457, -1328,
-   -1328,  8977,   983, -1328, -1328,   602,   416,  4937,   741,  1118,
-     602,  1546, -1328, -1328,  1203,   473, -1328,   602,  1860, -1328,
-     325, -1328,   471,   476, -1328, -1328, -1328, -1328,   367,   266,
-     209, -1328,   209, -1328, -1328, -1328, -1328,  7962,  1653, -1328,
-   -1328,  1653, -1328,   375, -1328,  8082, -1328, -1328,  2291,  9246,
-   -1328,   847,   847,   847, -1328, -1328, -1328,   209, -1328, -1328,
-   -1328,   408,   426,   461, -1328, -1328, -1328,   472, -1328, -1328,
-   -1328, -1328, -1328,   508,   512, -1328, -1328,   103,  8623,  1598,
-     500,   443,   518,   536,   544,   548,   556,  9286,  6718,   568,
-   -1328,  9017, -1328, -1328, -1328, -1328,   575, -1328,   190,  3423,
-    3423, -1328,   577,   294, -1328, -1328, -1328, -1328,   578,   352,
-     387,   393,   209,   564, -1328, -1328,  1985,  3980,   641, -1328,
-      84, -1328,   209,   209,   266, -1328, -1328,   214, -1328,   209,
-     209, -1328,  4262,   597,   616,   847,  6752, -1328, -1328, -1328,
-    8977, -1328, -1328,   602, -1328, -1328, -1328,   266, -1328,  1653,
-     126, -1328,  7808, -1328,   847,   847,   847,   266, -1328,  1263,
-   -1328,  6380, -1328, -1328,   600,   847, -1328,   847, -1328,   248,
-    8623, -1328,   625, -1328,  1027,   697,   847, -1328,  1263,   667,
-     675, -1328,  7336,   663, -1328, -1328, -1328,  3551, -1328, -1328,
-    8539, -1328,   641,   128,  5841,  9246,  2291,  4262, -1328,   236,
-   -1328, -1328,  8082,  1653,   700, 10420, -1328, -1328,   221, -1328,
-     493,   710,   742,  6026,   753,  5841,  9865, -1328,   766, -1328,
-   -1328, -1328, -1328, -1328, -1328,  9924,  9924,  8387,   187, -1328,
-   -1328, -1328, -1328, -1328, -1328, -1328,   808, -1328,  2340,  2114,
-    8623,  5841, -1328,   633,    22,   547,   447,   693,   771,   758,
-     785,   800,    32, -1328, -1328, -1328,   572, -1328,   268, -1328,
-   -1328,  1598, -1328, -1328,   329,   827, -1328,   417,   827, -1328,
-   -1328,  7962, -1328,   807,   834,  8741, -1328, -1328,  1437,  2015,
-    8168,  6752,   602, -1328,   602,   847,   847, -1328, -1328, -1328,
-   -1328, -1328, -1328,   847,  7962,  1653, -1328, -1328,  9286,  1675,
-   -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328,  4621,
-    5841, -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328,
-   -1328, -1328, -1328, -1328, -1328,  2291, -1328,   818,   832,   839,
-     851,   857,   865,   870,   881,  3980, -1328, -1328,   888,   126,
-     903, -1328, -1328,   889, -1328, -1328, -1328,  3551, -1328, -1328,
-   -1328, -1328, -1328,  4262, -1328,  8623,  8623, -1328,   847,  2291,
-    6876,  8243, -1328, -1328, -1328, -1328,  3551,   128, -1328, -1328,
-     602,   266, -1328, -1328,  3551, -1328,  6628, -1328, -1328,   847,
-     847,   552,  5831,   902,   906,   897,   905,   847, -1328, -1328,
-   -1328, -1328,  9444, -1328,   569, 10160, -1328,   266,   913, -1328,
-    2291, 10200,  9983, -1328, -1328, -1328, -1328,   896,  4262, -1328,
-    8243,   641,  7215, -1328, -1328, -1328, -1328,  1315,   613,   907,
-    1027, 10420,  1475,  8082, -1328, 10420, -1328, -1328, -1328, -1328,
-     654, -1328,   931,   742,   246,  8387, -1328,  9319, -1328, -1328,
-    8387, -1328,  8505,  8387, -1328, -1328,   187, -1328,   666,   933,
-     695,   936, -1328, -1328,  6470, -1328, -1328,   345, -1328, -1328,
-    5841, -1328,   431,  5841, -1328, -1328, -1328, -1328, -1328, -1328,
-   -1328, -1328, -1328, -1328, -1328, -1328,  5841, -1328, -1328,  5841,
-    5841,  5841,  5841,  5841,  5841,  5841,  5841,  5841,  5841,  5841,
-    5841,  5841,  5841,  5841,  5841,  5841,  5841,  4496,   572,   830,
-   -1328, -1328,   209,   209, -1328, -1328,  8623, -1328, -1328,   889,
-     663, -1328,   889, 10042, -1328, -1328,  9286,  6470,   929, -1328,
-    9246, -1328, -1328,   575, -1328,   937,   947,   939,  3082,   257,
-     907, -1328,   209,   209,   907,   260, -1328,   209,   209,   889,
-   -1328, -1328,   209,   209, -1328,   827,  9404,  1653, 10351,   176,
-     238,  9404, -1328,  8539, -1328,   907, -1328,  7962, -1328,     8,
-    5680,  5680,  1653,  5204,   927, -1328,   546,   943,   945, -1328,
-     950,  3423,   381, -1328,  1033,  1653,  5680,   663,  2291,   663,
-     641,   477,   827, -1328, -1328,   604,   827, -1328, -1328, -1328,
-     742, -1328,   827,   266,  9444, -1328,   678,   967,   680,   968,
-   -1328,   807,   266, -1328, -1328,  3551,   266,   965,  9319,   187,
-   -1328,  1893, -1328,   436,   439,  1027, -1328,  1027,   966,  5841,
-   -1328,  1027, 10351, -1328, -1328,   972, -1328, -1328, -1328,   663,
-   -1328, 10276,   834, -1328,  5680,   707,  8168, -1328, -1328,   575,
-     973,   976,  1315,  1837, -1328, -1328, 10420,  5841, -1328, -1328,
-     979, -1328, -1328,   993, -1328,   979,   982,   493,  5841,   977,
-     974,    26,  1002,   998,  1007,  1008, -1328,  1011,  1012,  6470,
-   -1328,  5841, -1328,   695,  1078, -1328, -1328, -1328,   209,   209,
-    5376,  5841,  1015, -1328, -1328,   718, -1328,  5841, -1328, -1328,
-     733, -1328, -1328, -1328, -1328,   633,   633,    22,    22,   547,
-     547,   547,   547,   447,   447,   693,   771,   758,   785,   800,
-    5841,   106,  9444,  1023,  1035,  1036,   830, -1328, -1328, -1328,
-   -1328, -1328,  9444,   730, -1328,  7962, -1328,  6842,  8859, -1328,
-   -1328, -1328,   947,  9444,   952,  1039,  1040,  1041,  1042,  1044,
-    1046,  1047, -1328,  4747,  3082, -1328, -1328, -1328, -1328, -1328,
-   -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328,
-   -1328, -1328,   889, -1328, -1328, -1328,   907, -1328, -1328, -1328,
-   -1328, -1328, -1328, -1328, -1328, -1328, -1328,  1053,  1054, -1328,
-     126,  1015,  5204, -1328, -1328, -1328,  4621,  1051, -1328, -1328,
-   -1328, -1328,  1027,  6163,  1143, -1328, -1328, -1328, -1328,  1049,
-     126, -1328, -1328,   889, -1328, -1328,   889,  1060,   889, -1328,
-   -1328, -1328, -1328, -1328, -1328,  6718, -1328,   266, -1328, -1328,
-     444,   451,  6718,  2036,  5841,  3709, -1328, -1328,  1045,    40,
-    1045, -1328,  1027, -1328,   209, -1328, -1328,  9131,   897, -1328,
-   -1328, -1328,   906,  1061,  1056, -1328, -1328,  1069,  1072, -1328,
-     707,  1770, -1328,   275, -1328,  1837,   907, -1328, -1328,  1076,
-   10420,  8082,  8623,  1081, -1328, -1328,   734,  1058, -1328,  5841,
-    1084,   279,  1082, -1328,  1080,   663,  1080, -1328, -1328,  1080,
-   -1328,  1087,  1089,  1091,  1078, -1328, -1328, -1328,  4621, -1328,
-   -1328, -1328,  1088,  5841,   919, -1328,  5841, -1328,   919, -1328,
-   -1328,  5841, -1328,   611,   827, -1328, -1328, -1328, -1328, -1328,
-   -1328, -1328,   834,  8741, -1328, -1328,  6966,  1093, -1328,   640,
-     827, -1328,   652,   657,   827, -1328,   847,  4999, -1328, -1328,
-   -1328,  9444,  9444, -1328,  8243,  8243,  1096,  1094,  1095,  1099,
-   -1328,   347,    89,  1015, -1328,   919, -1328,  3423, -1328,  5841,
-     464, -1328,  6346,  1103,  1105,  9806,  1107,  1112,   627,   759,
-    1566,  5841,  1115,   266,  5841,  5841,  1092,  1104,   248,   228,
-     302,  1108,  1123,  1097, -1328, -1328, -1328,  1128, -1328, -1328,
-   -1328, -1328, -1328, -1328, -1328, -1328,  1119, -1328,  1027,  1138,
-    5841, -1328,  9444,  9444,   209,  1140, -1328,  9171, -1328, -1328,
-     806, -1328,  3709, -1328, -1328, -1328, -1328,  1893, -1328, -1328,
-    1136, -1328, -1328, -1328, -1328,  1144,  1770, -1328, -1328,  1127,
-   -1328,   979, -1328, -1328,  2291,  1145, -1328, -1328, -1328,   749,
-    1149, -1328,    26,  1146,  5841,  1132,    26,    26,  1157,   672,
-     827, -1328, -1328,   950,  5841,  1159,  1088, -1328,  1148, -1328,
-   -1328,  1158, -1328,    81, -1328,  1166,  1158, -1328,  1169, -1328,
-   -1328,   889,  1171,  6594,  1173,  1184,  1185, -1328, -1328,  1189,
-   -1328, -1328,   889, -1328, -1328, -1328, -1328,   889,  5841,  5841,
-     834,  1188, -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328,
-   -1328, -1328, -1328,  5841,  5841,  1190,  1194,  1158, -1328, -1328,
-    1027, -1328, -1328, -1328,  7733,  8082,  5841,  5841,  1274,  5841,
-   -1328, -1328,  1191, -1328,  1192,  5841,  1199,  1206,  5841,  1013,
-    1207,    37,  2395, -1328, -1328,  6163,  1211,   209,   482, -1328,
-   -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328,  9622, -1328,
-    8243,  1231, -1328, -1328,  8082,   492,   506, -1328,  1227,  1219,
-     742,  1242, -1328,   293, -1328, -1328, -1328, -1328,   889,  1238,
-   -1328, -1328,  1243,  1273, -1328, -1328,  1273,  1273,   919,  1245,
-    1200,  1221, -1328,  1247, -1328,  9444, -1328, -1328, -1328, -1328,
-    1251, -1328,  9444,  9444,  9444, -1328, -1328,  1252, -1328,  1254,
-    1257,  1259,   446,  7928,  8048, -1328, -1328, -1328, -1328,  1258,
-   -1328,  8318,   754,   762,  1267,   767,  3351, -1328, -1328,   507,
-   -1328, -1328,   782,  1269,  1270,   266,  1323,   868, -1328, -1328,
-    5841, -1328,  5841, -1328, -1328,  9806, -1328,  1272,  1280, -1328,
-   -1328, -1328,  1277, -1328, -1328, -1328, -1328, -1328, -1328,  8082,
-     742,  1284, -1328,  1264,   742,  9444, -1328, -1328, -1328,   919,
-   -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328, -1328,
-   -1328, -1328,  1285,  1288, -1328, -1328, -1328, -1328, -1328, -1328,
-   -1328,  1292, -1328,  1294, -1328,  9806,   292,  5841,  9806, -1328,
-    1297,  5841, -1328,   298,  1308,  1314, -1328, -1328,  1302,  1303,
-    1282,   817, -1328, -1328, -1328, -1328,  1653,  2291,  1300, -1328,
-     139,  5841, -1328,   792, -1328,  1158,   919,   919,  1310,  1312,
-    1313,  1317, -1328, -1328,  8243,  1309, -1328,  1388,  5841,  1299,
-   -1328, -1328,  9716, -1328,   793, -1328,  1298,  9806,  1304, -1328,
-   -1328,  1325, -1328,  1327, -1328,  1342,  1344, -1328,  1316,  8082,
-   -1328, -1328, -1328,   742,   663,  1334,  1318,  1337,  1343,  1158,
-    1158, -1328, -1328, -1328, -1328, -1328,  9806,   149, -1328,   165,
-   -1328, -1328,  7578, -1328, -1328,  1322,  5841, -1328,  5841,  7578,
-     266,  9319,   266,  9319,  1351, -1328,  1352, -1328, -1328,  1348,
-   -1328, -1328,   794, -1328, -1328, -1328, -1328,  1347,  1355, -1328,
-    5841,  5841, -1328, -1328,   893,   117, -1328, -1328,  1338, -1328,
-     893, -1328, -1328,  2215,   663, -1328, -1328,   266,  9319,   266,
-    9319,  1362,  1341,   663, -1328, -1328, -1328, -1328,  9716,  1365,
-     893,  7657,  5841,  9626,  1366,   893,  1367,  2215,  3729, -1328,
-   -1328, -1328,  1372, -1328, -1328, -1328, -1328,  8623, -1328, -1328,
-   -1328,  9488, -1328,  9716, -1328, -1328,  1353,  5938, -1328, -1328,
-    9626,   266,  3729,   266,  1376,  1377,   795, -1328,  9488, -1328,
-   -1328, -1328,  5938, -1328, -1328, -1328,   266,   266, -1328, -1328,
-   -1328, -1328, -1328, -1328, -1328, -1328
+    7275,  9192, -1276,    31, -1276, -1276, -1276, -1276, -1276, -1276,
+   -1276,    12, -1276, -1276, -1276, -1276, -1276, -1276, -1276, -1276,
+   -1276, -1276, -1276, -1276, -1276, -1276, -1276, -1276,    99, -1276,
+   -1276,  1603,   681,    89,  7517,   210, -1276, -1276, -1276, -1276,
+   -1276,   116, -1276, -1276, -1276,   429,   144, -1276, -1276, -1276,
+   -1276,  4252, -1276, -1276, -1276, -1276,    32,   152, -1276,  1816,
+   -1276, -1276, -1276, -1276,  1962,   287,    93,  5921, -1276, -1276,
+    4252,  1910, -1276, -1276,  1592,   306,  3283,   540,   736,  1592,
+    1249, -1276, -1276,    99, -1276,  1592,  1618, -1276,   235, -1276,
+     384,   511, -1276, -1276, -1276, -1276,   414,   152,    99, -1276,
+      99, -1276, -1276, -1276, -1276,  8217,  1816, -1276, -1276,  1816,
+   -1276,   362, -1276,  9392, -1276, -1276,  2239,  9432, -1276,  1003,
+    1003,  1003, -1276, -1276,  1463,    99, -1276,   471,   504,   530,
+   -1276, -1276, -1276,   542, -1276, -1276, -1276, -1276, -1276,   556,
+     565, -1276, -1276,    28,  8758,  2572,   309,   566,   591,   602,
+     611,   630,   646,  9465,  6899,   621, -1276,  9152, -1276, -1276,
+   -1276, -1276,   649, -1276,   146,  5718,  5718, -1276,   655,   206,
+   -1276, -1276, -1276, -1276,   679,   277,   321,   326, -1276, -1276,
+    1962,  2534,   677,   743, -1276,    23, -1276,    99,    99,   152,
+   -1276, -1276,    55, -1276,    99,    99, -1276,  3049,   700,   703,
+    1003,  6685, -1276, -1276, -1276,  4252, -1276, -1276,  1592, -1276,
+   -1276, -1276,   152, -1276,  1816,    32, -1276,  7868, -1276,  1003,
+    1003,  1003,   152, -1276,  1603, -1276,  3585, -1276, -1276,   684,
+    1003, -1276,  1003, -1276,   652,  1003, -1276,  1603,   709,   712,
+   -1276,  7517,   615, -1276, -1276, -1276,  9119, -1276, -1276,  8674,
+   -1276,   743,    35,  3690,  9432,  2239,  3049, -1276,    59, -1276,
+   -1276,  9392,  1816,   718, 10847,   681,   733, -1276, -1276,   582,
+   -1276,   359,   716,   770, 10233,   748,  3690, 10292, -1276,   750,
+   -1276, -1276, -1276, -1276, -1276, -1276, 10351, 10351,  8522,   144,
+   -1276, -1276, -1276, -1276, -1276, -1276, -1276,   786, -1276,  1681,
+    2360,  8758,  3690, -1276,   222,   671,   732,   427,   759,   755,
+     741,   747,   784,    38, -1276, -1276, -1276,   667, -1276, -1276,
+     145, -1276, -1276,  2572, -1276, -1276,   415,   774, -1276,   509,
+     774, -1276, -1276,  8217, -1276,   779,   788,  8876, -1276, -1276,
+     810,  1492,  8303,  6685,  1592, -1276,  1592,  1003,  1003, -1276,
+   -1276, -1276, -1276, -1276, -1276,  1003,  8217,  1816, -1276, -1276,
+    9465,  1201, -1276, -1276, -1276, -1276, -1276, -1276, -1276, -1276,
+   -1276,  4829,  3690, -1276, -1276, -1276, -1276, -1276, -1276, -1276,
+   -1276, -1276, -1276, -1276, -1276, -1276, -1276,   787,   794,   804,
+     807,   858,   830,   835,   845,  2534, -1276, -1276,    99,   827,
+     811,    32,   872, -1276, -1276,   876, -1276, -1276, -1276,  9119,
+   -1276, -1276, -1276, -1276, -1276,  3049, -1276,  8758,  8758, -1276,
+    1003,  2239,  6809,  8378, -1276, -1276, -1276, -1276,  9119,    35,
+   -1276, -1276,  1592,   152, -1276, -1276,  9119, -1276,  4366, -1276,
+   -1276,  1003,  1003,   116,  8758, -1276,   877, -1276,  1003, -1276,
+   -1276, -1276, -1276,  9703, -1276,   336, 10587, -1276,   152,   879,
+   -1276,  2239, 10627, 10410, -1276, -1276, -1276, -1276,   862,  3049,
+   -1276,  8378,   743,  7396, -1276, -1276, -1276, -1276,   620,   381,
+     869,   681,   890,   882,   911, 10847,  1023,  9392, -1276, 10847,
+   -1276, -1276, -1276, -1276,   405, -1276,   917,   770,   259,  8522,
+   -1276,  9550, -1276, -1276,  8522, -1276,  8640,  8522, -1276, -1276,
+     144, -1276,   435,   919,   921, -1276,  6651, -1276, -1276,   329,
+   -1276, -1276,  3690, -1276,   450,  3690, -1276, -1276, -1276, -1276,
+   -1276, -1276, -1276, -1276, -1276, -1276, -1276, -1276,  3690, -1276,
+   -1276,  3690,  3690,  3690,  3690,  3690,  3690,  3690,  3690,  3690,
+    3690,  3690,  3690,  3690,  3690,  3690,  3690,  3690,  3690,  3309,
+     667,  1689, -1276, -1276,    99,    99, -1276, -1276,  8758, -1276,
+   -1276,   876, -1276, -1276,   876, 10469, -1276, -1276,  9465,  6651,
+     923, -1276,  9432, -1276, -1276,   649, -1276,   927,  1763,   929,
+    2234,    63,   869, -1276,    99,    99,   869,    76, -1276,    99,
+      99,   876, -1276, -1276,    99,    99, -1276,   774,  9583,  1816,
+   10778,   446,   465,  9583, -1276,  8674, -1276,   869, -1276,  8217,
+   -1276,   294,  7988,  7988,  1816, 10174,   903, -1276,  1168,   913,
+     916, -1276,   932,  5718,   550, -1276,  1024,  1816,  7988,   615,
+    2239,   615,    79,   774, -1276, -1276,    80,   774, -1276, -1276,
+   -1276,  2239, -1276,   770, -1276,   774,   152,  9703, -1276,   498,
+     942,   515,   944, -1276,   779,   152, -1276, -1276,  9119,   152,
+     563,  5344,   941, 10778, -1276, -1276,   948, -1276, -1276, -1276,
+     615, -1276, 10703,   788, -1276,  7988,   693,  8303, -1276, -1276,
+     649,   945,   949,   620,  2900, -1276, -1276, 10847,  3690, -1276,
+   -1276,   681,   964,  3690, -1276,   681,   943, -1276, -1276,   971,
+   -1276,   943,   976,   359,  3690,   957,   956,    62,   980,   144,
+     975,   982,   988, -1276,   992,   994,  6651, -1276,  3690, -1276,
+    6072,  3690,   993, -1276, -1276,   595, -1276,  3690, -1276, -1276,
+     773, -1276, -1276, -1276, -1276,   222,   222,   671,   671,   732,
+     732,   732,   732,   427,   427,   759,   755,   741,   747,   784,
+    3690,   195,  9703,  1002,  1005,  1010,  1689, -1276, -1276, -1276,
+   -1276, -1276,  9703,  9703, -1276,  8217, -1276,  7023,  8994, -1276,
+   -1276, -1276,  1763,  9703,   887,  1011,  1012,  1015,  1017,  1018,
+    1021,  1029, -1276,  4594,  2234, -1276, -1276, -1276, -1276, -1276,
+   -1276, -1276, -1276, -1276, -1276, -1276, -1276, -1276, -1276, -1276,
+   -1276, -1276,   876, -1276, -1276, -1276,   869, -1276, -1276, -1276,
+   -1276, -1276, -1276, -1276, -1276, -1276, -1276,  1031,  1034, -1276,
+      32,   993, 10174, -1276, -1276, -1276,  4829,   996, -1276, -1276,
+   -1276, -1276,   681,  6383,  1087, -1276, -1276, -1276, -1276,  1014,
+   -1276, -1276, -1276,   876, -1276, -1276, -1276,   876,   743,  1037,
+     876, -1276, -1276, -1276, -1276, -1276, -1276,  6899, -1276,   152,
+   -1276,  1020,  9550, -1276,  1883, -1276,   395,   681, -1276,  1038,
+    1036, -1276, -1276,  1042,  1045, -1276,   693,  1694, -1276,   494,
+   -1276,  2900,   869, -1276, -1276,   882, -1276, -1276, -1276,   890,
+    1048, 10847,  9392,  8758,  1049, -1276, -1276,   599,  1032, -1276,
+    3690,  1052,   284,  1050, -1276,  1056,  6899,   615,  1056, -1276,
+   -1276,  1056, -1276,  4829, -1276, -1276, -1276,  1055,  3690,  1312,
+   -1276,  3690, -1276,  1312, -1276, -1276,  3690, -1276,   265,   774,
+   -1276, -1276, -1276, -1276, -1276, -1276, -1276,   788,  8876, -1276,
+   -1276,  7147,  1054, -1276,   273,   774, -1276,   289,   296,   774,
+   -1276,  1003,  6008, -1276, -1276, -1276,  9703,  9703, -1276,  8378,
+    8378,  1062,  1058,  1059,  1069, -1276,   528,    60,   993, -1276,
+    1312, -1276,  5718, -1276,  3690,   459, -1276,  6520,  1071,  1075,
+   10115,  1076,  1078,   495,   516,  1001,  3690,  1081,   152,  3690,
+    3690,  1064,  1066,   116,   161,   546,  1072,  1083,  1060, -1276,
+   -1276, -1276,  1086, -1276, -1276, -1276, -1276, -1276, -1276, -1276,
+   -1276,  1074, -1276,   681,  1096,  3690,  9703,  9703,    32,    99,
+    1099, -1276, -1276,  1883,   479,  1980,  3690,  2331,   485, -1276,
+   -1276,  1082,    14,  1082, -1276, -1276, -1276,    99,    99,   681,
+   -1276, -1276,  9277, -1276, -1276, -1276, -1276,  1101,  1694, -1276,
+   -1276,  1091, -1276,  1100, -1276,   943, -1276, -1276,  2239,  1107,
+   -1276, -1276, -1276,   616,  1115, -1276,    62,  1102,  3690,  1103,
+      62,    62,  1123,   932,  3690,  1124,  1055, -1276,  1148, -1276,
+   -1276,  1121, -1276,   215, -1276,  1127,  1121, -1276,  1134, -1276,
+   -1276, -1276,   876,  1135,  1136,  6775,  1150,  1154,  1155, -1276,
+      99,  1138, -1276, -1276, -1276,   876, -1276, -1276, -1276, -1276,
+   -1276, -1276,   876,  3690,  3690,   788,  1156, -1276, -1276, -1276,
+   -1276, -1276, -1276, -1276, -1276, -1276, -1276, -1276,  3690,  3690,
+    1164,  1169,  1121, -1276, -1276,   681, -1276, -1276, -1276,  3690,
+    3690,  1238,  3690, -1276, -1276,  1157, -1276,  1159,  3690,  1161,
+    1162,  3690,   946,  1166,    25,  2027, -1276, -1276,  6383,  1184,
+      99,   527, -1276, -1276, -1276, -1276, -1276, -1276, -1276,  9317,
+     534, -1276,   796,  1190,  1192,  1196, -1276,  2331, -1276,    99,
+   -1276, -1276, -1276, -1276, -1276, -1276, -1276, -1276,  9931, -1276,
+    8378, -1276,  1202, -1276, -1276,  9392,   537,   538, -1276,  1209,
+    1186,   770,  1207, -1276,   320, -1276, -1276,  1210, -1276, -1276,
+    1216,  1257, -1276, -1276,  1257,  1257,  1312,  1218,  2023,  2049,
+   -1276,  1227, -1276,  9703, -1276, -1276, -1276, -1276, -1276,  1228,
+   -1276,  9703,  9703,  9703, -1276, -1276,  1229, -1276,  1230,  1233,
+    1234,   575,  8063,  8183, -1276, -1276, -1276, -1276,  1236, -1276,
+     647,   658,  1240,   665,  6215, -1276, -1276,   561, -1276, -1276,
+     670,  1241,  1246,   152,  1300,   854, -1276, -1276,  3690, -1276,
+    3690, -1276, -1276, 10115, -1276,  1255,  1256, -1276, -1276,   312,
+     774, -1276, -1276,  1883, -1276, -1276, -1276,  1245, -1276, -1276,
+   -1276, -1276, -1276, -1276,  9392,   770,  1261, -1276,  1239,   770,
+   -1276, -1276, -1276,  1312, -1276, -1276, -1276, -1276, -1276, -1276,
+   -1276, -1276, -1276, -1276, -1276, -1276,  1262,  1267, -1276, -1276,
+   -1276, -1276, -1276, -1276, -1276,  1270, -1276,  1273, -1276, 10115,
+     240,  3690, 10115, -1276,  1276,  3690, -1276,  7793,  9392, -1276,
+     271,  1291,  1294, -1276, -1276,  1282,  1288,  1272,   818, -1276,
+   -1276, -1276, -1276, -1276, -1276,   876, -1276, -1276,  1816,  2239,
+    1287, -1276,   339,  3690, -1276,   690,  1121,  1312,  1312,  1289,
+    1296,  1299,  1304, -1276, -1276,  8378,  1303, -1276,  1370,  3690,
+    1286, -1276, -1276, 10025, -1276,   707, -1276,  1293, 10115,  1298,
+    8453, -1276, -1276,  1310, -1276,  1311, -1276,  1330,  1335, -1276,
+    1302,  9703,  9392, -1276, -1276, -1276,   770,   615,  1322,  1305,
+    1323,  1121,  1121, -1276, -1276, -1276, -1276, -1276, 10115,   147,
+   -1276,   420, -1276, -1276,  7638, -1276, -1276,  1313,  3690, -1276,
+    3690,  7638,   152,  9550,   152,  9550,  1326, -1276,  1332, -1276,
+   -1276, -1276,  1328, -1276, -1276,   714, -1276, -1276, -1276,  1337,
+    1342, -1276,  3690,  3690, -1276, -1276,   883,    84, -1276, -1276,
+    1324, -1276,   883, -1276, -1276,  2177,   615, -1276, -1276,   152,
+    9550,   152,  9550,  1334,  1349,  1336,   615, -1276, -1276, -1276,
+   -1276, 10025,  1345,   883,  7717,  3690,  9935,  1351,   883,  1357,
+    2177,  2664, -1276, -1276, -1276,  1359, -1276, -1276, -1276, -1276,
+   -1276,  8758, -1276, -1276, -1276,  9797, -1276, 10025, -1276, -1276,
+    1346,  9707, -1276, -1276,  9935,   152,  2664,   152,  1369,  1372,
+     730, -1276,  9797, -1276, -1276, -1276,  9707, -1276, -1276, -1276,
+     152,   152, -1276, -1276, -1276, -1276, -1276, -1276, -1276, -1276
 };
 
@@ -1767,29 +1787,29 @@
 static const yytype_int16 yypgoto[] =
 {
-   -1328,  4218,  2910, -1328,  2669, -1328,   454,     0,  -147, -1328,
-   -1328,   463,  -522,  -472,  -935, -1037, -1328,  -158,  4217,  1113,
-   -1328,   115,   430,   459,   419,   456,   932,   938,   935,   940,
-     941, -1328,  -236,  -629,  5014,  -930, -1328, -1328,   543,  -135,
-    -872,  -345, -1328,  1349, -1328,   324,  -967, -1328, -1328,    49,
-   -1328, -1273,  -818,   170, -1328, -1328, -1328, -1328,    -5, -1312,
-   -1328, -1328, -1328, -1328, -1328, -1328,   244, -1175,    35, -1328,
-    -502, -1328,   424,   219, -1328,    95, -1328,  -308, -1328, -1328,
-   -1328,   479,  -837, -1328, -1328,     4,  -995,   175,  1139, -1328,
-   -1328, -1328,  -119, -1328,    57,   315,  -193,  1470,  3860, -1328,
-   -1328,    63,   160,   685,  1861, -1328,  1798, -1328, -1328,    18,
-    1913, -1328,  2277,  2037, -1328, -1328, -1328,  -545, -1328,   862,
-     867,   458,   646,   -93, -1328, -1328, -1328,   856,   647,  -449,
-   -1328,  -478,  -351,  -615, -1328, -1328,  -928,  -975,    -3,   985,
-     981,   776, -1328,   107,   366,   -24,  -195,  -132,   609,   706,
-   -1328,   926, -1328,  2605,  1917,  -447,   855, -1328, -1328,   645,
-   -1328,  -234, -1328,  -136, -1328, -1328, -1328, -1230,   360, -1328,
-   -1328, -1328,  1098, -1328,    12, -1328, -1328,  -835,  -110, -1327,
-    -138,  2640, -1328,  3073, -1328,   848, -1328,  -166,    72,  -183,
-    -179,  -176,     2,   -41,   -36,   -32,    62,    10,    19,    21,
-     -98,  -172,  -171,  -170,  -167,  -307,  -494,  -481,  -476,  -551,
-    -310,  -510, -1328, -1328,  -515,  1010,  1014,  1017,  1772,  4826,
-    -557,  -496,  -482,  -480,  -543, -1328,  -503,  -723,  -721,  -720,
-    -573,  -287,  -290, -1328, -1328,   226,   457,    -9, -1328,  3666,
-     -27,  -611,  -257
+   -1276,  4372,  2980, -1276,  2546, -1276,   133,     0,   353, -1276,
+   -1276,   484,  -503,  -488,  -816,  -925, -1276,  -155,  5343,   687,
+   -1276,    -8,   438,   439,   406,   473,   936,   937,   938,   940,
+     935, -1276,    16,  -629,  5085,  -872, -1276, -1276,   571,   711,
+    -953,   442, -1276,   143, -1276,   337, -1218, -1276, -1276,    43,
+   -1276, -1095,  -891,   157, -1276, -1276, -1276, -1276,   -28, -1182,
+   -1276, -1276, -1276, -1276, -1276, -1276,   239, -1036,    39, -1276,
+    -292, -1276,   428,   203, -1276,    73, -1276,  -329, -1276, -1276,
+   -1276,   497,  -831, -1276, -1276,     8, -1177,   119,  2152, -1276,
+   -1276, -1276,  -200, -1276,   218,   464,  -197,  1593,  4090, -1276,
+   -1276,    54,    10,    81,   870, -1276,  1757, -1276, -1276,     4,
+    2080, -1276,  2209,   245, -1276, -1276, -1276,  -810, -1276,   651,
+     492,   236,   490,  -591, -1276, -1276,   829,   640,  -247, -1276,
+    -487,  -338,   961, -1276, -1276,  -885,  -918,  -131,   -60, -1276,
+     462, -1276,  1284,  -121,  -305,  -157,  -103,   614,   708, -1276,
+     905, -1276,  2602,  1460,  -448,   848, -1276, -1276,   661, -1276,
+    -437, -1276,   217, -1276, -1276, -1276, -1269,   341, -1276, -1276,
+   -1276,  1085, -1276,     6, -1276, -1276,  -796,   -87, -1275,  -158,
+    2622, -1276,  4369, -1276,   843, -1276,    21,   165,  -174,  -172,
+    -169,     2,   -40,   -32,   -30,  1684,    26,    53,    66,   110,
+    -166,  -163,  -160,  -159,  -293,  -485,  -480,  -434,  -541,  -314,
+    -513, -1276, -1276,  -535,  1006,  1008,  1016,  1639,  4667,  -574,
+    -533,  -528,  -509,  -421, -1276,  -961, -1011, -1007, -1005,  -575,
+    -287,  -299, -1276, -1276,   298,   238,   -63, -1276,  3674,   814,
+    -613,  -492
 };
 
@@ -1797,729 +1817,735 @@
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -530
+#define YYTABLE_NINF -528
 static const yytype_int16 yytable[] =
 {
-      50,   114,    99,   398,   151,   116,   451,   399,   268,   152,
-     400,   760,   427,   153,   401,   402,   403,   746,    78,   404,
-     951,   406,   952,   953,   167,   438,  1055,  1173,  1057,   857,
-    1158,   114,   114,  1126,    50,    52,    99,   382,   383,   605,
-     735,   817,   600,   834,   720,    50,   145,   816,   725,   880,
-     409,    50,    78,   162,   787,   154,   820,    65,   592,    50,
-     911,  1430,   827,    71,   155,    50,   156,   194,    50,    52,
-     217,    50,    98,   227,   624,   220,  1156,  1157,   628,  1368,
-    1167,  1235,    33,   398,   114,   114,   808,   399,   167,   407,
-     400,    65,   424,   445,   401,   402,   403,    71,   261,   404,
-     809,   406,   805,  1290,  1190,  1191,    98,   203,    50,   663,
-     291,    50,   458,   163,   810,   806,   811,   150,    50,  1434,
-     807,   330,   474,    98,   473,   475,    33,   195,   672,   707,
-     218,   124,   566,   228,  1430,   504,   676,   190,   469,   143,
-      98,   907,   939,    98,   717,   151,   552,   553,   342,    50,
-     152,   162,   847,   847,   153,   125,   410,   281,   204,  1187,
-      72,    50,   518,   372,  -239,  -239,   567,   972,   847,   407,
-     951,  1240,   952,   953,  1291,    58,   117,   977,   901,  1449,
-     714,  1518,   849,   434,  1230,  1172,    50,    50,   988,   162,
-    1163,   242,   245,   708,    72,   408,   154,   866,   253,  1241,
-     410,  1320,    50,  1323,  1325,   155,   936,   156,  1533,    58,
-      50,   163,   162,   330,   661,  1434,  1164,   282,   805,    50,
-    1434,    98,    50,   373,   441,   151,   847,   741,   213,   114,
-     152,   806,   144,    98,   153,  1158,   807,  -239,   169,   658,
-    1434,   971,   474,   211,   114,   434,   221,  1434,   114,   163,
-    1460,    33,    50,   114,    99,   919,    33,  1000,   397,   190,
-    1413,   820,   170,   999,   461,  1071,    50,    50,  1476,   162,
-      78,   976,   163,    50,  1414,    78,  1164,   164,    33,   848,
-     848,  1173,    98,   167,   442,   650,  1461,    52,   605,  1158,
-     666,   668,   987,   837,    98,   848,   796,   838,   469,    33,
-    1462,  1080,    33,  1504,   157,  1506,   809,   659,   805,    65,
-    1103,   376,   658,   665,   470,    71,   118,   469,   594,   670,
-     810,   806,   811,   146,    98,   469,   807,   377,   418,   592,
-     410,    50,   585,   372,   592,  1156,  1157,   843,   477,  1388,
-    1389,   164,   512,   821,  1067,  1388,  1389,   824,    50,    50,
-     479,   455,   410,   848,   492,   839,   729,   493,  1055,   840,
-    1057,   730,   148,   -10,   817,    50,   160,   887,   841,    50,
-     518,   818,   844,   597,   825,   518,   597,   287,   518,   637,
-     659,   731,   440,   575,  1375,   172,  1153,  1154,   707,   576,
-      43,    44,   839,   373,  1105,    50,  1087,   439,   330,   330,
-     509,   667,   669,    98,  1349,    50,   182,   372,  1313,  1158,
-     834,  1390,    72,   202,  1106,   386,   513,  1399,   378,  -294,
-     112,   599,   259,    50,   809,   547,   548,    58,  1314,    50,
-     160,   387,   781,    43,    44,    78,   433,  1173,   810,  1351,
-     811,  1419,  1420,   577,  1173,   410,   248,  1201,  1202,  1144,
-    1146,  1112,   708,   910,    78,   113,  1425,   108,   108,   696,
-     547,   753,    78,   326,  -112,   114,   330,   373,  -112,   724,
-      50,   251,   340,   389,   470,  1221,  -525,   190,    50,  1398,
-     372,   253,    50,  1091,    99,   330,   638,    50,   737,   390,
-     114,   108,   114,   470,  1124,   547,  1173,   859,   433,   636,
-      78,   470,  1229,   496,   605,   980,   112,   998,   391,   858,
-     213,   264,   870,   877,   393,   898,   860,    52,  1044,    43,
-      44,   429,   -12,   522,   392,   432,  1517,   114,   108,  1000,
-     394,   580,   114,   410,  1265,  1266,   164,   705,   868,    65,
-    -448,   707,   556,   557,   970,    71,  1528,   758,   112,   330,
-     141,   142,   791,  1532,    98,   326,   469,   902,   333,   599,
-     904,    43,    44,  1338,  1468,   902,  1469,  1339,   497,  1112,
-     498,   499,   904,   903,   901,  -449,   905,   558,   559,  1003,
-     114,  1068,   916,   900,   940,  1170,   277,   432,  1069,   835,
-     487,   871,   244,   410,   594,  1466,    50,   719,    50,   723,
-    1219,  1171,  1466,  1170,  1223,   708,     2,   207,     4,     5,
-       6,     7,   520,  1304,   253,   332,  1011,    50,   998,  1296,
-    1515,   112,   279,   141,   142,   160,   280,  1306,   741,  1305,
-    1327,   213,    50,   334,    43,    44,   114,  1329,  1330,  1331,
-     554,   555,    72,  1307,  1352,    50,  1488,   114,    50,   114,
-     798,   335,  1493,  1155,  1514,  1010,   584,    58,   910,   336,
-     589,   696,   853,   337,   762,   763,   764,   677,   804,  1088,
-     599,   338,  1513,   576,    37,  1061,    38,  1520,   685,   622,
-    1178,    50,   371,   626,   698,   114,   568,   114,   410,   375,
-     699,   114,   388,    78,    47,    48,   592,   384,  1099,   114,
-    1374,   396,    39,   910,   175,   176,    42,   463,   408,   108,
-     398,   425,    50,    50,   399,    43,    44,   400,   874,    78,
-     410,   401,   402,   403,  1016,  1129,   404,   410,   715,   406,
-     426,   522,   470,   522,   716,  1127,   522,   448,   112,   522,
-     326,   326,  1415,   854,  -372,     2,   207,     4,     5,     6,
-       7,    43,    44,   899,  1140,   549,   410,   230,   470,  1427,
-     231,   550,   551,   235,  1181,   237,  1143,   681,   597,   726,
-    1361,  1145,   246,   597,   951,   727,   952,   953,   440,   696,
-     118,   740,   707,  1011,   804,   599,  1226,   741,   410,   696,
-     560,   561,   906,   881,   908,   883,   705,   407,   455,   741,
-     696,   741,    50,  1148,   459,  1074,   487,  1074,   326,   743,
-     487,   410,   460,    37,    50,    38,  -401,    47,    48,   482,
-     520,   920,   520,   597,   503,   520,   291,   326,   520,    47,
-      48,  1486,  1427,   965,    39,   178,   175,   176,    42,   966,
-       8,     9,    10,    11,    12,   978,   708,    43,    44,  1101,
-    1044,   699,   213,   969,   966,   966,   637,     8,     9,    10,
-      11,    12,   114,  1041,  1217,   959,   213,   507,   910,  1345,
-     576,   732,    33,   733,   804,   741,   734,  1346,    -3,   738,
-     512,    78,  1348,   741,   262,  1168,   599,   263,   741,    33,
-     563,   326,   525,    50,   562,    50,  1183,  1353,   230,   565,
-      36,   794,   114,   741,   685,   330,   658,  1416,  1435,  1482,
-    1538,   898,  1341,  1413,   741,  1483,   576,    36,   564,   113,
-      65,   332,   410,   708,   586,    50,    71,   910,   910,  1358,
-    1359,   833,   253,   332,   410,  1092,   589,  1408,   966,   108,
-    1388,  1389,   842,   339,   568,   114,   410,   651,   798,   705,
-    1362,    -3,    47,    48,   652,   940,   835,   213,   637,   940,
-     940,  1236,  1237,   638,   114,  1070,   653,   899,   114,  1021,
-    1500,   418,   654,   410,   659,   769,   770,   771,   772,   900,
-     655,   754,   765,   766,  1212,   656,   759,     2,   207,     4,
-       5,     6,     7,   681,   112,   437,   657,   599,   696,   696,
-    1387,  1117,   660,  1395,  1118,   258,  1119,    43,    44,  1076,
-     479,   332,   410,   767,   768,   114,   773,   774,   229,  1112,
-     662,   686,    39,    72,   691,  1041,    42,   687,    50,    50,
-      50,   487,  -243,   689,   463,    43,    44,   230,    58,   235,
-      78,  1272,  1273,   717,  1275,   728,   799,  1433,   742,   481,
-    1279,   750,  1437,  1282,   801,    37,   812,    38,   114,   696,
-     696,   802,   -14,   597,   862,   638,   818,   332,   597,    47,
-      48,   856,    50,  1311,  1283,  1284,  1285,    50,   -15,   470,
-     855,  1459,   882,   884,   889,  1175,   909,  -422,     8,     9,
-      10,    11,    12,  -529,    50,    39,   924,   934,   547,    42,
-     716,   867,   112,   869,   141,   142,  1093,   932,    43,    44,
-     979,   938,   937,    51,   115,    43,    44,   944,   114,   945,
-      33,  -295,   946,   947,   178,   230,   948,   949,     8,     9,
-      10,    11,    12,   685,    45,   910,   963,   509,   973,    59,
-      59,   625,    47,    48,   899,   629,   440,    51,    36,   899,
-     974,   975,   910,   915,   989,   990,   991,   992,   149,   993,
-      33,   994,   995,  1369,    51,  1021,  1527,  1369,  -410,  -409,
-     114,  1018,  1527,    59,  1058,  1064,  1081,  1082,   187,   220,
-     894,   210,    72,  1527,    51,  1060,  1083,  1527,    36,  1084,
-     705,  1090,   743,  1102,   410,  1041,  1100,    58,  1104,   958,
-      47,    48,  1109,  1107,  1110,  1300,  1111,    59,  1138,  1114,
-      59,  1159,  1394,    78,  1162,  1160,  1161,  1176,  1092,  1177,
-     115,  1179,   681,   112,   910,   910,  1180,    -9,   115,  1188,
-    1117,   267,   272,  1118,  1193,  1119,    43,    44,   114,  -445,
-     114,   114,   696,   -11,   741,   487,  1094,   326,    -3,   696,
-     696,   696,    65,  1199,  1197,  1204,  1207,  1411,    71,  1209,
-     492,   310,   149,  1220,  1234,  1213,  1450,   705,  1218,  1222,
-     115,   345,  1225,  1526,   210,   112,  1231,  1270,   112,  1238,
-     141,   239,  1117,  1242,  1244,  1118,  1246,  1119,    43,    44,
-    1247,    43,    44,   685,    78,  1041,   112,   348,   833,   187,
-     187,  1248,  1249,  1117,  1251,  1258,  1118,  1267,  1119,    43,
-      44,  1268,   696,  1092,   398,   267,  1322,   240,   399,   114,
-     108,   400,   241,    51,  1274,   401,   402,   403,  1277,  1278,
-     404,  1294,   406,   470,   213,   210,  1280,  1324,   131,  1175,
-     132,   133,   134,  1281,  1289,  1041,  1302,  1308,  1041,   211,
-     221,    43,    44,   310,  1310,    72,   658,  1312,  1316,  1318,
-    1317,    59,  1321,  1499,  1326,    51,    50,    50,  1328,  1334,
-      58,  1335,  1336,   272,  1337,  1344,   114,   114,   272,   267,
-     267,  1347,   681,  1354,  1355,   115,  1285,  1363,   108,  1093,
-      39,    59,  1041,   836,    42,  1364,  1365,  1041,  1371,  1108,
-     407,  1372,  1382,    43,    44,  1383,   174,  -411,   850,  1401,
-     310,  1386,  1397,  1092,   114,  1403,  1405,  1406,  1120,  1407,
-    1412,   865,  1120,   310,   659,  1421,  1041,  1422,  1423,   712,
-    1339,   440,  1424,  1426,  1431,  1436,    72,    47,    48,   569,
-    1440,  1438,  1442,  1444,   149,  1446,   439,   697,   254,  1453,
-      78,    58,  1455,  1448,   115,  1454,   151,    78,   345,  1467,
-    1456,   152,   598,   616,  1484,   153,  1477,  1479,  1481,  1120,
-      68,   119,  1485,    50,   114,  1492,  1507,   621,  1508,   108,
-     330,   621,  1521,   114,  1093,  1512,  1519,  1523,  1041,   470,
-    1529,  1536,  1537,  1041,   775,  1175,   470,    50,    50,   777,
-     162,   776,  1175,  1192,    68,   778,  1116,   779,   267,    78,
-    1487,  1041,    39,  1041,   175,   176,    42,  1041,   187,  1293,
-    1041,   161,    50,  1400,   372,    43,    44,  1539,  1041,  1094,
-    1357,  1224,  1041,  1373,  1470,  1206,   267,  1198,   310,   310,
-     890,   222,   267,   416,   621,   891,  1075,   912,   470,  -296,
-     112,   371,   141,   142,  1175,  1079,     8,     9,    10,    11,
-      12,   793,  1017,    43,    44,   115,   435,  1113,   861,   477,
-     348,   926,  1120,  1089,  1303,   935,   443,   260,   783,     0,
-     710,     0,   784,   267,  1093,   785,     0,     0,    33,   721,
-       0,   267,    72,   621,   722,    51,     0,     0,     0,    72,
-     713,     0,     0,     0,     0,     0,   115,    58,     8,     9,
-      10,    11,    12,     0,    58,     0,    36,     0,   310,   331,
-     115,    59,     0,   310,  1094,   310,   310,   260,   350,     0,
-       0,     0,   108,   744,     0,     0,     0,   345,     0,     0,
-      33,    39,     0,   175,   176,    42,   519,     0,     0,   697,
-       0,    72,   108,     0,    43,    44,     0,   405,     0,     0,
-       0,     0,     0,   348,     0,     0,    58,  1474,    36,  1474,
-       0,   108,   423,    39,     0,   428,   430,    42,     0,     0,
-     161,   569,   569,     0,     0,     0,    43,    44,  1185,   310,
-       0,     0,  1120,     0,  1120,  1120,     0,     0,     0,   621,
-     345,   446,     0,   616,  1474,   449,  1474,   450,     0,   598,
-       0,   598,    45,     0,     0,     0,   457,     0,     0,     0,
-      47,    48,    68,     0,  1094,     0,   348,   471,    39,   621,
-     175,   176,    42,   108,   621,     0,   616,   478,     0,     0,
-     621,    43,    44,   621,   621,   430,     0,     0,     0,     0,
-      39,     0,   175,   176,    42,     0,  1473,     0,  1473,   621,
-       0,   267,     0,    43,    44,     0,   108,   697,     0,   348,
-     348,     0,     0,  1120,     0,     0,     0,   697,     0,     0,
-       8,     9,    10,    11,    12,   348,     0,     0,   697,   375,
-     674,   115,     0,  1473,   895,  1473,     0,     0,    76,     0,
-       0,     0,     0,     0,  1182,  1184,  1186,     0,     0,     0,
-       0,   260,    33,     0,     0,   590,   700,   621,   921,   616,
-       0,   618,   326,     0,     0,   713,   713,     0,     0,     0,
-    1120,  1120,    76,     0,   623,     0,     0,     0,   623,     0,
-      36,     0,     0,   348,     0,     0,     0,     8,     9,    10,
-      11,    12,   345,     0,   519,     0,   744,   744,     0,   519,
-       0,     0,   519,  -297,     0,     0,   108,     0,  1451,   223,
-       8,     9,    10,    11,    12,     0,     0,     0,     0,    33,
-       0,     0,     0,     0,   920,     0,   597,   471,     0,   108,
-       0,     0,    47,    48,     0,     0,   108,     0,     0,   569,
-       0,   350,    33,     0,     0,     0,   471,    36,   621,     0,
-     983,     0,    39,    79,   471,   598,    42,     0,     0,     0,
-       0,     0,     0,     0,     0,    43,    44,   598,  1501,   214,
-      36,     0,   692,     0,     0,   430,     0,  1509,   233,     0,
-       0,     0,     0,     0,     0,     0,     0,    79,   108,     0,
-     706,   712,    68,     0,     0,     0,   353,     0,     0,    47,
-      48,   430,   412,     0,     0,   430,     0,     0,    39,   420,
-     184,   185,    42,     0,     0,     0,   310,     0,     0,     0,
-     214,    43,    44,     0,   224,   216,   697,   697,     0,     0,
-       0,     0,     0,     0,   350,     0,     0,     0,   345,     0,
-       0,   243,    59,     0,     0,   345,   895,   893,   895,   410,
-       0,     0,   879,     0,     0,    47,    48,     0,     0,     0,
-     115,   886,   214,     0,   348,   888,     0,     0,   894,   447,
-       0,     0,     0,   921,   921,     0,   216,     0,   713,   786,
-       0,   412,     0,     0,   115,   310,     0,   697,   697,     0,
-      76,     0,     0,     0,     0,    76,   623,   797,     0,     0,
-      39,     0,   184,   185,    42,     0,     0,   744,   814,     0,
-      59,   355,     0,    43,    44,     0,     0,     0,   216,     0,
-       0,     0,     0,   214,     0,     0,   590,     0,     0,     0,
-      39,   590,   184,   185,    42,     0,   345,   623,   574,   186,
-     350,   350,     0,    43,    44,   215,   578,    47,    48,   581,
-       0,    39,     0,   184,   185,    42,   350,   621,   621,     0,
-       0,   214,     0,     0,    43,    44,   214,     0,     0,   596,
-       0,   597,     0,     0,   692,   310,     0,    47,    48,   216,
-       0,     0,  1410,   348,   348,   471,     0,     0,     0,   223,
-     893,     0,   410,     0,     0,     0,   215,     0,    47,    48,
-       0,    59,     0,     0,     0,    79,     0,     0,     0,   412,
-      79,   471,     0,   420,   350,     0,     0,   216,     0,     0,
-     115,     0,   216,   925,     0,   895,   430,     0,     0,     0,
-     895,     0,     0,  1301,     0,     0,     0,     0,   215,   921,
-       0,     0,     0,     0,     0,     0,     0,   267,     0,   706,
-       0,   214,     0,     0,   954,    76,   534,   535,   536,   537,
-     538,   539,   540,   541,   542,   543,   544,     0,     0,   353,
-     697,     0,     0,     0,    76,     0,  1066,   697,   697,   697,
-       0,     0,    76,     0,     0,     0,   345,     0,     0,   412,
-     545,     0,   692,     0,     0,     0,     0,     0,     0,   215,
-     353,     0,   692,     0,   224,   623,     0,   216,   986,     0,
-       0,     0,     0,   692,     0,     0,     0,    81,   353,     0,
-      76,     0,     0,   997,     0,     0,     0,   272,   115,     0,
-      39,   214,   184,   185,    42,     0,     0,   215,     0,     0,
-     697,     0,   215,    43,    44,     0,     0,   214,   310,     0,
-       0,    81,     0,    59,    59,     0,     0,     0,     0,     0,
-       0,     0,   353,   621,     0,     0,     0,   115,     0,  1497,
-      79,   410,   214,    68,    59,     0,     0,    47,    48,     0,
-     574,   574,     0,     0,   355,     0,     0,   216,   225,    79,
-       0,     0,     0,    59,     0,   797,     0,    79,     0,     0,
-       0,     0,   706,     0,     0,  1072,    39,     0,   184,   185,
-      42,     0,     0,     0,     0,   355,   621,   621,     0,    43,
-      44,     0,  1189,     0,   272,   353,     0,   215,   216,   310,
-       0,  1086,     0,   355,     0,    79,     0,     0,     0,     0,
-     430,   119,   348,   348,     0,   266,     0,     0,     0,     0,
-      59,     0,     0,    47,    48,    59,     0,     0,     0,     0,
-       0,     0,   115,   872,     0,     0,   526,   875,   353,   353,
-     527,   528,   529,     0,     0,   356,     0,   355,     0,     0,
-       0,     0,     0,     0,   353,     0,     0,     0,    59,     0,
-       0,   214,     0,   590,   530,     0,   531,     0,   532,   533,
-       0,     0,   353,     0,     0,     0,   428,   215,     0,     0,
-       0,   692,   692,    76,   350,   350,     0,     0,     0,   214,
-     267,   526,     0,     0,   214,   527,   528,   529,     0,     0,
-       0,     0,  1174,     0,     0,     0,     0,   621,     0,    76,
-     355,     0,   353,     0,     0,     0,     0,   216,   215,   530,
-       0,   531,     0,   532,  1292,     0,     0,     0,     0,     0,
-       0,     0,   115,   348,     0,     0,     0,     0,     0,    81,
-       0,     0,   692,   692,    81,   216,     0,   353,     0,     0,
-     216,     0,     0,   355,   355,   115,     0,     0,    59,     0,
-       0,     0,   115,   214,   115,     0,   115,     0,   574,   355,
-       0,     0,     0,     0,     0,     0,     0,   214,     0,     0,
-       0,    59,     0,     0,     0,     0,     0,   355,    59,     0,
-     353,     0,     0,     0,     0,     0,  1498,     0,    79,     0,
-     353,   115,     0,   115,     0,     0,   223,     0,     0,     0,
-       0,   353,     0,   706,   115,    88,     0,     0,     0,   216,
-    1498,  1498,     0,     0,    79,     0,     0,   355,     0,     0,
-     310,     0,     0,   216,     0,     0,     0,   215,   225,     0,
-      59,     0,     0,     0,  1356,  1498,     0,     0,     0,    88,
-       0,     0,     0,     0,     0,  1271,     0,     0,     0,     0,
-       0,     0,   355,     0,     0,   215,     0,     0,   214,     0,
-     215,    76,     0,     0,     0,    68,     0,     0,   126,   129,
-     130,   412,     0,     0,     0,     0,   226,     0,   692,     0,
-     706,     0,     0,   353,   119,     0,     0,     0,     0,     0,
-     353,     0,     0,     0,    81,   355,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   355,     0,     0,   356,     0,
-       0,   224,     0,    81,   216,   692,   355,     0,     0,     0,
-       0,    81,   692,   692,   692,     0,     0,     0,   177,   215,
-       0,     0,     0,   350,   350,     0,     0,     0,     0,   356,
-     255,     0,   256,   215,     0,  1130,  1174,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   356,     0,    81,
-       0,  1141,     0,   363,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    79,   177,     0,   119,
-     177,     0,     0,     0,     0,   692,     0,     0,     0,  1471,
-       0,  1475,     0,     0,     0,     0,     0,     0,   355,   353,
-     353,   356,   353,   353,     0,   355,     0,     0,     0,     0,
+      50,   112,    97,   419,    77,   147,   388,   670,   389,   114,
+      71,   390,  1020,   148,   391,   149,   797,   392,   722,   837,
+     393,   394,   740,   353,  1183,   401,   767,   597,  1184,   257,
+    1185,   112,   112,   814,    50,  1370,    97,   706,    77,    52,
+     141,   711,   250,  1160,    71,    50,   460,  1022,   592,   796,
+     584,    50,  1133,   158,    70,   789,    33,   616,   430,    50,
+     790,   620,   374,   375,    50,    33,   189,    50,  1052,   212,
+      50,   150,   222,    52,   898,   788,  1188,   208,   215,   791,
+     656,   388,   272,   389,  1131,  1132,   390,  1346,    70,   391,
+     334,  1278,   392,   464,   466,   393,   394,    33,   151,   665,
+     801,    33,   400,   785,   804,    33,    50,   669,   786,    50,
+     416,   152,   660,   662,  1432,   122,    50,  1096,    33,    58,
+     115,    33,    33,   198,   112,   821,   123,  1163,  1164,   824,
+     402,  -240,  -240,   688,   111,   827,   827,   242,   558,   402,
+     147,    33,   273,  1452,   165,    50,   282,   158,   148,   465,
+     149,   827,   225,    58,   787,   226,  1147,    50,   230,   364,
+     232,  1138,  1279,  1223,  1142,    96,   235,   514,   166,   410,
+     800,   402,   559,   470,   199,   402,   807,   798,   910,   589,
+      50,    50,   710,   158,   689,   695,   206,  1139,  1432,   216,
+     805,  1148,   589,   850,   854,   402,   402,    50,   827,    96,
+     170,   724,   396,   140,  -240,    50,   150,   158,   785,   460,
+     146,   907,  1218,   786,    50,   147,    96,    50,    64,   433,
+     965,   142,  1179,   148,   112,   149,  1292,   432,   460,   185,
+     144,   941,    96,   151,   112,    96,   460,   112,   106,   106,
+     243,    50,   112,    97,   654,    77,   152,   452,  1462,   789,
+      77,    71,    64,   964,   790,    50,    50,  1346,   158,   787,
+     567,   153,    50,   771,  1346,   112,   568,   368,   503,   952,
+     577,   168,   106,   791,  1139,   506,   597,   396,  1521,   776,
+      52,  1077,  1133,   369,   828,   828,  1063,  1389,  1390,   225,
+     197,   397,   353,   539,   540,    70,   -10,   785,  1436,  1532,
+     828,  1314,   786,  1317,  1319,  1228,  1536,    33,   106,  -295,
+      96,  1343,   210,   797,  1522,    33,   728,  1346,  1389,  1390,
+     823,   584,    96,    50,   968,   364,   584,   378,   658,   539,
+     936,    33,   408,  1229,   663,  1133,   431,  1020,    33,   869,
+      50,    50,  1537,   379,   541,   387,   185,   828,   787,   160,
+     542,   543,   208,   789,    33,   427,   237,    50,   790,  1391,
+      58,    50,   210,   800,   539,   435,   397,  1131,  1132,   490,
+      96,   629,  1022,   814,   716,   454,   829,   791,   718,  1099,
+     720,   402,    96,   721,   240,   353,   725,  1112,   688,   402,
+    1401,   846,  1399,   678,   717,    50,  1436,   364,   381,  1079,
+    1060,  1436,   210,  1116,   110,   589,    96,  1186,   465,  1478,
+    1119,   160,   589,    77,   382,    50,   649,    43,    44,  1080,
+     468,    50,  1436,   242,   324,   225,  1362,   230,   402,  1436,
+     698,   513,    77,  1345,   491,  1308,   492,   493,   885,   689,
+      77,   437,   383,  1094,  1507,   733,  1509,   385,   353,  1212,
+    1192,   679,  1192,  1065,   449,  1309,   112,   680,   384,    64,
+    1416,    50,   210,   386,   461,   116,  1073,  1133,   460,    50,
+    1217,   364,   208,    50,  1417,    97,   945,    77,    50,   106,
+     597,   112,   882,    71,   965,  1470,   112,  1471,    96,  1183,
+     649,   353,   353,  1184,   210,  1185,   696,  1376,   253,   210,
+    1427,   963,   697,   425,    39,   650,   591,   353,    42,  1254,
+    1255,  -523,    52,   225,  1503,   156,  1049,    43,    44,   112,
+     712,   174,   548,   549,   112,   110,   713,    70,   242,   569,
+     838,   402,  1050,   742,   743,   744,  1118,  1121,    43,    44,
+    1188,  1463,  1519,    45,     2,   202,     4,     5,     6,     7,
+     727,    47,    48,   848,   353,  1464,   728,   550,   551,   425,
+     185,  1421,  1422,   817,   858,  1292,   738,   818,   251,   248,
+      39,   252,   171,   172,    42,  1491,   667,   156,   688,   650,
+    1145,  1496,   819,    43,    44,   -12,   820,   210,    50,   111,
+      50,    39,    58,   171,   172,    42,  1146,   678,   963,   160,
+    1049,   681,  1517,  1468,    43,    44,  1189,  1524,   317,    50,
+    1468,   819,    37,   863,    38,  1059,  1181,   332,  -448,   728,
+     432,   278,  1190,   572,    50,   402,   498,   461,   112,   689,
+     865,  1130,  1154,   778,    43,    44,   728,    50,    96,   112,
+      50,   112,   513,   591,  -449,  -112,   461,   513,  1145,  -112,
+     513,    50,   734,  1156,   461,  1189,   268,   739,  1299,  1301,
+     507,   584,   370,  1518,  1284,   421,   839,   210,   628,   424,
+     270,  1288,    77,   975,  1300,  1302,   429,    -3,   871,   271,
+     112,   325,   728,   208,   568,   840,    77,    51,   113,   686,
+     110,    64,  1332,    50,    50,    39,  1333,   208,  1349,    42,
+    1028,   112,   678,    43,    44,   112,   326,   210,    43,    44,
+     930,   106,   678,   678,  1075,   486,   931,   327,   487,   897,
+     931,    51,   924,   678,   472,   424,   328,   110,   478,   137,
+     443,  1208,   145,   981,   693,   363,   353,   568,    51,  -296,
+      43,    44,    47,    48,  1418,   329,     8,     9,    10,    11,
+      12,   181,   317,   784,   205,   591,   110,    51,   137,   138,
+    1429,   330,  1339,   367,  1123,   156,   444,   688,   728,    43,
+      44,   445,   847,  1340,   849,   376,   935,  1358,    33,   728,
+    1342,   560,    50,   402,  1210,  1350,   728,   208,  1214,    47,
+      48,   728,   113,   380,    50,   544,   545,   576,   398,   861,
+     113,   581,   174,   256,   261,  1419,    36,   886,   868,   589,
+     400,  1416,   870,   881,   417,    47,    48,   418,   689,   617,
+     614,   440,  1437,   621,   618,   546,   547,   210,   728,  1485,
+     497,   301,   145,  1489,  1429,  1486,   629,   473,   353,   353,
+     113,   337,   112,  1006,   205,  1542,   450,    77,   976,   451,
+     715,   568,  -401,    71,   282,   210,   552,   553,   784,   591,
+     210,   388,   501,   389,   506,   163,   390,   181,   181,   391,
+     517,  1176,   392,   555,    50,   393,   394,   112,   554,  1143,
+     556,   317,   317,   557,   256,    39,   461,   171,   172,    42,
+     331,    50,    51,   934,   931,  1041,   578,    70,    43,    44,
+     461,   242,   324,   402,   205,    -3,   678,   678,   317,   642,
+    1066,   324,   402,   689,  1335,  1355,  1356,   112,   210,   643,
+     116,   778,   644,   629,   363,   653,   897,   163,    51,   112,
+    1389,  1390,   210,   112,  1224,  1225,   261,   209,  1410,   931,
+     539,   261,   256,   256,   686,   646,   228,   784,   113,   478,
+     647,   317,  1097,   478,   749,   750,   751,   752,   322,   591,
+     648,   432,    58,   317,   652,   317,   678,   678,   317,   877,
+     317,   317,   410,   645,   402,   301,   470,   324,   402,   503,
+     112,  1203,   745,   746,  1043,   747,   748,   209,   301,   655,
+    1006,    77,   247,    50,    50,    50,  -373,    71,  -244,   512,
+     976,   798,   324,   589,   561,   698,   859,  1271,  1272,  1273,
+     145,   701,  1031,     8,     9,    10,    11,    12,   703,   426,
+     113,  1067,   210,   112,   337,   753,   754,   209,   590,   608,
+     705,   714,   317,    50,   729,    50,   730,    50,   -14,  1042,
+     779,    70,   774,   613,   781,    33,   792,   613,   -15,   112,
+    1082,   835,   897,   836,  1041,   842,   591,   864,   396,   866,
+     878,    64,  1090,  -422,   697,  -527,  1090,  1295,    50,   890,
+     911,   816,   813,    36,  1530,   426,    39,   581,   171,   172,
+      42,   106,   181,   822,   896,   903,   830,   209,   112,    43,
+      44,   905,   908,   909,   897,   915,   917,   918,   110,   845,
+     137,   138,   256,   919,   301,   301,    58,   920,   256,   921,
+     613,    43,    44,  1090,   928,   163,   983,   938,  1023,   209,
+     939,   353,   353,  1158,   209,   940,   954,   955,   659,   661,
+     956,   301,   957,   958,   686,   874,   959,   707,  1296,  1032,
+     106,  1162,   708,  1043,   960,   112,  -410,   397,   256,  -409,
+    1025,   586,  1029,  1053,   897,   897,   256,  1054,   613,  1055,
+      51,   478,  1056,  1064,  1074,   694,  1078,  1076,  1006,  1110,
+     877,  1081,    77,   678,   113,   923,  1084,  1134,    71,  1135,
+    1136,   678,   678,   678,  1137,  1149,   301,    50,   113,  1150,
+    1152,   301,  1153,   301,   301,  1161,   210,  1166,  1042,    -9,
+    1182,  -445,  1042,   337,   728,    64,    -3,   -11,   649,  1170,
+     512,  1172,   209,  1066,  1178,   512,  1199,  1036,   512,  1211,
+    1201,  1090,    70,   110,   486,   106,   112,  1204,   112,   112,
+    1087,   322,   322,  1088,  1209,  1089,    43,    44,  1216,   944,
+    1213,  1219,  1226,   110,  1230,   137,   138,   561,   561,  1232,
+    1234,  1235,  -297,  1240,   353,   301,    43,    44,   322,     8,
+       9,    10,    11,    12,  1222,   613,   337,  1236,    77,   608,
+     761,  1237,  1238,  1247,    71,   590,    39,   590,   171,   172,
+      42,  1256,  1414,  1006,   833,  1009,  1257,    58,  1262,    43,
+      44,    33,   209,    50,  1265,   613,  1266,   650,  1268,  1269,
+     613,   322,   608,  1277,  1282,  1289,   613,  1290,   209,   613,
+     613,  1291,  1066,   112,  1041,   367,   139,  1297,  1348,    36,
+     322,  1305,  1307,   686,  1067,   613,   388,   256,   389,  1303,
+    1310,   390,   209,  1311,   391,  1315,  1033,   392,   256,  1006,
+     393,   394,  1006,  1312,  1320,  1322,  1328,  1329,  1330,  1331,
+     877,   678,  1042,  1338,  1341,  1351,   215,   208,   113,  1090,
+    1352,  1090,  1090,  1273,  1367,   478,  1068,   317,    50,    50,
+    1360,  1361,   613,   887,   608,  1373,  1374,   112,   112,  1383,
+     694,   694,   322,    58,  1384,  -411,    64,   110,  1502,   897,
+    1387,  1398,  1403,  1006,  1087,  1405,  1407,  1088,  1006,  1089,
+      43,    44,  1408,  1043,  1423,   897,   106,  1415,   266,  1409,
+     432,  1424,   813,   337,  1425,  1428,  1353,   112,   686,  1426,
+    1066,  1433,   815,  1067,  1333,  1442,  1444,   586,  1006,   911,
+    1438,  1446,  1151,   911,   911,  1440,  1448,  1456,    77,  1450,
+    1458,  1479,  1457,   106,    71,    77,  1090,  1481,  1484,  1510,
+    1469,    71,   209,   561,  1487,  1155,  1157,  1159,  1042,  1488,
+     147,  1495,   613,  1511,   948,  1516,   206,   216,   148,   590,
+     149,  1523,  1525,  1512,  1527,    50,   112,   877,   897,   897,
+     209,   590,   461,  1533,  1540,   209,   112,  1541,  1348,  1165,
+     755,  1006,   756,   759,   757,  1348,  1006,   758,    77,  1086,
+      50,    50,   106,   158,    71,  1281,  1490,  1402,  1543,  1215,
+    1090,  1090,  1375,  1354,  1472,  1006,   874,  1006,   446,   431,
+    1171,  1006,   396,  1034,  1006,  1180,    50,   211,   364,  1366,
+     301,  1067,  1006,  1193,   899,  1062,  1006,  1083,   110,   841,
+     137,   138,   106,   209,   982,   892,  1298,   649,  1348,   483,
+    1454,    43,    44,    58,   337,  1061,   906,   209,   691,   113,
+      58,  1037,     0,     0,  1306,     0,   763,    39,   764,   178,
+     179,    42,     0,   887,   887,     0,   765,   211,   694,     0,
+      43,    44,   265,     0,     0,  1473,   106,  1477,     0,   113,
+     301,     0,   210,    67,   117,     0,     2,   202,     4,     5,
+       6,     7,     0,   337,     0,     0,   588,     0,   589,  1504,
+    1009,   397,     0,    58,    47,    48,     0,   211,   862,  1513,
+       0,  -298,  1506,     0,  1508,     0,     0,    67,     8,     9,
+      10,    11,    12,     0,     0,   337,   650,     0,     0,     0,
+       0,     0,     0,   874,   157,   210,     0,   209,     0,     0,
+     106,     0,   461,     0,     0,   630,   613,   613,  1371,   461,
+      33,     0,  1371,   217,    37,   468,    38,     0,  1538,  1068,
+    1539,     0,   106,     0,   301,     0,     0,   211,   127,   106,
+     128,   129,   130,  1546,  1547,     0,     0,     0,    36,     0,
+       0,    43,    44,     0,   447,     0,     0,     0,   249,     8,
+       9,    10,    11,    12,     8,     9,    10,    11,    12,   211,
+       0,     0,   461,     0,   211,     0,     0,   322,     0,     0,
+    1037,     0,  1037,   937,  1037,  1359,     0,     0,     0,     0,
+       0,    33,   106,   942,   943,   159,    33,     0,   323,   113,
+       0,  1476,     0,  1476,   953,   887,   249,   342,   190,     0,
+       0,   213,     0,     0,   223,   256,     0,    75,     0,    36,
+       0,     0,   815,     0,    36,   700,     0,   518,  1068,  1453,
+     709,   519,   520,   521,   395,     0,     0,     0,  1476,     0,
+    1476,  1388,     0,     0,  1396,     0,     0,     0,     0,     0,
+     415,    75,   337,   420,   422,   522,     0,   523,   157,   524,
+     525,     0,   211,   560,     0,   402,     0,     0,   886,     0,
+     589,    47,    48,     0,     0,     0,    47,    48,     0,   438,
+       0,   209,     0,   441,   404,   442,     0,   218,   448,   159,
+    1413,   412,     0,     0,    67,  1435,     0,     0,    39,   462,
+    1439,   365,    42,     0,     0,     0,     0,     0,     0,   469,
+       0,    43,    44,     0,     0,   301,     0,   422,     0,     0,
+    1260,  1261,     0,  1263,     0,   159,   113,     0,     0,  1267,
+    1461,     0,  1270,     0,  1037,     0,  1068,   782,     0,   589,
+       0,     0,   211,     0,     0,    47,    48,   613,     0,   159,
+       0,    39,   113,   171,   172,    42,     0,   404,     0,     0,
+       0,   434,     0,     0,    43,    44,     0,  1475,     0,  1475,
+       0,   345,   834,     0,     2,   202,     4,     5,     6,     7,
+       0,     0,   211,     0,     0,     0,   249,  1128,  1129,     0,
+     582,     0,     0,     0,     0,     0,   610,     0,     0,   613,
+     613,     0,     0,     0,  1475,   224,  1475,     0,     0,   615,
+       0,   301,     0,   615,     0,     0,   566,  1531,    39,     0,
+     178,   179,    42,  1531,     0,   570,     0,     0,   573,     0,
+       0,    43,    44,     0,  1531,   317,     0,     0,  1531,     0,
+    1037,     0,    37,   439,    38,   895,     0,  1174,  1175,   483,
+       0,   113,     0,     0,     0,     0,     0,  1035,    75,   402,
+       0,     0,   462,    75,     0,    47,    48,   365,     0,     0,
+       0,     0,     0,     0,     0,     0,   342,     0,  1036,     0,
+       0,   462,     0,     0,     0,     0,   404,     0,     0,   462,
+     412,     0,     0,     0,   261,   113,     0,    39,     0,   178,
+     179,    42,   211,     0,     0,     0,   673,     0,     0,   422,
+      43,    44,  1395,     0,     0,    39,   256,   178,   179,    42,
+       0,     0,     0,     0,   687,     0,    67,     0,    43,    44,
+     211,     0,   613,     0,     0,   211,   180,     0,   422,   365,
+      78,     0,   422,     0,    47,    48,     0,   261,     0,     0,
+       0,     0,     0,     0,  1035,     0,   402,     0,   110,   113,
+     218,     0,    47,    48,     0,  1087,     0,   404,  1088,   342,
+    1089,    43,    44,   518,    78,     0,     0,   519,   520,   521,
+     630,   113,     0,     0,   110,     0,   986,     0,   113,     0,
+     113,  1087,   113,   211,  1088,     0,  1089,    43,    44,  1316,
+       0,   522,     0,   523,     0,   524,  1280,   211,     0,     0,
+     219,     0,    59,    59,   766,     0,     0,     0,     0,     0,
+       0,  1051,  1501,     0,     0,  1318,    75,   113,     0,   113,
+       0,   615,   777,     0,     0,     0,     0,     0,     0,     0,
+     345,   113,     0,   794,     0,    75,    59,  1501,  1501,     0,
+       0,     0,     0,    75,  1321,     0,     0,     0,   301,   566,
+     566,   582,  1323,  1324,  1325,     0,   582,   630,     0,    80,
+     345,     0,   615,  1501,     0,   342,   342,   209,     0,    59,
+       0,     0,    59,     0,     0,     0,     0,     0,   345,     0,
+      75,   342,     0,     0,   347,     0,     0,   211,     0,     0,
+       0,     0,     0,    80,     8,     9,    10,    11,    12,     0,
+     673,     0,    39,     0,   178,   179,    42,     0,     0,     0,
+       0,   462,     0,     0,     0,    43,    44,     0,     0,     0,
+     209,     0,     0,   345,     0,   462,    33,     0,   342,   220,
+       0,   852,     0,     0,     0,   856,     0,   891,     0,     0,
+     422,  1500,     0,   402,     0,     0,     0,     0,     0,    47,
+      48,     0,     0,     0,    36,     0,   340,   986,     0,    39,
+       0,   178,   179,    42,    39,     0,   178,   179,    42,   687,
+       0,    78,    43,    44,     0,   322,    78,    43,    44,     0,
+       0,     0,     0,  1196,     0,     0,   345,     0,     0,     0,
+       0,     8,     9,    10,    11,    12,     0,     0,   588,     0,
+     589,     0,     0,   255,     0,   673,    47,    48,     0,     0,
+       0,    47,    48,   348,     0,   673,   673,     0,   615,    59,
+       0,   951,  1451,    33,     0,     0,   673,     0,     0,   345,
+     345,     0,     0,     0,     0,     0,   962,     0,     0,     0,
+       0,     0,     0,    59,     0,   345,     0,     0,     0,     0,
+       0,    36,     0,     0,     0,   566,    39,     0,   178,   179,
+      42,   211,     0,     0,   345,     0,     0,     0,     0,    43,
+      44,     0,     0,   219,     0,    75,     0,     0,     0,  1259,
+       0,     0,     0,     0,     0,     0,    67,     0,     0,    75,
+       0,     0,   345,     0,     0,  1035,     0,   402,     0,     0,
+      80,     0,     0,    47,    48,    80,     0,     0,     0,     0,
+     777,     0,   526,   527,   528,   529,   530,   531,   532,   533,
+     534,   535,   536,     0,     0,     0,     0,     0,     0,     0,
+    1058,     0,     0,   345,     0,     0,     0,     0,     0,    78,
+       0,     0,     0,     0,   422,   117,   537,     0,     0,     0,
+       0,     0,     0,   347,     0,     0,     0,     0,    78,   687,
+       0,     0,     0,     0,     0,     0,    78,     0,     0,   345,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   345,
+     345,     0,     0,   347,     0,   218,     0,     0,     0,     0,
+     345,   582,     0,     0,     8,     9,    10,    11,    12,     0,
+       0,   347,   220,    78,   420,     0,     0,     0,     0,   673,
+     673,     0,   342,   342,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   340,    33,  1101,     0,     0,
+      67,     0,     8,     9,    10,    11,    12,     0,     0,     0,
+       0,     0,     0,  1114,     0,     0,   347,     0,     0,     0,
+      75,     0,    86,     0,    36,   173,     0,     0,     0,    39,
+       0,   178,   179,    42,    33,     0,     0,     0,    80,   673,
+     673,     0,    43,    44,   345,    59,     0,     0,     0,     0,
+    1187,     0,   348,     0,     0,     0,    86,    80,     0,     0,
+       0,     0,    36,     0,     0,    80,     0,    39,   180,     0,
+     124,    42,   173,     0,     0,   173,    47,    48,     0,   347,
+      43,    44,   348,     0,     0,     0,     0,     0,   340,     0,
+       0,     0,   221,   345,     8,     9,    10,    11,    12,     0,
+     348,   404,    80,     0,     0,     0,    45,     0,     0,     0,
+       0,     0,     0,     0,    47,    48,     0,     0,   687,     0,
+       0,     0,   347,   347,     0,   234,    33,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   347,     0,
+     244,     0,   245,   345,   345,   348,   345,   345,     0,     0,
+       0,   340,     0,     0,    36,     0,     0,   347,     0,    39,
+       0,   178,   179,    42,    75,     0,     0,     0,    78,     0,
+       0,     0,    43,    44,     0,     0,   355,     0,     0,     0,
+     173,    67,    78,     0,     0,   347,     0,     0,     0,     0,
+       0,     0,     0,     0,   340,   340,     0,     0,  1500,     0,
+     402,     0,     0,   345,   345,     0,    47,    48,   348,     0,
+     340,   673,     0,   687,     0,     0,     0,     0,   117,     0,
+       0,     0,     0,     0,     0,     0,   347,   211,   173,   406,
+     407,     0,     0,     0,   411,     0,   413,   414,     0,     0,
+       0,   404,     0,     0,     0,     0,   673,     0,     0,     0,
+       0,   348,   348,     0,   673,   673,   673,   340,     0,     0,
+       0,     0,   347,    86,     0,   342,   342,   348,    86,     0,
+       0,     0,   347,   347,     0,     0,     0,  1347,   219,     0,
+     211,     0,   345,   347,     0,     0,   348,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    80,     0,     0,
+       0,     0,     0,     0,     0,     0,   173,     0,     0,     0,
+       0,    80,     0,     0,   348,     0,     0,   117,     0,     0,
+       0,     0,     0,   173,     0,     0,     0,   173,     0,     0,
+       8,     9,    10,    11,    12,     0,     0,     0,     0,     0,
+       0,     0,     0,    78,     0,    75,     0,     0,  1364,     0,
+       0,     0,     0,     0,     0,   348,     0,     0,     0,     0,
+       0,  1400,    33,     0,     0,   221,     0,   347,     0,     0,
+       0,     0,     0,     0,     0,   345,     0,   345,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      76,     0,   395,     0,     0,     0,  1503,     0,  1505,     0,
-       0,     0,   414,   415,   215,     0,     0,   419,     0,   421,
-     422,     0,   412,     0,     0,     0,     0,   214,     0,     0,
-       0,     0,     0,     0,   350,     0,     0,    88,     0,     0,
-     353,   353,    88,     0,   356,     0,     0,     0,     0,     0,
-    1534,     0,  1535,     0,     0,     0,     0,     0,     0,   119,
-       0,  1227,     0,     0,     0,  1542,  1543,     0,   177,     0,
+      36,   348,     0,     0,     0,    39,     0,     0,   342,    42,
+       0,   348,   348,     0,     0,     0,     0,   220,    43,    44,
+     345,     0,   348,     0,     0,    59,   347,     0,   345,   345,
+     345,     0,     0,     0,   673,   117,     0,     0,     0,   345,
+     345,    86,     0,     0,   693,     0,     0,     0,     0,   340,
+     651,    75,    47,    48,     0,   355,     0,  1347,     0,     0,
+      86,     0,     0,     0,  1347,   164,     0,   169,    86,     0,
+     175,   176,   177,     0,     0,     0,   347,   347,     0,   347,
+     347,     0,    80,     0,    59,   355,     0,   229,     0,     8,
+       9,    10,    11,    12,     0,     0,     0,    78,   238,   239,
+       0,     0,     0,   355,     0,    86,   348,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1347,     0,     0,
+       0,    33,     0,     0,  1526,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   218,   347,   347,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   355,    36,
+       0,   340,   340,     0,    39,   348,   178,   179,    42,     0,
+       0,     0,     0,     0,     0,     0,     0,    43,    44,    59,
+       0,     0,   345,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   173,     0,     0,     0,     0,
+       0,     0,   399,   255,     0,     0,     0,     0,   345,     0,
+     173,    47,    48,     0,     0,   348,   348,     0,   348,   348,
+       0,   355,     0,   173,     0,   347,   768,   769,     0,     0,
+       0,    75,     0,     0,     0,     0,    80,     0,    75,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1174,   216,     0,     0,     0,   356,   356,  1174,
-       0,     0,     0,     0,   355,   355,     0,   355,   355,     0,
+       0,     0,     0,   799,     0,     0,   802,   803,     0,   806,
+       0,   808,   809,     0,   355,   355,   810,   811,     0,     0,
+       0,     0,     0,     0,     0,   348,   348,     0,     0,     0,
+     355,     0,     0,     0,     0,     0,     0,     0,    78,     0,
+       0,    75,     0,     0,     0,     0,     0,     0,     0,   355,
+       0,     0,     0,     0,   851,     0,     0,     0,   855,     0,
+      86,     0,     0,     0,     0,     0,     0,     0,   347,     0,
+     347,     0,     0,     0,    86,     0,     0,   355,     0,     0,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,   347,   348,     0,   580,     0,   587,     0,
+      59,   347,   347,   347,     0,    33,     0,     0,   355,   611,
+     612,     0,   347,   347,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    78,     0,     0,     0,     0,   274,
+     275,     0,   276,    36,     0,     0,     0,    59,     0,     0,
+       0,     0,     0,     0,   355,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   355,   355,     0,    80,   277,     0,
+     221,     0,     0,     0,   278,   355,     0,     0,   279,   173,
+       0,   280,   281,   282,   283,   284,   285,    43,    44,     0,
+     286,   287,     0,     0,   340,   340,     0,   348,     0,   348,
+       0,     0,     0,     0,     0,     0,    59,     0,     0,     0,
+       0,     0,     0,   288,     0,   370,     0,     0,   219,     0,
+       0,    47,    48,   290,   291,   292,   293,     0,     0,     0,
+       0,     0,   348,     0,   760,    86,     0,     0,     0,     0,
+     348,   348,   348,     0,     0,     0,    59,     0,     0,     0,
+       0,   348,   348,     0,     0,   347,     0,     0,     0,   355,
+       0,     0,     0,    80,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   347,     0,     0,     0,     0,     0,     0,     0,    59,
+      59,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    78,     0,     0,     0,   355,     0,
+       0,    78,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   173,   340,     0,   173,
+     173,   173,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    59,     0,     0,     0,     0,   220,     0,     0,
+    1100,     0,     0,     0,    59,     0,     0,     0,   355,   355,
+       0,   355,   355,     0,    78,     0,  1113,     0,     0,  1117,
+    1120,     0,     0,     0,     0,     0,    59,     0,     0,    86,
+       0,     0,     0,    59,   348,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,  -299,     0,     0,     0,     0,
+     348,     0,     0,     0,     0,     0,     0,    33,   355,   355,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    80,     0,     0,    59,     0,     0,     0,
+      80,  1177,     0,     0,   879,    36,   880,     0,     0,     0,
+       0,     0,     0,   883,   884,     0,  -299,     0,   889,  1194,
+    1195,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   900,     0,     0,     0,
+       0,   904,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    80,     0,     0,     0,   355,     0,     0,
+       0,     0,   587,     0,   173,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   162,     0,     0,     0,     0,
+     274,   275,  1117,   276,     0,     0,     0,     0,     0,     0,
+       0,   214,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   277,
+       0,     0,     0,     0,     0,   278,     0,     0,     0,   279,
+      86,     0,   280,   281,   282,   283,   284,   285,    43,    44,
+       0,   286,   287,     0,     0,     0,     0,   162,     0,     0,
+       0,   262,  1283,     0,     0,     0,     0,     0,     0,     0,
+     355,     0,   355,     0,   288,   971,   370,   972,   973,   974,
+       0,  1293,    47,    48,   290,   291,   292,   293,   162,     0,
+       0,     0,     0,     0,     0,     0,  1024,     0,   361,   173,
+       0,   366,     0,     0,     0,   355,     0,     0,     0,     0,
+       0,     0,  1030,   355,   355,   355,     0,     0,     0,     0,
+       0,     0,     0,     0,   355,   355,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1057,    86,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   162,
+       0,     0,     0,     0,     0,   173,     0,     0,   173,     0,
+       0,   214,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1085,     0,     0,
+       0,  1363,  1095,     0,   173,     0,     0,  1098,     0,     0,
+       0,     0,  1103,  1104,     0,     0,     0,  1106,   366,  1107,
+    1108,     0,     0,  1111,     0,   162,     0,     0,     0,   173,
+       0,     0,  1126,     0,   173,     0,     0,     0,     0,     0,
+     221,     0,     0,     0,     0,     0,     0,     0,  1140,  1141,
+       0,     0,   515,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   173,   162,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   355,     0,  1167,
+       0,     0,  1169,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   585,     0,   355,     0,     0,   609,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    86,   173,     0,     0,
+       0,     0,   173,    86,     0,  1202,     0,     0,     0,     0,
+       0,  1206,  1207,     0,     0,     0,     0,     0,     0,     0,
+       0,   173,     0,   173,     0,     0,  1220,   173,     0,     0,
+     173,  1227,     0,     0,     0,     0,  1231,     0,   173,     0,
+       0,     0,   173,     0,     0,     0,     0,     0,     0,  1239,
+       0,   162,   162,     0,     0,     0,    86,   361,     0,     0,
+       0,     0,     0,     0,     0,  1246,     0,  1248,  1249,  1250,
+    1251,     0,     0,     0,     0,     0,     0,     0,   162,     0,
+       0,     0,  1258,     0,  1140,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   690,     0,     0,     0,     0,
+       0,     0,     0,     0,  1285,  1286,     0,   207,     0,     0,
+       0,   162,     0,     0,     0,     0,   227,     0,   231,     0,
+     233,     0,     0,   515,     0,   515,   236,     0,   515,     0,
+     162,   515,     0,     0,     0,     0,     0,     0,     0,     0,
+     361,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   207,     0,   231,
+     233,   236,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1326,  1327,     0,     0,     0,     0,
+       0,     0,     0,     0,  1337,     0,     0,     0,     0,     0,
+       0,     0,   162,     0,     0,     0,     0,   207,     0,     0,
+       0,     0,     0,   361,     0,     0,   780,     0,     0,     0,
+       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,   585,     0,    28,    29,    30,   585,     0,     0,
+       0,     0,     0,     0,    33,     0,   361,   361,     0,     0,
+       0,  1379,     0,  1380,  1381,  1382,     0,   207,     0,   231,
+     233,   236,   361,     0,     0,  1386,     0,     0,     0,     0,
+       0,     0,    36,  1397,     0,     0,   169,    39,     0,    40,
+      41,    42,     0,     0,     0,     0,     0,     0,     0,   207,
+      43,    44,     0,     0,   207,   515,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1420,     0,     0,   361,
+       0,   888,     0,     0,     0,     0,    45,     0,    46,     0,
+       0,     0,     0,     0,    47,    48,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,  -300,   126,     0,     0,
+     690,  1459,  1460,     0,     0,     0,     0,     0,    33,     0,
+       0,     0,     0,   207,  1465,     0,     0,     0,   154,     0,
+       0,  1465,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1483,   207,     0,     0,     0,    36,   231,   233,     0,
+       0,     0,     0,     0,     0,   236,     0,  -300,     0,     0,
+       0,   609,   126,     0,  1499,     0,     0,     0,  1505,     0,
+       0,     0,     0,   241,     0,     0,     0,   126,     0,   126,
+       0,     0,     0,   246,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   207,     0,  1528,     0,  1529,
+       0,     0,     0,     0,   267,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   207,     0,     0,     0,     0,
+     207,     0,   207,     0,     0,     0,     0,     0,  1544,  1545,
+       0,     0,     0,     0,     0,     0,  1548,  1549,   207,     0,
+       0,   207,   207,     0,     0,     0,     0,     0,   207,     0,
+     377,   361,     0,     0,     0,     0,   515,     0,     0,     0,
+       0,     0,   207,     0,   126,     0,   126,   126,     0,   207,
+       0,   126,   409,   126,   126,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   423,   162,     0,     0,
+       0,     0,     0,     0,     0,   428,     0,     0,     0,     0,
+     690,     0,     0,     0,     0,   436,     0,     0,     0,     0,
+       0,   961,     0,     0,     8,     9,    10,    11,    12,     0,
+       0,     0,     0,     0,   453,     0,     0,     0,     0,   463,
+       0,     0,   585,     0,     0,     0,     0,   126,     0,     0,
+       0,     0,   471,     0,   274,   275,    33,   276,     0,     0,
+     485,     0,   489,   361,   361,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   516,     0,   277,    36,     0,     0,     0,     0,   278,
+       0,     0,   207,   279,     0,     0,   280,   281,   282,   283,
+     284,   285,    43,    44,     0,   286,   287,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     207,     0,     0,   575,     0,   207,     0,   579,   288,     0,
+     370,     0,     0,     0,     0,     0,   336,    48,   290,   291,
+     292,   293,     0,     0,     0,     0,   515,     0,     0,     0,
+       0,     0,     0,     0,     0,   622,     0,     0,     0,   623,
+     624,     0,   625,     0,     0,     0,     0,     0,     0,   636,
+     637,     0,   638,   639,     0,   640,     0,   641,     0,     0,
+       0,     0,     0,   207,     0,     0,     0,   126,     0,     0,
+       0,     0,     0,     0,   575,     0,     0,   207,     0,   690,
+       0,     0,   657,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   668,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     333,   356,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   682,     0,     0,     0,     0,     0,   685,     0,     0,
+       0,     0,   453,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   405,   515,     0,     0,   207,     0,     0,   405,
+       0,     0,     0,     0,     0,     0,     0,   207,     0,   274,
+     275,     0,   276,     0,   690,     0,     0,     0,     0,     0,
+       0,     0,   726,     0,   207,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   737,     0,     0,   277,     0,
+       0,     0,     0,     0,   626,     0,   137,   138,   279,     0,
+       0,   280,   281,   282,   283,   284,   285,    43,    44,     0,
+     286,   287,     0,     0,     0,   405,   361,   361,     0,     0,
+       0,     0,   762,   126,   126,     0,     0,     0,     0,     0,
+       0,   772,     0,   288,   773,   627,     0,   628,   371,     0,
+       0,    47,    48,   290,   291,   292,   293,     0,     0,     0,
+     126,   793,     0,   126,   126,     0,   126,     0,   126,   126,
+       0,     0,     0,   126,   126,     0,     0,     0,     0,     0,
+       0,   207,     0,     0,   405,     0,     0,     0,     0,     0,
+       0,     0,     0,   405,   571,     0,   405,   574,     0,   832,
+       0,     0,     0,     0,   356,     0,     0,     0,   601,     0,
+       0,   126,     0,     0,     0,   126,     0,     0,     0,     0,
+       0,   214,     0,     0,     0,     0,     0,   619,     0,     0,
+       0,     0,     0,     0,     0,     0,   867,     0,     0,     0,
+       0,   207,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   207,     0,   405,     0,     0,     0,   405,   361,
+       0,     0,     0,   241,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   214,     0,     0,     0,     0,   901,
+     902,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     356,   916,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   929,     0,     0,     0,     0,
+     933,     0,     0,     0,     0,     0,     0,   515,     0,   515,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   405,     0,     0,   356,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   207,     0,
+       0,     0,     0,     0,   515,     0,   515,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     966,     0,     0,     0,     0,     0,     0,   967,     0,     0,
+       0,     0,     0,   356,     0,   162,     0,     0,     0,     0,
+     969,     0,   970,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   980,     0,     0,     0,     0,
+       0,   984,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,  1026,     0,     0,     0,  1027,   405,   405,   315,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   338,
+       0,     0,     0,     0,     0,   775,   356,     0,     0,     0,
+     373,   373,     0,     0,     0,   601,     0,   601,   601,     0,
+       0,     0,     0,     0,   601,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   812,   356,     0,   207,     0,     0,
+     356,     0,     0,     0,     0,     0,     0,     0,     0,   356,
+     356,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   356,     0,   126,     0,   405,
+     853,     0,     0,   405,   857,     0,     0,     0,  1105,     0,
+       0,     0,   860,   126,     0,     0,   126,   126,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   467,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   356,   601,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,     0,     0,    28,    29,    30,     0,
+       0,     0,     0,     0,  1168,     0,    33,   872,     0,     0,
+       0,     0,     0,   356,     0,     0,     0,     0,   126,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   126,     0,     0,    36,     0,   126,   126,     0,     0,
+       0,    40,    41,     0,     0,     0,  1198,     0,     0,     0,
+       0,  1200,     0,   405,     0,     0,     0,   207,     0,     0,
+       0,  1205,     0,     0,     0,     0,     0,     0,     0,   601,
+       0,   601,     0,     0,     0,     0,   373,     0,     0,     0,
+     719,   601,     0,     0,   873,     0,    47,    48,     0,     0,
+       0,  1233,     0,     0,     0,     0,     0,     0,     0,   126,
+       0,     0,     0,     0,  1241,     0,     0,     0,  1242,     0,
+     207,  1243,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1252,  1253,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1264,     0,     0,     0,   315,
+       0,     0,     0,     0,   356,     0,     0,     0,     0,   126,
+       0,   405,     0,     0,     0,     0,     0,     0,   684,     0,
+       0,     0,     0,   601,   601,     0,     0,     0,   126,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   356,     0,     0,     0,     0,     0,     0,
-       0,   353,     0,     0,     0,    79,     0,     0,     0,     0,
-       0,   356,   177,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    81,     0,     0,     0,   226,     0,     0,     0,
-       0,  1174,     0,     0,     0,   168,     0,   173,  1522,     0,
-     179,   180,   181,   223,   183,   355,   355,     0,    81,     0,
-       0,   356,     0,     0,     0,     0,     0,     0,   234,     0,
-       0,     0,     0,    76,     0,     0,     0,     0,     0,     0,
-     249,   250,     0,     0,     0,     0,   353,     0,   353,     0,
-       0,     0,     0,     0,     0,     0,   356,   177,     0,     0,
-       0,     0,    88,   215,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   177,   214,   363,     0,   177,     0,
-       0,    88,     0,   353,     0,     0,   355,     0,     0,    88,
-     353,   353,   353,     0,     0,     0,     0,     0,     0,   356,
-       0,   353,   353,     0,     0,     0,     0,   363,     0,   356,
-       0,     0,     0,     0,    76,   225,     0,     0,     0,     0,
-     356,     0,     0,     0,     0,   363,     0,    88,   224,     0,
-       0,   216,     8,     9,    10,    11,    12,     0,     0,     0,
-       0,   128,   128,   128,     0,     0,     0,     0,    79,     0,
-       0,     0,     0,   353,     0,     0,     0,     0,     0,     0,
-       0,   355,     0,   355,    33,     0,     0,     0,     0,   363,
-       0,     0,   214,     0,     0,     0,     0,     0,     0,     0,
-      81,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    36,     0,     0,     0,     0,    39,   355,   184,
-     185,    42,   356,     0,     0,   355,   355,   355,     0,   356,
-      43,    44,     0,   128,     0,   128,   355,   355,     0,     0,
-       0,     0,   353,     0,     0,     0,     0,     0,   216,    79,
-       0,     0,   363,     0,     0,     0,   596,     0,   597,     0,
-     276,     0,     0,     0,    47,    48,     0,     0,     0,     0,
-       0,   215,   788,   789,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   355,     0,
-      76,     0,     0,     0,     0,   363,   363,    76,     0,   819,
-       0,     0,   822,   823,     0,   826,     0,   828,   829,     0,
-       0,   363,   830,   831,   588,   128,   595,     0,     0,     0,
-       0,     0,     0,   128,     0,   128,   128,   619,   620,   363,
-     128,     0,   128,   128,     0,     0,     0,     0,   356,   356,
-      88,   356,   356,     0,     0,     0,   177,     0,     0,    76,
-       0,     0,     0,     0,     0,     0,     0,   355,     0,    81,
-       0,   177,     0,     0,     0,     0,    88,     0,   215,   363,
-       0,     0,     0,     0,   177,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   356,
-     356,     0,   128,     0,   363,    79,     0,     0,     0,     0,
-       0,     0,    79,     0,     1,     2,   207,     4,     5,     6,
+       0,   723,     0,     0,  1313,     0,     0,     0,     0,     0,
+       0,   732,     0,     0,     0,   405,  1102,   723,     0,     0,
+     723,     0,     0,     0,     0,   356,   207,   500,     0,   502,
+     505,   405,  1115,   741,   601,   601,  1122,     0,     0,   508,
+     509,     0,     0,     0,     0,     0,   356,   356,     0,     0,
+       0,     0,     0,     0,   502,   502,     0,     0,     0,     0,
+       0,     0,     0,   770,     0,     0,     0,     0,   126,     0,
+     338,     0,     0,     0,   732,     0,     0,     0,     0,     0,
+       0,  1368,     0,  1369,     0,     0,     0,     0,     0,     0,
+     502,     0,     0,     0,     0,     0,     0,     0,  1377,     0,
+    1378,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     405,     0,   405,     0,   405,  1385,     0,     0,     0,   405,
+     831,     0,     0,     0,     0,   502,     0,     0,   373,     0,
+       0,     0,     0,  1404,  1406,   601,     0,     0,     0,     0,
+       0,     0,     0,     0,  1411,     0,     0,     0,     0,  1412,
+       0,     0,  1205,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   274,   275,
+       0,   276,     0,  1434,     0,     0,     0,     0,     0,     0,
+       0,     0,   356,  1441,     0,     0,  1443,     0,  1445,  1447,
+    1449,     0,     0,   893,     0,     0,     0,   277,     0,     0,
+       0,     0,     0,   278,     0,     0,     0,   279,     0,   723,
+     280,   281,   282,   283,   284,   285,    43,    44,     0,   286,
+     287,   732,     0,   922,     0,     0,   925,     0,     0,  1480,
+       0,  1482,   932,     0,  1205,     0,     0,     0,     0,     0,
+       0,     0,   288,     0,   370,     0,     0,   371,     0,  1494,
+      47,    48,   290,   291,   292,   293,     0,     0,     0,   405,
+       0,     0,     0,     0,   405,     0,     0,     0,     0,     0,
+       0,     0,   949,   950,     0,     0,     0,   356,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   338,     0,
+       0,     0,     0,     0,   502,   502,   502,   502,   502,   502,
+     502,   502,   502,   502,   502,   502,   502,   502,   502,   502,
+     502,   502,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   978,     0,   356,
+     356,   373,     0,     0,   201,     2,   202,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,     0,     0,    28,    29,    30,    31,   363,   956,   957,
-      32,   283,   284,    33,   285,     0,     0,   363,     0,     0,
-       0,     0,     0,   226,    79,     0,     0,     0,   363,     0,
-     356,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     286,    36,     0,    37,     0,    38,   287,     0,    40,    41,
-     288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
-      44,     0,   295,   296,     0,     0,     0,     0,     0,     0,
-       0,     0,   225,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   283,   284,   297,   285,   298,    88,     0,
-       0,     0,    81,    47,    48,   299,   300,   301,   302,     0,
-       0,     0,     0,     0,     0,   356,     0,   356,  -134,     0,
-     363,     0,   286,     0,     0,     0,     0,   363,   287,     0,
-       0,     0,   288,     0,     0,   289,   290,   291,   292,   293,
-     294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
-       0,     0,   356,     0,     0,     0,     0,     0,     0,   356,
-     356,   356,   177,     0,     0,     0,     0,   297,     0,   378,
-     356,   356,   379,     0,  1077,    47,    48,   299,   300,   301,
-     302,     0,     0,    81,   465,     2,   207,     4,     5,     6,
+      27,     0,   338,    28,    29,    30,   405,  1365,     0,     0,
+     405,     0,     0,    33,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   315,     0,
+       0,    36,     0,    37,     0,    38,    39,     0,   203,    41,
+      42,   338,     0,     0,     0,     0,     0,     0,   373,    43,
+      44,     0,     0,   925,     0,  1124,   723,     0,     8,     9,
+      10,    11,    12,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    45,  1109,   204,     0,     0,
+       0,     0,     0,    47,    48,     0,   502,  1127,   274,   275,
+      33,   276,   356,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   373,     0,  1144,
+       0,     0,     0,   502,     0,     0,     0,   277,    36,     0,
+       0,     0,     0,   278,   925,   925,     0,   279,     0,     0,
+     280,   281,   282,   283,   284,   285,    43,    44,     0,   286,
+     287,     0,     0,   502,     0,     0,     0,     0,     0,     0,
+    1173,     0,   274,   275,     0,   276,     0,     0,     0,     0,
+       0,     0,   288,     0,   370,     0,     0,     0,     0,     0,
+    1125,    48,   290,   291,   292,   293,     0,     0,     0,     0,
+       0,   277,   405,     0,     0,     0,     0,   278,     0,     0,
+       0,   279,     0,     0,   280,   281,   282,   283,   284,   285,
+      43,    44,     0,   286,   287,     0,     0,   405,   405,   925,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   288,     0,   370,     0,
+     831,   923,     0,   405,    47,    48,   290,   291,   292,   293,
+       0,     0,     0,     0,     0,     0,     0,     0,  1244,  1245,
+       0,     0,     0,     0,     0,     0,     0,     0,     1,     2,
+     202,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
+      31,     0,     0,   502,    32,   274,   275,    33,   276,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   502,
+       0,     0,     0,     0,   277,    36,     0,    37,     0,    38,
+     278,   502,    40,    41,   279,     0,     0,   280,   281,   282,
+     283,   284,   285,    43,    44,     0,   286,   287,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   288,
+     502,   289,     0,     0,     0,     0,     0,    47,    48,   290,
+     291,   292,   293,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,  -134,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1357,     0,   723,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   502,
+       0,     0,     0,     0,     0,     0,     1,     2,   202,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,    28,    29,    30,    31,     0,
+       0,   502,    32,   274,   275,    33,   987,   988,     0,   989,
+       0,     0,   990,   991,   992,   993,   994,   995,   996,   997,
+       0,     0,     0,   998,     0,     0,     0,   999,  1000,     0,
+      35,     0,   277,    36,     0,    37,     0,    38,  1001,     0,
+    1002,  1003,  1004,     0,     0,   280,   281,   282,   283,   284,
+     285,    43,    44,     0,   286,   287,     0,     0,     0,     0,
+       0,   502,   502,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   288,     0,   289,
+       0,     0,   168,     0,     0,    47,    48,   290,   291,   292,
+     293,     0,     0,     0,     0,  1005,     0,     0,     0,     0,
+    -134,     0,     0,     1,     2,   202,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+       0,     0,    28,    29,    30,    31,     0,     0,     0,    32,
+     274,   275,    33,   276,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   277,
+      36,     0,    37,     0,    38,   278,   315,    40,    41,   279,
+       0,     0,   280,   281,   282,   283,   284,   285,    43,    44,
+       0,   286,   287,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   288,     0,   289,     0,     0,     0,
+       0,     0,    47,    48,   290,   291,   292,   293,     0,     0,
+       0,     0,     0,     0,     0,     2,   202,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
-       0,     0,   356,    33,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   913,     0,   914,   363,   363,     0,   363,
-     363,     0,   917,   918,     0,     0,     0,   923,     0,     0,
-       0,    36,     0,    37,     0,    38,     0,    88,    40,    41,
-     929,     0,     0,     0,     0,   933,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   128,   128,     0,     0,     0,
+       0,   274,   275,    33,   276,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,     0,   502,    28,    29,    30,
+     277,    36,     0,    37,     0,    38,   278,    33,    40,    41,
+     279,     0,   502,   280,   281,   282,   283,   284,   285,    43,
+      44,     0,   286,   287,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    36,     0,     0,     0,     0,
+       0,     0,    40,    41,     0,   288,     0,   335,     0,     0,
+       0,     0,   731,   336,    48,   290,   291,   292,   293,     2,
+     202,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,   502,   502,    28,    29,    30,
+       0,     0,     0,     0,     0,   274,   275,    33,   276,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
+       0,    28,    29,    30,   277,    36,     0,    37,     0,    38,
+     278,    33,    40,    41,   279,     0,     0,   280,   281,   282,
+     283,   284,   285,    43,    44,     0,   286,   287,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
+       0,     0,     0,     0,     0,     0,   203,    41,     0,   288,
+       0,   335,     0,     0,     0,     0,   731,    47,    48,   290,
+     291,   292,   293,     2,   202,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
+       0,    28,    29,    30,     0,     0,     0,     0,     0,   274,
+     275,    33,   276,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   356,   595,     0,     0,     0,     0,   363,   363,     0,
-      -3,     0,   128,     0,     0,   128,   128,     0,   128,     0,
-     128,   128,     0,     0,     0,   128,   128,     0,     0,     0,
-       0,     0,     0,     0,   177,     0,     0,   177,   177,   177,
-       0,     0,     0,     0,  1203,     0,     0,     0,     0,    81,
-       0,     0,     0,     0,     0,     0,    81,   166,     0,     8,
-       9,    10,    11,    12,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   219,     0,     0,     0,   363,     8,
-       9,    10,    11,    12,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,     0,     0,  1006,     0,  1007,  1008,  1009,
-       0,     0,     0,     0,     0,     0,     0,     0,    81,     0,
-       0,    33,     0,     0,     0,     0,  1059,     0,     0,    36,
-     226,   166,     0,     0,    39,   273,   184,   185,    42,     0,
-    1065,     0,     0,     0,     0,     0,     0,    43,    44,    36,
-      88,     0,     0,     0,    39,     0,   184,   185,    42,     0,
-       0,     0,     0,   363,   166,   363,     0,    43,    44,     0,
-       0,   128,   128,   893,   369,   410,     0,   374,     0,  1085,
-       0,    47,    48,     0,     0,     0,     0,  1295,     0,     0,
-       0,     0,     0,  1497,     0,   410,     0,     0,     0,     0,
-     363,    47,    48,     0,     0,     0,     0,   363,   363,   363,
-       0,     0,     0,     0,   177,     0,     0,     0,   363,   363,
-       0,     0,  1115,     0,     0,     0,   166,  1125,     0,     0,
-       0,    88,  1128,     0,     0,     0,     0,  1132,   219,     0,
-       0,     0,  1134,     0,  1135,  1136,     0,     0,  1139,     0,
-       0,     0,     0,     0,     0,     0,   166,  1151,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   277,    36,
+       0,    37,     0,    38,   278,     0,    40,    41,   279,     0,
+       0,   280,   281,   282,   283,   284,   285,    43,    44,     0,
+     286,   287,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     363,     0,     0,  1165,  1166,     0,     0,     0,   212,     0,
-       0,   374,     0,     0,     0,     0,     0,   232,   166,   236,
-       0,   238,     0,     0,     0,     0,     0,     0,   247,     0,
-       0,     0,     0,     0,  1194,     0,     0,  1196,     0,     0,
-       0,     0,     0,   523,   177,     0,     0,     0,     0,     0,
-       0,     0,   128,     0,     0,     0,   166,   128,     0,   212,
-       0,   236,   238,   247,     0,     0,     0,     0,     0,   363,
-       8,     9,    10,    11,    12,     0,     0,     0,     0,     0,
-       0,  1211,     0,     0,     0,     0,     0,  1215,  1216,     0,
-       0,   593,     0,     0,   177,     0,   617,   177,     0,     0,
-       0,   212,    33,     0,     0,     0,  1232,     0,     0,     0,
-       0,  1239,     0,     0,     0,   177,  1243,    88,     0,     0,
-       0,     0,     0,     0,    88,     0,     0,  1250,     0,     0,
-      36,     0,     0,     0,     0,    39,     0,   184,   185,    42,
-    1257,   177,  1259,  1260,  1261,  1262,   177,     0,    43,    44,
-       0,     0,     0,     0,     0,     0,     0,  1269,     0,  1165,
-       0,     0,   212,   173,   236,   238,   247,     0,     0,     0,
-       0,   166,   166,     0,   186,   177,    88,   369,     0,     0,
-       0,     0,    47,    48,     0,     0,     0,     0,     0,     0,
-       0,  1297,  1298,     0,     0,     0,     0,     0,   523,     0,
-     212,     0,     0,     0,     0,   212,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   128,     0,     0,
-       0,     0,     0,     0,     0,     0,   709,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   177,     0,   166,
-       0,     0,   177,     0,     0,  1332,  1333,     0,     0,     0,
-       0,   523,     0,   523,     0,  1343,   523,     0,   166,   523,
-     177,     0,   177,     0,     0,     0,   177,     0,     0,   177,
-     369,   212,     0,     0,     0,     0,     0,   177,     0,     0,
-       0,   177,     0,     0,     0,     0,     0,     0,     0,     0,
-     212,     0,     0,     0,     0,   236,   238,     0,     0,     0,
-       0,     0,     0,   247,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1378,     0,  1379,
-    1380,  1381,   166,     0,     0,     0,     0,     0,     0,     0,
-       0,  1385,     0,   369,     0,     0,   800,     0,     0,  1396,
-       0,     0,     0,     0,   158,   212,     0,     0,     0,     0,
-     128,     0,     8,     9,    10,    11,    12,     0,     0,     0,
-       0,     0,   593,   212,  1417,  1418,     0,   593,   212,     0,
-     212,     0,     0,     0,     0,     0,   369,   369,     0,     0,
-       0,     0,     0,     0,    33,     0,   212,     0,     0,   212,
-     212,   252,   369,     0,     0,     0,     0,   212,     0,     0,
-       0,   257,     0,     0,     0,     0,     0,     0,     0,  1457,
-    1458,   212,    36,     0,     0,     0,     0,    39,   212,   184,
-     185,    42,  1463,     0,   523,     0,     0,     0,     0,  1463,
-      43,    44,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     369,     0,   922,     0,     0,     0,   266,     0,     0,     0,
-       0,     0,  1496,     0,    47,    48,  1502,     0,     0,     0,
-     385,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   709,     0,     0,     0,     0,
-       0,     0,     0,   417,  1524,     0,  1525,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   431,     0,     0,
-       0,     0,     0,     0,     0,     0,   436,     0,     0,     0,
-       0,     0,     0,     0,  1540,  1541,   444,     0,     0,     0,
-     212,     0,  1544,  1545,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   617,     0,     0,     0,     0,     0,     0,
-       0,   462,     0,     0,     0,     0,   472,     0,   212,     0,
-       0,     0,     0,   212,     0,     0,     0,     0,     0,   480,
-       0,     0,     0,     0,     0,   491,     0,   495,     0,     0,
-     506,     0,   508,   511,     0,     0,     0,     0,     0,     0,
-       0,     0,   514,   515,     0,     0,   524,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   508,   508,     0,
-       0,     0,     0,     0,     0,     0,   283,   284,     0,   285,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   369,   212,     0,     0,     0,     0,   583,   709,     0,
-       0,   587,   508,     0,     0,   286,   212,     0,     0,     0,
-       0,   287,     0,   523,     0,   288,     0,     0,   289,   290,
-     291,   292,   293,   294,    43,    44,     0,   295,   296,   630,
-       0,     0,     0,   631,   632,     0,   633,   508,   166,     0,
-       0,     0,     0,   644,   645,     0,   646,   647,     0,   648,
-     297,   649,   378,     0,     0,     0,     0,     0,    47,    48,
-     299,   300,   301,   302,     0,     0,     0,     0,   583,     0,
-       0,   780,     0,     0,     0,     0,   664,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   212,     0,     0,   593,
-       0,     0,     0,     0,     0,     0,     0,   212,     0,     0,
-     675,   283,   284,     0,   285,     0,     0,     0,     0,     0,
-     369,   369,     0,     0,   212,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   701,     0,     0,     0,
-     286,     0,   704,     0,     0,     0,   634,   462,   141,   142,
-     288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
-      44,     0,   295,   296,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   523,   739,   297,     0,   635,     0,   636,
-     379,     0,     0,    47,    48,   299,   300,   301,   302,   757,
-       0,     0,     0,     0,   996,     0,     0,     8,     9,    10,
-      11,    12,     0,     0,     0,     0,   508,   508,   508,   508,
-     508,   508,   508,   508,   508,   508,   508,   508,   508,   508,
-     508,   508,   508,   508,     0,   212,   782,   283,   284,    33,
-     285,     0,     0,     0,     0,   792,     0,     0,     0,   709,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   212,   813,   286,    36,     0,     0,
-       0,     0,   287,     0,     0,     0,   288,     0,     0,   289,
-     290,   291,   292,   293,   294,    43,    44,     0,   295,   296,
-     219,     0,     0,     0,     0,     0,   212,     0,     0,     0,
-       0,     0,     0,   852,     0,     0,     0,   212,     0,     0,
-       0,   297,     0,   378,     0,     0,     0,     0,     0,   344,
-      48,   299,   300,   301,   302,     0,   709,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   885,
-       0,     0,     0,     0,     0,     0,     0,   892,     0,     0,
-       0,     0,     0,     0,     0,     0,   508,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   252,   369,
-     369,     0,   212,     0,     0,     0,     0,   219,     0,   930,
-     931,     0,     0,     0,     0,     0,   212,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,   508,     0,     0,
-       0,   964,     0,     0,     0,     0,   968,     0,     0,    33,
-       0,     0,     0,   341,   364,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   508,     0,     0,
-       0,     0,     0,     0,     0,     0,  1149,    36,     0,     8,
-       9,    10,    11,    12,     0,     0,   413,     0,     0,     0,
-       0,     0,     0,   413,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   212,     0,  1001,     0,     0,   283,
-     284,    33,   285,  1002,     0,     0,     0,     0,     0,     0,
-     369,     0,     0,     0,     0,     0,  1004,     0,  1005,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   286,    36,
-       0,  1015,     0,     0,   287,     0,     0,  1019,   288,     0,
-       0,   289,   290,   291,   292,   293,   294,    43,    44,  1062,
-     295,   296,  1063,     0,     0,   413,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   523,     0,   523,
-       0,   508,     0,   297,     0,   378,     0,     0,     0,     0,
-       0,  1150,    48,   299,   300,   301,   302,     0,     0,     0,
-       0,   212,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   523,     0,   523,     0,     0,     0,
-       0,     0,   413,     0,     0,     0,   508,     0,     0,     0,
-     413,   579,   324,   413,   582,     0,     0,     0,     0,     0,
-       0,   364,   346,   166,     0,   609,     0,     0,     0,     0,
-       0,     0,     0,   381,   381,     0,     0,     0,   508,     0,
-       0,     0,     0,     0,   627,     0,     0,     0,     0,  1133,
-     508,     0,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,     0,   413,    28,    29,    30,   413,     0,     0,
-       0,     0,     0,     0,    33,     0,     0,     0,     0,   508,
-       0,     0,     0,     0,   283,   284,     0,   285,     0,     0,
-       0,     0,     0,     0,   324,     0,     0,   364,     0,     0,
-       0,     0,    36,     0,     0,  1195,     0,   112,     0,    40,
-      41,     0,     0,   286,     0,     0,     0,     0,   476,   287,
-      43,    44,     0,   288,     0,     0,   289,   290,   291,   292,
-     293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
-    1208,     0,     0,   413,     0,  1210,   364,     0,    46,     0,
-       0,     0,     0,  1214,    47,    48,     0,     0,   297,     0,
-     378,   508,     0,     0,     0,   751,    47,    48,   299,   300,
-     301,   302,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   413,  1245,     0,     0,
-     364,     0,     0,     0,     0,     0,     0,     0,  1252,     0,
-       0,  1253,     0,  1254,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,  1263,  1264,
-     508,   508,   212,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   381,   413,   413,     0,     0,  1276,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   795,   364,     0,     0,   283,   284,     0,   285,
-       0,     0,   609,     0,   609,   609,     0,     0,     0,     0,
-       0,   609,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   832,   364,     0,  1315,   286,     0,   364,     0,     0,
-       0,   287,  1319,     0,     0,   288,   364,   364,   289,   290,
-     291,   292,   293,   294,    43,    44,     0,   295,   296,     0,
-       0,     0,   364,     0,     0,     0,     0,   413,   873,     0,
-       0,   413,   876,     0,     0,     0,   703,     0,   878,     0,
-     297,     0,   378,     0,     0,   958,     0,     0,    47,    48,
-     299,   300,   301,   302,     0,     0,     0,   413,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,  1366,     0,  1367,     0,   736,     0,     0,     0,
-     364,   609,     0,     0,     0,     0,     0,     0,   752,     0,
-    1376,     0,  1377,     0,   736,     0,     0,   736,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1384,     0,     0,
-     761,     0,     0,     0,     0,   364,     0,     0,     0,   413,
-     413,     0,  1402,  1404,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1409,     0,     0,  1214,     0,   508,     0,
-     790,     0,     0,     0,     0,     0,     0,   346,     0,     0,
-       0,   752,     0,     0,     0,   508,     0,     0,  1432,     0,
-       0,     0,   413,     0,     0,     0,     0,  1439,     0,     0,
-    1441,     0,  1443,  1445,  1447,     0,     0,     0,   609,     0,
-     609,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     609,     0,     0,     0,     0,     0,     0,   851,     0,     0,
-       0,     0,     0,     0,     0,   381,     0,     0,     0,     0,
-       0,     0,     0,  1478,     0,  1480,     0,  1214,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   508,   508,     0,
-       0,     0,     0,  1491,     2,   207,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-       0,   364,    28,    29,    30,     0,     0,     0,   364,   413,
-       0,   413,    33,     0,     0,   413,     0,     0,     0,     0,
-       0,   927,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   736,     0,     0,     0,   609,   609,     0,     0,
-      36,     0,    37,   752,    38,   950,     0,    40,    41,     0,
-       0,     0,     0,     0,     0,   960,     0,     0,     0,     0,
-       0,   967,     0,     0,     0,     0,     0,     0,     0,     0,
-     413,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  -407,   671,     0,     0,   413,
-    1131,     0,    47,    48,     0,     0,     0,     0,     0,   364,
-       0,   984,   985,     0,     0,   413,  1142,     0,   609,   609,
-    1147,     0,     0,     0,     0,     0,     0,   346,     0,     0,
-     364,   364,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,     0,     0,    28,    29,    30,  1013,     0,     0,     0,
-     381,     0,     0,    33,   678,     0,     0,     0,     0,     0,
-       0,   283,   284,     0,   285,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   413,     0,   413,   346,
-       0,    36,     0,   413,     0,     0,   346,     0,    40,    41,
-     286,     0,   609,     0,     0,     0,   287,     0,     0,     0,
-     288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
-      44,     0,   295,   296,     0,   413,  1228,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   324,   679,     0,     0,
-       0,   680,     0,    47,    48,   297,     0,   378,     0,   364,
-       0,     0,     0,    47,    48,   299,   300,   301,   302,     0,
-       0,     0,   381,     0,     0,     0,     0,   960,   283,   284,
-     736,   285,  1023,     0,  1024,     0,     0,  1025,  1026,  1027,
-    1028,  1029,  1030,  1031,  1032,     0,     0,  1516,  1033,     0,
-    1137,     0,  1034,  1035,     0,    35,     0,   286,     0,     0,
-       0,  1152,     0,  1036,     0,   175,   176,  1039,     0,     0,
-     289,   290,   291,   292,   293,   294,    43,    44,     0,   295,
-     296,   381,     0,  1169,     0,     0,   364,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   960,   960,
-       0,     0,   297,     0,   378,     0,     0,   172,     0,     0,
-      47,    48,   299,   300,   301,   302,   283,   284,     0,   285,
-    1040,     0,     0,     0,  1200,  -134,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   364,
-     364,     0,     0,     0,     0,   286,     0,     0,     0,     0,
-       0,   287,     0,     0,     0,   288,     0,     0,   289,   290,
-     291,   292,   293,   294,    43,    44,     0,   295,   296,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   960,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     505,     0,   378,     0,     0,     0,     0,   851,    47,    48,
-     299,   300,   301,   302,     0,     0,     0,     0,     0,     0,
-       0,     0,  1255,  1256,     0,     0,     1,     2,   207,     4,
+       0,     0,     0,   288,     0,   335,     0,     0,     0,     0,
+       0,   336,    48,   290,   291,   292,   293,     2,   202,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,     0,     0,    28,    29,    30,    31,     0,
-       0,     0,    32,   283,   284,    33,  1022,  1023,     0,  1024,
-     364,     0,  1025,  1026,  1027,  1028,  1029,  1030,  1031,  1032,
-       0,     0,     0,  1033,     0,     0,     0,  1034,  1035,     0,
-      35,     0,   286,    36,     0,    37,     0,    38,  1036,     0,
-    1037,  1038,  1039,     0,     0,   289,   290,   291,   292,   293,
-     294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   297,     0,   298,
-       0,     0,   172,     0,     0,    47,    48,   299,   300,   301,
-     302,     0,     0,     0,     0,  1040,     0,     0,     0,   413,
-    -134,     0,     0,     0,  1360,     0,   736,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   413,   413,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   413,     1,
-       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
-      30,    31,     0,     0,     0,    32,   283,   284,    33,   285,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-    -298,     0,     0,     0,     0,   286,    36,     0,    37,     0,
-      38,   287,    33,    40,    41,   288,     0,     0,   289,   290,
-     291,   292,   293,   294,    43,    44,     0,   295,   296,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      36,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     297,  -298,   298,     0,     0,     0,     0,     0,    47,    48,
-     299,   300,   301,   302,     2,   207,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-       0,     0,    28,    29,    30,     0,     0,     0,     0,     0,
-     283,   284,    33,   285,     0,     0,     0,     0,     0,     0,
-       0,   324,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   286,
-      36,     0,    37,     0,    38,   287,     0,    40,    41,   288,
-       0,     0,   289,   290,   291,   292,   293,   294,    43,    44,
-       0,   295,   296,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   297,     0,   343,     0,     0,     0,
-       0,   751,   344,    48,   299,   300,   301,   302,     2,   207,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,     0,     0,    28,    29,    30,     0,
-       0,     0,     0,     0,   283,   284,    33,   285,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,  -299,     0,
-       0,     0,     0,   286,    36,     0,    37,     0,    38,   287,
-      33,    40,    41,   288,     0,     0,   289,   290,   291,   292,
-     293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   297,  -299,
-     343,     0,     0,     0,     0,   751,    47,    48,   299,   300,
-     301,   302,     2,   207,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
-      28,    29,    30,     0,     0,     0,     0,     0,   283,   284,
-      33,   285,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,     0,     0,    28,    29,    30,   286,    36,     0,
-      37,     0,    38,   287,    33,    40,    41,   288,     0,     0,
-     289,   290,   291,   292,   293,   294,    43,    44,     0,   295,
-     296,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    36,     0,     0,     0,     0,     0,     0,    40,
-      41,     0,   297,     0,   343,     0,     0,     0,     0,     0,
-     344,    48,   299,   300,   301,   302,     2,   207,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
-       0,     0,   283,   284,    33,   285,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
-      30,   286,    36,     0,    37,     0,    38,   287,    33,   208,
-      41,   288,     0,     0,   289,   290,   291,   292,   293,   294,
-      43,    44,     0,   295,   296,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    36,     0,     0,     0,
-       0,     0,     0,   208,    41,     0,   297,     0,   981,     0,
-       0,     0,     0,     0,   982,    48,   299,   300,   301,   302,
-       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
-      30,     0,     0,     0,     0,     0,   283,   284,    33,   285,
+      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
+       0,     0,     0,   274,   275,    33,   276,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   286,    36,     0,    37,     0,
-      38,   287,     0,   208,    41,   288,     0,     0,   289,   290,
-     291,   292,   293,   294,    43,    44,     0,   295,   296,     0,
+       0,     0,   277,    36,     0,    37,     0,    38,   278,     0,
+     203,    41,   279,     0,     0,   280,   281,   282,   283,   284,
+     285,    43,    44,     0,   286,   287,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   288,     0,   946,
+       0,     0,     0,     0,     0,   947,    48,   290,   291,   292,
+     293,     2,   202,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
+      29,    30,     0,     0,     0,     0,     0,   274,   275,    33,
+     276,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   277,    36,     0,    37,
+       0,    38,   278,     0,   203,    41,   279,     0,     0,   280,
+     281,   282,   283,   284,   285,    43,    44,     0,   286,   287,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     297,     0,   378,     0,     0,     0,     0,     0,    47,    48,
-     299,   300,   301,   302,  -524,     0,     0,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,     0,     0,    28,    29,    30,    31,
-       0,     0,     0,    32,     0,     0,    33,    34,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    35,     0,     0,    36,     0,    37,     0,    38,    39,
-       0,    40,    41,    42,     0,     0,     0,     0,     0,     0,
-       0,     0,    43,    44,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    45,     0,
-      46,     0,     0,     0,     0,     0,    47,    48,     1,     2,
+       0,   288,     0,   370,     0,     0,     0,     0,     0,    47,
+      48,   290,   291,   292,   293,  -522,     0,     0,     1,     2,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
@@ -2533,5 +2559,5 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,    45,
-       0,    46,     0,     0,     0,  -528,     0,    47,    48,     1,
+       0,    46,     0,     0,     0,     0,     0,    47,    48,     1,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
@@ -2545,26 +2571,26 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      45,     0,    46,     0,     0,     0,     0,     0,    47,    48,
-     206,     2,   207,     4,     5,     6,     7,     8,     9,    10,
+      45,     0,    46,     0,     0,     0,  -526,     0,    47,    48,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
-      29,    30,     0,     0,     0,     0,     0,     0,     0,    33,
+      29,    30,    31,     0,     0,     0,    32,     0,     0,    33,
+      34,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
-       0,    38,    39,     0,   208,    41,    42,     0,     0,     0,
+       0,     0,     0,     0,    35,     0,     0,    36,     0,    37,
+       0,    38,    39,     0,    40,    41,    42,     0,     0,     0,
        0,     0,     0,     0,     0,    43,    44,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    45,     0,   209,     0,     0,     0,     0,     0,    47,
-      48,     1,     2,   207,     4,     5,     6,     7,     8,     9,
+       0,    45,     0,    46,     0,     0,     0,     0,     0,    47,
+      48,     1,     2,   202,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,  -298,     0,
+      20,    21,    22,    23,    24,    25,    26,    27,  -299,     0,
       28,    29,    30,    31,     0,     0,     0,    32,     0,     0,
       33,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
-      37,     0,    38,     0,     0,    40,    41,     0,     0,  -298,
-       1,     2,   207,     4,     5,     6,     7,     8,     9,    10,
+      37,     0,    38,     0,     0,    40,    41,     0,     0,  -299,
+       1,     2,   202,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
@@ -2573,5 +2599,5 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
-       0,    38,     0,     0,    40,    41,   206,     2,   207,     4,
+       0,    38,     0,     0,    40,    41,   201,     2,   202,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
@@ -2581,277 +2607,314 @@
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    36,     0,    37,     0,    38,     0,     0,
-     208,    41,     2,   207,     4,     5,     6,     7,     8,     9,
+     203,    41,     2,   202,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
-      28,    29,    30,     0,     0,     0,     0,     0,     0,   209,
+      28,    29,    30,     0,     0,     0,     0,     0,     0,   204,
       33,     0,     0,     0,     0,    47,    48,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
-      37,     0,    38,    39,     0,   208,    41,    42,     0,     0,
+      37,     0,    38,    39,     0,   203,    41,    42,     0,     0,
        0,     0,     0,     0,     0,     0,    43,    44,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    45,     0,   209,     0,     0,     0,     0,     0,
-      47,    48,     2,   207,     4,     5,     6,     7,     8,     9,
+       0,     0,    45,     0,   204,     0,     0,     0,     0,     0,
+      47,    48,     2,   202,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
       28,    29,    30,     0,     0,     0,     0,     0,     0,     0,
-      33,     0,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,     0,     0,    28,    29,    30,     0,    36,     0,
-      37,     0,    38,     0,    33,    40,    41,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,  1340,
-       0,     0,    36,     0,     0,     0,     0,     0,     0,    40,
-      41,     0,     0,     0,   671,     0,     0,     0,     0,     0,
-      47,    48,     2,   207,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,   258,     0,
-      28,    29,    30,     0,    47,    48,     0,     0,     0,     0,
-      33,     0,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,     0,     0,    28,    29,    30,     0,    36,     0,
-      37,     0,    38,     0,    33,    40,    41,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,  1342,
-       0,     0,    36,     0,     0,     0,     0,     0,     0,    40,
-      41,     0,     0,     0,   671,     0,     0,     0,     0,     0,
-      47,    48,     2,   207,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    46,     0,
-      28,    29,    30,     0,    47,    48,     0,     0,     0,     0,
       33,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
-      37,     0,    38,     0,     0,   208,    41,     2,   207,     4,
+      37,     0,    38,     0,     0,    40,    41,     2,   202,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
-       0,     0,     0,     0,   271,    33,     0,     0,     0,     0,
+       0,     0,     0,  -407,   664,    33,     0,     0,     0,     0,
       47,    48,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,    36,     0,    37,     0,    38,     0,     0,
-      40,    41,     2,   207,     4,     5,     6,     7,     8,     9,
+      40,    41,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1334,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   664,
+       0,     0,     0,     0,     0,    47,    48,     2,   202,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
+       0,     0,     0,     0,     0,    33,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
+      29,    30,     0,    36,     0,    37,     0,    38,     0,    33,
+      40,    41,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1336,     0,     0,    36,     0,     0,
+       0,     0,     0,     0,    40,    41,     0,     0,     0,   664,
+       0,     0,     0,     0,     0,    47,    48,     2,   202,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,   247,     0,    28,    29,    30,     0,    47,
+      48,     0,     0,     0,     0,    33,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    36,     0,    37,     0,    38,     0,     0,
+     203,    41,     2,   202,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
-      28,    29,    30,     0,     0,     0,     0,     0,     0,   671,
+      28,    29,    30,     0,     0,     0,     0,     0,     0,   260,
       33,     0,     0,     0,     0,    47,    48,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
-      37,     0,    38,     0,     0,   208,    41,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
-      29,    30,     0,     0,     0,     0,     0,   283,   284,    33,
-     285,     0,     0,     0,   209,     0,     0,     0,     0,     0,
+      37,     0,    38,     0,     0,    40,    41,     2,   202,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
+       0,     0,     0,     0,   664,    33,     0,     0,     0,     0,
       47,    48,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   286,    36,     0,     0,
-       0,     0,   287,     0,    40,    41,   288,     0,     0,   289,
-     290,   291,   292,   293,   294,    43,    44,     0,   295,   296,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    36,     0,    37,     0,    38,     0,     0,
+     203,    41,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
+       0,     0,   274,   275,    33,   276,     0,     0,     0,   204,
+       0,     0,     0,     0,     0,    47,    48,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   277,    36,     0,     0,     0,     0,   278,     0,    40,
+      41,   279,     0,     0,   280,   281,   282,   283,   284,   285,
+      43,    44,     0,   286,   287,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   288,     0,   510,     0,
+       0,   168,     0,     0,    47,    48,   290,   291,   292,   293,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+       0,     0,    28,    29,    30,     0,     0,     0,     0,     0,
+     274,   275,    33,   276,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,     0,     0,    28,    29,    30,   277,
+      36,     0,     0,     0,     0,   278,    33,    40,    41,   279,
+       0,     0,   280,   281,   282,   283,   284,   285,    43,    44,
+       0,   286,   287,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    36,     0,     0,     0,     0,     0,
+       0,   203,    41,     0,   288,   -40,   289,     0,     0,     0,
+       0,     0,    47,    48,   290,   291,   292,   293,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
+      28,    29,    30,     0,     0,     0,    47,    48,   274,   275,
+      33,   276,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   277,    36,     0,
+       0,     0,     0,   278,     0,    40,    41,   279,     0,     0,
+     280,   281,   282,   283,   284,   285,    43,    44,     0,   286,
+     287,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   288,     0,   289,     0,     0,     0,     0,     0,
+      47,    48,   290,   291,   292,   293,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
+      30,     0,     0,     0,     0,     0,   274,   275,    33,   276,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   297,     0,   516,     0,     0,   172,     0,     0,    47,
-      48,   299,   300,   301,   302,     8,     9,    10,    11,    12,
+       0,     0,     0,     0,     0,   277,    36,     0,     0,     0,
+       0,   278,     0,    40,    41,   279,     0,     0,   280,   281,
+     282,   283,   284,   285,    43,    44,     0,   286,   287,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     288,     0,   335,     0,     0,     0,     0,     0,    47,    48,
+     290,   291,   292,   293,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,     0,     0,    28,    29,    30,     0,
+       0,     0,     0,     0,   274,   275,    33,   276,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   277,    36,     0,     0,     0,     0,   278,
+       0,    40,    41,   279,     0,     0,   280,   281,   282,   283,
+     284,   285,    43,    44,     0,   286,   287,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   288,     0,
+     370,     0,     0,     0,     0,     0,    47,    48,   290,   291,
+     292,   293,   456,     2,   202,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
+       0,    28,    29,    30,     0,     0,     0,     0,     0,     0,
+       0,    33,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,     0,     0,    28,    29,    30,     0,     0,    36,
+       0,    37,     0,    38,    33,     0,    40,    41,     0,     0,
+       0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    36,     0,    28,    29,    30,    39,     0,   203,
+      41,    42,     0,     0,    33,     0,     0,     0,    -3,     0,
+      43,    44,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    36,     0,     0,     0,    45,   110,   260,    40,
+      41,     0,     0,     0,    47,    48,     0,     0,     0,     0,
+      43,    44,     0,     0,     0,     0,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,     0,    46,    28,
+      29,    30,     0,     0,    47,    48,     0,     0,     0,    33,
+     872,     0,     0,     0,     0,     0,     0,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    36,     0,    28,
+      29,    30,     0,     0,    40,    41,     0,     0,     0,    33,
+     872,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    36,     0,     0,
+       0,     0,     0,   719,    40,    41,     0,  1197,     0,    47,
+      48,     0,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
+       0,     0,     0,   719,    33,     0,     0,  1287,     0,    47,
+      48,     0,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    36,     0,    28,    29,    30,     0,     0,    40,
+      41,     0,     0,     0,    33,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,     0,     0,    28,    29,    30,
-       0,     0,     0,     0,     0,   283,   284,    33,   285,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
-       0,    28,    29,    30,   286,    36,     0,     0,     0,     0,
-     287,    33,    40,    41,   288,     0,     0,   289,   290,   291,
-     292,   293,   294,    43,    44,     0,   295,   296,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
-       0,     0,     0,     0,     0,     0,   208,    41,     0,   297,
-     -40,   298,     0,     0,     0,     0,     0,    47,    48,   299,
-     300,   301,   302,     8,     9,    10,    11,    12,    13,    14,
+       0,     0,    36,     0,     0,     0,     0,    33,    46,   203,
+      41,     0,     0,     0,    47,    48,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    36,     0,     0,     0,     0,
+       0,     0,    40,    41,     0,     0,     0,     0,   260,     0,
+       0,     0,     0,     0,    47,    48,     0,     0,     0,     0,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+       0,   331,    28,    29,    30,     0,     0,    47,    48,     0,
+       0,     0,    33,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
-       0,    47,    48,   283,   284,    33,   285,     0,     0,     0,
+      36,     0,     0,     0,     0,    33,     0,    40,    41,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   286,    36,     0,     0,     0,     0,   287,     0,
-      40,    41,   288,     0,     0,   289,   290,   291,   292,   293,
-     294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
+       0,     0,     0,    36,     0,     0,     0,     0,     0,     0,
+      40,    41,     0,     0,     0,     0,   719,     0,     0,     0,
+       0,     0,    47,    48,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   297,     0,   298,
-       0,     0,     0,     0,     0,    47,    48,   299,   300,   301,
-     302,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   664,
+       0,     0,     0,     0,     0,    47,    48,     2,   202,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
+       0,     0,     0,     0,     0,    33,     0,   274,   275,     0,
+     276,   988,     0,   989,     0,     0,   990,   991,   992,   993,
+     994,   995,   996,   997,     0,     0,  1520,   998,     0,     0,
+       0,   999,  1000,    36,    35,    37,   277,    38,     0,     0,
+      40,    41,  1001,     0,   171,   172,  1004,     0,     0,   280,
+     281,   282,   283,   284,   285,    43,    44,     0,   286,   287,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  -420,     0,
+       0,   288,     0,   370,     0,     0,   168,     0,     0,    47,
+      48,   290,   291,   292,   293,     0,     0,   274,   275,  1005,
+     276,   988,     0,   989,  -134,     0,   990,   991,   992,   993,
+     994,   995,   996,   997,     0,     0,     0,   998,     0,     0,
+       0,   999,  1000,     0,    35,     0,   277,     0,     0,     0,
+       0,     0,  1001,     0,   171,   172,  1004,     0,     0,   280,
+     281,   282,   283,   284,   285,    43,    44,     0,   286,   287,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   288,     0,   370,     0,     0,   168,     0,     0,    47,
+      48,   290,   291,   292,   293,     0,     0,     0,     0,  1005,
+       0,     0,     0,     0,  -134,     2,   202,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
-       0,   283,   284,    33,   285,     0,     0,     0,     0,     0,
+       0,     0,     0,    33,     0,   274,   275,     0,   276,   988,
+       0,   989,  1389,  1390,   990,   991,   992,   993,   994,   995,
+     996,   997,     0,     0,  1520,   998,     0,     0,     0,   999,
+    1000,    36,    35,    37,   277,    38,     0,     0,    40,    41,
+    1001,     0,   171,   172,  1004,     0,     0,   280,   281,   282,
+     283,   284,   285,    43,    44,     0,   286,   287,     0,     0,
+       0,     0,  1294,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   288,
+       0,   370,     0,     0,   168,     0,     0,    47,    48,   290,
+     291,   292,   293,     0,     0,   274,   275,  1005,   276,   988,
+       0,   989,  1389,  1390,   990,   991,   992,   993,   994,   995,
+     996,   997,     0,     0,     0,   998,     0,     0,     0,   999,
+    1000,     0,    35,     0,   277,     0,     0,     0,     0,     0,
+    1001,     0,   171,   172,  1004,     0,     0,   280,   281,   282,
+     283,   284,   285,    43,    44,     0,   286,   287,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   288,
+       0,   370,     0,     0,   168,     0,     0,    47,    48,   290,
+     291,   292,   293,     0,     0,   274,   275,  1005,   276,   988,
+       0,   989,     0,     0,   990,   991,   992,   993,   994,   995,
+     996,   997,     0,     0,     0,   998,     0,     0,     0,   999,
+    1000,     0,    35,     0,   277,     0,     0,     0,     0,     0,
+    1001,     0,   171,   172,  1004,     0,     0,   280,   281,   282,
+     283,   284,   285,    43,    44,     0,   286,   287,     0,     0,
+       0,     0,     0,     0,   274,   275,     0,   276,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   288,
+       0,   370,     0,     0,   168,     0,     0,    47,    48,   290,
+     291,   292,   293,   277,     0,     0,     0,  1005,     0,   278,
+       0,     0,     0,   279,     0,     0,   280,   281,   282,   283,
+     284,   285,    43,    44,     0,   286,   287,     0,     0,     0,
+       0,     0,     0,   274,   275,     0,   276,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   288,     0,
+     370,     0,     0,     0,     0,   731,    47,    48,   290,   291,
+     292,   293,   277,     0,     0,     0,     0,     0,   278,     0,
+       0,     0,   279,     0,     0,   280,   281,   282,   283,   284,
+     285,    43,    44,     0,   286,   287,     0,     0,     0,     0,
+       0,     0,   274,   275,     0,   276,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   499,     0,   370,
+       0,     0,     0,     0,     0,    47,    48,   290,   291,   292,
+     293,   277,     0,     0,     0,     0,     0,   278,     0,     0,
+       0,   279,     0,     0,   280,   281,   282,   283,   284,   285,
+      43,    44,     0,   286,   287,     0,     0,     0,     0,     0,
+       0,   274,   275,     0,   276,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   504,     0,   370,     0,
+       0,     0,     0,     0,    47,    48,   290,   291,   292,   293,
+     277,     0,     0,     0,     0,     0,   278,     0,     0,     0,
+     279,     0,     0,   280,   281,   282,   283,   284,   285,    43,
+      44,     0,   286,   287,     0,     0,     0,     0,     0,     0,
+     274,   275,     0,   276,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   507,     0,   370,     0,     0,
+       0,     0,     0,    47,    48,   290,   291,   292,   293,   277,
+       0,     0,     0,     0,     0,   278,     0,     0,     0,   279,
+       0,     0,   280,   281,   282,   283,   284,   285,    43,    44,
+       0,   286,   287,     0,     0,     0,     0,     0,     0,   274,
+     275,     0,   276,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   288,     0,   370,     0,     0,     0,
+       0,     0,   683,    48,   290,   291,   292,   293,   277,     0,
+       0,     0,     0,     0,   278,     0,     0,     0,   279,     0,
+       0,   280,   281,   282,   283,   284,   285,    43,    44,     0,
+     286,   287,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     286,    36,     0,     0,     0,     0,   287,     0,    40,    41,
-     288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
-      44,     0,   295,   296,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   297,     0,   343,     0,     0,
-       0,     0,     0,    47,    48,   299,   300,   301,   302,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
-       0,    28,    29,    30,     0,     0,     0,     0,     0,   283,
-     284,    33,   285,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   286,    36,
-       0,     0,     0,     0,   287,     0,    40,    41,   288,     0,
-       0,   289,   290,   291,   292,   293,   294,    43,    44,     0,
-     295,   296,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   297,     0,   378,     0,     0,     0,     0,
-       0,    47,    48,   299,   300,   301,   302,     8,     9,    10,
+       0,     0,     0,   288,     0,   370,     0,     0,     0,     0,
+       0,   336,    48,   290,   291,   292,   293,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
       29,    30,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,     0,     0,     0,     0,     0,     0,     8,     9,    10,
+     201,     2,   202,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    24,    25,    26,    27,    36,     0,    28,
-      29,    30,    39,     0,    40,    41,    42,     0,     0,    33,
+      29,    30,   110,     0,    40,    41,     0,     0,     0,    33,
        0,     0,     0,     0,     0,    43,    44,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    36,     0,     0,
-       0,    45,    39,    46,   208,    41,    42,     0,     0,    47,
-      48,     0,     0,     0,     0,    43,    44,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
+       0,    38,     0,     0,   203,    41,   456,     2,   202,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
+       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    45,     0,   271,     0,     0,     0,     0,     0,    47,
-      48,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
-       0,     0,     0,    33,   678,     0,     0,     0,     0,     0,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    36,     0,    28,    29,    30,     0,     0,    40,    41,
-       0,     0,     0,    33,   678,     0,     0,     0,     0,     0,
+       0,     0,     0,    36,     0,    37,     0,    38,     0,     0,
+      40,    41,     2,   202,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,     0,     0,
+      28,    29,    30,     0,     0,     0,     0,     0,     0,     0,
+      33,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
+      37,     0,    38,     0,     0,   203,    41,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,     0,     0,    28,
+      29,    30,   474,   475,   476,   477,     0,     0,     0,    33,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    36,     0,     0,     0,     0,     0,   679,    40,    41,
-       0,  1078,     0,    47,    48,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
-      30,     0,     0,     0,     0,     0,     0,   679,    33,     0,
-       0,  1205,     0,    47,    48,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    36,     0,    28,    29,
-      30,     0,     0,   208,    41,     0,     0,     0,    33,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,     0,
-       0,    28,    29,    30,     0,     0,    36,     0,     0,     0,
-       0,    33,   271,    40,    41,     0,     0,     0,    47,    48,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
-       0,     0,     0,     0,     0,     0,    40,    41,     0,     0,
-       0,     0,   339,     0,     0,     0,     0,     0,    47,    48,
-       0,     0,     0,     0,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,     0,   679,    28,    29,    30,     0,
-       0,    47,    48,     0,     0,     0,    33,     0,     2,   207,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    36,     0,    28,    29,    30,     0,
-       0,    40,    41,     0,     0,     0,    33,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    36,     0,    37,     0,    38,     0,
-     671,    40,    41,     0,     0,     0,    47,    48,   283,   284,
-       0,   285,  1023,     0,  1024,     0,     0,  1025,  1026,  1027,
-    1028,  1029,  1030,  1031,  1032,     0,     0,     0,  1033,     0,
-       0,     0,  1034,  1035,     0,    35,     0,   286,     0,  -420,
-       0,     0,     0,  1036,     0,   175,   176,  1039,     0,     0,
-     289,   290,   291,   292,   293,   294,    43,    44,     0,   295,
-     296,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   297,     0,   378,     0,     0,   172,     0,     0,
-      47,    48,   299,   300,   301,   302,     0,     0,     0,     0,
-    1040,     0,     0,     0,     0,  -134,     2,   207,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,     0,     0,    28,    29,    30,     0,     0,     0,
-       0,     0,     0,     0,    33,     0,   283,   284,     0,   285,
-    1023,     0,  1024,  1388,  1389,  1025,  1026,  1027,  1028,  1029,
-    1030,  1031,  1032,     0,     0,  1516,  1033,     0,     0,     0,
-    1034,  1035,    36,    35,    37,   286,    38,     0,     0,    40,
-      41,  1036,     0,   175,   176,  1039,     0,     0,   289,   290,
-     291,   292,   293,   294,    43,    44,     0,   295,   296,     0,
-       0,     0,     0,  1299,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     297,     0,   378,     0,     0,   172,     0,     0,    47,    48,
-     299,   300,   301,   302,     0,     0,   283,   284,  1040,   285,
-    1023,     0,  1024,  1388,  1389,  1025,  1026,  1027,  1028,  1029,
-    1030,  1031,  1032,     0,     0,     0,  1033,     0,     0,     0,
-    1034,  1035,     0,    35,     0,   286,     0,     0,     0,     0,
-       0,  1036,     0,   175,   176,  1039,     0,     0,   289,   290,
-     291,   292,   293,   294,    43,    44,     0,   295,   296,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     297,     0,   378,     0,     0,   172,     0,     0,    47,    48,
-     299,   300,   301,   302,     0,     0,   283,   284,  1040,   285,
-    1023,     0,  1024,     0,     0,  1025,  1026,  1027,  1028,  1029,
-    1030,  1031,  1032,     0,     0,     0,  1033,     0,     0,     0,
-    1034,  1035,     0,    35,     0,   286,     0,     0,     0,     0,
-       0,  1036,     0,   175,   176,  1039,     0,     0,   289,   290,
-     291,   292,   293,   294,    43,    44,     0,   295,   296,     0,
-       0,     0,     0,     0,     0,   283,   284,     0,   285,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     297,     0,   378,     0,     0,   172,     0,     0,    47,    48,
-     299,   300,   301,   302,   286,     0,     0,     0,  1040,     0,
-     287,     0,     0,     0,   288,     0,     0,   289,   290,   291,
-     292,   293,   294,    43,    44,     0,   295,   296,     0,     0,
-       0,     0,     0,     0,   283,   284,     0,   285,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   510,
-       0,   378,     0,     0,     0,     0,     0,    47,    48,   299,
-     300,   301,   302,   286,     0,     0,     0,     0,     0,   287,
-       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
-     293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
-       0,     0,     0,   283,   284,     0,   285,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   513,     0,
-     378,     0,     0,     0,     0,     0,    47,    48,   299,   300,
-     301,   302,   286,     0,     0,     0,     0,     0,   287,     0,
-       0,     0,   288,     0,     0,   289,   290,   291,   292,   293,
-     294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
-       0,     0,   283,   284,     0,   285,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   297,     0,   378,
-       0,     0,     0,     0,     0,   702,    48,   299,   300,   301,
-     302,   286,     0,     0,     0,     0,     0,   287,     0,     0,
-       0,   288,     0,     0,   289,   290,   291,   292,   293,   294,
-      43,    44,     0,   295,   296,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   297,     0,   378,     0,
-       0,     0,     0,     0,   344,    48,   299,   300,   301,   302,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-       0,     0,    28,    29,    30,     0,     0,     0,     0,     0,
-       0,     0,    33,   206,     2,   207,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      36,     0,    28,    29,    30,   112,     0,    40,    41,     0,
-       0,     0,    33,     0,     0,     0,     0,     0,    43,    44,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      36,     0,    37,     0,    38,     0,     0,   208,    41,   465,
-       2,   207,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
-      30,     0,     0,     0,     0,     0,     0,     0,    33,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    36,     0,    37,     0,
-      38,     0,     0,    40,    41,     2,   207,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,     0,     0,    28,    29,    30,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    36,     0,    37,     0,    38,     0,     0,   208,    41,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-       0,     0,    28,    29,    30,   483,   484,   485,   486,     0,
-       0,     0,    33,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      36,     0,     0,     0,     0,     0,     0,    40,    41
+       0,     0,     0,     0,     0,     0,     0,    36,     0,     0,
+       0,     0,     0,     0,    40,    41
 };
 
 #define yypact_value_is_default(yystate) \
-  ((yystate) == (-1328))
+  ((yystate) == (-1276))
 
 #define yytable_value_is_error(yytable_value) \
@@ -2860,726 +2923,732 @@
 static const yytype_int16 yycheck[] =
 {
-       0,     1,     0,   186,    45,     1,   240,   186,   118,    45,
-     186,   533,   205,    45,   186,   186,   186,   520,     0,   186,
-     743,   187,   743,   743,    51,   220,   863,  1022,   863,   640,
-    1005,    31,    32,   968,    34,     0,    34,   169,   170,   349,
-     512,   598,   349,   616,   491,    45,    34,   598,   495,   664,
-     188,    51,    34,    51,   569,    45,   599,     0,   345,    59,
-     689,  1388,   605,     0,    45,    65,    45,    65,    68,    34,
-      68,    71,     0,    71,   364,    71,  1004,  1005,   368,  1309,
-    1015,  1118,    42,   266,    84,    85,   596,   266,   115,   187,
-     266,    34,   202,   229,   266,   266,   266,    34,   107,   266,
-     596,   267,   596,    66,  1034,  1035,    34,    30,   108,   417,
-      84,   111,   248,    51,   596,   596,   596,    45,   118,  1392,
-     596,   148,   114,    51,   262,   263,    42,    65,   436,   480,
-      68,    84,   100,    71,  1461,   282,   444,    65,   257,    32,
-      68,   686,   116,    71,   136,   186,   124,   125,   157,   149,
-     186,   149,   630,   631,   186,   114,   116,    54,    81,  1031,
-       0,   161,   297,   161,    47,    48,   134,   782,   646,   267,
-     893,    90,   893,   893,   137,     0,     1,   792,   681,  1409,
-     487,  1493,   631,   210,  1114,  1022,   186,   187,   803,   187,
-     101,    84,    85,   480,    34,    67,   186,   646,   114,   118,
-     116,  1238,   202,  1240,  1241,   186,   728,   186,  1520,    34,
-     210,   149,   210,   240,   409,  1488,   127,   114,   712,   219,
-    1493,   149,   222,   161,   222,   266,   704,   121,    68,   229,
-     266,   712,   114,   161,   266,  1210,   712,   120,   112,   405,
-    1513,   135,   114,    68,   244,   272,    71,  1520,   248,   187,
-     101,    42,   252,   253,   252,   704,    42,   814,   186,   187,
-     121,   804,   136,   814,   252,   894,   266,   267,  1443,   267,
-     252,   786,   210,   273,   135,   257,   127,    51,    42,   630,
-     631,  1276,   210,   310,   222,   395,   121,   252,   598,  1264,
-     425,   426,   802,   117,   222,   646,   586,   121,   417,    42,
-     135,   912,    42,  1478,   117,  1480,   802,   405,   802,   252,
-     939,   121,   478,   423,   257,   252,     1,   436,   345,   429,
-     802,   802,   802,    11,   252,   444,   802,   137,   114,   616,
-     116,   331,   341,   331,   621,  1263,  1264,   627,   266,    47,
-      48,   115,   114,   600,   889,    47,    48,   604,   348,   349,
-     114,   244,   116,   704,   133,   117,   503,   136,  1195,   121,
-    1195,   115,   114,   135,   921,   365,    51,   675,   625,   369,
-     505,   114,   629,   116,   114,   510,   116,    75,   513,   379,
-     478,   135,   222,   115,  1319,   119,  1001,  1002,   739,   121,
-      88,    89,   117,   331,   115,   395,   121,   222,   425,   426,
-     285,   425,   426,   331,  1276,   405,   121,   405,   115,  1384,
-     983,   119,   252,     3,   135,   121,   114,   119,   116,     3,
-      75,   349,   107,   423,   920,   310,   311,   252,   135,   429,
-     115,   137,   567,    88,    89,   417,   210,  1432,   920,  1276,
-     920,  1376,  1377,   114,  1439,   116,   121,  1062,  1063,   992,
-     993,   954,   739,   689,   436,     1,  1384,     0,     1,   462,
-     345,   116,   444,   148,   117,   465,   493,   405,   121,   493,
-     470,     0,   157,   121,   417,  1104,     0,   405,   478,  1351,
-     478,   114,   482,   930,   482,   512,   379,   487,   512,   137,
-     490,    34,   492,   436,   966,   380,  1491,   116,   272,   118,
-     482,   444,  1113,    10,   814,   795,    75,   814,   121,   641,
-     350,   136,   650,   660,   121,   681,   135,   482,   863,    88,
-      89,   206,   114,   297,   137,   210,  1493,   527,    71,  1086,
-     137,   114,   532,   116,  1163,  1164,   310,   480,   648,   482,
-     114,   892,    95,    96,   780,   482,  1513,   116,    75,   576,
-      77,    78,   576,  1520,   482,   240,   675,   121,   115,   487,
-     121,    88,    89,   117,  1436,   121,  1438,   121,    75,  1072,
-      77,    78,   121,   137,  1077,   114,   137,   130,   131,   836,
-     580,   137,   701,   681,   731,   121,   114,   272,   137,   616,
-     275,   114,   119,   116,   621,  1432,   596,   490,   598,   492,
-    1102,   137,  1439,   121,  1106,   892,     4,     5,     6,     7,
-       8,     9,   297,   121,   114,   115,   852,   617,   925,   137,
-    1492,    75,   114,    77,    78,   310,   114,   121,   121,   137,
-    1245,   471,   632,   115,    88,    89,   636,  1252,  1253,  1254,
-      93,    94,   482,   137,   137,   645,  1464,   647,   648,   649,
-     587,   115,  1470,  1004,  1491,   850,   341,   482,   894,   115,
-     345,   664,   116,   115,   549,   550,   551,   115,   596,   926,
-     598,   115,  1490,   121,    72,   870,    74,  1495,   452,   364,
-    1025,   681,   114,   368,   115,   685,   114,   687,   116,   114,
-     121,   691,   114,   675,   122,   123,   983,   120,   932,   699,
-    1315,   137,    75,   939,    77,    78,    79,   253,    67,   252,
-     893,   114,   712,   713,   893,    88,    89,   893,   114,   701,
-     116,   893,   893,   893,   856,   114,   893,   116,   115,   895,
-     114,   505,   675,   507,   121,   971,   510,   137,    75,   513,
-     425,   426,  1371,   636,   119,     4,     5,     6,     7,     8,
-       9,    88,    89,   681,   114,   122,   116,    72,   701,  1388,
-      75,   128,   129,    78,   137,    80,   114,   452,   116,   115,
-    1292,   114,    87,   116,  1497,   121,  1497,  1497,   618,   782,
-     465,   115,  1133,  1019,   712,   713,   114,   121,   116,   792,
-      97,    98,   685,   115,   687,   115,   739,   895,   691,   121,
-     803,   121,   802,   996,   137,   898,   491,   900,   493,   114,
-     495,   116,   137,    72,   814,    74,   119,   122,   123,   119,
-     505,   114,   507,   116,   114,   510,    84,   512,   513,   122,
-     123,  1460,  1461,   115,    75,    59,    77,    78,    79,   121,
-      10,    11,    12,    13,    14,   115,  1133,    88,    89,   115,
-    1195,   121,   692,   120,   121,   121,   856,    10,    11,    12,
-      13,    14,   862,   863,   115,   750,   706,   114,  1104,   115,
-     121,   505,    42,   507,   802,   121,   510,   115,   137,   513,
-     114,   863,   115,   121,   108,  1017,   814,   111,   121,    42,
-     132,   576,    84,   893,   123,   895,   137,   115,   213,    99,
-      70,   586,   902,   121,   678,   932,  1072,   115,   115,   115,
-     115,  1077,  1263,   121,   121,   121,   121,    70,   133,   465,
-     863,   115,   116,  1210,   117,   925,   863,  1163,  1164,    61,
-      62,   616,   114,   115,   116,   931,   621,   120,   121,   482,
-      47,    48,   627,   116,   114,   945,   116,   115,   885,   892,
-    1295,   117,   122,   123,   115,  1102,   983,   797,   958,  1106,
-    1107,  1119,  1120,   856,   964,   893,   115,   895,   968,   862,
-    1473,   114,   115,   116,  1072,   556,   557,   558,   559,  1077,
-     115,   527,   552,   553,  1094,   115,   532,     4,     5,     6,
-       7,     8,     9,   678,    75,   219,   115,   925,  1001,  1002,
-    1345,    82,   114,  1348,    85,   116,    87,    88,    89,   902,
-     114,   115,   116,   554,   555,  1015,   560,   561,    35,  1522,
-     117,   119,    75,   863,   119,  1025,    79,   121,  1028,  1029,
-    1030,   716,   119,   136,   580,    88,    89,   352,   863,   354,
-    1022,  1176,  1177,   136,  1179,   114,   117,  1392,   115,   273,
-    1185,   115,  1397,  1188,   117,    72,   117,    74,  1058,  1062,
-    1063,   114,   135,   116,    31,   958,   114,   115,   116,   122,
-     123,   121,  1072,  1220,    61,    62,    63,  1077,   135,  1022,
-     135,  1426,   115,   115,   119,  1022,   120,   115,    10,    11,
-      12,    13,    14,   120,  1094,    75,   120,   115,   983,    79,
-     121,   647,    75,   649,    77,    78,   931,   114,    88,    89,
-     795,   137,   135,     0,     1,    88,    89,   115,  1118,   121,
-      42,     3,   115,   115,   348,   440,   115,   115,    10,    11,
-      12,    13,    14,   907,   114,  1371,   121,  1022,   115,     0,
-       1,   365,   122,   123,  1072,   369,   986,    34,    70,  1077,
-     115,   115,  1388,   699,   115,   115,   115,   115,    45,   115,
-      42,   115,   115,  1310,    51,  1058,  1511,  1314,   115,   115,
-    1170,   120,  1517,    34,    31,   115,   115,   121,    65,  1175,
-     135,    68,  1022,  1528,    71,   136,   117,  1532,    70,   117,
-    1133,   115,   114,   135,   116,  1195,   115,  1022,   114,   119,
-     122,   123,   115,   121,   115,  1208,   115,    68,   115,   121,
-      71,   115,  1347,  1195,   115,   121,   121,   114,  1214,   114,
-     107,   114,   907,    75,  1460,  1461,   114,   135,   115,   114,
-      82,   118,   119,    85,   137,    87,    88,    89,  1238,   135,
-    1240,  1241,  1245,   135,   121,   930,   931,   932,   120,  1252,
-    1253,  1254,  1195,   115,   135,   115,   120,  1367,  1195,   115,
-     133,   148,   149,   117,   116,   120,  1413,  1210,   119,   137,
-     157,   158,   115,  1507,   161,    75,   117,  1170,    75,   121,
-      77,    78,    82,   117,   115,    85,   115,    87,    88,    89,
-     117,    88,    89,  1067,  1276,  1295,    75,   158,   983,   186,
-     187,   117,   117,    82,   115,   117,    85,   117,    87,    88,
-      89,   117,  1315,  1309,  1497,   202,   116,   114,  1497,  1319,
-     863,  1497,   119,   210,    50,  1497,  1497,  1497,   137,   137,
-    1497,   120,  1498,  1276,  1174,   222,   137,   116,    75,  1276,
-      77,    78,    79,   137,   137,  1345,   115,   120,  1348,  1174,
-    1175,    88,    89,   240,   135,  1195,  1522,   115,   120,    86,
-     117,   222,   117,  1473,   117,   252,  1366,  1367,   117,   117,
-    1195,   117,   115,   260,   115,   117,  1376,  1377,   265,   266,
-     267,   114,  1067,   114,   114,   272,    63,   115,   931,  1214,
-      75,   252,  1392,   617,    79,   115,   119,  1397,   114,   945,
-    1498,   137,   117,    88,    89,   117,    57,   115,   632,   101,
-     297,   117,   115,  1409,  1414,   101,   114,   114,   964,   137,
-     120,   645,   968,   310,  1522,   115,  1426,   115,   115,   114,
-     121,  1271,   115,    45,   135,   137,  1276,   122,   123,   326,
-     115,   137,   115,   101,   331,   101,  1271,   462,    99,   115,
-    1432,  1276,   115,   137,   341,   137,  1497,  1439,   345,   137,
-     117,  1497,   349,   350,   117,  1497,   115,   115,   120,  1015,
-       0,     1,   117,  1473,  1474,   137,   114,   364,   137,  1022,
-    1507,   368,   115,  1483,  1309,   120,   120,   115,  1488,  1432,
-     137,   115,   115,  1493,   562,  1432,  1439,  1497,  1498,   564,
-    1498,   563,  1439,  1040,    34,   565,   963,   566,   395,  1491,
-    1461,  1511,    75,  1513,    77,    78,    79,  1517,   405,  1195,
-    1520,    51,  1522,  1353,  1522,    88,    89,  1532,  1528,  1214,
-    1286,  1107,  1532,  1314,  1439,  1077,   423,  1058,   425,   426,
-     678,    71,   429,   194,   431,   678,   900,   691,  1491,     3,
-      75,   114,    77,    78,  1491,   908,    10,    11,    12,    13,
-      14,   580,   856,    88,    89,   452,   217,   958,   642,  1497,
-     431,   716,  1118,   928,  1214,   727,   227,   107,   568,    -1,
-     482,    -1,   568,   470,  1409,   568,    -1,    -1,    42,   114,
-      -1,   478,  1432,   480,   119,   482,    -1,    -1,    -1,  1439,
-     487,    -1,    -1,    -1,    -1,    -1,   493,  1432,    10,    11,
-      12,    13,    14,    -1,  1439,    -1,    70,    -1,   505,   149,
-     507,   482,    -1,   510,  1309,   512,   513,   157,   158,    -1,
-      -1,    -1,  1175,   520,    -1,    -1,    -1,   524,    -1,    -1,
-      42,    75,    -1,    77,    78,    79,   297,    -1,    -1,   664,
-      -1,  1491,  1195,    -1,    88,    89,    -1,   187,    -1,    -1,
-      -1,    -1,    -1,   524,    -1,    -1,  1491,  1441,    70,  1443,
-      -1,  1214,   202,    75,    -1,   205,   206,    79,    -1,    -1,
-     210,   568,   569,    -1,    -1,    -1,    88,    89,   122,   576,
-      -1,    -1,  1238,    -1,  1240,  1241,    -1,    -1,    -1,   586,
-     587,   231,    -1,   590,  1478,   235,  1480,   237,    -1,   596,
-      -1,   598,   114,    -1,    -1,    -1,   246,    -1,    -1,    -1,
-     122,   123,   252,    -1,  1409,    -1,   587,   257,    75,   616,
-      77,    78,    79,  1276,   621,    -1,   623,   267,    -1,    -1,
-     627,    88,    89,   630,   631,   275,    -1,    -1,    -1,    -1,
-      75,    -1,    77,    78,    79,    -1,  1441,    -1,  1443,   646,
-      -1,   648,    -1,    88,    89,    -1,  1309,   782,    -1,   630,
-     631,    -1,    -1,  1319,    -1,    -1,    -1,   792,    -1,    -1,
-      10,    11,    12,    13,    14,   646,    -1,    -1,   803,   114,
-     441,   678,    -1,  1478,   681,  1480,    -1,    -1,     0,    -1,
-      -1,    -1,    -1,    -1,  1028,  1029,  1030,    -1,    -1,    -1,
-      -1,   341,    42,    -1,    -1,   345,   467,   704,   705,   706,
-      -1,   351,  1507,    -1,    -1,   712,   713,    -1,    -1,    -1,
-    1376,  1377,    34,    -1,   364,    -1,    -1,    -1,   368,    -1,
-      70,    -1,    -1,   704,    -1,    -1,    -1,    10,    11,    12,
-      13,    14,   739,    -1,   505,    -1,   743,   744,    -1,   510,
-      -1,    -1,   513,     3,    -1,    -1,  1409,    -1,  1414,    71,
-      10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    42,
-      -1,    -1,    -1,    -1,   114,    -1,   116,   417,    -1,  1432,
-      -1,    -1,   122,   123,    -1,    -1,  1439,    -1,    -1,   786,
-      -1,   431,    42,    -1,    -1,    -1,   436,    70,   795,    -1,
-     797,    -1,    75,     0,   444,   802,    79,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    88,    89,   814,  1474,    68,
-      70,    -1,   462,    -1,    -1,   465,    -1,  1483,    77,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    34,  1491,    -1,
-     480,   114,   482,    -1,    -1,    -1,   158,    -1,    -1,   122,
-     123,   491,   190,    -1,    -1,   495,    -1,    -1,    75,   197,
-      77,    78,    79,    -1,    -1,    -1,   863,    -1,    -1,    -1,
-     119,    88,    89,    -1,    71,    68,  1001,  1002,    -1,    -1,
-      -1,    -1,    -1,    -1,   524,    -1,    -1,    -1,   885,    -1,
-      -1,    84,   863,    -1,    -1,   892,   893,   114,   895,   116,
-      -1,    -1,   663,    -1,    -1,   122,   123,    -1,    -1,    -1,
-     907,   672,   161,    -1,   885,   676,    -1,    -1,   135,   231,
-      -1,    -1,    -1,   920,   921,    -1,   119,    -1,   925,   569,
-      -1,   269,    -1,    -1,   931,   932,    -1,  1062,  1063,    -1,
-     252,    -1,    -1,    -1,    -1,   257,   586,   587,    -1,    -1,
-      75,    -1,    77,    78,    79,    -1,    -1,   954,   598,    -1,
-     931,   158,    -1,    88,    89,    -1,    -1,    -1,   161,    -1,
-      -1,    -1,    -1,   222,    -1,    -1,   616,    -1,    -1,    -1,
-      75,   621,    77,    78,    79,    -1,   983,   627,   326,   114,
-     630,   631,    -1,    88,    89,    68,   334,   122,   123,   337,
-      -1,    75,    -1,    77,    78,    79,   646,  1004,  1005,    -1,
-      -1,   260,    -1,    -1,    88,    89,   265,    -1,    -1,   114,
-      -1,   116,    -1,    -1,   664,  1022,    -1,   122,   123,   222,
-      -1,    -1,  1366,  1004,  1005,   675,    -1,    -1,    -1,   351,
-     114,    -1,   116,    -1,    -1,    -1,   119,    -1,   122,   123,
-      -1,  1022,    -1,    -1,    -1,   252,    -1,    -1,    -1,   397,
-     257,   701,    -1,   401,   704,    -1,    -1,   260,    -1,    -1,
-    1067,    -1,   265,   713,    -1,  1072,   716,    -1,    -1,    -1,
-    1077,    -1,    -1,  1208,    -1,    -1,    -1,    -1,   161,  1086,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1094,    -1,   739,
-      -1,   350,    -1,    -1,   744,   417,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,    -1,    -1,   431,
-    1245,    -1,    -1,    -1,   436,    -1,   887,  1252,  1253,  1254,
-      -1,    -1,   444,    -1,    -1,    -1,  1133,    -1,    -1,   477,
-     136,    -1,   782,    -1,    -1,    -1,    -1,    -1,    -1,   222,
-     462,    -1,   792,    -1,   351,   795,    -1,   350,   798,    -1,
-      -1,    -1,    -1,   803,    -1,    -1,    -1,     0,   480,    -1,
-     482,    -1,    -1,   813,    -1,    -1,    -1,  1174,  1175,    -1,
-      75,   430,    77,    78,    79,    -1,    -1,   260,    -1,    -1,
-    1315,    -1,   265,    88,    89,    -1,    -1,   446,  1195,    -1,
-      -1,    34,    -1,  1174,  1175,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   524,  1210,    -1,    -1,    -1,  1214,    -1,   114,
-     417,   116,   471,   863,  1195,    -1,    -1,   122,   123,    -1,
-     568,   569,    -1,    -1,   431,    -1,    -1,   430,    71,   436,
-      -1,    -1,    -1,  1214,    -1,   885,    -1,   444,    -1,    -1,
-      -1,    -1,   892,    -1,    -1,   895,    75,    -1,    77,    78,
-      79,    -1,    -1,    -1,    -1,   462,  1263,  1264,    -1,    88,
-      89,    -1,  1033,    -1,  1271,   587,    -1,   350,   471,  1276,
-      -1,   921,    -1,   480,    -1,   482,    -1,    -1,    -1,    -1,
-     930,   931,  1263,  1264,    -1,   114,    -1,    -1,    -1,    -1,
-    1271,    -1,    -1,   122,   123,  1276,    -1,    -1,    -1,    -1,
-      -1,    -1,  1309,   651,    -1,    -1,    86,   655,   630,   631,
-      90,    91,    92,    -1,    -1,   158,    -1,   524,    -1,    -1,
-      -1,    -1,    -1,    -1,   646,    -1,    -1,    -1,  1309,    -1,
-      -1,   590,    -1,   983,   114,    -1,   116,    -1,   118,   119,
-      -1,    -1,   664,    -1,    -1,    -1,   996,   430,    -1,    -1,
-      -1,  1001,  1002,   675,  1004,  1005,    -1,    -1,    -1,   618,
-    1367,    86,    -1,    -1,   623,    90,    91,    92,    -1,    -1,
-      -1,    -1,  1022,    -1,    -1,    -1,    -1,  1384,    -1,   701,
-     587,    -1,   704,    -1,    -1,    -1,    -1,   590,   471,   114,
-      -1,   116,    -1,   118,   119,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1409,  1384,    -1,    -1,    -1,    -1,    -1,   252,
-      -1,    -1,  1062,  1063,   257,   618,    -1,   739,    -1,    -1,
-     623,    -1,    -1,   630,   631,  1432,    -1,    -1,  1409,    -1,
-      -1,    -1,  1439,   692,  1441,    -1,  1443,    -1,   786,   646,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   706,    -1,    -1,
-      -1,  1432,    -1,    -1,    -1,    -1,    -1,   664,  1439,    -1,
-     782,    -1,    -1,    -1,    -1,    -1,  1473,    -1,   675,    -1,
-     792,  1478,    -1,  1480,    -1,    -1,   798,    -1,    -1,    -1,
-      -1,   803,    -1,  1133,  1491,     0,    -1,    -1,    -1,   692,
-    1497,  1498,    -1,    -1,   701,    -1,    -1,   704,    -1,    -1,
-    1507,    -1,    -1,   706,    -1,    -1,    -1,   590,   351,    -1,
-    1491,    -1,    -1,    -1,  1285,  1522,    -1,    -1,    -1,    34,
-      -1,    -1,    -1,    -1,    -1,  1175,    -1,    -1,    -1,    -1,
-      -1,    -1,   739,    -1,    -1,   618,    -1,    -1,   797,    -1,
-     623,   863,    -1,    -1,    -1,  1195,    -1,    -1,    28,    29,
-      30,   899,    -1,    -1,    -1,    -1,    71,    -1,  1208,    -1,
-    1210,    -1,    -1,   885,  1214,    -1,    -1,    -1,    -1,    -1,
-     892,    -1,    -1,    -1,   417,   782,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   792,    -1,    -1,   431,    -1,
-      -1,   798,    -1,   436,   797,  1245,   803,    -1,    -1,    -1,
-      -1,   444,  1252,  1253,  1254,    -1,    -1,    -1,    59,   692,
-      -1,    -1,    -1,  1263,  1264,    -1,    -1,    -1,    -1,   462,
-     100,    -1,   102,   706,    -1,   973,  1276,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   480,    -1,   482,
-      -1,   989,    -1,   158,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   863,   108,    -1,  1309,
-     111,    -1,    -1,    -1,    -1,  1315,    -1,    -1,    -1,  1440,
-      -1,  1442,    -1,    -1,    -1,    -1,    -1,    -1,   885,  1001,
-    1002,   524,  1004,  1005,    -1,   892,    -1,    -1,    -1,    -1,
+       0,     1,     0,   200,     0,    45,   180,   444,   180,     1,
+       0,   180,   843,    45,   180,    45,   590,   180,   506,   632,
+     180,   180,   525,   154,  1035,   183,   561,   341,  1035,   116,
+    1035,    31,    32,   608,    34,  1304,    34,   485,    34,     0,
+      34,   489,   105,   996,    34,    45,   246,   843,   341,   590,
+     337,    51,   970,    51,     0,   588,    42,   356,   215,    59,
+     588,   360,   165,   166,    64,    42,    64,    67,   878,    67,
+      70,    45,    70,    34,   703,   588,  1037,    67,    70,   588,
+     409,   255,    54,   255,   969,   970,   255,  1264,    34,   255,
+     153,    66,   255,   251,   252,   255,   255,    42,    45,   428,
+     592,    42,    67,   588,   596,    42,   106,   436,   588,   109,
+     197,    45,   417,   418,  1389,    84,   116,   933,    42,     0,
+       1,    42,    42,    30,   124,   617,   114,   999,  1000,   621,
+     116,    47,    48,   471,     1,   622,   623,   114,   100,   116,
+     180,    42,   114,  1412,   112,   145,    84,   145,   180,   114,
+     180,   638,    71,    34,   588,    74,   987,   157,    77,   157,
+      79,   101,   137,  1088,   980,     0,    85,   288,   136,   114,
+     591,   116,   134,   114,    81,   116,   597,   114,   116,   116,
+     180,   181,   487,   181,   471,   478,    67,   127,  1463,    70,
+     114,   987,   116,   114,   114,   116,   116,   197,   685,    34,
+      57,   506,   181,   114,   120,   205,   180,   205,   693,   409,
+      45,   714,  1084,   693,   214,   255,    51,   217,     0,   217,
+     794,    11,  1032,   255,   224,   255,  1187,   217,   428,    64,
+     114,   766,    67,   180,   234,    70,   436,   237,     0,     1,
+      97,   241,   242,   241,   401,   241,   180,   241,   101,   782,
+     246,   241,    34,   794,   782,   255,   256,  1434,   256,   693,
+     115,   117,   262,   568,  1441,   265,   121,   121,   276,   782,
+     333,   119,    34,   782,   127,   114,   590,   256,  1496,   578,
+     241,   910,  1200,   137,   622,   623,   899,    47,    48,   208,
+       3,   181,   423,   301,   302,   241,   135,   782,  1393,  1517,
+     638,  1226,   782,  1228,  1229,    90,  1524,    42,    70,     3,
+     145,  1264,    67,   887,  1496,    42,   121,  1494,    47,    48,
+     619,   608,   157,   323,   816,   323,   613,   121,   415,   337,
+     135,    42,   189,   118,   421,  1253,   217,  1168,    42,   668,
+     340,   341,  1524,   137,   122,   180,   181,   685,   782,    51,
+     128,   129,   342,   886,    42,   212,   121,   357,   886,   119,
+     241,   361,   117,   784,   372,   222,   256,  1252,  1253,    10,
+     205,   371,  1168,   948,   115,   242,   623,   886,   499,   114,
+     501,   116,   217,   504,     0,   516,   507,   114,   726,   116,
+     119,   638,  1345,   453,   135,   395,  1491,   395,   121,   115,
+     892,  1496,   157,   114,    75,   116,   241,  1036,   114,  1445,
+     114,   113,   116,   409,   137,   415,   395,    88,    89,   135,
+     255,   421,  1517,   114,   115,   344,   114,   346,   116,  1524,
+     136,   288,   428,  1264,    75,   115,    77,    78,   685,   726,
+     436,   224,   121,   931,  1480,   116,  1482,   121,   579,  1078,
+    1041,   115,  1043,   901,   237,   135,   456,   121,   137,   241,
+     121,   461,   217,   137,   246,     1,   903,  1385,   668,   469,
+    1083,   469,   462,   473,   135,   473,   775,   473,   478,   241,
+     794,   481,   682,   473,  1058,  1438,   486,  1440,   323,  1500,
+     469,   622,   623,  1500,   249,  1500,   115,  1313,   136,   254,
+    1385,   794,   121,   205,    75,   395,   341,   638,    79,  1138,
+    1139,     0,   473,   432,  1475,    51,   121,    88,    89,   519,
+     115,    59,    95,    96,   524,    75,   121,   473,   114,   114,
+     633,   116,   137,   541,   542,   543,   957,   958,    88,    89,
+    1501,   121,  1495,   114,     4,     5,     6,     7,     8,     9,
+     115,   122,   123,   640,   685,   135,   121,   130,   131,   261,
+     395,  1377,  1378,   117,   651,  1526,   116,   121,   106,   105,
+      75,   109,    77,    78,    79,  1466,   433,   113,   916,   469,
+     121,  1472,   117,    88,    89,   114,   121,   342,   588,   456,
+     590,    75,   473,    77,    78,    79,   137,   657,   891,   301,
+     121,   458,  1493,  1434,    88,    89,   121,  1498,   144,   609,
+    1441,   117,    72,   115,    74,   121,   137,   153,   114,   121,
+     610,    75,   137,   114,   624,   116,   273,   409,   628,   916,
+     115,   969,   137,   579,    88,    89,   121,   637,   473,   639,
+     640,   641,   499,   478,   114,   117,   428,   504,   121,   121,
+     507,   651,   519,   137,   436,   121,   114,   524,   121,   121,
+     114,   948,   116,  1494,   137,   201,   116,   422,   118,   205,
+     114,   137,   668,   830,   137,   137,   214,   137,   115,   114,
+     680,   115,   121,   673,   121,   135,   682,     0,     1,   471,
+      75,   473,   117,   693,   694,    75,   121,   687,   137,    79,
+     858,   701,   762,    88,    89,   705,   115,   462,    88,    89,
+     115,   473,   772,   773,   115,   133,   121,   115,   136,   703,
+     121,    34,   730,   783,   262,   261,   115,    75,   264,    77,
+      78,   115,    45,   836,   114,   114,   867,   121,    51,     3,
+      88,    89,   122,   123,  1373,   115,    10,    11,    12,    13,
+      14,    64,   288,   588,    67,   590,    75,    70,    77,    78,
+    1389,   115,   115,   114,   961,   301,   114,  1105,   121,    88,
+      89,   119,   639,   115,   641,   120,   760,  1280,    42,   121,
+     115,   114,   782,   116,  1076,   115,   121,   777,  1080,   122,
+     123,   121,   105,   114,   794,   124,   125,   333,   121,   656,
+     113,   337,   340,   116,   117,   115,    70,   114,   665,   116,
+      67,   121,   669,   680,   114,   122,   123,   114,  1105,   357,
+     356,   137,   115,   361,   360,    93,    94,   582,   121,   115,
+     114,   144,   145,  1462,  1463,   121,   836,   119,   969,   970,
+     153,   154,   842,   843,   157,   115,   137,   843,   832,   137,
+     497,   121,   119,   843,    84,   610,    97,    98,   693,   694,
+     615,  1035,   114,  1035,   114,    51,  1035,   180,   181,  1035,
+      84,  1028,  1035,   132,   874,  1035,  1035,   877,   123,   982,
+     133,   417,   418,    99,   197,    75,   668,    77,    78,    79,
+     116,   891,   205,   120,   121,   874,   117,   843,    88,    89,
+     682,   114,   115,   116,   217,   117,   966,   967,   444,   115,
+     902,   115,   116,  1200,  1252,    61,    62,   917,   673,   115,
+     456,   867,   115,   923,   114,   114,   910,   113,   241,   929,
+      47,    48,   687,   933,  1089,  1090,   249,    67,   120,   121,
+     948,   254,   255,   256,   726,   115,    76,   782,   261,   485,
+     115,   487,   936,   489,   548,   549,   550,   551,   144,   794,
+     115,   951,   843,   499,   137,   501,  1026,  1027,   504,   671,
+     506,   507,   114,   115,   116,   288,   114,   115,   116,   987,
+     980,  1068,   544,   545,   874,   546,   547,   117,   301,   117,
+     990,   987,   116,   993,   994,   995,   119,   987,   119,   288,
+     984,   114,   115,   116,   317,   136,   653,    61,    62,    63,
+     323,   121,   869,    10,    11,    12,    13,    14,   136,   205,
+     333,   902,   777,  1023,   337,   552,   553,   157,   341,   342,
+     119,   114,   568,  1033,   115,  1035,   115,  1037,   135,   874,
+     117,   987,   578,   356,   117,    42,   117,   360,   135,  1049,
+     917,   135,  1036,   121,  1033,    31,   891,   115,  1037,   115,
+     119,   843,   929,   115,   121,   120,   933,  1198,  1068,   120,
+     717,   609,   608,    70,  1511,   261,    75,   613,    77,    78,
+      79,   843,   395,   619,   120,   114,   624,   217,  1088,    88,
+      89,   115,   135,   137,  1078,   115,   121,   115,    75,   637,
+      77,    78,   415,   115,   417,   418,   987,   115,   421,   115,
+     423,    88,    89,   980,   121,   301,   120,   115,    31,   249,
+     115,  1252,  1253,   122,   254,   115,   115,   115,   417,   418,
+     115,   444,   115,   115,   916,   671,   115,   114,  1198,   119,
+     902,   998,   119,  1033,   115,  1145,   115,  1037,   461,   115,
+     136,   337,   115,   115,  1138,  1139,   469,   121,   471,   117,
+     473,   697,   117,   115,   115,   478,   114,   135,  1168,   115,
+     872,   121,  1168,  1233,   487,   119,   121,   115,  1168,   121,
+     121,  1241,  1242,  1243,   115,   114,   499,  1187,   501,   114,
+     114,   504,   114,   506,   507,   114,   951,   137,  1033,   135,
+    1035,   135,  1037,   516,   121,   987,   120,   135,  1187,   135,
+     499,   115,   342,  1205,   115,   504,   115,   135,   507,   117,
+     120,  1088,  1168,    75,   133,   987,  1226,   120,  1228,  1229,
+      82,   417,   418,    85,   119,    87,    88,    89,   115,   775,
+     137,   117,   121,    75,   117,    77,    78,   560,   561,   115,
+     115,   115,     3,   115,  1385,   568,    88,    89,   444,    10,
+      11,    12,    13,    14,   116,   578,   579,   117,  1264,   582,
+     559,   117,   117,   117,  1264,   588,    75,   590,    77,    78,
+      79,   117,  1369,  1283,   116,   843,   117,  1168,    50,    88,
+      89,    42,   422,  1293,   137,   608,   137,  1187,   137,   137,
+     613,   487,   615,   137,   120,   115,   619,   115,   438,   622,
+     623,   115,  1304,  1313,  1293,   114,    32,   115,  1264,    70,
+     506,   135,   115,  1105,  1205,   638,  1500,   640,  1500,   120,
+     120,  1500,   462,   117,  1500,   117,   872,  1500,   651,  1339,
+    1500,  1500,  1342,    86,   117,   117,   117,   117,   115,   115,
+    1052,  1411,  1187,   117,   114,   114,  1348,  1347,   671,  1226,
+     114,  1228,  1229,    63,   119,   901,   902,   903,  1368,  1369,
+     115,   115,   685,   686,   687,   114,   137,  1377,  1378,   117,
+     693,   694,   568,  1264,   117,   115,  1168,    75,  1475,  1373,
+     117,   115,   101,  1393,    82,   101,   114,    85,  1398,    87,
+      88,    89,   114,  1293,   115,  1389,  1168,   120,   124,   137,
+    1400,   115,   948,   726,   115,    45,  1273,  1417,  1200,   115,
+    1412,   135,   608,  1304,   121,   115,   115,   613,  1428,  1076,
+     137,   101,   990,  1080,  1081,   137,   101,   115,  1434,   137,
+     117,   115,   137,  1205,  1434,  1441,  1313,   115,   120,   115,
+     137,  1441,   582,   766,   117,   993,   994,   995,  1293,   117,
+    1500,   137,   775,   114,   777,   120,  1347,  1348,  1500,   782,
+    1500,   120,   115,   137,   115,  1475,  1476,  1179,  1462,  1463,
+     610,   794,  1264,   137,   115,   615,  1486,   115,  1434,  1005,
+     554,  1491,   555,   558,   556,  1441,  1496,   557,  1494,   928,
+    1500,  1501,  1264,  1501,  1494,  1168,  1463,  1350,  1536,  1081,
+    1377,  1378,  1309,  1274,  1441,  1515,  1052,  1517,   234,  1400,
+    1023,  1521,  1501,   872,  1524,  1033,  1526,    67,  1526,  1293,
+     843,  1412,  1532,  1043,   705,   895,  1536,   923,    75,   634,
+      77,    78,  1304,   673,   836,   697,  1205,  1526,  1494,   265,
+    1417,    88,    89,  1434,   867,   894,   713,   687,   473,   872,
+    1441,   874,    -1,    -1,  1211,    -1,   560,    75,   560,    77,
+      78,    79,    -1,   886,   887,    -1,   560,   117,   891,    -1,
+      88,    89,   119,    -1,    -1,  1442,  1348,  1444,    -1,   902,
+     903,    -1,  1347,     0,     1,    -1,     4,     5,     6,     7,
+       8,     9,    -1,   916,    -1,    -1,   114,    -1,   116,  1476,
+    1168,  1501,    -1,  1494,   122,   123,    -1,   157,   657,  1486,
+      -1,     3,  1479,    -1,  1481,    -1,    -1,    34,    10,    11,
+      12,    13,    14,    -1,    -1,   948,  1526,    -1,    -1,    -1,
+      -1,    -1,    -1,  1179,    51,  1400,    -1,   777,    -1,    -1,
+    1412,    -1,  1434,    -1,    -1,   371,   969,   970,  1305,  1441,
+      42,    -1,  1309,    70,    72,  1500,    74,    -1,  1525,  1205,
+    1527,    -1,  1434,    -1,   987,    -1,    -1,   217,    75,  1441,
+      77,    78,    79,  1540,  1541,    -1,    -1,    -1,    70,    -1,
+      -1,    88,    89,    -1,   234,    -1,    -1,    -1,   105,    10,
+      11,    12,    13,    14,    10,    11,    12,    13,    14,   249,
+      -1,    -1,  1494,    -1,   254,    -1,    -1,   903,    -1,    -1,
+    1033,    -1,  1035,   762,  1037,  1283,    -1,    -1,    -1,    -1,
+      -1,    42,  1494,   772,   773,    51,    42,    -1,   145,  1052,
+      -1,  1443,    -1,  1445,   783,  1058,   153,   154,    64,    -1,
+      -1,    67,    -1,    -1,    70,  1068,    -1,     0,    -1,    70,
+      -1,    -1,   948,    -1,    70,   481,    -1,    86,  1304,  1416,
+     486,    90,    91,    92,   181,    -1,    -1,    -1,  1480,    -1,
+    1482,  1339,    -1,    -1,  1342,    -1,    -1,    -1,    -1,    -1,
+     197,    34,  1105,   200,   201,   114,    -1,   116,   205,   118,
+     119,    -1,   342,   114,    -1,   116,    -1,    -1,   114,    -1,
+     116,   122,   123,    -1,    -1,    -1,   122,   123,    -1,   226,
+      -1,   951,    -1,   230,   185,   232,    -1,    70,   235,   145,
+    1368,   192,    -1,    -1,   241,  1393,    -1,    -1,    75,   246,
+    1398,   157,    79,    -1,    -1,    -1,    -1,    -1,    -1,   256,
+      -1,    88,    89,    -1,    -1,  1168,    -1,   264,    -1,    -1,
+    1149,  1150,    -1,  1152,    -1,   181,  1179,    -1,    -1,  1158,
+    1428,    -1,  1161,    -1,  1187,    -1,  1412,   114,    -1,   116,
+      -1,    -1,   422,    -1,    -1,   122,   123,  1200,    -1,   205,
+      -1,    75,  1205,    77,    78,    79,    -1,   258,    -1,    -1,
+      -1,   217,    -1,    -1,    88,    89,    -1,  1443,    -1,  1445,
+      -1,   154,   628,    -1,     4,     5,     6,     7,     8,     9,
+      -1,    -1,   462,    -1,    -1,    -1,   333,   966,   967,    -1,
+     337,    -1,    -1,    -1,    -1,    -1,   343,    -1,    -1,  1252,
+    1253,    -1,    -1,    -1,  1480,    35,  1482,    -1,    -1,   356,
+      -1,  1264,    -1,   360,    -1,    -1,   317,  1515,    75,    -1,
+      77,    78,    79,  1521,    -1,   326,    -1,    -1,   329,    -1,
+      -1,    88,    89,    -1,  1532,  1511,    -1,    -1,  1536,    -1,
+    1293,    -1,    72,   226,    74,   701,    -1,  1026,  1027,   705,
+      -1,  1304,    -1,    -1,    -1,    -1,    -1,   114,   241,   116,
+      -1,    -1,   409,   246,    -1,   122,   123,   323,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   423,    -1,   135,    -1,
+      -1,   428,    -1,    -1,    -1,    -1,   387,    -1,    -1,   436,
+     391,    -1,    -1,    -1,  1347,  1348,    -1,    75,    -1,    77,
+      78,    79,   582,    -1,    -1,    -1,   453,    -1,    -1,   456,
+      88,    89,  1341,    -1,    -1,    75,  1369,    77,    78,    79,
+      -1,    -1,    -1,    -1,   471,    -1,   473,    -1,    88,    89,
+     610,    -1,  1385,    -1,    -1,   615,   114,    -1,   485,   395,
+       0,    -1,   489,    -1,   122,   123,    -1,  1400,    -1,    -1,
+      -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    75,  1412,
+     343,    -1,   122,   123,    -1,    82,    -1,   468,    85,   516,
+      87,    88,    89,    86,    34,    -1,    -1,    90,    91,    92,
+     836,  1434,    -1,    -1,    75,    -1,   842,    -1,  1441,    -1,
+    1443,    82,  1445,   673,    85,    -1,    87,    88,    89,   116,
+      -1,   114,    -1,   116,    -1,   118,   119,   687,    -1,    -1,
+      70,    -1,     0,     1,   561,    -1,    -1,    -1,    -1,    -1,
+      -1,   877,  1475,    -1,    -1,   116,   409,  1480,    -1,  1482,
+      -1,   578,   579,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     423,  1494,    -1,   590,    -1,   428,    34,  1500,  1501,    -1,
+      -1,    -1,    -1,   436,  1233,    -1,    -1,    -1,  1511,   560,
+     561,   608,  1241,  1242,  1243,    -1,   613,   923,    -1,     0,
+     453,    -1,   619,  1526,    -1,   622,   623,  1347,    -1,    67,
+      -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,   471,    -1,
+     473,   638,    -1,    -1,   154,    -1,    -1,   777,    -1,    -1,
+      -1,    -1,    -1,    34,    10,    11,    12,    13,    14,    -1,
+     657,    -1,    75,    -1,    77,    78,    79,    -1,    -1,    -1,
+      -1,   668,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,
+    1400,    -1,    -1,   516,    -1,   682,    42,    -1,   685,    70,
+      -1,   642,    -1,    -1,    -1,   646,    -1,   694,    -1,    -1,
+     697,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
+     123,    -1,    -1,    -1,    70,    -1,   154,  1023,    -1,    75,
+      -1,    77,    78,    79,    75,    -1,    77,    78,    79,   726,
+      -1,   241,    88,    89,    -1,  1511,   246,    88,    89,    -1,
+      -1,    -1,    -1,  1049,    -1,    -1,   579,    -1,    -1,    -1,
+      -1,    10,    11,    12,    13,    14,    -1,    -1,   114,    -1,
+     116,    -1,    -1,   114,    -1,   762,   122,   123,    -1,    -1,
+      -1,   122,   123,   154,    -1,   772,   773,    -1,   775,   217,
+      -1,   778,  1411,    42,    -1,    -1,   783,    -1,    -1,   622,
+     623,    -1,    -1,    -1,    -1,    -1,   793,    -1,    -1,    -1,
+      -1,    -1,    -1,   241,    -1,   638,    -1,    -1,    -1,    -1,
+      -1,    70,    -1,    -1,    -1,   766,    75,    -1,    77,    78,
+      79,   951,    -1,    -1,   657,    -1,    -1,    -1,    -1,    88,
+      89,    -1,    -1,   343,    -1,   668,    -1,    -1,    -1,  1145,
+      -1,    -1,    -1,    -1,    -1,    -1,   843,    -1,    -1,   682,
+      -1,    -1,   685,    -1,    -1,   114,    -1,   116,    -1,    -1,
+     241,    -1,    -1,   122,   123,   246,    -1,    -1,    -1,    -1,
+     867,    -1,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     887,    -1,    -1,   726,    -1,    -1,    -1,    -1,    -1,   409,
+      -1,    -1,    -1,    -1,   901,   902,   136,    -1,    -1,    -1,
+      -1,    -1,    -1,   423,    -1,    -1,    -1,    -1,   428,   916,
+      -1,    -1,    -1,    -1,    -1,    -1,   436,    -1,    -1,   762,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   772,
+     773,    -1,    -1,   453,    -1,   778,    -1,    -1,    -1,    -1,
+     783,   948,    -1,    -1,    10,    11,    12,    13,    14,    -1,
+      -1,   471,   343,   473,   961,    -1,    -1,    -1,    -1,   966,
+     967,    -1,   969,   970,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   423,    42,   938,    -1,    -1,
+     987,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
+      -1,    -1,    -1,   954,    -1,    -1,   516,    -1,    -1,    -1,
+     843,    -1,     0,    -1,    70,    59,    -1,    -1,    -1,    75,
+      -1,    77,    78,    79,    42,    -1,    -1,    -1,   409,  1026,
+    1027,    -1,    88,    89,   867,   473,    -1,    -1,    -1,    -1,
+    1037,    -1,   423,    -1,    -1,    -1,    34,   428,    -1,    -1,
+      -1,    -1,    70,    -1,    -1,   436,    -1,    75,   114,    -1,
+      28,    79,   106,    -1,    -1,   109,   122,   123,    -1,   579,
+      88,    89,   453,    -1,    -1,    -1,    -1,    -1,   516,    -1,
+      -1,    -1,    70,   916,    10,    11,    12,    13,    14,    -1,
+     471,  1042,   473,    -1,    -1,    -1,   114,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   122,   123,    -1,    -1,  1105,    -1,
+      -1,    -1,   622,   623,    -1,    83,    42,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   638,    -1,
+      98,    -1,   100,   966,   967,   516,   969,   970,    -1,    -1,
+      -1,   579,    -1,    -1,    70,    -1,    -1,   657,    -1,    75,
+      -1,    77,    78,    79,   987,    -1,    -1,    -1,   668,    -1,
+      -1,    -1,    88,    89,    -1,    -1,   154,    -1,    -1,    -1,
+     214,  1168,   682,    -1,    -1,   685,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   622,   623,    -1,    -1,   114,    -1,
+     116,    -1,    -1,  1026,  1027,    -1,   122,   123,   579,    -1,
+     638,  1198,    -1,  1200,    -1,    -1,    -1,    -1,  1205,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   726,  1347,   262,   187,
+     188,    -1,    -1,    -1,   192,    -1,   194,   195,    -1,    -1,
+      -1,  1182,    -1,    -1,    -1,    -1,  1233,    -1,    -1,    -1,
+      -1,   622,   623,    -1,  1241,  1242,  1243,   685,    -1,    -1,
+      -1,    -1,   762,   241,    -1,  1252,  1253,   638,   246,    -1,
+      -1,    -1,   772,   773,    -1,    -1,    -1,  1264,   778,    -1,
+    1400,    -1,  1105,   783,    -1,    -1,   657,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   668,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   340,    -1,    -1,    -1,
+      -1,   682,    -1,    -1,   685,    -1,    -1,  1304,    -1,    -1,
+      -1,    -1,    -1,   357,    -1,    -1,    -1,   361,    -1,    -1,
+      10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   843,    -1,  1168,    -1,    -1,  1289,    -1,
+      -1,    -1,    -1,    -1,    -1,   726,    -1,    -1,    -1,    -1,
+      -1,  1348,    42,    -1,    -1,   343,    -1,   867,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1198,    -1,  1200,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1022,    -1,   182,    -1,    -1,    -1,  1477,    -1,  1479,    -1,
-      -1,    -1,   192,   193,   797,    -1,    -1,   197,    -1,   199,
-     200,    -1,  1070,    -1,    -1,    -1,    -1,   986,    -1,    -1,
-      -1,    -1,    -1,    -1,  1384,    -1,    -1,   252,    -1,    -1,
-    1062,  1063,   257,    -1,   587,    -1,    -1,    -1,    -1,    -1,
-    1521,    -1,  1523,    -1,    -1,    -1,    -1,    -1,    -1,  1409,
-      -1,  1109,    -1,    -1,    -1,  1536,  1537,    -1,   219,    -1,
+      70,   762,    -1,    -1,    -1,    75,    -1,    -1,  1385,    79,
+      -1,   772,   773,    -1,    -1,    -1,    -1,   778,    88,    89,
+    1233,    -1,   783,    -1,    -1,   843,   916,    -1,  1241,  1242,
+    1243,    -1,    -1,    -1,  1411,  1412,    -1,    -1,    -1,  1252,
+    1253,   409,    -1,    -1,   114,    -1,    -1,    -1,    -1,   867,
+     398,  1264,   122,   123,    -1,   423,    -1,  1434,    -1,    -1,
+     428,    -1,    -1,    -1,  1441,    55,    -1,    57,   436,    -1,
+      60,    61,    62,    -1,    -1,    -1,   966,   967,    -1,   969,
+     970,    -1,   843,    -1,   902,   453,    -1,    77,    -1,    10,
+      11,    12,    13,    14,    -1,    -1,    -1,   987,    88,    89,
+      -1,    -1,    -1,   471,    -1,   473,   867,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1494,    -1,    -1,
+      -1,    42,    -1,    -1,  1501,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1348,  1026,  1027,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   516,    70,
+      -1,   969,   970,    -1,    75,   916,    77,    78,    79,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,   987,
+      -1,    -1,  1385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   609,    -1,    -1,    -1,    -1,
+      -1,    -1,   182,   114,    -1,    -1,    -1,    -1,  1411,    -1,
+     624,   122,   123,    -1,    -1,   966,   967,    -1,   969,   970,
+      -1,   579,    -1,   637,    -1,  1105,   564,   565,    -1,    -1,
+      -1,  1434,    -1,    -1,    -1,    -1,   987,    -1,  1441,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1432,   986,    -1,    -1,    -1,   630,   631,  1439,
-      -1,    -1,    -1,    -1,  1001,  1002,    -1,  1004,  1005,    -1,
-      -1,    -1,    -1,   646,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1133,    -1,    -1,    -1,  1022,    -1,    -1,    -1,    -1,
-      -1,   664,   273,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   675,    -1,    -1,    -1,   351,    -1,    -1,    -1,
-      -1,  1491,    -1,    -1,    -1,    55,    -1,    57,  1498,    -1,
-      60,    61,    62,  1175,    64,  1062,  1063,    -1,   701,    -1,
-      -1,   704,    -1,    -1,    -1,    -1,    -1,    -1,    78,    -1,
-      -1,    -1,    -1,  1195,    -1,    -1,    -1,    -1,    -1,    -1,
-      90,    91,    -1,    -1,    -1,    -1,  1208,    -1,  1210,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   739,   348,    -1,    -1,
-      -1,    -1,   417,   986,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   365,  1174,   431,    -1,   369,    -1,
-      -1,   436,    -1,  1245,    -1,    -1,  1133,    -1,    -1,   444,
-    1252,  1253,  1254,    -1,    -1,    -1,    -1,    -1,    -1,   782,
-      -1,  1263,  1264,    -1,    -1,    -1,    -1,   462,    -1,   792,
-      -1,    -1,    -1,    -1,  1276,   798,    -1,    -1,    -1,    -1,
-     803,    -1,    -1,    -1,    -1,   480,    -1,   482,  1175,    -1,
-      -1,  1174,    10,    11,    12,    13,    14,    -1,    -1,    -1,
-      -1,    28,    29,    30,    -1,    -1,    -1,    -1,  1195,    -1,
-      -1,    -1,    -1,  1315,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1208,    -1,  1210,    42,    -1,    -1,    -1,    -1,   524,
-      -1,    -1,  1271,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     863,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    70,    -1,    -1,    -1,    -1,    75,  1245,    77,
-      78,    79,   885,    -1,    -1,  1252,  1253,  1254,    -1,   892,
-      88,    89,    -1,   100,    -1,   102,  1263,  1264,    -1,    -1,
-      -1,    -1,  1384,    -1,    -1,    -1,    -1,    -1,  1271,  1276,
-      -1,    -1,   587,    -1,    -1,    -1,   114,    -1,   116,    -1,
-     127,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,    -1,
-      -1,  1174,   572,   573,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1315,    -1,
-    1432,    -1,    -1,    -1,    -1,   630,   631,  1439,    -1,   599,
-      -1,    -1,   602,   603,    -1,   605,    -1,   607,   608,    -1,
-      -1,   646,   612,   613,   344,   182,   346,    -1,    -1,    -1,
-      -1,    -1,    -1,   190,    -1,   192,   193,   357,   358,   664,
-     197,    -1,   199,   200,    -1,    -1,    -1,    -1,  1001,  1002,
-     675,  1004,  1005,    -1,    -1,    -1,   617,    -1,    -1,  1491,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1384,    -1,  1022,
-      -1,   632,    -1,    -1,    -1,    -1,   701,    -1,  1271,   704,
-      -1,    -1,    -1,    -1,   645,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   591,    -1,    -1,   594,   595,    -1,   597,
+      -1,   599,   600,    -1,   622,   623,   604,   605,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1026,  1027,    -1,    -1,    -1,
+     638,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1168,    -1,
+      -1,  1494,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   657,
+      -1,    -1,    -1,    -1,   642,    -1,    -1,    -1,   646,    -1,
+     668,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1198,    -1,
+    1200,    -1,    -1,    -1,   682,    -1,    -1,   685,    -1,    -1,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,  1233,  1105,    -1,   336,    -1,   338,    -1,
+    1168,  1241,  1242,  1243,    -1,    42,    -1,    -1,   726,   349,
+     350,    -1,  1252,  1253,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1264,    -1,    -1,    -1,    -1,    40,
+      41,    -1,    43,    70,    -1,    -1,    -1,  1205,    -1,    -1,
+      -1,    -1,    -1,    -1,   762,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   772,   773,    -1,  1168,    69,    -1,
+     778,    -1,    -1,    -1,    75,   783,    -1,    -1,    79,   843,
+      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
+      91,    92,    -1,    -1,  1252,  1253,    -1,  1198,    -1,  1200,
+      -1,    -1,    -1,    -1,    -1,    -1,  1264,    -1,    -1,    -1,
+      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,  1348,    -1,
+      -1,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+      -1,    -1,  1233,    -1,   135,   843,    -1,    -1,    -1,    -1,
+    1241,  1242,  1243,    -1,    -1,    -1,  1304,    -1,    -1,    -1,
+      -1,  1252,  1253,    -1,    -1,  1385,    -1,    -1,    -1,   867,
+      -1,    -1,    -1,  1264,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1062,
-    1063,    -1,   269,    -1,   739,  1432,    -1,    -1,    -1,    -1,
-      -1,    -1,  1439,    -1,     3,     4,     5,     6,     7,     8,
+      -1,  1411,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1347,
+    1348,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1434,    -1,    -1,    -1,   916,    -1,
+      -1,  1441,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   990,  1385,    -1,   993,
+     994,   995,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1400,    -1,    -1,    -1,    -1,  1348,    -1,    -1,
+     938,    -1,    -1,    -1,  1412,    -1,    -1,    -1,   966,   967,
+      -1,   969,   970,    -1,  1494,    -1,   954,    -1,    -1,   957,
+     958,    -1,    -1,    -1,    -1,    -1,  1434,    -1,    -1,   987,
+      -1,    -1,    -1,  1441,  1385,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    -1,    -1,    -1,    -1,
+    1411,    -1,    -1,    -1,    -1,    -1,    -1,    42,  1026,  1027,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1434,    -1,    -1,  1494,    -1,    -1,    -1,
+    1441,  1029,    -1,    -1,   674,    70,   676,    -1,    -1,    -1,
+      -1,    -1,    -1,   683,   684,    -1,    81,    -1,   688,  1047,
+    1048,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   706,    -1,    -1,    -1,
+      -1,   711,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1494,    -1,    -1,    -1,  1105,    -1,    -1,
+      -1,    -1,   732,    -1,  1168,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    51,    -1,    -1,    -1,    -1,
+      40,    41,  1110,    43,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
+      -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    79,
+    1168,    -1,    82,    83,    84,    85,    86,    87,    88,    89,
+      -1,    91,    92,    -1,    -1,    -1,    -1,   113,    -1,    -1,
+      -1,   117,  1170,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1198,    -1,  1200,    -1,   114,   825,   116,   827,   828,   829,
+      -1,  1189,   122,   123,   124,   125,   126,   127,   144,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   846,    -1,   154,  1283,
+      -1,   157,    -1,    -1,    -1,  1233,    -1,    -1,    -1,    -1,
+      -1,    -1,   862,  1241,  1242,  1243,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1252,  1253,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   885,  1264,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   205,
+      -1,    -1,    -1,    -1,    -1,  1339,    -1,    -1,  1342,    -1,
+      -1,   217,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   927,    -1,    -1,
+      -1,  1289,   932,    -1,  1368,    -1,    -1,   937,    -1,    -1,
+      -1,    -1,   942,   943,    -1,    -1,    -1,   947,   254,   949,
+     950,    -1,    -1,   953,    -1,   261,    -1,    -1,    -1,  1393,
+      -1,    -1,   962,    -1,  1398,    -1,    -1,    -1,    -1,    -1,
+    1348,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   978,   979,
+      -1,    -1,   288,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1428,   301,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1385,    -1,  1009,
+      -1,    -1,  1012,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   337,    -1,  1411,    -1,    -1,   342,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1434,  1491,    -1,    -1,
+      -1,    -1,  1496,  1441,    -1,  1065,    -1,    -1,    -1,    -1,
+      -1,  1071,  1072,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1515,    -1,  1517,    -1,    -1,  1086,  1521,    -1,    -1,
+    1524,  1091,    -1,    -1,    -1,    -1,  1096,    -1,  1532,    -1,
+      -1,    -1,  1536,    -1,    -1,    -1,    -1,    -1,    -1,  1109,
+      -1,   417,   418,    -1,    -1,    -1,  1494,   423,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1125,    -1,  1127,  1128,  1129,
+    1130,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   444,    -1,
+      -1,    -1,  1142,    -1,  1144,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   471,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1174,  1175,    -1,    67,    -1,    -1,
+      -1,   487,    -1,    -1,    -1,    -1,    76,    -1,    78,    -1,
+      80,    -1,    -1,   499,    -1,   501,    86,    -1,   504,    -1,
+     506,   507,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     516,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   117,    -1,   119,
+     120,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1244,  1245,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1254,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   568,    -1,    -1,    -1,    -1,   157,    -1,    -1,
+      -1,    -1,    -1,   579,    -1,    -1,   582,    -1,    -1,    -1,
+      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,   608,    -1,    32,    33,    34,   613,    -1,    -1,
+      -1,    -1,    -1,    -1,    42,    -1,   622,   623,    -1,    -1,
+      -1,  1321,    -1,  1323,  1324,  1325,    -1,   217,    -1,   219,
+     220,   221,   638,    -1,    -1,  1335,    -1,    -1,    -1,    -1,
+      -1,    -1,    70,  1343,    -1,    -1,  1346,    75,    -1,    77,
+      78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   249,
+      88,    89,    -1,    -1,   254,   671,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1376,    -1,    -1,   685,
+      -1,   687,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
+      -1,    -1,    -1,    -1,   122,   123,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    28,    -1,    -1,
+     726,  1421,  1422,    -1,    -1,    -1,    -1,    -1,    42,    -1,
+      -1,    -1,    -1,   323,  1434,    -1,    -1,    -1,    46,    -1,
+      -1,  1441,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1451,   342,    -1,    -1,    -1,    70,   347,   348,    -1,
+      -1,    -1,    -1,    -1,    -1,   355,    -1,    81,    -1,    -1,
+      -1,   777,    83,    -1,  1474,    -1,    -1,    -1,  1478,    -1,
+      -1,    -1,    -1,    91,    -1,    -1,    -1,    98,    -1,   100,
+      -1,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   395,    -1,  1507,    -1,  1509,
+      -1,    -1,    -1,    -1,   125,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   415,    -1,    -1,    -1,    -1,
+     420,    -1,   422,    -1,    -1,    -1,    -1,    -1,  1538,  1539,
+      -1,    -1,    -1,    -1,    -1,    -1,  1546,  1547,   438,    -1,
+      -1,   441,   442,    -1,    -1,    -1,    -1,    -1,   448,    -1,
+     168,   867,    -1,    -1,    -1,    -1,   872,    -1,    -1,    -1,
+      -1,    -1,   462,    -1,   185,    -1,   187,   188,    -1,   469,
+      -1,   192,   190,   194,   195,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   204,   903,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   213,    -1,    -1,    -1,    -1,
+     916,    -1,    -1,    -1,    -1,   223,    -1,    -1,    -1,    -1,
+      -1,     7,    -1,    -1,    10,    11,    12,    13,    14,    -1,
+      -1,    -1,    -1,    -1,   242,    -1,    -1,    -1,    -1,   247,
+      -1,    -1,   948,    -1,    -1,    -1,    -1,   258,    -1,    -1,
+      -1,    -1,   260,    -1,    40,    41,    42,    43,    -1,    -1,
+     268,    -1,   270,   969,   970,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   289,    -1,    69,    70,    -1,    -1,    -1,    -1,    75,
+      -1,    -1,   582,    79,    -1,    -1,    82,    83,    84,    85,
+      86,    87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     610,    -1,    -1,   331,    -1,   615,    -1,   335,   114,    -1,
+     116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    -1,    -1,  1052,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   363,    -1,    -1,    -1,   367,
+     368,    -1,   370,    -1,    -1,    -1,    -1,    -1,    -1,   377,
+     378,    -1,   380,   381,    -1,   383,    -1,   385,    -1,    -1,
+      -1,    -1,    -1,   673,    -1,    -1,    -1,   398,    -1,    -1,
+      -1,    -1,    -1,    -1,   402,    -1,    -1,   687,    -1,  1105,
+      -1,    -1,   410,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   434,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     153,   154,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   459,    -1,    -1,    -1,    -1,    -1,   465,    -1,    -1,
+      -1,    -1,   470,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   185,  1179,    -1,    -1,   766,    -1,    -1,   192,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   777,    -1,    40,
+      41,    -1,    43,    -1,  1200,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   510,    -1,   794,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   523,    -1,    -1,    69,    -1,
+      -1,    -1,    -1,    -1,    75,    -1,    77,    78,    79,    -1,
+      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
+      91,    92,    -1,    -1,    -1,   258,  1252,  1253,    -1,    -1,
+      -1,    -1,   560,   564,   565,    -1,    -1,    -1,    -1,    -1,
+      -1,   569,    -1,   114,   572,   116,    -1,   118,   119,    -1,
+      -1,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
+     591,   589,    -1,   594,   595,    -1,   597,    -1,   599,   600,
+      -1,    -1,    -1,   604,   605,    -1,    -1,    -1,    -1,    -1,
+      -1,   891,    -1,    -1,   317,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   326,   327,    -1,   329,   330,    -1,   627,
+      -1,    -1,    -1,    -1,   337,    -1,    -1,    -1,   341,    -1,
+      -1,   642,    -1,    -1,    -1,   646,    -1,    -1,    -1,    -1,
+      -1,  1347,    -1,    -1,    -1,    -1,    -1,   360,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   664,    -1,    -1,    -1,
+      -1,   951,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   962,    -1,   387,    -1,    -1,    -1,   391,  1385,
+      -1,    -1,    -1,   691,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1400,    -1,    -1,    -1,    -1,   707,
+     708,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     423,   719,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   733,    -1,    -1,    -1,    -1,
+     738,    -1,    -1,    -1,    -1,    -1,    -1,  1443,    -1,  1445,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   468,    -1,    -1,   471,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1058,    -1,
+      -1,    -1,    -1,    -1,  1480,    -1,  1482,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     798,    -1,    -1,    -1,    -1,    -1,    -1,   805,    -1,    -1,
+      -1,    -1,    -1,   516,    -1,  1511,    -1,    -1,    -1,    -1,
+     818,    -1,   820,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   833,    -1,    -1,    -1,    -1,
+      -1,   839,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   850,    -1,    -1,    -1,   854,   560,   561,   144,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   154,
+      -1,    -1,    -1,    -1,    -1,   578,   579,    -1,    -1,    -1,
+     165,   166,    -1,    -1,    -1,   588,    -1,   590,   591,    -1,
+      -1,    -1,    -1,    -1,   597,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   607,   608,    -1,  1187,    -1,    -1,
+     613,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   622,
+     623,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   638,    -1,   938,    -1,   642,
+     643,    -1,    -1,   646,   647,    -1,    -1,    -1,   946,    -1,
+      -1,    -1,   655,   954,    -1,    -1,   957,   958,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   253,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   685,   686,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    -1,
+      -1,    -1,    -1,    -1,  1012,    -1,    42,    43,    -1,    -1,
+      -1,    -1,    -1,   726,    -1,    -1,    -1,    -1,  1029,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1042,    -1,    -1,    70,    -1,  1047,  1048,    -1,    -1,
+      -1,    77,    78,    -1,    -1,    -1,  1054,    -1,    -1,    -1,
+      -1,  1059,    -1,   766,    -1,    -1,    -1,  1347,    -1,    -1,
+      -1,  1069,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   782,
+      -1,   784,    -1,    -1,    -1,    -1,   371,    -1,    -1,    -1,
+     116,   794,    -1,    -1,   120,    -1,   122,   123,    -1,    -1,
+      -1,  1099,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1110,
+      -1,    -1,    -1,    -1,  1112,    -1,    -1,    -1,  1116,    -1,
+    1400,  1119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1135,  1136,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1153,    -1,    -1,    -1,   444,
+      -1,    -1,    -1,    -1,   867,    -1,    -1,    -1,    -1,  1170,
+      -1,   874,    -1,    -1,    -1,    -1,    -1,    -1,   463,    -1,
+      -1,    -1,    -1,   886,   887,    -1,    -1,    -1,  1189,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   916,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   506,    -1,    -1,  1222,    -1,    -1,    -1,    -1,    -1,
+      -1,   516,    -1,    -1,    -1,   938,   939,   522,    -1,    -1,
+     525,    -1,    -1,    -1,    -1,   948,  1526,   274,    -1,   276,
+     277,   954,   955,   538,   957,   958,   959,    -1,    -1,   286,
+     287,    -1,    -1,    -1,    -1,    -1,   969,   970,    -1,    -1,
+      -1,    -1,    -1,    -1,   301,   302,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   568,    -1,    -1,    -1,    -1,  1289,    -1,
+     575,    -1,    -1,    -1,   579,    -1,    -1,    -1,    -1,    -1,
+      -1,  1299,    -1,  1301,    -1,    -1,    -1,    -1,    -1,    -1,
+     337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1316,    -1,
+    1318,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1033,    -1,  1035,    -1,  1037,  1333,    -1,    -1,    -1,  1042,
+     625,    -1,    -1,    -1,    -1,   372,    -1,    -1,   633,    -1,
+      -1,    -1,    -1,  1351,  1352,  1058,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1362,    -1,    -1,    -1,    -1,  1367,
+      -1,    -1,  1370,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    40,    41,
+      -1,    43,    -1,  1391,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1105,  1401,    -1,    -1,  1404,    -1,  1406,  1407,
+    1408,    -1,    -1,   698,    -1,    -1,    -1,    69,    -1,    -1,
+      -1,    -1,    -1,    75,    -1,    -1,    -1,    79,    -1,   714,
+      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
+      92,   726,    -1,   728,    -1,    -1,   731,    -1,    -1,  1447,
+      -1,  1449,   737,    -1,  1452,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   114,    -1,   116,    -1,    -1,   119,    -1,  1467,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,  1182,
+      -1,    -1,    -1,    -1,  1187,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   777,   778,    -1,    -1,    -1,  1200,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   793,    -1,
+      -1,    -1,    -1,    -1,   541,   542,   543,   544,   545,   546,
+     547,   548,   549,   550,   551,   552,   553,   554,   555,   556,
+     557,   558,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   832,    -1,  1252,
+    1253,   836,    -1,    -1,     3,     4,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    -1,    -1,    32,    33,    34,    35,   782,   748,   749,
-      39,    40,    41,    42,    43,    -1,    -1,   792,    -1,    -1,
-      -1,    -1,    -1,   798,  1491,    -1,    -1,    -1,   803,    -1,
-    1133,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      69,    70,    -1,    72,    -1,    74,    75,    -1,    77,    78,
-      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
-      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1175,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    40,    41,   114,    43,   116,   863,    -1,
-      -1,    -1,  1195,   122,   123,   124,   125,   126,   127,    -1,
-      -1,    -1,    -1,    -1,    -1,  1208,    -1,  1210,   137,    -1,
-     885,    -1,    69,    -1,    -1,    -1,    -1,   892,    75,    -1,
-      -1,    -1,    79,    -1,    -1,    82,    83,    84,    85,    86,
-      87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      -1,    -1,  1245,    -1,    -1,    -1,    -1,    -1,    -1,  1252,
-    1253,  1254,   863,    -1,    -1,    -1,    -1,   114,    -1,   116,
-    1263,  1264,   119,    -1,   904,   122,   123,   124,   125,   126,
-     127,    -1,    -1,  1276,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
-      -1,    -1,  1315,    42,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   693,    -1,   695,  1001,  1002,    -1,  1004,
-    1005,    -1,   702,   703,    -1,    -1,    -1,   707,    -1,    -1,
-      -1,    70,    -1,    72,    -1,    74,    -1,  1022,    77,    78,
-     720,    -1,    -1,    -1,    -1,   725,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   572,   573,    -1,    -1,    -1,
+      29,    -1,   867,    32,    33,    34,  1289,  1290,    -1,    -1,
+    1293,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1384,   752,    -1,    -1,    -1,    -1,  1062,  1063,    -1,
-     119,    -1,   599,    -1,    -1,   602,   603,    -1,   605,    -1,
-     607,   608,    -1,    -1,    -1,   612,   613,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1025,    -1,    -1,  1028,  1029,  1030,
-      -1,    -1,    -1,    -1,  1064,    -1,    -1,    -1,    -1,  1432,
-      -1,    -1,    -1,    -1,    -1,    -1,  1439,    51,    -1,    10,
-      11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,  1133,    10,
-      11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    42,    -1,    -1,    -1,   845,    -1,   847,   848,   849,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1491,    -1,
-      -1,    42,    -1,    -1,    -1,    -1,   866,    -1,    -1,    70,
-    1175,   115,    -1,    -1,    75,   119,    77,    78,    79,    -1,
-     880,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    70,
-    1195,    -1,    -1,    -1,    75,    -1,    77,    78,    79,    -1,
-      -1,    -1,    -1,  1208,   148,  1210,    -1,    88,    89,    -1,
-      -1,   748,   749,   114,   158,   116,    -1,   161,    -1,   919,
-      -1,   122,   123,    -1,    -1,    -1,    -1,  1197,    -1,    -1,
-      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,
-    1245,   122,   123,    -1,    -1,    -1,    -1,  1252,  1253,  1254,
-      -1,    -1,    -1,    -1,  1195,    -1,    -1,    -1,  1263,  1264,
-      -1,    -1,   962,    -1,    -1,    -1,   210,   967,    -1,    -1,
-      -1,  1276,   972,    -1,    -1,    -1,    -1,   977,   222,    -1,
-      -1,    -1,   982,    -1,   984,   985,    -1,    -1,   988,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   240,   997,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   903,    -1,
+      -1,    70,    -1,    72,    -1,    74,    75,    -1,    77,    78,
+      79,   916,    -1,    -1,    -1,    -1,    -1,    -1,   923,    88,
+      89,    -1,    -1,   928,    -1,     7,   931,    -1,    10,    11,
+      12,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   114,   951,   116,    -1,    -1,
+      -1,    -1,    -1,   122,   123,    -1,   703,   962,    40,    41,
+      42,    43,  1385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   982,    -1,   984,
+      -1,    -1,    -1,   730,    -1,    -1,    -1,    69,    70,    -1,
+      -1,    -1,    -1,    75,   999,  1000,    -1,    79,    -1,    -1,
+      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
+      92,    -1,    -1,   760,    -1,    -1,    -1,    -1,    -1,    -1,
+    1025,    -1,    40,    41,    -1,    43,    -1,    -1,    -1,    -1,
+      -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
+      -1,    69,  1475,    -1,    -1,    -1,    -1,    75,    -1,    -1,
+      -1,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
+      88,    89,    -1,    91,    92,    -1,    -1,  1500,  1501,  1084,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1315,    -1,    -1,  1013,  1014,    -1,    -1,    -1,    68,    -1,
-      -1,   265,    -1,    -1,    -1,    -1,    -1,    77,   272,    79,
-      -1,    81,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
-      -1,    -1,    -1,    -1,  1044,    -1,    -1,  1047,    -1,    -1,
-      -1,    -1,    -1,   297,  1295,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   899,    -1,    -1,    -1,   310,   904,    -1,   119,
-      -1,   121,   122,   123,    -1,    -1,    -1,    -1,    -1,  1384,
-      10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
-      -1,  1091,    -1,    -1,    -1,    -1,    -1,  1097,  1098,    -1,
-      -1,   345,    -1,    -1,  1345,    -1,   350,  1348,    -1,    -1,
-      -1,   161,    42,    -1,    -1,    -1,  1116,    -1,    -1,    -1,
-      -1,  1121,    -1,    -1,    -1,  1366,  1126,  1432,    -1,    -1,
-      -1,    -1,    -1,    -1,  1439,    -1,    -1,  1137,    -1,    -1,
-      70,    -1,    -1,    -1,    -1,    75,    -1,    77,    78,    79,
-    1150,  1392,  1152,  1153,  1154,  1155,  1397,    -1,    88,    89,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1167,    -1,  1169,
-      -1,    -1,   222,  1173,   224,   225,   226,    -1,    -1,    -1,
-      -1,   425,   426,    -1,   114,  1426,  1491,   431,    -1,    -1,
-      -1,    -1,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1201,  1202,    -1,    -1,    -1,    -1,    -1,   452,    -1,
-     260,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1064,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   480,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1488,    -1,   493,
-      -1,    -1,  1493,    -1,    -1,  1255,  1256,    -1,    -1,    -1,
-      -1,   505,    -1,   507,    -1,  1265,   510,    -1,   512,   513,
-    1511,    -1,  1513,    -1,    -1,    -1,  1517,    -1,    -1,  1520,
-     524,   331,    -1,    -1,    -1,    -1,    -1,  1528,    -1,    -1,
-      -1,  1532,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     350,    -1,    -1,    -1,    -1,   355,   356,    -1,    -1,    -1,
-      -1,    -1,    -1,   363,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1327,    -1,  1329,
-    1330,  1331,   576,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1341,    -1,   587,    -1,    -1,   590,    -1,    -1,  1349,
-      -1,    -1,    -1,    -1,    46,   405,    -1,    -1,    -1,    -1,
-    1197,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
-      -1,    -1,   616,   423,  1374,  1375,    -1,   621,   428,    -1,
-     430,    -1,    -1,    -1,    -1,    -1,   630,   631,    -1,    -1,
-      -1,    -1,    -1,    -1,    42,    -1,   446,    -1,    -1,   449,
-     450,    93,   646,    -1,    -1,    -1,    -1,   457,    -1,    -1,
-      -1,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1419,
-    1420,   471,    70,    -1,    -1,    -1,    -1,    75,   478,    77,
-      78,    79,  1432,    -1,   678,    -1,    -1,    -1,    -1,  1439,
-      88,    89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
+    1105,   119,    -1,  1526,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1123,  1124,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
+      35,    -1,    -1,   910,    39,    40,    41,    42,    43,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     704,    -1,   706,    -1,    -1,    -1,   114,    -1,    -1,    -1,
-      -1,    -1,  1472,    -1,   122,   123,  1476,    -1,    -1,    -1,
-     172,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   739,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   195,  1504,    -1,  1506,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   209,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   218,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1534,  1535,   228,    -1,    -1,    -1,
-     590,    -1,  1542,  1543,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   797,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   253,    -1,    -1,    -1,    -1,   258,    -1,   618,    -1,
-      -1,    -1,    -1,   623,    -1,    -1,    -1,    -1,    -1,   271,
-      -1,    -1,    -1,    -1,    -1,   277,    -1,   279,    -1,    -1,
-     283,    -1,   285,   286,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   295,   296,    -1,    -1,   298,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   310,   311,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    40,    41,    -1,    43,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   936,
+      -1,    -1,    -1,    -1,    69,    70,    -1,    72,    -1,    74,
+      75,   948,    77,    78,    79,    -1,    -1,    82,    83,    84,
+      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   885,   692,    -1,    -1,    -1,    -1,   339,   892,    -1,
-      -1,   343,   345,    -1,    -1,    69,   706,    -1,    -1,    -1,
-      -1,    75,    -1,   907,    -1,    79,    -1,    -1,    82,    83,
-      84,    85,    86,    87,    88,    89,    -1,    91,    92,   371,
-      -1,    -1,    -1,   375,   376,    -1,   378,   380,   932,    -1,
-      -1,    -1,    -1,   385,   386,    -1,   388,   389,    -1,   391,
-     114,   393,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
-     124,   125,   126,   127,    -1,    -1,    -1,    -1,   410,    -1,
-      -1,   135,    -1,    -1,    -1,    -1,   418,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   786,    -1,    -1,   983,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   797,    -1,    -1,
-     442,    40,    41,    -1,    43,    -1,    -1,    -1,    -1,    -1,
-    1004,  1005,    -1,    -1,   814,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   468,    -1,    -1,    -1,
-      69,    -1,   474,    -1,    -1,    -1,    75,   479,    77,    78,
-      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
-      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1067,   516,   114,    -1,   116,    -1,   118,
-     119,    -1,    -1,   122,   123,   124,   125,   126,   127,   531,
-      -1,    -1,    -1,    -1,     7,    -1,    -1,    10,    11,    12,
-      13,    14,    -1,    -1,    -1,    -1,   549,   550,   551,   552,
-     553,   554,   555,   556,   557,   558,   559,   560,   561,   562,
-     563,   564,   565,   566,    -1,   925,   568,    40,    41,    42,
-      43,    -1,    -1,    -1,    -1,   577,    -1,    -1,    -1,  1133,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   954,   597,    69,    70,    -1,    -1,
-      -1,    -1,    75,    -1,    -1,    -1,    79,    -1,    -1,    82,
-      83,    84,    85,    86,    87,    88,    89,    -1,    91,    92,
-    1174,    -1,    -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,
-      -1,    -1,    -1,   635,    -1,    -1,    -1,   997,    -1,    -1,
-      -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
-     123,   124,   125,   126,   127,    -1,  1210,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   671,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   679,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   689,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   710,  1263,
-    1264,    -1,  1072,    -1,    -1,    -1,    -1,  1271,    -1,   721,
-     722,    -1,    -1,    -1,    -1,    -1,  1086,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,   750,    -1,    -1,
-      -1,   753,    -1,    -1,    -1,    -1,   758,    -1,    -1,    42,
-      -1,    -1,    -1,   157,   158,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   780,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     7,    70,    -1,    10,
-      11,    12,    13,    14,    -1,    -1,   190,    -1,    -1,    -1,
-      -1,    -1,    -1,   197,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1174,    -1,   818,    -1,    -1,    40,
-      41,    42,    43,   825,    -1,    -1,    -1,    -1,    -1,    -1,
-    1384,    -1,    -1,    -1,    -1,    -1,   838,    -1,   840,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,
-      -1,   853,    -1,    -1,    75,    -1,    -1,   859,    79,    -1,
-      -1,    82,    83,    84,    85,    86,    87,    88,    89,   871,
-      91,    92,   874,    -1,    -1,   269,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1441,    -1,  1443,
-      -1,   894,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,
-      -1,   122,   123,   124,   125,   126,   127,    -1,    -1,    -1,
-      -1,  1271,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1478,    -1,  1480,    -1,    -1,    -1,
-      -1,    -1,   326,    -1,    -1,    -1,   939,    -1,    -1,    -1,
-     334,   335,   148,   337,   338,    -1,    -1,    -1,    -1,    -1,
-      -1,   345,   158,  1507,    -1,   349,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   169,   170,    -1,    -1,    -1,   971,    -1,
-      -1,    -1,    -1,    -1,   368,    -1,    -1,    -1,    -1,   981,
-     983,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    -1,   397,    32,    33,    34,   401,    -1,    -1,
-      -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,  1022,
-      -1,    -1,    -1,    -1,    40,    41,    -1,    43,    -1,    -1,
-      -1,    -1,    -1,    -1,   240,    -1,    -1,   431,    -1,    -1,
-      -1,    -1,    70,    -1,    -1,  1047,    -1,    75,    -1,    77,
-      78,    -1,    -1,    69,    -1,    -1,    -1,    -1,   264,    75,
-      88,    89,    -1,    79,    -1,    -1,    82,    83,    84,    85,
-      86,    87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,
-    1082,    -1,    -1,   477,    -1,  1087,   480,    -1,   116,    -1,
-      -1,    -1,    -1,  1095,   122,   123,    -1,    -1,   114,    -1,
-     116,  1104,    -1,    -1,    -1,   121,   122,   123,   124,   125,
-     126,   127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   520,  1129,    -1,    -1,
-     524,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1140,    -1,
-      -1,  1143,    -1,  1145,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1160,  1161,
-    1163,  1164,  1522,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   379,   568,   569,    -1,    -1,  1180,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   586,   587,    -1,    -1,    40,    41,    -1,    43,
-      -1,    -1,   596,    -1,   598,   599,    -1,    -1,    -1,    -1,
-      -1,   605,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   615,   616,    -1,  1226,    69,    -1,   621,    -1,    -1,
-      -1,    75,  1234,    -1,    -1,    79,   630,   631,    82,    83,
-      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
-      -1,    -1,   646,    -1,    -1,    -1,    -1,   651,   652,    -1,
-      -1,   655,   656,    -1,    -1,    -1,   472,    -1,   662,    -1,
-     114,    -1,   116,    -1,    -1,   119,    -1,    -1,   122,   123,
-     124,   125,   126,   127,    -1,    -1,    -1,   681,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1304,    -1,  1306,    -1,   512,    -1,    -1,    -1,
-     704,   705,    -1,    -1,    -1,    -1,    -1,    -1,   524,    -1,
-    1322,    -1,  1324,    -1,   530,    -1,    -1,   533,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1339,    -1,    -1,
-     546,    -1,    -1,    -1,    -1,   739,    -1,    -1,    -1,   743,
-     744,    -1,  1354,  1355,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1365,    -1,    -1,  1368,    -1,  1371,    -1,
-     576,    -1,    -1,    -1,    -1,    -1,    -1,   583,    -1,    -1,
-      -1,   587,    -1,    -1,    -1,  1388,    -1,    -1,  1390,    -1,
-      -1,    -1,   786,    -1,    -1,    -1,    -1,  1399,    -1,    -1,
-    1402,    -1,  1404,  1405,  1406,    -1,    -1,    -1,   802,    -1,
-     804,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     814,    -1,    -1,    -1,    -1,    -1,    -1,   633,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   641,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1445,    -1,  1447,    -1,  1449,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1460,  1461,    -1,
-      -1,    -1,    -1,  1465,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      -1,   885,    32,    33,    34,    -1,    -1,    -1,   892,   893,
-      -1,   895,    42,    -1,    -1,   899,    -1,    -1,    -1,    -1,
-      -1,   717,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   728,    -1,    -1,    -1,   920,   921,    -1,    -1,
-      70,    -1,    72,   739,    74,   741,    -1,    77,    78,    -1,
-      -1,    -1,    -1,    -1,    -1,   751,    -1,    -1,    -1,    -1,
-      -1,   757,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     954,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   115,   116,    -1,    -1,   973,
-     974,    -1,   122,   123,    -1,    -1,    -1,    -1,    -1,   983,
-      -1,   797,   798,    -1,    -1,   989,   990,    -1,   992,   993,
-     994,    -1,    -1,    -1,    -1,    -1,    -1,   813,    -1,    -1,
-    1004,  1005,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    -1,    -1,    32,    33,    34,   852,    -1,    -1,    -1,
-     856,    -1,    -1,    42,    43,    -1,    -1,    -1,    -1,    -1,
-      -1,    40,    41,    -1,    43,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1070,    -1,  1072,   885,
-      -1,    70,    -1,  1077,    -1,    -1,   892,    -1,    77,    78,
-      69,    -1,  1086,    -1,    -1,    -1,    75,    -1,    -1,    -1,
-      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
-      89,    -1,    91,    92,    -1,  1109,  1110,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   932,   116,    -1,    -1,
-      -1,   120,    -1,   122,   123,   114,    -1,   116,    -1,  1133,
-      -1,    -1,    -1,   122,   123,   124,   125,   126,   127,    -1,
-      -1,    -1,   958,    -1,    -1,    -1,    -1,   963,    40,    41,
-     966,    43,    44,    -1,    46,    -1,    -1,    49,    50,    51,
-      52,    53,    54,    55,    56,    -1,    -1,    59,    60,    -1,
-     986,    -1,    64,    65,    -1,    67,    -1,    69,    -1,    -1,
-      -1,   997,    -1,    75,    -1,    77,    78,    79,    -1,    -1,
-      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
-      92,  1017,    -1,  1019,    -1,    -1,  1210,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1034,  1035,
-      -1,    -1,   114,    -1,   116,    -1,    -1,   119,    -1,    -1,
-     122,   123,   124,   125,   126,   127,    40,    41,    -1,    43,
-     132,    -1,    -1,    -1,  1060,   137,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1263,
-    1264,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
-      -1,    75,    -1,    -1,    -1,    79,    -1,    -1,    82,    83,
-      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1114,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     114,    -1,   116,    -1,    -1,    -1,    -1,  1133,   122,   123,
-     124,   125,   126,   127,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1148,  1149,    -1,    -1,     3,     4,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
+     987,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   137,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1278,    -1,  1280,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1036,
+      -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
       27,    28,    29,    -1,    -1,    32,    33,    34,    35,    -1,
-      -1,    -1,    39,    40,    41,    42,    43,    44,    -1,    46,
-    1384,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
+      -1,  1078,    39,    40,    41,    42,    43,    44,    -1,    46,
+      -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
       -1,    -1,    -1,    60,    -1,    -1,    -1,    64,    65,    -1,
       67,    -1,    69,    70,    -1,    72,    -1,    74,    75,    -1,
       77,    78,    79,    -1,    -1,    82,    83,    84,    85,    86,
       87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1138,  1139,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,
       -1,    -1,   119,    -1,    -1,   122,   123,   124,   125,   126,
-     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,  1473,
-     137,    -1,    -1,    -1,  1290,    -1,  1292,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1497,  1498,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1522,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
-      34,    35,    -1,    -1,    -1,    39,    40,    41,    42,    43,
+     127,    -1,    -1,    -1,    -1,   132,    -1,    -1,    -1,    -1,
+     137,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    -1,    -1,    -1,    -1,    69,    70,    -1,    72,    -1,
-      74,    75,    42,    77,    78,    79,    -1,    -1,    82,    83,
-      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
+      -1,    -1,    32,    33,    34,    35,    -1,    -1,    -1,    39,
+      40,    41,    42,    43,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     114,    81,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
-     124,   125,   126,   127,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
-      40,    41,    42,    43,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1507,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
-      70,    -1,    72,    -1,    74,    75,    -1,    77,    78,    79,
+      70,    -1,    72,    -1,    74,    75,  1511,    77,    78,    79,
       -1,    -1,    82,    83,    84,    85,    86,    87,    88,    89,
       -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,    -1,
-      -1,   121,   122,   123,   124,   125,   126,   127,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    -1,
-      -1,    -1,    -1,    -1,    40,    41,    42,    43,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    -1,
-      -1,    -1,    -1,    69,    70,    -1,    72,    -1,    74,    75,
-      42,    77,    78,    79,    -1,    -1,    82,    83,    84,    85,
-      86,    87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    81,
-     116,    -1,    -1,    -1,    -1,   121,   122,   123,   124,   125,
-     126,   127,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
-      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    40,    41,
-      42,    43,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    -1,    -1,    32,    33,    34,    69,    70,    -1,
-      72,    -1,    74,    75,    42,    77,    78,    79,    -1,    -1,
-      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
-      92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      78,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,
-     122,   123,   124,   125,   126,   127,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
-      -1,    -1,    40,    41,    42,    43,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
-      34,    69,    70,    -1,    72,    -1,    74,    75,    42,    77,
-      78,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
-      88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,
-      -1,    -1,    -1,    77,    78,    -1,   114,    -1,   116,    -1,
-      -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,   127,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
-      34,    -1,    -1,    -1,    -1,    -1,    40,    41,    42,    43,
+      -1,    -1,   122,   123,   124,   125,   126,   127,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
+      -1,    40,    41,    42,    43,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    -1,  1373,    32,    33,    34,
+      69,    70,    -1,    72,    -1,    74,    75,    42,    77,    78,
+      79,    -1,  1389,    82,    83,    84,    85,    86,    87,    88,
+      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
+      -1,    -1,    77,    78,    -1,   114,    -1,   116,    -1,    -1,
+      -1,    -1,   121,   122,   123,   124,   125,   126,   127,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,  1462,  1463,    32,    33,    34,
+      -1,    -1,    -1,    -1,    -1,    40,    41,    42,    43,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
+      -1,    32,    33,    34,    69,    70,    -1,    72,    -1,    74,
+      75,    42,    77,    78,    79,    -1,    -1,    82,    83,    84,
+      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
+      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,   114,
+      -1,   116,    -1,    -1,    -1,    -1,   121,   122,   123,   124,
+     125,   126,   127,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
+      -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    40,
+      41,    42,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,
+      -1,    72,    -1,    74,    75,    -1,    77,    78,    79,    -1,
+      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
+      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,
+      -1,   122,   123,   124,   125,   126,   127,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    40,    41,    42,    43,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    69,    70,    -1,    72,    -1,
-      74,    75,    -1,    77,    78,    79,    -1,    -1,    82,    83,
-      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
+      -1,    -1,    69,    70,    -1,    72,    -1,    74,    75,    -1,
+      77,    78,    79,    -1,    -1,    82,    83,    84,    85,    86,
+      87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,
+      -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,
+     127,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
+      33,    34,    -1,    -1,    -1,    -1,    -1,    40,    41,    42,
+      43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    -1,    72,
+      -1,    74,    75,    -1,    77,    78,    79,    -1,    -1,    82,
+      83,    84,    85,    86,    87,    88,    89,    -1,    91,    92,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
-     124,   125,   126,   127,     0,    -1,    -1,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    35,
-      -1,    -1,    -1,    39,    -1,    -1,    42,    43,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    67,    -1,    -1,    70,    -1,    72,    -1,    74,    75,
-      -1,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    89,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
-     116,    -1,    -1,    -1,    -1,    -1,   122,   123,     3,     4,
+      -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
+     123,   124,   125,   126,   127,     0,    -1,    -1,     3,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
@@ -3593,5 +3662,5 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
-      -1,   116,    -1,    -1,    -1,   120,    -1,   122,   123,     3,
+      -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
@@ -3605,12 +3674,12 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
+     114,    -1,   116,    -1,    -1,    -1,   120,    -1,   122,   123,
        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
       23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
-      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
+      33,    34,    35,    -1,    -1,    -1,    39,    -1,    -1,    42,
+      43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    72,
+      -1,    -1,    -1,    -1,    67,    -1,    -1,    70,    -1,    72,
       -1,    74,    75,    -1,    77,    78,    79,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,
@@ -3657,29 +3726,44 @@
       22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
       32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      42,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    -1,    -1,    32,    33,    34,    -1,    70,    -1,
-      72,    -1,    74,    -1,    42,    77,    78,    -1,    -1,    -1,
+      42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,
-      -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      78,    -1,    -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,
-     122,   123,     4,     5,     6,     7,     8,     9,    10,    11,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
+      72,    -1,    74,    -1,    -1,    77,    78,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,   115,   116,    42,    -1,    -1,    -1,    -1,
+     122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,
+      77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,
+      -1,    -1,    -1,    -1,    -1,   122,   123,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    42,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
+      33,    34,    -1,    70,    -1,    72,    -1,    74,    -1,    42,
+      77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   101,    -1,    -1,    70,    -1,    -1,
+      -1,    -1,    -1,    -1,    77,    78,    -1,    -1,    -1,   116,
+      -1,    -1,    -1,    -1,    -1,   122,   123,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,   116,    -1,    32,    33,    34,    -1,   122,
+     123,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,
+      77,    78,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,   116,    -1,
-      32,    33,    34,    -1,   122,   123,    -1,    -1,    -1,    -1,
-      42,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    -1,    -1,    32,    33,    34,    -1,    70,    -1,
-      72,    -1,    74,    -1,    42,    77,    78,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   101,
-      -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      78,    -1,    -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,
-     122,   123,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,   116,    -1,
-      32,    33,    34,    -1,   122,   123,    -1,    -1,    -1,    -1,
-      42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,   116,
+      42,    -1,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
@@ -3692,18 +3776,138 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,
-      77,    78,     4,     5,     6,     7,     8,     9,    10,    11,
+      77,    78,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
+      -1,    -1,    40,    41,    42,    43,    -1,    -1,    -1,   116,
+      -1,    -1,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    69,    70,    -1,    -1,    -1,    -1,    75,    -1,    77,
+      78,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
+      88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
+      -1,   119,    -1,    -1,   122,   123,   124,   125,   126,   127,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
+      40,    41,    42,    43,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    69,
+      70,    -1,    -1,    -1,    -1,    75,    42,    77,    78,    79,
+      -1,    -1,    82,    83,    84,    85,    86,    87,    88,    89,
+      -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+      -1,    77,    78,    -1,   114,   115,   116,    -1,    -1,    -1,
+      -1,    -1,   122,   123,   124,   125,   126,   127,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
-      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,   116,
-      42,    -1,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,
+      32,    33,    34,    -1,    -1,    -1,   122,   123,    40,    41,
+      42,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-      72,    -1,    74,    -1,    -1,    77,    78,    10,    11,    12,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    -1,
+      -1,    -1,    -1,    75,    -1,    77,    78,    79,    -1,    -1,
+      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
+      92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,
+     122,   123,   124,   125,   126,   127,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
+      34,    -1,    -1,    -1,    -1,    -1,    40,    41,    42,    43,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    69,    70,    -1,    -1,    -1,
+      -1,    75,    -1,    77,    78,    79,    -1,    -1,    82,    83,
+      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
+     124,   125,   126,   127,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    -1,    -1,    32,    33,    34,    -1,
+      -1,    -1,    -1,    -1,    40,    41,    42,    43,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    69,    70,    -1,    -1,    -1,    -1,    75,
+      -1,    77,    78,    79,    -1,    -1,    82,    83,    84,    85,
+      86,    87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
+     116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,
+     126,   127,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
+      -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    42,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    70,
+      -1,    72,    -1,    74,    42,    -1,    77,    78,    -1,    -1,
+      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    70,    -1,    32,    33,    34,    75,    -1,    77,
+      78,    79,    -1,    -1,    42,    -1,    -1,    -1,   119,    -1,
+      88,    89,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    70,    -1,    -1,    -1,   114,    75,   116,    77,
+      78,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,    -1,
+      88,    89,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
-      33,    34,    -1,    -1,    -1,    -1,    -1,    40,    41,    42,
-      43,    -1,    -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,
-     122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    69,    70,    -1,    -1,
+      23,    24,    25,    26,    27,    28,    29,    -1,   116,    32,
+      33,    34,    -1,    -1,   122,   123,    -1,    -1,    -1,    42,
+      43,    -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    70,    -1,    32,
+      33,    34,    -1,    -1,    77,    78,    -1,    -1,    -1,    42,
+      43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
+      -1,    -1,    -1,   116,    77,    78,    -1,   120,    -1,   122,
+     123,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
+      -1,    -1,    -1,   116,    42,    -1,    -1,   120,    -1,   122,
+     123,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    70,    -1,    32,    33,    34,    -1,    -1,    77,
+      78,    -1,    -1,    -1,    42,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
+      -1,    -1,    70,    -1,    -1,    -1,    -1,    42,   116,    77,
+      78,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
+      -1,    -1,    77,    78,    -1,    -1,    -1,    -1,   116,    -1,
+      -1,    -1,    -1,    -1,   122,   123,    -1,    -1,    -1,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      -1,   116,    32,    33,    34,    -1,    -1,   122,   123,    -1,
+      -1,    -1,    42,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      70,    -1,    -1,    -1,    -1,    42,    -1,    77,    78,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+      77,    78,    -1,    -1,    -1,    -1,   116,    -1,    -1,    -1,
+      -1,    -1,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,
+      -1,    -1,    -1,    -1,    -1,   122,   123,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    42,    -1,    40,    41,    -1,
+      43,    44,    -1,    46,    -1,    -1,    49,    50,    51,    52,
+      53,    54,    55,    56,    -1,    -1,    59,    60,    -1,    -1,
+      -1,    64,    65,    70,    67,    72,    69,    74,    -1,    -1,
+      77,    78,    75,    -1,    77,    78,    79,    -1,    -1,    82,
+      83,    84,    85,    86,    87,    88,    89,    -1,    91,    92,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   115,    -1,
+      -1,   114,    -1,   116,    -1,    -1,   119,    -1,    -1,   122,
+     123,   124,   125,   126,   127,    -1,    -1,    40,    41,   132,
+      43,    44,    -1,    46,   137,    -1,    49,    50,    51,    52,
+      53,    54,    55,    56,    -1,    -1,    -1,    60,    -1,    -1,
+      -1,    64,    65,    -1,    67,    -1,    69,    -1,    -1,    -1,
       -1,    -1,    75,    -1,    77,    78,    79,    -1,    -1,    82,
       83,    84,    85,    86,    87,    88,    89,    -1,    91,    92,
@@ -3711,158 +3915,42 @@
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,   114,    -1,   116,    -1,    -1,   119,    -1,    -1,   122,
-     123,   124,   125,   126,   127,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
-      -1,    -1,    -1,    -1,    -1,    40,    41,    42,    43,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
-      -1,    32,    33,    34,    69,    70,    -1,    -1,    -1,    -1,
-      75,    42,    77,    78,    79,    -1,    -1,    82,    83,    84,
-      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,   114,
-     115,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
-     125,   126,   127,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
-      -1,   122,   123,    40,    41,    42,    43,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    69,    70,    -1,    -1,    -1,    -1,    75,    -1,
-      77,    78,    79,    -1,    -1,    82,    83,    84,    85,    86,
-      87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,
-      -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,
-     127,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+     123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,   132,
+      -1,    -1,    -1,    -1,   137,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
       29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
-      -1,    40,    41,    42,    43,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    42,    -1,    40,    41,    -1,    43,    44,
+      -1,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    -1,    -1,    59,    60,    -1,    -1,    -1,    64,
+      65,    70,    67,    72,    69,    74,    -1,    -1,    77,    78,
+      75,    -1,    77,    78,    79,    -1,    -1,    82,    83,    84,
+      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
+      -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
+      -1,   116,    -1,    -1,   119,    -1,    -1,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    40,    41,   132,    43,    44,
+      -1,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    -1,    -1,    -1,    60,    -1,    -1,    -1,    64,
+      65,    -1,    67,    -1,    69,    -1,    -1,    -1,    -1,    -1,
+      75,    -1,    77,    78,    79,    -1,    -1,    82,    83,    84,
+      85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      69,    70,    -1,    -1,    -1,    -1,    75,    -1,    77,    78,
-      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
-      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,
-      -1,    -1,    -1,   122,   123,   124,   125,   126,   127,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
-      -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    40,
-      41,    42,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    70,
-      -1,    -1,    -1,    -1,    75,    -1,    77,    78,    79,    -1,
-      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
-      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,
-      -1,   122,   123,   124,   125,   126,   127,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
-      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    70,    -1,    32,
-      33,    34,    75,    -1,    77,    78,    79,    -1,    -1,    42,
-      -1,    -1,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
-      -1,   114,    75,   116,    77,    78,    79,    -1,    -1,   122,
-     123,    -1,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
-     123,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    42,    43,    -1,    -1,    -1,    -1,    -1,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    70,    -1,    32,    33,    34,    -1,    -1,    77,    78,
-      -1,    -1,    -1,    42,    43,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    70,    -1,    -1,    -1,    -1,    -1,   116,    77,    78,
-      -1,   120,    -1,   122,   123,    -1,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
-      34,    -1,    -1,    -1,    -1,    -1,    -1,   116,    42,    -1,
-      -1,   120,    -1,   122,   123,    -1,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    70,    -1,    32,    33,
-      34,    -1,    -1,    77,    78,    -1,    -1,    -1,    42,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    -1,
-      -1,    32,    33,    34,    -1,    -1,    70,    -1,    -1,    -1,
-      -1,    42,   116,    77,    78,    -1,    -1,    -1,   122,   123,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-      -1,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,    -1,
-      -1,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,
-      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    -1,   116,    32,    33,    34,    -1,
-      -1,   122,   123,    -1,    -1,    -1,    42,    -1,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    70,    -1,    32,    33,    34,    -1,
-      -1,    77,    78,    -1,    -1,    -1,    42,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    70,    -1,    72,    -1,    74,    -1,
-     116,    77,    78,    -1,    -1,    -1,   122,   123,    40,    41,
-      -1,    43,    44,    -1,    46,    -1,    -1,    49,    50,    51,
-      52,    53,    54,    55,    56,    -1,    -1,    -1,    60,    -1,
-      -1,    -1,    64,    65,    -1,    67,    -1,    69,    -1,   115,
-      -1,    -1,    -1,    75,    -1,    77,    78,    79,    -1,    -1,
-      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
-      92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   114,    -1,   116,    -1,    -1,   119,    -1,    -1,
-     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
-     132,    -1,    -1,    -1,    -1,   137,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    42,    -1,    40,    41,    -1,    43,
-      44,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    -1,    -1,    59,    60,    -1,    -1,    -1,
-      64,    65,    70,    67,    72,    69,    74,    -1,    -1,    77,
-      78,    75,    -1,    77,    78,    79,    -1,    -1,    82,    83,
-      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
-      -1,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     114,    -1,   116,    -1,    -1,   119,    -1,    -1,   122,   123,
-     124,   125,   126,   127,    -1,    -1,    40,    41,   132,    43,
-      44,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    -1,    -1,    -1,    60,    -1,    -1,    -1,
-      64,    65,    -1,    67,    -1,    69,    -1,    -1,    -1,    -1,
-      -1,    75,    -1,    77,    78,    79,    -1,    -1,    82,    83,
-      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     114,    -1,   116,    -1,    -1,   119,    -1,    -1,   122,   123,
-     124,   125,   126,   127,    -1,    -1,    40,    41,   132,    43,
-      44,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
-      54,    55,    56,    -1,    -1,    -1,    60,    -1,    -1,    -1,
-      64,    65,    -1,    67,    -1,    69,    -1,    -1,    -1,    -1,
-      -1,    75,    -1,    77,    78,    79,    -1,    -1,    82,    83,
-      84,    85,    86,    87,    88,    89,    -1,    91,    92,    -1,
-      -1,    -1,    -1,    -1,    -1,    40,    41,    -1,    43,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     114,    -1,   116,    -1,    -1,   119,    -1,    -1,   122,   123,
-     124,   125,   126,   127,    69,    -1,    -1,    -1,   132,    -1,
-      75,    -1,    -1,    -1,    79,    -1,    -1,    82,    83,    84,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
+      -1,   116,    -1,    -1,   119,    -1,    -1,   122,   123,   124,
+     125,   126,   127,    -1,    -1,    40,    41,   132,    43,    44,
+      -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
+      55,    56,    -1,    -1,    -1,    60,    -1,    -1,    -1,    64,
+      65,    -1,    67,    -1,    69,    -1,    -1,    -1,    -1,    -1,
+      75,    -1,    77,    78,    79,    -1,    -1,    82,    83,    84,
       85,    86,    87,    88,    89,    -1,    91,    92,    -1,    -1,
       -1,    -1,    -1,    -1,    40,    41,    -1,    43,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,
-      -1,   116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
-     125,   126,   127,    69,    -1,    -1,    -1,    -1,    -1,    75,
+      -1,   116,    -1,    -1,   119,    -1,    -1,   122,   123,   124,
+     125,   126,   127,    69,    -1,    -1,    -1,   132,    -1,    75,
       -1,    -1,    -1,    79,    -1,    -1,    82,    83,    84,    85,
       86,    87,    88,    89,    -1,    91,    92,    -1,    -1,    -1,
       -1,    -1,    -1,    40,    41,    -1,    43,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,
-     116,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,   125,
+     116,    -1,    -1,    -1,    -1,   121,   122,   123,   124,   125,
      126,   127,    69,    -1,    -1,    -1,    -1,    -1,    75,    -1,
       -1,    -1,    79,    -1,    -1,    82,    83,    84,    85,    86,
@@ -3874,40 +3962,58 @@
       -1,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
       88,    89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    40,    41,    -1,    43,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
       -1,    -1,    -1,    -1,   122,   123,   124,   125,   126,   127,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    42,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      70,    -1,    32,    33,    34,    75,    -1,    77,    78,    -1,
-      -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,    88,    89,
+      69,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,
+      79,    -1,    -1,    82,    83,    84,    85,    86,    87,    88,
+      89,    -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,
+      40,    41,    -1,    43,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,
+      -1,    -1,    -1,   122,   123,   124,   125,   126,   127,    69,
+      -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    79,
+      -1,    -1,    82,    83,    84,    85,    86,    87,    88,    89,
+      -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    40,
+      41,    -1,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,    -1,
+      -1,    -1,   122,   123,   124,   125,   126,   127,    69,    -1,
+      -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,    79,    -1,
+      -1,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
+      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   114,    -1,   116,    -1,    -1,    -1,    -1,
+      -1,   122,   123,   124,   125,   126,   127,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
+      33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    70,    -1,    32,
+      33,    34,    75,    -1,    77,    78,    -1,    -1,    -1,    42,
+      -1,    -1,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    72,
+      -1,    74,    -1,    -1,    77,    78,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    -1,    -1,    32,    33,    34,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      70,    -1,    72,    -1,    74,    -1,    -1,    77,    78,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
-      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,
+      -1,    -1,    -1,    70,    -1,    72,    -1,    74,    -1,    -1,
+      77,    78,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    -1,    -1,
+      32,    33,    34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
+      72,    -1,    74,    -1,    -1,    77,    78,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    -1,    -1,    32,
+      33,    34,    35,    36,    37,    38,    -1,    -1,    -1,    42,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    72,    -1,
-      74,    -1,    -1,    77,    78,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
-      29,    -1,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    70,    -1,    72,    -1,    74,    -1,    -1,    77,    78,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      -1,    -1,    32,    33,    34,    35,    36,    37,    38,    -1,
-      -1,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      70,    -1,    -1,    -1,    -1,    -1,    -1,    77,    78
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,
+      -1,    -1,    -1,    -1,    77,    78
 };
 
@@ -3922,153 +4028,153 @@
       77,    78,    79,    88,    89,   114,   116,   122,   123,   142,
      145,   157,   206,   220,   221,   222,   223,   224,   225,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   236,
-     237,   239,   240,   241,   242,   243,   244,   245,   247,   248,
-     249,   250,   251,   252,   254,   262,   263,   290,   291,   292,
-     300,   303,   309,   310,   312,   314,   315,   321,   326,   330,
-     331,   332,   333,   334,   335,   336,   337,   357,   374,   375,
-     376,   377,    75,   144,   145,   157,   223,   225,   233,   235,
-     244,   248,   250,   291,    84,   114,   319,   320,   321,   319,
-     319,    75,    77,    78,    79,   143,   144,   280,   281,   301,
-     302,    77,    78,   281,   114,   312,    11,   207,   114,   157,
-     326,   331,   332,   333,   335,   336,   337,   117,   139,   226,
-     233,   235,   330,   334,   373,   374,   377,   378,   140,   112,
-     136,   284,   119,   140,   181,    77,    78,   142,   279,   140,
-     140,   140,   121,   140,    77,    78,   114,   157,   316,   325,
-     326,   327,   328,   329,   330,   334,   338,   339,   340,   341,
-     342,   348,     3,    30,    81,   246,     3,     5,    77,   116,
-     157,   225,   236,   240,   242,   251,   292,   330,   334,   377,
-     223,   225,   235,   244,   248,   250,   291,   330,   334,    35,
-     241,   241,   236,   242,   140,   241,   236,   241,   236,    78,
-     114,   119,   281,   292,   119,   281,   241,   236,   121,   140,
-     140,     0,   139,   114,   181,   319,   319,   139,   116,   233,
-     235,   375,   279,   279,   136,   235,   114,   157,   316,   326,
-     330,   116,   157,   377,   313,   238,   321,   114,   297,   114,
-     114,    54,   114,    40,    41,    43,    69,    75,    79,    82,
-      83,    84,    85,    86,    87,    91,    92,   114,   116,   124,
-     125,   126,   127,   141,   145,   146,   147,   148,   149,   156,
-     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   172,   175,   233,   283,   299,   373,
-     378,   235,   115,   115,   115,   115,   115,   115,   115,   116,
-     233,   357,   375,   116,   122,   157,   172,   225,   226,   232,
-     235,   239,   240,   244,   247,   248,   250,   269,   270,   274,
-     275,   276,   277,   291,   357,   369,   370,   371,   372,   377,
-     378,   114,   330,   334,   377,   114,   121,   137,   116,   119,
-     157,   172,   285,   285,   120,   139,   121,   137,   114,   121,
-     137,   121,   137,   121,   137,   319,   137,   326,   327,   328,
-     329,   339,   340,   341,   342,   235,   325,   338,    67,   318,
-     116,   319,   356,   357,   319,   319,   181,   139,   114,   319,
-     356,   319,   319,   235,   316,   114,   114,   234,   235,   233,
-     235,   139,   233,   373,   378,   181,   139,   279,   284,   225,
-     240,   330,   334,   181,   139,   301,   235,   244,   137,   235,
-     235,   299,   255,   253,   265,   281,   264,   235,   301,   137,
-     137,   312,   139,   144,   278,     3,   140,   215,   216,   230,
-     232,   235,   139,   318,   114,   318,   172,   326,   235,   114,
-     139,   279,   119,    35,    36,    37,    38,   233,   293,   294,
-     296,   139,   133,   136,   298,   139,    10,    75,    77,    78,
-     322,   323,   324,   114,   146,   114,   156,   114,   156,   159,
-     114,   156,   114,   114,   156,   156,   116,   172,   177,   181,
-     233,   282,   373,   377,   139,    84,    86,    90,    91,    92,
-     114,   116,   118,   119,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   136,   174,   159,   159,   122,
-     128,   129,   124,   125,    93,    94,    95,    96,   130,   131,
-      97,    98,   123,   132,   133,    99,   100,   134,   114,   157,
-     352,   353,   354,   355,   356,   115,   121,   114,   356,   357,
-     114,   356,   357,   139,   233,   375,   117,   139,   140,   233,
-     235,   368,   369,   377,   378,   140,   114,   116,   157,   326,
-     343,   344,   345,   346,   347,   348,   349,   350,   351,   357,
-     358,   359,   360,   361,   362,   363,   157,   377,   235,   140,
-     140,   157,   233,   235,   370,   279,   233,   357,   370,   279,
-     139,   139,   139,   139,    75,   116,   118,   145,   281,   285,
-     286,   287,   288,   289,   139,   139,   139,   139,   139,   139,
-     316,   115,   115,   115,   115,   115,   115,   115,   325,   338,
-     114,   284,   117,   215,   139,   316,   177,   283,   177,   283,
-     316,   116,   215,   318,   181,   139,   215,   115,    43,   116,
-     120,   233,   256,   257,   258,   373,   119,   121,   379,   136,
-     266,   119,   235,   271,   272,   273,   276,   277,   115,   121,
-     181,   139,   122,   172,   139,   232,   235,   270,   369,   377,
-     310,   311,   114,   157,   343,   115,   121,   136,   380,   281,
-     293,   114,   119,   281,   283,   293,   115,   121,   114,   146,
-     115,   135,   282,   282,   282,   151,   172,   283,   282,   139,
-     115,   121,   115,   114,   157,   356,   364,   365,   366,   367,
+     227,   228,   229,   230,   232,   233,   234,   235,   236,   237,
+     239,   240,   241,   242,   243,   244,   245,   247,   248,   249,
+     250,   251,   252,   254,   262,   289,   290,   291,   299,   302,
+     308,   309,   311,   313,   314,   320,   325,   329,   330,   331,
+     332,   333,   334,   335,   336,   356,   373,   374,   375,   376,
+      75,   144,   145,   157,   223,   225,   233,   235,   244,   248,
+     250,   290,    84,   114,   318,   319,   320,    75,    77,    78,
+      79,   143,   144,   279,   280,   300,   301,    77,    78,   280,
+     114,   311,    11,   207,   114,   157,   325,   330,   331,   332,
+     334,   335,   336,   117,   139,   226,   233,   235,   329,   333,
+     372,   373,   376,   377,   140,   112,   136,   283,   119,   140,
+     181,    77,    78,   142,   278,   140,   140,   140,    77,    78,
+     114,   157,   231,   315,   324,   325,   326,   327,   328,   329,
+     333,   337,   338,   339,   340,   341,   347,     3,    30,    81,
+     246,     3,     5,    77,   116,   157,   225,   236,   240,   242,
+     251,   291,   329,   333,   376,   223,   225,   235,   244,   248,
+     250,   290,   329,   333,    35,   241,   241,   236,   242,   140,
+     241,   236,   241,   236,   318,   241,   236,   121,   140,   140,
+       0,   139,   114,   181,   318,   318,   139,   116,   233,   235,
+     374,   278,   278,   136,   235,   114,   157,   315,   325,   329,
+     116,   157,   376,   312,   238,   119,   280,   320,   114,   296,
+     114,   114,    54,   114,    40,    41,    43,    69,    75,    79,
+      82,    83,    84,    85,    86,    87,    91,    92,   114,   116,
+     124,   125,   126,   127,   141,   145,   146,   147,   148,   149,
+     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
+     166,   167,   168,   169,   170,   172,   175,   233,   281,   282,
+     298,   372,   377,   235,   115,   115,   115,   115,   115,   115,
+     115,   116,   233,   356,   374,   116,   122,   157,   172,   225,
+     226,   232,   235,   239,   240,   244,   247,   248,   250,   268,
+     269,   273,   274,   275,   276,   290,   356,   368,   369,   370,
+     371,   376,   377,   114,   329,   333,   376,   114,   121,   137,
+     116,   119,   157,   172,   284,   284,   120,   139,   121,   137,
+     114,   121,   137,   121,   137,   121,   137,   325,   326,   327,
+     328,   338,   339,   340,   341,   235,   324,   337,   121,   140,
+      67,   317,   116,   318,   355,   356,   318,   318,   181,   139,
+     114,   318,   355,   318,   318,   235,   315,   114,   114,   234,
+     235,   233,   235,   139,   233,   372,   377,   181,   139,   278,
+     283,   225,   240,   329,   333,   181,   139,   300,   235,   244,
+     137,   235,   235,    78,   114,   119,   280,   291,   235,   300,
+     137,   137,   311,   139,   144,   277,     3,   140,   215,   216,
+     230,   232,   235,   139,   317,   114,   317,   172,   325,   235,
+     114,   139,   278,   119,    35,    36,    37,    38,   233,   292,
+     293,   295,   264,   280,   263,   139,   133,   136,   297,   139,
+      10,    75,    77,    78,   321,   322,   323,   114,   146,   114,
+     156,   114,   156,   159,   114,   156,   114,   114,   156,   156,
+     116,   172,   177,   181,   281,   376,   139,    84,    86,    90,
+      91,    92,   114,   116,   118,   119,   102,   103,   104,   105,
+     106,   107,   108,   109,   110,   111,   112,   136,   174,   159,
+     159,   122,   128,   129,   124,   125,    93,    94,    95,    96,
+     130,   131,    97,    98,   123,   132,   133,    99,   100,   134,
+     114,   157,   351,   352,   353,   354,   355,   115,   121,   114,
+     355,   356,   114,   355,   356,   139,   233,   374,   117,   139,
+     140,   233,   235,   367,   368,   376,   377,   140,   114,   116,
+     157,   325,   342,   343,   344,   345,   346,   347,   348,   349,
+     350,   356,   357,   358,   359,   360,   361,   362,   157,   376,
+     235,   140,   140,   157,   233,   235,   369,   278,   233,   356,
+     369,   278,   139,   139,   139,   139,    75,   116,   118,   145,
+     280,   284,   285,   286,   287,   288,   139,   139,   139,   139,
+     139,   139,   115,   115,   115,   115,   115,   115,   115,   324,
+     337,   318,   137,   114,   283,   117,   215,   139,   315,   177,
+     282,   177,   282,   315,   116,   215,   317,   181,   139,   215,
+     298,   255,   253,   235,   270,   271,   272,   275,   276,   115,
+     121,   181,   139,   122,   172,   139,   232,   235,   269,   368,
+     376,   309,   310,   114,   157,   342,   115,   121,   136,   379,
+     280,   121,   378,   136,   265,   119,   292,   114,   119,   280,
+     282,   292,   115,   121,   114,   146,   115,   135,   281,   116,
+     281,   281,   151,   172,   282,   281,   139,   115,   121,   115,
      115,   121,   172,   116,   144,   150,   151,   139,   116,   144,
      150,   172,   159,   159,   159,   160,   160,   161,   161,   162,
      162,   162,   162,   163,   163,   164,   165,   166,   167,   168,
-     135,   177,   139,   353,   354,   355,   235,   352,   319,   319,
-     172,   283,   139,   278,   233,   357,   370,   235,   239,   117,
-     377,   117,   114,   139,   326,   344,   345,   346,   349,   359,
-     360,   361,   117,   139,   235,   343,   347,   358,   114,   319,
-     362,   380,   319,   319,   380,   114,   319,   362,   319,   319,
-     319,   319,   357,   233,   368,   378,   279,   117,   121,   117,
-     121,   380,   233,   370,   380,   267,   268,   269,   270,   267,
-     279,   172,   139,   116,   281,   135,   121,   379,   285,   116,
-     135,   289,    31,   217,   218,   279,   267,   144,   316,   144,
-     318,   114,   356,   357,   114,   356,   357,   146,   357,   181,
-     271,   115,   115,   115,   115,   139,   181,   215,   181,   119,
-     257,   258,   139,   114,   135,   157,   259,   261,   325,   326,
-     338,   364,   121,   137,   121,   137,   281,   255,   281,   120,
-     170,   171,   265,   140,   140,   144,   230,   140,   140,   267,
-     114,   157,   377,   140,   120,   235,   294,   172,   295,   140,
-     139,   139,   114,   140,   115,   323,   150,   135,   137,   116,
-     146,   208,   209,   210,   115,   121,   115,   115,   115,   115,
-     172,   365,   366,   367,   235,   364,   319,   319,   119,   159,
-     172,   173,   176,   121,   139,   115,   121,   172,   139,   120,
-     170,   135,   271,   115,   115,   115,   352,   271,   115,   233,
-     370,   116,   122,   157,   172,   172,   235,   349,   271,   115,
-     115,   115,   115,   115,   115,   115,     7,   235,   343,   347,
-     358,   139,   139,   380,   139,   139,   140,   140,   140,   140,
-     284,   170,   171,   172,   317,   139,   285,   287,   120,   139,
-     219,   281,    43,    44,    46,    49,    50,    51,    52,    53,
-      54,    55,    56,    60,    64,    65,    75,    77,    78,    79,
-     132,   145,   177,   178,   179,   180,   181,   182,   183,   185,
-     186,   198,   200,   201,   206,   220,   279,   315,    31,   140,
-     136,   284,   139,   139,   115,   140,   181,   255,   137,   137,
-     326,   171,   235,   260,   261,   260,   281,   319,   120,   266,
-     379,   115,   121,   117,   117,   140,   235,   121,   380,   297,
-     115,   293,   223,   225,   233,   305,   306,   307,   308,   299,
-     115,   115,   135,   171,   114,   115,   135,   121,   144,   115,
-     115,   115,   364,   286,   121,   140,   176,    82,    85,    87,
+     135,   177,   139,   352,   353,   354,   235,   351,   318,   318,
+     172,   282,   139,   139,   233,   356,   369,   235,   239,   117,
+     376,   117,   114,   139,   325,   343,   344,   345,   348,   358,
+     359,   360,   117,   139,   235,   342,   346,   357,   114,   318,
+     361,   379,   318,   318,   379,   114,   318,   361,   318,   318,
+     318,   318,   356,   233,   367,   377,   278,   117,   121,   117,
+     121,   379,   233,   369,   379,   266,   267,   268,   269,   266,
+     278,   172,   139,   116,   280,   135,   121,   378,   284,   116,
+     135,   288,    31,   217,   218,   278,   266,   144,   315,   144,
+     114,   318,   355,   356,   114,   318,   355,   356,   315,   146,
+     356,   181,   270,   115,   115,   115,   115,   139,   181,   215,
+     181,   115,    43,   120,   233,   256,   257,   372,   119,   140,
+     140,   144,   230,   140,   140,   266,   114,   157,   376,   140,
+     120,   235,   293,   172,   294,   280,   120,   170,   171,   264,
+     140,   139,   139,   114,   140,   115,   322,   150,   135,   137,
+     116,   146,   208,   209,   210,   115,   139,   121,   115,   115,
+     115,   115,   172,   119,   159,   172,   173,   176,   121,   139,
+     115,   121,   172,   139,   120,   170,   135,   270,   115,   115,
+     115,   351,   270,   270,   233,   369,   116,   122,   157,   172,
+     172,   235,   348,   270,   115,   115,   115,   115,   115,   115,
+     115,     7,   235,   342,   346,   357,   139,   139,   379,   139,
+     139,   140,   140,   140,   140,   283,   170,   171,   172,   316,
+     139,   284,   286,   120,   139,   219,   280,    43,    44,    46,
+      49,    50,    51,    52,    53,    54,    55,    56,    60,    64,
+      65,    75,    77,    78,    79,   132,   145,   177,   178,   179,
+     180,   181,   182,   183,   185,   186,   198,   200,   201,   206,
+     220,   278,   314,    31,   140,   136,   139,   139,   317,   115,
+     140,   181,   119,   233,   257,   114,   135,   157,   258,   259,
+     261,   324,   325,   337,   355,   363,   364,   365,   366,   121,
+     137,   280,   255,   115,   121,   117,   117,   140,   235,   121,
+     379,   296,   265,   378,   115,   292,   223,   225,   233,   304,
+     305,   306,   307,   298,   115,   115,   135,   171,   114,   115,
+     135,   121,   144,   285,   121,   140,   176,    82,    85,    87,
      144,   152,   153,   154,   151,   140,   152,   170,   140,   114,
-     356,   357,   140,   139,   140,   140,   140,   172,   115,   140,
-     114,   356,   357,   114,   362,   114,   362,   357,   234,     7,
-     122,   140,   172,   271,   271,   270,   274,   274,   275,   115,
-     121,   121,   115,   101,   127,   140,   140,   152,   285,   172,
-     121,   137,   220,   224,   235,   239,   114,   114,   179,   114,
-     114,   137,   279,   137,   279,   122,   279,   178,   114,   181,
-     173,   173,   149,   137,   140,   139,   140,   135,   219,   115,
-     172,   271,   271,   319,   115,   120,   259,   120,   139,   115,
-     139,   140,   316,   120,   139,   140,   140,   115,   119,   208,
-     117,   171,   137,   208,   210,   115,   114,   356,   357,   379,
-     173,   117,   140,   155,   116,   153,   155,   155,   121,   140,
-      90,   118,   117,   140,   115,   139,   115,   117,   117,   117,
-     140,   115,   139,   139,   139,   172,   172,   140,   117,   140,
-     140,   140,   140,   139,   139,   171,   171,   117,   117,   140,
-     281,   235,   177,   177,    50,   177,   139,   137,   137,   177,
-     137,   137,   177,    61,    62,    63,   202,   203,   204,   137,
-      66,   137,   119,   183,   120,   319,   137,   140,   140,   101,
-     276,   277,   115,   306,   121,   137,   121,   137,   120,   304,
-     135,   146,   115,   115,   135,   139,   120,   117,    86,   139,
-     153,   117,   116,   153,   116,   153,   117,   271,   117,   271,
-     271,   271,   140,   140,   117,   117,   115,   115,   117,   121,
-     101,   270,   101,   140,   117,   115,   115,   114,   115,   178,
-     199,   220,   137,   115,   114,   114,   181,   204,    61,    62,
-     172,   150,   179,   115,   115,   119,   139,   139,   305,   146,
-     211,   114,   137,   211,   271,   152,   139,   139,   140,   140,
-     140,   140,   117,   117,   139,   140,   117,   179,    47,    48,
-     119,   189,   190,   191,   177,   179,   140,   115,   178,   119,
-     191,   101,   139,   101,   139,   114,   114,   137,   120,   139,
-     279,   316,   120,   121,   135,   171,   115,   140,   140,   152,
-     152,   115,   115,   115,   115,   274,    45,   171,   187,   188,
-     317,   135,   139,   179,   189,   115,   137,   179,   137,   139,
-     115,   139,   115,   139,   101,   139,   101,   139,   137,   305,
-     146,   144,   212,   115,   137,   115,   117,   140,   140,   179,
-     101,   121,   135,   140,   213,   214,   220,   137,   178,   178,
-     213,   181,   205,   233,   373,   181,   205,   115,   139,   115,
-     139,   120,   115,   121,   117,   117,   171,   187,   190,   192,
-     193,   139,   137,   190,   194,   195,   140,   114,   157,   316,
-     364,   144,   140,   181,   205,   181,   205,   114,   137,   144,
-     179,   184,   120,   190,   220,   178,    59,   184,   197,   120,
-     190,   115,   235,   115,   140,   140,   299,   179,   184,   137,
-     196,   197,   184,   197,   181,   181,   115,   115,   115,   196,
-     140,   140,   181,   181,   140,   140
+     318,   355,   356,   140,   140,   139,   140,   140,   140,   172,
+     115,   140,   114,   318,   355,   356,   114,   318,   361,   114,
+     318,   361,   356,   234,     7,   122,   140,   172,   270,   270,
+     269,   273,   273,   274,   115,   121,   121,   115,   101,   127,
+     140,   140,   152,   284,   172,   121,   137,   220,   314,   114,
+     114,   179,   114,   114,   137,   278,   137,   278,   122,   278,
+     178,   114,   181,   173,   173,   149,   137,   140,   139,   140,
+     135,   219,   115,   172,   270,   270,   283,   318,   115,   255,
+     258,   137,   325,   364,   365,   366,   171,   235,   363,   121,
+     137,   260,   261,   260,   318,   318,   280,   120,   139,   115,
+     139,   120,   140,   315,   120,   139,   140,   140,   115,   119,
+     208,   117,   171,   137,   208,   210,   115,   378,   173,   117,
+     140,   155,   116,   153,   155,   155,   121,   140,    90,   118,
+     117,   140,   115,   139,   115,   115,   117,   117,   117,   140,
+     115,   139,   139,   139,   172,   172,   140,   117,   140,   140,
+     140,   140,   139,   139,   171,   171,   117,   117,   140,   280,
+     177,   177,    50,   177,   139,   137,   137,   177,   137,   137,
+     177,    61,    62,    63,   202,   203,   204,   137,    66,   137,
+     119,   183,   120,   318,   137,   140,   140,   120,   137,   115,
+     115,   115,   363,   318,   101,   275,   276,   115,   305,   121,
+     137,   121,   137,   120,   303,   135,   146,   115,   115,   135,
+     120,   117,    86,   139,   153,   117,   116,   153,   116,   153,
+     117,   270,   117,   270,   270,   270,   140,   140,   117,   117,
+     115,   115,   117,   121,   101,   269,   101,   140,   117,   115,
+     115,   114,   115,   178,   199,   220,   224,   235,   239,   137,
+     115,   114,   114,   181,   204,    61,    62,   172,   150,   179,
+     115,   115,   114,   318,   355,   356,   259,   119,   139,   139,
+     304,   146,   211,   114,   137,   211,   152,   139,   139,   140,
+     140,   140,   140,   117,   117,   139,   140,   117,   179,    47,
+      48,   119,   189,   190,   191,   177,   179,   140,   115,   178,
+     235,   119,   191,   101,   139,   101,   139,   114,   114,   137,
+     120,   139,   139,   278,   315,   120,   121,   135,   171,   115,
+     140,   152,   152,   115,   115,   115,   115,   273,    45,   171,
+     187,   188,   316,   135,   139,   179,   189,   115,   137,   179,
+     137,   139,   115,   139,   115,   139,   101,   139,   101,   139,
+     137,   270,   304,   146,   144,   212,   115,   137,   117,   140,
+     140,   179,   101,   121,   135,   140,   213,   214,   220,   137,
+     178,   178,   213,   181,   205,   233,   372,   181,   205,   115,
+     139,   115,   139,   140,   120,   115,   121,   117,   117,   171,
+     187,   190,   192,   193,   139,   137,   190,   194,   195,   140,
+     114,   157,   315,   363,   144,   140,   181,   205,   181,   205,
+     115,   114,   137,   144,   179,   184,   120,   190,   220,   178,
+      59,   184,   197,   120,   190,   115,   235,   115,   140,   140,
+     298,   179,   184,   137,   196,   197,   184,   197,   181,   181,
+     115,   115,   115,   196,   140,   140,   181,   181,   140,   140
 };
 
@@ -4907,5 +5013,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 305 "parser.yy"
+#line 326 "parser.yy"
     { typedefTable.enterScope(); }
     break;
@@ -4914,5 +5020,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 309 "parser.yy"
+#line 330 "parser.yy"
     { typedefTable.leaveScope(); }
     break;
@@ -4921,5 +5027,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 316 "parser.yy"
+#line 337 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantInteger( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4928,5 +5034,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 317 "parser.yy"
+#line 338 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4935,5 +5041,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 318 "parser.yy"
+#line 339 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4942,5 +5048,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 319 "parser.yy"
+#line 340 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantFloat( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4949,5 +5055,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 320 "parser.yy"
+#line 341 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantChar( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4956,5 +5062,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 345 "parser.yy"
+#line 366 "parser.yy"
     { (yyval.constant) = build_constantStr( *(yyvsp[(1) - (1)].str) ); }
     break;
@@ -4963,5 +5069,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 349 "parser.yy"
+#line 370 "parser.yy"
     { (yyval.str) = (yyvsp[(1) - (1)].tok); }
     break;
@@ -4970,5 +5076,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 351 "parser.yy"
+#line 372 "parser.yy"
     {
 			appendStr( (yyvsp[(1) - (2)].str), (yyvsp[(2) - (2)].tok) );						// append 2nd juxtaposed string to 1st
@@ -4981,5 +5087,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 362 "parser.yy"
+#line 383 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4988,5 +5094,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 364 "parser.yy"
+#line 385 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_constantZeroOne( *(yyvsp[(1) - (1)].tok) ) ); }
     break;
@@ -4995,5 +5101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 367 "parser.yy"
+#line 388 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5002,5 +5108,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 369 "parser.yy"
+#line 390 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_valexpr( (yyvsp[(2) - (3)].sn) ) ); }
     break;
@@ -5009,5 +5115,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 379 "parser.yy"
+#line 400 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Index, (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ) ); }
     break;
@@ -5016,5 +5122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 381 "parser.yy"
+#line 402 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_func( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5023,5 +5129,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 383 "parser.yy"
+#line 404 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
@@ -5030,5 +5136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 385 "parser.yy"
+#line 406 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5037,5 +5143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 387 "parser.yy"
+#line 408 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (2)].en), build_field_name_REALFRACTIONconstant( *(yyvsp[(2) - (2)].tok) ) ) ); }
     break;
@@ -5044,5 +5150,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 389 "parser.yy"
+#line 410 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), build_varref( (yyvsp[(3) - (3)].tok) ) ) ); }
     break;
@@ -5051,5 +5157,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 391 "parser.yy"
+#line 412 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5058,5 +5164,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 393 "parser.yy"
+#line 414 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5065,5 +5171,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 395 "parser.yy"
+#line 416 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, (yyvsp[(1) - (2)].en) ) ); }
     break;
@@ -5072,5 +5178,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 397 "parser.yy"
+#line 418 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_compoundLiteral( (yyvsp[(2) - (7)].decl), new InitializerNode( (yyvsp[(5) - (7)].in), true ) ) ); }
     break;
@@ -5079,5 +5185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 399 "parser.yy"
+#line 420 "parser.yy"
     {
 			Token fn;
@@ -5090,5 +5196,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 409 "parser.yy"
+#line 430 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5097,5 +5203,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 414 "parser.yy"
+#line 435 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
@@ -5104,5 +5210,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 420 "parser.yy"
+#line 441 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5111,5 +5217,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 426 "parser.yy"
+#line 447 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_REALDECIMALconstant( *(yyvsp[(1) - (2)].tok) ) ), maybeMoveBuild<Expression>( (yyvsp[(2) - (2)].en) ) ) ); }
     break;
@@ -5118,5 +5224,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 428 "parser.yy"
+#line 449 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_REALDECIMALconstant( *(yyvsp[(1) - (6)].tok) ) ), build_tuple( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
@@ -5125,5 +5231,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 430 "parser.yy"
+#line 451 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (3)].en), maybeMoveBuild<Expression>( (yyvsp[(3) - (3)].en) ) ) ); }
     break;
@@ -5132,5 +5238,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 432 "parser.yy"
+#line 453 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_fieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5139,5 +5245,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 434 "parser.yy"
+#line 455 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (3)].en), maybeMoveBuild<Expression>( (yyvsp[(3) - (3)].en) ) ) ); }
     break;
@@ -5146,5 +5252,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 436 "parser.yy"
+#line 457 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_pfieldSel( (yyvsp[(1) - (7)].en), build_tuple( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5153,5 +5259,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 441 "parser.yy"
+#line 462 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_field_name_fraction_constants( build_constantInteger( *(yyvsp[(1) - (2)].tok) ), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5160,5 +5266,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 443 "parser.yy"
+#line 464 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_field_name_fraction_constants( build_field_name_FLOATINGconstant( *(yyvsp[(1) - (2)].tok) ), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5167,5 +5273,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 445 "parser.yy"
+#line 466 "parser.yy"
     {
 			if( (*(yyvsp[(1) - (2)].tok)) == "0" || (*(yyvsp[(1) - (2)].tok)) == "1" ) {
@@ -5180,5 +5286,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 456 "parser.yy"
+#line 477 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
@@ -5187,5 +5293,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 458 "parser.yy"
+#line 479 "parser.yy"
     {
 			Expression * constant = build_field_name_REALFRACTIONconstant( *(yyvsp[(2) - (2)].tok) );
@@ -5197,5 +5303,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 469 "parser.yy"
+#line 490 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5204,5 +5310,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 471 "parser.yy"
+#line 492 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
@@ -5211,5 +5317,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 473 "parser.yy"
+#line 494 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en)->set_extension( true ); }
     break;
@@ -5218,5 +5324,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 478 "parser.yy"
+#line 499 "parser.yy"
     {
 			switch ( (yyvsp[(1) - (2)].op) ) {
@@ -5236,5 +5342,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 491 "parser.yy"
+#line 512 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_val( (yyvsp[(1) - (2)].op), (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5243,5 +5349,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 493 "parser.yy"
+#line 514 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Incr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5250,5 +5356,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 495 "parser.yy"
+#line 516 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_unary_ptr( OperKinds::Decr, (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5257,5 +5363,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 497 "parser.yy"
+#line 518 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5264,5 +5370,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 499 "parser.yy"
+#line 520 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_sizeOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5271,5 +5377,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 501 "parser.yy"
+#line 522 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOfexpr( (yyvsp[(2) - (2)].en) ) ); }
     break;
@@ -5278,5 +5384,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 503 "parser.yy"
+#line 524 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_alignOftype( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5285,5 +5391,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 505 "parser.yy"
+#line 526 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_offsetOf( (yyvsp[(3) - (6)].decl), build_varref( (yyvsp[(5) - (6)].tok) ) ) ); }
     break;
@@ -5292,5 +5398,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 507 "parser.yy"
+#line 528 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (1)].tok) ), nullptr ) ); }
     break;
@@ -5299,5 +5405,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 509 "parser.yy"
+#line 530 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrexpr( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ) ); }
     break;
@@ -5306,5 +5412,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 511 "parser.yy"
+#line 532 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_attrtype( build_varref( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5313,5 +5419,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 517 "parser.yy"
+#line 538 "parser.yy"
     { (yyval.op) = OperKinds::PointTo; }
     break;
@@ -5320,5 +5426,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 518 "parser.yy"
+#line 539 "parser.yy"
     { (yyval.op) = OperKinds::AddressOf; }
     break;
@@ -5327,5 +5433,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 524 "parser.yy"
+#line 545 "parser.yy"
     { (yyval.op) = OperKinds::UnPlus; }
     break;
@@ -5334,5 +5440,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 525 "parser.yy"
+#line 546 "parser.yy"
     { (yyval.op) = OperKinds::UnMinus; }
     break;
@@ -5341,5 +5447,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 526 "parser.yy"
+#line 547 "parser.yy"
     { (yyval.op) = OperKinds::Neg; }
     break;
@@ -5348,5 +5454,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 527 "parser.yy"
+#line 548 "parser.yy"
     { (yyval.op) = OperKinds::BitNeg; }
     break;
@@ -5355,5 +5461,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 533 "parser.yy"
+#line 554 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cast( (yyvsp[(2) - (4)].decl), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5362,5 +5468,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 541 "parser.yy"
+#line 562 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mul, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5369,5 +5475,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 543 "parser.yy"
+#line 564 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Div, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5376,5 +5482,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 545 "parser.yy"
+#line 566 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Mod, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5383,5 +5489,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 551 "parser.yy"
+#line 572 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Plus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5390,5 +5496,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 553 "parser.yy"
+#line 574 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Minus, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5397,5 +5503,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 559 "parser.yy"
+#line 580 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5404,5 +5510,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 561 "parser.yy"
+#line 582 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::RShift, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5411,5 +5517,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 567 "parser.yy"
+#line 588 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5418,5 +5524,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 569 "parser.yy"
+#line 590 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5425,5 +5531,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 571 "parser.yy"
+#line 592 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::LEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5432,5 +5538,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 573 "parser.yy"
+#line 594 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::GEThan, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5439,5 +5545,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 579 "parser.yy"
+#line 600 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Eq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5446,5 +5552,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 581 "parser.yy"
+#line 602 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Neq, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5453,5 +5559,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 587 "parser.yy"
+#line 608 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitAnd, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5460,5 +5566,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 593 "parser.yy"
+#line 614 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::Xor, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5467,5 +5573,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 599 "parser.yy"
+#line 620 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_val( OperKinds::BitOr, (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5474,5 +5580,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 605 "parser.yy"
+#line 626 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), true ) ); }
     break;
@@ -5481,5 +5587,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 611 "parser.yy"
+#line 632 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_and_or( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en), false ) ); }
     break;
@@ -5488,5 +5594,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 617 "parser.yy"
+#line 638 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (5)].en), (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].en) ) ); }
     break;
@@ -5495,5 +5601,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 620 "parser.yy"
+#line 641 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_cond( (yyvsp[(1) - (4)].en), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -5502,5 +5608,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 633 "parser.yy"
+#line 654 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_binary_ptr( (yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5509,5 +5615,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 640 "parser.yy"
+#line 661 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
@@ -5516,5 +5622,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 645 "parser.yy"
+#line 666 "parser.yy"
     { (yyval.op) = OperKinds::Assign; }
     break;
@@ -5523,5 +5629,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 646 "parser.yy"
+#line 667 "parser.yy"
     { (yyval.op) = OperKinds::AtAssn; }
     break;
@@ -5530,5 +5636,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 647 "parser.yy"
+#line 668 "parser.yy"
     { (yyval.op) = OperKinds::MulAssn; }
     break;
@@ -5537,5 +5643,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 648 "parser.yy"
+#line 669 "parser.yy"
     { (yyval.op) = OperKinds::DivAssn; }
     break;
@@ -5544,5 +5650,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 649 "parser.yy"
+#line 670 "parser.yy"
     { (yyval.op) = OperKinds::ModAssn; }
     break;
@@ -5551,5 +5657,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 650 "parser.yy"
+#line 671 "parser.yy"
     { (yyval.op) = OperKinds::PlusAssn; }
     break;
@@ -5558,5 +5664,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 651 "parser.yy"
+#line 672 "parser.yy"
     { (yyval.op) = OperKinds::MinusAssn; }
     break;
@@ -5565,5 +5671,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 652 "parser.yy"
+#line 673 "parser.yy"
     { (yyval.op) = OperKinds::LSAssn; }
     break;
@@ -5572,5 +5678,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 653 "parser.yy"
+#line 674 "parser.yy"
     { (yyval.op) = OperKinds::RSAssn; }
     break;
@@ -5579,5 +5685,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 654 "parser.yy"
+#line 675 "parser.yy"
     { (yyval.op) = OperKinds::AndAssn; }
     break;
@@ -5586,5 +5692,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 655 "parser.yy"
+#line 676 "parser.yy"
     { (yyval.op) = OperKinds::ERAssn; }
     break;
@@ -5593,5 +5699,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 656 "parser.yy"
+#line 677 "parser.yy"
     { (yyval.op) = OperKinds::OrAssn; }
     break;
@@ -5600,5 +5706,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 667 "parser.yy"
+#line 688 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( (yyvsp[(4) - (6)].en) ) ) ); }
     break;
@@ -5607,5 +5713,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 669 "parser.yy"
+#line 690 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_tuple( (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_last( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5614,5 +5720,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 675 "parser.yy"
+#line 696 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5621,5 +5727,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 681 "parser.yy"
+#line 702 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_comma( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5628,5 +5734,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 686 "parser.yy"
+#line 707 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
@@ -5635,5 +5741,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 695 "parser.yy"
+#line 716 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
@@ -5642,5 +5748,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 702 "parser.yy"
+#line 723 "parser.yy"
     {
 			Token fn;
@@ -5653,5 +5759,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 712 "parser.yy"
+#line 733 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) );
@@ -5662,5 +5768,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 719 "parser.yy"
+#line 740 "parser.yy"
     { (yyval.sn) = new StatementNode( build_compound( (StatementNode *)0 ) ); }
     break;
@@ -5669,5 +5775,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 726 "parser.yy"
+#line 748 "parser.yy"
     { (yyval.sn) = new StatementNode( build_compound( (yyvsp[(5) - (7)].sn) ) ); }
     break;
@@ -5676,5 +5782,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 732 "parser.yy"
+#line 754 "parser.yy"
     { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     break;
@@ -5683,5 +5789,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 737 "parser.yy"
+#line 759 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5690,8 +5796,7 @@
 
 /* Line 1806 of yacc.c  */
-#line 739 "parser.yy"
-    {	// mark all fields in list
-			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
-				iter->set_extension( true );
+#line 761 "parser.yy"
+    {
+			distExt( (yyvsp[(2) - (2)].decl) );
 			(yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) );
 		}
@@ -5701,47 +5806,57 @@
 
 /* Line 1806 of yacc.c  */
-#line 745 "parser.yy"
+#line 766 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
-  case 155:
-
-/* Line 1806 of yacc.c  */
-#line 752 "parser.yy"
+  case 153:
+
+/* Line 1806 of yacc.c  */
+#line 768 "parser.yy"
+    {
+			distExt( (yyvsp[(2) - (2)].decl) );
+			(yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) );
+		}
+    break;
+
+  case 156:
+
+/* Line 1806 of yacc.c  */
+#line 778 "parser.yy"
     { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     break;
 
-  case 156:
-
-/* Line 1806 of yacc.c  */
-#line 757 "parser.yy"
+  case 157:
+
+/* Line 1806 of yacc.c  */
+#line 783 "parser.yy"
     { (yyval.sn) = new StatementNode( build_expr( (yyvsp[(1) - (2)].en) ) ); }
     break;
 
-  case 157:
-
-/* Line 1806 of yacc.c  */
-#line 763 "parser.yy"
+  case 158:
+
+/* Line 1806 of yacc.c  */
+#line 789 "parser.yy"
     { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn), nullptr ) ); }
     break;
 
-  case 158:
-
-/* Line 1806 of yacc.c  */
-#line 765 "parser.yy"
+  case 159:
+
+/* Line 1806 of yacc.c  */
+#line 791 "parser.yy"
     { (yyval.sn) = new StatementNode( build_if( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].sn), (yyvsp[(7) - (7)].sn) ) ); }
     break;
 
-  case 159:
-
-/* Line 1806 of yacc.c  */
-#line 767 "parser.yy"
+  case 160:
+
+/* Line 1806 of yacc.c  */
+#line 793 "parser.yy"
     { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
 
-  case 160:
-
-/* Line 1806 of yacc.c  */
-#line 769 "parser.yy"
+  case 161:
+
+/* Line 1806 of yacc.c  */
+#line 795 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
@@ -5755,15 +5870,15 @@
     break;
 
-  case 161:
-
-/* Line 1806 of yacc.c  */
-#line 779 "parser.yy"
+  case 162:
+
+/* Line 1806 of yacc.c  */
+#line 805 "parser.yy"
     { (yyval.sn) = new StatementNode( build_switch( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
 
-  case 162:
-
-/* Line 1806 of yacc.c  */
-#line 781 "parser.yy"
+  case 163:
+
+/* Line 1806 of yacc.c  */
+#line 807 "parser.yy"
     {
 			StatementNode *sw = new StatementNode( build_switch( (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ) );
@@ -5772,323 +5887,323 @@
     break;
 
-  case 163:
-
-/* Line 1806 of yacc.c  */
-#line 791 "parser.yy"
+  case 164:
+
+/* Line 1806 of yacc.c  */
+#line 817 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
-  case 164:
-
-/* Line 1806 of yacc.c  */
-#line 793 "parser.yy"
+  case 165:
+
+/* Line 1806 of yacc.c  */
+#line 819 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 166:
-
-/* Line 1806 of yacc.c  */
-#line 798 "parser.yy"
+  case 167:
+
+/* Line 1806 of yacc.c  */
+#line 824 "parser.yy"
     { (yyval.sn) = new StatementNode( build_case( (yyvsp[(1) - (1)].en) ) ); }
     break;
 
-  case 167:
-
-/* Line 1806 of yacc.c  */
-#line 800 "parser.yy"
+  case 168:
+
+/* Line 1806 of yacc.c  */
+#line 826 "parser.yy"
     { (yyval.sn) = (StatementNode *)((yyvsp[(1) - (3)].sn)->set_last( new StatementNode( build_case( (yyvsp[(3) - (3)].en) ) ) ) ); }
     break;
 
-  case 168:
-
-/* Line 1806 of yacc.c  */
-#line 804 "parser.yy"
+  case 169:
+
+/* Line 1806 of yacc.c  */
+#line 830 "parser.yy"
     { (yyval.sn) = (yyvsp[(2) - (3)].sn); }
     break;
 
-  case 169:
-
-/* Line 1806 of yacc.c  */
-#line 805 "parser.yy"
+  case 170:
+
+/* Line 1806 of yacc.c  */
+#line 831 "parser.yy"
     { (yyval.sn) = new StatementNode( build_default() ); }
     break;
 
-  case 171:
-
-/* Line 1806 of yacc.c  */
-#line 811 "parser.yy"
+  case 172:
+
+/* Line 1806 of yacc.c  */
+#line 837 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_last( (yyvsp[(2) - (2)].sn) )); }
     break;
 
-  case 172:
-
-/* Line 1806 of yacc.c  */
-#line 815 "parser.yy"
+  case 173:
+
+/* Line 1806 of yacc.c  */
+#line 841 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
     break;
 
-  case 173:
-
-/* Line 1806 of yacc.c  */
-#line 820 "parser.yy"
+  case 174:
+
+/* Line 1806 of yacc.c  */
+#line 846 "parser.yy"
     { (yyval.sn) = nullptr; }
     break;
 
-  case 175:
-
-/* Line 1806 of yacc.c  */
-#line 826 "parser.yy"
+  case 176:
+
+/* Line 1806 of yacc.c  */
+#line 852 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(2) - (2)].sn) ) ) ); }
     break;
 
-  case 176:
-
-/* Line 1806 of yacc.c  */
-#line 828 "parser.yy"
+  case 177:
+
+/* Line 1806 of yacc.c  */
+#line 854 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( new StatementNode( build_compound( (yyvsp[(3) - (3)].sn) ) ) ) ) ); }
     break;
 
-  case 177:
-
-/* Line 1806 of yacc.c  */
-#line 833 "parser.yy"
+  case 178:
+
+/* Line 1806 of yacc.c  */
+#line 859 "parser.yy"
     { (yyval.sn) = nullptr; }
     break;
 
-  case 179:
-
-/* Line 1806 of yacc.c  */
-#line 839 "parser.yy"
+  case 180:
+
+/* Line 1806 of yacc.c  */
+#line 865 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
 
-  case 180:
-
-/* Line 1806 of yacc.c  */
-#line 841 "parser.yy"
+  case 181:
+
+/* Line 1806 of yacc.c  */
+#line 867 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(2) - (3)].sn)->set_last( (yyvsp[(3) - (3)].sn) ) ) ) ); }
     break;
 
-  case 181:
-
-/* Line 1806 of yacc.c  */
-#line 843 "parser.yy"
+  case 182:
+
+/* Line 1806 of yacc.c  */
+#line 869 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_last( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
 
-  case 182:
-
-/* Line 1806 of yacc.c  */
-#line 845 "parser.yy"
+  case 183:
+
+/* Line 1806 of yacc.c  */
+#line 871 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_last( (yyvsp[(2) - (4)].sn)->append_last_case( new StatementNode( build_compound( (StatementNode *)(yyvsp[(3) - (4)].sn)->set_last( (yyvsp[(4) - (4)].sn) ) ) ) ) ) ); }
     break;
 
-  case 183:
-
-/* Line 1806 of yacc.c  */
-#line 850 "parser.yy"
+  case 184:
+
+/* Line 1806 of yacc.c  */
+#line 876 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
     break;
 
-  case 185:
-
-/* Line 1806 of yacc.c  */
-#line 856 "parser.yy"
+  case 186:
+
+/* Line 1806 of yacc.c  */
+#line 882 "parser.yy"
     { (yyval.sn) = nullptr; }
     break;
 
-  case 186:
-
-/* Line 1806 of yacc.c  */
-#line 858 "parser.yy"
+  case 187:
+
+/* Line 1806 of yacc.c  */
+#line 884 "parser.yy"
     { (yyval.sn) = nullptr; }
     break;
 
-  case 187:
-
-/* Line 1806 of yacc.c  */
-#line 863 "parser.yy"
+  case 188:
+
+/* Line 1806 of yacc.c  */
+#line 889 "parser.yy"
     { (yyval.sn) = new StatementNode( build_while( (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ) ); }
     break;
 
-  case 188:
-
-/* Line 1806 of yacc.c  */
-#line 865 "parser.yy"
+  case 189:
+
+/* Line 1806 of yacc.c  */
+#line 891 "parser.yy"
     { (yyval.sn) = new StatementNode( build_while( (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn), true ) ); }
     break;
 
-  case 189:
-
-/* Line 1806 of yacc.c  */
-#line 867 "parser.yy"
+  case 190:
+
+/* Line 1806 of yacc.c  */
+#line 893 "parser.yy"
     { (yyval.sn) = new StatementNode( build_for( (yyvsp[(4) - (6)].fctl), (yyvsp[(6) - (6)].sn) ) ); }
     break;
 
-  case 190:
-
-/* Line 1806 of yacc.c  */
-#line 872 "parser.yy"
+  case 191:
+
+/* Line 1806 of yacc.c  */
+#line 898 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
 
-  case 191:
-
-/* Line 1806 of yacc.c  */
-#line 874 "parser.yy"
+  case 192:
+
+/* Line 1806 of yacc.c  */
+#line 900 "parser.yy"
     { (yyval.fctl) = new ForCtl( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
 
-  case 192:
-
-/* Line 1806 of yacc.c  */
-#line 879 "parser.yy"
+  case 193:
+
+/* Line 1806 of yacc.c  */
+#line 905 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Goto ) ); }
     break;
 
-  case 193:
-
-/* Line 1806 of yacc.c  */
-#line 883 "parser.yy"
+  case 194:
+
+/* Line 1806 of yacc.c  */
+#line 909 "parser.yy"
     { (yyval.sn) = new StatementNode( build_computedgoto( (yyvsp[(3) - (4)].en) ) ); }
     break;
 
-  case 194:
-
-/* Line 1806 of yacc.c  */
-#line 886 "parser.yy"
+  case 195:
+
+/* Line 1806 of yacc.c  */
+#line 912 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Continue ) ); }
     break;
 
-  case 195:
-
-/* Line 1806 of yacc.c  */
-#line 890 "parser.yy"
+  case 196:
+
+/* Line 1806 of yacc.c  */
+#line 916 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Continue ) ); }
     break;
 
-  case 196:
-
-/* Line 1806 of yacc.c  */
-#line 893 "parser.yy"
+  case 197:
+
+/* Line 1806 of yacc.c  */
+#line 919 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( BranchStmt::Break ) ); }
     break;
 
-  case 197:
-
-/* Line 1806 of yacc.c  */
-#line 897 "parser.yy"
+  case 198:
+
+/* Line 1806 of yacc.c  */
+#line 923 "parser.yy"
     { (yyval.sn) = new StatementNode( build_branch( (yyvsp[(2) - (3)].tok), BranchStmt::Break ) ); }
     break;
 
-  case 198:
-
-/* Line 1806 of yacc.c  */
-#line 899 "parser.yy"
+  case 199:
+
+/* Line 1806 of yacc.c  */
+#line 925 "parser.yy"
     { (yyval.sn) = new StatementNode( build_return( (yyvsp[(2) - (3)].en) ) ); }
     break;
 
-  case 199:
-
-/* Line 1806 of yacc.c  */
-#line 901 "parser.yy"
+  case 200:
+
+/* Line 1806 of yacc.c  */
+#line 927 "parser.yy"
     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     break;
 
-  case 200:
-
-/* Line 1806 of yacc.c  */
-#line 903 "parser.yy"
+  case 201:
+
+/* Line 1806 of yacc.c  */
+#line 929 "parser.yy"
     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (3)].en) ) ); }
     break;
 
-  case 201:
-
-/* Line 1806 of yacc.c  */
-#line 905 "parser.yy"
+  case 202:
+
+/* Line 1806 of yacc.c  */
+#line 931 "parser.yy"
     { (yyval.sn) = new StatementNode( build_throw( (yyvsp[(2) - (5)].en) ) ); }
     break;
 
-  case 202:
-
-/* Line 1806 of yacc.c  */
-#line 910 "parser.yy"
+  case 203:
+
+/* Line 1806 of yacc.c  */
+#line 936 "parser.yy"
     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), (yyvsp[(3) - (3)].sn), 0 ) ); }
     break;
 
-  case 203:
-
-/* Line 1806 of yacc.c  */
-#line 912 "parser.yy"
+  case 204:
+
+/* Line 1806 of yacc.c  */
+#line 938 "parser.yy"
     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (3)].sn), 0, (yyvsp[(3) - (3)].sn) ) ); }
     break;
 
-  case 204:
-
-/* Line 1806 of yacc.c  */
-#line 914 "parser.yy"
+  case 205:
+
+/* Line 1806 of yacc.c  */
+#line 940 "parser.yy"
     { (yyval.sn) = new StatementNode( build_try( (yyvsp[(2) - (4)].sn), (yyvsp[(3) - (4)].sn), (yyvsp[(4) - (4)].sn) ) ); }
     break;
 
-  case 206:
-
-/* Line 1806 of yacc.c  */
-#line 921 "parser.yy"
+  case 207:
+
+/* Line 1806 of yacc.c  */
+#line 947 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
     break;
 
-  case 207:
-
-/* Line 1806 of yacc.c  */
-#line 923 "parser.yy"
+  case 208:
+
+/* Line 1806 of yacc.c  */
+#line 949 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
     break;
 
-  case 208:
-
-/* Line 1806 of yacc.c  */
-#line 925 "parser.yy"
+  case 209:
+
+/* Line 1806 of yacc.c  */
+#line 951 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( 0, (yyvsp[(5) - (5)].sn), true ) ); }
     break;
 
-  case 209:
-
-/* Line 1806 of yacc.c  */
-#line 927 "parser.yy"
+  case 210:
+
+/* Line 1806 of yacc.c  */
+#line 953 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (6)].sn)->set_last( new StatementNode( build_catch( 0, (yyvsp[(6) - (6)].sn), true ) ) ); }
     break;
 
-  case 210:
-
-/* Line 1806 of yacc.c  */
-#line 932 "parser.yy"
+  case 211:
+
+/* Line 1806 of yacc.c  */
+#line 958 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
     break;
 
-  case 211:
-
-/* Line 1806 of yacc.c  */
-#line 934 "parser.yy"
+  case 212:
+
+/* Line 1806 of yacc.c  */
+#line 960 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     break;
 
-  case 212:
-
-/* Line 1806 of yacc.c  */
-#line 936 "parser.yy"
+  case 213:
+
+/* Line 1806 of yacc.c  */
+#line 962 "parser.yy"
     { (yyval.sn) = new StatementNode( build_catch( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ) ); }
     break;
 
-  case 213:
-
-/* Line 1806 of yacc.c  */
-#line 938 "parser.yy"
+  case 214:
+
+/* Line 1806 of yacc.c  */
+#line 964 "parser.yy"
     { (yyval.sn) = (StatementNode *)(yyvsp[(1) - (10)].sn)->set_last( new StatementNode( build_catch( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ) ); }
     break;
 
-  case 214:
-
-/* Line 1806 of yacc.c  */
-#line 943 "parser.yy"
+  case 215:
+
+/* Line 1806 of yacc.c  */
+#line 969 "parser.yy"
     {
 			(yyval.sn) = new StatementNode( build_finally( (yyvsp[(2) - (2)].sn) ) );
@@ -6096,8 +6211,8 @@
     break;
 
-  case 216:
-
-/* Line 1806 of yacc.c  */
-#line 956 "parser.yy"
+  case 217:
+
+/* Line 1806 of yacc.c  */
+#line 982 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6106,15 +6221,15 @@
     break;
 
-  case 217:
-
-/* Line 1806 of yacc.c  */
-#line 961 "parser.yy"
+  case 218:
+
+/* Line 1806 of yacc.c  */
+#line 987 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 218:
-
-/* Line 1806 of yacc.c  */
-#line 963 "parser.yy"
+  case 219:
+
+/* Line 1806 of yacc.c  */
+#line 989 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6123,106 +6238,106 @@
     break;
 
-  case 220:
-
-/* Line 1806 of yacc.c  */
-#line 972 "parser.yy"
+  case 221:
+
+/* Line 1806 of yacc.c  */
+#line 998 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ) ); }
     break;
 
-  case 221:
-
-/* Line 1806 of yacc.c  */
-#line 974 "parser.yy"
+  case 222:
+
+/* Line 1806 of yacc.c  */
+#line 1000 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ) ); }
     break;
 
-  case 222:
-
-/* Line 1806 of yacc.c  */
-#line 976 "parser.yy"
+  case 223:
+
+/* Line 1806 of yacc.c  */
+#line 1002 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ) ); }
     break;
 
-  case 223:
-
-/* Line 1806 of yacc.c  */
-#line 978 "parser.yy"
+  case 224:
+
+/* Line 1806 of yacc.c  */
+#line 1004 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].en) ) ); }
     break;
 
-  case 224:
-
-/* Line 1806 of yacc.c  */
-#line 980 "parser.yy"
+  case 225:
+
+/* Line 1806 of yacc.c  */
+#line 1006 "parser.yy"
     { (yyval.sn) = new StatementNode( build_asmstmt( (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].en), (yyvsp[(12) - (14)].label) ) ); }
     break;
 
-  case 225:
-
-/* Line 1806 of yacc.c  */
-#line 985 "parser.yy"
+  case 226:
+
+/* Line 1806 of yacc.c  */
+#line 1011 "parser.yy"
     { (yyval.flag) = false; }
     break;
 
-  case 226:
-
-/* Line 1806 of yacc.c  */
-#line 987 "parser.yy"
+  case 227:
+
+/* Line 1806 of yacc.c  */
+#line 1013 "parser.yy"
     { (yyval.flag) = true; }
     break;
 
-  case 227:
-
-/* Line 1806 of yacc.c  */
-#line 992 "parser.yy"
+  case 228:
+
+/* Line 1806 of yacc.c  */
+#line 1018 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
 
-  case 230:
-
-/* Line 1806 of yacc.c  */
-#line 999 "parser.yy"
+  case 231:
+
+/* Line 1806 of yacc.c  */
+#line 1025 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 231:
-
-/* Line 1806 of yacc.c  */
-#line 1004 "parser.yy"
+  case 232:
+
+/* Line 1806 of yacc.c  */
+#line 1030 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asmexpr( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ) ); }
     break;
 
-  case 232:
-
-/* Line 1806 of yacc.c  */
-#line 1006 "parser.yy"
+  case 233:
+
+/* Line 1806 of yacc.c  */
+#line 1032 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_asmexpr( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ) ); }
     break;
 
-  case 233:
-
-/* Line 1806 of yacc.c  */
-#line 1011 "parser.yy"
+  case 234:
+
+/* Line 1806 of yacc.c  */
+#line 1037 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
 
-  case 234:
-
-/* Line 1806 of yacc.c  */
-#line 1013 "parser.yy"
+  case 235:
+
+/* Line 1806 of yacc.c  */
+#line 1039 "parser.yy"
     { (yyval.en) = new ExpressionNode( (yyvsp[(1) - (1)].constant) ); }
     break;
 
-  case 235:
-
-/* Line 1806 of yacc.c  */
-#line 1016 "parser.yy"
+  case 236:
+
+/* Line 1806 of yacc.c  */
+#line 1042 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( (yyvsp[(3) - (3)].constant) ) ); }
     break;
 
-  case 236:
-
-/* Line 1806 of yacc.c  */
-#line 1021 "parser.yy"
+  case 237:
+
+/* Line 1806 of yacc.c  */
+#line 1047 "parser.yy"
     {
 			(yyval.label) = new LabelNode(); (yyval.label)->labels.push_back( *(yyvsp[(1) - (1)].tok) );
@@ -6231,8 +6346,8 @@
     break;
 
-  case 237:
-
-/* Line 1806 of yacc.c  */
-#line 1026 "parser.yy"
+  case 238:
+
+/* Line 1806 of yacc.c  */
+#line 1052 "parser.yy"
     {
 			(yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->labels.push_back( *(yyvsp[(3) - (3)].tok) );
@@ -6241,50 +6356,50 @@
     break;
 
-  case 238:
-
-/* Line 1806 of yacc.c  */
-#line 1036 "parser.yy"
+  case 239:
+
+/* Line 1806 of yacc.c  */
+#line 1062 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 241:
-
-/* Line 1806 of yacc.c  */
-#line 1043 "parser.yy"
+  case 242:
+
+/* Line 1806 of yacc.c  */
+#line 1069 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 242:
-
-/* Line 1806 of yacc.c  */
-#line 1048 "parser.yy"
+  case 243:
+
+/* Line 1806 of yacc.c  */
+#line 1074 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 245:
-
-/* Line 1806 of yacc.c  */
-#line 1055 "parser.yy"
+  case 246:
+
+/* Line 1806 of yacc.c  */
+#line 1081 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 250:
-
-/* Line 1806 of yacc.c  */
-#line 1069 "parser.yy"
+  case 251:
+
+/* Line 1806 of yacc.c  */
+#line 1095 "parser.yy"
     {}
     break;
 
-  case 251:
-
-/* Line 1806 of yacc.c  */
-#line 1070 "parser.yy"
+  case 252:
+
+/* Line 1806 of yacc.c  */
+#line 1096 "parser.yy"
     {}
     break;
 
-  case 259:
-
-/* Line 1806 of yacc.c  */
-#line 1099 "parser.yy"
+  case 260:
+
+/* Line 1806 of yacc.c  */
+#line 1125 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6293,8 +6408,8 @@
     break;
 
-  case 260:
-
-/* Line 1806 of yacc.c  */
-#line 1106 "parser.yy"
+  case 261:
+
+/* Line 1806 of yacc.c  */
+#line 1132 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6303,8 +6418,8 @@
     break;
 
-  case 261:
-
-/* Line 1806 of yacc.c  */
-#line 1111 "parser.yy"
+  case 262:
+
+/* Line 1806 of yacc.c  */
+#line 1137 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6313,38 +6428,38 @@
     break;
 
-  case 262:
-
-/* Line 1806 of yacc.c  */
-#line 1121 "parser.yy"
+  case 263:
+
+/* Line 1806 of yacc.c  */
+#line 1147 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
-			(yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) )->addAsmName( (yyvsp[(3) - (3)].constant) );
+			(yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) )->addAsmName( (yyvsp[(3) - (3)].decl) );
 		}
     break;
 
-  case 263:
-
-/* Line 1806 of yacc.c  */
-#line 1126 "parser.yy"
+  case 264:
+
+/* Line 1806 of yacc.c  */
+#line 1152 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
-			(yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) )->addAsmName( (yyvsp[(3) - (3)].constant) );
+			(yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) )->addAsmName( (yyvsp[(3) - (3)].decl) );
 		}
     break;
 
-  case 264:
-
-/* Line 1806 of yacc.c  */
-#line 1131 "parser.yy"
+  case 265:
+
+/* Line 1806 of yacc.c  */
+#line 1157 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
-			(yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(1) - (4)].decl) )->addName( (yyvsp[(3) - (4)].tok) )->addAsmName( (yyvsp[(4) - (4)].constant) );
+			(yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(1) - (4)].decl) )->addName( (yyvsp[(3) - (4)].tok) )->addAsmName( (yyvsp[(4) - (4)].decl) );
 		}
     break;
 
-  case 265:
-
-/* Line 1806 of yacc.c  */
-#line 1139 "parser.yy"
+  case 266:
+
+/* Line 1806 of yacc.c  */
+#line 1165 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6353,8 +6468,8 @@
     break;
 
-  case 266:
-
-/* Line 1806 of yacc.c  */
-#line 1144 "parser.yy"
+  case 267:
+
+/* Line 1806 of yacc.c  */
+#line 1170 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6363,8 +6478,8 @@
     break;
 
-  case 267:
-
-/* Line 1806 of yacc.c  */
-#line 1149 "parser.yy"
+  case 268:
+
+/* Line 1806 of yacc.c  */
+#line 1175 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6373,8 +6488,8 @@
     break;
 
-  case 268:
-
-/* Line 1806 of yacc.c  */
-#line 1154 "parser.yy"
+  case 269:
+
+/* Line 1806 of yacc.c  */
+#line 1180 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6383,8 +6498,8 @@
     break;
 
-  case 269:
-
-/* Line 1806 of yacc.c  */
-#line 1159 "parser.yy"
+  case 270:
+
+/* Line 1806 of yacc.c  */
+#line 1185 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6393,8 +6508,8 @@
     break;
 
-  case 270:
-
-/* Line 1806 of yacc.c  */
-#line 1190 "parser.yy"
+  case 271:
+
+/* Line 1806 of yacc.c  */
+#line 1216 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6402,8 +6517,8 @@
     break;
 
-  case 271:
-
-/* Line 1806 of yacc.c  */
-#line 1194 "parser.yy"
+  case 272:
+
+/* Line 1806 of yacc.c  */
+#line 1220 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6411,22 +6526,22 @@
     break;
 
-  case 272:
-
-/* Line 1806 of yacc.c  */
-#line 1201 "parser.yy"
+  case 273:
+
+/* Line 1806 of yacc.c  */
+#line 1227 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 273:
-
-/* Line 1806 of yacc.c  */
-#line 1205 "parser.yy"
+  case 274:
+
+/* Line 1806 of yacc.c  */
+#line 1231 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
 
-  case 274:
-
-/* Line 1806 of yacc.c  */
-#line 1210 "parser.yy"
+  case 275:
+
+/* Line 1806 of yacc.c  */
+#line 1236 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6435,8 +6550,8 @@
     break;
 
-  case 275:
-
-/* Line 1806 of yacc.c  */
-#line 1215 "parser.yy"
+  case 276:
+
+/* Line 1806 of yacc.c  */
+#line 1241 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6445,8 +6560,8 @@
     break;
 
-  case 276:
-
-/* Line 1806 of yacc.c  */
-#line 1220 "parser.yy"
+  case 277:
+
+/* Line 1806 of yacc.c  */
+#line 1246 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6455,8 +6570,8 @@
     break;
 
-  case 277:
-
-/* Line 1806 of yacc.c  */
-#line 1231 "parser.yy"
+  case 278:
+
+/* Line 1806 of yacc.c  */
+#line 1257 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6465,8 +6580,8 @@
     break;
 
-  case 278:
-
-/* Line 1806 of yacc.c  */
-#line 1236 "parser.yy"
+  case 279:
+
+/* Line 1806 of yacc.c  */
+#line 1262 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6475,8 +6590,8 @@
     break;
 
-  case 279:
-
-/* Line 1806 of yacc.c  */
-#line 1241 "parser.yy"
+  case 280:
+
+/* Line 1806 of yacc.c  */
+#line 1267 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6485,8 +6600,8 @@
     break;
 
-  case 280:
-
-/* Line 1806 of yacc.c  */
-#line 1246 "parser.yy"
+  case 281:
+
+/* Line 1806 of yacc.c  */
+#line 1272 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6495,8 +6610,8 @@
     break;
 
-  case 281:
-
-/* Line 1806 of yacc.c  */
-#line 1251 "parser.yy"
+  case 282:
+
+/* Line 1806 of yacc.c  */
+#line 1277 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6505,97 +6620,106 @@
     break;
 
-  case 282:
-
-/* Line 1806 of yacc.c  */
-#line 1260 "parser.yy"
+  case 283:
+
+/* Line 1806 of yacc.c  */
+#line 1286 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
-			(yyval.decl) = DeclarationNode::newName( 0 ); // XXX
+			(yyval.decl) = DeclarationNode::newName( 0 );			// unimplemented
 		}
     break;
 
-  case 283:
-
-/* Line 1806 of yacc.c  */
-#line 1265 "parser.yy"
+  case 284:
+
+/* Line 1806 of yacc.c  */
+#line 1291 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
-			(yyval.decl) = DeclarationNode::newName( 0 ); // XXX
+			(yyval.decl) = DeclarationNode::newName( 0 );			// unimplemented
 		}
     break;
 
-  case 288:
-
-/* Line 1806 of yacc.c  */
-#line 1282 "parser.yy"
+  case 285:
+
+/* Line 1806 of yacc.c  */
+#line 1321 "parser.yy"
+    {
+			(yyval.decl) = distAttr( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].decl) );
+		}
+    break;
+
+  case 289:
+
+/* Line 1806 of yacc.c  */
+#line 1333 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			(yyval.decl) = ( (yyvsp[(2) - (4)].decl)->addType( (yyvsp[(1) - (4)].decl) ))->addAsmName( (yyvsp[(3) - (4)].constant) )->addInitializer( (yyvsp[(4) - (4)].in) );
+			(yyval.decl) = (yyvsp[(1) - (3)].decl)->addAsmName( (yyvsp[(2) - (3)].decl) )->addInitializer( (yyvsp[(3) - (3)].in) );
 		}
     break;
 
-  case 289:
-
-/* Line 1806 of yacc.c  */
-#line 1287 "parser.yy"
+  case 290:
+
+/* Line 1806 of yacc.c  */
+#line 1338 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			(yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(1) - (6)].decl)->cloneBaseType( (yyvsp[(4) - (6)].decl)->addAsmName( (yyvsp[(5) - (6)].constant) )->addInitializer( (yyvsp[(6) - (6)].in) ) ) );
+			(yyval.decl) = (yyvsp[(1) - (6)].decl)->appendList( (yyvsp[(4) - (6)].decl)->addQualifiers( (yyvsp[(3) - (6)].decl) )->addAsmName( (yyvsp[(5) - (6)].decl) )->addInitializer( (yyvsp[(6) - (6)].in) ) );
 		}
     break;
 
-  case 298:
-
-/* Line 1806 of yacc.c  */
-#line 1309 "parser.yy"
+  case 299:
+
+/* Line 1806 of yacc.c  */
+#line 1360 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 301:
-
-/* Line 1806 of yacc.c  */
-#line 1321 "parser.yy"
+  case 302:
+
+/* Line 1806 of yacc.c  */
+#line 1372 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 304:
-
-/* Line 1806 of yacc.c  */
-#line 1331 "parser.yy"
+  case 305:
+
+/* Line 1806 of yacc.c  */
+#line 1382 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
 
-  case 305:
-
-/* Line 1806 of yacc.c  */
-#line 1333 "parser.yy"
+  case 306:
+
+/* Line 1806 of yacc.c  */
+#line 1384 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
 
-  case 306:
-
-/* Line 1806 of yacc.c  */
-#line 1335 "parser.yy"
+  case 307:
+
+/* Line 1806 of yacc.c  */
+#line 1386 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
 
-  case 307:
-
-/* Line 1806 of yacc.c  */
-#line 1337 "parser.yy"
+  case 308:
+
+/* Line 1806 of yacc.c  */
+#line 1388 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
 
-  case 308:
-
-/* Line 1806 of yacc.c  */
-#line 1339 "parser.yy"
+  case 309:
+
+/* Line 1806 of yacc.c  */
+#line 1390 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
 
-  case 309:
-
-/* Line 1806 of yacc.c  */
-#line 1341 "parser.yy"
+  case 310:
+
+/* Line 1806 of yacc.c  */
+#line 1392 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6603,8 +6727,8 @@
     break;
 
-  case 310:
-
-/* Line 1806 of yacc.c  */
-#line 1345 "parser.yy"
+  case 311:
+
+/* Line 1806 of yacc.c  */
+#line 1396 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6613,376 +6737,369 @@
     break;
 
-  case 312:
-
-/* Line 1806 of yacc.c  */
-#line 1354 "parser.yy"
+  case 313:
+
+/* Line 1806 of yacc.c  */
+#line 1405 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 313:
-
-/* Line 1806 of yacc.c  */
-#line 1356 "parser.yy"
+  case 314:
+
+/* Line 1806 of yacc.c  */
+#line 1407 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 315:
-
-/* Line 1806 of yacc.c  */
-#line 1367 "parser.yy"
+  case 316:
+
+/* Line 1806 of yacc.c  */
+#line 1418 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 316:
-
-/* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
+  case 317:
+
+/* Line 1806 of yacc.c  */
+#line 1423 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
 
-  case 317:
-
-/* Line 1806 of yacc.c  */
-#line 1374 "parser.yy"
+  case 318:
+
+/* Line 1806 of yacc.c  */
+#line 1425 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
 
-  case 318:
-
-/* Line 1806 of yacc.c  */
-#line 1376 "parser.yy"
+  case 319:
+
+/* Line 1806 of yacc.c  */
+#line 1427 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
 
-  case 319:
-
-/* Line 1806 of yacc.c  */
-#line 1378 "parser.yy"
+  case 320:
+
+/* Line 1806 of yacc.c  */
+#line 1429 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
 
-  case 320:
-
-/* Line 1806 of yacc.c  */
-#line 1381 "parser.yy"
+  case 321:
+
+/* Line 1806 of yacc.c  */
+#line 1432 "parser.yy"
     { (yyval.decl) = new DeclarationNode; (yyval.decl)->isInline = true; }
     break;
 
-  case 321:
-
-/* Line 1806 of yacc.c  */
-#line 1383 "parser.yy"
+  case 322:
+
+/* Line 1806 of yacc.c  */
+#line 1434 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
 
-  case 322:
-
-/* Line 1806 of yacc.c  */
-#line 1386 "parser.yy"
+  case 323:
+
+/* Line 1806 of yacc.c  */
+#line 1437 "parser.yy"
     { (yyval.decl) = new DeclarationNode; (yyval.decl)->isNoreturn = true; }
     break;
 
-  case 323:
-
-/* Line 1806 of yacc.c  */
-#line 1388 "parser.yy"
+  case 324:
+
+/* Line 1806 of yacc.c  */
+#line 1439 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
 
-  case 324:
-
-/* Line 1806 of yacc.c  */
-#line 1393 "parser.yy"
+  case 325:
+
+/* Line 1806 of yacc.c  */
+#line 1444 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
 
-  case 325:
-
-/* Line 1806 of yacc.c  */
-#line 1395 "parser.yy"
+  case 326:
+
+/* Line 1806 of yacc.c  */
+#line 1446 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
 
-  case 326:
-
-/* Line 1806 of yacc.c  */
-#line 1397 "parser.yy"
+  case 327:
+
+/* Line 1806 of yacc.c  */
+#line 1448 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
 
-  case 327:
-
-/* Line 1806 of yacc.c  */
-#line 1399 "parser.yy"
+  case 328:
+
+/* Line 1806 of yacc.c  */
+#line 1450 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
 
-  case 328:
-
-/* Line 1806 of yacc.c  */
-#line 1401 "parser.yy"
+  case 329:
+
+/* Line 1806 of yacc.c  */
+#line 1452 "parser.yy"
     { (yyval.decl) = DeclarationNode::newLength( DeclarationNode::Long ); }
     break;
 
-  case 329:
-
-/* Line 1806 of yacc.c  */
-#line 1403 "parser.yy"
+  case 330:
+
+/* Line 1806 of yacc.c  */
+#line 1454 "parser.yy"
     { (yyval.decl) = DeclarationNode::newLength( DeclarationNode::Short ); }
     break;
 
-  case 330:
-
-/* Line 1806 of yacc.c  */
-#line 1405 "parser.yy"
+  case 331:
+
+/* Line 1806 of yacc.c  */
+#line 1456 "parser.yy"
     { (yyval.decl) = DeclarationNode::newSignedNess( DeclarationNode::Signed ); }
     break;
 
-  case 331:
-
-/* Line 1806 of yacc.c  */
-#line 1407 "parser.yy"
+  case 332:
+
+/* Line 1806 of yacc.c  */
+#line 1458 "parser.yy"
     { (yyval.decl) = DeclarationNode::newSignedNess( DeclarationNode::Unsigned ); }
     break;
 
-  case 332:
-
-/* Line 1806 of yacc.c  */
-#line 1409 "parser.yy"
+  case 333:
+
+/* Line 1806 of yacc.c  */
+#line 1460 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
 
-  case 333:
-
-/* Line 1806 of yacc.c  */
-#line 1411 "parser.yy"
+  case 334:
+
+/* Line 1806 of yacc.c  */
+#line 1462 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
 
-  case 334:
-
-/* Line 1806 of yacc.c  */
-#line 1413 "parser.yy"
+  case 335:
+
+/* Line 1806 of yacc.c  */
+#line 1464 "parser.yy"
     { (yyval.decl) = DeclarationNode::newComplexType( DeclarationNode::Complex ); }
     break;
 
-  case 335:
-
-/* Line 1806 of yacc.c  */
-#line 1415 "parser.yy"
+  case 336:
+
+/* Line 1806 of yacc.c  */
+#line 1466 "parser.yy"
     { (yyval.decl) = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); }
     break;
 
-  case 336:
-
-/* Line 1806 of yacc.c  */
-#line 1417 "parser.yy"
+  case 337:
+
+/* Line 1806 of yacc.c  */
+#line 1468 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
     break;
 
-  case 337:
-
-/* Line 1806 of yacc.c  */
-#line 1419 "parser.yy"
+  case 338:
+
+/* Line 1806 of yacc.c  */
+#line 1470 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Zero ); }
     break;
 
-  case 338:
-
-/* Line 1806 of yacc.c  */
-#line 1421 "parser.yy"
+  case 339:
+
+/* Line 1806 of yacc.c  */
+#line 1472 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::One ); }
     break;
 
-  case 340:
-
-/* Line 1806 of yacc.c  */
-#line 1428 "parser.yy"
+  case 341:
+
+/* Line 1806 of yacc.c  */
+#line 1479 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 341:
-
-/* Line 1806 of yacc.c  */
-#line 1430 "parser.yy"
+  case 342:
+
+/* Line 1806 of yacc.c  */
+#line 1481 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 342:
-
-/* Line 1806 of yacc.c  */
-#line 1432 "parser.yy"
+  case 343:
+
+/* Line 1806 of yacc.c  */
+#line 1483 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 343:
-
-/* Line 1806 of yacc.c  */
-#line 1434 "parser.yy"
+  case 344:
+
+/* Line 1806 of yacc.c  */
+#line 1485 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 345:
-
-/* Line 1806 of yacc.c  */
-#line 1440 "parser.yy"
+  case 346:
+
+/* Line 1806 of yacc.c  */
+#line 1491 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 347:
-
-/* Line 1806 of yacc.c  */
-#line 1447 "parser.yy"
+  case 348:
+
+/* Line 1806 of yacc.c  */
+#line 1498 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 348:
-
-/* Line 1806 of yacc.c  */
-#line 1449 "parser.yy"
+  case 349:
+
+/* Line 1806 of yacc.c  */
+#line 1500 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 349:
-
-/* Line 1806 of yacc.c  */
-#line 1451 "parser.yy"
+  case 350:
+
+/* Line 1806 of yacc.c  */
+#line 1502 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 350:
-
-/* Line 1806 of yacc.c  */
-#line 1456 "parser.yy"
+  case 351:
+
+/* Line 1806 of yacc.c  */
+#line 1507 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
 
-  case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1458 "parser.yy"
+  case 352:
+
+/* Line 1806 of yacc.c  */
+#line 1509 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 352:
-
-/* Line 1806 of yacc.c  */
-#line 1460 "parser.yy"
+  case 353:
+
+/* Line 1806 of yacc.c  */
+#line 1511 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 353:
-
-/* Line 1806 of yacc.c  */
-#line 1462 "parser.yy"
+  case 354:
+
+/* Line 1806 of yacc.c  */
+#line 1513 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 355:
-
-/* Line 1806 of yacc.c  */
-#line 1468 "parser.yy"
+  case 356:
+
+/* Line 1806 of yacc.c  */
+#line 1519 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 356:
-
-/* Line 1806 of yacc.c  */
-#line 1470 "parser.yy"
+  case 357:
+
+/* Line 1806 of yacc.c  */
+#line 1521 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 357:
-
-/* Line 1806 of yacc.c  */
-#line 1472 "parser.yy"
+  case 358:
+
+/* Line 1806 of yacc.c  */
+#line 1523 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 359:
-
-/* Line 1806 of yacc.c  */
-#line 1478 "parser.yy"
+  case 360:
+
+/* Line 1806 of yacc.c  */
+#line 1529 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 360:
-
-/* Line 1806 of yacc.c  */
-#line 1480 "parser.yy"
+  case 361:
+
+/* Line 1806 of yacc.c  */
+#line 1531 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 362:
-
-/* Line 1806 of yacc.c  */
-#line 1486 "parser.yy"
+  case 363:
+
+/* Line 1806 of yacc.c  */
+#line 1537 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 363:
-
-/* Line 1806 of yacc.c  */
-#line 1488 "parser.yy"
+  case 364:
+
+/* Line 1806 of yacc.c  */
+#line 1539 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 364:
-
-/* Line 1806 of yacc.c  */
-#line 1490 "parser.yy"
+  case 365:
+
+/* Line 1806 of yacc.c  */
+#line 1541 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 365:
-
-/* Line 1806 of yacc.c  */
-#line 1495 "parser.yy"
+  case 366:
+
+/* Line 1806 of yacc.c  */
+#line 1546 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 366:
-
-/* Line 1806 of yacc.c  */
-#line 1497 "parser.yy"
+  case 367:
+
+/* Line 1806 of yacc.c  */
+#line 1548 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 367:
-
-/* Line 1806 of yacc.c  */
-#line 1499 "parser.yy"
+  case 368:
+
+/* Line 1806 of yacc.c  */
+#line 1550 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 370:
-
-/* Line 1806 of yacc.c  */
-#line 1509 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), nullptr, nullptr, (yyvsp[(3) - (4)].decl), true ); }
-    break;
-
   case 371:
 
 /* Line 1806 of yacc.c  */
-#line 1511 "parser.yy"
-    {
-			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
-			(yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), nullptr, nullptr, false );
+#line 1560 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), nullptr, nullptr, (yyvsp[(4) - (5)].decl), true )->addQualifiers( (yyvsp[(2) - (5)].decl) ); }
+    break;
+
+  case 372:
+
+/* Line 1806 of yacc.c  */
+#line 1562 "parser.yy"
+    {
+			typedefTable.makeTypedef( *(yyvsp[(3) - (3)].tok) );
+			(yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (3)].aggKey), (yyvsp[(3) - (3)].tok), nullptr, nullptr, false )->addQualifiers( (yyvsp[(2) - (3)].decl) );
 		}
     break;
 
-  case 372:
-
-/* Line 1806 of yacc.c  */
-#line 1516 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
-    break;
-
   case 373:
 
 /* Line 1806 of yacc.c  */
-#line 1518 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (6)].aggKey), (yyvsp[(2) - (6)].tok), nullptr, (yyvsp[(5) - (6)].decl), true ); }
+#line 1567 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(3) - (3)].tok) ); }
     break;
 
@@ -6990,6 +7107,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1520 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), nullptr, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl), false ); }
+#line 1569 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), (yyvsp[(3) - (7)].tok), nullptr, (yyvsp[(6) - (7)].decl), true )->addQualifiers( (yyvsp[(2) - (7)].decl) ); }
     break;
 
@@ -6997,6 +7114,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1522 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
+#line 1571 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (8)].aggKey), nullptr, (yyvsp[(4) - (8)].en), (yyvsp[(7) - (8)].decl), false )->addQualifiers( (yyvsp[(2) - (8)].decl) ); }
     break;
 
@@ -7004,128 +7121,138 @@
 
 /* Line 1806 of yacc.c  */
-#line 1527 "parser.yy"
+#line 1573 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) ); }
+    break;
+
+  case 377:
+
+/* Line 1806 of yacc.c  */
+#line 1578 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
 
-  case 377:
-
-/* Line 1806 of yacc.c  */
-#line 1529 "parser.yy"
+  case 378:
+
+/* Line 1806 of yacc.c  */
+#line 1580 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
 
-  case 378:
-
-/* Line 1806 of yacc.c  */
-#line 1534 "parser.yy"
+  case 379:
+
+/* Line 1806 of yacc.c  */
+#line 1585 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 379:
-
-/* Line 1806 of yacc.c  */
-#line 1536 "parser.yy"
+  case 380:
+
+/* Line 1806 of yacc.c  */
+#line 1587 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 381:
-
-/* Line 1806 of yacc.c  */
-#line 1542 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl)->set_extension( true ); }
-    break;
-
-  case 383:
-
-/* Line 1806 of yacc.c  */
-#line 1545 "parser.yy"
-    {	// mark all fields in list
-			for ( DeclarationNode *iter = (yyvsp[(2) - (3)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
-				iter->set_extension( true );
+  case 382:
+
+/* Line 1806 of yacc.c  */
+#line 1593 "parser.yy"
+    {
+			distExt( (yyvsp[(2) - (3)].decl) );								// mark all fields in list
 			(yyval.decl) = (yyvsp[(2) - (3)].decl);
 		}
     break;
 
-  case 385:
-
-/* Line 1806 of yacc.c  */
-#line 1555 "parser.yy"
+  case 383:
+
+/* Line 1806 of yacc.c  */
+#line 1598 "parser.yy"
+    {
+			(yyval.decl) = distAttr( (yyvsp[(1) - (3)].decl), (yyvsp[(2) - (3)].decl) ); }
+    break;
+
+  case 384:
+
+/* Line 1806 of yacc.c  */
+#line 1601 "parser.yy"
+    {
+			distExt( (yyvsp[(3) - (4)].decl) );								// mark all fields in list
+			(yyval.decl) = distAttr( (yyvsp[(2) - (4)].decl), (yyvsp[(3) - (4)].decl) );
+		}
+    break;
+
+  case 386:
+
+/* Line 1806 of yacc.c  */
+#line 1610 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
 
-  case 386:
-
-/* Line 1806 of yacc.c  */
-#line 1557 "parser.yy"
+  case 387:
+
+/* Line 1806 of yacc.c  */
+#line 1612 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
-  case 387:
-
-/* Line 1806 of yacc.c  */
-#line 1559 "parser.yy"
+  case 388:
+
+/* Line 1806 of yacc.c  */
+#line 1614 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
 
-  case 388:
-
-/* Line 1806 of yacc.c  */
-#line 1564 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 389:
-
-/* Line 1806 of yacc.c  */
-#line 1566 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
-    break;
-
   case 390:
 
 /* Line 1806 of yacc.c  */
-#line 1571 "parser.yy"
+#line 1620 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(4) - (4)].decl)->addQualifiers( (yyvsp[(3) - (4)].decl) ) ); }
+    break;
+
+  case 391:
+
+/* Line 1806 of yacc.c  */
+#line 1625 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
 
-  case 391:
-
-/* Line 1806 of yacc.c  */
-#line 1573 "parser.yy"
+  case 392:
+
+/* Line 1806 of yacc.c  */
+#line 1627 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
     break;
 
-  case 392:
-
-/* Line 1806 of yacc.c  */
-#line 1576 "parser.yy"
+  case 393:
+
+/* Line 1806 of yacc.c  */
+#line 1630 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 393:
-
-/* Line 1806 of yacc.c  */
-#line 1579 "parser.yy"
+  case 394:
+
+/* Line 1806 of yacc.c  */
+#line 1633 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 395:
-
-/* Line 1806 of yacc.c  */
-#line 1585 "parser.yy"
+  case 396:
+
+/* Line 1806 of yacc.c  */
+#line 1639 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
 
-  case 396:
-
-/* Line 1806 of yacc.c  */
-#line 1587 "parser.yy"
+  case 397:
+
+/* Line 1806 of yacc.c  */
+#line 1641 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
-  case 397:
-
-/* Line 1806 of yacc.c  */
-#line 1592 "parser.yy"
+  case 398:
+
+/* Line 1806 of yacc.c  */
+#line 1646 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7134,6 +7261,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1601 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( nullptr, (yyvsp[(3) - (5)].decl) ); }
+#line 1651 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( nullptr, (yyvsp[(4) - (6)].decl) )->addQualifiers( (yyvsp[(2) - (6)].decl) ); }
     break;
 
@@ -7141,8 +7268,8 @@
 
 /* Line 1806 of yacc.c  */
-#line 1603 "parser.yy"
-    {
-			typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) );
-			(yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 );
+#line 1653 "parser.yy"
+    {
+			typedefTable.makeTypedef( *(yyvsp[(3) - (3)].tok) );
+			(yyval.decl) = DeclarationNode::newEnum( (yyvsp[(3) - (3)].tok), 0 )->addQualifiers( (yyvsp[(2) - (3)].decl) );
 		}
     break;
@@ -7151,6 +7278,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1608 "parser.yy"
-    { typedefTable.makeTypedef( *(yyvsp[(2) - (2)].tok) ); }
+#line 1658 "parser.yy"
+    { typedefTable.makeTypedef( *(yyvsp[(3) - (3)].tok) ); }
     break;
 
@@ -7158,6 +7285,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1610 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (7)].tok), (yyvsp[(5) - (7)].decl) ); }
+#line 1660 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(3) - (8)].tok), (yyvsp[(6) - (8)].decl) )->addQualifiers( (yyvsp[(2) - (8)].decl) ); }
     break;
 
@@ -7165,5 +7292,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1615 "parser.yy"
+#line 1665 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -7172,5 +7299,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1617 "parser.yy"
+#line 1667 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
@@ -7179,5 +7306,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1622 "parser.yy"
+#line 1672 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
@@ -7186,5 +7313,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1624 "parser.yy"
+#line 1674 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -7193,5 +7320,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1631 "parser.yy"
+#line 1681 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
@@ -7200,5 +7327,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1639 "parser.yy"
+#line 1689 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7207,5 +7334,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1641 "parser.yy"
+#line 1691 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7214,5 +7341,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1643 "parser.yy"
+#line 1693 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7221,5 +7348,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1651 "parser.yy"
+#line 1701 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7228,5 +7355,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1653 "parser.yy"
+#line 1703 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7235,5 +7362,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1655 "parser.yy"
+#line 1705 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     break;
@@ -7242,5 +7369,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1661 "parser.yy"
+#line 1711 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7249,5 +7376,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1666 "parser.yy"
+#line 1716 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
@@ -7256,5 +7383,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1673 "parser.yy"
+#line 1723 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
@@ -7263,5 +7390,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1680 "parser.yy"
+#line 1730 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7270,5 +7397,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1682 "parser.yy"
+#line 1732 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
@@ -7277,5 +7404,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1691 "parser.yy"
+#line 1741 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7284,5 +7411,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1694 "parser.yy"
+#line 1744 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -7291,5 +7418,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1696 "parser.yy"
+#line 1746 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
@@ -7298,5 +7425,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1706 "parser.yy"
+#line 1756 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7305,5 +7432,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1712 "parser.yy"
+#line 1762 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7315,5 +7442,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1717 "parser.yy"
+#line 1767 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7325,5 +7452,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1726 "parser.yy"
+#line 1776 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -7332,5 +7459,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1735 "parser.yy"
+#line 1785 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -7339,5 +7466,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1737 "parser.yy"
+#line 1787 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
@@ -7346,13 +7473,20 @@
 
 /* Line 1806 of yacc.c  */
-#line 1762 "parser.yy"
+#line 1812 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
+  case 458:
+
+/* Line 1806 of yacc.c  */
+#line 1822 "parser.yy"
+    { (yyval.in) = nullptr; }
+    break;
+
   case 459:
 
 /* Line 1806 of yacc.c  */
-#line 1770 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
+#line 1824 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
 
@@ -7360,41 +7494,41 @@
 
 /* Line 1806 of yacc.c  */
-#line 1775 "parser.yy"
+#line 1826 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
+    break;
+
+  case 461:
+
+/* Line 1806 of yacc.c  */
+#line 1830 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
+    break;
+
+  case 462:
+
+/* Line 1806 of yacc.c  */
+#line 1831 "parser.yy"
+    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
+    break;
+
+  case 463:
+
+/* Line 1806 of yacc.c  */
+#line 1836 "parser.yy"
     { (yyval.in) = nullptr; }
     break;
 
-  case 461:
-
-/* Line 1806 of yacc.c  */
-#line 1777 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in); }
-    break;
-
-  case 462:
-
-/* Line 1806 of yacc.c  */
-#line 1779 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_maybeConstructed( false ); }
-    break;
-
-  case 463:
-
-/* Line 1806 of yacc.c  */
-#line 1783 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
-    break;
-
-  case 464:
-
-/* Line 1806 of yacc.c  */
-#line 1784 "parser.yy"
-    { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
-    break;
-
   case 465:
 
 /* Line 1806 of yacc.c  */
-#line 1789 "parser.yy"
-    { (yyval.in) = nullptr; }
+#line 1838 "parser.yy"
+    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
+    break;
+
+  case 466:
+
+/* Line 1806 of yacc.c  */
+#line 1839 "parser.yy"
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
     break;
 
@@ -7402,13 +7536,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1791 "parser.yy"
-    { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
-    break;
-
-  case 468:
-
-/* Line 1806 of yacc.c  */
-#line 1792 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_last( (yyvsp[(3) - (3)].in) ) ); }
+#line 1841 "parser.yy"
+    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
 
@@ -7416,6 +7543,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1794 "parser.yy"
-    { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_last( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
+#line 1857 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
     break;
 
@@ -7423,6 +7550,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1810 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(1) - (2)].tok) ) ); }
+#line 1863 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
+    break;
+
+  case 472:
+
+/* Line 1806 of yacc.c  */
+#line 1869 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
     break;
 
@@ -7430,6 +7564,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1816 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_last( (yyvsp[(2) - (2)].en) ) ); }
+#line 1872 "parser.yy"
+    { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
 
@@ -7437,6 +7571,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1822 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_varref( (yyvsp[(2) - (2)].tok) ) ); }
+#line 1874 "parser.yy"
+    { (yyval.en) = (yyvsp[(3) - (5)].en); }
     break;
 
@@ -7444,6 +7578,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1825 "parser.yy"
-    { (yyval.en) = (yyvsp[(3) - (5)].en); }
+#line 1876 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
     break;
 
@@ -7451,13 +7585,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
-    { (yyval.en) = (yyvsp[(3) - (5)].en); }
-    break;
-
-  case 477:
-
-/* Line 1806 of yacc.c  */
-#line 1829 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ) ); }
+#line 1878 "parser.yy"
+    { (yyval.en) = (yyvsp[(4) - (6)].en); }
     break;
 
@@ -7465,6 +7592,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1831 "parser.yy"
-    { (yyval.en) = (yyvsp[(4) - (6)].en); }
+#line 1902 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 479:
+
+/* Line 1806 of yacc.c  */
+#line 1904 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -7472,34 +7606,27 @@
 
 /* Line 1806 of yacc.c  */
-#line 1855 "parser.yy"
+#line 1906 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 482:
+
+/* Line 1806 of yacc.c  */
+#line 1912 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 481:
-
-/* Line 1806 of yacc.c  */
-#line 1857 "parser.yy"
+  case 483:
+
+/* Line 1806 of yacc.c  */
+#line 1914 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 482:
-
-/* Line 1806 of yacc.c  */
-#line 1859 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
   case 484:
 
 /* Line 1806 of yacc.c  */
-#line 1865 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 485:
-
-/* Line 1806 of yacc.c  */
-#line 1867 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+#line 1919 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
@@ -7507,6 +7634,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1872 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
+#line 1925 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 487:
+
+/* Line 1806 of yacc.c  */
+#line 1930 "parser.yy"
+    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
 
@@ -7514,13 +7648,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1878 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 489:
-
-/* Line 1806 of yacc.c  */
-#line 1883 "parser.yy"
-    { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
+#line 1932 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -7528,6 +7655,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1885 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
+#line 1938 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Otype; }
+    break;
+
+  case 491:
+
+/* Line 1806 of yacc.c  */
+#line 1940 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
 
@@ -7535,6 +7669,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1891 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Otype; }
+#line 1942 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
 
@@ -7542,6 +7676,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1893 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Dtype; }
+#line 1944 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Ttype; }
     break;
 
@@ -7549,6 +7683,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1895 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Ftype; }
+#line 1949 "parser.yy"
+    { (yyval.decl) = nullptr; }
     break;
 
@@ -7556,6 +7690,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1897 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Ttype; }
+#line 1951 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl) ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7563,19 +7697,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1902 "parser.yy"
-    { (yyval.decl) = nullptr; }
-    break;
-
-  case 497:
-
-/* Line 1806 of yacc.c  */
-#line 1904 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl) ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
-    break;
-
-  case 498:
-
-/* Line 1806 of yacc.c  */
-#line 1909 "parser.yy"
+#line 1956 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7584,16 +7704,23 @@
     break;
 
+  case 497:
+
+/* Line 1806 of yacc.c  */
+#line 1961 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
+    break;
+
+  case 498:
+
+/* Line 1806 of yacc.c  */
+#line 1963 "parser.yy"
+    { (yyval.decl) = nullptr; }
+    break;
+
   case 499:
 
 /* Line 1806 of yacc.c  */
-#line 1914 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
-    break;
-
-  case 500:
-
-/* Line 1806 of yacc.c  */
-#line 1916 "parser.yy"
-    { (yyval.decl) = nullptr; }
+#line 1968 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
     break;
 
@@ -7601,6 +7728,13 @@
 
 /* Line 1806 of yacc.c  */
-#line 1921 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
+#line 1971 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
+    break;
+
+  case 502:
+
+/* Line 1806 of yacc.c  */
+#line 1973 "parser.yy"
+    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
 
@@ -7608,6 +7742,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1924 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
+#line 1978 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
@@ -7615,6 +7749,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1926 "parser.yy"
-    { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
+#line 1980 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
 
@@ -7622,6 +7756,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1931 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
+#line 1982 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
@@ -7629,6 +7763,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1933 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
+#line 1987 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -7636,6 +7770,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 1935 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
+#line 1989 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -7643,19 +7777,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1940 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 509:
-
-/* Line 1806 of yacc.c  */
-#line 1942 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 510:
-
-/* Line 1806 of yacc.c  */
-#line 1947 "parser.yy"
+#line 1994 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7664,8 +7784,8 @@
     break;
 
-  case 511:
-
-/* Line 1806 of yacc.c  */
-#line 1952 "parser.yy"
+  case 509:
+
+/* Line 1806 of yacc.c  */
+#line 1999 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7674,8 +7794,8 @@
     break;
 
-  case 512:
-
-/* Line 1806 of yacc.c  */
-#line 1960 "parser.yy"
+  case 510:
+
+/* Line 1806 of yacc.c  */
+#line 2007 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7684,8 +7804,8 @@
     break;
 
-  case 513:
-
-/* Line 1806 of yacc.c  */
-#line 1965 "parser.yy"
+  case 511:
+
+/* Line 1806 of yacc.c  */
+#line 2012 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7694,8 +7814,8 @@
     break;
 
-  case 514:
-
-/* Line 1806 of yacc.c  */
-#line 1970 "parser.yy"
+  case 512:
+
+/* Line 1806 of yacc.c  */
+#line 2017 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7705,15 +7825,15 @@
     break;
 
-  case 516:
-
-/* Line 1806 of yacc.c  */
-#line 1980 "parser.yy"
+  case 514:
+
+/* Line 1806 of yacc.c  */
+#line 2027 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 519:
-
-/* Line 1806 of yacc.c  */
-#line 1990 "parser.yy"
+  case 517:
+
+/* Line 1806 of yacc.c  */
+#line 2037 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7722,8 +7842,8 @@
     break;
 
-  case 520:
-
-/* Line 1806 of yacc.c  */
-#line 1995 "parser.yy"
+  case 518:
+
+/* Line 1806 of yacc.c  */
+#line 2042 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7732,8 +7852,8 @@
     break;
 
-  case 521:
-
-/* Line 1806 of yacc.c  */
-#line 2000 "parser.yy"
+  case 519:
+
+/* Line 1806 of yacc.c  */
+#line 2047 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7742,8 +7862,8 @@
     break;
 
-  case 522:
-
-/* Line 1806 of yacc.c  */
-#line 2008 "parser.yy"
+  case 520:
+
+/* Line 1806 of yacc.c  */
+#line 2055 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7752,8 +7872,8 @@
     break;
 
-  case 523:
-
-/* Line 1806 of yacc.c  */
-#line 2013 "parser.yy"
+  case 521:
+
+/* Line 1806 of yacc.c  */
+#line 2060 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7762,43 +7882,43 @@
     break;
 
-  case 524:
-
-/* Line 1806 of yacc.c  */
-#line 2023 "parser.yy"
+  case 522:
+
+/* Line 1806 of yacc.c  */
+#line 2070 "parser.yy"
     {}
     break;
 
+  case 523:
+
+/* Line 1806 of yacc.c  */
+#line 2072 "parser.yy"
+    { parseTree = parseTree ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);	}
+    break;
+
   case 525:
 
 /* Line 1806 of yacc.c  */
-#line 2025 "parser.yy"
-    { parseTree = parseTree ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);	}
-    break;
-
-  case 527:
-
-/* Line 1806 of yacc.c  */
-#line 2031 "parser.yy"
+#line 2078 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
 
-  case 528:
-
-/* Line 1806 of yacc.c  */
-#line 2036 "parser.yy"
+  case 526:
+
+/* Line 1806 of yacc.c  */
+#line 2083 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 532:
-
-/* Line 1806 of yacc.c  */
-#line 2044 "parser.yy"
+  case 530:
+
+/* Line 1806 of yacc.c  */
+#line 2091 "parser.yy"
     {}
     break;
 
-  case 533:
-
-/* Line 1806 of yacc.c  */
-#line 2046 "parser.yy"
+  case 531:
+
+/* Line 1806 of yacc.c  */
+#line 2093 "parser.yy"
     {
 			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
@@ -7807,8 +7927,8 @@
     break;
 
-  case 534:
-
-/* Line 1806 of yacc.c  */
-#line 2051 "parser.yy"
+  case 532:
+
+/* Line 1806 of yacc.c  */
+#line 2098 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7818,19 +7938,18 @@
     break;
 
-  case 535:
-
-/* Line 1806 of yacc.c  */
-#line 2057 "parser.yy"
-    {	// mark all fields in list
-			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
-				iter->set_extension( true );
+  case 533:
+
+/* Line 1806 of yacc.c  */
+#line 2104 "parser.yy"
+    {
+			distExt( (yyvsp[(2) - (2)].decl) );								// mark all fields in list
 			(yyval.decl) = (yyvsp[(2) - (2)].decl);
 		}
     break;
 
-  case 537:
-
-/* Line 1806 of yacc.c  */
-#line 2072 "parser.yy"
+  case 535:
+
+/* Line 1806 of yacc.c  */
+#line 2118 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7840,8 +7959,8 @@
     break;
 
-  case 538:
-
-/* Line 1806 of yacc.c  */
-#line 2078 "parser.yy"
+  case 536:
+
+/* Line 1806 of yacc.c  */
+#line 2124 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7851,8 +7970,8 @@
     break;
 
-  case 539:
-
-/* Line 1806 of yacc.c  */
-#line 2087 "parser.yy"
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2133 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7862,8 +7981,8 @@
     break;
 
-  case 540:
-
-/* Line 1806 of yacc.c  */
-#line 2093 "parser.yy"
+  case 538:
+
+/* Line 1806 of yacc.c  */
+#line 2139 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7873,8 +7992,8 @@
     break;
 
-  case 541:
-
-/* Line 1806 of yacc.c  */
-#line 2099 "parser.yy"
+  case 539:
+
+/* Line 1806 of yacc.c  */
+#line 2145 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7884,8 +8003,8 @@
     break;
 
-  case 542:
-
-/* Line 1806 of yacc.c  */
-#line 2105 "parser.yy"
+  case 540:
+
+/* Line 1806 of yacc.c  */
+#line 2151 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7895,8 +8014,8 @@
     break;
 
-  case 543:
-
-/* Line 1806 of yacc.c  */
-#line 2111 "parser.yy"
+  case 541:
+
+/* Line 1806 of yacc.c  */
+#line 2157 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7906,8 +8025,8 @@
     break;
 
-  case 544:
-
-/* Line 1806 of yacc.c  */
-#line 2119 "parser.yy"
+  case 542:
+
+/* Line 1806 of yacc.c  */
+#line 2165 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7917,8 +8036,8 @@
     break;
 
-  case 545:
-
-/* Line 1806 of yacc.c  */
-#line 2125 "parser.yy"
+  case 543:
+
+/* Line 1806 of yacc.c  */
+#line 2171 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7928,8 +8047,8 @@
     break;
 
-  case 546:
-
-/* Line 1806 of yacc.c  */
-#line 2133 "parser.yy"
+  case 544:
+
+/* Line 1806 of yacc.c  */
+#line 2179 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7939,8 +8058,8 @@
     break;
 
-  case 547:
-
-/* Line 1806 of yacc.c  */
-#line 2139 "parser.yy"
+  case 545:
+
+/* Line 1806 of yacc.c  */
+#line 2185 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7950,9 +8069,27 @@
     break;
 
+  case 549:
+
+/* Line 1806 of yacc.c  */
+#line 2200 "parser.yy"
+    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+    break;
+
+  case 550:
+
+/* Line 1806 of yacc.c  */
+#line 2205 "parser.yy"
+    { (yyval.decl) = nullptr; }
+    break;
+
   case 551:
 
 /* Line 1806 of yacc.c  */
-#line 2154 "parser.yy"
-    { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
+#line 2207 "parser.yy"
+    {
+			DeclarationNode * name = new DeclarationNode();
+			name->asmName = (yyvsp[(3) - (5)].constant);
+			(yyval.decl) = name->addQualifiers( (yyvsp[(5) - (5)].decl) );
+		}
     break;
 
@@ -7960,34 +8097,34 @@
 
 /* Line 1806 of yacc.c  */
-#line 2159 "parser.yy"
-    { (yyval.constant) = nullptr; }
-    break;
-
-  case 553:
-
-/* Line 1806 of yacc.c  */
-#line 2161 "parser.yy"
-    { (yyval.constant) = (yyvsp[(3) - (5)].constant); }
-    break;
-
-  case 554:
-
-/* Line 1806 of yacc.c  */
-#line 2166 "parser.yy"
+#line 2216 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 557:
-
-/* Line 1806 of yacc.c  */
-#line 2173 "parser.yy"
+  case 555:
+
+/* Line 1806 of yacc.c  */
+#line 2223 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
+  case 556:
+
+/* Line 1806 of yacc.c  */
+#line 2228 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (6)].decl); }
+    break;
+
   case 558:
 
 /* Line 1806 of yacc.c  */
-#line 2178 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (6)].decl); }
+#line 2234 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 559:
+
+/* Line 1806 of yacc.c  */
+#line 2239 "parser.yy"
+    { (yyval.decl) = nullptr; }
     break;
 
@@ -7995,6 +8132,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2184 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
+#line 2241 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newAttribute( (yyvsp[(1) - (1)].tok) ); }
     break;
 
@@ -8002,54 +8139,40 @@
 
 /* Line 1806 of yacc.c  */
-#line 2189 "parser.yy"
-    { (yyval.decl) = nullptr; }
-    break;
-
-  case 562:
-
-/* Line 1806 of yacc.c  */
-#line 2191 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newAttribute( (yyvsp[(1) - (1)].tok) ); }
-    break;
-
-  case 563:
-
-/* Line 1806 of yacc.c  */
-#line 2193 "parser.yy"
+#line 2243 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttribute( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 567:
-
-/* Line 1806 of yacc.c  */
-#line 2201 "parser.yy"
+  case 565:
+
+/* Line 1806 of yacc.c  */
+#line 2251 "parser.yy"
     { (yyval.tok) = Token{ new string( "__const__" ) }; }
     break;
 
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2286 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 568:
 
 /* Line 1806 of yacc.c  */
-#line 2236 "parser.yy"
+#line 2289 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
+  case 569:
+
+/* Line 1806 of yacc.c  */
+#line 2291 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 570:
 
 /* Line 1806 of yacc.c  */
-#line 2239 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2241 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2246 "parser.yy"
+#line 2296 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8058,257 +8181,166 @@
     break;
 
+  case 571:
+
+/* Line 1806 of yacc.c  */
+#line 2301 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 572:
+
+/* Line 1806 of yacc.c  */
+#line 2306 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
   case 573:
 
 /* Line 1806 of yacc.c  */
-#line 2251 "parser.yy"
+#line 2308 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2310 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 575:
+
+/* Line 1806 of yacc.c  */
+#line 2315 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 576:
+
+/* Line 1806 of yacc.c  */
+#line 2317 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 577:
+
+/* Line 1806 of yacc.c  */
+#line 2319 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 578:
+
+/* Line 1806 of yacc.c  */
+#line 2321 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2256 "parser.yy"
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2326 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2328 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2337 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2340 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2345 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2347 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 586:
+
+/* Line 1806 of yacc.c  */
+#line 2349 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 587:
+
+/* Line 1806 of yacc.c  */
+#line 2354 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 575:
-
-/* Line 1806 of yacc.c  */
-#line 2258 "parser.yy"
+  case 588:
+
+/* Line 1806 of yacc.c  */
+#line 2356 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 576:
-
-/* Line 1806 of yacc.c  */
-#line 2260 "parser.yy"
+  case 589:
+
+/* Line 1806 of yacc.c  */
+#line 2358 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 577:
-
-/* Line 1806 of yacc.c  */
-#line 2265 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 578:
-
-/* Line 1806 of yacc.c  */
-#line 2267 "parser.yy"
+  case 590:
+
+/* Line 1806 of yacc.c  */
+#line 2363 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2269 "parser.yy"
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2365 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 580:
-
-/* Line 1806 of yacc.c  */
-#line 2271 "parser.yy"
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2367 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2276 "parser.yy"
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2385 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
+    break;
+
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2387 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2278 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2287 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2290 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 586:
-
-/* Line 1806 of yacc.c  */
-#line 2295 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 587:
-
-/* Line 1806 of yacc.c  */
-#line 2297 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 588:
-
-/* Line 1806 of yacc.c  */
-#line 2299 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 589:
-
-/* Line 1806 of yacc.c  */
-#line 2304 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2306 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 591:
-
-/* Line 1806 of yacc.c  */
-#line 2308 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 592:
-
-/* Line 1806 of yacc.c  */
-#line 2313 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 593:
-
-/* Line 1806 of yacc.c  */
-#line 2315 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 594:
-
-/* Line 1806 of yacc.c  */
-#line 2317 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
   case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2332 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
-    break;
-
-  case 599:
-
-/* Line 1806 of yacc.c  */
-#line 2334 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
-    break;
-
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2336 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2341 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 602:
-
-/* Line 1806 of yacc.c  */
-#line 2343 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2345 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2350 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 605:
-
-/* Line 1806 of yacc.c  */
-#line 2352 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2354 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 607:
-
-/* Line 1806 of yacc.c  */
-#line 2369 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2372 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2374 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2380 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2385 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2387 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 615:
 
 /* Line 1806 of yacc.c  */
@@ -8317,61 +8349,47 @@
     break;
 
-  case 616:
+  case 599:
 
 /* Line 1806 of yacc.c  */
 #line 2394 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 617:
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 600:
 
 /* Line 1806 of yacc.c  */
 #line 2396 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 601:
+
+/* Line 1806 of yacc.c  */
+#line 2398 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 602:
+
+/* Line 1806 of yacc.c  */
+#line 2403 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 618:
-
-/* Line 1806 of yacc.c  */
-#line 2398 "parser.yy"
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2405 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 619:
-
-/* Line 1806 of yacc.c  */
-#line 2400 "parser.yy"
+  case 604:
+
+/* Line 1806 of yacc.c  */
+#line 2407 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2405 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2407 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2409 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2419 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 625:
+  case 605:
 
 /* Line 1806 of yacc.c  */
@@ -8380,26 +8398,19 @@
     break;
 
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2424 "parser.yy"
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2425 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2429 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2431 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 629:
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2427 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 610:
 
 /* Line 1806 of yacc.c  */
@@ -8408,47 +8419,47 @@
     break;
 
-  case 630:
+  case 611:
 
 /* Line 1806 of yacc.c  */
 #line 2438 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2440 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2442 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2447 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 631:
-
-/* Line 1806 of yacc.c  */
-#line 2440 "parser.yy"
+  case 615:
+
+/* Line 1806 of yacc.c  */
+#line 2449 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 632:
-
-/* Line 1806 of yacc.c  */
-#line 2442 "parser.yy"
+  case 616:
+
+/* Line 1806 of yacc.c  */
+#line 2451 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 633:
-
-/* Line 1806 of yacc.c  */
-#line 2444 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 634:
-
-/* Line 1806 of yacc.c  */
-#line 2449 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 635:
-
-/* Line 1806 of yacc.c  */
-#line 2451 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 636:
+  case 617:
 
 /* Line 1806 of yacc.c  */
@@ -8457,29 +8468,141 @@
     break;
 
+  case 618:
+
+/* Line 1806 of yacc.c  */
+#line 2458 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 619:
+
+/* Line 1806 of yacc.c  */
+#line 2460 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2462 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2472 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2475 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2477 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2482 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2484 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2486 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2491 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 629:
+
+/* Line 1806 of yacc.c  */
+#line 2493 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 630:
+
+/* Line 1806 of yacc.c  */
+#line 2495 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 631:
+
+/* Line 1806 of yacc.c  */
+#line 2497 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 632:
+
+/* Line 1806 of yacc.c  */
+#line 2502 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 633:
+
+/* Line 1806 of yacc.c  */
+#line 2504 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2506 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2519 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 637:
 
 /* Line 1806 of yacc.c  */
-#line 2484 "parser.yy"
+#line 2522 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
+  case 638:
+
+/* Line 1806 of yacc.c  */
+#line 2524 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
   case 639:
 
 /* Line 1806 of yacc.c  */
-#line 2487 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 640:
-
-/* Line 1806 of yacc.c  */
-#line 2489 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 641:
-
-/* Line 1806 of yacc.c  */
-#line 2494 "parser.yy"
+#line 2529 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8488,8 +8611,8 @@
     break;
 
-  case 642:
-
-/* Line 1806 of yacc.c  */
-#line 2499 "parser.yy"
+  case 640:
+
+/* Line 1806 of yacc.c  */
+#line 2534 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8498,639 +8621,653 @@
     break;
 
+  case 641:
+
+/* Line 1806 of yacc.c  */
+#line 2542 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 642:
+
+/* Line 1806 of yacc.c  */
+#line 2544 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
   case 643:
 
 /* Line 1806 of yacc.c  */
-#line 2507 "parser.yy"
+#line 2546 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 644:
+
+/* Line 1806 of yacc.c  */
+#line 2551 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2553 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2558 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
+    break;
+
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2560 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 649:
+
+/* Line 1806 of yacc.c  */
+#line 2578 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2580 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 651:
+
+/* Line 1806 of yacc.c  */
+#line 2585 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2587 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2589 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 644:
-
-/* Line 1806 of yacc.c  */
-#line 2509 "parser.yy"
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2591 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2511 "parser.yy"
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2593 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2599 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 658:
+
+/* Line 1806 of yacc.c  */
+#line 2601 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 659:
+
+/* Line 1806 of yacc.c  */
+#line 2603 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2516 "parser.yy"
+  case 660:
+
+/* Line 1806 of yacc.c  */
+#line 2608 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
+    break;
+
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2610 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2612 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 663:
+
+/* Line 1806 of yacc.c  */
+#line 2618 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2620 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
+    break;
+
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2626 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
+    break;
+
+  case 667:
+
+/* Line 1806 of yacc.c  */
+#line 2628 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
+    break;
+
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2630 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
+    break;
+
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2632 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
+    break;
+
+  case 671:
+
+/* Line 1806 of yacc.c  */
+#line 2667 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2669 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 673:
+
+/* Line 1806 of yacc.c  */
+#line 2674 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( nullptr ); }
+    break;
+
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2676 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2678 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( nullptr ) ); }
+    break;
+
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2680 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2682 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 679:
+
+/* Line 1806 of yacc.c  */
+#line 2688 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 680:
+
+/* Line 1806 of yacc.c  */
+#line 2690 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2692 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 682:
+
+/* Line 1806 of yacc.c  */
+#line 2697 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
+    break;
+
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2699 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
+    break;
+
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2701 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2708 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2518 "parser.yy"
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2719 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
+    break;
+
+  case 689:
+
+/* Line 1806 of yacc.c  */
+#line 2722 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
+    break;
+
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2724 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
+    break;
+
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2727 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
+    break;
+
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2729 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
+    break;
+
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2731 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
+    break;
+
+  case 695:
+
+/* Line 1806 of yacc.c  */
+#line 2746 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2748 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 697:
+
+/* Line 1806 of yacc.c  */
+#line 2753 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
+    break;
+
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2755 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2757 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2759 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
+    break;
+
+  case 701:
+
+/* Line 1806 of yacc.c  */
+#line 2761 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addQualifiers( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 703:
+
+/* Line 1806 of yacc.c  */
+#line 2767 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2523 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
-    break;
-
-  case 649:
-
-/* Line 1806 of yacc.c  */
-#line 2525 "parser.yy"
+  case 704:
+
+/* Line 1806 of yacc.c  */
+#line 2769 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 705:
+
+/* Line 1806 of yacc.c  */
+#line 2771 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 706:
+
+/* Line 1806 of yacc.c  */
+#line 2776 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2540 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2542 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2547 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2549 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2551 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2553 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2555 "parser.yy"
+  case 707:
+
+/* Line 1806 of yacc.c  */
+#line 2778 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 659:
-
-/* Line 1806 of yacc.c  */
-#line 2561 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2563 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2565 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2570 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
-    break;
-
-  case 663:
-
-/* Line 1806 of yacc.c  */
-#line 2572 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 664:
-
-/* Line 1806 of yacc.c  */
-#line 2574 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2580 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2582 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
-    break;
-
-  case 668:
-
-/* Line 1806 of yacc.c  */
-#line 2588 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
-    break;
-
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2590 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
-    break;
-
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2592 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
-    break;
-
-  case 671:
-
-/* Line 1806 of yacc.c  */
-#line 2594 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
-    break;
-
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2609 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2611 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2616 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2618 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2620 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 678:
-
-/* Line 1806 of yacc.c  */
-#line 2622 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 679:
-
-/* Line 1806 of yacc.c  */
-#line 2624 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 681:
-
-/* Line 1806 of yacc.c  */
-#line 2630 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2632 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 683:
-
-/* Line 1806 of yacc.c  */
-#line 2634 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2639 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
-    break;
-
-  case 685:
-
-/* Line 1806 of yacc.c  */
-#line 2641 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2643 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 688:
-
-/* Line 1806 of yacc.c  */
-#line 2650 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2661 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
-    break;
-
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2664 "parser.yy"
+  case 710:
+
+/* Line 1806 of yacc.c  */
+#line 2788 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 713:
+
+/* Line 1806 of yacc.c  */
+#line 2798 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2800 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2802 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 716:
+
+/* Line 1806 of yacc.c  */
+#line 2804 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2806 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+    break;
+
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2808 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
+    break;
+
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2815 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2817 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2819 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2821 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2823 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2826 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2828 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 726:
+
+/* Line 1806 of yacc.c  */
+#line 2830 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+    break;
+
+  case 727:
+
+/* Line 1806 of yacc.c  */
+#line 2832 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
+    break;
+
+  case 728:
+
+/* Line 1806 of yacc.c  */
+#line 2834 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+    break;
+
+  case 729:
+
+/* Line 1806 of yacc.c  */
+#line 2839 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 692:
-
-/* Line 1806 of yacc.c  */
-#line 2666 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
-    break;
-
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2669 "parser.yy"
+  case 730:
+
+/* Line 1806 of yacc.c  */
+#line 2841 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2671 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
-    break;
-
-  case 695:
-
-/* Line 1806 of yacc.c  */
-#line 2673 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
-    break;
-
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2687 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2689 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2694 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
-    break;
-
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2696 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 701:
-
-/* Line 1806 of yacc.c  */
-#line 2698 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 702:
-
-/* Line 1806 of yacc.c  */
-#line 2700 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
-    break;
-
-  case 703:
-
-/* Line 1806 of yacc.c  */
-#line 2702 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 705:
-
-/* Line 1806 of yacc.c  */
-#line 2708 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 706:
-
-/* Line 1806 of yacc.c  */
-#line 2710 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
-    break;
-
-  case 707:
-
-/* Line 1806 of yacc.c  */
-#line 2712 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 708:
-
-/* Line 1806 of yacc.c  */
-#line 2717 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 709:
-
-/* Line 1806 of yacc.c  */
-#line 2719 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 712:
-
-/* Line 1806 of yacc.c  */
-#line 2729 "parser.yy"
+  case 731:
+
+/* Line 1806 of yacc.c  */
+#line 2846 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
+    break;
+
+  case 732:
+
+/* Line 1806 of yacc.c  */
+#line 2848 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
+    break;
+
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2875 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2739 "parser.yy"
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2886 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2741 "parser.yy"
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2888 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2743 "parser.yy"
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2890 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 718:
-
-/* Line 1806 of yacc.c  */
-#line 2745 "parser.yy"
+  case 741:
+
+/* Line 1806 of yacc.c  */
+#line 2892 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2747 "parser.yy"
+  case 742:
+
+/* Line 1806 of yacc.c  */
+#line 2894 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2749 "parser.yy"
+  case 743:
+
+/* Line 1806 of yacc.c  */
+#line 2896 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2756 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2758 "parser.yy"
+  case 744:
+
+/* Line 1806 of yacc.c  */
+#line 2903 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
+    break;
+
+  case 745:
+
+/* Line 1806 of yacc.c  */
+#line 2905 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
+    break;
+
+  case 746:
+
+/* Line 1806 of yacc.c  */
+#line 2907 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2760 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2762 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2764 "parser.yy"
+  case 747:
+
+/* Line 1806 of yacc.c  */
+#line 2909 "parser.yy"
+    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
+    break;
+
+  case 748:
+
+/* Line 1806 of yacc.c  */
+#line 2911 "parser.yy"
+    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
+    break;
+
+  case 749:
+
+/* Line 1806 of yacc.c  */
+#line 2913 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 726:
-
-/* Line 1806 of yacc.c  */
-#line 2767 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 727:
-
-/* Line 1806 of yacc.c  */
-#line 2769 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 728:
-
-/* Line 1806 of yacc.c  */
-#line 2771 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-    break;
-
-  case 729:
-
-/* Line 1806 of yacc.c  */
-#line 2773 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
-    break;
-
-  case 730:
-
-/* Line 1806 of yacc.c  */
-#line 2775 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 731:
-
-/* Line 1806 of yacc.c  */
-#line 2780 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
-    break;
-
-  case 732:
-
-/* Line 1806 of yacc.c  */
-#line 2782 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
-    break;
-
-  case 733:
-
-/* Line 1806 of yacc.c  */
-#line 2787 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
-    break;
-
-  case 734:
-
-/* Line 1806 of yacc.c  */
-#line 2789 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
-    break;
-
-  case 736:
-
-/* Line 1806 of yacc.c  */
-#line 2816 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2827 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2829 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 742:
-
-/* Line 1806 of yacc.c  */
-#line 2831 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 743:
-
-/* Line 1806 of yacc.c  */
-#line 2833 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 744:
-
-/* Line 1806 of yacc.c  */
-#line 2835 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-    break;
-
-  case 745:
-
-/* Line 1806 of yacc.c  */
-#line 2837 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
-    break;
-
-  case 746:
-
-/* Line 1806 of yacc.c  */
-#line 2844 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
-    break;
-
-  case 747:
-
-/* Line 1806 of yacc.c  */
-#line 2846 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
-    break;
-
-  case 748:
-
-/* Line 1806 of yacc.c  */
-#line 2848 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
-    break;
-
-  case 749:
-
-/* Line 1806 of yacc.c  */
-#line 2850 "parser.yy"
-    { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
-    break;
-
   case 750:
 
 /* Line 1806 of yacc.c  */
-#line 2852 "parser.yy"
-    { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
+#line 2918 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
@@ -9138,6 +9275,6 @@
 
 /* Line 1806 of yacc.c  */
-#line 2854 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
+#line 2925 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
     break;
 
@@ -9145,33 +9282,19 @@
 
 /* Line 1806 of yacc.c  */
-#line 2859 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
-    break;
-
-  case 753:
-
-/* Line 1806 of yacc.c  */
-#line 2866 "parser.yy"
+#line 2927 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
     break;
 
-  case 754:
-
-/* Line 1806 of yacc.c  */
-#line 2868 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
-    break;
-
-  case 757:
-
-/* Line 1806 of yacc.c  */
-#line 2892 "parser.yy"
+  case 755:
+
+/* Line 1806 of yacc.c  */
+#line 2951 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
 
-  case 758:
-
-/* Line 1806 of yacc.c  */
-#line 2894 "parser.yy"
+  case 756:
+
+/* Line 1806 of yacc.c  */
+#line 2953 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9180,5 +9303,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9183 "Parser/parser.cc"
+#line 9306 "Parser/parser.cc"
       default: break;
     }
@@ -9411,5 +9534,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2897 "parser.yy"
+#line 2956 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 4a9ccc35f7b5fed64bf53eee245fc9caa37f687d)
+++ src/Parser/parser.h	(revision 9e45e461b4c2f340f08ce1debda8324c0d1bb001)
@@ -272,19 +272,19 @@
 
 /* Line 2068 of yacc.c  */
-#line 119 "parser.yy"
+#line 139 "parser.yy"
 
 	Token tok;
-	ParseNode *pn;
-	ExpressionNode *en;
-	DeclarationNode *decl;
+	ParseNode * pn;
+	ExpressionNode * en;
+	DeclarationNode * decl;
 	DeclarationNode::Aggregate aggKey;
 	DeclarationNode::TypeClass tclass;
-	StatementNode *sn;
-	ConstantExpr *constant;
-	ForCtl *fctl;
-	LabelNode *label;
-	InitializerNode *in;
+	StatementNode * sn;
+	ConstantExpr * constant;
+	ForCtl * fctl;
+	LabelNode * label;
+	InitializerNode * in;
 	OperKinds op;
-	std::string *str;
+	std::string * str;
 	bool flag;
 
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 4a9ccc35f7b5fed64bf53eee245fc9caa37f687d)
+++ src/Parser/parser.yy	(revision 9e45e461b4c2f340f08ce1debda8324c0d1bb001)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jan 18 15:51:25 2017
-// Update Count     : 2135
+// Last Modified On : Mon Feb  6 16:00:29 2017
+// Update Count     : 2181
 //
 
@@ -32,4 +32,5 @@
 //
 // 1. designation with and without '=' (use ':' instead)
+// 2. attributes not allowed in parenthesis of declarator
 //
 // All of the syntactic extensions for GCC C are marked with the comment "GCC". The second extensions are for Cforall
@@ -65,4 +66,23 @@
 	to->insert( to->length() - 1, from->substr( 1, from->length() - 2 ) );
 } // appendStr
+
+DeclarationNode * distAttr( DeclarationNode * specifier, DeclarationNode * declList ) {
+	// distribute declaration_specifier across all declared variables, e.g., static, const, __attribute__.
+	DeclarationNode * cur = declList, * cl = (new DeclarationNode)->addType( specifier );
+	//cur->addType( specifier );
+	for ( cur = dynamic_cast< DeclarationNode * >( cur->get_next() ); cur != nullptr; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ) ) {
+		cl->cloneBaseType( cur );
+	} // for
+	declList->addType( cl );
+//	delete cl;
+	return declList;
+} // distAttr
+
+void distExt( DeclarationNode * declaration ) {
+	// distribute EXTENSION across all declarations
+	for ( DeclarationNode *iter = declaration; iter != nullptr; iter = (DeclarationNode *)iter->get_next() ) {
+		iter->set_extension( true );
+	} // for
+} // distExt
 %}
 
@@ -119,16 +139,16 @@
 {
 	Token tok;
-	ParseNode *pn;
-	ExpressionNode *en;
-	DeclarationNode *decl;
+	ParseNode * pn;
+	ExpressionNode * en;
+	DeclarationNode * decl;
 	DeclarationNode::Aggregate aggKey;
 	DeclarationNode::TypeClass tclass;
-	StatementNode *sn;
-	ConstantExpr *constant;
-	ForCtl *fctl;
-	LabelNode *label;
-	InitializerNode *in;
+	StatementNode * sn;
+	ConstantExpr * constant;
+	ForCtl * fctl;
+	LabelNode * label;
+	InitializerNode * in;
 	OperKinds op;
-	std::string *str;
+	std::string * str;
 	bool flag;
 }
@@ -152,5 +172,5 @@
 %type<fctl> for_control_expression
 %type<en> subrange
-%type<constant> asm_name_opt
+%type<decl> asm_name_opt
 %type<en> asm_operands_opt asm_operands_list asm_operand
 %type<label> label_list
@@ -171,12 +191,10 @@
 
 // declarations
-%type<decl> abstract_array abstract_declarator abstract_function abstract_parameter_array
-%type<decl> abstract_parameter_declaration abstract_parameter_declarator abstract_parameter_function
-%type<decl> abstract_parameter_ptr abstract_ptr
+%type<decl> abstract_declarator abstract_ptr abstract_array abstract_function array_dimension multi_array_dimension
+%type<decl> abstract_parameter_declarator abstract_parameter_ptr abstract_parameter_array abstract_parameter_function array_parameter_dimension array_parameter_1st_dimension
+%type<decl> abstract_parameter_declaration
 
 %type<aggKey> aggregate_key
-%type<decl>  aggregate_name
-
-%type<decl> array_dimension array_parameter_1st_dimension array_parameter_dimension multi_array_dimension
+%type<decl>  aggregate_type
 
 %type<decl> assertion assertion_list_opt
@@ -191,7 +209,7 @@
 %type<decl> declaration_specifier declarator declaring_list
 
-%type<decl> elaborated_type_name
-
-%type<decl> enumerator_list enum_name
+%type<decl> elaborated_type
+
+%type<decl> enumerator_list enum_type
 %type<en> enumerator_value_opt
 
@@ -206,22 +224,23 @@
 %type<decl> identifier_parameter_ptr identifier_list
 
-%type<decl> new_abstract_array new_abstract_declarator_no_tuple new_abstract_declarator_tuple
-%type<decl> new_abstract_function new_abstract_parameter_declaration new_abstract_parameter_list
-%type<decl> new_abstract_ptr new_abstract_tuple
-
-%type<decl> new_array_parameter_1st_dimension
-
-%type<decl> new_trait_declaring_list new_declaration new_field_declaring_list
-%type<decl> new_function_declaration new_function_return new_function_specifier
-
-%type<decl> new_identifier_parameter_array new_identifier_parameter_declarator_no_tuple
-%type<decl> new_identifier_parameter_declarator_tuple new_identifier_parameter_ptr
-
-%type<decl> new_parameter_declaration new_parameter_list new_parameter_type_list new_parameter_type_list_opt
-
-%type<decl> new_typedef_declaration new_variable_declaration new_variable_specifier
-
-%type<decl> old_declaration old_declaration_list old_declaration_list_opt old_function_array
-%type<decl> old_function_declarator old_function_no_ptr old_function_ptr
+%type<decl> cfa_abstract_array cfa_abstract_declarator_no_tuple cfa_abstract_declarator_tuple
+%type<decl> cfa_abstract_function cfa_abstract_parameter_declaration cfa_abstract_parameter_list
+%type<decl> cfa_abstract_ptr cfa_abstract_tuple
+
+%type<decl> cfa_array_parameter_1st_dimension
+
+%type<decl> cfa_trait_declaring_list cfa_declaration cfa_field_declaring_list
+%type<decl> cfa_function_declaration cfa_function_return cfa_function_specifier
+
+%type<decl> cfa_identifier_parameter_array cfa_identifier_parameter_declarator_no_tuple
+%type<decl> cfa_identifier_parameter_declarator_tuple cfa_identifier_parameter_ptr
+
+%type<decl> cfa_parameter_declaration cfa_parameter_list cfa_parameter_type_list cfa_parameter_type_list_opt
+
+%type<decl> cfa_typedef_declaration cfa_variable_declaration cfa_variable_specifier
+
+%type<decl> c_declaration
+%type<decl> KR_function_declarator KR_function_no_ptr KR_function_ptr KR_function_array
+%type<decl> KR_declaration_list KR_declaration_list_opt
 
 %type<decl> parameter_declaration parameter_list parameter_type_list
@@ -237,7 +256,9 @@
 %type<decl> type_declarator type_declarator_name type_declaring_list
 
-%type<decl> typedef type_array typedef_declaration typedef_declaration_specifier typedef_expression
-%type<decl> type_function type_parameter_array type_parameter_function type_parameter_ptr
-%type<decl> type_parameter_redeclarator type_ptr variable_type_redeclarator typedef_type_specifier
+%type<decl> typedef typedef_type_specifier typedef_declaration typedef_declaration_specifier typedef_expression
+
+%type<decl> variable_type_redeclarator type_ptr type_array type_function
+
+%type<decl> type_parameter_redeclarator type_parameter_ptr type_parameter_array type_parameter_function
 %type<decl> typegen_declaration_specifier typegen_type_specifier typegen_name
 
@@ -249,6 +270,6 @@
 %type<decl> type_qualifier type_qualifier_name type_qualifier_list type_qualifier_list_opt type_specifier
 
-%type<decl> variable_abstract_array variable_abstract_declarator variable_abstract_function
-%type<decl> variable_abstract_ptr variable_array variable_declarator variable_function variable_ptr
+%type<decl> variable_declarator variable_ptr variable_array variable_function
+%type<decl> variable_abstract_declarator variable_abstract_ptr variable_abstract_array variable_abstract_function
 
 %type<decl> attribute_list_opt attribute_list attribute_name_list attribute attribute_name
@@ -659,5 +680,5 @@
 tuple:													// CFA, tuple
 		// CFA, one assignment_expression is factored out of comma_expression to eliminate a shift/reduce conflict with
-		// comma_expression in new_identifier_parameter_array and new_abstract_array
+		// comma_expression in cfa_identifier_parameter_array and cfa_abstract_array
 //	'[' ']'
 //		{ $$ = new ExpressionNode( build_tuple() ); }
@@ -723,5 +744,6 @@
 	  push push
 	  local_label_declaration_opt						// GCC, local labels
-	  block_item_list pop '}'							// C99, intermix declarations and statements
+	  block_item_list									// C99, intermix declarations and statements
+	  pop '}'
 		{ $$ = new StatementNode( build_compound( $5 ) ); }
 	;
@@ -737,11 +759,15 @@
 		{ $$ = new StatementNode( $1 ); }
 	| EXTENSION declaration								// GCC
-		{	// mark all fields in list
-			for ( DeclarationNode *iter = $2; iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
-				iter->set_extension( true );
+		{
+			distExt( $2 );
 			$$ = new StatementNode( $2 );
 		}
 	| function_definition
 		{ $$ = new StatementNode( $1 ); }
+	| EXTENSION function_definition						// GCC
+		{
+			distExt( $2 );
+			$$ = new StatementNode( $2 );
+		}
 	| statement pop
 	;
@@ -960,10 +986,10 @@
 	| type_specifier variable_abstract_declarator
 		{ $$ = $2->addType( $1 ); }
-	| new_abstract_declarator_tuple no_attr_identifier	// CFA
+	| cfa_abstract_declarator_tuple no_attr_identifier	// CFA
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			$$ = $1->addName( $2 );
 		}
-	| new_abstract_declarator_tuple						// CFA
+	| cfa_abstract_declarator_tuple						// CFA
 	;
 
@@ -1044,13 +1070,13 @@
 	;
 
-old_declaration_list_opt:								// used to declare parameter types in K&R style functions
+KR_declaration_list_opt:								// used to declare parameter types in K&R style functions
 	pop
 		{ $$ = nullptr; }
-	| old_declaration_list
-	;
-
-old_declaration_list:
-	old_declaration
-	| old_declaration_list push old_declaration
+	| KR_declaration_list
+	;
+
+KR_declaration_list:
+	c_declaration
+	| KR_declaration_list push c_declaration
 		{ $$ = $1->appendList( $3 ); }
 	;
@@ -1072,6 +1098,6 @@
 
 declaration:											// CFA, new & old style declarations
-	new_declaration
-	| old_declaration
+	cfa_declaration
+	| c_declaration
 	;
 
@@ -1087,19 +1113,19 @@
 //		[10] * char y;		char *y[10];	// array of 10 pointers to char
 
-new_declaration:										// CFA
-	new_variable_declaration pop ';'
-	| new_typedef_declaration pop ';'
-	| new_function_declaration pop ';'
+cfa_declaration:										// CFA
+	cfa_variable_declaration pop ';'
+	| cfa_typedef_declaration pop ';'
+	| cfa_function_declaration pop ';'
 	| type_declaring_list pop ';'
 	| trait_specifier pop ';'
 	;
 
-new_variable_declaration:								// CFA
-	new_variable_specifier initializer_opt
+cfa_variable_declaration:								// CFA
+	cfa_variable_specifier initializer_opt
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			$$ = $1->addInitializer( $2 );
 		}
-	| declaration_qualifier_list new_variable_specifier initializer_opt
+	| declaration_qualifier_list cfa_variable_specifier initializer_opt
 		// declaration_qualifier_list also includes type_qualifier_list, so a semantic check is necessary to preclude
 		// them as a type_qualifier cannot appear in that context.
@@ -1108,5 +1134,5 @@
 			$$ = $2->addQualifiers( $1 )->addInitializer( $3 );;
 		}
-	| new_variable_declaration pop ',' push identifier_or_type_name initializer_opt
+	| cfa_variable_declaration pop ',' push identifier_or_type_name initializer_opt
 		{
 			typedefTable.addToEnclosingScope( *$5, TypedefTable::ID );
@@ -1115,18 +1141,18 @@
 	;
 
-new_variable_specifier:									// CFA
+cfa_variable_specifier:									// CFA
 		// A semantic check is required to ensure asm_name only appears on declarations with implicit or explicit static
 		// storage-class
-	new_abstract_declarator_no_tuple identifier_or_type_name asm_name_opt
+	cfa_abstract_declarator_no_tuple identifier_or_type_name asm_name_opt
 		{
 			typedefTable.setNextIdentifier( *$2 );
 			$$ = $1->addName( $2 )->addAsmName( $3 );
 		}
-	| new_abstract_tuple identifier_or_type_name asm_name_opt
+	| cfa_abstract_tuple identifier_or_type_name asm_name_opt
 		{
 			typedefTable.setNextIdentifier( *$2 );
 			$$ = $1->addName( $2 )->addAsmName( $3 );
 		}
-	| type_qualifier_list new_abstract_tuple identifier_or_type_name asm_name_opt
+	| type_qualifier_list cfa_abstract_tuple identifier_or_type_name asm_name_opt
 		{
 			typedefTable.setNextIdentifier( *$3 );
@@ -1135,26 +1161,26 @@
 	;
 
-new_function_declaration:								// CFA
-	new_function_specifier
+cfa_function_declaration:								// CFA
+	cfa_function_specifier
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			$$ = $1;
 		}
-	| type_qualifier_list new_function_specifier
+	| type_qualifier_list cfa_function_specifier
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			$$ = $2->addQualifiers( $1 );
 		}
-	| declaration_qualifier_list new_function_specifier
+	| declaration_qualifier_list cfa_function_specifier
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			$$ = $2->addQualifiers( $1 );
 		}
-	| declaration_qualifier_list type_qualifier_list new_function_specifier
+	| declaration_qualifier_list type_qualifier_list cfa_function_specifier
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
 			$$ = $3->addQualifiers( $1 )->addQualifiers( $2 );
 		}
-	| new_function_declaration pop ',' push identifier_or_type_name
+	| cfa_function_declaration pop ',' push identifier_or_type_name
 		{
 			typedefTable.addToEnclosingScope( *$5, TypedefTable::ID );
@@ -1163,15 +1189,15 @@
 	;
 
-new_function_specifier:									// CFA
-//	'[' ']' identifier_or_type_name '(' push new_parameter_type_list_opt pop ')' // S/R conflict
+cfa_function_specifier:									// CFA
+//	'[' ']' identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')' // S/R conflict
 //		{
 //			$$ = DeclarationNode::newFunction( $3, DeclarationNode::newTuple( 0 ), $6, 0, true );
 //		}
-//	'[' ']' identifier '(' push new_parameter_type_list_opt pop ')'
+//	'[' ']' identifier '(' push cfa_parameter_type_list_opt pop ')'
 //		{
 //			typedefTable.setNextIdentifier( *$5 );
 //			$$ = DeclarationNode::newFunction( $5, DeclarationNode::newTuple( 0 ), $8, 0, true );
 //		}
-//	| '[' ']' TYPEDEFname '(' push new_parameter_type_list_opt pop ')'
+//	| '[' ']' TYPEDEFname '(' push cfa_parameter_type_list_opt pop ')'
 //		{
 //			typedefTable.setNextIdentifier( *$5 );
@@ -1181,15 +1207,15 @@
 		// identifier_or_type_name must be broken apart because of the sequence:
 		//
-		//   '[' ']' identifier_or_type_name '(' new_parameter_type_list_opt ')'
+		//   '[' ']' identifier_or_type_name '(' cfa_parameter_type_list_opt ')'
 		//   '[' ']' type_specifier
 		//
 		// type_specifier can resolve to just TYPEDEFname (e.g., typedef int T; int f( T );). Therefore this must be
 		// flattened to allow lookahead to the '(' without having to reduce identifier_or_type_name.
-	new_abstract_tuple identifier_or_type_name '(' push new_parameter_type_list_opt pop ')'
-		// To obtain LR(1 ), this rule must be factored out from function return type (see new_abstract_declarator).
+	cfa_abstract_tuple identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')'
+		// To obtain LR(1 ), this rule must be factored out from function return type (see cfa_abstract_declarator).
 		{
 			$$ = DeclarationNode::newFunction( $2, $1, $5, 0, true );
 		}
-	| new_function_return identifier_or_type_name '(' push new_parameter_type_list_opt pop ')'
+	| cfa_function_return identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')'
 		{
 			$$ = DeclarationNode::newFunction( $2, $1, $5, 0, true );
@@ -1197,25 +1223,25 @@
 	;
 
-new_function_return:									// CFA
-	'[' push new_parameter_list pop ']'
+cfa_function_return:									// CFA
+	'[' push cfa_parameter_list pop ']'
 		{ $$ = DeclarationNode::newTuple( $3 ); }
-	| '[' push new_parameter_list pop ',' push new_abstract_parameter_list pop ']'
-		// To obtain LR(1 ), the last new_abstract_parameter_list is added into this flattened rule to lookahead to the
+	| '[' push cfa_parameter_list pop ',' push cfa_abstract_parameter_list pop ']'
+		// To obtain LR(1 ), the last cfa_abstract_parameter_list is added into this flattened rule to lookahead to the
 		// ']'.
 		{ $$ = DeclarationNode::newTuple( $3->appendList( $7 ) ); }
 	;
 
-new_typedef_declaration:								// CFA
-	TYPEDEF new_variable_specifier
+cfa_typedef_declaration:								// CFA
+	TYPEDEF cfa_variable_specifier
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
 			$$ = $2->addTypedef();
 		}
-	| TYPEDEF new_function_specifier
+	| TYPEDEF cfa_function_specifier
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
 			$$ = $2->addTypedef();
 		}
-	| new_typedef_declaration pop ',' push no_attr_identifier
+	| cfa_typedef_declaration pop ',' push no_attr_identifier
 		{
 			typedefTable.addToEnclosingScope( *$5, TypedefTable::TD );
@@ -1260,15 +1286,40 @@
 		{
 			typedefTable.addToEnclosingScope( *$2, TypedefTable::TD );
-			$$ = DeclarationNode::newName( 0 ); // XXX
+			$$ = DeclarationNode::newName( 0 );			// unimplemented
 		}
 	| typedef_expression pop ',' push no_attr_identifier '=' assignment_expression
 		{
 			typedefTable.addToEnclosingScope( *$5, TypedefTable::TD );
-			$$ = DeclarationNode::newName( 0 ); // XXX
-		}
-	;
-
-old_declaration:
-	declaring_list pop ';'
+			$$ = DeclarationNode::newName( 0 );			// unimplemented
+		}
+	;
+
+//c_declaration:
+//	declaring_list pop ';'
+//	| typedef_declaration pop ';'
+//	| typedef_expression pop ';'						// GCC, naming expression type
+//	| sue_declaration_specifier pop ';'
+//	;
+//
+//declaring_list:
+//		// A semantic check is required to ensure asm_name only appears on declarations with implicit or explicit static
+//		// storage-class
+//	 declarator asm_name_opt initializer_opt
+//		{
+//			typedefTable.addToEnclosingScope( TypedefTable::ID );
+//			$$ = ( $2->addType( $1 ))->addAsmName( $3 )->addInitializer( $4 );
+//		}
+//	| declaring_list ',' attribute_list_opt declarator asm_name_opt initializer_opt
+//		{
+//			typedefTable.addToEnclosingScope( TypedefTable::ID );
+//			$$ = $1->appendList( $1->cloneBaseType( $4->addAsmName( $5 )->addInitializer( $6 ) ) );
+//		}
+//	;
+
+c_declaration:
+	declaration_specifier declaring_list pop ';'
+		{
+			$$ = distAttr( $1, $2 );
+		}
 	| typedef_declaration pop ';'
 	| typedef_expression pop ';'						// GCC, naming expression type
@@ -1279,13 +1330,13 @@
 		// A semantic check is required to ensure asm_name only appears on declarations with implicit or explicit static
 		// storage-class
-	declaration_specifier declarator asm_name_opt initializer_opt
+	declarator asm_name_opt initializer_opt
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = ( $2->addType( $1 ))->addAsmName( $3 )->addInitializer( $4 );
+			$$ = $1->addAsmName( $2 )->addInitializer( $3 );
 		}
 	| declaring_list ',' attribute_list_opt declarator asm_name_opt initializer_opt
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
-			$$ = $1->appendList( $1->cloneBaseType( $4->addAsmName( $5 )->addInitializer( $6 ) ) );
+			$$ = $1->appendList( $4->addQualifiers( $3 )->addAsmName( $5 )->addInitializer( $6 ) );
 		}
 	;
@@ -1474,6 +1525,6 @@
 
 sue_type_specifier:
-	elaborated_type_name								// struct, union, enum
-	| type_qualifier_list elaborated_type_name
+	elaborated_type										// struct, union, enum
+	| type_qualifier_list elaborated_type
 		{ $$ = $2->addQualifiers( $1 ); }
 	| sue_type_specifier type_qualifier
@@ -1500,31 +1551,31 @@
 	;
 
-elaborated_type_name:
-	aggregate_name
-	| enum_name
-	;
-
-aggregate_name:
-	aggregate_key '{' field_declaration_list '}'
-		{ $$ = DeclarationNode::newAggregate( $1, nullptr, nullptr, $3, true ); }
-	| aggregate_key no_attr_identifier_or_type_name
-		{
-			typedefTable.makeTypedef( *$2 );
-			$$ = DeclarationNode::newAggregate( $1, $2, nullptr, nullptr, false );
-		}
-	| aggregate_key no_attr_identifier_or_type_name
-		{ typedefTable.makeTypedef( *$2 ); }
-		'{' field_declaration_list '}'
-		{ $$ = DeclarationNode::newAggregate( $1, $2, nullptr, $5, true ); }
-	| aggregate_key '(' type_name_list ')' '{' field_declaration_list '}' // CFA
-		{ $$ = DeclarationNode::newAggregate( $1, nullptr, $3, $6, false ); }
-	| aggregate_key typegen_name						// CFA, S/R conflict
-		{ $$ = $2; }
+elaborated_type:
+	aggregate_type
+	| enum_type
+	;
+
+aggregate_type:
+	aggregate_key attribute_list_opt '{' field_declaration_list '}'
+		{ $$ = DeclarationNode::newAggregate( $1, nullptr, nullptr, $4, true )->addQualifiers( $2 ); }
+	| aggregate_key attribute_list_opt no_attr_identifier_or_type_name
+		{
+			typedefTable.makeTypedef( *$3 );
+			$$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false )->addQualifiers( $2 );
+		}
+	| aggregate_key attribute_list_opt no_attr_identifier_or_type_name
+		{ typedefTable.makeTypedef( *$3 ); }
+	  '{' field_declaration_list '}'
+		{ $$ = DeclarationNode::newAggregate( $1, $3, nullptr, $6, true )->addQualifiers( $2 ); }
+	| aggregate_key attribute_list_opt '(' type_name_list ')' '{' field_declaration_list '}' // CFA
+		{ $$ = DeclarationNode::newAggregate( $1, nullptr, $4, $7, false )->addQualifiers( $2 ); }
+	| aggregate_key attribute_list_opt typegen_name		// CFA, S/R conflict
+		{ $$ = $3->addQualifiers( $2 ); }
 	;
 
 aggregate_key:
-	STRUCT attribute_list_opt
+	STRUCT
 		{ $$ = DeclarationNode::Struct; }
-	| UNION attribute_list_opt
+	| UNION
 		{ $$ = DeclarationNode::Union; }
 	;
@@ -1538,31 +1589,34 @@
 
 field_declaration:
-	new_field_declaring_list ';'						// CFA, new style field declaration
-	| EXTENSION new_field_declaring_list ';'			// GCC
-		{ $$ = $2->set_extension( true ); }
-	| field_declaring_list ';'
-	| EXTENSION field_declaring_list ';'				// GCC
-		{	// mark all fields in list
-			for ( DeclarationNode *iter = $2; iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
-				iter->set_extension( true );
+	cfa_field_declaring_list ';'						// CFA, new style field declaration
+	| EXTENSION cfa_field_declaring_list ';'			// GCC
+		{
+			distExt( $2 );								// mark all fields in list
 			$$ = $2;
 		}
-	;
-
-new_field_declaring_list:								// CFA, new style field declaration
-	new_abstract_declarator_tuple						// CFA, no field name
-	| new_abstract_declarator_tuple no_attr_identifier_or_type_name
+	| type_specifier field_declaring_list ';'
+		{
+			$$ = distAttr( $1, $2 ); }
+	| EXTENSION type_specifier field_declaring_list ';'	// GCC
+		{
+			distExt( $3 );								// mark all fields in list
+			$$ = distAttr( $2, $3 );
+		}
+	;
+
+cfa_field_declaring_list:								// CFA, new style field declaration
+	cfa_abstract_declarator_tuple						// CFA, no field name
+	| cfa_abstract_declarator_tuple no_attr_identifier_or_type_name
 		{ $$ = $1->addName( $2 ); }
-	| new_field_declaring_list ',' no_attr_identifier_or_type_name
+	| cfa_field_declaring_list ',' no_attr_identifier_or_type_name
 		{ $$ = $1->appendList( $1->cloneType( $3 ) ); }
-	| new_field_declaring_list ','						// CFA, no field name
+	| cfa_field_declaring_list ','						// CFA, no field name
 		{ $$ = $1->appendList( $1->cloneType( 0 ) ); }
 	;
 
 field_declaring_list:
-	type_specifier field_declarator
-		{ $$ = $2->addType( $1 ); }
+	field_declarator
 	| field_declaring_list ',' attribute_list_opt field_declarator
-		{ $$ = $1->appendList( $1->cloneBaseType( $4 ) ); }
+		{ $$ = $1->appendList( $4->addQualifiers( $3 ) ); }
 	;
 
@@ -1593,20 +1647,16 @@
 	;
 
-enum_key:
-	ENUM attribute_list_opt
-	;
-
-enum_name:
-	enum_key '{' enumerator_list comma_opt '}'
-		{ $$ = DeclarationNode::newEnum( nullptr, $3 ); }
-	| enum_key no_attr_identifier_or_type_name
-		{
-			typedefTable.makeTypedef( *$2 );
-			$$ = DeclarationNode::newEnum( $2, 0 );
-		}
-	| enum_key no_attr_identifier_or_type_name
-		{ typedefTable.makeTypedef( *$2 ); }
-		'{' enumerator_list comma_opt '}'
-		{ $$ = DeclarationNode::newEnum( $2, $5 ); }
+enum_type:
+	ENUM attribute_list_opt '{' enumerator_list comma_opt '}'
+		{ $$ = DeclarationNode::newEnum( nullptr, $4 )->addQualifiers( $2 ); }
+	| ENUM attribute_list_opt no_attr_identifier_or_type_name
+		{
+			typedefTable.makeTypedef( *$3 );
+			$$ = DeclarationNode::newEnum( $3, 0 )->addQualifiers( $2 );
+		}
+	| ENUM attribute_list_opt no_attr_identifier_or_type_name
+		{ typedefTable.makeTypedef( *$3 ); }
+	  '{' enumerator_list comma_opt '}'
+		{ $$ = DeclarationNode::newEnum( $3, $6 )->addQualifiers( $2 ); }
 	;
 
@@ -1627,36 +1677,36 @@
 // Minimum of one parameter after which ellipsis is allowed only at the end.
 
-new_parameter_type_list_opt:							// CFA
+cfa_parameter_type_list_opt:							// CFA
 	// empty
 		{ $$ = nullptr; }
-	| new_parameter_type_list
-	;
-
-new_parameter_type_list:								// CFA, abstract + real
-	new_abstract_parameter_list
-	| new_parameter_list
-	| new_parameter_list pop ',' push new_abstract_parameter_list
+	| cfa_parameter_type_list
+	;
+
+cfa_parameter_type_list:								// CFA, abstract + real
+	cfa_abstract_parameter_list
+	| cfa_parameter_list
+	| cfa_parameter_list pop ',' push cfa_abstract_parameter_list
 		{ $$ = $1->appendList( $5 ); }
-	| new_abstract_parameter_list pop ',' push ELLIPSIS
+	| cfa_abstract_parameter_list pop ',' push ELLIPSIS
 		{ $$ = $1->addVarArgs(); }
-	| new_parameter_list pop ',' push ELLIPSIS
+	| cfa_parameter_list pop ',' push ELLIPSIS
 		{ $$ = $1->addVarArgs(); }
 	;
 
-new_parameter_list:										// CFA
-		// To obtain LR(1) between new_parameter_list and new_abstract_tuple, the last new_abstract_parameter_list is
-		// factored out from new_parameter_list, flattening the rules to get lookahead to the ']'.
-	new_parameter_declaration
-	| new_abstract_parameter_list pop ',' push new_parameter_declaration
+cfa_parameter_list:										// CFA
+		// To obtain LR(1) between cfa_parameter_list and cfa_abstract_tuple, the last cfa_abstract_parameter_list is
+		// factored out from cfa_parameter_list, flattening the rules to get lookahead to the ']'.
+	cfa_parameter_declaration
+	| cfa_abstract_parameter_list pop ',' push cfa_parameter_declaration
 		{ $$ = $1->appendList( $5 ); }
-	| new_parameter_list pop ',' push new_parameter_declaration
+	| cfa_parameter_list pop ',' push cfa_parameter_declaration
 		{ $$ = $1->appendList( $5 ); }
-	| new_parameter_list pop ',' push new_abstract_parameter_list pop ',' push new_parameter_declaration
+	| cfa_parameter_list pop ',' push cfa_abstract_parameter_list pop ',' push cfa_parameter_declaration
 		{ $$ = $1->appendList( $5 )->appendList( $9 ); }
 	;
 
-new_abstract_parameter_list:							// CFA, new & old style abstract
-	new_abstract_parameter_declaration
-	| new_abstract_parameter_list pop ',' push new_abstract_parameter_declaration
+cfa_abstract_parameter_list:							// CFA, new & old style abstract
+	cfa_abstract_parameter_declaration
+	| cfa_abstract_parameter_list pop ',' push cfa_abstract_parameter_declaration
 		{ $$ = $1->appendList( $5 ); }
 	;
@@ -1686,24 +1736,24 @@
 // for typedef name by using type_parameter_redeclarator instead of typedef_redeclarator, and function prototypes.
 
-new_parameter_declaration:								// CFA, new & old style parameter declaration
+cfa_parameter_declaration:								// CFA, new & old style parameter declaration
 	parameter_declaration
-	| new_identifier_parameter_declarator_no_tuple identifier_or_type_name assignment_opt
+	| cfa_identifier_parameter_declarator_no_tuple identifier_or_type_name assignment_opt
 		{ $$ = $1->addName( $2 ); }
-	| new_abstract_tuple identifier_or_type_name assignment_opt
-		// To obtain LR(1), these rules must be duplicated here (see new_abstract_declarator).
+	| cfa_abstract_tuple identifier_or_type_name assignment_opt
+		// To obtain LR(1), these rules must be duplicated here (see cfa_abstract_declarator).
 		{ $$ = $1->addName( $2 ); }
-	| type_qualifier_list new_abstract_tuple identifier_or_type_name assignment_opt
+	| type_qualifier_list cfa_abstract_tuple identifier_or_type_name assignment_opt
 		{ $$ = $2->addName( $3 )->addQualifiers( $1 ); }
-	| new_function_specifier
-	;
-
-new_abstract_parameter_declaration:						// CFA, new & old style parameter declaration
+	| cfa_function_specifier
+	;
+
+cfa_abstract_parameter_declaration:						// CFA, new & old style parameter declaration
 	abstract_parameter_declaration
-	| new_identifier_parameter_declarator_no_tuple
-	| new_abstract_tuple
-		// To obtain LR(1), these rules must be duplicated here (see new_abstract_declarator).
-	| type_qualifier_list new_abstract_tuple
+	| cfa_identifier_parameter_declarator_no_tuple
+	| cfa_abstract_tuple
+		// To obtain LR(1), these rules must be duplicated here (see cfa_abstract_declarator).
+	| type_qualifier_list cfa_abstract_tuple
 		{ $$ = $2->addQualifiers( $1 ); }
-	| new_abstract_function
+	| cfa_abstract_function
 	;
 
@@ -1757,16 +1807,13 @@
 
 type_name_no_function:									// sizeof, alignof, cast (constructor)
-	new_abstract_declarator_tuple						// CFA
-	| type_specifier
-	| type_specifier variable_abstract_declarator
-		{ $$ = $2->addType( $1 ); }
-	;
-
-type_name:												// typeof, assertion
-	new_abstract_declarator_tuple						// CFA
-	| new_abstract_function								// CFA
+	cfa_abstract_declarator_tuple						// CFA
 	| type_specifier
 	| type_specifier abstract_declarator
 		{ $$ = $2->addType( $1 ); }
+	;
+
+type_name:												// typeof, assertion
+	type_name_no_function
+	| cfa_abstract_function								// CFA
 	;
 
@@ -1982,20 +2029,20 @@
 
 trait_declaration:									// CFA
-	new_trait_declaring_list pop ';'
+	cfa_trait_declaring_list pop ';'
 	| trait_declaring_list pop ';'
 	;
 
-new_trait_declaring_list:								// CFA
-	new_variable_specifier
+cfa_trait_declaring_list:								// CFA
+	cfa_variable_specifier
 		{
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
 			$$ = $1;
 		}
-	| new_function_specifier
+	| cfa_function_specifier
 		{
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
 			$$ = $1;
 		}
-	| new_trait_declaring_list pop ',' push identifier_or_type_name
+	| cfa_trait_declaring_list pop ',' push identifier_or_type_name
 		{
 			typedefTable.addToEnclosingScope2( *$5, TypedefTable::ID );
@@ -2043,10 +2090,10 @@
 	| asm_statement										// GCC, global assembler statement
 		{}
-	| EXTERN STRINGliteral
+	| EXTERN STRINGliteral								// C++-style linkage specifier
 		{
 			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
 			linkage = LinkageSpec::linkageCheck( $2 );
 		}
-	  '{' external_definition_list_opt '}'				// C++-style linkage specifier
+	  '{' external_definition_list_opt '}'
 		{
 			linkage = linkageStack.top();
@@ -2054,8 +2101,7 @@
 			$$ = $5;
 		}
-	| EXTENSION external_definition
-		{	// mark all fields in list
-			for ( DeclarationNode *iter = $2; iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
-				iter->set_extension( true );
+	| EXTENSION external_definition						// GCC, multiple __extension__ allowed, meaning unknown
+		{
+			distExt( $2 );								// mark all fields in list
 			$$ = $2;
 		}
@@ -2075,5 +2121,5 @@
 			$$ = $1->addFunctionBody( $2 );
 		}
-	| old_function_declarator push old_declaration_list_opt compound_statement
+	| KR_function_declarator push KR_declaration_list_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -2084,5 +2130,5 @@
 
 function_definition:
-	new_function_declaration compound_statement			// CFA
+	cfa_function_declaration compound_statement			// CFA
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -2116,5 +2162,5 @@
 
 		// Old-style K&R function definition, OBSOLESCENT (see 4)
-	| declaration_specifier old_function_declarator push old_declaration_list_opt compound_statement
+	| declaration_specifier KR_function_declarator push KR_declaration_list_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -2122,5 +2168,5 @@
 			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addType( $1 );
 		}
-	| type_qualifier_list old_function_declarator push old_declaration_list_opt compound_statement
+	| type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -2130,5 +2176,5 @@
 
 		// Old-style K&R function definition with "implicit int" type_specifier, OBSOLESCENT (see 4)
-	| declaration_qualifier_list old_function_declarator push old_declaration_list_opt compound_statement
+	| declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -2136,5 +2182,5 @@
 			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addQualifiers( $1 );
 		}
-	| declaration_qualifier_list type_qualifier_list old_function_declarator push old_declaration_list_opt compound_statement
+	| declaration_qualifier_list type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
 		{
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -2159,5 +2205,9 @@
 		{ $$ = nullptr; }
 	| ASM '(' string_literal ')' attribute_list_opt
-		{ $$ = $3; }
+		{
+			DeclarationNode * name = new DeclarationNode();
+			name->asmName = $3;
+			$$ = name->addQualifiers( $5 );
+		}
 	;
 
@@ -2182,5 +2232,5 @@
 	attribute_name
 	| attribute_name_list ',' attribute_name
-		{ $$ = $1->addQualifiers( $3 ); } 
+		{ $$ = $3->addQualifiers( $1 ); }
 	;
 
@@ -2257,6 +2307,6 @@
 	| ptrref_operator type_qualifier_list variable_declarator
 		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' variable_ptr ')'
-		{ $$ = $2; }
+	| '(' variable_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }				// redundant parenthesis
 	;
 
@@ -2318,38 +2368,41 @@
 	;
 
-// This pattern parses an old-style K&R function declarator (OBSOLESCENT, see 4) that is not redefining a typedef name
-// (see function_declarator for additional comments). The pattern precludes returning arrays and functions versus
-// pointers to arrays and functions.
-
-old_function_declarator:
-	old_function_no_ptr
-	| old_function_ptr
-	| old_function_array
-	;
-
-old_function_no_ptr:
+// This pattern parses an old-style K&R function declarator (OBSOLESCENT, see 4)
+//
+//   f( a, b, c ) int a, *b, c[]; {}
+//
+// that is not redefining a typedef name (see function_declarator for additional comments). The pattern precludes
+// returning arrays and functions versus pointers to arrays and functions.
+
+KR_function_declarator:
+	KR_function_no_ptr
+	| KR_function_ptr
+	| KR_function_array
+	;
+
+KR_function_no_ptr:
 	paren_identifier '(' identifier_list ')'			// function_declarator handles empty parameter
 		{ $$ = $1->addIdList( $3 ); }
-	| '(' old_function_ptr ')' '(' identifier_list ')'
-		{ $$ = $2->addIdList( $5 ); }
-	| '(' old_function_no_ptr ')'						// redundant parenthesis
+	| '(' KR_function_ptr ')' '(' push parameter_type_list_opt pop ')'
+		{ $$ = $2->addParamList( $6 ); }
+	| '(' KR_function_no_ptr ')'						// redundant parenthesis
 		{ $$ = $2; }
 	;
 
-old_function_ptr:
-	ptrref_operator old_function_declarator
+KR_function_ptr:
+	ptrref_operator KR_function_declarator
 		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
-	| ptrref_operator type_qualifier_list old_function_declarator
+	| ptrref_operator type_qualifier_list KR_function_declarator
 		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' old_function_ptr ')'
+	| '(' KR_function_ptr ')'
 		{ $$ = $2; }
 	;
 
-old_function_array:
-	'(' old_function_ptr ')' array_dimension
+KR_function_array:
+	'(' KR_function_ptr ')' array_dimension
 		{ $$ = $2->addArray( $4 ); }
-	| '(' old_function_array ')' multi_array_dimension	// redundant parenthesis
+	| '(' KR_function_array ')' multi_array_dimension	// redundant parenthesis
 		{ $$ = $2->addArray( $4 ); }
-	| '(' old_function_array ')'						// redundant parenthesis
+	| '(' KR_function_array ')'							// redundant parenthesis
 		{ $$ = $2; }
 	;
@@ -2386,6 +2439,6 @@
 	| ptrref_operator type_qualifier_list variable_type_redeclarator
 		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' type_ptr ')'
-		{ $$ = $2; }
+	| '(' type_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }
 	;
 
@@ -2410,8 +2463,8 @@
 	;
 
-// This pattern parses a declaration for a parameter variable or function prototype that is not redefining a typedef
-// name and allows the C99 array options, which can only appear in a parameter list.  The pattern precludes declaring an
-// array of functions versus a pointer to an array of functions, and returning arrays and functions versus pointers to
-// arrays and functions.
+// This pattern parses a declaration for a parameter variable of a function prototype or actual that is not redefining a
+// typedef name and allows the C99 array options, which can only appear in a parameter list.  The pattern precludes
+// declaring an array of functions versus a pointer to an array of functions, and returning arrays and functions versus
+// pointers to arrays and functions.
 
 identifier_parameter_declarator:
@@ -2430,6 +2483,6 @@
 	| ptrref_operator type_qualifier_list identifier_parameter_declarator
 		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' identifier_parameter_ptr ')'
-		{ $$ = $2; }
+	| '(' identifier_parameter_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }
 	;
 
@@ -2460,23 +2513,5 @@
 //		int f( int foo ); // redefine typedef name in new scope
 //
-// and allows the C99 array options, which can only appear in a parameter list.  In addition, the pattern handles the
-// special meaning of parenthesis around a typedef name:
-//
-//		ISO/IEC 9899:1999 Section 6.7.5.3(11) : "In a parameter declaration, a single typedef name in
-//		parentheses is taken to be an abstract declarator that specifies a function with a single parameter,
-//		not as redundant parentheses around the identifier."
-//
-// For example:
-//
-//		typedef float T;
-//		int f( int ( T [5] ) );					// see abstract_parameter_declarator
-//		int g( int ( T ( int ) ) );				// see abstract_parameter_declarator
-//		int f( int f1( T a[5] ) );				// see identifier_parameter_declarator
-//		int g( int g1( T g2( int p ) ) );		// see identifier_parameter_declarator
-//
-// In essence, a '(' immediately to the left of typedef name, T, is interpreted as starting a parameter type list, and
-// not as redundant parentheses around a redeclaration of T. Finally, the pattern also precludes declaring an array of
-// functions versus a pointer to an array of functions, and returning arrays and functions versus pointers to arrays and
-// functions.
+// and allows the C99 array options, which can only appear in a parameter list.
 
 type_parameter_redeclarator:
@@ -2508,6 +2543,6 @@
 	| ptrref_operator type_qualifier_list type_parameter_redeclarator
 		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' type_parameter_ptr ')'
-		{ $$ = $2; }
+	| '(' type_parameter_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }
 	;
 
@@ -2530,5 +2565,8 @@
 //
 //		sizeof( int );
+//		sizeof( int * );
 //		sizeof( int [10] );
+//		sizeof( int (*)() );
+//		sizeof( int () );
 //
 // The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays
@@ -2552,6 +2590,6 @@
 	| ptrref_operator type_qualifier_list abstract_declarator
 		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' abstract_ptr ')'
-		{ $$ = $2; }
+	| '(' abstract_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }
 	;
 
@@ -2598,9 +2636,29 @@
 // identifier to which the type applies, e.g.:
 //
-//		int f( int );			// abstract variable parameter; no parameter name specified
+//		int f( int );			// not handled here
+//		int f( int * );			// abstract function-prototype parameter; no parameter name specified
+//		int f( int (*)() );		// abstract function-prototype parameter; no parameter name specified
 //		int f( int (int) );		// abstract function-prototype parameter; no parameter name specified
 //
 // The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays
-// and functions versus pointers to arrays and functions.
+// and functions versus pointers to arrays and functions. In addition, the pattern handles the
+// special meaning of parenthesis around a typedef name:
+//
+//		ISO/IEC 9899:1999 Section 6.7.5.3(11) : "In a parameter declaration, a single typedef name in
+//		parentheses is taken to be an abstract declarator that specifies a function with a single parameter,
+//		not as redundant parentheses around the identifier."
+//
+// For example:
+//
+//		typedef float T;
+//		int f( int ( T [5] ) );					// see abstract_parameter_declarator
+//		int g( int ( T ( int ) ) );				// see abstract_parameter_declarator
+//		int f( int f1( T a[5] ) );				// see identifier_parameter_declarator
+//		int g( int g1( T g2( int p ) ) );		// see identifier_parameter_declarator
+//
+// In essence, a '(' immediately to the left of typedef name, T, is interpreted as starting a parameter type list, and
+// not as redundant parentheses around a redeclaration of T. Finally, the pattern also precludes declaring an array of
+// functions versus a pointer to an array of functions, and returning arrays and functions versus pointers to arrays and
+// functions.
 
 abstract_parameter_declarator:
@@ -2614,13 +2672,13 @@
 abstract_parameter_ptr:
 	ptrref_operator
-		{ $$ = DeclarationNode::newPointer( 0 ); }
+		{ $$ = DeclarationNode::newPointer( nullptr ); }
 	| ptrref_operator type_qualifier_list
 		{ $$ = DeclarationNode::newPointer( $2 ); }
 	| ptrref_operator abstract_parameter_declarator
-		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
+		{ $$ = $2->addPointer( DeclarationNode::newPointer( nullptr ) ); }
 	| ptrref_operator type_qualifier_list abstract_parameter_declarator
 		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' abstract_parameter_ptr ')'
-		{ $$ = $2; }
+	| '(' abstract_parameter_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }
 	;
 
@@ -2674,11 +2732,12 @@
 	;
 
-// This pattern parses a declaration of an abstract variable, i.e., there is no identifier to which the type applies,
-// e.g.:
-//
-//		sizeof( int ); // abstract variable; no identifier name specified
-//
-// The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays
-// and functions versus pointers to arrays and functions.
+// This pattern parses a declaration of an abstract variable, but does not allow "int ()" for a function pointer.
+//
+//		struct S {
+//          int;
+//          int *;
+//          int [10];
+//          int (*)();
+//      };
 
 variable_abstract_declarator:
@@ -2699,6 +2758,6 @@
 	| ptrref_operator type_qualifier_list variable_abstract_declarator
 		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
-	| '(' variable_abstract_ptr ')'
-		{ $$ = $2; }
+	| '(' variable_abstract_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }
 	;
 
@@ -2723,58 +2782,58 @@
 // identifier or typedef name and allows the C99 array options, which can only appear in a parameter list.
 
-new_identifier_parameter_declarator_tuple:				// CFA
-	new_identifier_parameter_declarator_no_tuple
-	| new_abstract_tuple
-	| type_qualifier_list new_abstract_tuple
+cfa_identifier_parameter_declarator_tuple:				// CFA
+	cfa_identifier_parameter_declarator_no_tuple
+	| cfa_abstract_tuple
+	| type_qualifier_list cfa_abstract_tuple
 		{ $$ = $2->addQualifiers( $1 ); }
 	;
 
-new_identifier_parameter_declarator_no_tuple:			// CFA
-	new_identifier_parameter_ptr
-	| new_identifier_parameter_array
-	;
-
-new_identifier_parameter_ptr:							// CFA
+cfa_identifier_parameter_declarator_no_tuple:			// CFA
+	cfa_identifier_parameter_ptr
+	| cfa_identifier_parameter_array
+	;
+
+cfa_identifier_parameter_ptr:							// CFA
 	ptrref_operator type_specifier
 		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
 	| type_qualifier_list ptrref_operator type_specifier
 		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
-	| ptrref_operator new_abstract_function
+	| ptrref_operator cfa_abstract_function
 		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-	| type_qualifier_list ptrref_operator new_abstract_function
+	| type_qualifier_list ptrref_operator cfa_abstract_function
 		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
-	| ptrref_operator new_identifier_parameter_declarator_tuple
+	| ptrref_operator cfa_identifier_parameter_declarator_tuple
 		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-	| type_qualifier_list ptrref_operator new_identifier_parameter_declarator_tuple
+	| type_qualifier_list ptrref_operator cfa_identifier_parameter_declarator_tuple
 		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
 	;
 
-new_identifier_parameter_array:							// CFA
+cfa_identifier_parameter_array:							// CFA
 		// Only the first dimension can be empty or have qualifiers. Empty dimension must be factored out due to
 		// shift/reduce conflict with new-style empty (void) function return type.
 	'[' ']' type_specifier
 		{ $$ = $3->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-	| new_array_parameter_1st_dimension type_specifier
+	| cfa_array_parameter_1st_dimension type_specifier
 		{ $$ = $2->addNewArray( $1 ); }
 	| '[' ']' multi_array_dimension type_specifier
 		{ $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-	| new_array_parameter_1st_dimension multi_array_dimension type_specifier
+	| cfa_array_parameter_1st_dimension multi_array_dimension type_specifier
 		{ $$ = $3->addNewArray( $2 )->addNewArray( $1 ); }
 	| multi_array_dimension type_specifier
 		{ $$ = $2->addNewArray( $1 ); }
 
-	| '[' ']' new_identifier_parameter_ptr
+	| '[' ']' cfa_identifier_parameter_ptr
 		{ $$ = $3->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-	| new_array_parameter_1st_dimension new_identifier_parameter_ptr
+	| cfa_array_parameter_1st_dimension cfa_identifier_parameter_ptr
 		{ $$ = $2->addNewArray( $1 ); }
-	| '[' ']' multi_array_dimension new_identifier_parameter_ptr
+	| '[' ']' multi_array_dimension cfa_identifier_parameter_ptr
 		{ $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
-	| new_array_parameter_1st_dimension multi_array_dimension new_identifier_parameter_ptr
+	| cfa_array_parameter_1st_dimension multi_array_dimension cfa_identifier_parameter_ptr
 		{ $$ = $3->addNewArray( $2 )->addNewArray( $1 ); }
-	| multi_array_dimension new_identifier_parameter_ptr
+	| multi_array_dimension cfa_identifier_parameter_ptr
 		{ $$ = $2->addNewArray( $1 ); }
 	;
 
-new_array_parameter_1st_dimension:
+cfa_array_parameter_1st_dimension:
 	'[' push type_qualifier_list '*' pop ']'			// remaining C99
 		{ $$ = DeclarationNode::newVarArray( $3 ); }
@@ -2798,6 +2857,6 @@
 // These rules need LR(3):
 //
-//		new_abstract_tuple identifier_or_type_name
-//		'[' new_parameter_list ']' identifier_or_type_name '(' new_parameter_type_list_opt ')'
+//		cfa_abstract_tuple identifier_or_type_name
+//		'[' cfa_parameter_list ']' identifier_or_type_name '(' cfa_parameter_type_list_opt ')'
 //
 // since a function return type can be syntactically identical to a tuple type:
@@ -2807,36 +2866,36 @@
 //
 // Therefore, it is necessary to look at the token after identifier_or_type_name to know when to reduce
-// new_abstract_tuple. To make this LR(1), several rules have to be flattened (lengthened) to allow the necessary
-// lookahead. To accomplish this, new_abstract_declarator has an entry point without tuple, and tuple declarations are
-// duplicated when appearing with new_function_specifier.
-
-new_abstract_declarator_tuple:							// CFA
-	new_abstract_tuple
-	| type_qualifier_list new_abstract_tuple
+// cfa_abstract_tuple. To make this LR(1), several rules have to be flattened (lengthened) to allow the necessary
+// lookahead. To accomplish this, cfa_abstract_declarator has an entry point without tuple, and tuple declarations are
+// duplicated when appearing with cfa_function_specifier.
+
+cfa_abstract_declarator_tuple:							// CFA
+	cfa_abstract_tuple
+	| type_qualifier_list cfa_abstract_tuple
 		{ $$ = $2->addQualifiers( $1 ); }
-	| new_abstract_declarator_no_tuple
-	;
-
-new_abstract_declarator_no_tuple:						// CFA
-	new_abstract_ptr
-	| new_abstract_array
-	;
-
-new_abstract_ptr:										// CFA
+	| cfa_abstract_declarator_no_tuple
+	;
+
+cfa_abstract_declarator_no_tuple:						// CFA
+	cfa_abstract_ptr
+	| cfa_abstract_array
+	;
+
+cfa_abstract_ptr:										// CFA
 	ptrref_operator type_specifier
 		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
 	| type_qualifier_list ptrref_operator type_specifier
 		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
-	| ptrref_operator new_abstract_function
+	| ptrref_operator cfa_abstract_function
 		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-	| type_qualifier_list ptrref_operator new_abstract_function
+	| type_qualifier_list ptrref_operator cfa_abstract_function
 		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
-	| ptrref_operator new_abstract_declarator_tuple
+	| ptrref_operator cfa_abstract_declarator_tuple
 		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
-	| type_qualifier_list ptrref_operator new_abstract_declarator_tuple
+	| type_qualifier_list ptrref_operator cfa_abstract_declarator_tuple
 		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
 	;
 
-new_abstract_array:										// CFA
+cfa_abstract_array:										// CFA
 		// Only the first dimension can be empty. Empty dimension must be factored out due to shift/reduce conflict with
 		// empty (void) function return type.
@@ -2847,23 +2906,23 @@
 	| multi_array_dimension type_specifier
 		{ $$ = $2->addNewArray( $1 ); }
-	| '[' ']' new_abstract_ptr
+	| '[' ']' cfa_abstract_ptr
 		{ $$ = $3->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
-	| '[' ']' multi_array_dimension new_abstract_ptr
+	| '[' ']' multi_array_dimension cfa_abstract_ptr
 		{ $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
-	| multi_array_dimension new_abstract_ptr
+	| multi_array_dimension cfa_abstract_ptr
 		{ $$ = $2->addNewArray( $1 ); }
 	;
 
-new_abstract_tuple:										// CFA
-	'[' push new_abstract_parameter_list pop ']'
+cfa_abstract_tuple:										// CFA
+	'[' push cfa_abstract_parameter_list pop ']'
 		{ $$ = DeclarationNode::newTuple( $3 ); }
 	;
 
-new_abstract_function:									// CFA
-//	'[' ']' '(' new_parameter_type_list_opt ')'
+cfa_abstract_function:									// CFA
+//	'[' ']' '(' cfa_parameter_type_list_opt ')'
 //		{ $$ = DeclarationNode::newFunction( nullptr, DeclarationNode::newTuple( nullptr ), $4, nullptr ); }
-	new_abstract_tuple '(' push new_parameter_type_list_opt pop ')'
+	cfa_abstract_tuple '(' push cfa_parameter_type_list_opt pop ')'
 		{ $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); }
-	| new_function_return '(' push new_parameter_type_list_opt pop ')'
+	| cfa_function_return '(' push cfa_parameter_type_list_opt pop ')'
 		{ $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); }
 	;
Index: src/Parser/parser.yy.new
===================================================================
--- src/Parser/parser.yy.new	(revision 9e45e461b4c2f340f08ce1debda8324c0d1bb001)
+++ src/Parser/parser.yy.new	(revision 9e45e461b4c2f340f08ce1debda8324c0d1bb001)
@@ -0,0 +1,2951 @@
+//
+// Cforall Version 1.0.0 Copyright (C) 2015 University of Waterloo
+//
+// The contents of this file are covered under the licence agreement in the
+// file "LICENCE" distributed with Cforall.
+//
+// cfa.y --
+//
+// Author           : Peter A. Buhr
+// Created On       : Sat Sep  1 20:22:55 2001
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sat Feb  4 19:15:25 2017
+// Update Count     : 2318
+//
+
+// This grammar is based on the ANSI99/11 C grammar, specifically parts of EXPRESSION and STATEMENTS, and on the C
+// grammar by James A. Roskind, specifically parts of DECLARATIONS and EXTERNAL DEFINITIONS.  While parts have been
+// copied, important changes have been made in all sections; these changes are sufficient to constitute a new grammar.
+// In particular, this grammar attempts to be more syntactically precise, i.e., it parses less incorrect language syntax
+// that must be subsequently rejected by semantic checks.  Nevertheless, there are still several semantic checks
+// required and many are noted in the grammar. Finally, the grammar is extended with GCC and CFA language extensions.
+
+// Acknowledgments to Richard Bilson, Glen Ditchfield, and Rodolfo Gabriel Esteves who all helped when I got stuck with
+// the grammar.
+
+// The root language for this grammar is ANSI99/11 C. All of ANSI99/11 is parsed, except for:
+//
+// 1. designation with '=' (use ':' instead)
+//
+// Most of the syntactic extensions from ANSI90 to ANSI11 C are marked with the comment "C99/C11". This grammar also has
+// two levels of extensions. The first extensions cover most of the GCC C extensions, except for:
+//
+// 1. designation with and without '=' (use ':' instead)
+// 2. attributes not allowed in parenthesis of declarator
+//
+// All of the syntactic extensions for GCC C are marked with the comment "GCC". The second extensions are for Cforall
+// (CFA), which fixes several of C's outstanding problems and extends C with many modern language concepts. All of the
+// syntactic extensions for CFA C are marked with the comment "CFA". As noted above, there is one unreconcileable
+// parsing problem between C99 and CFA with respect to designators; this is discussed in detail before the "designation"
+// grammar rule.
+
+%{
+#define YYDEBUG_LEXER_TEXT (yylval)						// lexer loads this up each time
+#define YYDEBUG 1										// get the pretty debugging code to compile
+
+#undef __GNUC_MINOR__
+
+#include <cstdio>
+#include <stack>
+#include "lex.h"
+#include "parser.h"
+#include "ParseNode.h"
+#include "TypedefTable.h"
+#include "TypeData.h"
+#include "LinkageSpec.h"
+using namespace std;
+
+extern DeclarationNode * parseTree;
+extern LinkageSpec::Spec linkage;
+extern TypedefTable typedefTable;
+
+stack< LinkageSpec::Spec > linkageStack;
+
+void appendStr( string *to, string *from ) {
+	// "abc" "def" "ghi" => "abcdefghi", remove new text from quotes and insert before last quote in old string.
+	to->insert( to->length() - 1, from->substr( 1, from->length() - 2 ) );
+} // appendStr
+
+DeclarationNode * distAttr( DeclarationNode * specifier, DeclarationNode * declList ) { 
+	// distribute declaration_specifier across all declared variables, e.g., static, const, __attribute__.
+	DeclarationNode * cur = declList, * cl = specifier->clone();
+	cur->addType( specifier );
+	for ( cur = dynamic_cast< DeclarationNode * >( cur->get_next() ); cur != nullptr; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ) ) {
+		cl->cloneBaseType( cur );
+	} // for
+	delete cl;
+	return declList;
+} // distAttr
+
+void distExt( DeclarationNode * declaration ) { 
+	// distribute EXTENSION across all declarations.
+	for ( DeclarationNode *iter = declaration; iter != nullptr; iter = (DeclarationNode *)iter->get_next() ) {
+		iter->set_extension( true );
+	} // for
+} // distExt
+%}
+
+//************************* TERMINAL TOKENS ********************************
+
+// keywords
+%token TYPEDEF
+%token AUTO EXTERN REGISTER STATIC
+%token INLINE											// C99
+%token FORTRAN											// C99, extension ISO/IEC 9899:1999 Section J.5.9(1)
+%token CONST VOLATILE
+%token RESTRICT											// C99
+%token FORALL LVALUE									// CFA
+%token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED ZERO_T ONE_T
+%token VALIST											// GCC
+%token BOOL COMPLEX IMAGINARY							// C99
+%token TYPEOF LABEL										// GCC
+%token ENUM STRUCT UNION
+%token OTYPE FTYPE DTYPE TTYPE TRAIT							// CFA
+%token SIZEOF OFFSETOF
+%token ATTRIBUTE EXTENSION								// GCC
+%token IF ELSE SWITCH CASE DEFAULT DO WHILE FOR BREAK CONTINUE GOTO RETURN
+%token CHOOSE DISABLE ENABLE FALLTHRU TRY CATCH CATCHRESUME FINALLY THROW THROWRESUME AT	// CFA
+%token ASM												// C99, extension ISO/IEC 9899:1999 Section J.5.10(1)
+%token ALIGNAS ALIGNOF ATOMIC GENERIC NORETURN STATICASSERT THREADLOCAL // C11
+
+// names and constants: lexer differentiates between identifier and typedef names
+%token<tok> IDENTIFIER			QUOTED_IDENTIFIER		TYPEDEFname				TYPEGENname
+%token<tok> ATTR_IDENTIFIER		ATTR_TYPEDEFname		ATTR_TYPEGENname
+%token<tok> INTEGERconstant		CHARACTERconstant		STRINGliteral
+// Floating point constant is broken into three kinds of tokens because of the ambiguity with tuple indexing and
+// overloading constants 0/1, e.g., x.1 is lexed as (x)(.1), where (.1) is a factional constant, but is semantically
+// converted into the tuple index (.)(1). e.g., 3.x
+%token<tok>	REALDECIMALconstant	REALFRACTIONconstant	FLOATINGconstant
+%token<tok> ZERO				ONE						// CFA
+
+// multi-character operators
+%token ARROW											// ->
+%token ICR DECR											// ++	--
+%token LS RS											// <<	>>
+%token LE GE EQ NE										// <=	>=	==	!=
+%token ANDAND OROR										// &&	||
+%token ELLIPSIS											// ...
+
+%token MULTassign	DIVassign	MODassign				// *=	/=	%=/
+%token PLUSassign	MINUSassign							// +=	-=
+%token LSassign		RSassign							// <<=	>>=
+%token ANDassign	ERassign	ORassign				// &=	^=	|=
+
+%token ATassign											// @=
+
+// Types declaration
+%union
+{
+	Token tok;
+	ParseNode * pn;
+	ExpressionNode * en;
+	DeclarationNode * decl;
+	DeclarationNode::Aggregate aggKey;
+	DeclarationNode::TypeClass tclass;
+	StatementNode * sn;
+	ConstantExpr * constant;
+	ForCtl * fctl;
+	LabelNode * label;
+	InitializerNode * in;
+	OperKinds op;
+	std::string * str;
+	bool flag;
+}
+
+%type<tok> identifier  no_01_identifier  no_attr_identifier zero_one
+%type<tok> identifier_or_type_name  no_attr_identifier_or_type_name  no_01_identifier_or_type_name  attr_name
+%type<constant> string_literal
+%type<str> string_literal_list
+
+// expressions
+%type<en> constant
+%type<en> tuple							tuple_expression_list
+%type<op> ptrref_operator				unary_operator				assignment_operator
+%type<en> primary_expression			postfix_expression			unary_expression
+%type<en> cast_expression				multiplicative_expression	additive_expression			shift_expression
+%type<en> relational_expression			equality_expression			AND_expression				exclusive_OR_expression
+%type<en> inclusive_OR_expression		logical_AND_expression		logical_OR_expression		conditional_expression
+%type<en> constant_expression			assignment_expression		assignment_expression_opt
+%type<en> comma_expression				comma_expression_opt
+%type<en> argument_expression_list		argument_expression			assignment_opt
+%type<fctl> for_control_expression
+%type<en> subrange
+%type<decl> asm_name_opt
+%type<en> asm_operands_opt asm_operands_list asm_operand
+%type<label> label_list
+%type<en> asm_clobbers_list_opt
+%type<flag> asm_volatile_opt
+
+// statements
+%type<sn> labeled_statement				compound_statement			expression_statement		selection_statement
+%type<sn> iteration_statement			jump_statement				exception_statement			asm_statement
+%type<sn> fall_through_opt				fall_through
+%type<sn> statement						statement_list
+%type<sn> block_item_list				block_item
+%type<sn> case_clause
+%type<en> case_value
+%type<sn> case_value_list				case_label					case_label_list
+%type<sn> switch_clause_list_opt		switch_clause_list			choose_clause_list_opt		choose_clause_list
+%type<sn> handler_list					handler_clause				finally_clause
+
+// declarations
+%type<decl> abstract_declarator abstract_ptr abstract_array abstract_function array_dimension multi_array_dimension
+%type<decl> abstract_parameter_declarator abstract_parameter_ptr abstract_parameter_array abstract_parameter_function array_parameter_dimension array_parameter_1st_dimension
+%type<decl> abstract_parameter_declaration
+
+%type<aggKey> aggregate_key
+%type<decl>  aggregate_type
+
+%type<decl> assertion assertion_list_opt
+
+%type<en>   bit_subrange_size_opt bit_subrange_size
+
+%type<decl> basic_declaration_specifier basic_type_name basic_type_specifier direct_type_name indirect_type_name
+
+%type<decl> trait_declaration trait_declaration_list trait_declaring_list trait_specifier
+
+%type<decl> declaration declaration_list declaration_list_opt declaration_qualifier_list
+%type<decl> declaration_specifier declarator declaring_list
+
+%type<decl> elaborated_type
+
+%type<decl> enumerator_list enum_type
+%type<en> enumerator_value_opt
+
+%type<decl> exception_declaration external_definition external_definition_list external_definition_list_opt
+
+%type<decl> field_declaration field_declaration_list field_declarator field_declaring_list
+%type<en> field field_list field_name fraction_constants
+
+%type<decl> external_function_definition function_definition function_array function_declarator function_no_ptr function_ptr
+
+%type<decl> identifier_parameter_array identifier_parameter_declarator identifier_parameter_function
+%type<decl> identifier_parameter_ptr identifier_list
+
+%type<decl> cfa_abstract_array cfa_abstract_declarator_no_tuple cfa_abstract_declarator_tuple
+%type<decl> cfa_abstract_function cfa_abstract_parameter_declaration cfa_abstract_parameter_list
+%type<decl> cfa_abstract_ptr cfa_abstract_tuple
+
+%type<decl> cfa_array_parameter_1st_dimension
+
+%type<decl> cfa_trait_declaring_list cfa_declaration cfa_field_declaring_list
+%type<decl> cfa_function_declaration cfa_function_return cfa_function_specifier
+
+%type<decl> cfa_identifier_parameter_array cfa_identifier_parameter_declarator_no_tuple
+%type<decl> cfa_identifier_parameter_declarator_tuple cfa_identifier_parameter_ptr
+
+%type<decl> cfa_parameter_declaration cfa_parameter_list cfa_parameter_type_list cfa_parameter_type_list_opt
+
+%type<decl> cfa_typedef_declaration cfa_variable_declaration cfa_variable_specifier
+
+%type<decl> c_declaration
+%type<decl> KR_function_declarator KR_function_no_ptr KR_function_ptr KR_function_array
+%type<decl> KR_declaration_list KR_declaration_list_opt
+
+%type<decl> parameter_declaration parameter_list parameter_type_list
+%type<decl> parameter_type_list_opt
+
+%type<decl> paren_identifier paren_type
+
+%type<decl> storage_class storage_class_list
+
+%type<decl> sue_declaration_specifier sue_type_specifier
+
+%type<tclass> type_class
+%type<decl> type_declarator type_declarator_name type_declaring_list
+
+%type<decl> typedef typedef_type_specifier typedef_declaration typedef_declaration_specifier typedef_expression
+
+%type<decl> variable_type_redeclarator type_ptr type_array type_function
+
+%type<decl> type_parameter_redeclarator type_parameter_ptr type_parameter_array type_parameter_function
+%type<decl> typegen_declaration_specifier typegen_type_specifier typegen_name
+
+%type<decl> type_name type_name_no_function
+%type<decl> type_parameter type_parameter_list
+
+%type<en> type_name_list
+
+%type<decl> type_qualifier type_qualifier_name type_qualifier_list type_qualifier_list_opt type_specifier
+
+%type<decl> variable_declarator variable_ptr variable_array variable_function
+%type<decl> variable_abstract_declarator variable_abstract_ptr variable_abstract_array variable_abstract_function
+
+%type<decl> attribute_list_opt attribute_list attribute_name_list attribute attribute_name
+
+%type<flag> extension_opt
+
+// initializers
+%type<in>  initializer initializer_list initializer_opt
+
+// designators
+%type<en>  designator designator_list designation
+
+
+// Handle single shift/reduce conflict for dangling else by shifting the ELSE token. For example, this string
+// is ambiguous:
+// .---------.				matches IF '(' comma_expression ')' statement
+// if ( C ) S1 else S2
+// `-----------------'		matches IF '(' comma_expression ')' statement ELSE statement */
+
+%nonassoc THEN	// rule precedence for IF '(' comma_expression ')' statement
+%nonassoc ELSE	// token precedence for start of else clause in IF statement
+
+%start translation_unit									// parse-tree root
+
+%%
+//************************* Namespace Management ********************************
+
+// The grammar in the ANSI C standard is not strictly context-free, since it relies upon the distinct terminal symbols
+// "identifier" and "TYPEDEFname" that are lexically identical.  While it is possible to write a purely context-free
+// grammar, such a grammar would obscure the relationship between syntactic and semantic constructs.  Hence, this
+// grammar uses the ANSI style.
+//
+// Cforall compounds this problem by introducing type names local to the scope of a declaration (for instance, those
+// introduced through "forall" qualifiers), and by introducing "type generators" -- parameterized types.  This latter
+// type name creates a third class of identifiers that must be distinguished by the scanner.
+//
+// Since the scanner cannot distinguish among the different classes of identifiers without some context information, it
+// accesses a data structure (TypedefTable) to allow classification of an identifier that it has just read.  Semantic
+// actions during the parser update this data structure when the class of identifiers change.
+//
+// Because the Cforall language is block-scoped, there is the possibility that an identifier can change its class in a
+// local scope; it must revert to its original class at the end of the block.  Since type names can be local to a
+// particular declaration, each declaration is itself a scope.  This requires distinguishing between type names that are
+// local to the current declaration scope and those that persist past the end of the declaration (i.e., names defined in
+// "typedef" or "otype" declarations).
+//
+// The non-terminals "push" and "pop" derive the empty string; their only use is to denote the opening and closing of
+// scopes.  Every push must have a matching pop, although it is regrettable the matching pairs do not always occur
+// within the same rule.  These non-terminals may appear in more contexts than strictly necessary from a semantic point
+// of view.  Unfortunately, these extra rules are necessary to prevent parsing conflicts -- the parser may not have
+// enough context and look-ahead information to decide whether a new scope is necessary, so the effect of these extra
+// rules is to open a new scope unconditionally.  As the grammar evolves, it may be neccesary to add or move around
+// "push" and "pop" nonterminals to resolve conflicts of this sort.
+
+push:
+		{ typedefTable.enterScope(); }
+	;
+
+pop:
+		{ typedefTable.leaveScope(); }
+	;
+
+//************************* CONSTANTS ********************************
+
+constant:
+		// ENUMERATIONconstant is not included here; it is treated as a variable with type "enumeration constant".
+	INTEGERconstant								{ $$ = new ExpressionNode( build_constantInteger( *$1 ) ); }
+	| REALDECIMALconstant						{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
+	| REALFRACTIONconstant						{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
+	| FLOATINGconstant							{ $$ = new ExpressionNode( build_constantFloat( *$1 ) ); }
+	| CHARACTERconstant							{ $$ = new ExpressionNode( build_constantChar( *$1 ) ); }
+	;
+
+identifier:
+	IDENTIFIER
+	| ATTR_IDENTIFIER									// CFA
+	| zero_one											// CFA
+	;
+
+no_01_identifier:
+	IDENTIFIER
+	| ATTR_IDENTIFIER									// CFA
+	;
+
+no_attr_identifier:
+	IDENTIFIER
+	| zero_one											// CFA
+	;
+
+zero_one:												// CFA
+	ZERO
+	| ONE
+	;
+
+string_literal:
+	string_literal_list							{ $$ = build_constantStr( *$1 ); }
+	;
+
+string_literal_list:									// juxtaposed strings are concatenated
+	STRINGliteral								{ $$ = $1; } // conversion from tok to str
+	| string_literal_list STRINGliteral
+		{
+			appendStr( $1, $2 );						// append 2nd juxtaposed string to 1st
+			delete $2;									// allocated by lexer
+			$$ = $1;									// conversion from tok to str
+		}
+	;
+
+//************************* EXPRESSIONS ********************************
+
+primary_expression:
+	IDENTIFIER											// typedef name cannot be used as a variable name
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
+	| zero_one
+		{ $$ = new ExpressionNode( build_constantZeroOne( *$1 ) ); }
+	| tuple
+	| '(' comma_expression ')'
+		{ $$ = $2; }
+	| '(' compound_statement ')'						// GCC, lambda expression
+		{ $$ = new ExpressionNode( build_valexpr( $2 ) ); }
+	;
+
+postfix_expression:
+	primary_expression
+	| postfix_expression '[' push assignment_expression pop ']'
+		// CFA, comma_expression disallowed in this context because it results in a common user error: subscripting a
+		// matrix with x[i,j] instead of x[i][j]. While this change is not backwards compatible, there seems to be
+		// little advantage to this feature and many disadvantages. It is possible to write x[(i,j)] in CFA, which is
+		// equivalent to the old x[i,j].
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Index, $1, $4 ) ); }
+	| postfix_expression '(' argument_expression_list ')'
+		{ $$ = new ExpressionNode( build_func( $1, $3 ) ); }
+	| postfix_expression '.' no_attr_identifier
+		{ $$ = new ExpressionNode( build_fieldSel( $1, build_varref( $3 ) ) ); }
+	| postfix_expression '.' '[' push field_list pop ']' // CFA, tuple field selector
+		{ $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $5 ) ) ); }
+	| postfix_expression REALFRACTIONconstant			// CFA, tuple index
+		{ $$ = new ExpressionNode( build_fieldSel( $1, build_field_name_REALFRACTIONconstant( *$2 ) ) ); }
+	| postfix_expression ARROW no_attr_identifier
+		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_varref( $3 ) ) ); }
+	| postfix_expression ARROW '[' push field_list pop ']' // CFA, tuple field selector
+			{ $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $5 ) ) ); }
+	| postfix_expression ICR
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::IncrPost, $1 ) ); }
+	| postfix_expression DECR
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::DecrPost, $1 ) ); }
+	| '(' type_name_no_function ')' '{' initializer_list comma_opt '}' // C99
+		{ $$ = new ExpressionNode( build_compoundLiteral( $2, new InitializerNode( $5, true ) ) ); }
+	| postfix_expression '{' argument_expression_list '}' // CFA
+		{
+			Token fn;
+			fn.str = new std::string( "?{}" );			// location undefined - use location of '{'?
+			$$ = new ExpressionNode( new ConstructorExpr( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $1 )->set_last( $3 ) ) ) );
+		}
+	;
+
+argument_expression_list:
+	argument_expression
+	| argument_expression_list ',' argument_expression
+		{ $$ = (ExpressionNode *)( $1->set_last( $3 )); }
+	;
+
+argument_expression:
+	// empty
+		{ $$ = nullptr; }								// use default argument
+	| assignment_expression
+	;
+
+field_list:												// CFA, tuple field selector
+	field
+	| field_list ',' field						{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
+	;
+
+field:													// CFA, tuple field selector
+	field_name
+	| REALDECIMALconstant field
+		{ $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_REALDECIMALconstant( *$1 ) ), maybeMoveBuild<Expression>( $2 ) ) ); }
+	| REALDECIMALconstant '[' push field_list pop ']'
+		{ $$ = new ExpressionNode( build_fieldSel( new ExpressionNode( build_field_name_REALDECIMALconstant( *$1 ) ), build_tuple( $4 ) ) ); }
+	| field_name '.' field
+		{ $$ = new ExpressionNode( build_fieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); }
+	| field_name '.' '[' push field_list pop ']'
+		{ $$ = new ExpressionNode( build_fieldSel( $1, build_tuple( $5 ) ) ); }
+	| field_name ARROW field
+		{ $$ = new ExpressionNode( build_pfieldSel( $1, maybeMoveBuild<Expression>( $3 ) ) ); }
+	| field_name ARROW '[' push field_list pop ']'
+		{ $$ = new ExpressionNode( build_pfieldSel( $1, build_tuple( $5 ) ) ); }
+	;
+
+field_name:
+	INTEGERconstant	fraction_constants
+		{ $$ = new ExpressionNode( build_field_name_fraction_constants( build_constantInteger( *$1 ), $2 ) ); }
+	| FLOATINGconstant fraction_constants
+		{ $$ = new ExpressionNode( build_field_name_fraction_constants( build_field_name_FLOATINGconstant( *$1 ), $2 ) ); }
+	| no_attr_identifier fraction_constants
+		{
+			if( (*$1) == "0" || (*$1) == "1" ) {
+				$$ = new ExpressionNode( build_field_name_fraction_constants( build_constantZeroOne( *$1 ), $2 ) );
+			} else {
+				$$ = new ExpressionNode( build_field_name_fraction_constants( build_varref( $1 ), $2 ) );
+			}
+		}
+	;
+
+fraction_constants:
+	// empty
+		{ $$ = nullptr; }
+	| fraction_constants REALFRACTIONconstant
+		{
+			Expression * constant = build_field_name_REALFRACTIONconstant( *$2 );
+			$$ = $1 != nullptr ? new ExpressionNode( build_fieldSel( $1,  constant ) ) : new ExpressionNode( constant );
+		}
+	;
+
+unary_expression:
+	postfix_expression
+		// first location where constant/string can have operator applied: sizeof 3/sizeof "abc" still requires
+		// semantics checks, e.g., ++3, 3--, *3, &&3
+	| constant
+		{ $$ = $1; }
+	| string_literal
+		{ $$ = new ExpressionNode( $1 ); }
+	| EXTENSION cast_expression							// GCC
+		{ $$ = $2->set_extension( true ); }
+		// '*' ('&') is separated from unary_operator because of shift/reduce conflict in:
+		//		{ * X; }	 // dereference X
+		//		{ * int X; } // CFA declaration of pointer to int
+	| ptrref_operator cast_expression					// CFA
+		{
+			switch ( $1 ) {
+			  case OperKinds::AddressOf:
+				$$ = new ExpressionNode( build_addressOf( $2 ) );
+				break;
+			  case OperKinds::PointTo:
+				$$ = new ExpressionNode( build_unary_val( $1, $2 ) );
+				break;
+			  default:
+				assert( false );
+			}
+		}
+	| unary_operator cast_expression
+	  	{ $$ = new ExpressionNode( build_unary_val( $1, $2 ) ); }
+	| ICR unary_expression
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::Incr, $2 ) ); }
+	| DECR unary_expression
+	  	{ $$ = new ExpressionNode( build_unary_ptr( OperKinds::Decr, $2 ) ); }
+	| SIZEOF unary_expression
+		{ $$ = new ExpressionNode( build_sizeOfexpr( $2 ) ); }
+	| SIZEOF '(' type_name_no_function ')'
+		{ $$ = new ExpressionNode( build_sizeOftype( $3 ) ); }
+	| ALIGNOF unary_expression							// GCC, variable alignment
+		{ $$ = new ExpressionNode( build_alignOfexpr( $2 ) ); }
+	| ALIGNOF '(' type_name_no_function ')'				// GCC, type alignment
+		{ $$ = new ExpressionNode( build_alignOftype( $3 ) ); }
+	| OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
+		{ $$ = new ExpressionNode( build_offsetOf( $3, build_varref( $5 ) ) ); }
+	| ATTR_IDENTIFIER
+		{ $$ = new ExpressionNode( build_attrexpr( build_varref( $1 ), nullptr ) ); }
+	| ATTR_IDENTIFIER '(' argument_expression ')'
+		{ $$ = new ExpressionNode( build_attrexpr( build_varref( $1 ), $3 ) ); }
+	| ATTR_IDENTIFIER '(' type_name ')'
+		{ $$ = new ExpressionNode( build_attrtype( build_varref( $1 ), $3 ) ); }
+//	| ANDAND IDENTIFIER									// GCC, address of label
+//		{ $$ = new ExpressionNode( new OperatorNode( OperKinds::LabelAddress ), new ExpressionNode( build_varref( $2, true ) ); }
+	;
+
+ptrref_operator:
+	'*'											{ $$ = OperKinds::PointTo; }
+	| '&'										{ $$ = OperKinds::AddressOf; }
+		// GCC, address of label must be handled by semantic check for ref,ref,label
+//	| ANDAND									{ $$ = OperKinds::And; }
+	;
+
+unary_operator:
+	'+'											{ $$ = OperKinds::UnPlus; }
+	| '-'										{ $$ = OperKinds::UnMinus; }
+	| '!'										{ $$ = OperKinds::Neg; }
+	| '~'										{ $$ = OperKinds::BitNeg; }
+	;
+
+cast_expression:
+	unary_expression
+	| '(' type_name_no_function ')' cast_expression
+		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
+//	| '(' type_name_no_function ')' tuple
+//		{ $$ = new ExpressionNode( build_cast( $2, $4 ) ); }
+	;
+
+multiplicative_expression:
+	cast_expression
+	| multiplicative_expression '*' cast_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mul, $1, $3 ) ); }
+	| multiplicative_expression '/' cast_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Div, $1, $3 ) ); }
+	| multiplicative_expression '%' cast_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Mod, $1, $3 ) ); }
+	;
+
+additive_expression:
+	multiplicative_expression
+	| additive_expression '+' multiplicative_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Plus, $1, $3 ) ); }
+	| additive_expression '-' multiplicative_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Minus, $1, $3 ) ); }
+	;
+
+shift_expression:
+	additive_expression
+	| shift_expression LS additive_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LShift, $1, $3 ) ); }
+	| shift_expression RS additive_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::RShift, $1, $3 ) ); }
+	;
+
+relational_expression:
+	shift_expression
+	| relational_expression '<' shift_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LThan, $1, $3 ) ); }
+	| relational_expression '>' shift_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::GThan, $1, $3 ) ); }
+	| relational_expression LE shift_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::LEThan, $1, $3 ) ); }
+	| relational_expression GE shift_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::GEThan, $1, $3 ) ); }
+	;
+
+equality_expression:
+	relational_expression
+	| equality_expression EQ relational_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Eq, $1, $3 ) ); }
+	| equality_expression NE relational_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Neq, $1, $3 ) ); }
+	;
+
+AND_expression:
+	equality_expression
+	| AND_expression '&' equality_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::BitAnd, $1, $3 ) ); }
+	;
+
+exclusive_OR_expression:
+	AND_expression
+	| exclusive_OR_expression '^' AND_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::Xor, $1, $3 ) ); }
+	;
+
+inclusive_OR_expression:
+	exclusive_OR_expression
+	| inclusive_OR_expression '|' exclusive_OR_expression
+		{ $$ = new ExpressionNode( build_binary_val( OperKinds::BitOr, $1, $3 ) ); }
+	;
+
+logical_AND_expression:
+	inclusive_OR_expression
+	| logical_AND_expression ANDAND inclusive_OR_expression
+		{ $$ = new ExpressionNode( build_and_or( $1, $3, true ) ); }
+	;
+
+logical_OR_expression:
+	logical_AND_expression
+	| logical_OR_expression OROR logical_AND_expression
+		{ $$ = new ExpressionNode( build_and_or( $1, $3, false ) ); }
+	;
+
+conditional_expression:
+	logical_OR_expression
+	| logical_OR_expression '?' comma_expression ':' conditional_expression
+		{ $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
+		// FIX ME: this hack computes $1 twice
+	| logical_OR_expression '?' /* empty */ ':' conditional_expression // GCC, omitted first operand
+		{ $$ = new ExpressionNode( build_cond( $1, $1, $4 ) ); }
+//	| logical_OR_expression '?' comma_expression ':' tuple // CFA, tuple expression
+//		{ $$ = new ExpressionNode( build_cond( $1, $3, $5 ) ); }
+	;
+
+constant_expression:
+	conditional_expression
+	;
+
+assignment_expression:
+		// CFA, assignment is separated from assignment_operator to ensure no assignment operations for tuples
+	conditional_expression
+	| unary_expression assignment_operator assignment_expression
+		{ $$ = new ExpressionNode( build_binary_ptr( $2, $1, $3 ) ); }
+//	| tuple assignment_opt								// CFA, tuple expression
+//		{ $$ = ( $2 == 0 ) ? $1 : new ExpressionNode( build_binary_ptr( OperKinds::Assign, $1, $2 ) ); }
+	;
+
+assignment_expression_opt:
+	// empty
+		{ $$ = nullptr; }
+	| assignment_expression
+	;
+
+assignment_operator:
+	'='											{ $$ = OperKinds::Assign; }
+	| ATassign									{ $$ = OperKinds::AtAssn; }
+	| MULTassign								{ $$ = OperKinds::MulAssn; }
+	| DIVassign									{ $$ = OperKinds::DivAssn; }
+	| MODassign									{ $$ = OperKinds::ModAssn; }
+	| PLUSassign								{ $$ = OperKinds::PlusAssn; }
+	| MINUSassign								{ $$ = OperKinds::MinusAssn; }
+	| LSassign									{ $$ = OperKinds::LSAssn; }
+	| RSassign									{ $$ = OperKinds::RSAssn; }
+	| ANDassign									{ $$ = OperKinds::AndAssn; }
+	| ERassign									{ $$ = OperKinds::ERAssn; }
+	| ORassign									{ $$ = OperKinds::OrAssn; }
+	;
+
+tuple:													// CFA, tuple
+		// CFA, one assignment_expression is factored out of comma_expression to eliminate a shift/reduce conflict with
+		// comma_expression in cfa_identifier_parameter_array and cfa_abstract_array
+//	'[' ']'
+//		{ $$ = new ExpressionNode( build_tuple() ); }
+//	'[' push assignment_expression pop ']'
+//		{ $$ = new ExpressionNode( build_tuple( $3 ) ); }
+	'[' push ',' tuple_expression_list pop ']'
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)(new ExpressionNode( nullptr ) )->set_last( $4 ) ) ); }
+	| '[' push assignment_expression ',' tuple_expression_list pop ']'
+		{ $$ = new ExpressionNode( build_tuple( (ExpressionNode *)$3->set_last( $5 ) ) ); }
+	;
+
+tuple_expression_list:
+	assignment_expression_opt
+	| tuple_expression_list ',' assignment_expression_opt
+		{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
+	;
+
+comma_expression:
+	assignment_expression
+	| comma_expression ',' assignment_expression
+		{ $$ = new ExpressionNode( build_comma( $1, $3 ) ); }
+	;
+
+comma_expression_opt:
+	// empty
+		{ $$ = nullptr; }
+	| comma_expression
+	;
+
+//*************************** STATEMENTS *******************************
+
+statement:
+	labeled_statement
+	| compound_statement
+	| expression_statement						{ $$ = $1; }
+	| selection_statement
+	| iteration_statement
+	| jump_statement
+	| exception_statement
+	| asm_statement
+	| '^' postfix_expression '{' argument_expression_list '}' ';' // CFA
+		{
+			Token fn;
+			fn.str = new string( "^?{}" );				// location undefined
+			$$ = new StatementNode( build_expr( new ExpressionNode( build_func( new ExpressionNode( build_varref( fn ) ), (ExpressionNode *)( $2 )->set_last( $4 ) ) ) ) );
+		}
+	;
+
+labeled_statement:
+		// labels cannot be identifiers 0 or 1 or ATTR_IDENTIFIER
+	identifier_or_type_name ':' attribute_list_opt statement
+		{
+			$$ = $4->add_label( $1, $3 );
+		}
+	;
+
+compound_statement:
+	'{' '}'
+		{ $$ = new StatementNode( build_compound( (StatementNode *)0 ) ); }
+	| '{'
+		// Two scopes are necessary because the block itself has a scope, but every declaration within the block also
+		// requires its own scope.
+	  push push
+	  local_label_declaration_opt						// GCC, local labels
+	  block_item_list									// C99, intermix declarations and statements
+	  pop '}'
+		{ $$ = new StatementNode( build_compound( $5 ) ); }
+	;
+
+block_item_list:										// C99
+	block_item
+	| block_item_list push block_item
+		{ if ( $1 != 0 ) { $1->set_last( $3 ); $$ = $1; } }
+	;
+
+block_item:
+	declaration											// CFA, new & old style declarations
+		{ $$ = new StatementNode( $1 ); }
+	| EXTENSION declaration								// GCC
+		{
+			distExt( $2 );
+			$$ = new StatementNode( $2 );
+		}
+	| function_definition
+		{ $$ = new StatementNode( $1 ); }
+	| EXTENSION function_definition						// GCC
+		{
+			distExt( $2 );
+			$$ = new StatementNode( $2 );
+		}
+	| statement pop
+	;
+
+statement_list:
+	statement
+	| statement_list statement
+		{ if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; } }
+	;
+
+expression_statement:
+	comma_expression_opt ';'
+		{ $$ = new StatementNode( build_expr( $1 ) ); }
+	;
+
+selection_statement:
+	IF '(' comma_expression ')' statement				%prec THEN
+		// explicitly deal with the shift/reduce conflict on if/else
+		{ $$ = new StatementNode( build_if( $3, $5, nullptr ) ); }
+	| IF '(' comma_expression ')' statement ELSE statement
+		{ $$ = new StatementNode( build_if( $3, $5, $7 ) ); }
+	| SWITCH '(' comma_expression ')' case_clause		// CFA
+		{ $$ = new StatementNode( build_switch( $3, $5 ) ); }
+	| SWITCH '(' comma_expression ')' '{' push declaration_list_opt switch_clause_list_opt '}' // CFA
+		{
+			StatementNode *sw = new StatementNode( build_switch( $3, $8 ) );
+			// The semantics of the declaration list is changed to include associated initialization, which is performed
+			// *before* the transfer to the appropriate case clause by hoisting the declarations into a compound
+			// statement around the switch.  Statements after the initial declaration list can never be executed, and
+			// therefore, are removed from the grammar even though C allows it. The change also applies to choose
+			// statement.
+			$$ = $7 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
+		}
+	| CHOOSE '(' comma_expression ')' case_clause		// CFA
+		{ $$ = new StatementNode( build_switch( $3, $5 ) ); }
+	| CHOOSE '(' comma_expression ')' '{' push declaration_list_opt choose_clause_list_opt '}' // CFA
+		{
+			StatementNode *sw = new StatementNode( build_switch( $3, $8 ) );
+			$$ = $7 ? new StatementNode( build_compound( (StatementNode *)((new StatementNode( $7 ))->set_last( sw )) ) ) : sw;
+		}
+	;
+
+// CASE and DEFAULT clauses are only allowed in the SWITCH statement, precluding Duff's device. In addition, a case
+// clause allows a list of values and subranges.
+
+case_value:												// CFA
+	constant_expression							{ $$ = $1; }
+	| constant_expression ELLIPSIS constant_expression	// GCC, subrange
+		{ $$ = new ExpressionNode( build_range( $1, $3 ) ); }
+	| subrange											// CFA, subrange
+	;
+
+case_value_list:										// CFA
+	case_value									{ $$ = new StatementNode( build_case( $1 ) ); }
+		// convert case list, e.g., "case 1, 3, 5:" into "case 1: case 3: case 5"
+	| case_value_list ',' case_value			{ $$ = (StatementNode *)($1->set_last( new StatementNode( build_case( $3 ) ) ) ); }
+	;
+
+case_label:												// CFA
+	CASE case_value_list ':'					{ $$ = $2; }
+	| DEFAULT ':'								{ $$ = new StatementNode( build_default() ); }
+		// A semantic check is required to ensure only one default clause per switch/choose statement.
+	;
+
+case_label_list:										// CFA
+	case_label
+	| case_label_list case_label				{ $$ = (StatementNode *)( $1->set_last( $2 )); }
+	;
+
+case_clause:											// CFA
+	case_label_list statement					{ $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); }
+	;
+
+switch_clause_list_opt:									// CFA
+	// empty
+		{ $$ = nullptr; }
+	| switch_clause_list
+	;
+
+switch_clause_list:										// CFA
+	case_label_list statement_list
+		{ $$ = $1->append_last_case( new StatementNode( build_compound( $2 ) ) ); }
+	| switch_clause_list case_label_list statement_list
+		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( $3 ) ) ) ) ); }
+	;
+
+choose_clause_list_opt:									// CFA
+	// empty
+		{ $$ = nullptr; }
+	| choose_clause_list
+	;
+
+choose_clause_list:										// CFA
+	case_label_list fall_through
+		{ $$ = $1->append_last_case( $2 ); }
+	| case_label_list statement_list fall_through_opt
+		{ $$ = $1->append_last_case( new StatementNode( build_compound( (StatementNode *)$2->set_last( $3 ) ) ) ); }
+	| choose_clause_list case_label_list fall_through
+		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( $3 ))); }
+	| choose_clause_list case_label_list statement_list fall_through_opt
+		{ $$ = (StatementNode *)( $1->set_last( $2->append_last_case( new StatementNode( build_compound( (StatementNode *)$3->set_last( $4 ) ) ) ) ) ); }
+	;
+
+fall_through_opt:										// CFA
+	// empty
+		{ $$ = new StatementNode( build_branch( BranchStmt::Break ) ); } // insert implicit break
+	| fall_through
+	;
+
+fall_through:											// CFA
+	FALLTHRU
+		{ $$ = nullptr; }
+	| FALLTHRU ';'
+		{ $$ = nullptr; }
+	;
+
+iteration_statement:
+	WHILE '(' comma_expression ')' statement
+		{ $$ = new StatementNode( build_while( $3, $5 ) ); }
+	| DO statement WHILE '(' comma_expression ')' ';'
+		{ $$ = new StatementNode( build_while( $5, $2, true ) ); }
+	| FOR '(' push for_control_expression ')' statement
+		{ $$ = new StatementNode( build_for( $4, $6 ) ); }
+	;
+
+for_control_expression:
+	comma_expression_opt pop ';' comma_expression_opt ';' comma_expression_opt
+		{ $$ = new ForCtl( $1, $4, $6 ); }
+	| declaration comma_expression_opt ';' comma_expression_opt // C99
+		{ $$ = new ForCtl( $1, $2, $4 ); }
+ 	;
+
+jump_statement:
+	GOTO identifier_or_type_name ';'
+		{ $$ = new StatementNode( build_branch( $2, BranchStmt::Goto ) ); }
+	| GOTO '*' comma_expression ';'						// GCC, computed goto
+		// The syntax for the GCC computed goto violates normal expression precedence, e.g., goto *i+3; => goto *(i+3);
+		// whereas normal operator precedence yields goto (*i)+3;
+		{ $$ = new StatementNode( build_computedgoto( $3 ) ); }
+	| CONTINUE ';'
+		// A semantic check is required to ensure this statement appears only in the body of an iteration statement.
+		{ $$ = new StatementNode( build_branch( BranchStmt::Continue ) ); }
+	| CONTINUE identifier_or_type_name ';'				// CFA, multi-level continue
+		// A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
+		// the target of the transfer appears only at the start of an iteration statement.
+		{ $$ = new StatementNode( build_branch( $2, BranchStmt::Continue ) ); }
+	| BREAK ';'
+		// A semantic check is required to ensure this statement appears only in the body of an iteration statement.
+		{ $$ = new StatementNode( build_branch( BranchStmt::Break ) ); }
+	| BREAK identifier_or_type_name ';'					// CFA, multi-level exit
+		// A semantic check is required to ensure this statement appears only in the body of an iteration statement, and
+		// the target of the transfer appears only at the start of an iteration statement.
+		{ $$ = new StatementNode( build_branch( $2, BranchStmt::Break ) ); }
+	| RETURN comma_expression_opt ';'
+		{ $$ = new StatementNode( build_return( $2 ) ); }
+	| THROW assignment_expression_opt ';'				// handles rethrow
+		{ $$ = new StatementNode( build_throw( $2 ) ); }
+	| THROWRESUME assignment_expression_opt ';'			// handles reresume
+		{ $$ = new StatementNode( build_throw( $2 ) ); }
+	| THROWRESUME assignment_expression_opt AT assignment_expression ';' // handles reresume
+		{ $$ = new StatementNode( build_throw( $2 ) ); }
+	;
+
+exception_statement:
+	TRY compound_statement handler_list
+		{ $$ = new StatementNode( build_try( $2, $3, 0 ) ); }
+	| TRY compound_statement finally_clause
+		{ $$ = new StatementNode( build_try( $2, 0, $3 ) ); }
+	| TRY compound_statement handler_list finally_clause
+		{ $$ = new StatementNode( build_try( $2, $3, $4 ) ); }
+	;
+
+handler_list:
+	handler_clause
+		// ISO/IEC 9899:1999 Section 15.3(6 ) If present, a "..." handler shall be the last handler for its try block.
+	| CATCH '(' ELLIPSIS ')' compound_statement
+		{ $$ = new StatementNode( build_catch( 0, $5, true ) ); }
+	| handler_clause CATCH '(' ELLIPSIS ')' compound_statement
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); }
+	| CATCHRESUME '(' ELLIPSIS ')' compound_statement
+		{ $$ = new StatementNode( build_catch( 0, $5, true ) ); }
+	| handler_clause CATCHRESUME '(' ELLIPSIS ')' compound_statement
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( 0, $6, true ) ) ); }
+	;
+
+handler_clause:
+	CATCH '(' push push exception_declaration pop ')' compound_statement pop
+		{ $$ = new StatementNode( build_catch( $5, $8 ) ); }
+	| handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }
+	| CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
+		{ $$ = new StatementNode( build_catch( $5, $8 ) ); }
+	| handler_clause CATCHRESUME '(' push push exception_declaration pop ')' compound_statement pop
+		{ $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( $6, $9 ) ) ); }
+	;
+
+finally_clause:
+	FINALLY compound_statement
+		{
+			$$ = new StatementNode( build_finally( $2 ) );
+		}
+	;
+
+exception_declaration:
+		// A semantic check is required to ensure type_specifier does not create a new type, e.g.:
+		//
+		//		catch ( struct { int i; } x ) ...
+		//
+		// This new type cannot catch any thrown type because of name equivalence among types.
+	type_specifier
+	| type_specifier declarator
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			$$ = $2->addType( $1 );
+		}
+	| type_specifier variable_abstract_declarator
+		{ $$ = $2->addType( $1 ); }
+	| cfa_abstract_declarator_tuple no_attr_identifier	// CFA
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			$$ = $1->addName( $2 );
+		}
+	| cfa_abstract_declarator_tuple						// CFA
+	;
+
+asm_statement:
+	ASM asm_volatile_opt '(' string_literal ')' ';'
+		{ $$ = new StatementNode( build_asmstmt( $2, $4, 0 ) ); }
+	| ASM asm_volatile_opt '(' string_literal ':' asm_operands_opt ')' ';' // remaining GCC
+		{ $$ = new StatementNode( build_asmstmt( $2, $4, $6 ) ); }
+	| ASM asm_volatile_opt '(' string_literal ':' asm_operands_opt ':' asm_operands_opt ')' ';'
+		{ $$ = new StatementNode( build_asmstmt( $2, $4, $6, $8 ) ); }
+	| ASM asm_volatile_opt '(' string_literal ':' asm_operands_opt ':' asm_operands_opt ':' asm_clobbers_list_opt ')' ';'
+		{ $$ = new StatementNode( build_asmstmt( $2, $4, $6, $8, $10 ) ); }
+	| ASM asm_volatile_opt GOTO '(' string_literal ':' ':' asm_operands_opt ':' asm_clobbers_list_opt ':' label_list ')' ';'
+		{ $$ = new StatementNode( build_asmstmt( $2, $5, 0, $8, $10, $12 ) ); }
+	;
+
+asm_volatile_opt:										// GCC
+	// empty
+		{ $$ = false; }
+	| VOLATILE
+		{ $$ = true; }
+	;
+
+asm_operands_opt:										// GCC
+	// empty
+		{ $$ = nullptr; }								// use default argument
+	| asm_operands_list
+	;
+
+asm_operands_list:										// GCC
+	asm_operand
+	| asm_operands_list ',' asm_operand
+		{ $$ = (ExpressionNode *)$1->set_last( $3 ); }
+	;
+
+asm_operand:											// GCC
+	string_literal '(' constant_expression ')'
+		{ $$ = new ExpressionNode( build_asmexpr( 0, $1, $3 ) ); }
+	| '[' constant_expression ']' string_literal '(' constant_expression ')'
+		{ $$ = new ExpressionNode( build_asmexpr( $2, $4, $6 ) ); }
+	;
+
+asm_clobbers_list_opt:									// GCC
+	// empty
+		{ $$ = nullptr; }								// use default argument
+	| string_literal
+		{ $$ = new ExpressionNode( $1 ); }
+	| asm_clobbers_list_opt ',' string_literal
+		// set_last return ParseNode *
+		{ $$ = (ExpressionNode *)$1->set_last( new ExpressionNode( $3 ) ); }
+	;
+
+label_list:
+	no_attr_identifier
+		{
+			$$ = new LabelNode(); $$->labels.push_back( *$1 );
+			delete $1;									// allocated by lexer
+		}
+	| label_list ',' no_attr_identifier
+		{
+			$$ = $1; $1->labels.push_back( *$3 );
+			delete $3;									// allocated by lexer
+		}
+	;
+
+//******************************* DECLARATIONS *********************************
+
+declaration_list_opt:									// used at beginning of switch statement
+	pop
+		{ $$ = nullptr; }
+	| declaration_list
+	;
+
+declaration_list:
+	declaration
+	| declaration_list push declaration
+		{ $$ = $1->appendList( $3 ); }
+	;
+
+KR_declaration_list_opt:								// used to declare parameter types in K&R style functions
+	pop
+		{ $$ = nullptr; }
+	| KR_declaration_list
+	;
+
+KR_declaration_list:
+	c_declaration
+	| KR_declaration_list push c_declaration
+		{ $$ = $1->appendList( $3 ); }
+	;
+
+local_label_declaration_opt:							// GCC, local label
+	// empty
+	| local_label_declaration_list
+	;
+
+local_label_declaration_list:							// GCC, local label
+	LABEL local_label_list ';'
+	| local_label_declaration_list LABEL local_label_list ';'
+	;
+
+local_label_list:										// GCC, local label
+	no_attr_identifier_or_type_name				{}
+	| local_label_list ',' no_attr_identifier_or_type_name {}
+	;
+
+declaration:											// CFA, new & old style declarations
+	cfa_declaration
+	| c_declaration
+	;
+
+// C declaration syntax is notoriously confusing and error prone. Cforall provides its own type, variable and function
+// declarations. CFA declarations use the same declaration tokens as in C; however, CFA places declaration modifiers to
+// the left of the base type, while C declarations place modifiers to the right of the base type. CFA declaration
+// modifiers are interpreted from left to right and the entire type specification is distributed across all variables in
+// the declaration list (as in Pascal).  ANSI C and the new CFA declarations may appear together in the same program
+// block, but cannot be mixed within a specific declaration.
+//
+//			CFA					C
+//		[10] int x;			int x[10];		// array of 10 integers
+//		[10] * char y;		char *y[10];	// array of 10 pointers to char
+
+cfa_declaration:										// CFA
+	cfa_variable_declaration pop ';'
+	| cfa_typedef_declaration pop ';'
+	| cfa_function_declaration pop ';'
+	| type_declaring_list pop ';'
+	| trait_specifier pop ';'
+	;
+
+cfa_variable_declaration:								// CFA
+	cfa_variable_specifier initializer_opt
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			$$ = $1->addInitializer( $2 );
+		}
+	| declaration_qualifier_list cfa_variable_specifier initializer_opt
+		// declaration_qualifier_list also includes type_qualifier_list, so a semantic check is necessary to preclude
+		// them as a type_qualifier cannot appear in that context.
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			$$ = $2->addQualifiers( $1 )->addInitializer( $3 );;
+		}
+	| cfa_variable_declaration pop ',' push identifier_or_type_name initializer_opt
+		{
+			typedefTable.addToEnclosingScope( *$5, TypedefTable::ID );
+			$$ = $1->appendList( $1->cloneType( $5 )->addInitializer( $6 ) );
+		}
+	;
+
+cfa_variable_specifier:									// CFA
+		// A semantic check is required to ensure asm_name only appears on declarations with implicit or explicit static
+		// storage-class
+	cfa_abstract_declarator_no_tuple identifier_or_type_name asm_name_opt
+		{
+			typedefTable.setNextIdentifier( *$2 );
+			$$ = $1->addName( $2 )->addAsmName( $3 );
+		}
+	| cfa_abstract_tuple identifier_or_type_name asm_name_opt
+		{
+			typedefTable.setNextIdentifier( *$2 );
+			$$ = $1->addName( $2 )->addAsmName( $3 );
+		}
+	| type_qualifier_list cfa_abstract_tuple identifier_or_type_name asm_name_opt
+		{
+			typedefTable.setNextIdentifier( *$3 );
+			$$ = $2->addQualifiers( $1 )->addName( $3 )->addAsmName( $4 );
+		}
+	;
+
+cfa_function_declaration:								// CFA
+	cfa_function_specifier
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			$$ = $1;
+		}
+	| type_qualifier_list cfa_function_specifier
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			$$ = $2->addQualifiers( $1 );
+		}
+	| declaration_qualifier_list cfa_function_specifier
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			$$ = $2->addQualifiers( $1 );
+		}
+	| declaration_qualifier_list type_qualifier_list cfa_function_specifier
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			$$ = $3->addQualifiers( $1 )->addQualifiers( $2 );
+		}
+	| cfa_function_declaration pop ',' push identifier_or_type_name
+		{
+			typedefTable.addToEnclosingScope( *$5, TypedefTable::ID );
+			$$ = $1->appendList( $1->cloneType( $5 ) );
+		}
+	;
+
+cfa_function_specifier:									// CFA
+//	'[' ']' identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')' // S/R conflict
+//		{
+//			$$ = DeclarationNode::newFunction( $3, DeclarationNode::newTuple( 0 ), $6, 0, true );
+//		}
+//	'[' ']' identifier '(' push cfa_parameter_type_list_opt pop ')'
+//		{
+//			typedefTable.setNextIdentifier( *$5 );
+//			$$ = DeclarationNode::newFunction( $5, DeclarationNode::newTuple( 0 ), $8, 0, true );
+//		}
+//	| '[' ']' TYPEDEFname '(' push cfa_parameter_type_list_opt pop ')'
+//		{
+//			typedefTable.setNextIdentifier( *$5 );
+//			$$ = DeclarationNode::newFunction( $5, DeclarationNode::newTuple( 0 ), $8, 0, true );
+//		}
+//	| '[' ']' typegen_name
+		// identifier_or_type_name must be broken apart because of the sequence:
+		//
+		//   '[' ']' identifier_or_type_name '(' cfa_parameter_type_list_opt ')'
+		//   '[' ']' type_specifier
+		//
+		// type_specifier can resolve to just TYPEDEFname (e.g., typedef int T; int f( T );). Therefore this must be
+		// flattened to allow lookahead to the '(' without having to reduce identifier_or_type_name.
+	cfa_abstract_tuple identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')'
+		// To obtain LR(1 ), this rule must be factored out from function return type (see cfa_abstract_declarator).
+		{
+			$$ = DeclarationNode::newFunction( $2, $1, $5, 0, true );
+		}
+	| cfa_function_return identifier_or_type_name '(' push cfa_parameter_type_list_opt pop ')'
+		{
+			$$ = DeclarationNode::newFunction( $2, $1, $5, 0, true );
+		}
+	;
+
+cfa_function_return:									// CFA
+	'[' push cfa_parameter_list pop ']'
+		{ $$ = DeclarationNode::newTuple( $3 ); }
+	| '[' push cfa_parameter_list pop ',' push cfa_abstract_parameter_list pop ']'
+		// To obtain LR(1 ), the last cfa_abstract_parameter_list is added into this flattened rule to lookahead to the
+		// ']'.
+		{ $$ = DeclarationNode::newTuple( $3->appendList( $7 ) ); }
+	;
+
+cfa_typedef_declaration:								// CFA
+	TYPEDEF cfa_variable_specifier
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::TD );
+			$$ = $2->addTypedef();
+		}
+	| TYPEDEF cfa_function_specifier
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::TD );
+			$$ = $2->addTypedef();
+		}
+	| cfa_typedef_declaration pop ',' push no_attr_identifier
+		{
+			typedefTable.addToEnclosingScope( *$5, TypedefTable::TD );
+			$$ = $1->appendList( $1->cloneType( $5 ) );
+		}
+	;
+
+// Traditionally typedef is part of storage-class specifier for syntactic convenience only. Here, it is factored out as
+// a separate form of declaration, which syntactically precludes storage-class specifiers and initialization.
+
+typedef_declaration:
+	TYPEDEF type_specifier declarator
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::TD );
+			$$ = $3->addType( $2 )->addTypedef();
+		}
+	| typedef_declaration pop ',' push declarator
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::TD );
+			$$ = $1->appendList( $1->cloneBaseType( $5 )->addTypedef() );
+		}
+	| type_qualifier_list TYPEDEF type_specifier declarator // remaining OBSOLESCENT (see 2 )
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::TD );
+			$$ = $4->addType( $3 )->addQualifiers( $1 )->addTypedef();
+		}
+	| type_specifier TYPEDEF declarator
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::TD );
+			$$ = $3->addType( $1 )->addTypedef();
+		}
+	| type_specifier TYPEDEF type_qualifier_list declarator
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::TD );
+			$$ = $4->addQualifiers( $1 )->addTypedef()->addType( $1 );
+		}
+	;
+
+typedef_expression:
+		// GCC, naming expression type: typedef name = exp; gives a name to the type of an expression
+	TYPEDEF no_attr_identifier '=' assignment_expression
+		{
+			typedefTable.addToEnclosingScope( *$2, TypedefTable::TD );
+			$$ = DeclarationNode::newName( 0 );			// unimplemented
+		}
+	| typedef_expression pop ',' push no_attr_identifier '=' assignment_expression
+		{
+			typedefTable.addToEnclosingScope( *$5, TypedefTable::TD );
+			$$ = DeclarationNode::newName( 0 );			// unimplemented
+		}
+	;
+
+c_declaration:
+	declaration_specifier declaring_list pop ';'
+		{
+			$$ = distAttr( $1, $2 );
+		}
+	| typedef_declaration pop ';'
+	| typedef_expression pop ';'						// GCC, naming expression type
+	| sue_declaration_specifier pop ';'
+	;
+
+declaring_list:
+		// A semantic check is required to ensure asm_name only appears on declarations with implicit or explicit static
+		// storage-class
+	declarator asm_name_opt initializer_opt
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			$$ = $1->addAsmName( $2 )->addInitializer( $3 );
+		}
+	| declaring_list ',' attribute_list_opt declarator asm_name_opt initializer_opt
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			$$ = $1->appendList( $4->addQualifiers( $3 )->addAsmName( $5 )->addInitializer( $6 ) );
+		}
+	;
+
+declaration_specifier:									// type specifier + storage class
+	basic_declaration_specifier
+	| sue_declaration_specifier
+	| typedef_declaration_specifier
+	| typegen_declaration_specifier
+	;
+
+type_specifier:											// declaration specifier - storage class
+	basic_type_specifier
+	| sue_type_specifier
+	| typedef_type_specifier
+	| typegen_type_specifier
+	;
+
+type_qualifier_list_opt:								// GCC, used in asm_statement
+	// empty
+		{ $$ = nullptr; }
+	| type_qualifier_list
+	;
+
+type_qualifier_list:
+		// A semantic check is necessary to ensure a type qualifier is appropriate for the kind of declaration.
+		//
+		// ISO/IEC 9899:1999 Section 6.7.3(4 ) : If the same qualifier appears more than once in the same
+		// specifier-qualifier-list, either directly or via one or more typedefs, the behavior is the same as if it
+		// appeared only once.
+	type_qualifier
+	| type_qualifier_list type_qualifier
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+type_qualifier:
+	type_qualifier_name
+	| attribute
+	;
+
+type_qualifier_name:
+	CONST
+		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Const ); }
+	| RESTRICT
+		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
+	| VOLATILE
+		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
+	| LVALUE											// CFA
+		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
+	| ATOMIC
+		{ $$ = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
+	| FORALL '('
+		{
+			typedefTable.enterScope();
+		}
+	  type_parameter_list ')'							// CFA
+		{
+			typedefTable.leaveScope();
+			$$ = DeclarationNode::newForall( $4 );
+		}
+	;
+
+declaration_qualifier_list:
+	storage_class_list
+	| type_qualifier_list storage_class_list			// remaining OBSOLESCENT (see 2 )
+		{ $$ = $1->addQualifiers( $2 ); }
+	| declaration_qualifier_list type_qualifier_list storage_class_list
+		{ $$ = $1->addQualifiers( $2 )->addQualifiers( $3 ); }
+	;
+
+storage_class_list:
+		// A semantic check is necessary to ensure a storage class is appropriate for the kind of declaration and that
+		// only one of each is specified, except for inline, which can appear with the others.
+		//
+		// ISO/IEC 9899:1999 Section 6.7.1(2) : At most, one storage-class specifier may be given in the declaration
+		// specifiers in a declaration.
+	storage_class
+	| storage_class_list storage_class
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+storage_class:
+	EXTERN
+		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
+	| STATIC
+		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
+	| AUTO
+		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
+	| REGISTER
+		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
+	| INLINE											// C99
+		//{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
+		{ $$ = new DeclarationNode; $$->isInline = true; }
+	| FORTRAN											// C99
+		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
+	| NORETURN											// C11
+		//{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
+		{ $$ = new DeclarationNode; $$->isNoreturn = true; }
+	| THREADLOCAL										// C11
+		{ $$ = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
+	;
+
+basic_type_name:
+	CHAR
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Char ); }
+	| DOUBLE
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Double ); }
+	| FLOAT
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Float ); }
+	| INT
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Int ); }
+	| LONG
+		{ $$ = DeclarationNode::newLength( DeclarationNode::Long ); }
+	| SHORT
+		{ $$ = DeclarationNode::newLength( DeclarationNode::Short ); }
+	| SIGNED
+		{ $$ = DeclarationNode::newSignedNess( DeclarationNode::Signed ); }
+	| UNSIGNED
+		{ $$ = DeclarationNode::newSignedNess( DeclarationNode::Unsigned ); }
+	| VOID
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Void ); }
+	| BOOL												// C99
+		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
+	| COMPLEX											// C99
+		{ $$ = DeclarationNode::newComplexType( DeclarationNode::Complex ); }
+	| IMAGINARY											// C99
+		{ $$ = DeclarationNode::newComplexType( DeclarationNode::Imaginary ); }
+	| VALIST											// GCC, __builtin_va_list
+		{ $$ = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
+	| ZERO_T
+		{ $$ = DeclarationNode::newBuiltinType( DeclarationNode::Zero ); }
+	| ONE_T
+		{ $$ = DeclarationNode::newBuiltinType( DeclarationNode::One ); }
+	;
+
+basic_declaration_specifier:
+		// A semantic check is necessary for conflicting storage classes.
+	basic_type_specifier
+	| declaration_qualifier_list basic_type_specifier
+		{ $$ = $2->addQualifiers( $1 ); }
+	| basic_declaration_specifier storage_class			// remaining OBSOLESCENT (see 2)
+		{ $$ = $1->addQualifiers( $2 ); }
+	| basic_declaration_specifier storage_class type_qualifier_list
+		{ $$ = $1->addQualifiers( $2 )->addQualifiers( $3 ); }
+	| basic_declaration_specifier storage_class basic_type_specifier
+		{ $$ = $3->addQualifiers( $2 )->addType( $1 ); }
+	;
+
+basic_type_specifier:
+	direct_type_name
+	| type_qualifier_list_opt indirect_type_name type_qualifier_list_opt
+		{ $$ = $2->addQualifiers( $1 )->addQualifiers( $3 ); }
+	;
+
+direct_type_name:
+		// A semantic check is necessary for conflicting type qualifiers.
+	basic_type_name
+	| type_qualifier_list basic_type_name
+		{ $$ = $2->addQualifiers( $1 ); }
+	| direct_type_name type_qualifier
+		{ $$ = $1->addQualifiers( $2 ); }
+	| direct_type_name basic_type_name
+		{ $$ = $1->addType( $2 ); }
+	;
+
+indirect_type_name:
+	TYPEOF '(' type_name ')'							// GCC: typeof(x) y;
+		{ $$ = $3; }
+	| TYPEOF '(' comma_expression ')'					// GCC: typeof(a+b) y;
+		{ $$ = DeclarationNode::newTypeof( $3 ); }
+	| ATTR_TYPEGENname '(' type_name ')'				// CFA: e.g., @type(x) y;
+		{ $$ = DeclarationNode::newAttr( $1, $3 ); }
+	| ATTR_TYPEGENname '(' comma_expression ')'			// CFA: e.g., @type(a+b) y;
+		{ $$ = DeclarationNode::newAttr( $1, $3 ); }
+	;
+
+sue_declaration_specifier:
+	sue_type_specifier
+	| declaration_qualifier_list sue_type_specifier
+		{ $$ = $2->addQualifiers( $1 ); }
+	| sue_declaration_specifier storage_class			// remaining OBSOLESCENT (see 2)
+		{ $$ = $1->addQualifiers( $2 ); }
+	| sue_declaration_specifier storage_class type_qualifier_list
+		{ $$ = $1->addQualifiers( $2 )->addQualifiers( $3 ); }
+	;
+
+sue_type_specifier:
+	elaborated_type										// struct, union, enum
+	| type_qualifier_list elaborated_type
+		{ $$ = $2->addQualifiers( $1 ); }
+	| sue_type_specifier type_qualifier
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+typedef_declaration_specifier:
+	typedef_type_specifier
+	| declaration_qualifier_list typedef_type_specifier
+		{ $$ = $2->addQualifiers( $1 ); }
+	| typedef_declaration_specifier storage_class		// remaining OBSOLESCENT (see 2)
+		{ $$ = $1->addQualifiers( $2 ); }
+	| typedef_declaration_specifier storage_class type_qualifier_list
+		{ $$ = $1->addQualifiers( $2 )->addQualifiers( $3 ); }
+	;
+
+typedef_type_specifier:									// typedef types
+	TYPEDEFname
+		{ $$ = DeclarationNode::newFromTypedef( $1 ); }
+	| type_qualifier_list TYPEDEFname
+		{ $$ = DeclarationNode::newFromTypedef( $2 )->addQualifiers( $1 ); }
+	| typedef_type_specifier type_qualifier
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+elaborated_type:
+	aggregate_type
+	| enum_type
+	;
+
+aggregate_type:
+	aggregate_key attribute_list_opt '{' field_declaration_list '}'
+		{ $$ = DeclarationNode::newAggregate( $1, nullptr, nullptr, $4, true, $2 )->addQualifiers( $2 ); }
+	| aggregate_key attribute_list_opt no_attr_identifier_or_type_name
+		{
+			typedefTable.makeTypedef( *$3 );
+			$$ = DeclarationNode::newAggregate( $1, $3, nullptr, nullptr, false, $2 )->addQualifiers( $2 );
+		}
+	| aggregate_key attribute_list_opt no_attr_identifier_or_type_name
+		{ typedefTable.makeTypedef( *$3 ); }
+	  '{' field_declaration_list '}'
+		{ $$ = DeclarationNode::newAggregate( $1, $3, nullptr, $6, true, $2 )->addQualifiers( $2 ); }
+	| aggregate_key attribute_list_opt '(' type_name_list ')' '{' field_declaration_list '}' // CFA
+		{ $$ = DeclarationNode::newAggregate( $1, nullptr, $4, $7, false, $2 )->addQualifiers( $2 ); }
+	| aggregate_key attribute_list_opt typegen_name		// CFA, S/R conflict
+		{ $$ = $3->addQualifiers( $2 ); }
+	;
+
+aggregate_key:
+	STRUCT
+		{ $$ = DeclarationNode::Struct; }
+	| UNION
+		{ $$ = DeclarationNode::Union; }
+	;
+
+field_declaration_list:
+	// empty
+		{ $$ = nullptr; }
+	| field_declaration_list field_declaration
+		{ $$ = $1 ? $1->appendList( $2 ) : $2; }
+	;
+
+field_declaration:
+	extension_opt cfa_field_declaring_list ';'			// CFA, new style field declaration
+		{ $$ = $2->set_extension( $1 ); }
+	| extension_opt type_specifier field_declaring_list ';'
+		{
+			if ( $1 ) distExt( $3 );					// mark all fields in list
+			$$ = distAttr( $2, $3 );
+		}
+	;
+
+cfa_field_declaring_list:								// CFA, new style field declaration
+	cfa_abstract_declarator_tuple						// CFA, no field name
+	| cfa_abstract_declarator_tuple no_attr_identifier_or_type_name
+		{ $$ = $1->addName( $2 ); }
+	| cfa_field_declaring_list ',' no_attr_identifier_or_type_name
+		{ $$ = $1->appendList( $1->cloneType( $3 ) ); }
+	| cfa_field_declaring_list ','						// CFA, no field name
+		{ $$ = $1->appendList( $1->cloneType( 0 ) ); }
+	;
+
+field_declaring_list:
+	field_declarator
+	| field_declaring_list ',' attribute_list_opt field_declarator
+		{ $$ = $1->appendList( $4->addQualifiers( $3 ) ); }
+	;
+
+field_declarator:
+	// empty
+		{ $$ = DeclarationNode::newName( 0 ); /* XXX */ } // CFA, no field name
+	| bit_subrange_size									// no field name
+		{ $$ = DeclarationNode::newBitfield( $1 ); }
+	| variable_declarator bit_subrange_size_opt
+		// A semantic check is required to ensure bit_subrange only appears on base type int.
+		{ $$ = $1->addBitfield( $2 ); }
+	| variable_type_redeclarator bit_subrange_size_opt
+		// A semantic check is required to ensure bit_subrange only appears on base type int.
+		{ $$ = $1->addBitfield( $2 ); }
+	| variable_abstract_declarator						// CFA, no field name
+	;
+
+bit_subrange_size_opt:
+	// empty
+		{ $$ = nullptr; }
+	| bit_subrange_size
+		{ $$ = $1; }
+	;
+
+bit_subrange_size:
+	':' constant_expression
+		{ $$ = $2; }
+	;
+
+enum_type:
+	ENUM attribute_list_opt '{' enumerator_list comma_opt '}'
+		{ $$ = DeclarationNode::newEnum( nullptr, $4 )->addQualifiers( $2 ); }
+	| ENUM attribute_list_opt no_attr_identifier_or_type_name
+		{
+			typedefTable.makeTypedef( *$3 );
+			$$ = DeclarationNode::newEnum( $3, 0 )->addQualifiers( $2 );
+		}
+	| ENUM attribute_list_opt no_attr_identifier_or_type_name
+		{ typedefTable.makeTypedef( *$3 ); }
+	  '{' enumerator_list comma_opt '}'
+		{ $$ = DeclarationNode::newEnum( $3, $6 )->addQualifiers( $2 ); }
+	;
+
+enumerator_list:
+	no_attr_identifier_or_type_name enumerator_value_opt
+		{ $$ = DeclarationNode::newEnumConstant( $1, $2 ); }
+	| enumerator_list ',' no_attr_identifier_or_type_name enumerator_value_opt
+		{ $$ = $1->appendList( DeclarationNode::newEnumConstant( $3, $4 ) ); }
+	;
+
+enumerator_value_opt:
+	// empty
+		{ $$ = nullptr; }
+	| '=' constant_expression
+		{ $$ = $2; }
+	;
+
+// Minimum of one parameter after which ellipsis is allowed only at the end.
+
+cfa_parameter_type_list_opt:							// CFA
+	// empty
+		{ $$ = nullptr; }
+	| cfa_parameter_type_list
+	;
+
+cfa_parameter_type_list:								// CFA, abstract + real
+	cfa_abstract_parameter_list
+	| cfa_parameter_list
+	| cfa_parameter_list pop ',' push cfa_abstract_parameter_list
+		{ $$ = $1->appendList( $5 ); }
+	| cfa_abstract_parameter_list pop ',' push ELLIPSIS
+		{ $$ = $1->addVarArgs(); }
+	| cfa_parameter_list pop ',' push ELLIPSIS
+		{ $$ = $1->addVarArgs(); }
+	;
+
+cfa_parameter_list:										// CFA
+		// To obtain LR(1) between cfa_parameter_list and cfa_abstract_tuple, the last cfa_abstract_parameter_list is
+		// factored out from cfa_parameter_list, flattening the rules to get lookahead to the ']'.
+	cfa_parameter_declaration
+	| cfa_abstract_parameter_list pop ',' push cfa_parameter_declaration
+		{ $$ = $1->appendList( $5 ); }
+	| cfa_parameter_list pop ',' push cfa_parameter_declaration
+		{ $$ = $1->appendList( $5 ); }
+	| cfa_parameter_list pop ',' push cfa_abstract_parameter_list pop ',' push cfa_parameter_declaration
+		{ $$ = $1->appendList( $5 )->appendList( $9 ); }
+	;
+
+cfa_abstract_parameter_list:							// CFA, new & old style abstract
+	cfa_abstract_parameter_declaration
+	| cfa_abstract_parameter_list pop ',' push cfa_abstract_parameter_declaration
+		{ $$ = $1->appendList( $5 ); }
+	;
+
+parameter_type_list_opt:
+	// empty
+		{ $$ = nullptr; }
+	| parameter_type_list
+	;
+
+parameter_type_list:
+	parameter_list
+	| parameter_list pop ',' push ELLIPSIS
+		{ $$ = $1->addVarArgs(); }
+	;
+
+parameter_list:											// abstract + real
+	abstract_parameter_declaration
+	| parameter_declaration
+	| parameter_list pop ',' push abstract_parameter_declaration
+		{ $$ = $1->appendList( $5 ); }
+	| parameter_list pop ',' push parameter_declaration
+		{ $$ = $1->appendList( $5 ); }
+	;
+
+// Provides optional identifier names (abstract_declarator/variable_declarator), no initialization, different semantics
+// for typedef name by using type_parameter_redeclarator instead of typedef_redeclarator, and function prototypes.
+
+cfa_parameter_declaration:								// CFA, new & old style parameter declaration
+	parameter_declaration
+	| cfa_identifier_parameter_declarator_no_tuple identifier_or_type_name assignment_opt
+		{ $$ = $1->addName( $2 ); }
+	| cfa_abstract_tuple identifier_or_type_name assignment_opt
+		// To obtain LR(1), these rules must be duplicated here (see cfa_abstract_declarator).
+		{ $$ = $1->addName( $2 ); }
+	| type_qualifier_list cfa_abstract_tuple identifier_or_type_name assignment_opt
+		{ $$ = $2->addName( $3 )->addQualifiers( $1 ); }
+	| cfa_function_specifier
+	;
+
+cfa_abstract_parameter_declaration:						// CFA, new & old style parameter declaration
+	abstract_parameter_declaration
+	| cfa_identifier_parameter_declarator_no_tuple
+	| cfa_abstract_tuple
+		// To obtain LR(1), these rules must be duplicated here (see cfa_abstract_declarator).
+	| type_qualifier_list cfa_abstract_tuple
+		{ $$ = $2->addQualifiers( $1 ); }
+	| cfa_abstract_function
+	;
+
+parameter_declaration:
+	declaration_specifier identifier_parameter_declarator assignment_opt
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			$$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr );
+		}
+	| declaration_specifier type_parameter_redeclarator assignment_opt
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			$$ = $2->addType( $1 )->addInitializer( $3 ? new InitializerNode( $3 ) : nullptr );
+		}
+	;
+
+abstract_parameter_declaration:
+	declaration_specifier
+	| declaration_specifier abstract_parameter_declarator
+		{ $$ = $2->addType( $1 ); }
+	;
+
+// ISO/IEC 9899:1999 Section 6.9.1(6) : "An identifier declared as a typedef name shall not be redeclared as a
+// parameter." Because the scope of the K&R-style parameter-list sees the typedef first, the following is based only on
+// identifiers.  The ANSI-style parameter-list can redefine a typedef name.
+
+identifier_list:										// K&R-style parameter list => no types
+	no_attr_identifier
+		{ $$ = DeclarationNode::newName( $1 ); }
+	| identifier_list ',' no_attr_identifier
+		{ $$ = $1->appendList( DeclarationNode::newName( $3 ) ); }
+	;
+
+identifier_or_type_name:
+	identifier
+	| TYPEDEFname
+	| TYPEGENname
+	;
+
+no_01_identifier_or_type_name:
+	no_01_identifier
+	| TYPEDEFname
+	| TYPEGENname
+	;
+
+no_attr_identifier_or_type_name:
+	no_attr_identifier
+	| TYPEDEFname
+	| TYPEGENname
+	;
+
+type_name_no_function:									// sizeof, alignof, cast (constructor)
+	cfa_abstract_declarator_tuple						// CFA
+	| type_specifier
+	| type_specifier abstract_declarator
+		{ $$ = $2->addType( $1 ); }
+	;
+
+type_name:												// typeof, assertion
+	type_name_no_function
+	| cfa_abstract_function								// CFA
+	;
+
+initializer_opt:
+	// empty
+		{ $$ = nullptr; }
+	| '=' initializer
+		{ $$ = $2; }
+	| ATassign initializer
+		{ $$ = $2->set_maybeConstructed( false ); }
+	;
+
+initializer:
+	assignment_expression						{ $$ = new InitializerNode( $1 ); }
+	| '{' initializer_list comma_opt '}'		{ $$ = new InitializerNode( $2, true ); }
+	;
+
+initializer_list:
+	// empty
+		{ $$ = nullptr; }
+	| initializer
+	| designation initializer					{ $$ = $2->set_designators( $1 ); }
+	| initializer_list ',' initializer			{ $$ = (InitializerNode *)( $1->set_last( $3 ) ); }
+	| initializer_list ',' designation initializer
+		{ $$ = (InitializerNode *)( $1->set_last( $4->set_designators( $3 ) ) ); }
+	;
+
+// There is an unreconcileable parsing problem between C99 and CFA with respect to designators. The problem is use of
+// '=' to separator the designator from the initializer value, as in:
+//
+//		int x[10] = { [1] = 3 };
+//
+// The string "[1] = 3" can be parsed as a designator assignment or a tuple assignment.  To disambiguate this case, CFA
+// changes the syntax from "=" to ":" as the separator between the designator and initializer. GCC does uses ":" for
+// field selection. The optional use of the "=" in GCC, or in this case ":", cannot be supported either due to
+// shift/reduce conflicts
+
+designation:
+	designator_list ':'									// C99, CFA uses ":" instead of "="
+	| no_attr_identifier_or_type_name ':'				// GCC, field name
+		{ $$ = new ExpressionNode( build_varref( $1 ) ); }
+	;
+
+designator_list:										// C99
+	designator
+	| designator_list designator
+		{ $$ = (ExpressionNode *)( $1->set_last( $2 ) ); }
+	//| designator_list designator						{ $$ = new ExpressionNode( $1, $2 ); }
+	;
+
+designator:
+	'.' no_attr_identifier_or_type_name					// C99, field name
+		{ $$ = new ExpressionNode( build_varref( $2 ) ); }
+	| '[' push assignment_expression pop ']'			// C99, single array element
+		// assignment_expression used instead of constant_expression because of shift/reduce conflicts with tuple.
+		{ $$ = $3; }
+	| '[' push subrange pop ']'							// CFA, multiple array elements
+		{ $$ = $3; }
+	| '[' push constant_expression ELLIPSIS constant_expression pop ']' // GCC, multiple array elements
+		{ $$ = new ExpressionNode( build_range( $3, $5 ) ); }
+	| '.' '[' push field_list pop ']'					// CFA, tuple field selector
+		{ $$ = $4; }
+	;
+
+// The CFA type system is based on parametric polymorphism, the ability to declare functions with type parameters,
+// rather than an object-oriented type system. This required four groups of extensions:
+//
+// Overloading: function, data, and operator identifiers may be overloaded.
+//
+// Type declarations: "type" is used to generate new types for declaring objects. Similarly, "dtype" is used for object
+//     and incomplete types, and "ftype" is used for function types. Type declarations with initializers provide
+//     definitions of new types. Type declarations with storage class "extern" provide opaque types.
+//
+// Polymorphic functions: A forall clause declares a type parameter. The corresponding argument is inferred at the call
+//     site. A polymorphic function is not a template; it is a function, with an address and a type.
+//
+// Specifications and Assertions: Specifications are collections of declarations parameterized by one or more
+//     types. They serve many of the purposes of abstract classes, and specification hierarchies resemble subclass
+//     hierarchies. Unlike classes, they can define relationships between types.  Assertions declare that a type or
+//     types provide the operations declared by a specification.  Assertions are normally used to declare requirements
+//     on type arguments of polymorphic functions.
+
+typegen_declaration_specifier:							// CFA
+	typegen_type_specifier
+	| declaration_qualifier_list typegen_type_specifier
+		{ $$ = $2->addQualifiers( $1 ); }
+	| typegen_declaration_specifier storage_class		// remaining OBSOLESCENT (see 2)
+		{ $$ = $1->addQualifiers( $2 ); }
+	| typegen_declaration_specifier storage_class type_qualifier_list
+		{ $$ = $1->addQualifiers( $2 )->addQualifiers( $3 ); }
+	;
+
+typegen_type_specifier:									// CFA
+	typegen_name
+	| type_qualifier_list typegen_name
+		{ $$ = $2->addQualifiers( $1 ); }
+	| typegen_type_specifier type_qualifier
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+typegen_name:											// CFA
+	TYPEGENname '(' type_name_list ')'
+		{ $$ = DeclarationNode::newFromTypeGen( $1, $3 ); }
+	;
+
+type_parameter_list:									// CFA
+	type_parameter assignment_opt
+	| type_parameter_list ',' type_parameter assignment_opt
+		{ $$ = $1->appendList( $3 ); }
+	;
+
+type_parameter:											// CFA
+	type_class no_attr_identifier_or_type_name
+		{ typedefTable.addToEnclosingScope( *$2, TypedefTable::TD ); }
+	  assertion_list_opt
+		{ $$ = DeclarationNode::newTypeParam( $1, $2 )->addAssertions( $4 ); }
+	| type_specifier identifier_parameter_declarator
+	;
+
+type_class:												// CFA
+	OTYPE
+		{ $$ = DeclarationNode::Otype; }
+	| DTYPE
+		{ $$ = DeclarationNode::Dtype; }
+	| FTYPE
+		{ $$ = DeclarationNode::Ftype; }
+	| TTYPE
+		{ $$ = DeclarationNode::Ttype; }
+	;
+
+assertion_list_opt:										// CFA
+	// empty
+		{ $$ = nullptr; }
+	| assertion_list_opt assertion
+		{ $$ = $1 ? $1->appendList( $2 ) : $2; }
+	;
+
+assertion:												// CFA
+	'|' no_attr_identifier_or_type_name '(' type_name_list ')'
+		{
+			typedefTable.openTrait( *$2 );
+			$$ = DeclarationNode::newTraitUse( $2, $4 );
+		}
+	| '|' '{' push trait_declaration_list '}'
+		{ $$ = $4; }
+	| '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_name_list ')'
+		{ $$ = nullptr; }
+	;
+
+type_name_list:											// CFA
+	type_name
+		{ $$ = new ExpressionNode( build_typevalue( $1 ) ); }
+	| assignment_expression
+	| type_name_list ',' type_name
+		{ $$ = (ExpressionNode *)( $1->set_last( new ExpressionNode( build_typevalue( $3 ) ) ) ); }
+	| type_name_list ',' assignment_expression
+		{ $$ = (ExpressionNode *)( $1->set_last( $3 )); }
+	;
+
+type_declaring_list:									// CFA
+	OTYPE type_declarator
+		{ $$ = $2; }
+	| storage_class_list OTYPE type_declarator
+		{ $$ = $3->addQualifiers( $1 ); }
+	| type_declaring_list ',' type_declarator
+		{ $$ = $1->appendList( $3->copyStorageClasses( $1 ) ); }
+	;
+
+type_declarator:										// CFA
+	type_declarator_name assertion_list_opt
+		{ $$ = $1->addAssertions( $2 ); }
+	| type_declarator_name assertion_list_opt '=' type_name
+		{ $$ = $1->addAssertions( $2 )->addType( $4 ); }
+	;
+
+type_declarator_name:									// CFA
+	no_attr_identifier_or_type_name
+		{
+			typedefTable.addToEnclosingScope( *$1, TypedefTable::TD );
+			$$ = DeclarationNode::newTypeDecl( $1, 0 );
+		}
+	| no_01_identifier_or_type_name '(' push type_parameter_list pop ')'
+		{
+			typedefTable.addToEnclosingScope( *$1, TypedefTable::TG );
+			$$ = DeclarationNode::newTypeDecl( $1, $4 );
+		}
+	;
+
+trait_specifier:										// CFA
+	TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
+		{
+			typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
+			$$ = DeclarationNode::newTrait( $2, $5, 0 );
+		}
+	| TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'
+		{
+			typedefTable.enterTrait( *$2 );
+			typedefTable.enterScope();
+		}
+	  trait_declaration_list '}'
+		{
+			typedefTable.leaveTrait();
+			typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
+			$$ = DeclarationNode::newTrait( $2, $5, $10 );
+		}
+	;
+
+trait_declaration_list:								// CFA
+	trait_declaration
+	| trait_declaration_list push trait_declaration
+		{ $$ = $1->appendList( $3 ); }
+	;
+
+trait_declaration:									// CFA
+	cfa_trait_declaring_list pop ';'
+	| trait_declaring_list pop ';'
+	;
+
+cfa_trait_declaring_list:								// CFA
+	cfa_variable_specifier
+		{
+			typedefTable.addToEnclosingScope2( TypedefTable::ID );
+			$$ = $1;
+		}
+	| cfa_function_specifier
+		{
+			typedefTable.addToEnclosingScope2( TypedefTable::ID );
+			$$ = $1;
+		}
+	| cfa_trait_declaring_list pop ',' push identifier_or_type_name
+		{
+			typedefTable.addToEnclosingScope2( *$5, TypedefTable::ID );
+			$$ = $1->appendList( $1->cloneType( $5 ) );
+		}
+	;
+
+trait_declaring_list:									// CFA
+	type_specifier declarator
+		{
+			typedefTable.addToEnclosingScope2( TypedefTable::ID );
+			$$ = $2->addType( $1 );
+		}
+	| trait_declaring_list pop ',' push declarator
+		{
+			typedefTable.addToEnclosingScope2( TypedefTable::ID );
+			$$ = $1->appendList( $1->cloneBaseType( $5 ) );
+		}
+	;
+
+//***************************** EXTERNAL DEFINITIONS *****************************
+
+translation_unit:
+	// empty
+		{}												// empty input file
+	| external_definition_list
+		{ parseTree = parseTree ? parseTree->appendList( $1 ) : $1;	}
+	;
+
+external_definition_list:
+	external_definition
+	| external_definition_list push external_definition
+		{ $$ = $1 ? $1->appendList( $3 ) : $3; }
+	;
+
+external_definition_list_opt:
+	// empty
+		{ $$ = nullptr; }
+	| external_definition_list
+	;
+
+external_definition:
+	declaration
+	| external_function_definition
+	| asm_statement										// GCC, global assembler statement
+	| EXTERN STRINGliteral								// C++-style linkage specifier
+		{
+			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
+			linkage = LinkageSpec::linkageCheck( $2 );
+		}
+	  '{' external_definition_list_opt '}'
+		{
+			linkage = linkageStack.top();
+			linkageStack.pop();
+			$$ = $5;
+		}
+	| EXTENSION external_definition						// GCC, multiple __extension__ allowed, meaning unknown
+		{
+			distExt( $2 );								// mark all fields in list
+			$$ = $2;
+		}
+	;
+
+external_function_definition:
+	function_definition
+		// These rules are a concession to the "implicit int" type_specifier because there is a significant amount of
+		// legacy code with global functions missing the type-specifier for the return type, and assuming "int".
+		// Parsing is possible because function_definition does not appear in the context of an expression (nested
+		// functions preclude this concession, i.e., all nested function must have a return type). A function prototype
+		// declaration must still have a type_specifier.  OBSOLESCENT (see 1)
+	| function_declarator compound_statement
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			$$ = $1->addFunctionBody( $2 );
+		}
+	| KR_function_declarator push KR_declaration_list_opt compound_statement
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			$$ = $1->addOldDeclList( $3 )->addFunctionBody( $4 );
+		}
+	;
+
+function_definition:
+	cfa_function_declaration compound_statement			// CFA
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			$$ = $1->addFunctionBody( $2 );
+		}
+	| declaration_specifier function_declarator compound_statement
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			$$ = $2->addFunctionBody( $3 )->addType( $1 );
+		}
+	| type_qualifier_list function_declarator compound_statement
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			$$ = $2->addFunctionBody( $3 )->addQualifiers( $1 );
+		}
+	| declaration_qualifier_list function_declarator compound_statement
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			$$ = $2->addFunctionBody( $3 )->addQualifiers( $1 );
+		}
+	| declaration_qualifier_list type_qualifier_list function_declarator compound_statement
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			$$ = $3->addFunctionBody( $4 )->addQualifiers( $2 )->addQualifiers( $1 );
+		}
+
+		// Old-style K&R function definition, OBSOLESCENT (see 4)
+	| declaration_specifier KR_function_declarator push KR_declaration_list_opt compound_statement
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addType( $1 );
+		}
+	| type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addQualifiers( $1 );
+		}
+
+		// Old-style K&R function definition with "implicit int" type_specifier, OBSOLESCENT (see 4)
+	| declaration_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			$$ = $2->addOldDeclList( $4 )->addFunctionBody( $5 )->addQualifiers( $1 );
+		}
+	| declaration_qualifier_list type_qualifier_list KR_function_declarator push KR_declaration_list_opt compound_statement
+		{
+			typedefTable.addToEnclosingScope( TypedefTable::ID );
+			typedefTable.leaveScope();
+			$$ = $3->addOldDeclList( $5 )->addFunctionBody( $6 )->addQualifiers( $2 )->addQualifiers( $1 );
+		}
+	;
+
+declarator:
+	variable_declarator
+	| variable_type_redeclarator
+	| function_declarator
+	;
+
+subrange:
+	constant_expression '~' constant_expression			// CFA, integer subrange
+		{ $$ = new ExpressionNode( build_range( $1, $3 ) ); }
+	;
+
+asm_name_opt:											// GCC
+	// empty
+		{ $$ = nullptr; }
+	| ASM '(' string_literal ')' attribute_list_opt
+		{
+			DeclarationNode * name = new DeclarationNode();
+			name->asmName = $3;
+			$$ = name->addQualifiers( $5 );
+		}
+	;
+
+attribute_list_opt:										// GCC
+	// empty
+		{ $$ = nullptr; }
+	| attribute_list
+	;
+
+attribute_list:											// GCC
+	attribute
+	| attribute_list attribute
+		{ $$ = $2->addQualifiers( $1 ); }
+	;
+
+attribute:												// GCC
+	ATTRIBUTE '(' '(' attribute_name_list ')' ')'
+		{ $$ = $4; }
+	;
+
+attribute_name_list:									// GCC
+	attribute_name
+	| attribute_name_list ',' attribute_name
+		{ $$ = $3->addQualifiers( $1 ); }
+	;
+
+attribute_name:											// GCC
+	// empty
+		{ $$ = nullptr; }
+	| attr_name
+		{ $$ = DeclarationNode::newAttribute( $1 ); }
+	| attr_name '(' argument_expression_list ')'
+		{ $$ = DeclarationNode::newAttribute( $1, $3 ); }
+	;
+
+attr_name:												// GCC
+	IDENTIFIER
+	| TYPEDEFname
+	| TYPEGENname
+	| CONST
+		{ $$ = Token{ new string( "__const__" ) }; }
+	;
+
+// ============================================================================
+// The following sections are a series of grammar patterns used to parse declarators. Multiple patterns are necessary
+// because the type of an identifier in wrapped around the identifier in the same form as its usage in an expression, as
+// in:
+//
+//		int (*f())[10] { ... };
+//		... (*f())[3] += 1;		// definition mimics usage
+//
+// Because these patterns are highly recursive, changes at a lower level in the recursion require copying some or all of
+// the pattern. Each of these patterns has some subtle variation to ensure correct syntax in a particular context.
+// ============================================================================
+
+// ----------------------------------------------------------------------------
+// The set of valid declarators before a compound statement for defining a function is less than the set of declarators
+// to define a variable or function prototype, e.g.:
+//
+//		valid declaration		invalid definition
+//		-----------------		------------------
+//		int f;					int f {}
+//		int *f;					int *f {}
+//		int f[10];				int f[10] {}
+//		int (*f)(int);			int (*f)(int) {}
+//
+// To preclude this syntactic anomaly requires separating the grammar rules for variable and function declarators, hence
+// variable_declarator and function_declarator.
+// ----------------------------------------------------------------------------
+
+// This pattern parses a declaration of a variable that is not redefining a typedef name. The pattern precludes
+// declaring an array of functions versus a pointer to an array of functions.
+
+variable_declarator:
+	paren_identifier attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	| variable_ptr
+	| variable_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	| variable_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+paren_identifier:
+	identifier
+		{
+			typedefTable.setNextIdentifier( *$1 );
+			$$ = DeclarationNode::newName( $1 );
+		}
+	| '(' paren_identifier ')'							// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+variable_ptr:
+	ptrref_operator variable_declarator
+		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
+	| ptrref_operator type_qualifier_list variable_declarator
+		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
+	| '(' variable_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }				// redundant parenthesis
+	;
+
+variable_array:
+	paren_identifier array_dimension
+		{ $$ = $1->addArray( $2 ); }
+	| '(' variable_ptr ')' array_dimension
+		{ $$ = $2->addArray( $4 ); }
+	| '(' variable_array ')' multi_array_dimension		// redundant parenthesis
+		{ $$ = $2->addArray( $4 ); }
+	| '(' variable_array ')'							// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+variable_function:
+	'(' variable_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
+		{ $$ = $2->addParamList( $6 ); }
+	| '(' variable_function ')'							// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+// This pattern parses a function declarator that is not redefining a typedef name. For non-nested functions, there is
+// no context where a function definition can redefine a typedef name, i.e., the typedef and function name cannot exist
+// is the same scope.  The pattern precludes returning arrays and functions versus pointers to arrays and functions.
+
+function_declarator:
+	function_no_ptr attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	| function_ptr
+	| function_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+function_no_ptr:
+	paren_identifier '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
+		{ $$ = $1->addParamList( $4 ); }
+	| '(' function_ptr ')' '(' push parameter_type_list_opt pop ')'
+		{ $$ = $2->addParamList( $6 ); }
+	| '(' function_no_ptr ')'							// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+function_ptr:
+	ptrref_operator function_declarator
+		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
+	| ptrref_operator type_qualifier_list function_declarator
+		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
+	| '(' function_ptr ')'
+		{ $$ = $2; }
+	;
+
+function_array:
+	'(' function_ptr ')' array_dimension
+		{ $$ = $2->addArray( $4 ); }
+	| '(' function_array ')' multi_array_dimension		// redundant parenthesis
+		{ $$ = $2->addArray( $4 ); }
+	| '(' function_array ')'							// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+// This pattern parses an old-style K&R function declarator (OBSOLESCENT, see 4)
+//
+//   f( a, b, c ) int a, *b, c[]; {}
+//
+// that is not redefining a typedef name (see function_declarator for additional comments). The pattern precludes
+// returning arrays and functions versus pointers to arrays and functions.
+
+KR_function_declarator:
+	KR_function_no_ptr
+	| KR_function_ptr
+	| KR_function_array
+	;
+
+KR_function_no_ptr:
+	paren_identifier '(' identifier_list ')'			// function_declarator handles empty parameter
+		{ $$ = $1->addIdList( $3 ); }
+	| '(' KR_function_ptr ')' '(' push parameter_type_list_opt pop ')'
+		{ $$ = $2->addParamList( $6 ); }
+	| '(' KR_function_no_ptr ')'						// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+KR_function_ptr:
+	ptrref_operator KR_function_declarator
+		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
+	| ptrref_operator type_qualifier_list KR_function_declarator
+		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
+	| '(' KR_function_ptr ')'
+		{ $$ = $2; }
+	;
+
+KR_function_array:
+	'(' KR_function_ptr ')' array_dimension
+		{ $$ = $2->addArray( $4 ); }
+	| '(' KR_function_array ')' multi_array_dimension	// redundant parenthesis
+		{ $$ = $2->addArray( $4 ); }
+	| '(' KR_function_array ')'							// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+// This pattern parses a declaration for a variable or function prototype that redefines a type name, e.g.:
+//
+//		typedef int foo;
+//		{
+//		   int foo; // redefine typedef name in new scope
+//		}
+//
+// The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays
+// and functions versus pointers to arrays and functions.
+
+variable_type_redeclarator:
+	paren_type attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	| type_ptr
+	| type_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	| type_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+paren_type:
+	typedef
+	| '(' paren_type ')'
+		{ $$ = $2; }
+	;
+
+type_ptr:
+	ptrref_operator variable_type_redeclarator
+		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
+	| ptrref_operator type_qualifier_list variable_type_redeclarator
+		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
+	| '(' type_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }
+	;
+
+type_array:
+	paren_type array_dimension
+		{ $$ = $1->addArray( $2 ); }
+	| '(' type_ptr ')' array_dimension
+		{ $$ = $2->addArray( $4 ); }
+	| '(' type_array ')' multi_array_dimension			// redundant parenthesis
+		{ $$ = $2->addArray( $4 ); }
+	| '(' type_array ')'								// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+type_function:
+	paren_type '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
+		{ $$ = $1->addParamList( $4 ); }
+	| '(' type_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
+		{ $$ = $2->addParamList( $6 ); }
+	| '(' type_function ')'								// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+// This pattern parses a declaration for a parameter variable of a function prototype or actual that is not redefining a
+// typedef name and allows the C99 array options, which can only appear in a parameter list.  The pattern precludes
+// declaring an array of functions versus a pointer to an array of functions, and returning arrays and functions versus
+// pointers to arrays and functions.
+
+identifier_parameter_declarator:
+	paren_identifier attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	| identifier_parameter_ptr
+	| identifier_parameter_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	| identifier_parameter_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+identifier_parameter_ptr:
+	ptrref_operator identifier_parameter_declarator
+		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
+	| ptrref_operator type_qualifier_list identifier_parameter_declarator
+		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
+	| '(' identifier_parameter_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }
+	;
+
+identifier_parameter_array:
+	paren_identifier array_parameter_dimension
+		{ $$ = $1->addArray( $2 ); }
+	| '(' identifier_parameter_ptr ')' array_dimension
+		{ $$ = $2->addArray( $4 ); }
+	| '(' identifier_parameter_array ')' multi_array_dimension // redundant parenthesis
+		{ $$ = $2->addArray( $4 ); }
+	| '(' identifier_parameter_array ')'				// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+identifier_parameter_function:
+	paren_identifier '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
+		{ $$ = $1->addParamList( $4 ); }
+	| '(' identifier_parameter_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
+		{ $$ = $2->addParamList( $6 ); }
+	| '(' identifier_parameter_function ')'				// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+// This pattern parses a declaration for a parameter variable or function prototype that is redefining a typedef name,
+// e.g.:
+//
+//		typedef int foo;
+//		int f( int foo ); // redefine typedef name in new scope
+//
+// and allows the C99 array options, which can only appear in a parameter list.
+
+type_parameter_redeclarator:
+	typedef attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	| type_parameter_ptr
+	| type_parameter_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	| type_parameter_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+typedef:
+	TYPEDEFname
+		{
+			typedefTable.setNextIdentifier( *$1 );
+			$$ = DeclarationNode::newName( $1 );
+		}
+	| TYPEGENname
+		{
+			typedefTable.setNextIdentifier( *$1 );
+			$$ = DeclarationNode::newName( $1 );
+		}
+	;
+
+type_parameter_ptr:
+	ptrref_operator type_parameter_redeclarator
+		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
+	| ptrref_operator type_qualifier_list type_parameter_redeclarator
+		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
+	| '(' type_parameter_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }
+	;
+
+type_parameter_array:
+	typedef array_parameter_dimension
+		{ $$ = $1->addArray( $2 ); }
+	| '(' type_parameter_ptr ')' array_parameter_dimension
+		{ $$ = $2->addArray( $4 ); }
+	;
+
+type_parameter_function:
+	typedef '(' push parameter_type_list_opt pop ')'	// empty parameter list OBSOLESCENT (see 3)
+		{ $$ = $1->addParamList( $4 ); }
+	| '(' type_parameter_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
+		{ $$ = $2->addParamList( $6 ); }
+	;
+
+// This pattern parses a declaration of an abstract variable or function prototype, i.e., there is no identifier to
+// which the type applies, e.g.:
+//
+//		sizeof( int );
+//		sizeof( int * );
+//		sizeof( int [10] );
+//		sizeof( int (*)() );
+//		sizeof( int () );
+//
+// The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays
+// and functions versus pointers to arrays and functions.
+
+abstract_declarator:
+	abstract_ptr
+	| abstract_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	| abstract_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+abstract_ptr:
+	ptrref_operator
+		{ $$ = DeclarationNode::newPointer( 0 ); }
+	| ptrref_operator type_qualifier_list
+		{ $$ = DeclarationNode::newPointer( $2 ); }
+	| ptrref_operator abstract_declarator
+		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
+	| ptrref_operator type_qualifier_list abstract_declarator
+		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
+	| '(' abstract_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }
+	;
+
+abstract_array:
+	array_dimension
+	| '(' abstract_ptr ')' array_dimension
+		{ $$ = $2->addArray( $4 ); }
+	| '(' abstract_array ')' multi_array_dimension		// redundant parenthesis
+		{ $$ = $2->addArray( $4 ); }
+	| '(' abstract_array ')'							// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+abstract_function:
+	'(' push parameter_type_list_opt pop ')'			// empty parameter list OBSOLESCENT (see 3)
+		{ $$ = DeclarationNode::newFunction( nullptr, nullptr, $3, nullptr ); }
+	| '(' abstract_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
+		{ $$ = $2->addParamList( $6 ); }
+	| '(' abstract_function ')'							// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+array_dimension:
+		// Only the first dimension can be empty.
+	'[' ']'
+		{ $$ = DeclarationNode::newArray( 0, 0, false ); }
+	| '[' ']' multi_array_dimension
+		{ $$ = DeclarationNode::newArray( 0, 0, false )->addArray( $3 ); }
+	| multi_array_dimension
+	;
+
+multi_array_dimension:
+	'[' push assignment_expression pop ']'
+		{ $$ = DeclarationNode::newArray( $3, 0, false ); }
+	| '[' push '*' pop ']'								// C99
+		{ $$ = DeclarationNode::newVarArray( 0 ); }
+	| multi_array_dimension '[' push assignment_expression pop ']'
+		{ $$ = $1->addArray( DeclarationNode::newArray( $4, 0, false ) ); }
+	| multi_array_dimension '[' push '*' pop ']'		// C99
+		{ $$ = $1->addArray( DeclarationNode::newVarArray( 0 ) ); }
+	;
+
+// This pattern parses a declaration of a parameter abstract variable or function prototype, i.e., there is no
+// identifier to which the type applies, e.g.:
+//
+//		int f( int );			// not handled here
+//		int f( int * );			// abstract function-prototype parameter; no parameter name specified
+//		int f( int (*)() );		// abstract function-prototype parameter; no parameter name specified
+//		int f( int (int) );		// abstract function-prototype parameter; no parameter name specified
+//
+// The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays
+// and functions versus pointers to arrays and functions. In addition, the pattern handles the
+// special meaning of parenthesis around a typedef name:
+//
+//		ISO/IEC 9899:1999 Section 6.7.5.3(11) : "In a parameter declaration, a single typedef name in
+//		parentheses is taken to be an abstract declarator that specifies a function with a single parameter,
+//		not as redundant parentheses around the identifier."
+//
+// For example:
+//
+//		typedef float T;
+//		int f( int ( T [5] ) );					// see abstract_parameter_declarator
+//		int g( int ( T ( int ) ) );				// see abstract_parameter_declarator
+//		int f( int f1( T a[5] ) );				// see identifier_parameter_declarator
+//		int g( int g1( T g2( int p ) ) );		// see identifier_parameter_declarator
+//
+// In essence, a '(' immediately to the left of typedef name, T, is interpreted as starting a parameter type list, and
+// not as redundant parentheses around a redeclaration of T. Finally, the pattern also precludes declaring an array of
+// functions versus a pointer to an array of functions, and returning arrays and functions versus pointers to arrays and
+// functions.
+
+abstract_parameter_declarator:
+	abstract_parameter_ptr
+	| abstract_parameter_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	| abstract_parameter_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+abstract_parameter_ptr:
+	ptrref_operator
+		{ $$ = DeclarationNode::newPointer( nullptr ); }
+	| ptrref_operator type_qualifier_list
+		{ $$ = DeclarationNode::newPointer( $2 ); }
+	| ptrref_operator abstract_parameter_declarator
+		{ $$ = $2->addPointer( DeclarationNode::newPointer( nullptr ) ); }
+	| ptrref_operator type_qualifier_list abstract_parameter_declarator
+		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
+	| '(' abstract_parameter_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }
+	;
+
+abstract_parameter_array:
+	array_parameter_dimension
+	| '(' abstract_parameter_ptr ')' array_parameter_dimension
+		{ $$ = $2->addArray( $4 ); }
+	| '(' abstract_parameter_array ')' multi_array_dimension // redundant parenthesis
+		{ $$ = $2->addArray( $4 ); }
+	| '(' abstract_parameter_array ')'					// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+abstract_parameter_function:
+	'(' push parameter_type_list_opt pop ')'			// empty parameter list OBSOLESCENT (see 3)
+		{ $$ = DeclarationNode::newFunction( nullptr, nullptr, $3, nullptr ); }
+	| '(' abstract_parameter_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
+		{ $$ = $2->addParamList( $6 ); }
+	| '(' abstract_parameter_function ')'				// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+array_parameter_dimension:
+		// Only the first dimension can be empty or have qualifiers.
+	array_parameter_1st_dimension
+	| array_parameter_1st_dimension multi_array_dimension
+		{ $$ = $1->addArray( $2 ); }
+	| multi_array_dimension
+	;
+
+// The declaration of an array parameter has additional syntax over arrays in normal variable declarations:
+//
+//		ISO/IEC 9899:1999 Section 6.7.5.2(1) : "The optional type qualifiers and the keyword static shall appear only in
+//		a declaration of a function parameter with an array type, and then only in the outermost array type derivation."
+
+array_parameter_1st_dimension:
+	'[' ']'
+		{ $$ = DeclarationNode::newArray( 0, 0, false ); }
+	// multi_array_dimension handles the '[' '*' ']' case
+	| '[' push type_qualifier_list '*' pop ']'			// remaining C99
+		{ $$ = DeclarationNode::newVarArray( $3 ); }
+	| '[' push type_qualifier_list pop ']'
+		{ $$ = DeclarationNode::newArray( 0, $3, false ); }
+	// multi_array_dimension handles the '[' assignment_expression ']' case
+	| '[' push type_qualifier_list assignment_expression pop ']'
+		{ $$ = DeclarationNode::newArray( $4, $3, false ); }
+	| '[' push STATIC type_qualifier_list_opt assignment_expression pop ']'
+		{ $$ = DeclarationNode::newArray( $5, $4, true ); }
+	| '[' push type_qualifier_list STATIC assignment_expression pop ']'
+		{ $$ = DeclarationNode::newArray( $5, $3, true ); }
+	;
+
+// This pattern parses a declaration of an abstract variable, but does not allow "int ()" for a function pointer.
+//
+//		struct S {
+//          int;
+//          int *;
+//          int [10];
+//          int (*)();
+//      };
+
+variable_abstract_declarator:
+	variable_abstract_ptr
+	| variable_abstract_array attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	| variable_abstract_function attribute_list_opt
+		{ $$ = $1->addQualifiers( $2 ); }
+	;
+
+variable_abstract_ptr:
+	ptrref_operator
+		{ $$ = DeclarationNode::newPointer( 0 ); }
+	| ptrref_operator type_qualifier_list
+		{ $$ = DeclarationNode::newPointer( $2 ); }
+	| ptrref_operator variable_abstract_declarator
+		{ $$ = $2->addPointer( DeclarationNode::newPointer( 0 ) ); }
+	| ptrref_operator type_qualifier_list variable_abstract_declarator
+		{ $$ = $3->addPointer( DeclarationNode::newPointer( $2 ) ); }
+	| '(' variable_abstract_ptr ')' attribute_list_opt
+		{ $$ = $2->addQualifiers( $4 ); }
+	;
+
+variable_abstract_array:
+	array_dimension
+	| '(' variable_abstract_ptr ')' array_dimension
+		{ $$ = $2->addArray( $4 ); }
+	| '(' variable_abstract_array ')' multi_array_dimension // redundant parenthesis
+		{ $$ = $2->addArray( $4 ); }
+	| '(' variable_abstract_array ')'					// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+variable_abstract_function:
+	'(' variable_abstract_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)
+		{ $$ = $2->addParamList( $6 ); }
+	| '(' variable_abstract_function ')'				// redundant parenthesis
+		{ $$ = $2; }
+	;
+
+// This pattern parses a new-style declaration for a parameter variable or function prototype that is either an
+// identifier or typedef name and allows the C99 array options, which can only appear in a parameter list.
+
+cfa_identifier_parameter_declarator_tuple:				// CFA
+	cfa_identifier_parameter_declarator_no_tuple
+	| cfa_abstract_tuple
+	| type_qualifier_list cfa_abstract_tuple
+		{ $$ = $2->addQualifiers( $1 ); }
+	;
+
+cfa_identifier_parameter_declarator_no_tuple:			// CFA
+	cfa_identifier_parameter_ptr
+	| cfa_identifier_parameter_array
+	;
+
+cfa_identifier_parameter_ptr:							// CFA
+	ptrref_operator type_specifier
+		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+	| type_qualifier_list ptrref_operator type_specifier
+		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
+	| ptrref_operator cfa_abstract_function
+		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+	| type_qualifier_list ptrref_operator cfa_abstract_function
+		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
+	| ptrref_operator cfa_identifier_parameter_declarator_tuple
+		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+	| type_qualifier_list ptrref_operator cfa_identifier_parameter_declarator_tuple
+		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
+	;
+
+cfa_identifier_parameter_array:							// CFA
+		// Only the first dimension can be empty or have qualifiers. Empty dimension must be factored out due to
+		// shift/reduce conflict with new-style empty (void) function return type.
+	'[' ']' type_specifier
+		{ $$ = $3->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+	| cfa_array_parameter_1st_dimension type_specifier
+		{ $$ = $2->addNewArray( $1 ); }
+	| '[' ']' multi_array_dimension type_specifier
+		{ $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+	| cfa_array_parameter_1st_dimension multi_array_dimension type_specifier
+		{ $$ = $3->addNewArray( $2 )->addNewArray( $1 ); }
+	| multi_array_dimension type_specifier
+		{ $$ = $2->addNewArray( $1 ); }
+
+	| '[' ']' cfa_identifier_parameter_ptr
+		{ $$ = $3->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+	| cfa_array_parameter_1st_dimension cfa_identifier_parameter_ptr
+		{ $$ = $2->addNewArray( $1 ); }
+	| '[' ']' multi_array_dimension cfa_identifier_parameter_ptr
+		{ $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
+	| cfa_array_parameter_1st_dimension multi_array_dimension cfa_identifier_parameter_ptr
+		{ $$ = $3->addNewArray( $2 )->addNewArray( $1 ); }
+	| multi_array_dimension cfa_identifier_parameter_ptr
+		{ $$ = $2->addNewArray( $1 ); }
+	;
+
+cfa_array_parameter_1st_dimension:
+	'[' push type_qualifier_list '*' pop ']'			// remaining C99
+		{ $$ = DeclarationNode::newVarArray( $3 ); }
+	| '[' push type_qualifier_list assignment_expression pop ']'
+		{ $$ = DeclarationNode::newArray( $4, $3, false ); }
+	| '[' push declaration_qualifier_list assignment_expression pop ']'
+		// declaration_qualifier_list must be used because of shift/reduce conflict with
+		// assignment_expression, so a semantic check is necessary to preclude them as a type_qualifier cannot
+		// appear in this context.
+		{ $$ = DeclarationNode::newArray( $4, $3, true ); }
+	| '[' push declaration_qualifier_list type_qualifier_list assignment_expression pop ']'
+		{ $$ = DeclarationNode::newArray( $5, $4->addQualifiers( $3 ), true ); }
+	;
+
+// This pattern parses a new-style declaration of an abstract variable or function prototype, i.e., there is no
+// identifier to which the type applies, e.g.:
+//
+//		[int] f( int );				// abstract variable parameter; no parameter name specified
+//		[int] f( [int] (int) );		// abstract function-prototype parameter; no parameter name specified
+//
+// These rules need LR(3):
+//
+//		cfa_abstract_tuple identifier_or_type_name
+//		'[' cfa_parameter_list ']' identifier_or_type_name '(' cfa_parameter_type_list_opt ')'
+//
+// since a function return type can be syntactically identical to a tuple type:
+//
+//		[int, int] t;
+//		[int, int] f( int );
+//
+// Therefore, it is necessary to look at the token after identifier_or_type_name to know when to reduce
+// cfa_abstract_tuple. To make this LR(1), several rules have to be flattened (lengthened) to allow the necessary
+// lookahead. To accomplish this, cfa_abstract_declarator has an entry point without tuple, and tuple declarations are
+// duplicated when appearing with cfa_function_specifier.
+
+cfa_abstract_declarator_tuple:							// CFA
+	cfa_abstract_tuple
+	| type_qualifier_list cfa_abstract_tuple
+		{ $$ = $2->addQualifiers( $1 ); }
+	| cfa_abstract_declarator_no_tuple
+	;
+
+cfa_abstract_declarator_no_tuple:						// CFA
+	cfa_abstract_ptr
+	| cfa_abstract_array
+	;
+
+cfa_abstract_ptr:										// CFA
+	ptrref_operator type_specifier
+		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+	| type_qualifier_list ptrref_operator type_specifier
+		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
+	| ptrref_operator cfa_abstract_function
+		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+	| type_qualifier_list ptrref_operator cfa_abstract_function
+		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
+	| ptrref_operator cfa_abstract_declarator_tuple
+		{ $$ = $2->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
+	| type_qualifier_list ptrref_operator cfa_abstract_declarator_tuple
+		{ $$ = $3->addNewPointer( DeclarationNode::newPointer( $1 ) ); }
+	;
+
+cfa_abstract_array:										// CFA
+		// Only the first dimension can be empty. Empty dimension must be factored out due to shift/reduce conflict with
+		// empty (void) function return type.
+	'[' ']' type_specifier
+		{ $$ = $3->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
+	| '[' ']' multi_array_dimension type_specifier
+		{ $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
+	| multi_array_dimension type_specifier
+		{ $$ = $2->addNewArray( $1 ); }
+	| '[' ']' cfa_abstract_ptr
+		{ $$ = $3->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
+	| '[' ']' multi_array_dimension cfa_abstract_ptr
+		{ $$ = $4->addNewArray( $3 )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
+	| multi_array_dimension cfa_abstract_ptr
+		{ $$ = $2->addNewArray( $1 ); }
+	;
+
+cfa_abstract_tuple:										// CFA
+	'[' push cfa_abstract_parameter_list pop ']'
+		{ $$ = DeclarationNode::newTuple( $3 ); }
+	;
+
+cfa_abstract_function:									// CFA
+//	'[' ']' '(' cfa_parameter_type_list_opt ')'
+//		{ $$ = DeclarationNode::newFunction( nullptr, DeclarationNode::newTuple( nullptr ), $4, nullptr ); }
+	cfa_abstract_tuple '(' push cfa_parameter_type_list_opt pop ')'
+		{ $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); }
+	| cfa_function_return '(' push cfa_parameter_type_list_opt pop ')'
+		{ $$ = DeclarationNode::newFunction( nullptr, $1, $4, nullptr ); }
+	;
+
+// 1) ISO/IEC 9899:1999 Section 6.7.2(2) : "At least one type specifier shall be given in the declaration specifiers in
+//    each declaration, and in the specifier-qualifier list in each structure declaration and type name."
+//
+// 2) ISO/IEC 9899:1999 Section 6.11.5(1) : "The placement of a storage-class specifier other than at the beginning of
+//    the declaration specifiers in a declaration is an obsolescent feature."
+//
+// 3) ISO/IEC 9899:1999 Section 6.11.6(1) : "The use of function declarators with empty parentheses (not
+//    prototype-format parameter type declarators) is an obsolescent feature."
+//
+// 4) ISO/IEC 9899:1999 Section 6.11.7(1) : "The use of function definitions with separate parameter identifier and
+//    declaration lists (not prototype-format parameter type and identifier declarators) is an obsolescent feature.
+
+//************************* MISCELLANEOUS ********************************
+
+comma_opt:												// redundant comma
+	// empty
+	| ','
+	;
+
+assignment_opt:
+	// empty
+		{ $$ = nullptr; }
+	| '=' assignment_expression
+		{ $$ = $2; }
+	;
+
+extension_opt:
+	// empty
+		{ $$ = false; }
+	| EXTENSION											// GCC
+		{ $$ = true; }
+	;
+
+%%
+// ----end of grammar----
+
+extern char *yytext;
+
+void yyerror( const char * ) {
+	cout << "Error ";
+	if ( yyfilename ) {
+		cout << "in file " << yyfilename << " ";
+	} // if
+	cout << "at line " << yylineno << " reading token \"" << (yytext[0] == '\0' ? "EOF" : yytext) << "\"" << endl;
+}
+
+// Local Variables: //
+// mode: c++ //
+// tab-width: 4 //
+// compile-command: "make install" //
+// End: //
