Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/CodeGen/CodeGenerator.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -656,5 +656,7 @@
 	}
 
-	void CodeGenerator::visit( TupleExpr * tupleExpr ) { assert( false ); }
+	void CodeGenerator::visit( UntypedTupleExpr * tupleExpr ) { assertf( false, "UntypedTupleExpr should not make it to Code Gen" ); }
+
+	void CodeGenerator::visit( TupleExpr * tupleExpr ) { assertf( false, "TupleExpr should not make it to Code Gen" ); }
 
 	void CodeGenerator::visit( TypeExpr * typeExpr ) {}
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/CodeGen/CodeGenerator.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -72,4 +72,5 @@
 		virtual void visit( CommaExpr *commaExpr );
 		virtual void visit( CompoundLiteralExpr *compLitExpr );
+		virtual void visit( UntypedTupleExpr *tupleExpr );
 		virtual void visit( TupleExpr *tupleExpr );
 		virtual void visit( TypeExpr *typeExpr );
Index: src/CodeGen/GenType.cc
===================================================================
--- src/CodeGen/GenType.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/CodeGen/GenType.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -41,4 +41,5 @@
 		virtual void visit( EnumInstType *enumInst );
 		virtual void visit( TypeInstType *typeInst );
+		virtual void visit( TupleType * tupleType );
 		virtual void visit( VarArgsType *varArgsType );
 		virtual void visit( ZeroType *zeroType );
@@ -197,4 +198,9 @@
 	}
 
+	void GenType::visit( TupleType * tupleType ) {
+		assertf( ! mangle, "Tuple types should not make it to Code Gen." );
+		Visitor::visit( tupleType );
+	}
+
 	void GenType::visit( VarArgsType *varArgsType ) {
 		typeString = "__builtin_va_list " + typeString;
Index: src/GenPoly/Box.cc
===================================================================
--- src/GenPoly/Box.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/GenPoly/Box.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -136,8 +136,13 @@
 			template< typename DeclClass >
 			DeclClass *handleDecl( DeclClass *decl, Type *type );
-
-			using PolyMutator::mutate;
+			template< typename AggDecl >
+			AggDecl * handleAggDecl( AggDecl * aggDecl );
+
+			typedef PolyMutator Parent;
+			using Parent::mutate;
 			virtual DeclarationWithType *mutate( FunctionDecl *functionDecl ) override;
 			virtual ObjectDecl *mutate( ObjectDecl *objectDecl ) override;
+			virtual StructDecl *mutate( StructDecl *structDecl ) override;
+			virtual UnionDecl *mutate( UnionDecl *unionDecl ) override;
 			virtual TypeDecl *mutate( TypeDecl *typeDecl ) override;
 			virtual TypedefDecl *mutate( TypedefDecl *typedefDecl ) override;
@@ -686,5 +691,5 @@
 			for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) {
 				TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
-				assert(paramType && "Aggregate parameters should be type expressions");
+				assertf(paramType, "Aggregate parameters should be type expressions");
 				paramType->set_type( replaceWithConcrete( appExpr, paramType->get_type(), false ) );
 			}
@@ -783,5 +788,5 @@
 		void Pass1::boxParams( ApplicationExpr *appExpr, FunctionType *function, std::list< Expression *>::iterator &arg, const TyVarMap &exprTyVars ) {
 			for ( std::list< DeclarationWithType *>::const_iterator param = function->get_parameters().begin(); param != function->get_parameters().end(); ++param, ++arg ) {
-				assert( arg != appExpr->get_args().end() );
+				assertf( arg != appExpr->get_args().end(), "boxParams: missing argument for param %s to %s in %s", toString( *param ).c_str(), toString( function ).c_str(), toString( appExpr ).c_str() );
 				addCast( *arg, (*param)->get_type(), exprTyVars );
 				boxParam( (*param)->get_type(), *arg, exprTyVars );
@@ -1127,7 +1132,10 @@
 			makeTyVarMap( function, exprTyVars ); // xxx - should this take into account the variables already bound in scopeTyVars (i.e. remove them from exprTyVars?)
 			ReferenceToType *dynRetType = isDynRet( function, exprTyVars );
-			Type *concRetType = appExpr->get_result()->isVoid() ? nullptr : appExpr->get_result();// ?: dynRetType; // xxx - is concRetType a good name?
-
+
+			// NOTE: addDynRetParam needs to know the actual (generated) return type so it can make a temp variable, so pass the result type from the appExpr
+			// passTypeVars needs to know the program-text return type (i.e. the distinction between _conc_T30 and T3(int))
+			// concRetType may not be a good name in one or both of these places. A more appropriate name change is welcome.
 			if ( dynRetType ) {
+				Type *concRetType = appExpr->get_result()->isVoid() ? nullptr : appExpr->get_result();
 				ret = addDynRetParam( appExpr, function, concRetType, arg ); // xxx - used to use dynRetType instead of concRetType
 			} else if ( needsAdapter( function, scopeTyVars ) && ! needsAdapter( function, exprTyVars) ) { // xxx - exprTyVars is used above...?
@@ -1142,4 +1150,5 @@
 			arg = appExpr->get_args().begin();
 
+			Type *concRetType = replaceWithConcrete( appExpr, dynRetType );
 			passTypeVars( appExpr, concRetType, arg, exprTyVars ); // xxx - used to use dynRetType instead of concRetType; this changed so that the correct type paramaters are passed for return types (it should be the concrete type's parameters, not the formal type's)
 			addInferredParams( appExpr, function, arg, exprTyVars );
@@ -1271,5 +1280,5 @@
 		template< typename DeclClass >
 		DeclClass * Pass2::handleDecl( DeclClass *decl, Type *type ) {
-			DeclClass *ret = static_cast< DeclClass *>( Mutator::mutate( decl ) );
+			DeclClass *ret = static_cast< DeclClass *>( Parent::mutate( decl ) );
 
 			return ret;
@@ -1305,4 +1314,21 @@
 		}
 
+		template< typename AggDecl >
+		AggDecl * Pass2::handleAggDecl( AggDecl * aggDecl ) {
+			// prevent tyVars from leaking into containing scope
+			scopeTyVars.beginScope();
+			Parent::mutate( aggDecl );
+			scopeTyVars.endScope();
+			return aggDecl;
+		}
+
+		StructDecl * Pass2::mutate( StructDecl *aggDecl ) {
+			return handleAggDecl( aggDecl );
+		}
+
+		UnionDecl * Pass2::mutate( UnionDecl *aggDecl ) {
+			return handleAggDecl( aggDecl );
+		}
+
 		TypeDecl * Pass2::mutate( TypeDecl *typeDecl ) {
 			addToTyVarMap( typeDecl, scopeTyVars );
@@ -1310,5 +1336,5 @@
 				return handleDecl( typeDecl, typeDecl->get_base() );
 			} else {
-				return Mutator::mutate( typeDecl );
+				return Parent::mutate( typeDecl );
 			}
 		}
@@ -1322,5 +1348,5 @@
 			makeTyVarMap( pointerType, scopeTyVars );
 
-			Type *ret = Mutator::mutate( pointerType );
+			Type *ret = Parent::mutate( pointerType );
 
 			scopeTyVars.endScope();
Index: src/GenPoly/InstantiateGeneric.cc
===================================================================
--- src/GenPoly/InstantiateGeneric.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/GenPoly/InstantiateGeneric.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -18,4 +18,5 @@
 #include <utility>
 #include <vector>
+#include <unordered_map>
 
 #include "InstantiateGeneric.h"
@@ -24,4 +25,5 @@
 #include "GenPoly.h"
 #include "ScopedSet.h"
+#include "PolyMutator.h"
 
 #include "ResolvExpr/typeops.h"
@@ -146,4 +148,20 @@
 	}
 
+	// collect the environments of each TypeInstType so that type variables can be replaced
+	// xxx - possibly temporary solution. Access to type environments is required in GenericInstantiator, but it needs to be a DeclMutator which does not provide easy access to the type environments.
+	class EnvFinder final : public GenPoly::PolyMutator {
+	public:
+		virtual Type * mutate( TypeInstType * inst ) override {
+			if ( env ) envMap[inst] = env;
+			return inst;
+		}
+
+		// don't want to associate an environment with TypeInstTypes that occur in function types - this may actually only apply to function types belonging to DeclarationWithTypes (or even just FunctionDecl)?
+		virtual Type * mutate( FunctionType * ftype ) override {
+			return ftype;
+		}
+		std::unordered_map< ReferenceToType *, TypeSubstitution * > envMap;
+	};
+
 	/// Mutator pass that replaces concrete instantiations of generic types with actual struct declarations, scoped appropriately
 	class GenericInstantiator final : public DeclMutator {
@@ -154,7 +172,8 @@
 		/// Namer for concrete types
 		UniqueName typeNamer;
-
+		/// Reference to mapping of environments
+		const std::unordered_map< ReferenceToType *, TypeSubstitution * > & envMap;
 	public:
-		GenericInstantiator() : DeclMutator(), instantiations(), dtypeStatics(), typeNamer("_conc_") {}
+		GenericInstantiator( const std::unordered_map< ReferenceToType *, TypeSubstitution * > & envMap ) : DeclMutator(), instantiations(), dtypeStatics(), typeNamer("_conc_"), envMap( envMap ) {}
 
 		using DeclMutator::mutate;
@@ -174,4 +193,7 @@
 		void insert( UnionInstType *inst, const std::list< TypeExpr* > &typeSubs, UnionDecl *decl ) { instantiations.insert( inst->get_baseUnion(), typeSubs, decl ); }
 
+		void replaceParametersWithConcrete( std::list< Expression* >& params );
+		Type *replaceWithConcrete( Type *type, bool doClone );
+
 		/// Strips a dtype-static aggregate decl of its type parameters, marks it as stripped
 		void stripDtypeParams( AggregateDecl *base, std::list< TypeDecl* >& baseParams, const std::list< TypeExpr* >& typeSubs );
@@ -179,5 +201,7 @@
 
 	void instantiateGeneric( std::list< Declaration* > &translationUnit ) {
-		GenericInstantiator instantiator;
+		EnvFinder finder;
+		mutateAll( translationUnit, finder );
+		GenericInstantiator instantiator( finder.envMap );
 		instantiator.mutateDeclarationList( translationUnit );
 	}
@@ -209,4 +233,7 @@
 				// can pretend that any ftype is `void (*)(void)`
 				out.push_back( new TypeExpr( new FunctionType( Type::Qualifiers(), false ) ) );
+				break;
+			case TypeDecl::Ttype:
+				assertf( false, "Ttype parameters are not currently allowed as parameters to generic types." );
 				break;
 			}
@@ -253,4 +280,40 @@
 	}
 
+	/// xxx - more or less copied from box -- these should be merged with those somehow...
+	void GenericInstantiator::replaceParametersWithConcrete( std::list< Expression* >& params ) {
+		for ( std::list< Expression* >::iterator param = params.begin(); param != params.end(); ++param ) {
+			TypeExpr *paramType = dynamic_cast< TypeExpr* >( *param );
+			assertf(paramType, "Aggregate parameters should be type expressions");
+			paramType->set_type( replaceWithConcrete( paramType->get_type(), false ) );
+		}
+	}
+
+	Type *GenericInstantiator::replaceWithConcrete( Type *type, bool doClone ) {
+		if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( type ) ) {
+			if ( envMap.count( typeInst ) ) {
+				TypeSubstitution * env = envMap.at( typeInst );
+				Type *concrete = env->lookup( typeInst->get_name() );
+				if ( concrete ) {
+					return concrete->clone();
+				}
+				else return typeInst->clone();
+			}
+		} else if ( StructInstType *structType = dynamic_cast< StructInstType* >( type ) ) {
+			if ( doClone ) {
+				structType = structType->clone();
+			}
+			replaceParametersWithConcrete( structType->get_parameters() );
+			return structType;
+		} else if ( UnionInstType *unionType = dynamic_cast< UnionInstType* >( type ) ) {
+			if ( doClone ) {
+				unionType = unionType->clone();
+			}
+			replaceParametersWithConcrete( unionType->get_parameters() );
+			return unionType;
+		}
+		return type;
+	}
+
+
 	Type* GenericInstantiator::mutate( StructInstType *inst ) {
 		// mutate subtypes
@@ -262,4 +325,7 @@
 		if ( inst->get_parameters().empty() ) return inst;
 
+		// need to replace type variables to ensure that generic types are instantiated for the return values of polymorphic functions (in particular, for thunks, because they are not [currently] copy constructed).
+		replaceWithConcrete( inst, false );
+
 		// check for an already-instantiatiated dtype-static type
 		if ( dtypeStatics.find( inst->get_baseStruct() ) != dtypeStatics.end() ) {
@@ -269,5 +335,5 @@
 
 		// check if type can be concretely instantiated; put substitutions into typeSubs
-		assert( inst->get_baseParameters() && "Base struct has parameters" );
+		assertf( inst->get_baseParameters(), "Base struct has parameters" );
 		std::list< TypeExpr* > typeSubs;
 		genericType gt = makeSubstitutions( *inst->get_baseParameters(), inst->get_parameters(), typeSubs );
Index: src/GenPoly/ScrubTyVars.cc
===================================================================
--- src/GenPoly/ScrubTyVars.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/GenPoly/ScrubTyVars.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -31,4 +31,5 @@
 			  case TypeDecl::Any:
 			  case TypeDecl::Dtype:
+			  case TypeDecl::Ttype:
 				{
 					PointerType *ret = new PointerType( Type::Qualifiers(), new VoidType( typeInst->get_qualifiers() ) );
Index: src/GenPoly/Specialize.cc
===================================================================
--- src/GenPoly/Specialize.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/GenPoly/Specialize.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -32,12 +32,11 @@
 #include "Common/utility.h"
 #include "InitTweak/InitTweak.h"
+#include "Tuples/Tuples.h"
 
 namespace GenPoly {
-	const std::list<Label> noLabels;
-
+	class Specializer;
 	class Specialize final : public PolyMutator {
+		friend class Specializer;
 	  public:
-		Specialize( std::string paramPrefix = "_p" );
-
 		using PolyMutator::mutate;
 		virtual Expression * mutate( ApplicationExpr *applicationExpr ) override;
@@ -48,24 +47,40 @@
 		// virtual Expression * mutate( CommaExpr *commaExpr );
 
-	  private:
-		Expression *createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams = 0 );
-		Expression *doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams = 0 );
+		Specializer * specializer = nullptr;
 		void handleExplicitParams( ApplicationExpr *appExpr );
-
-		UniqueName thunkNamer;
-		std::string paramPrefix;
 	};
 
-	void convertSpecializations( std::list< Declaration* >& translationUnit ) {
-		Specialize specializer;
-		mutateAll( translationUnit, specializer );
-	}
-
-	Specialize::Specialize( std::string paramPrefix )
-		: thunkNamer( "_thunk" ), paramPrefix( paramPrefix ) {
-	}
+	class Specializer {
+	  public:
+		Specializer( Specialize & spec ) : spec( spec ), env( spec.env ), stmtsToAdd( spec.stmtsToAdd ) {}
+		virtual bool needsSpecialization( Type * formalType, Type * actualType, TypeSubstitution * env ) = 0;
+		virtual Expression *createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) = 0;
+		virtual Expression *doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams = 0 );
+
+	  protected:
+		Specialize & spec;
+		std::string paramPrefix = "_p";
+		TypeSubstitution *& env;
+		std::list< Statement * > & stmtsToAdd;
+	};
+
+	// for normal polymorphic -> monomorphic function conversion
+	class PolySpecializer : public Specializer {
+	  public:
+		PolySpecializer( Specialize & spec ) : Specializer( spec ) {}
+		virtual bool needsSpecialization( Type * formalType, Type * actualType, TypeSubstitution * env ) override;
+		virtual Expression *createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) override;
+	};
+
+	// // for tuple -> non-tuple function conversion
+	class TupleSpecializer : public Specializer {
+	  public:
+		TupleSpecializer( Specialize & spec ) : Specializer( spec ) {}
+		virtual bool needsSpecialization( Type * formalType, Type * actualType, TypeSubstitution * env ) override;
+		virtual Expression *createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) override;
+	};
 
 	/// Looks up open variables in actual type, returning true if any of them are bound in the environment or formal type.
-	bool needsSpecialization( Type *formalType, Type *actualType, TypeSubstitution *env ) {
+	bool PolySpecializer::needsSpecialization( Type *formalType, Type *actualType, TypeSubstitution *env ) {
 		if ( env ) {
 			using namespace ResolvExpr;
@@ -92,11 +107,12 @@
 
 	/// Generates a thunk that calls `actual` with type `funType` and returns its address
-	Expression * Specialize::createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) {
+	Expression * PolySpecializer::createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) {
+		static UniqueName thunkNamer( "_thunk" );
+
 		FunctionType *newType = funType->clone();
 		if ( env ) {
-			TypeSubstitution newEnv( *env );
 			// it is important to replace only occurrences of type variables that occur free in the
 			// thunk's type
-			newEnv.applyFree( newType );
+			env->applyFree( newType );
 		} // if
 		// create new thunk with same signature as formal type (C linkage, empty body)
@@ -125,5 +141,5 @@
 		std::list< Statement* > oldStmts;
 		oldStmts.splice( oldStmts.end(), stmtsToAdd );
-		handleExplicitParams( appExpr );
+		spec.handleExplicitParams( appExpr );
 		paramPrefix = oldParamPrefix;
 		// write any statements added for recursive specializations into the thunk body
@@ -147,9 +163,8 @@
 	}
 
-	Expression * Specialize::doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams ) {
+	Expression * Specializer::doSpecialization( Type *formalType, Expression *actual, InferredParams *inferParams ) {
 		assertf( actual->has_result(), "attempting to specialize an untyped expression" );
 		if ( needsSpecialization( formalType, actual->get_result(), env ) ) {
-			FunctionType *funType;
-			if ( ( funType = getFunctionType( formalType ) ) ) {
+			if ( FunctionType *funType = getFunctionType( formalType ) ) {
 				ApplicationExpr *appExpr;
 				VariableExpr *varExpr;
@@ -170,4 +185,122 @@
 	}
 
+	bool TupleSpecializer::needsSpecialization( Type *formalType, Type *actualType, TypeSubstitution *env ) {
+		if ( FunctionType * ftype = getFunctionType( formalType ) ) {
+			return ftype->isTtype();
+		}
+		return false;
+	}
+
+	/// restructures arg to match the structure of a single formal parameter. Assumes that atomic types are compatible (as the Resolver should have ensured this)
+	template< typename OutIterator >
+	void matchOneFormal( Expression * arg, unsigned & idx, Type * formal, OutIterator out ) {
+		if ( TupleType * tupleType = dynamic_cast< TupleType * >( formal ) ) {
+			std::list< Expression * > exprs;
+			for ( Type * t : *tupleType ) {
+				matchOneFormal( arg, idx, t, back_inserter( exprs ) );
+			}
+			*out++ = new TupleExpr( exprs );
+		} else {
+			*out++ = new TupleIndexExpr( arg->clone(), idx++ );
+		}
+	}
+
+	/// restructures the ttype argument to match the structure of the formal parameters of the actual function.
+	// [begin, end) are the formal parameters.
+	// args is the list of arguments currently given to the actual function, the last of which needs to be restructured.
+	template< typename Iterator, typename OutIterator >
+	void fixLastArg( Expression * last, Iterator begin, Iterator end, OutIterator out ) {
+		// safe_dynamic_cast for the assertion
+		safe_dynamic_cast< TupleType * >( last->get_result() );
+		unsigned idx = 0;
+		for ( ; begin != end; ++begin ) {
+			DeclarationWithType * formal = *begin;
+			Type * formalType = formal->get_type();
+			matchOneFormal( last, idx, formalType, out );
+		}
+		delete last;
+	}
+
+	Expression * TupleSpecializer::createThunkFunction( FunctionType *funType, Expression *actual, InferredParams *inferParams ) {
+		static UniqueName thunkNamer( "_tupleThunk" );
+
+		FunctionType *newType = funType->clone();
+		if ( env ) {
+			// it is important to replace only occurrences of type variables that occur free in the
+			// thunk's type
+			env->applyFree( newType );
+		} // if
+		// create new thunk with same signature as formal type (C linkage, empty body)
+		FunctionDecl *thunkFunc = new FunctionDecl( thunkNamer.newName(), DeclarationNode::NoStorageClass, LinkageSpec::C, newType, new CompoundStmt( noLabels ), false, false );
+		thunkFunc->fixUniqueId();
+
+		// thunks may be generated and not used - silence warning with attribute
+		thunkFunc->get_attributes().push_back( new Attribute( "unused" ) );
+
+		// thread thunk parameters into call to actual function, naming thunk parameters as we go
+		UniqueName paramNamer( paramPrefix );
+		ApplicationExpr *appExpr = new ApplicationExpr( actual );
+
+		FunctionType * actualType = getFunctionType( actual->get_result() )->clone();
+		if ( env ) {
+			// need to apply the environment to the actual function's type, since it may itself be polymorphic
+			env->apply( actualType );
+		}
+		std::unique_ptr< FunctionType > actualTypeManager( actualType ); // for RAII
+		std::list< DeclarationWithType * >::iterator actualBegin = actualType->get_parameters().begin();
+		std::list< DeclarationWithType * >::iterator actualEnd = actualType->get_parameters().end();
+		std::list< DeclarationWithType * >::iterator formalBegin = funType->get_parameters().begin();
+		std::list< DeclarationWithType * >::iterator formalEnd = funType->get_parameters().end();
+
+		Expression * last = nullptr;
+		for ( DeclarationWithType* param : thunkFunc->get_functionType()->get_parameters() ) {
+			// walk the parameters to the actual function alongside the parameters to the thunk to find the location where the ttype parameter begins to satisfy parameters in the actual function.
+			param->set_name( paramNamer.newName() );
+			assertf( formalBegin != formalEnd, "Reached end of formal parameters before finding ttype parameter" );
+			if ( Tuples::isTtype((*formalBegin)->get_type()) ) {
+				last = new VariableExpr( param );
+				break;
+			}
+			assertf( actualBegin != actualEnd, "reached end of actual function's arguments before finding ttype parameter" );
+			++actualBegin;
+			++formalBegin;
+
+			appExpr->get_args().push_back( new VariableExpr( param ) );
+		} // for
+		assert( last );
+		fixLastArg( last, actualBegin, actualEnd, back_inserter( appExpr->get_args() ) );
+		appExpr->set_env( maybeClone( env ) );
+		if ( inferParams ) {
+			appExpr->get_inferParams() = *inferParams;
+		} // if
+
+		// handle any specializations that may still be present
+		std::string oldParamPrefix = paramPrefix;
+		paramPrefix += "p";
+		// save stmtsToAdd in oldStmts
+		std::list< Statement* > oldStmts;
+		oldStmts.splice( oldStmts.end(), stmtsToAdd );
+		spec.mutate( appExpr );
+		paramPrefix = oldParamPrefix;
+		// write any statements added for recursive specializations into the thunk body
+		thunkFunc->get_statements()->get_kids().splice( thunkFunc->get_statements()->get_kids().end(), stmtsToAdd );
+		// restore oldStmts into stmtsToAdd
+		stmtsToAdd.splice( stmtsToAdd.end(), oldStmts );
+
+		// add return (or valueless expression) to the thunk
+		Statement *appStmt;
+		if ( funType->get_returnVals().empty() ) {
+			appStmt = new ExprStmt( noLabels, appExpr );
+		} else {
+			appStmt = new ReturnStmt( noLabels, appExpr );
+		} // if
+		thunkFunc->get_statements()->get_kids().push_back( appStmt );
+
+		// add thunk definition to queue of statements to add
+		stmtsToAdd.push_back( new DeclStmt( noLabels, thunkFunc ) );
+		// return address of thunk function as replacement expression
+		return new AddressExpr( new VariableExpr( thunkFunc ) );
+	}
+
 	void Specialize::handleExplicitParams( ApplicationExpr *appExpr ) {
 		// create thunks for the explicit parameters
@@ -178,5 +311,5 @@
 		std::list< Expression* >::iterator actual;
 		for ( formal = function->get_parameters().begin(), actual = appExpr->get_args().begin(); formal != function->get_parameters().end() && actual != appExpr->get_args().end(); ++formal, ++actual ) {
-			*actual = doSpecialization( (*formal )->get_type(), *actual, &appExpr->get_inferParams() );
+			*actual = specializer->doSpecialization( (*formal )->get_type(), *actual, &appExpr->get_inferParams() );
 		}
 	}
@@ -190,10 +323,8 @@
 			// don't need to do this for intrinsic calls, because they aren't actually passed
 			for ( InferredParams::iterator inferParam = appExpr->get_inferParams().begin(); inferParam != appExpr->get_inferParams().end(); ++inferParam ) {
-				inferParam->second.expr = doSpecialization( inferParam->second.formalType, inferParam->second.expr, &appExpr->get_inferParams() );
+				inferParam->second.expr = specializer->doSpecialization( inferParam->second.formalType, inferParam->second.expr, inferParam->second.inferParams.get() );
 			}
-
 			handleExplicitParams( appExpr );
 		}
-
 		return appExpr;
 	}
@@ -202,5 +333,5 @@
 		addrExpr->get_arg()->acceptMutator( *this );
 		assert( addrExpr->has_result() );
-		addrExpr->set_arg( doSpecialization( addrExpr->get_result(), addrExpr->get_arg() ) );
+		addrExpr->set_arg( specializer->doSpecialization( addrExpr->get_result(), addrExpr->get_arg() ) );
 		return addrExpr;
 	}
@@ -212,5 +343,5 @@
 			return castExpr;
 		}
-		Expression *specialized = doSpecialization( castExpr->get_result(), castExpr->get_arg() );
+		Expression *specialized = specializer->doSpecialization( castExpr->get_result(), castExpr->get_arg() );
 		if ( specialized != castExpr->get_arg() ) {
 			// assume here that the specialization incorporates the cast
@@ -236,4 +367,16 @@
 	// 	return commaExpr;
 	// }
+
+	void convertSpecializations( std::list< Declaration* >& translationUnit ) {
+		Specialize spec;
+
+		TupleSpecializer tupleSpec( spec );
+		spec.specializer = &tupleSpec;
+		mutateAll( translationUnit, spec );
+
+		PolySpecializer polySpec( spec );
+		spec.specializer = &polySpec;
+		mutateAll( translationUnit, spec );
+	}
 } // namespace GenPoly
 
Index: src/InitTweak/FixInit.cc
===================================================================
--- src/InitTweak/FixInit.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/InitTweak/FixInit.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -38,4 +38,5 @@
 #include "SynTree/AddStmtVisitor.h"
 #include "CodeGen/GenType.h"  // for warning/error messages
+#include "Tuples/Tuples.h"
 
 bool ctordtorp = false; // print all debug
@@ -392,5 +393,5 @@
 
 		bool ResolveCopyCtors::skipCopyConstruct( Type * type ) {
-			return dynamic_cast< VarArgsType * >( type ) || GenPoly::getFunctionType( type );
+			return dynamic_cast< VarArgsType * >( type ) || GenPoly::getFunctionType( type ) || Tuples::isTtype( type );
 		}
 
@@ -1099,4 +1100,5 @@
 			addDeclaration( tmp );
 
+			// xxx - this can be TupleAssignExpr now. Need to properly handle this case.
 			ApplicationExpr * callExpr = safe_dynamic_cast< ApplicationExpr * > ( ctorExpr->get_callExpr() );
 			TypeSubstitution * env = ctorExpr->get_env();
Index: src/InitTweak/InitTweak.cc
===================================================================
--- src/InitTweak/InitTweak.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/InitTweak/InitTweak.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -487,4 +487,5 @@
 		virtual void visit( UntypedValofExpr *valofExpr ) { isConstExpr = false; }
 		virtual void visit( CompoundLiteralExpr *compLitExpr ) { isConstExpr = false; }
+		virtual void visit( UntypedTupleExpr *tupleExpr ) { isConstExpr = false; }
 		virtual void visit( TupleExpr *tupleExpr ) { isConstExpr = false; }
 		virtual void visit( TupleAssignExpr *tupleExpr ) { isConstExpr = false; }
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/Parser/DeclarationNode.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -948,5 +948,7 @@
 //	if ( variable.name ) {
 	if ( variable.tyClass != NoTypeClass ) {
-		static const TypeDecl::Kind kindMap[] = { TypeDecl::Any, TypeDecl::Ftype, TypeDecl::Dtype };
+		static const TypeDecl::Kind kindMap[] = { TypeDecl::Any, TypeDecl::Dtype, TypeDecl::Ftype, TypeDecl::Ttype };
+		assertf( sizeof(kindMap)/sizeof(kindMap[0] == NoTypeClass-1), "DeclarationNode::build: kindMap is out of sync." );
+		assertf( variable.tyClass < sizeof(kindMap)/sizeof(kindMap[0]), "Variable's tyClass is out of bounds." );
 //		TypeDecl * ret = new TypeDecl( *variable.name, DeclarationNode::NoStorageClass, nullptr, kindMap[ variable.tyClass ] );
 		TypeDecl * ret = new TypeDecl( *name, DeclarationNode::NoStorageClass, nullptr, kindMap[ variable.tyClass ] );
Index: src/Parser/ExpressionNode.cc
===================================================================
--- src/Parser/ExpressionNode.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/Parser/ExpressionNode.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -323,7 +323,7 @@
 
 Expression *build_tuple( ExpressionNode * expr_node ) {
-	TupleExpr *ret = new TupleExpr();
-	buildMoveList( expr_node, ret->get_exprs() );
-	return ret;
+	std::list< Expression * > exprs;
+	buildMoveList( expr_node, exprs );
+	return new UntypedTupleExpr( exprs );;
 }
 
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/Parser/ParseNode.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -204,5 +204,5 @@
 	enum Length { Short, Long, LongLong, NoLength };
 	enum Aggregate { Struct, Union, Trait, NoAggregate };
-	enum TypeClass { Otype, Dtype, Ftype, NoTypeClass };
+	enum TypeClass { Otype, Dtype, Ftype, Ttype, NoTypeClass };
 	enum BuiltinType { Valist, Zero, One, NoBuiltinType };
 
Index: src/Parser/lex.cc
===================================================================
--- src/Parser/lex.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/Parser/lex.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -382,6 +382,6 @@
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 185
-#define YY_END_OF_BUFFER 186
+#define YY_NUM_RULES 186
+#define YY_END_OF_BUFFER 187
 /* This struct is not used in this scanner,
    but its presence is necessary. */
@@ -391,106 +391,106 @@
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[905] =
+static yyconst flex_int16_t yy_accept[909] =
     {   0,
-        0,    0,    0,    0,    0,    0,  120,  120,  123,  123,
-      186,  184,    7,    9,    8,  143,  122,  105,  148,  151,
-      119,  130,  131,  146,  144,  134,  145,  137,  147,  110,
-      111,  112,  135,  136,  153,  155,  154,  156,  184,  105,
-      128,  184,  129,  149,  105,  107,  105,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
-      105,  105,  105,  132,  152,  133,  150,    7,  184,    4,
-        4,  185,  108,  185,  109,  120,  121,  127,  123,  124,
-        7,    9,    0,    8,  160,  179,  105,    0,  172,  142,
-      165,  173,  170,  157,  168,  158,  169,  167,    0,  116,
-
-        3,    0,  171,  115,  113,    0,    0,  113,  113,    0,
-        0,  113,  112,  112,  112,    0,  112,  140,  141,  139,
-      161,  163,  159,  164,  162,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,  121,  121,  124,  124,
+      187,  185,    7,    9,    8,  144,  123,  106,  149,  152,
+      120,  131,  132,  147,  145,  135,  146,  138,  148,  111,
+      112,  113,  136,  137,  154,  156,  155,  157,  185,  106,
+      129,  185,  130,  150,  106,  108,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  133,  153,  134,  151,    7,  185,    4,
+        4,  186,  109,  186,  110,  121,  122,  128,  124,  125,
+        7,    9,    0,    8,  161,  180,  106,    0,  173,  143,
+      166,  174,  171,  158,  169,  159,  170,  168,    0,  117,
+
+        3,    0,  172,  116,  114,    0,    0,  114,  114,    0,
+        0,  114,  113,  113,  113,    0,  113,  141,  142,  140,
+      162,  164,  160,  165,  163,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      106,  178,    0,  122,  119,  105,    0,    0,  175,    0,
-      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,   38,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,   57,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,  174,  166,    7,
-
-        0,    0,    0,    2,    0,    5,  108,    0,    0,    0,
-      120,    0,  126,  125,  125,    0,    0,    0,  123,    0,
+      107,  179,    0,  123,  120,  106,    0,    0,  176,    0,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,   38,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,   57,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  175,  167,
+
+        7,    0,    0,    0,    2,    0,    5,  109,    0,    0,
+        0,  121,    0,  127,  126,  126,    0,    0,    0,  124,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  138,  116,  117,    0,  117,  117,
-        0,    0,    6,  117,  113,    0,    0,    0,  117,    0,
-      113,  113,  113,  113,    0,  114,    0,    0,  112,  112,
-      112,  112,    0,  176,  177,    0,  182,  180,    0,    0,
-        0,  106,    0,    0,    0,    0,    0,    0,    0,    0,
-      105,   17,  105,  105,  105,  105,  105,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
-
-       14,  105,  105,  105,  105,  105,  105,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,  105,   51,
-      105,  105,  105,   64,  105,  105,  105,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,  105,   91,
-      105,  105,  105,  105,  105,  105,  105,  105,    0,    0,
-        0,    0,    0,    0,    0,    0,  125,    0,    0,    0,
-        0,    0,  125,    0,    0,  183,    0,    0,    0,    0,
-        0,    0,    0,  117,    0,  117,    0,  117,    0,  117,
-        0,    0,  117,    0,  113,  113,    0,    0,  114,  114,
-        0,  114,    0,  114,  112,  112,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,  181,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
-       21,  105,   24,  105,   27,  105,  105,  105,  105,  105,
-      105,  105,   41,  105,   43,  105,  105,  105,  105,  105,
-      105,  105,   56,  105,   67,  105,  105,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
-      105,  105,   99,  105,  105,  105,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  139,  117,  118,    0,  118,
+      118,    0,    0,    6,  118,  114,    0,    0,    0,  118,
+        0,  114,  114,  114,  114,    0,  115,    0,    0,  113,
+      113,  113,  113,    0,  177,  178,    0,  183,  181,    0,
+        0,    0,  107,    0,    0,    0,    0,    0,    0,    0,
+        0,  106,   17,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+
+      106,   14,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+       51,  106,  106,  106,   64,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+       91,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+        0,    0,    0,    0,    0,    0,    0,    0,  126,    0,
+        0,    0,    0,    0,  126,    0,    0,  184,    0,    0,
+        0,    0,    0,    0,    0,  118,    0,  118,    0,  118,
+        0,  118,    0,    0,  118,    0,  114,  114,    0,    0,
+      115,  115,    0,  115,    0,  115,  113,  113,    0,    0,
+
+        0,    0,    0,    0,    0,    0,    0,    0,  182,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,   21,  106,   24,  106,   27,  106,  106,  106,
+      106,  106,  106,  106,   41,  106,   43,  106,  106,  106,
+      106,  106,  106,  106,   56,  106,   67,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  100,  106,  106,  106,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      125,    0,    0,    0,    0,    0,  117,    0,    0,    0,
-
-        0,    0,    0,    0,  114,  114,    0,  118,    0,  114,
-      114,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  105,  105,   22,  105,  105,  105,
-      105,  105,  105,  105,   15,  105,  105,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,  105,   23,
-       25,  105,   32,  105,  105,  105,  105,   40,  105,  105,
-      105,  105,   49,  105,  105,   54,  105,  105,   71,   72,
-      105,  105,  105,   78,  105,  105,  105,  105,  105,   88,
-       90,  105,  105,   96,  105,  105,  103,  105,    0,    0,
+        0,    0,    0,  126,    0,    0,    0,    0,    0,  118,
+
+        0,    0,    0,    0,    0,    0,    0,  115,  115,    0,
+      119,    0,  115,  115,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,  106,  106,   22,
+      106,  106,  106,  106,  106,  106,  106,   15,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,   23,   25,  106,   32,  106,  106,  106,  106,
+       40,  106,  106,  106,  106,   49,  106,  106,   54,  106,
+      106,   71,   72,  106,  106,  106,   78,  106,  106,  106,
+      106,  106,   88,   90,   92,  106,  106,   97,  106,  106,
+      104,  106,    0,    0,    0,    0,    0,    0,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,  118,    0,    0,
-      114,  118,  118,  118,  118,    0,  114,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  105,    0,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,
-      105,  105,  105,  105,  105,   59,  105,  105,  105,  105,
-      105,  105,  105,  105,   28,  105,  105,  105,   39,   42,
-       45,  105,  105,   52,  105,   61,   68,  105,  105,   77,
-       79,   82,   83,   85,   86,  105,  105,   93,  105,  105,
-      104,    0,    1,    0,    0,    0,    0,    0,    0,  108,
-        0,    0,    0,  125,    0,    0,    0,    0,  118,    0,
-
-      118,  118,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,  105,  105,   18,  105,  105,  105,  105,  105,  105,
-      105,   16,  105,  105,  105,   33,  105,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,  105,   36,   37,
-      105,   48,   53,  105,  105,  105,   92,  105,  105,    0,
+        0,  119,    0,    0,  115,  119,  119,  119,  119,    0,
+      115,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  106,    0,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,   59,
+      106,  106,  106,  106,  106,  106,  106,  106,   28,  106,
+      106,  106,   39,   42,   45,  106,  106,   52,  106,   61,
+       68,  106,  106,   77,   79,   82,   83,   85,   86,  106,
+      106,   94,  106,  106,  105,    0,    1,    0,    0,    0,
+        0,    0,    0,  109,    0,    0,    0,  126,    0,    0,
+
+        0,    0,  119,    0,  119,  119,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  106,  106,   18,  106,  106,
+      106,  106,  106,  106,  106,   16,  106,  106,  106,   33,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,  106,   36,   37,  106,   48,   53,  106,  106,  106,
+       93,  106,  106,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   10,   11,   29,   55,
+      106,  106,  106,  106,  106,  106,  106,  106,  106,  106,
+      106,   60,   62,   65,  106,  106,   80,   95,  106,  106,
+       35,  106,   47,   73,   74,  106,   98,  101,    0,    0,
+
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   10,   11,   29,   55,  105,  105,  105,  105,
-      105,  105,  105,  105,  105,  105,  105,   60,   62,   65,
-      105,  105,   80,   94,  105,  105,   35,  105,   47,   73,
-       74,  105,   97,  100,    0,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,  105,   69,  105,  105,
-       12,  105,  105,   30,   34,  105,  105,  105,   66,  105,
-      105,  105,  105,  105,  105,  105,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   58,
-      105,  105,  105,  105,  105,  105,  105,   50,   63,   75,
-       81,   95,  101,  105,  105,  105,    0,    0,    0,    0,
-        0,    0,    0,    0,  105,  105,   13,   19,  105,  105,
-       31,  105,  105,  105,   26,   46,   89,    0,    0,  105,
-      105,  105,  105,  105,  105,   76,  102,  105,   87,   20,
-      105,  105,   44,   84,  105,  105,  105,  105,  105,  105,
-
-      105,   98,   70,    0
+      106,   69,  106,  106,   12,  106,  106,   30,   34,  106,
+      106,  106,   66,  106,  106,  106,  106,  106,  106,  106,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   58,  106,  106,  106,  106,  106,  106,
+      106,   50,   63,   75,   81,   96,  102,  106,  106,  106,
+        0,    0,    0,    0,    0,    0,    0,    0,  106,  106,
+       13,   19,  106,  106,   31,  106,  106,  106,   26,   46,
+       89,    0,    0,  106,  106,  106,  106,  106,  106,   76,
+      103,  106,   87,   20,  106,  106,   44,   84,  106,  106,
+
+      106,  106,  106,  106,  106,   99,   70,    0
     } ;
 
@@ -540,249 +540,251 @@
     } ;
 
-static yyconst flex_int16_t yy_base[1079] =
+static yyconst flex_int16_t yy_base[1083] =
     {   0,
-        0,   84, 2323, 2322,   94,    0,  177,  178,  179,  180,
-     2338, 2866,  191, 2866,  197,   55, 2866, 2283,   60,  173,
-     2866, 2866, 2866,   56,  188, 2866,  191,  189,  204,  216,
-      275,    0, 2300, 2866,  216, 2298,  152,  344,  155,  220,
-     2866,  159, 2866,  217,  226, 2866,  185,  154,  212,  251,
-      237,  270,  235,  257,  241,  279,  193,  305,  314,  333,
-      238,  228,  227, 2866,  225, 2866, 2295,  402,  390, 2866,
-     2306, 2866, 2273,  235, 2866,    0, 2866,  426,    0, 2866,
-      417, 2866,  439,  451, 2866,  498, 2270,  264, 2866, 2866,
-     2866, 2866, 2866, 2286, 2866, 2285, 2866, 2866, 2297,  559,
-
-     2866, 2313, 2866,  438,  444,  511,  534,  289,  253,  197,
-      380,  305,    0,  319,  280,  198,  322, 2866, 2866, 2866,
-     2281, 2866, 2866, 2866, 2278, 2277,  218,  312, 2292,  350,
-      459,  368,  398,  440,  405,  448, 2272,  441, 2219,  458,
-     2247, 2866,  335, 2866, 2866,  321, 2243, 2242, 2866, 2214,
-      444,  297,  433,  372,  425,  454,  434,  461,  570,  455,
-      468,  385,  474,  475,  494,  492,  489,  464,  488,  491,
-      513,  503,  430,  521,  517,  519,  516,  522, 2240,  526,
-      523,  276,  460,  524,  542,  555,  554,  561,  325,  558,
-      584,  552,  600,  586,  593,  588,  595, 2866, 2866,  667,
-
-      655, 2287,  682, 2866,  688, 2866, 2236,  590, 2232, 2230,
-        0,  648, 2866, 2866,  675, 2227, 2224, 2223,    0, 2246,
-      578,  631,  654,  685,  698,  660,  689,  670,  692, 2242,
-      695,  701, 2200, 2198, 2866,    0,  693,  720,  685,  711,
-     2197, 2247, 2866,  737,  745,  666,  757,  763,  797,  780,
-      599, 2866, 2203, 2178,    0,  805, 2224,  806,  617, 2866,
-     2199, 2172,  819, 2866, 2866, 2203, 2866, 2866,  707,  722,
-     2182, 2182,  699, 2177, 2174, 2171,    0, 2170,    0, 2141,
-      743,  724,  739,  689,  741,  720,  623,  759,  762,  804,
-      681,  795,  749,  746,  799,  801,  765,  784,  803,  811,
-
-     2170,  814,  818,  827,  831,  817,  821,  833,  835,  841,
-      842,  834,  843,  844,  845,  847,  849,  857,  858,  860,
-      851,  859,  866, 2167,  867,  868,  869,  871,  873,  874,
-      763,  875,  876,  880,  881,  884,  887,  888,  885, 2164,
-      891,  936,  894,  897,  905,  899,  901,  902,  965,  961,
-     2160, 2159, 2157,    0, 2154,    0,  952,  956, 2153,    0,
-     2152,    0, 2150,    0, 2169, 2866,  951,  952, 2148, 2145,
-        0, 2143,    0, 2866,  967,  986,  978, 2866,  992, 1032,
-     2140, 1008, 1054, 2136, 2866, 2866,  915,  951, 1040,  993,
-     1079,  956, 1071,  994, 2866, 2866, 2132, 2130, 2128,    0,
-
-     2125,    0, 2123,    0, 2121,    0, 2866,  935,  969,  973,
-      968, 1012,  975, 1056,  992, 1058,  997, 1032,  993, 1000,
-     1060, 1061, 1066, 1070, 1073, 1030, 1071, 1069, 1072, 1078,
-     2121,  700, 2118, 1085, 2117, 1079, 1081, 1089, 1087, 1098,
-     1096, 1099, 2116, 1101, 2114, 1105, 1106, 1107, 1109, 1112,
-     1113, 1114, 2111, 1115, 2108, 1117, 1119, 1120, 1118, 1124,
-     1126, 1121, 1136, 1130, 1134, 1135, 1149, 1137, 1138, 1150,
-     1152, 1153, 2107, 1151, 1154, 1167, 1205, 2103,    0, 2101,
-        0, 2098,    0, 2095,    0, 1204, 2094,    0, 2093,    0,
-     2091, 2088, 2085,    0, 2084,    0, 1208, 2083, 1214, 1230,
-
-     1216, 1255, 1221, 1172, 1169, 2866, 1271, 1289, 1282, 2093,
-     2066, 2075, 2074,    0, 2073,    0, 2071,    0, 2068,    0,
-     2065,    0, 2064,    0, 1190, 1159, 2066, 1193, 1195, 1197,
-     1212, 1237, 1231, 1265, 1248, 1266, 1267, 1213, 1268, 1269,
-     1283, 1270, 1271,  234, 1285, 1273, 1274, 1287, 1293, 2064,
-     1306, 1301, 2061, 1290, 1303, 1305, 1308, 2058, 1312, 1309,
-     1311, 1313, 2057, 1314, 1319, 2056, 1316, 1322, 2054, 2051,
-     1315, 1327, 1330, 2050, 1333, 1332, 1336, 1334, 1338, 1345,
-     2049, 1335, 1348, 2047, 1346, 1349, 2044, 1351, 2093, 2039,
-        0, 2037,    0, 2004,    0, 2002,    0, 2001,    0, 1998,
-
-        0, 1995,    0, 1994,    0, 1394, 1404, 1428, 1415, 1993,
-     2866, 1421, 1370, 1391, 1419, 1991, 2866, 1988,    0, 1985,
-        0, 1984,    0, 1983,    0,    0,    0, 1984,    0, 1352,
-     1406, 1408, 1359, 1354, 1409, 1415, 1412, 1411, 1423, 1433,
-     1425, 1430, 1435, 1437, 1439, 1448, 1442, 1449, 1440, 1444,
-     1453, 1450, 1452, 1456, 1981, 1458, 1460, 1463, 1980, 1979,
-     1977, 1466, 1467, 1974, 1470, 1973, 1972, 1469, 1473, 1970,
-     1963, 1961, 1960, 1957, 1953, 1475, 1479, 1949, 1476, 1477,
-     1945, 1992, 2866, 1938,    0, 1937,    0,    0,    0, 1938,
-        0,    0,    0, 2866,    0,    0,    0,    0, 1525, 1932,
-
-     2866, 2866, 1531, 1931,    0, 1930,    0,    0,    0,    0,
-     1928, 1488, 1483, 1928, 1491, 1507, 1518, 1490, 1519, 1521,
-     1508, 1927, 1525, 1529, 1527, 1541, 1530, 1384, 1543, 1539,
-     1558, 1547, 1549, 1512, 1545, 1552, 1553, 1554, 1926, 1924,
-     1557, 1921, 1920, 1556, 1537, 1560, 1919, 1561, 1564,    0,
-        0,    0, 1914, 1911, 1910, 1612,    0, 1909, 1907, 1904,
-     1903, 1902, 1903, 1900, 1899, 1898, 1568, 1572, 1566, 1577,
-     1590, 1570, 1578, 1579, 1591, 1596, 1625, 1896, 1598, 1893,
-     1599, 1603, 1604, 1608, 1606, 1612, 1892, 1613, 1891, 1889,
-     1886, 1614, 1885, 1884, 1879, 1872, 1870, 1869, 1866, 1865,
-
-     1864, 1862, 1845, 1836, 1835, 1832, 1616, 1828, 1617, 1622,
-     1620, 1619, 1624, 1626, 1825, 1628, 1644, 1630, 1818, 1631,
-     1639, 1645, 1647, 1634, 1649, 1651, 1813, 1812, 1791, 1790,
-     1789, 1782, 1780, 1779, 1737, 1735, 1733, 1732, 1730, 1732,
-     1652, 1654, 1655, 1657, 1659, 1662, 1663, 1731, 1729, 1668,
-     1727, 1724, 1669, 1670, 1664, 1675, 1719, 1718, 1671, 1629,
-     1564, 1468, 1350, 1269, 1678, 1681, 1239, 1682, 1688, 1689,
-     1238, 1690, 1692, 1696, 1206, 1171, 1157, 1035, 1031, 1691,
-     1697, 1700, 1704, 1702, 1706,  998,  560, 1701,  527,  395,
-     1707, 1710,  357,  300, 1708, 1713, 1715, 1718, 1716, 1719,
-
-     1720,  233,  137, 2866, 1794, 1807, 1820, 1830, 1840, 1853,
-     1863, 1876, 1889, 1902, 1910, 1920, 1927, 1934, 1941, 1948,
-     1955, 1962, 1969, 1976, 1983, 1990, 1994, 2002, 2008, 2015,
-     2022, 2029, 2036, 2039, 2046, 2052, 2065, 2078, 2085, 2092,
-     2099, 2106, 2109, 2116, 2119, 2126, 2129, 2136, 2139, 2146,
-     2149, 2156, 2159, 2166, 2169, 2176, 2184, 2191, 2198, 2205,
-     2212, 2215, 2222, 2225, 2232, 2235, 2242, 2248, 2261, 2268,
-     2275, 2278, 2285, 2288, 2295, 2298, 2305, 2308, 2315, 2318,
-     2325, 2328, 2335, 2342, 2345, 2352, 2355, 2362, 2369, 2376,
-     2379, 2386, 2389, 2396, 2399, 2406, 2409, 2416, 2419, 2426,
-
-     2432, 2445, 2452, 2459, 2462, 2469, 2472, 2479, 2482, 2489,
-     2492, 2499, 2502, 2509, 2512, 2519, 2522, 2529, 2532, 2539,
-     2546, 2549, 2556, 2559, 2566, 2569, 2576, 2579, 2582, 2588,
-     2595, 2604, 2611, 2618, 2621, 2628, 2631, 2634, 2640, 2647,
-     2650, 2653, 2656, 2659, 2662, 2665, 2668, 2675, 2678, 2685,
-     2688, 2691, 2694, 2697, 2707, 2714, 2717, 2720, 2723, 2730,
-     2737, 2744, 2747, 2754, 2761, 2768, 2775, 2782, 2789, 2796,
-     2803, 2810, 2817, 2824, 2831, 2838, 2845, 2852
+        0,   84, 2330, 2327,   94,    0,  177,  178,  179,  180,
+     2341, 2877,  191, 2877,  197,   55, 2877, 2287,   60,  173,
+     2877, 2877, 2877,   56,  188, 2877,  191,  189,  204,  216,
+      275,    0, 2306, 2877,  216, 2305,  152,  344,  155,  220,
+     2877,  159, 2877,  217,  226, 2877,  185,  154,  212,  251,
+      237,  270,  235,  257,  241,  279,  193,  305,  314,  351,
+      238,  228,  227, 2877,  225, 2877, 2300,  406,  412, 2877,
+     2309, 2877, 2277,  235, 2877,    0, 2877,  439,    0, 2877,
+      426, 2877,  452,  464, 2877,  511, 2276,  264, 2877, 2877,
+     2877, 2877, 2877, 2293, 2877, 2290, 2877, 2877, 2300,  572,
+
+     2877, 2317, 2877,  451,  457,  524,  547,  298,  253,  197,
+      312,  279,    0,  342,  325,  198,  322, 2877, 2877, 2877,
+     2287, 2877, 2877, 2877, 2285, 2282,  218,  312, 2295,  350,
+      363,  368,  369,  391,  411,  417, 2276,  452, 2225,  453,
+     2254, 2877,  274, 2877, 2877,  438, 2248, 2245, 2877, 2218,
+      435,  282,  353,  277,  391,  419,  442,  320,  583,  451,
+      446,  443,  479,  469,  364,  472,  481,  454,  458,  484,
+      503,  493,  352,  506,  486,  453,  507,  509, 2246,  539,
+      532,  524,  516,  528,  556,  530,  540,  552,  553,  564,
+      574,  538,  576,  613,  573,  597,  602,  571, 2877, 2877,
+
+      668,  674, 2294,  680, 2877,  686, 2877, 2241,  603, 2235,
+     2234,    0,  683, 2877, 2877,  692, 2233, 2231, 2211,    0,
+     2233,  556,  627,  630,  662,  699,  688,  692,  693,  696,
+     2230,  700,  703, 2205, 2202, 2877,    0,  695,  726,  693,
+      701, 2201, 2253, 2877,  747,  742,  700,  753,  760,  793,
+      815,  746, 2877, 2210, 2183,    0,  802, 2227,  801,  754,
+     2877, 2203, 2178,  839, 2877, 2877, 2210, 2877, 2877,  709,
+      723, 2187, 2185,  755, 2181, 2180, 2178,    0, 2175,    0,
+     2144,  694,  736,  737,  741,  614,  739,  738,  742,  798,
+      807,  792,  802,  797,  746,  816,  748,  791,  824,  819,
+
+      826, 2174,  827,  830,  831,  440,  834,  838,  836,  843,
+      847,  849,  841,  850,  861,  853,  862,  851,  863,  865,
+      872,  864,  873,  874, 2173,  749,  875,  876,  878,  880,
+      881,  882,  884,  885,  886,  888,  889,  892,  898,  896,
+     2171,  899,  906,  944,  901,  907,  913,  917,  908,  911,
+      976,  977, 2165, 2164, 2163,    0, 2161,    0,  964,  968,
+     2158,    0, 2157,    0, 2156,    0, 2176, 2877,  964,  967,
+     2153, 2147,    0, 2143,    0, 2877,  979,  998,  990, 2877,
+     1004, 1044, 2141, 1020, 1066, 2139, 2877, 2877,  963, 1006,
+     1052, 1005, 1091,  968, 1083, 1006, 2877, 2877, 2136, 2134,
+
+     2132,    0, 2129,    0, 2126,    0, 2125,    0, 2877,  931,
+      981,  985,  928, 1024,  987, 1068,  958, 1070, 1060, 1010,
+     1005, 1072, 1083, 1022, 1078, 1082, 1088, 1042, 1084, 1081,
+     1089, 1097, 2127, 1090, 2125, 1095, 2122, 1093, 1091, 1109,
+     1101, 1111, 1115, 1116, 2119, 1118, 2118, 1119, 1120, 1121,
+     1123, 1126, 1127, 1128, 2117, 1129, 2115, 1131, 1134, 1135,
+     1132, 1138, 1140, 1143, 1148, 1149, 1150, 1152, 1155, 1151,
+     1161, 1164, 1166, 1168, 1169, 2112, 1170, 1172, 1175, 1221,
+     2106,    0, 2105,    0, 2104,    0, 2102,    0, 1216, 2099,
+        0, 2096,    0, 2095, 2094, 2092,    0, 2089,    0, 1223,
+
+     2086, 1229, 1245, 1231, 1270, 1236, 1186, 1185, 2877, 1286,
+     1304, 1297, 2097, 2072, 2082, 2079,    0, 2076,    0, 2075,
+        0, 2074,    0, 2072,    0, 2069,    0, 1190, 1210, 2069,
+     1191, 1227, 1212, 1230, 1253, 1246, 1254, 1280, 1281, 1282,
+     1284, 1228, 1287, 1286, 1288, 1285,  234, 1293, 1289, 1304,
+     1300, 1305, 2068, 1322, 1306, 2067, 1308, 1313, 1318, 1320,
+     2065, 1323, 1324, 1326, 1327, 2062, 1330, 1331, 2061, 1334,
+     1335, 2060, 2058, 1337, 1339, 1340, 2055, 1004, 1346, 1347,
+     1348, 1349, 1364, 2054, 2053, 1351, 1353, 2051, 1350, 1355,
+     2018, 1362, 2066, 2012,    0, 2009,    0, 2006,    0, 2005,
+
+        0, 2004,    0, 2002,    0, 1999,    0, 1996,    0, 1401,
+     1407, 1435, 1418, 1995, 2877, 1424, 1411, 1421, 1427, 1994,
+     2877, 1992,    0, 1989,    0, 1988,    0, 1987,    0,    0,
+        0, 1988,    0, 1412, 1422, 1419, 1387, 1369, 1416, 1433,
+     1436, 1403, 1446, 1441, 1431, 1432, 1451, 1452, 1455, 1456,
+     1457, 1486, 1460, 1461, 1462, 1464, 1463, 1467, 1985, 1465,
+     1468, 1470, 1984, 1983, 1981, 1472, 1466, 1974, 1478, 1972,
+     1971, 1480, 1484, 1968, 1964, 1960, 1956, 1953, 1952, 1487,
+     1494, 1951, 1497, 1483, 1949, 1996, 2877, 1942,    0, 1941,
+        0,    0,    0, 1942,    0,    0,    0, 2877,    0,    0,
+
+        0,    0, 1537, 1936, 2877, 2877, 1543, 1935,    0, 1934,
+        0,    0,    0,    0, 1932, 1499, 1519, 1932, 1500, 1524,
+     1530, 1501, 1502, 1533, 1537, 1931, 1532, 1541, 1534, 1539,
+     1544,  599, 1548, 1549, 1579, 1556, 1557, 1560, 1561, 1562,
+     1563, 1564, 1930, 1928, 1567, 1925, 1924, 1566, 1569, 1572,
+     1923, 1574, 1578,    0,    0,    0, 1918, 1915, 1914, 1624,
+        0, 1913, 1911, 1908, 1907, 1906, 1907, 1904, 1903, 1902,
+     1580, 1588, 1576, 1577, 1601, 1583, 1602, 1589, 1604, 1603,
+     1636, 1900, 1609, 1897, 1610, 1614, 1617, 1622, 1618, 1623,
+     1896, 1624, 1895, 1893, 1886, 1626, 1884, 1883, 1877, 1876,
+
+     1875, 1873, 1856, 1847, 1846, 1843, 1836, 1833, 1826, 1824,
+     1628, 1826, 1629, 1630, 1631, 1632, 1635, 1637, 1805, 1639,
+     1667, 1642, 1804, 1643, 1653, 1658, 1651, 1652, 1659, 1662,
+     1800, 1793, 1791, 1790, 1748, 1745, 1744, 1742, 1741, 1737,
+     1735, 1733, 1732, 1734, 1663, 1664, 1666, 1672, 1673, 1674,
+     1675, 1731, 1689, 1676, 1644, 1522, 1680, 1685, 1686, 1687,
+     1500, 1411, 1363, 1362, 1260, 1219, 1218, 1047, 1690, 1688,
+     1046, 1700, 1695, 1701,  924, 1704, 1708, 1709,  839,  794,
+      759,  702,  636, 1682, 1710, 1713, 1714, 1715, 1717,  638,
+      536, 1719,  488,  441, 1721, 1722,  408,  281, 1723, 1726,
+
+     1727, 1729, 1728, 1730, 1733,  233,  137, 2877, 1805, 1818,
+     1831, 1841, 1851, 1864, 1874, 1887, 1900, 1913, 1921, 1931,
+     1938, 1945, 1952, 1959, 1966, 1973, 1980, 1987, 1994, 2001,
+     2005, 2013, 2019, 2026, 2033, 2040, 2047, 2050, 2057, 2063,
+     2076, 2089, 2096, 2103, 2110, 2117, 2120, 2127, 2130, 2137,
+     2140, 2147, 2150, 2157, 2160, 2167, 2170, 2177, 2180, 2187,
+     2195, 2202, 2209, 2216, 2223, 2226, 2233, 2236, 2243, 2246,
+     2253, 2259, 2272, 2279, 2286, 2289, 2296, 2299, 2306, 2309,
+     2316, 2319, 2326, 2329, 2336, 2339, 2346, 2353, 2356, 2363,
+     2366, 2373, 2380, 2387, 2390, 2397, 2400, 2407, 2410, 2417,
+
+     2420, 2427, 2430, 2437, 2443, 2456, 2463, 2470, 2473, 2480,
+     2483, 2490, 2493, 2500, 2503, 2510, 2513, 2520, 2523, 2530,
+     2533, 2540, 2543, 2550, 2557, 2560, 2567, 2570, 2577, 2580,
+     2587, 2590, 2593, 2599, 2606, 2615, 2622, 2629, 2632, 2639,
+     2642, 2645, 2651, 2658, 2661, 2664, 2667, 2670, 2673, 2676,
+     2679, 2686, 2689, 2696, 2699, 2702, 2705, 2708, 2718, 2725,
+     2728, 2731, 2734, 2741, 2748, 2755, 2758, 2765, 2772, 2779,
+     2786, 2793, 2800, 2807, 2814, 2821, 2828, 2835, 2842, 2849,
+     2856, 2863
     } ;
 
-static yyconst flex_int16_t yy_def[1079] =
+static yyconst flex_int16_t yy_def[1083] =
     {   0,
-      904,    1,  905,  905,  904,    5,  906,  906,  907,  907,
-      904,  904,  904,  904,  904,  904,  904,  908,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,   31,  904,  904,  904,  904,  904,  904,  909,  908,
-      904,  904,  904,  904,  908,  904,  908,  908,  908,  908,
+      908,    1,  909,  909,  908,    5,  910,  910,  911,  911,
+      908,  908,  908,  908,  908,  908,  908,  912,  908,  908,
       908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
-      908,  908,  908,  904,  904,  904,  904,  904,  910,  904,
-      904,  904,  911,  904,  904,  912,  904,  904,  913,  904,
-      904,  904,  904,  904,  904,  904,  908,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-
-      904,  914,  904,  904,   30,  904,  904,  904,  904,  915,
-       30,  904,   31,  904,  904,   31,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      916,  904,  904,  904,  904,  908,  917,  918,  904,  904,
+      908,   31,  908,  908,  908,  908,  908,  908,  913,  912,
+      908,  908,  908,  908,  912,  908,  912,  912,  912,  912,
+      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
+      912,  912,  912,  908,  908,  908,  908,  908,  914,  908,
+      908,  908,  915,  908,  908,  916,  908,  908,  917,  908,
+      908,  908,  908,  908,  908,  908,  912,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+
+      908,  918,  908,  908,   30,  908,  908,  908,  908,  919,
+       30,  908,   31,  908,  908,   31,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      920,  908,  908,  908,  908,  912,  921,  922,  908,  908,
+      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
+      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
+      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
+      912,  912,  912,  912,  912,  912,  912,  912,  912,  912,
+      912,  912,  912,  912,  912,  912,  912,  912,  908,  908,
+
+      908,  914,  914,  914,  908,  914,  908,  915,  908,  923,
+      924,  916,  908,  908,  908,  908,  925,  926,  927,  917,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  928,  929,  908,  100,  908,  908,  908,
+      908,  100,  918,  908,  100,  111,  246,  908,  908,  908,
+      908,  908,  908,  908,  908,  930,  931,  932,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  933,  908,  934,  935,  936,  937,  938,  939,
+      908,  940,  940,  940,  940,  940,  940,  940,  940,  940,
+      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
+
+      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
+      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
+      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
+      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
+      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
+      941,  942,  943,  944,  945,  946,  947,  948,  908,  908,
+      949,  950,  951,  952,  953,  954,  908,  908,  908,  908,
+      908,  955,  956,  957,  958,  908,  908,  908,  908,  908,
+      908,  908,  382,  908,  378,  385,  908,  908,  959,  960,
+      961,  908,  908,  908,  961,  908,  908,  908,  962,  963,
+
+      964,  965,  966,  967,  968,  969,  970,  971,  908,  972,
+      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
+      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
+      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
+      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
+      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
+      972,  972,  972,  972,  972,  972,  972,  972,  972,  972,
+      972,  972,  972,  972,  972,  972,  972,  972,  972,  973,
+      974,  975,  976,  977,  978,  979,  980,  981,  908,  982,
+      983,  984,  985,  986,  986,  987,  988,  989,  990,  908,
+
+      500,  908,  908,  991,  908,  991,  908,  908,  908,  908,
+      908,  908,  908,  908,  992,  993,  994,  995,  996,  997,
+      998,  999, 1000, 1001, 1002, 1003, 1004, 1005, 1005, 1005,
+     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+     1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005, 1005,
+     1005, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
+
+     1014, 1015, 1016, 1017, 1018, 1019, 1020, 1021, 1022,  908,
+      908,  908,  908, 1023,  908,  612,  908,  908,  908,  616,
+      908, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032,
+     1033, 1034, 1035, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034, 1034,
+     1034, 1034, 1034, 1034, 1034, 1036,  908, 1037, 1038, 1039,
+     1040, 1041, 1042, 1043, 1044, 1045, 1046,  908, 1047, 1048,
+
+     1049, 1050,  908,  703,  908,  908,  908, 1051, 1052, 1053,
+     1054, 1055, 1056, 1057, 1058, 1059, 1059, 1059, 1059, 1059,
+     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
+     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
+     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
+     1059, 1059, 1059, 1060, 1061, 1062, 1063, 1064, 1065,  908,
+     1066, 1051, 1053, 1067, 1068, 1058, 1059, 1059, 1059, 1059,
+     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
+     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
+     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1069, 1070,
+
+     1063, 1071, 1064, 1072, 1065, 1073, 1074, 1067, 1075, 1068,
+     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
+     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
+     1076, 1069, 1077, 1070, 1078, 1071, 1079, 1072, 1080, 1073,
+     1081, 1074, 1075, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
+     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
+     1082, 1076, 1077, 1078, 1079, 1053, 1080, 1081, 1059, 1059,
+     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
+     1059, 1082, 1053, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
+     1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059, 1059,
+
+     1059, 1059, 1059, 1059, 1059, 1059, 1059,    0,  908,  908,
       908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
       908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
       908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
       908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
-      908,  908,  908,  908,  908,  908,  908,  904,  904,  904,
-
-      910,  910,  910,  904,  910,  904,  911,  904,  919,  920,
-      912,  904,  904,  904,  904,  921,  922,  923,  913,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  924,  925,  904,  100,  904,  904,  904,  904,
-      100,  914,  904,  100,  111,  245,  904,  904,  904,  904,
-      904,  904,  904,  904,  926,  927,  928,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  929,  904,  930,  931,  932,  933,  934,  935,  904,
-      936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
-      936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
-
-      936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
-      936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
-      936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
-      936,  936,  936,  936,  936,  936,  936,  936,  936,  936,
-      936,  936,  936,  936,  936,  936,  936,  936,  937,  938,
-      939,  940,  941,  942,  943,  944,  904,  904,  945,  946,
-      947,  948,  949,  950,  904,  904,  904,  904,  904,  951,
-      952,  953,  954,  904,  904,  904,  904,  904,  904,  904,
-      380,  904,  376,  383,  904,  904,  955,  956,  957,  904,
-      904,  904,  957,  904,  904,  904,  958,  959,  960,  961,
-
-      962,  963,  964,  965,  966,  967,  904,  968,  968,  968,
-      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
-      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
-      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
-      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
-      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
-      968,  968,  968,  968,  968,  968,  968,  968,  968,  968,
-      968,  968,  968,  968,  968,  968,  969,  970,  971,  972,
-      973,  974,  975,  976,  977,  904,  978,  979,  980,  981,
-      982,  982,  983,  984,  985,  986,  904,  497,  904,  904,
-
-      987,  904,  987,  904,  904,  904,  904,  904,  904,  904,
-      904,  988,  989,  990,  991,  992,  993,  994,  995,  996,
-      997,  998,  999, 1000, 1001, 1001, 1001, 1001, 1001, 1001,
-     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
-     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
-     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
-     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
-     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001,
-     1001, 1001, 1001, 1001, 1001, 1001, 1001, 1001, 1002, 1003,
-     1004, 1005, 1006, 1007, 1008, 1009, 1010, 1011, 1012, 1013,
-
-     1014, 1015, 1016, 1017, 1018,  904,  904,  904,  904, 1019,
-      904,  608,  904,  904,  904,  612,  904, 1020, 1021, 1022,
-     1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1030,
-     1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
-     1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
-     1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
-     1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
-     1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030, 1030,
-     1030, 1032,  904, 1033, 1034, 1035, 1036, 1037, 1038, 1039,
-     1040, 1041, 1042,  904, 1043, 1044, 1045, 1046,  904,  699,
-
-      904,  904,  904, 1047, 1048, 1049, 1050, 1051, 1052, 1053,
-     1054, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1056,
-     1057, 1058, 1059, 1060, 1061,  904, 1062, 1047, 1049, 1063,
-     1064, 1054, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
-     1055, 1055, 1055, 1055, 1065, 1066, 1059, 1067, 1060, 1068,
-
-     1061, 1069, 1070, 1063, 1071, 1064, 1055, 1055, 1055, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1072, 1065, 1073, 1066,
-     1074, 1067, 1075, 1068, 1076, 1069, 1077, 1070, 1071, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1078, 1072, 1073, 1074,
-     1075, 1049, 1076, 1077, 1055, 1055, 1055, 1055, 1055, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1078, 1049, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
-     1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055, 1055,
-
-     1055, 1055, 1055,    0,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908
     } ;
 
-static yyconst flex_int16_t yy_nxt[2952] =
+static yyconst flex_int16_t yy_nxt[2963] =
     {   0,
        12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
@@ -809,309 +811,310 @@
 
        84,   84,   84,   83,   92,   94,   88,  143,  147,   99,
-       96,  100,  100,  100,  100,  100,  100,  255,  904,   95,
+       96,  100,  100,  100,  100,  100,  100,  256,  908,   95,
       101,   86,   97,   98,   86,  102,  162,  119,  144,   78,
        78,   78,   78,  145,  148,  103,  104,   88,  105,  105,
-      105,  105,  106,  106,  120,   88,  121,  122,  149,  266,
-      150,  267,  257,  263,  185,  107,  198,  648,  160,  108,
+      105,  105,  106,  106,  120,   88,  121,  122,  149,  267,
+      150,  268,  258,  264,  185,  107,  199,  652,  160,  108,
       161,  151,  152,  153,   88,  109,  110,  154,  155,  163,
       156,  111,   88,  157,  158,  146,  164,  107,   88,   88,
-       88,  159,  165,  112,  209,   88,   88,   88,  197,   88,
-       88,  109,  196,   88,  110,  104,  253,  113,  113,  113,
-
-      113,  113,  113,   88,  170,  178,  171,  199,  195,   88,
-      210,  181,  166,  233,  107,  172,  167,  182,  114,  179,
-      254,  168,   88,  261,  115,  169,  180,  173,   88,  144,
-      116,   88,  251,  326,  145,  174,  107,  175,  252,  234,
-      176,  144,  117,  266,  177,  267,  145,  262,  183,   88,
-      115,  126,   88,  184,  252,  127,  128,   88,  129,  193,
-      130,  131,  259,  132,  252,  133,   88,  283,  260,  186,
-      187,  260,  251,   88,  134,  135,  136,   88,  190,  188,
-      252,  266,  189,  267,  274,   88,  191,  268,  146,  259,
-      337,  203,  204,  192,  260,  137,  203,  260,  138,  266,
-
-      904,  267,  194,  200,   82,   83,   83,   83,  200,   88,
-      275,  201,  205,  205,  205,  205,  205,  205,   81,   82,
-       83,   83,   83,   81,   88,  139,  140,  212,  213,  266,
-      904,  267,  212,  285,  214,  258,  266,   88,  267,  214,
-       83,   82,   83,   83,   83,   83,  303,   88,  215,  215,
-      215,  215,   83,   82,   84,   84,   84,   83,  904,  214,
-      244,  244,  244,  244,  244,  244,  245,  245,  245,  245,
-      269,  266,  266,  267,  267,  216,  268,   88,  214,  266,
-      270,  267,   88,  214,  214,   88,   88,  214,  214,  266,
-      266,  267,  267,  286,  904,  214,   88,  317,  214,  246,
-
-      214,  217,  214,  284,  218,  220,   88,   88,  288,  221,
-      222,  281,   88,   88,  223,  224,   88,  225,  282,  226,
-       88,  327,  904,  301,  287,  289,   88,   88,  227,  228,
-      229,  104,  306,  106,  106,  106,  106,  106,  106,  311,
-       88,   88,  302,   88,   88,  307,   88,  304,  305,  230,
-      107,  248,  231,  248,  309,   88,  249,  249,  249,  249,
-      249,  249,  310,  308,  313,   88,  247,  312,   88,   88,
-      314,   88,  107,   88,   88,   88,   88,  316,   88,   88,
-      232,  236,  236,  236,  236,  236,  236,  319,  315,  250,
-      318,  320,  325,  323,   88,  321,  322,  237,  238,  239,
-
-      324,  240,  239,  328,   88,  329,   88,   88,  144,  365,
-       88,  366,   88,   88,  241,  330,  331,  333,  335,  239,
-      238,  239,   88,  341,  240,  332,  239,  290,  291,  292,
-      338,  293,  294,  336,  334,  295,   88,  296,   88,  351,
-       88,  339,  297,  298,  299,   88,  300,   88,  385,  212,
-      213,  343,   88,  347,  212,  342,  203,  204,  345,  344,
-      346,  203,  365,  340,  366,  352,  395,  348,  200,   82,
-       83,   83,   83,  200,  385,   88,  201,  205,  205,  205,
-      205,  205,  205,  203,  204,  365,  904,  366,  203,  349,
-      204,  365,  395,  366,  349,  414,  350,  357,  357,  357,
-
-      357,  365,  366,  366,  205,  205,  205,  205,  205,  205,
-      205,  205,  205,  205,  205,  205,  365,  366,  366,  367,
-      365,  382,  366,  365,  368,  366,  365,  374,  366,  365,
-      358,  366,  365,   88,  366,  374,  374,  375,  266,  375,
-      267,   88,  376,  376,  376,  376,  376,  376,  397,  378,
-      374,  378,   88,  266,  378,  267,  420,  411,  374,  380,
-      380,  380,  380,  380,  380,  104,  550,  245,  245,  245,
-      245,  378,   88,  378,  398,  377,   88,  413,  378,  106,
-      106,  106,  106,  106,  106,  249,  249,  249,  249,  249,
-      249,   88,  381,   88,  409,   88,  107,  248,   88,  248,
-
-      246,   88,  249,  249,  249,  249,  249,  249,  408,  410,
-      412,   88,  258,  423,   88,   88,  415,   88,  107,  383,
-      383,  383,  383,  383,  383,  388,  427,  422,  106,  106,
-      106,  106,  106,  106,  416,  237,   88,  239,  461,  240,
-      239,  113,  113,  113,  113,  113,  113,   88,  390,  428,
-      391,   88,  384,   88,  392,   88,   88,  239,  426,  239,
-      393,  258,  240,   88,  239,  421,   88,  424,  425,   88,
-       88,  417,  394,   88,  263,  432,  391,  418,  419,   88,
-      392,  430,  429,   88,  431,   88,   88,   88,  433,  435,
-      434,  436,  439,   88,   88,   88,   88,   88,  440,   88,
-
-      441,   88,  444,   88,  443,  442,  437,  438,  446,   88,
-       88,   88,   88,  445,  448,  449,  447,  450,   88,   88,
-       88,   88,  452,   88,  457,   88,   88,   88,   88,  453,
-      455,  454,   88,   88,  451,  456,   88,   88,  459,   88,
-       88,  464,  458,   88,  144,  463,   88,  462,  460,   88,
-      469,   88,  470,   88,   88,  465,  474,   88,  468,  466,
-      502,  467,  472,  204,  471,  473,  349,  204,  475,  202,
-      503,  349,  476,  350,  214,  214,  214,  214,  357,  357,
-      357,  357,  365,  365,  366,  366,  502,   88,   88,  376,
-      376,  376,  376,  376,  376,  375,  502,  375,  525,  510,
-
-      376,  376,  376,  376,  376,  376,  504,  486,  497,  497,
-      497,  497,  497,  497,  236,  236,  236,  236,  236,  236,
-       88,   88,  502,  511,  237,   88,  239,   88,  240,  239,
-      245,  245,  245,  245,  106,  106,  505,  526,  530,  528,
-      527,  498,  506,  506,   88,   88,  239,  379,  239,   88,
-       88,  240,   88,  239,  380,  380,  380,  380,  380,  380,
-      388,  505,  534,  382,   88,  537,  532,  536,  506,  506,
-      237,  238,  239,  529,  240,  239,  383,  383,  383,  383,
-      383,  383,   88,  390,   88,  391,  904,  381,  545,  392,
-      904,  904,  239,  238,  239,  393,  507,  240,  507,  239,
-
-      535,  508,  508,  508,  508,  508,  508,  394,   88,  384,
-       88,  391,   88,   88,  390,  392,  391,  531,   88,  533,
-      392,   88,   88,   88,   88,   88,  512,  542,  538,  539,
-       88,   88,  547,   88,  509,  540,  541,   88,  394,   88,
-      543,   88,  391,  548,  546,  549,  392,  544,   88,  551,
-       88,   88,  552,   88,  554,  553,  556,   88,   88,   88,
-      558,   88,  555,  557,   88,   88,   88,   88,  559,   88,
-       88,   88,   88,   88,  562,  566,   88,  560,   88,  564,
-      561,  570,   88,  563,  567,  565,   88,   88,   88,   88,
-       88,  571,  568,  569,  578,  574,  572,  575,  573,  577,
-
-      576,   88,   88,   88,   88,   88,   88,  204,  579,   88,
-      582,   88,  581,  589,  580,  587,  585,  502,  611,   88,
-      583,  584,  588,   88,  631,  586,  214,  214,  214,  214,
-      497,  497,  497,  497,  497,  497,  380,  380,  380,  380,
-      380,  380,   88,  502,  611,   88,  237,   88,  239,   88,
-      240,  239,  383,  383,  383,  383,  383,  383,   88,  630,
-      632,  502,  634,  498,   88,   88,  502,  633,  239,  499,
-      239,  503,  607,  240,  607,  239,  610,  608,  608,  608,
-      608,  608,  608,   88,  642,  500,  635,  502,  637,   88,
-       88,   88,  502,  508,  508,  508,  508,  508,  508,  507,
-
-       88,  507,  636,  639,  508,  508,  508,  508,  508,  508,
-      609,  612,  612,  612,  612,  612,  612,   88,   88,   88,
-       88,   88,   88,   88,  904,   88,   88,  613,  638,  614,
-      644,  615,  614,  646,  641,   88,  647,   88,  640,   88,
-      645,  643,   88,  651,  616,   88,  649,  650,  652,  614,
-      653,  614,  654,   88,  615,   88,  614,   88,   88,  656,
-       88,   88,  655,   88,   88,   88,   88,   88,   88,  659,
-      657,   88,  658,  660,   88,  662,  665,  666,  661,   88,
-      663,  664,   88,  667,   88,   88,   88,   88,   88,  668,
-       88,  676,  669,  671,  672,  673,  677,   88,   88,  670,
-
-       88,   88,  675,   88,   88,  904,   88,  777,  674,  712,
-      678,   88,  701,  701,  680,  679,  497,  497,  497,  497,
-      497,  497,  713,  717,  716,  681,  608,  608,  608,  608,
-      608,  608,  607,  701,  607,  701,   88,  608,  608,  608,
-      608,  608,  608,  612,  612,  612,  612,  612,  612,  606,
-      699,  699,  699,  699,  699,  699,  701,  702,   88,  702,
-       88,   88,  702,   88,   88,  714,  613,   88,  614,  715,
-      615,  614,  720,  731,  719,   88,  616,   88,  722,  702,
-      721,  702,   88,  700,  718,   88,  702,   88,  614,   88,
-      614,   88,   88,  615,   88,  614,   88,  725,  723,  724,
-
-       88,   88,   88,  729,   88,   88,  727,  732,   88,  726,
-       88,  730,   88,  728,  734,   88,  733,  737,   88,   88,
-      735,   88,   88,  879,  740,   88,  736,   88,   88,   88,
-      744,   88,  745,  738,  739,   88,  746,  748,  741,  743,
-       88,  747,   88,   88,  749,  764,  742,  699,  699,  699,
-      699,  699,  699,  612,  612,  612,  612,  612,  612,   88,
-       88,  763,  768,  613,   88,  614,  766,  615,  614,  765,
-       88,   88,  783,   88,  769,  767,  770,   88,  771,   88,
-      700,   88,   88,  772,  780,  614,  703,  614,  774,   88,
-      615,   88,  614,   88,  773,   88,  775,   88,  778,   88,
-
-      779,   88,  781,  776,   88,   88,   88,  784,   88,   88,
-       88,  791,   88,   88,  782,  787,   88,  785,   88,  904,
-       88,  793,   88,  809,   88,  794,  786,  788,  790,   88,
-       88,   88,  789,  792,  699,  699,  699,  699,  699,  699,
-      807,  808,   88,   88,  810,  812,  815,  813,   88,  817,
-       88,   88,  811,  818,  819,   88,   88,  814,   88,  821,
-       88,  816,  820,  822,   88,   88,   88,  756,   88,   88,
-      848,   88,   88,  823,   88,  843,   88,   88,   88,  845,
-       88,  846,   88,   88,  904,  849,   88,  824,  825,  826,
-      841,   88,  842,  844,  851,  840,   88,   88,  847,   88,
-
-      852,   88,  854,   88,   88,  850,   88,   88,  853,   88,
-      867,   88,  855,  866,   88,   88,   88,  871,  868,  856,
-       88,   88,   88,  873,  874,  865,  904,   88,  876,  869,
-       88,  875,  872,   88,   88,  870,  877,  882,  881,  880,
-       88,   88,   88,   88,   88,  885,  884,  886,   88,   88,
-      883,  887,   88,   88,   88,  890,   88,  892,   88,   88,
-       88,  893,   88,  888,  889,   88,  891,   88,   88,  897,
-       88,   88,   88,  904,  878,  894,   88,  896,  898,   88,
-      895,   88,  903,   88,   88,  904,  901,  904,  864,  899,
-      904,  900,  863,  902,   70,   70,   70,   70,   70,   70,
-
-       70,   70,   70,   70,   70,   70,   70,   76,   76,   76,
+       88,  159,  165,  112,  210,   88,   88,   88,  198,   88,
+       88,  109,  197,   88,  110,  104,  254,  113,  113,  113,
+
+      113,  113,  113,   88,  170,  178,  171,  200,  196,   88,
+      211,  181,  166,  234,  107,  172,  167,  182,  114,  179,
+      255,  168,   88,  275,  115,  169,  180,  173,  253,   88,
+      116,   88,  908,   88,   88,  174,  107,  175,  286,  235,
+      176,  252,  117,  267,  177,  268,  252,  253,  183,  276,
+      115,  126,  284,  184,  253,  127,  128,   88,  129,  144,
+      130,  131,  908,  132,  145,  133,   88,  259,  262,  186,
+      187,  261,   88,  253,  134,  135,  136,  194,  190,  188,
+      269,  267,  189,  268,  290,  260,  191,  269,  192,  260,
+      908,  261,  263,  193,  267,  137,  268,  261,  138,  267,
+
+      267,  268,  268,   88,   88,   88,  146,  201,   82,   83,
+       83,   83,  201,  204,  205,  202,   88,  261,  204,  318,
+      195,  270,  267,  285,  268,  139,  140,   81,   82,   83,
+       83,   83,   81,  309,  206,  206,  206,  206,  206,  206,
+      213,  214,  267,   88,  268,  213,  144,  215,  267,  271,
+      268,  145,  215,   83,   82,   83,   83,   83,   83,  287,
+       88,  216,  216,  216,  216,   83,   82,   84,   84,   84,
+       83,   88,  215,  245,  245,  245,  245,  245,  245,  246,
+      246,  246,  246,  267,  267,  268,  268,   88,  217,  288,
+       88,  215,   88,   88,   88,   88,  215,  215,   88,  436,
+
+      215,  215,  282,   88,  304,   88,   88,  908,  215,  283,
+       88,  215,  247,  215,  218,  215,  289,  219,  221,  302,
+      303,   88,  222,  223,   88,  321,  307,  224,  225,  312,
+      226,   88,  227,   88,  310,  908,   88,  313,   88,  308,
+       88,  228,  229,  230,  104,   88,  106,  106,  106,  106,
+      106,  106,  305,  306,  311,   88,  320,  314,   88,   88,
+      315,   88,  231,  107,  249,  232,  249,  317,   88,  250,
+      250,  250,  250,  250,  250,  319,   88,  328,  316,  248,
+       88,  327,   88,  323,   88,  107,  322,  367,   88,  368,
+       88,   88,   88,  233,  237,  237,  237,  237,  237,  237,
+
+      333,  326,  251,  334,   88,   88,  324,  329,   88,  336,
+      238,  239,  240,  325,  241,  240,   88,  342,  338,  330,
+      335,  144,  781,   88,  337,   88,   88,  242,   88,  331,
+      332,  340,  240,  239,  240,   88,  339,  241,  345,  240,
+      291,  292,  293,  350,  294,  295,  346,  343,  296,   88,
+      297,   88,  353,  341,   88,  298,  299,  300,  367,  301,
+      368,  367,  347,  368,  348,   88,   88,  349,  344,  201,
+       82,   83,   83,   83,  201,  204,  205,  202,  354,  368,
+      204,  204,  205,  414,  213,  214,  204,  351,  205,  213,
+       88,  908,  351,  367,  352,  368,  206,  206,  206,  206,
+
+      206,  206,  206,  206,  206,  206,  206,  206,  206,  206,
+      206,  206,  206,  206,  359,  359,  359,  359,  368,  367,
+      908,  368,  369,  367,  367,  368,  368,  367,  370,  368,
+      367,  367,  368,  368,  367,  376,  368,  376,  376,  380,
+      267,  380,  268,  377,  380,  377,   88,  360,  378,  378,
+      378,  378,  378,  378,  267,  384,  268,  908,  376,  410,
+      376,  380,  104,  380,  246,  246,  246,  246,  380,  382,
+      382,  382,  382,  382,  382,  106,  106,  106,  106,  106,
+      106,  379,  250,  250,  250,  250,  250,  250,   88,   88,
+       88,   88,  107,   88,   88,  387,  415,  247,   88,  417,
+
+       88,   88,  383,  397,  399,  428,  411,  412,  259,  413,
+      416,   88,  457,  425,  107,  385,  385,  385,  385,  385,
+      385,  387,  390,  106,  106,  106,  106,  106,  106,  397,
+      400,  238,  249,  240,  249,  241,  240,  250,  250,  250,
+      250,  250,  250,   88,   88,  392,   88,  393,  386,   88,
+       88,  394,  429,  240,   88,  240,  259,  395,  241,   88,
+      240,  113,  113,  113,  113,  113,  113,  422,   88,  396,
+      418,   88,  423,  393,  419,  424,   88,  394,   88,   88,
+      420,  421,   88,   88,  426,  427,   88,  434,   88,  430,
+       88,   88,  435,   88,  264,   88,  432,  433,  431,   88,
+
+      441,   88,   88,   88,  442,   88,  437,  443,  438,  439,
+      440,  445,  444,   88,   88,   88,   88,   88,  449,  446,
+      450,  447,  451,  448,   88,   88,   88,   88,   88,  452,
+       88,  459,   88,   88,   88,  454,   88,   88,   88,  456,
+       88,   88,  458,  455,   88,  461,  453,  466,   88,  460,
+       88,   88,  144,   88,  465,  462,  464,  463,   88,   88,
+       88,  471,  467,   88,  468,   88,  469,  473,  470,   88,
+      472,  474,  475,  476,  477,  478,   88,  351,  205,  205,
+       88,  479,  351,   88,  352,  203,  215,  215,  215,  215,
+      359,  359,  359,  359,  528,  367,   88,  368,  367,  531,
+
+      368,  378,  378,  378,  378,  378,  378,  377,  505,  377,
+       88,  513,  378,  378,  378,  378,  378,  378,  506,  489,
+      500,  500,  500,  500,  500,  500,  237,  237,  237,  237,
+      237,  237,  535,   88,  505,  514,  238,   88,  240,   88,
+      241,  240,  246,  246,  246,  246,  106,  106,  508,  529,
+      533,  505,  530,  501,  509,  509,   88,   88,  240,  381,
+      240,  507,   88,  241,  675,  240,  382,  382,  382,  382,
+      382,  382,  390,  508,   88,  384,   88,  505,  538,  539,
+      509,  509,  238,  239,  240,  532,  241,  240,  385,  385,
+      385,  385,  385,  385,   88,  392,  543,  393,   88,  383,
+
+      548,  394,  908,  908,  240,  239,  240,  395,  510,  241,
+      510,  240,   88,  511,  511,  511,  511,  511,  511,  396,
+       88,  386,   88,  393,   88,  537,  392,  394,  393,  534,
+       88,  536,  394,   88,   88,   88,   88,  540,  515,  545,
+       88,   88,   88,   88,  550,   88,  512,   88,  544,   88,
+      396,  541,  542,   88,  393,  546,  553,  549,  394,  554,
+      551,   88,  547,   88,  552,  556,  555,   88,   88,  559,
+       88,   88,   88,   88,  557,   88,  558,  561,   88,   88,
+       88,   88,  560,   88,   88,  562,   88,   88,  565,  569,
+       88,  563,   88,  567,  564,   88,  573,  566,  570,  568,
+
+       88,   88,   88,   88,   88,  574,  571,   88,  572,  578,
+      575,  581,  576,   88,  582,  580,   88,  577,   88,  579,
+       88,   88,   88,  205,   88,  585,  586,   88,  583,  593,
+      592,  505,  589,  591,  615,  584,  587,  588,  215,  215,
+      215,  215,   88,   88,  590,  500,  500,  500,  500,  500,
+      500,  382,  382,  382,  382,  382,  382,  505,  636,  634,
+      615,  238,   88,  240,   88,  241,  240,  385,  385,  385,
+      385,  385,  385,  908,  883,  635,  505,  638,  501,   88,
+       88,  505,   88,  240,  502,  240,  506,  611,  241,  611,
+      240,  614,  612,  612,  612,  612,  612,  612,   88,  637,
+
+      503,  647,  505,  641,  639,   88,   88,  505,  511,  511,
+      511,  511,  511,  511,  510,  908,  510,  642,  640,  511,
+      511,  511,  511,  511,  511,  613,  616,  616,  616,  616,
+      616,  616,   88,   88,   88,  643,   88,   88,   88,   88,
+       88,   88,  617,  649,  618,   88,  619,  618,  648,  645,
+      651,  650,   88,  644,  653,  646,   88,   88,   88,  620,
+       88,  656,  657,  654,  618,   88,  618,  659,  658,  619,
+       88,  618,   88,  655,   88,   88,   88,  660,   88,   88,
+      661,  663,   88,   88,  664,  662,   88,   88,  669,   88,
+      666,   88,   88,  665,  667,  670,  671,  668,   88,   88,
+
+       88,   88,   88,   88,  673,   88,  677,   88,  676,  674,
+      680,  672,  681,  679,   88,  682,   88,  908,  908,  683,
+      684,   88,  678,  500,  500,  500,  500,  500,  500,  612,
+      612,  612,  612,  612,  612,  611,  685,  611,  721,   88,
+      612,  612,  612,  612,  612,  612,  616,  616,  616,  616,
+      616,  616,  720,  705,  705,   88,  610,  703,  703,  703,
+      703,  703,  703,  705,   88,  706,  908,  706,   88,  716,
+      706,   88,  725,  617,   88,  618,  705,  619,  618,  620,
+      719,  718,  717,   88,   88,   88,  705,  706,   88,  706,
+      704,  722,  723,   88,  706,  618,  724,  618,   88,  729,
+
+      619,  726,  618,   88,   88,  728,  727,   88,   88,   88,
+      735,  733,   88,   88,   88,   88,   88,   88,   88,   88,
+       88,  731,   88,  738,   88,  730,  734,  736,  741,  732,
+       88,  744,   88,  737,  739,   88,   88,  740,   88,   88,
+      742,  748,  743,  749,  745,  746,   88,  747,  750,   88,
+      753,   88,   88,   88,   88,  882,  751,  773,  752,  703,
+      703,  703,  703,  703,  703,  616,  616,  616,  616,  616,
+      616,   88,  767,  772,   88,  617,   88,  618,  769,  619,
+      618,  768,   88,  770,   88,   88,   88,  771,  774,   88,
+      776,   88,  704,   88,  779,  778,   88,  618,  707,  618,
+
+       88,   88,  619,  782,  618,  784,  777,  775,   88,   88,
+      783,  785,   88,   88,   88,   88,   88,  780,   88,   88,
+      787,   88,  786,  788,   88,  791,   88,  789,   88,   88,
+       88,   88,   88,  813,  797,   88,  790,  792,  794,  798,
+       88,   88,  793,  795,  814,  796,  703,  703,  703,  703,
+      703,  703,  811,   88,   88,   88,   88,  812,  816,  819,
+      821,   88,   88,  815,  822,  823,   88,  818,  820,   88,
+       88,  817,  825,  824,   88,   88,   88,  826,   88,  760,
+       88,   88,   88,   88,   88,  827,  847,   88,   88,   88,
+      849,   88,  850,  852,   88,   88,   88,  853,  828,  829,
+
+      846,  830,  845,   88,   88,   88,  848,  844,  855,  851,
+       88,   88,  857,  856,   88,   88,   88,  854,   88,   88,
+      858,  871,  859,  870,   88,   88,   88,   88,   88,  875,
+      860,  877,   88,  872,   88,  878,  869,   88,   88,   88,
+       88,   88,   88,  873,  876,  885,  879,   88,  881,  874,
+      880,  884,   88,   88,  892,  886,   88,  887,  888,  889,
+       88,   88,   88,  890,  891,   88,   88,   88,  894,   88,
+      896,   88,  897,   88,   88,   88,  895,  893,   88,   88,
+       88,   88,   88,   88,  901,   88,   88,  908,  908,  900,
+      868,  902,  908,  898,  899,  907,  867,  908,  905,  865,
+
+      908,  903,  904,  864,  906,   70,   70,   70,   70,   70,
+       70,   70,   70,   70,   70,   70,   70,   70,   76,   76,
        76,   76,   76,   76,   76,   76,   76,   76,   76,   76,
-       79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
-       79,   79,   79,   87,  904,  861,   87,  904,   87,   87,
-       87,   87,   87,  141,  860,  904,  859,  141,  141,  141,
-      141,  141,  141,  202,  202,  202,  202,  202,  202,  202,
-      202,  202,  202,  202,  202,  202,  207,  904,  858,  207,
-       88,  207,  207,  207,  207,  207,  211,   88,  211,  211,
-       88,  211,  211,  211,  211,  211,  211,  904,  211,  219,
-      839,  904,  219,  219,  219,  219,  219,  219,  219,  219,
-
-      838,  219,  242,  242,  242,  242,  242,  242,  242,  242,
-      242,  242,  242,  242,  242,  256,  256,  836,  256,  904,
-      834,  904,  256,  272,  832,  904,  272,  830,  272,  272,
-      272,  272,  272,  276,  828,  276,   88,   88,   88,  276,
-      278,   88,  278,   88,   88,   88,  278,  353,   88,  353,
-       88,   88,   88,  353,  355,   88,  355,  904,  806,  804,
-      355,  359,  904,  359,  904,  801,  799,  359,  361,  797,
-      361,   88,   88,   88,  361,  363,   88,  363,   88,   88,
-       88,  363,  370,  762,  370,  759,  758,  756,  370,  372,
-      208,  372,  752,  751,  683,  372,  387,   88,  387,  389,
-
-      389,   88,  389,  389,  389,   88,  389,  256,  256,   88,
-      256,  272,   88,   88,  272,   88,  272,  272,  272,  272,
-      272,  399,   88,  399,   88,   88,   88,  399,  401,   88,
-      401,   88,   88,   88,  401,  403,   88,  403,  710,  709,
-      707,  403,  276,  705,  276,  405,  703,  405,  610,  698,
-      697,  405,  278,  695,  278,   87,  693,  691,   87,  689,
-       87,   87,   87,   87,   87,  202,  202,  202,  202,  202,
-      202,  202,  202,  202,  202,  202,  202,  202,  477,  477,
-      477,  477,  477,  477,  477,  477,  477,  477,  477,  477,
-      477,  478,  687,  478,  685,  683,   88,  478,  480,   88,
-
-      480,   88,   88,   88,  480,  482,   88,  482,   88,   88,
-       88,  482,  353,   88,  353,  484,   88,  484,   88,  629,
-      627,  484,  355,  625,  355,  487,  623,  487,  621,  619,
-      512,  487,  359,  617,  359,  489,  617,  489,  606,  605,
-      603,  489,  361,  492,  361,  491,  492,  491,  601,  599,
-      597,  491,  363,  595,  363,  493,  593,  493,  591,   88,
-       88,  493,  370,   88,  370,  495,   88,  495,   88,   88,
-       88,  495,  372,   88,  372,  501,  524,  501,  522,  501,
-      520,  501,  387,  518,  387,  516,  387,  514,  387,  389,
-      389,  500,  389,  389,  389,  499,  389,  513,  496,  513,
-
-      494,  366,  366,  513,  515,  492,  515,  490,  488,  485,
-      515,  517,  483,  517,  481,  479,   88,  517,  399,   88,
-      399,  519,   88,  519,  407,  406,  404,  519,  401,  402,
-      401,  521,  400,  521,  273,  268,  267,  521,  403,  396,
-      403,  523,  396,  523,  255,  386,  386,  523,  405,  243,
-      405,   87,  379,  373,   87,  371,   87,   87,   87,   87,
-       87,  477,  477,  477,  477,  477,  477,  477,  477,  477,
-      477,  477,  477,  477,  590,  369,  590,  365,  364,  362,
-      590,  478,  360,  478,  592,  356,  592,  354,  208,  204,
-      592,  480,   88,  480,  594,  280,  594,  279,  277,  273,
-
-      594,  482,  268,  482,  596,  271,  596,  268,  266,  265,
-      596,  484,  264,  484,  598,  243,  598,  235,   86,   86,
-      598,  487,   88,  487,  600,  208,  600,  206,   86,  123,
-      600,  489,  118,  489,  491,   88,  491,  904,   71,   71,
-      491,  602,  904,  602,  904,  904,  904,  602,  493,  904,
-      493,  604,  904,  604,  904,  904,  904,  604,  495,  904,
-      495,  501,  904,  501,  904,  501,  904,  501,  389,  904,
-      389,  904,  904,  904,  389,  618,  904,  618,  904,  904,
-      904,  618,  513,  904,  513,  620,  904,  620,  904,  904,
-      904,  620,  515,  904,  515,  622,  904,  622,  904,  904,
-
-      904,  622,  517,  904,  517,  624,  904,  624,  904,  904,
-      904,  624,  519,  904,  519,  626,  904,  626,  904,  904,
-      904,  626,  521,  904,  521,  628,  904,  628,  904,  904,
-      904,  628,  523,  904,  523,   87,  904,  904,   87,  904,
-       87,   87,   87,   87,   87,  682,  682,  682,  682,  682,
-      682,  682,  682,  682,  682,  682,  682,  682,  684,  904,
-      684,  904,  904,  904,  684,  590,  904,  590,  686,  904,
-      686,  904,  904,  904,  686,  592,  904,  592,  688,  904,
-      688,  904,  904,  904,  688,  594,  904,  594,  690,  904,
-      690,  904,  904,  904,  690,  596,  904,  596,  692,  904,
-
-      692,  904,  904,  904,  692,  598,  904,  598,  694,  904,
-      694,  904,  904,  904,  694,  600,  904,  600,  696,  904,
-      696,  904,  904,  904,  696,  602,  904,  602,   87,  904,
-       87,  904,  904,  904,   87,  604,  904,  604,  501,  904,
-      501,  904,  904,  904,  501,  704,  904,  704,  904,  904,
-      904,  704,  618,  904,  618,  706,  904,  706,  904,  904,
-      904,  706,  620,  904,  620,  708,  904,  708,  904,  904,
-      904,  708,  622,  904,  622,  141,  904,  141,  904,  904,
-      904,  141,  624,  904,  624,  711,  904,  711,  626,  904,
-      626,   87,  904,  904,   87,  904,   87,   87,   87,   87,
-
-       87,  628,  904,  628,  682,  682,  682,  682,  682,  682,
-      682,  682,  682,  682,  682,  682,  682,  750,  904,  750,
-      904,  904,  904,  750,  684,  904,  684,  207,  904,  207,
-      904,  904,  904,  207,  686,  904,  686,  753,  904,  753,
-      688,  904,  688,  207,  904,  904,  207,  904,  207,  207,
-      207,  207,  207,  690,  904,  690,  754,  904,  754,  692,
-      904,  692,  694,  904,  694,  755,  904,  755,  696,  904,
-      696,   87,  904,   87,  757,  904,  757,  904,  904,  904,
-      757,  704,  904,  704,  272,  904,  272,  904,  904,  904,
-      272,  706,  904,  706,  760,  904,  760,  708,  904,  708,
-
-      141,  904,  141,  761,  904,  761,  904,  904,  904,  761,
-       87,  904,  904,   87,  904,   87,   87,   87,   87,   87,
-      795,  904,  795,  750,  904,  750,  207,  904,  207,  796,
-      904,  796,  904,  904,  904,  796,  798,  904,  798,  904,
-      904,  904,  798,  800,  904,  800,  904,  904,  904,  800,
-      802,  904,  802,  803,  904,  803,  904,  904,  904,  803,
-      805,  904,  805,  904,  904,  904,  805,  827,  904,  827,
-      904,  904,  904,  827,  829,  904,  829,  904,  904,  904,
-      829,  831,  904,  831,  904,  904,  904,  831,  833,  904,
-      833,  904,  904,  904,  833,  835,  904,  835,  904,  904,
-
-      904,  835,  837,  904,  837,  904,  904,  904,  837,  628,
-      904,  628,  904,  904,  904,  628,  857,  904,  857,  904,
-      904,  904,  857,  690,  904,  690,  904,  904,  904,  690,
-      694,  904,  694,  904,  904,  904,  694,   87,  904,   87,
-      904,  904,  904,   87,  862,  904,  862,  904,  904,  904,
-      862,  141,  904,  141,  904,  904,  904,  141,  207,  904,
-      207,  904,  904,  904,  207,   11,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904
+       76,   79,   79,   79,   79,   79,   79,   79,   79,   79,
+       79,   79,   79,   79,   87,  908,  863,   87,  908,   87,
+       87,   87,   87,   87,  141,  862,   88,   88,  141,  141,
+      141,  141,  141,  141,  203,  203,  203,  203,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  208,   88,  908,
+      208,  843,  208,  208,  208,  208,  208,  212,  908,  212,
+      212,  842,  212,  212,  212,  212,  212,  212,  840,  212,
+
+      220,  908,  838,  220,  220,  220,  220,  220,  220,  220,
+      220,  908,  220,  243,  243,  243,  243,  243,  243,  243,
+      243,  243,  243,  243,  243,  243,  257,  257,  836,  257,
+      908,  834,  832,  257,  273,   88,   88,  273,   88,  273,
+      273,  273,  273,  273,  277,   88,  277,   88,   88,   88,
+      277,  279,   88,  279,   88,   88,   88,  279,  355,   88,
+      355,  908,  810,  808,  355,  357,  908,  357,  908,  805,
+      803,  357,  361,  801,  361,   88,   88,   88,  361,  363,
+       88,  363,   88,   88,   88,  363,  365,  766,  365,  763,
+      762,  760,  365,  372,  209,  372,  756,  755,  687,  372,
+
+      374,   88,  374,   88,   88,   88,  374,  389,   88,  389,
+      391,  391,   88,  391,  391,  391,   88,  391,  257,  257,
+       88,  257,  273,   88,   88,  273,   88,  273,  273,  273,
+      273,  273,  401,   88,  401,   88,   88,   88,  401,  403,
+       88,  403,  714,  713,  711,  403,  405,  709,  405,  707,
+      614,  702,  405,  277,  701,  277,  407,  699,  407,  697,
+      695,  693,  407,  279,  691,  279,   87,  689,  687,   87,
+       88,   87,   87,   87,   87,   87,  203,  203,  203,  203,
+      203,  203,  203,  203,  203,  203,  203,  203,  203,  480,
+      480,  480,  480,  480,  480,  480,  480,  480,  480,  480,
+
+      480,  480,  481,   88,  481,   88,   88,   88,  481,  483,
+       88,  483,   88,   88,   88,  483,  485,   88,  485,   88,
+       88,   88,  485,  355,  633,  355,  487,  631,  487,  629,
+      627,  625,  487,  357,  623,  357,  490,  515,  490,  621,
+      621,  610,  490,  361,  609,  361,  492,  607,  492,  495,
+      495,  605,  492,  363,  603,  363,  494,  601,  494,  599,
+      597,  595,  494,  365,   88,  365,  496,   88,  496,   88,
+       88,   88,  496,  372,   88,  372,  498,   88,  498,   88,
+      527,  525,  498,  374,  523,  374,  504,  521,  504,  519,
+      504,  517,  504,  389,  503,  389,  502,  389,  499,  389,
+
+      391,  391,  497,  391,  391,  391,  368,  391,  516,  368,
+      516,  495,  493,  491,  516,  518,  488,  518,  486,  484,
+      482,  518,  520,   88,  520,   88,   88,  409,  520,  401,
+      408,  401,  522,  406,  522,  404,  402,  274,  522,  403,
+      269,  403,  524,  268,  524,  398,  398,  256,  524,  405,
+      388,  405,  526,  388,  526,  244,  381,  375,  526,  407,
+      373,  407,   87,  371,  367,   87,  366,   87,   87,   87,
+       87,   87,  480,  480,  480,  480,  480,  480,  480,  480,
+      480,  480,  480,  480,  480,  594,  364,  594,  362,  358,
+      356,  594,  481,  209,  481,  596,  205,  596,   88,  281,
+
+      280,  596,  483,  278,  483,  598,  274,  598,  269,  272,
+      269,  598,  485,  267,  485,  600,  266,  600,  265,  244,
+      236,  600,  487,   86,  487,  602,   86,  602,   88,  209,
+      207,  602,  490,   86,  490,  604,  123,  604,  118,   88,
+      908,  604,  492,   71,  492,  494,   71,  494,  908,  908,
+      908,  494,  606,  908,  606,  908,  908,  908,  606,  496,
+      908,  496,  608,  908,  608,  908,  908,  908,  608,  498,
+      908,  498,  504,  908,  504,  908,  504,  908,  504,  391,
+      908,  391,  908,  908,  908,  391,  622,  908,  622,  908,
+      908,  908,  622,  516,  908,  516,  624,  908,  624,  908,
+
+      908,  908,  624,  518,  908,  518,  626,  908,  626,  908,
+      908,  908,  626,  520,  908,  520,  628,  908,  628,  908,
+      908,  908,  628,  522,  908,  522,  630,  908,  630,  908,
+      908,  908,  630,  524,  908,  524,  632,  908,  632,  908,
+      908,  908,  632,  526,  908,  526,   87,  908,  908,   87,
+      908,   87,   87,   87,   87,   87,  686,  686,  686,  686,
+      686,  686,  686,  686,  686,  686,  686,  686,  686,  688,
+      908,  688,  908,  908,  908,  688,  594,  908,  594,  690,
+      908,  690,  908,  908,  908,  690,  596,  908,  596,  692,
+      908,  692,  908,  908,  908,  692,  598,  908,  598,  694,
+
+      908,  694,  908,  908,  908,  694,  600,  908,  600,  696,
+      908,  696,  908,  908,  908,  696,  602,  908,  602,  698,
+      908,  698,  908,  908,  908,  698,  604,  908,  604,  700,
+      908,  700,  908,  908,  908,  700,  606,  908,  606,   87,
+      908,   87,  908,  908,  908,   87,  608,  908,  608,  504,
+      908,  504,  908,  908,  908,  504,  708,  908,  708,  908,
+      908,  908,  708,  622,  908,  622,  710,  908,  710,  908,
+      908,  908,  710,  624,  908,  624,  712,  908,  712,  908,
+      908,  908,  712,  626,  908,  626,  141,  908,  141,  908,
+      908,  908,  141,  628,  908,  628,  715,  908,  715,  630,
+
+      908,  630,   87,  908,  908,   87,  908,   87,   87,   87,
+       87,   87,  632,  908,  632,  686,  686,  686,  686,  686,
+      686,  686,  686,  686,  686,  686,  686,  686,  754,  908,
+      754,  908,  908,  908,  754,  688,  908,  688,  208,  908,
+      208,  908,  908,  908,  208,  690,  908,  690,  757,  908,
+      757,  692,  908,  692,  208,  908,  908,  208,  908,  208,
+      208,  208,  208,  208,  694,  908,  694,  758,  908,  758,
+      696,  908,  696,  698,  908,  698,  759,  908,  759,  700,
+      908,  700,   87,  908,   87,  761,  908,  761,  908,  908,
+      908,  761,  708,  908,  708,  273,  908,  273,  908,  908,
+
+      908,  273,  710,  908,  710,  764,  908,  764,  712,  908,
+      712,  141,  908,  141,  765,  908,  765,  908,  908,  908,
+      765,   87,  908,  908,   87,  908,   87,   87,   87,   87,
+       87,  799,  908,  799,  754,  908,  754,  208,  908,  208,
+      800,  908,  800,  908,  908,  908,  800,  802,  908,  802,
+      908,  908,  908,  802,  804,  908,  804,  908,  908,  908,
+      804,  806,  908,  806,  807,  908,  807,  908,  908,  908,
+      807,  809,  908,  809,  908,  908,  908,  809,  831,  908,
+      831,  908,  908,  908,  831,  833,  908,  833,  908,  908,
+      908,  833,  835,  908,  835,  908,  908,  908,  835,  837,
+
+      908,  837,  908,  908,  908,  837,  839,  908,  839,  908,
+      908,  908,  839,  841,  908,  841,  908,  908,  908,  841,
+      632,  908,  632,  908,  908,  908,  632,  861,  908,  861,
+      908,  908,  908,  861,  694,  908,  694,  908,  908,  908,
+      694,  698,  908,  698,  908,  908,  908,  698,   87,  908,
+       87,  908,  908,  908,   87,  866,  908,  866,  908,  908,
+      908,  866,  141,  908,  141,  908,  908,  908,  141,  208,
+      908,  208,  908,  908,  908,  208,   11,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908
     } ;
 
-static yyconst flex_int16_t yy_chk[2952] =
+static yyconst flex_int16_t yy_chk[2963] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1134,5 +1137,5 @@
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    7,
-        8,    9,   10,   37,   37,   20,   39,    9,   10,  903,
+        8,    9,   10,   37,   37,   20,   39,    9,   10,  907,
         7,    8,   13,   13,   13,   13,   13,   13,   15,   15,
 
@@ -1142,306 +1145,307 @@
         8,    9,   10,   40,   42,   29,   30,   47,   30,   30,
        30,   30,   30,   30,   35,   57,   35,   35,   44,  127,
-       44,  127,  110,  116,   57,   30,   65,  544,   47,   30,
+       44,  127,  110,  116,   57,   30,   65,  547,   47,   30,
        47,   45,   45,   45,   49,   30,   30,   45,   45,   49,
        45,   30,   40,   45,   45,   40,   49,   30,   45,   63,
-       62,   45,   49,   30,   74,  902,  544,   53,   63,   51,
+       62,   45,   49,   30,   74,  906,  547,   53,   63,   51,
        61,   30,   62,   55,   30,   31,  109,   31,   31,   31,
 
        31,   31,   31,   50,   51,   53,   51,   65,   61,   54,
        74,   55,   50,   88,   31,   51,   50,   55,   31,   54,
-      109,   50,   52,  115,   31,   50,   54,   52,  182,  146,
-       31,   56,  108,  182,  146,   52,   31,   52,  108,   88,
-       52,   60,   31,  128,   52,  128,   60,  115,   56,  152,
-       31,   38,  894,   56,  112,   38,   38,   58,   38,   60,
-       38,   38,  114,   38,  108,   38,   59,  152,  114,   58,
-       58,  117,  112,  146,   38,   38,   38,  189,   59,   58,
-      112,  130,   58,  130,  143,   60,   59,  132,   60,  117,
-      189,   69,   69,   59,  114,   38,   69,  117,   38,  132,
-
-      111,  132,   60,   68,   68,   68,   68,   68,   68,  893,
-      143,   68,   69,   69,   69,   69,   69,   69,   81,   81,
-       81,   81,   81,   81,  154,   38,   38,   78,   78,  133,
-      111,  133,   78,  154,   78,  111,  135,  162,  135,   78,
-       83,   83,   83,   83,   83,   83,  162,  890,   78,   78,
-       78,   78,   84,   84,   84,   84,   84,   84,  111,   78,
-      104,  104,  104,  104,  104,  104,  105,  105,  105,  105,
-      134,  134,  138,  134,  138,   78,  131,  155,   78,  136,
-      136,  136,  173,   78,   78,  153,  157,   78,   78,  140,
-      131,  140,  131,  155,  105,   78,  151,  173,   78,  105,
-
-       78,   78,   78,  153,   78,   86,  156,  160,  157,   86,
-       86,  151,  183,  158,   86,   86,  168,   86,  151,   86,
-      161,  183,  105,  160,  156,  158,  163,  164,   86,   86,
-       86,  106,  164,  106,  106,  106,  106,  106,  106,  168,
-      169,  167,  161,  170,  166,  164,  165,  163,  163,   86,
-      106,  107,   86,  107,  166,  172,  107,  107,  107,  107,
-      107,  107,  167,  165,  170,  171,  106,  169,  177,  175,
-      171,  176,  106,  174,  178,  181,  184,  172,  180,  889,
-       86,  100,  100,  100,  100,  100,  100,  175,  171,  107,
-      174,  176,  181,  180,  185,  177,  178,  100,  100,  100,
-
-      180,  100,  100,  184,  192,  185,  187,  186,  193,  221,
-      190,  221,  887,  188,  100,  185,  185,  187,  188,  100,
-      100,  100,  159,  192,  100,  186,  100,  159,  159,  159,
-      190,  159,  159,  188,  187,  159,  191,  159,  194,  208,
-      196,  191,  159,  159,  159,  195,  159,  197,  251,  212,
-      212,  194,  193,  196,  212,  193,  201,  201,  195,  194,
-      195,  201,  222,  191,  222,  208,  259,  197,  200,  200,
-      200,  200,  200,  200,  251,  287,  200,  201,  201,  201,
-      201,  201,  201,  203,  203,  223,  246,  223,  203,  205,
-      205,  226,  259,  226,  205,  287,  205,  215,  215,  215,
-
-      215,  228,  224,  228,  203,  203,  203,  203,  203,  203,
-      205,  205,  205,  205,  205,  205,  224,  225,  224,  227,
-      227,  246,  227,  229,  229,  229,  231,  239,  231,  225,
-      215,  225,  232,  291,  232,  237,  237,  238,  269,  238,
-      269,  284,  238,  238,  238,  238,  238,  238,  273,  240,
-      239,  240,  432,  270,  240,  270,  291,  284,  237,  244,
-      244,  244,  244,  244,  244,  245,  432,  245,  245,  245,
-      245,  240,  286,  240,  273,  238,  282,  286,  240,  247,
-      247,  247,  247,  247,  247,  248,  248,  248,  248,  248,
-      248,  283,  244,  285,  282,  281,  247,  250,  294,  250,
-
-      245,  293,  250,  250,  250,  250,  250,  250,  281,  283,
-      285,  288,  247,  294,  289,  331,  288,  297,  247,  249,
-      249,  249,  249,  249,  249,  256,  297,  293,  258,  258,
-      258,  258,  258,  258,  289,  249,  298,  249,  331,  249,
-      249,  263,  263,  263,  263,  263,  263,  292,  256,  298,
-      256,  295,  249,  296,  256,  299,  290,  249,  296,  249,
-      256,  258,  249,  300,  249,  292,  302,  295,  295,  306,
-      303,  290,  256,  307,  263,  303,  256,  290,  290,  304,
-      256,  300,  299,  305,  302,  308,  312,  309,  304,  306,
-      305,  307,  309,  310,  311,  313,  314,  315,  310,  316,
-
-      311,  317,  314,  321,  313,  312,  308,  308,  316,  318,
-      319,  322,  320,  315,  318,  319,  317,  320,  323,  325,
-      326,  327,  321,  328,  327,  329,  330,  332,  333,  322,
-      325,  323,  334,  335,  320,  326,  336,  339,  329,  337,
-      338,  334,  328,  341,  342,  333,  343,  332,  330,  344,
-      339,  346,  341,  347,  348,  335,  346,  345,  338,  336,
-      387,  337,  344,  350,  343,  345,  349,  349,  347,  350,
-      387,  349,  348,  349,  357,  357,  357,  357,  358,  358,
-      358,  358,  367,  368,  367,  368,  387,  408,  342,  375,
-      375,  375,  375,  375,  375,  377,  388,  377,  408,  392,
-
-      377,  377,  377,  377,  377,  377,  388,  357,  376,  376,
-      376,  376,  376,  376,  379,  379,  379,  379,  379,  379,
-      411,  409,  388,  392,  376,  410,  376,  413,  376,  376,
-      382,  382,  382,  382,  382,  382,  390,  409,  413,  411,
-      410,  376,  390,  394,  415,  419,  376,  379,  376,  417,
-      886,  376,  420,  376,  380,  380,  380,  380,  380,  380,
-      389,  394,  417,  382,  412,  420,  415,  419,  390,  394,
-      380,  380,  380,  412,  380,  380,  383,  383,  383,  383,
-      383,  383,  426,  389,  418,  389,  879,  380,  426,  389,
-      878,  393,  380,  380,  380,  389,  391,  380,  391,  380,
-
-      418,  391,  391,  391,  391,  391,  391,  389,  414,  383,
-      416,  389,  421,  422,  393,  389,  393,  414,  423,  416,
-      393,  428,  424,  427,  429,  425,  393,  424,  421,  421,
-      430,  436,  428,  437,  391,  422,  423,  434,  393,  439,
-      425,  438,  393,  429,  427,  430,  393,  425,  441,  434,
-      440,  442,  436,  444,  438,  437,  440,  446,  447,  448,
-      442,  449,  439,  441,  450,  451,  452,  454,  444,  456,
-      459,  457,  458,  462,  448,  452,  460,  446,  461,  450,
-      447,  458,  464,  449,  454,  451,  465,  466,  463,  468,
-      469,  459,  456,  457,  466,  462,  460,  463,  461,  465,
-
-      464,  467,  470,  474,  471,  472,  475,  477,  467,  877,
-      470,  526,  469,  477,  468,  475,  472,  504,  505,  476,
-      470,  471,  476,  876,  526,  474,  486,  486,  486,  486,
-      497,  497,  497,  497,  497,  497,  499,  499,  499,  499,
-      499,  499,  525,  504,  505,  528,  497,  529,  497,  530,
-      497,  497,  500,  500,  500,  500,  500,  500,  875,  525,
-      528,  501,  530,  497,  531,  538,  503,  529,  497,  499,
-      497,  501,  502,  497,  502,  497,  503,  502,  502,  502,
-      502,  502,  502,  533,  538,  500,  531,  501,  533,  532,
-      871,  867,  503,  507,  507,  507,  507,  507,  507,  509,
-
-      535,  509,  532,  535,  509,  509,  509,  509,  509,  509,
-      502,  508,  508,  508,  508,  508,  508,  534,  536,  537,
-      539,  540,  542,  543,  864,  546,  547,  508,  534,  508,
-      540,  508,  508,  542,  537,  541,  543,  545,  536,  548,
-      541,  539,  554,  547,  508,  549,  545,  546,  548,  508,
-      549,  508,  551,  552,  508,  555,  508,  556,  551,  554,
-      557,  560,  552,  561,  559,  562,  564,  571,  567,  557,
-      555,  565,  556,  559,  568,  561,  565,  567,  560,  572,
-      562,  564,  573,  568,  576,  575,  578,  582,  577,  571,
-      579,  580,  572,  575,  576,  577,  582,  580,  585,  573,
-
-      583,  586,  579,  588,  630,  863,  634,  728,  578,  630,
-      583,  633,  613,  613,  586,  585,  606,  606,  606,  606,
-      606,  606,  630,  634,  633,  588,  607,  607,  607,  607,
-      607,  607,  609,  614,  609,  613,  728,  609,  609,  609,
-      609,  609,  609,  612,  612,  612,  612,  612,  612,  606,
-      608,  608,  608,  608,  608,  608,  614,  615,  631,  615,
-      632,  635,  615,  638,  637,  631,  608,  636,  608,  632,
-      608,  608,  637,  648,  636,  639,  612,  641,  639,  615,
-      638,  615,  642,  608,  635,  640,  615,  643,  608,  644,
-      608,  645,  649,  608,  647,  608,  650,  642,  640,  641,
-
-      646,  648,  652,  646,  653,  651,  644,  649,  654,  643,
-      656,  647,  657,  645,  651,  658,  650,  654,  662,  663,
-      652,  668,  665,  862,  658,  669,  653,  676,  679,  680,
-      668,  677,  669,  656,  657,  713,  676,  679,  662,  665,
-      712,  677,  718,  715,  680,  713,  663,  699,  699,  699,
-      699,  699,  699,  703,  703,  703,  703,  703,  703,  716,
-      721,  712,  718,  699,  734,  699,  716,  699,  699,  715,
-      717,  719,  734,  720,  719,  717,  720,  723,  721,  725,
-      699,  724,  727,  723,  731,  699,  703,  699,  725,  745,
-      699,  730,  699,  726,  724,  729,  726,  735,  729,  732,
-
-      730,  733,  732,  727,  736,  737,  738,  735,  744,  741,
-      731,  745,  746,  748,  733,  738,  749,  736,  769,  861,
-      767,  748,  772,  769,  768,  749,  737,  741,  744,  770,
-      773,  774,  741,  746,  756,  756,  756,  756,  756,  756,
-      767,  768,  771,  775,  770,  772,  775,  773,  776,  777,
-      779,  781,  771,  779,  781,  782,  783,  774,  785,  783,
-      784,  776,  782,  784,  786,  788,  792,  756,  807,  809,
-      817,  812,  811,  785,  810,  811,  813,  777,  814,  813,
-      816,  814,  818,  820,  860,  818,  824,  786,  788,  792,
-      809,  821,  810,  812,  821,  807,  817,  822,  816,  823,
-
-      822,  825,  824,  826,  841,  820,  842,  843,  823,  844,
-      843,  845,  825,  842,  846,  847,  855,  846,  844,  826,
-      850,  853,  854,  850,  853,  841,  859,  856,  855,  845,
-      865,  854,  847,  866,  868,  845,  856,  868,  866,  865,
-      869,  870,  872,  880,  873,  872,  870,  873,  874,  881,
-      869,  874,  882,  888,  884,  882,  883,  884,  885,  891,
-      895,  885,  892,  880,  881,  896,  883,  897,  899,  895,
-      898,  900,  901,  858,  857,  888,  852,  892,  896,  851,
-      891,  849,  901,  848,  840,  839,  899,  838,  837,  897,
-      836,  898,  835,  900,  905,  905,  905,  905,  905,  905,
-
-      905,  905,  905,  905,  905,  905,  905,  906,  906,  906,
-      906,  906,  906,  906,  906,  906,  906,  906,  906,  906,
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
-      907,  907,  907,  908,  834,  833,  908,  832,  908,  908,
-      908,  908,  908,  909,  831,  830,  829,  909,  909,  909,
-      909,  909,  909,  910,  910,  910,  910,  910,  910,  910,
-      910,  910,  910,  910,  910,  910,  911,  828,  827,  911,
-      819,  911,  911,  911,  911,  911,  912,  815,  912,  912,
-      808,  912,  912,  912,  912,  912,  912,  806,  912,  913,
-      805,  804,  913,  913,  913,  913,  913,  913,  913,  913,
-
-      803,  913,  914,  914,  914,  914,  914,  914,  914,  914,
-      914,  914,  914,  914,  914,  915,  915,  802,  915,  801,
-      800,  799,  915,  916,  798,  797,  916,  796,  916,  916,
-      916,  916,  916,  917,  795,  917,  794,  793,  791,  917,
-      918,  790,  918,  789,  787,  780,  918,  919,  778,  919,
-      766,  765,  764,  919,  920,  763,  920,  762,  761,  760,
-      920,  921,  759,  921,  758,  755,  754,  921,  922,  753,
-      922,  747,  743,  742,  922,  923,  740,  923,  739,  722,
-      714,  923,  924,  711,  924,  706,  704,  700,  924,  925,
-      690,  925,  686,  684,  682,  925,  926,  681,  926,  927,
-
-      927,  678,  927,  927,  927,  675,  927,  928,  928,  674,
-      928,  929,  673,  672,  929,  671,  929,  929,  929,  929,
-      929,  930,  670,  930,  667,  666,  664,  930,  931,  661,
-      931,  660,  659,  655,  931,  932,  628,  932,  624,  622,
-      620,  932,  933,  618,  933,  934,  616,  934,  610,  604,
-      602,  934,  935,  600,  935,  936,  598,  596,  936,  594,
-      936,  936,  936,  936,  936,  937,  937,  937,  937,  937,
-      937,  937,  937,  937,  937,  937,  937,  937,  938,  938,
-      938,  938,  938,  938,  938,  938,  938,  938,  938,  938,
-      938,  939,  592,  939,  590,  589,  587,  939,  940,  584,
-
-      940,  581,  574,  570,  940,  941,  569,  941,  566,  563,
-      558,  941,  942,  553,  942,  943,  550,  943,  527,  523,
-      521,  943,  944,  519,  944,  945,  517,  945,  515,  513,
-      512,  945,  946,  511,  946,  947,  510,  947,  498,  495,
-      493,  947,  948,  492,  948,  949,  491,  949,  489,  487,
-      484,  949,  950,  482,  950,  951,  480,  951,  478,  473,
-      455,  951,  952,  453,  952,  953,  445,  953,  443,  435,
-      433,  953,  954,  431,  954,  955,  405,  955,  403,  955,
-      401,  955,  956,  399,  956,  398,  956,  397,  956,  957,
-      957,  384,  957,  957,  957,  381,  957,  958,  372,  958,
-
-      370,  369,  365,  958,  959,  363,  959,  361,  359,  355,
-      959,  960,  353,  960,  352,  351,  340,  960,  961,  324,
-      961,  962,  301,  962,  280,  278,  276,  962,  963,  275,
-      963,  964,  274,  964,  272,  271,  266,  964,  965,  262,
-      965,  966,  261,  966,  257,  254,  253,  966,  967,  242,
-      967,  968,  241,  234,  968,  233,  968,  968,  968,  968,
-      968,  969,  969,  969,  969,  969,  969,  969,  969,  969,
-      969,  969,  969,  969,  970,  230,  970,  220,  218,  217,
-      970,  971,  216,  971,  972,  210,  972,  209,  207,  202,
-      972,  973,  179,  973,  974,  150,  974,  148,  147,  141,
-
-      974,  975,  139,  975,  976,  137,  976,  129,  126,  125,
-      976,  977,  121,  977,  978,  102,  978,   99,   96,   94,
-      978,  979,   87,  979,  980,   73,  980,   71,   67,   36,
-      980,  981,   33,  981,  982,   18,  982,   11,    4,    3,
-      982,  983,    0,  983,    0,    0,    0,  983,  984,    0,
-      984,  985,    0,  985,    0,    0,    0,  985,  986,    0,
-      986,  987,    0,  987,    0,  987,    0,  987,  988,    0,
-      988,    0,    0,    0,  988,  989,    0,  989,    0,    0,
-        0,  989,  990,    0,  990,  991,    0,  991,    0,    0,
-        0,  991,  992,    0,  992,  993,    0,  993,    0,    0,
-
-        0,  993,  994,    0,  994,  995,    0,  995,    0,    0,
-        0,  995,  996,    0,  996,  997,    0,  997,    0,    0,
-        0,  997,  998,    0,  998,  999,    0,  999,    0,    0,
-        0,  999, 1000,    0, 1000, 1001,    0,    0, 1001,    0,
-     1001, 1001, 1001, 1001, 1001, 1002, 1002, 1002, 1002, 1002,
-     1002, 1002, 1002, 1002, 1002, 1002, 1002, 1002, 1003,    0,
-     1003,    0,    0,    0, 1003, 1004,    0, 1004, 1005,    0,
-     1005,    0,    0,    0, 1005, 1006,    0, 1006, 1007,    0,
-     1007,    0,    0,    0, 1007, 1008,    0, 1008, 1009,    0,
-     1009,    0,    0,    0, 1009, 1010,    0, 1010, 1011,    0,
-
-     1011,    0,    0,    0, 1011, 1012,    0, 1012, 1013,    0,
-     1013,    0,    0,    0, 1013, 1014,    0, 1014, 1015,    0,
-     1015,    0,    0,    0, 1015, 1016,    0, 1016, 1017,    0,
-     1017,    0,    0,    0, 1017, 1018,    0, 1018, 1019,    0,
-     1019,    0,    0,    0, 1019, 1020,    0, 1020,    0,    0,
-        0, 1020, 1021,    0, 1021, 1022,    0, 1022,    0,    0,
-        0, 1022, 1023,    0, 1023, 1024,    0, 1024,    0,    0,
-        0, 1024, 1025,    0, 1025, 1026,    0, 1026,    0,    0,
-        0, 1026, 1027,    0, 1027, 1028,    0, 1028, 1029,    0,
-     1029, 1030,    0,    0, 1030,    0, 1030, 1030, 1030, 1030,
-
-     1030, 1031,    0, 1031, 1032, 1032, 1032, 1032, 1032, 1032,
-     1032, 1032, 1032, 1032, 1032, 1032, 1032, 1033,    0, 1033,
-        0,    0,    0, 1033, 1034,    0, 1034, 1035,    0, 1035,
-        0,    0,    0, 1035, 1036,    0, 1036, 1037,    0, 1037,
-     1038,    0, 1038, 1039,    0,    0, 1039,    0, 1039, 1039,
-     1039, 1039, 1039, 1040,    0, 1040, 1041,    0, 1041, 1042,
-        0, 1042, 1043,    0, 1043, 1044,    0, 1044, 1045,    0,
-     1045, 1046,    0, 1046, 1047,    0, 1047,    0,    0,    0,
-     1047, 1048,    0, 1048, 1049,    0, 1049,    0,    0,    0,
-     1049, 1050,    0, 1050, 1051,    0, 1051, 1052,    0, 1052,
-
-     1053,    0, 1053, 1054,    0, 1054,    0,    0,    0, 1054,
-     1055,    0,    0, 1055,    0, 1055, 1055, 1055, 1055, 1055,
-     1056,    0, 1056, 1057,    0, 1057, 1058,    0, 1058, 1059,
-        0, 1059,    0,    0,    0, 1059, 1060,    0, 1060,    0,
-        0,    0, 1060, 1061,    0, 1061,    0,    0,    0, 1061,
-     1062,    0, 1062, 1063,    0, 1063,    0,    0,    0, 1063,
-     1064,    0, 1064,    0,    0,    0, 1064, 1065,    0, 1065,
-        0,    0,    0, 1065, 1066,    0, 1066,    0,    0,    0,
-     1066, 1067,    0, 1067,    0,    0,    0, 1067, 1068,    0,
-     1068,    0,    0,    0, 1068, 1069,    0, 1069,    0,    0,
-
-        0, 1069, 1070,    0, 1070,    0,    0,    0, 1070, 1071,
-        0, 1071,    0,    0,    0, 1071, 1072,    0, 1072,    0,
-        0,    0, 1072, 1073,    0, 1073,    0,    0,    0, 1073,
-     1074,    0, 1074,    0,    0,    0, 1074, 1075,    0, 1075,
-        0,    0,    0, 1075, 1076,    0, 1076,    0,    0,    0,
-     1076, 1077,    0, 1077,    0,    0,    0, 1077, 1078,    0,
-     1078,    0,    0,    0, 1078,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
-      904
+      109,   50,   52,  143,   31,   50,   54,   52,  112,  154,
+       31,   56,  111,  898,  152,   52,   31,   52,  154,   88,
+       52,  108,   31,  128,   52,  128,  112,  108,   56,  143,
+       31,   38,  152,   56,  112,   38,   38,   58,   38,   60,
+       38,   38,  111,   38,   60,   38,   59,  111,  115,   58,
+       58,  117,  158,  108,   38,   38,   38,   60,   59,   58,
+      131,  130,   58,  130,  158,  114,   59,  132,   59,  117,
+      111,  114,  115,   59,  131,   38,  131,  117,   38,  132,
+
+      133,  132,  133,   60,  173,  153,   60,   68,   68,   68,
+       68,   68,   68,   69,   69,   68,  165,  114,   69,  173,
+       60,  134,  134,  153,  134,   38,   38,   81,   81,   81,
+       81,   81,   81,  165,   69,   69,   69,   69,   69,   69,
+       78,   78,  135,  155,  135,   78,  146,   78,  136,  136,
+      136,  146,   78,   83,   83,   83,   83,   83,   83,  155,
+      897,   78,   78,   78,   78,   84,   84,   84,   84,   84,
+       84,  156,   78,  104,  104,  104,  104,  104,  104,  105,
+      105,  105,  105,  138,  140,  138,  140,  151,   78,  156,
+      146,   78,  306,  894,  157,  162,   78,   78,  161,  306,
+
+       78,   78,  151,  160,  162,  176,  168,  105,   78,  151,
+      169,   78,  105,   78,   78,   78,  157,   78,   86,  160,
+      161,  164,   86,   86,  166,  176,  164,   86,   86,  168,
+       86,  163,   86,  167,  166,  105,  170,  169,  175,  164,
+      893,   86,   86,   86,  106,  172,  106,  106,  106,  106,
+      106,  106,  163,  163,  167,  171,  175,  170,  174,  177,
+      171,  178,   86,  106,  107,   86,  107,  172,  183,  107,
+      107,  107,  107,  107,  107,  174,  182,  183,  171,  106,
+      184,  182,  186,  178,  181,  106,  177,  222,  891,  222,
+      192,  180,  187,   86,  100,  100,  100,  100,  100,  100,
+
+      186,  181,  107,  187,  188,  189,  180,  184,  185,  188,
+      100,  100,  100,  180,  100,  100,  190,  192,  189,  185,
+      187,  194,  732,  198,  188,  195,  191,  100,  193,  185,
+      185,  191,  100,  100,  100,  159,  190,  100,  195,  100,
+      159,  159,  159,  198,  159,  159,  195,  193,  159,  196,
+      159,  732,  209,  191,  197,  159,  159,  159,  223,  159,
+      223,  224,  196,  224,  196,  194,  286,  197,  194,  201,
+      201,  201,  201,  201,  201,  202,  202,  201,  209,  225,
+      202,  204,  204,  286,  213,  213,  204,  206,  206,  213,
+      890,  883,  206,  225,  206,  225,  202,  202,  202,  202,
+
+      202,  202,  204,  204,  204,  204,  204,  204,  206,  206,
+      206,  206,  206,  206,  216,  216,  216,  216,  226,  227,
+      247,  227,  228,  228,  229,  228,  229,  230,  230,  230,
+      226,  232,  226,  232,  233,  240,  233,  238,  238,  241,
+      270,  241,  270,  239,  241,  239,  282,  216,  239,  239,
+      239,  239,  239,  239,  271,  247,  271,  882,  240,  282,
+      238,  241,  246,  241,  246,  246,  246,  246,  241,  245,
+      245,  245,  245,  245,  245,  248,  248,  248,  248,  248,
+      248,  239,  249,  249,  249,  249,  249,  249,  283,  284,
+      288,  287,  248,  285,  289,  252,  287,  246,  295,  289,
+
+      297,  326,  245,  260,  274,  297,  283,  284,  248,  285,
+      288,  881,  326,  295,  248,  250,  250,  250,  250,  250,
+      250,  252,  257,  259,  259,  259,  259,  259,  259,  260,
+      274,  250,  251,  250,  251,  250,  250,  251,  251,  251,
+      251,  251,  251,  298,  292,  257,  880,  257,  250,  294,
+      290,  257,  298,  250,  293,  250,  259,  257,  250,  291,
+      250,  264,  264,  264,  264,  264,  264,  292,  296,  257,
+      290,  300,  293,  257,  291,  294,  299,  257,  301,  303,
+      291,  291,  304,  305,  296,  296,  307,  304,  309,  299,
+      308,  879,  305,  313,  264,  310,  301,  303,  300,  311,
+
+      310,  312,  314,  318,  311,  316,  307,  312,  308,  309,
+      309,  314,  313,  315,  317,  319,  322,  320,  318,  315,
+      319,  316,  320,  317,  321,  323,  324,  327,  328,  321,
+      329,  328,  330,  331,  332,  322,  333,  334,  335,  324,
+      336,  337,  327,  323,  338,  330,  321,  335,  340,  329,
+      339,  342,  344,  345,  334,  331,  333,  332,  343,  346,
+      349,  340,  336,  350,  337,  347,  338,  343,  339,  348,
+      342,  345,  346,  347,  348,  349,  875,  351,  351,  352,
+      413,  350,  351,  410,  351,  352,  359,  359,  359,  359,
+      360,  360,  360,  360,  410,  369,  344,  369,  370,  413,
+
+      370,  377,  377,  377,  377,  377,  377,  379,  389,  379,
+      417,  394,  379,  379,  379,  379,  379,  379,  389,  359,
+      378,  378,  378,  378,  378,  378,  381,  381,  381,  381,
+      381,  381,  417,  411,  389,  394,  378,  412,  378,  415,
+      378,  378,  384,  384,  384,  384,  384,  384,  392,  411,
+      415,  390,  412,  378,  392,  396,  578,  421,  378,  381,
+      378,  390,  420,  378,  578,  378,  382,  382,  382,  382,
+      382,  382,  391,  396,  424,  384,  414,  390,  420,  421,
+      392,  396,  382,  382,  382,  414,  382,  382,  385,  385,
+      385,  385,  385,  385,  428,  391,  424,  391,  871,  382,
+
+      428,  391,  868,  395,  382,  382,  382,  391,  393,  382,
+      393,  382,  419,  393,  393,  393,  393,  393,  393,  391,
+      416,  385,  418,  391,  422,  419,  395,  391,  395,  416,
+      425,  418,  395,  430,  426,  423,  429,  422,  395,  426,
+      427,  431,  434,  439,  430,  438,  393,  436,  425,  432,
+      395,  423,  423,  441,  395,  427,  434,  429,  395,  436,
+      431,  440,  427,  442,  432,  439,  438,  443,  444,  442,
+      446,  448,  449,  450,  440,  451,  441,  444,  452,  453,
+      454,  456,  443,  458,  461,  446,  459,  460,  450,  454,
+      462,  448,  463,  452,  449,  464,  460,  451,  456,  453,
+
+      465,  466,  467,  470,  468,  461,  458,  469,  459,  465,
+      462,  468,  463,  471,  469,  467,  472,  464,  473,  466,
+      474,  475,  477,  480,  478,  472,  473,  479,  470,  480,
+      479,  507,  475,  478,  508,  471,  473,  474,  489,  489,
+      489,  489,  528,  531,  477,  500,  500,  500,  500,  500,
+      500,  502,  502,  502,  502,  502,  502,  507,  531,  528,
+      508,  500,  529,  500,  533,  500,  500,  503,  503,  503,
+      503,  503,  503,  867,  866,  529,  504,  533,  500,  532,
+      542,  506,  534,  500,  502,  500,  504,  505,  500,  505,
+      500,  506,  505,  505,  505,  505,  505,  505,  536,  532,
+
+      503,  542,  504,  536,  534,  535,  537,  506,  510,  510,
+      510,  510,  510,  510,  512,  865,  512,  537,  535,  512,
+      512,  512,  512,  512,  512,  505,  511,  511,  511,  511,
+      511,  511,  538,  539,  540,  538,  541,  546,  544,  543,
+      545,  549,  511,  544,  511,  548,  511,  511,  543,  540,
+      546,  545,  551,  539,  548,  541,  550,  552,  555,  511,
+      557,  551,  552,  549,  511,  558,  511,  555,  554,  511,
+      559,  511,  560,  550,  554,  562,  563,  557,  564,  565,
+      558,  560,  567,  568,  562,  559,  570,  571,  568,  574,
+      564,  575,  576,  563,  565,  570,  571,  567,  579,  580,
+
+      581,  582,  589,  586,  575,  587,  580,  590,  579,  576,
+      583,  574,  586,  582,  592,  587,  583,  864,  863,  589,
+      590,  638,  581,  610,  610,  610,  610,  610,  610,  611,
+      611,  611,  611,  611,  611,  613,  592,  613,  638,  637,
+      613,  613,  613,  613,  613,  613,  616,  616,  616,  616,
+      616,  616,  637,  617,  617,  642,  610,  612,  612,  612,
+      612,  612,  612,  618,  634,  619,  862,  619,  639,  634,
+      619,  636,  642,  612,  635,  612,  617,  612,  612,  616,
+      636,  635,  634,  645,  646,  640,  618,  619,  641,  619,
+      612,  639,  640,  644,  619,  612,  641,  612,  643,  646,
+
+      612,  643,  612,  647,  648,  645,  644,  649,  650,  651,
+      652,  650,  653,  654,  655,  657,  656,  660,  667,  658,
+      661,  648,  662,  655,  666,  647,  651,  653,  658,  649,
+      669,  662,  672,  654,  656,  684,  673,  657,  652,  680,
+      660,  672,  661,  673,  666,  667,  681,  669,  680,  683,
+      684,  716,  719,  722,  723,  861,  681,  723,  683,  703,
+      703,  703,  703,  703,  703,  707,  707,  707,  707,  707,
+      707,  717,  716,  722,  856,  703,  720,  703,  719,  703,
+      703,  717,  721,  720,  727,  724,  729,  721,  724,  725,
+      727,  730,  703,  728,  730,  729,  731,  703,  707,  703,
+
+      733,  734,  703,  733,  703,  735,  728,  725,  736,  737,
+      734,  736,  738,  739,  740,  741,  742,  731,  748,  745,
+      738,  749,  737,  739,  750,  742,  752,  740,  773,  774,
+      753,  735,  771,  773,  752,  776,  741,  745,  748,  753,
+      772,  778,  745,  749,  774,  750,  760,  760,  760,  760,
+      760,  760,  771,  775,  777,  780,  779,  772,  776,  779,
+      781,  783,  785,  775,  783,  785,  786,  778,  780,  787,
+      789,  777,  787,  786,  788,  790,  792,  788,  796,  760,
+      811,  813,  814,  815,  816,  789,  815,  817,  781,  818,
+      817,  820,  818,  821,  822,  824,  855,  822,  790,  792,
+
+      814,  796,  813,  827,  828,  825,  816,  811,  825,  820,
+      826,  829,  827,  826,  830,  845,  846,  824,  847,  821,
+      828,  847,  829,  846,  848,  849,  850,  851,  854,  850,
+      830,  854,  857,  848,  884,  857,  845,  858,  859,  860,
+      870,  853,  869,  849,  851,  870,  858,  873,  860,  849,
+      859,  869,  872,  874,  884,  872,  876,  873,  874,  876,
+      877,  878,  885,  877,  878,  886,  887,  888,  886,  889,
+      888,  892,  889,  895,  896,  899,  887,  885,  900,  901,
+      903,  902,  904,  852,  899,  905,  844,  843,  842,  896,
+      841,  900,  840,  892,  895,  905,  839,  838,  903,  837,
+
+      836,  901,  902,  835,  904,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  910,  910,
+      910,  910,  910,  910,  910,  910,  910,  910,  910,  910,
+      910,  911,  911,  911,  911,  911,  911,  911,  911,  911,
+      911,  911,  911,  911,  912,  834,  833,  912,  832,  912,
+      912,  912,  912,  912,  913,  831,  823,  819,  913,  913,
+      913,  913,  913,  913,  914,  914,  914,  914,  914,  914,
+      914,  914,  914,  914,  914,  914,  914,  915,  812,  810,
+      915,  809,  915,  915,  915,  915,  915,  916,  808,  916,
+      916,  807,  916,  916,  916,  916,  916,  916,  806,  916,
+
+      917,  805,  804,  917,  917,  917,  917,  917,  917,  917,
+      917,  803,  917,  918,  918,  918,  918,  918,  918,  918,
+      918,  918,  918,  918,  918,  918,  919,  919,  802,  919,
+      801,  800,  799,  919,  920,  798,  797,  920,  795,  920,
+      920,  920,  920,  920,  921,  794,  921,  793,  791,  784,
+      921,  922,  782,  922,  770,  769,  768,  922,  923,  767,
+      923,  766,  765,  764,  923,  924,  763,  924,  762,  759,
+      758,  924,  925,  757,  925,  751,  747,  746,  925,  926,
+      744,  926,  743,  726,  718,  926,  927,  715,  927,  710,
+      708,  704,  927,  928,  694,  928,  690,  688,  686,  928,
+
+      929,  685,  929,  682,  679,  678,  929,  930,  677,  930,
+      931,  931,  676,  931,  931,  931,  675,  931,  932,  932,
+      674,  932,  933,  671,  670,  933,  668,  933,  933,  933,
+      933,  933,  934,  665,  934,  664,  663,  659,  934,  935,
+      632,  935,  628,  626,  624,  935,  936,  622,  936,  620,
+      614,  608,  936,  937,  606,  937,  938,  604,  938,  602,
+      600,  598,  938,  939,  596,  939,  940,  594,  593,  940,
+      591,  940,  940,  940,  940,  940,  941,  941,  941,  941,
+      941,  941,  941,  941,  941,  941,  941,  941,  941,  942,
+      942,  942,  942,  942,  942,  942,  942,  942,  942,  942,
+
+      942,  942,  943,  588,  943,  585,  584,  577,  943,  944,
+      573,  944,  572,  569,  566,  944,  945,  561,  945,  556,
+      553,  530,  945,  946,  526,  946,  947,  524,  947,  522,
+      520,  518,  947,  948,  516,  948,  949,  515,  949,  514,
+      513,  501,  949,  950,  498,  950,  951,  496,  951,  495,
+      494,  492,  951,  952,  490,  952,  953,  487,  953,  485,
+      483,  481,  953,  954,  476,  954,  955,  457,  955,  455,
+      447,  445,  955,  956,  437,  956,  957,  435,  957,  433,
+      407,  405,  957,  958,  403,  958,  959,  401,  959,  400,
+      959,  399,  959,  960,  386,  960,  383,  960,  374,  960,
+
+      961,  961,  372,  961,  961,  961,  371,  961,  962,  367,
+      962,  365,  363,  361,  962,  963,  357,  963,  355,  354,
+      353,  963,  964,  341,  964,  325,  302,  281,  964,  965,
+      279,  965,  966,  277,  966,  276,  275,  273,  966,  967,
+      272,  967,  968,  267,  968,  263,  262,  258,  968,  969,
+      255,  969,  970,  254,  970,  243,  242,  235,  970,  971,
+      234,  971,  972,  231,  221,  972,  219,  972,  972,  972,
+      972,  972,  973,  973,  973,  973,  973,  973,  973,  973,
+      973,  973,  973,  973,  973,  974,  218,  974,  217,  211,
+      210,  974,  975,  208,  975,  976,  203,  976,  179,  150,
+
+      148,  976,  977,  147,  977,  978,  141,  978,  139,  137,
+      129,  978,  979,  126,  979,  980,  125,  980,  121,  102,
+       99,  980,  981,   96,  981,  982,   94,  982,   87,   73,
+       71,  982,  983,   67,  983,  984,   36,  984,   33,   18,
+       11,  984,  985,    4,  985,  986,    3,  986,    0,    0,
+        0,  986,  987,    0,  987,    0,    0,    0,  987,  988,
+        0,  988,  989,    0,  989,    0,    0,    0,  989,  990,
+        0,  990,  991,    0,  991,    0,  991,    0,  991,  992,
+        0,  992,    0,    0,    0,  992,  993,    0,  993,    0,
+        0,    0,  993,  994,    0,  994,  995,    0,  995,    0,
+
+        0,    0,  995,  996,    0,  996,  997,    0,  997,    0,
+        0,    0,  997,  998,    0,  998,  999,    0,  999,    0,
+        0,    0,  999, 1000,    0, 1000, 1001,    0, 1001,    0,
+        0,    0, 1001, 1002,    0, 1002, 1003,    0, 1003,    0,
+        0,    0, 1003, 1004,    0, 1004, 1005,    0,    0, 1005,
+        0, 1005, 1005, 1005, 1005, 1005, 1006, 1006, 1006, 1006,
+     1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1006, 1007,
+        0, 1007,    0,    0,    0, 1007, 1008,    0, 1008, 1009,
+        0, 1009,    0,    0,    0, 1009, 1010,    0, 1010, 1011,
+        0, 1011,    0,    0,    0, 1011, 1012,    0, 1012, 1013,
+
+        0, 1013,    0,    0,    0, 1013, 1014,    0, 1014, 1015,
+        0, 1015,    0,    0,    0, 1015, 1016,    0, 1016, 1017,
+        0, 1017,    0,    0,    0, 1017, 1018,    0, 1018, 1019,
+        0, 1019,    0,    0,    0, 1019, 1020,    0, 1020, 1021,
+        0, 1021,    0,    0,    0, 1021, 1022,    0, 1022, 1023,
+        0, 1023,    0,    0,    0, 1023, 1024,    0, 1024,    0,
+        0,    0, 1024, 1025,    0, 1025, 1026,    0, 1026,    0,
+        0,    0, 1026, 1027,    0, 1027, 1028,    0, 1028,    0,
+        0,    0, 1028, 1029,    0, 1029, 1030,    0, 1030,    0,
+        0,    0, 1030, 1031,    0, 1031, 1032,    0, 1032, 1033,
+
+        0, 1033, 1034,    0,    0, 1034,    0, 1034, 1034, 1034,
+     1034, 1034, 1035,    0, 1035, 1036, 1036, 1036, 1036, 1036,
+     1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1037,    0,
+     1037,    0,    0,    0, 1037, 1038,    0, 1038, 1039,    0,
+     1039,    0,    0,    0, 1039, 1040,    0, 1040, 1041,    0,
+     1041, 1042,    0, 1042, 1043,    0,    0, 1043,    0, 1043,
+     1043, 1043, 1043, 1043, 1044,    0, 1044, 1045,    0, 1045,
+     1046,    0, 1046, 1047,    0, 1047, 1048,    0, 1048, 1049,
+        0, 1049, 1050,    0, 1050, 1051,    0, 1051,    0,    0,
+        0, 1051, 1052,    0, 1052, 1053,    0, 1053,    0,    0,
+
+        0, 1053, 1054,    0, 1054, 1055,    0, 1055, 1056,    0,
+     1056, 1057,    0, 1057, 1058,    0, 1058,    0,    0,    0,
+     1058, 1059,    0,    0, 1059,    0, 1059, 1059, 1059, 1059,
+     1059, 1060,    0, 1060, 1061,    0, 1061, 1062,    0, 1062,
+     1063,    0, 1063,    0,    0,    0, 1063, 1064,    0, 1064,
+        0,    0,    0, 1064, 1065,    0, 1065,    0,    0,    0,
+     1065, 1066,    0, 1066, 1067,    0, 1067,    0,    0,    0,
+     1067, 1068,    0, 1068,    0,    0,    0, 1068, 1069,    0,
+     1069,    0,    0,    0, 1069, 1070,    0, 1070,    0,    0,
+        0, 1070, 1071,    0, 1071,    0,    0,    0, 1071, 1072,
+
+        0, 1072,    0,    0,    0, 1072, 1073,    0, 1073,    0,
+        0,    0, 1073, 1074,    0, 1074,    0,    0,    0, 1074,
+     1075,    0, 1075,    0,    0,    0, 1075, 1076,    0, 1076,
+        0,    0,    0, 1076, 1077,    0, 1077,    0,    0,    0,
+     1077, 1078,    0, 1078,    0,    0,    0, 1078, 1079,    0,
+     1079,    0,    0,    0, 1079, 1080,    0, 1080,    0,    0,
+        0, 1080, 1081,    0, 1081,    0,    0,    0, 1081, 1082,
+        0, 1082,    0,    0,    0, 1082,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908,  908,  908,  908,  908,  908,  908,  908,  908,
+      908,  908
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[186] =
+static yyconst flex_int32_t yy_rule_can_match_eol[187] =
     {   0,
 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -1451,8 +1455,8 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
-    0, 0, 0, 0, 0, 0,     };
+    0, 0, 0, 0, 0, 0, 0,     };
 
 static yy_state_type yy_last_accepting_state;
@@ -1476,7 +1480,7 @@
  * The contents of this file are covered under the licence agreement in the
  * file "LICENCE" distributed with Cforall.
- * 
- * lex.l -- 
- * 
+ *
+ * lex.l --
+ *
  * Author           : Peter A. Buhr
  * Created On       : Sat Sep 22 08:58:10 2001
@@ -1544,5 +1548,5 @@
 
 
-#line 1547 "Parser/lex.cc"
+#line 1551 "Parser/lex.cc"
 
 #define INITIAL 0
@@ -1739,5 +1743,5 @@
 
 				   /* line directives */
-#line 1742 "Parser/lex.cc"
+#line 1746 "Parser/lex.cc"
 
 	if ( !(yy_init) )
@@ -1793,5 +1797,5 @@
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 905 )
+				if ( yy_current_state >= 909 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
@@ -1799,5 +1803,5 @@
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 2866 );
+		while ( yy_base[yy_current_state] != 2877 );
 
 yy_find_action:
@@ -2320,10 +2324,10 @@
 YY_RULE_SETUP
 #line 260 "lex.ll"
+{ KEYWORD_RETURN(TTYPE); }				// CFA
+	YY_BREAK
+case 93:
+YY_RULE_SETUP
+#line 261 "lex.ll"
 { KEYWORD_RETURN(TYPEDEF); }
-	YY_BREAK
-case 93:
-YY_RULE_SETUP
-#line 261 "lex.ll"
-{ KEYWORD_RETURN(TYPEOF); }				// GCC
 	YY_BREAK
 case 94:
@@ -2340,30 +2344,30 @@
 YY_RULE_SETUP
 #line 264 "lex.ll"
+{ KEYWORD_RETURN(TYPEOF); }				// GCC
+	YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 265 "lex.ll"
 { KEYWORD_RETURN(UNION); }
 	YY_BREAK
-case 97:
-YY_RULE_SETUP
-#line 265 "lex.ll"
+case 98:
+YY_RULE_SETUP
+#line 266 "lex.ll"
 { KEYWORD_RETURN(UNSIGNED); }
 	YY_BREAK
-case 98:
-YY_RULE_SETUP
-#line 266 "lex.ll"
+case 99:
+YY_RULE_SETUP
+#line 267 "lex.ll"
 { KEYWORD_RETURN(VALIST); }			// GCC
 	YY_BREAK
-case 99:
-YY_RULE_SETUP
-#line 267 "lex.ll"
+case 100:
+YY_RULE_SETUP
+#line 268 "lex.ll"
 { KEYWORD_RETURN(VOID); }
 	YY_BREAK
-case 100:
-YY_RULE_SETUP
-#line 268 "lex.ll"
+case 101:
+YY_RULE_SETUP
+#line 269 "lex.ll"
 { KEYWORD_RETURN(VOLATILE); }
-	YY_BREAK
-case 101:
-YY_RULE_SETUP
-#line 269 "lex.ll"
-{ KEYWORD_RETURN(VOLATILE); }			// GCC
 	YY_BREAK
 case 102:
@@ -2375,52 +2379,52 @@
 YY_RULE_SETUP
 #line 271 "lex.ll"
+{ KEYWORD_RETURN(VOLATILE); }			// GCC
+	YY_BREAK
+case 104:
+YY_RULE_SETUP
+#line 272 "lex.ll"
 { KEYWORD_RETURN(WHILE); }
 	YY_BREAK
-case 104:
-YY_RULE_SETUP
-#line 272 "lex.ll"
+case 105:
+YY_RULE_SETUP
+#line 273 "lex.ll"
 { NUMERIC_RETURN(ZERO_T); }				// CFA
 	YY_BREAK
 /* identifier */
-case 105:
-YY_RULE_SETUP
-#line 275 "lex.ll"
+case 106:
+YY_RULE_SETUP
+#line 276 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 106:
-YY_RULE_SETUP
-#line 276 "lex.ll"
+case 107:
+YY_RULE_SETUP
+#line 277 "lex.ll"
 { ATTRIBUTE_RETURN(); }
 	YY_BREAK
-case 107:
-YY_RULE_SETUP
-#line 277 "lex.ll"
+case 108:
+YY_RULE_SETUP
+#line 278 "lex.ll"
 { BEGIN BKQUOTE; }
 	YY_BREAK
-case 108:
-YY_RULE_SETUP
-#line 278 "lex.ll"
+case 109:
+YY_RULE_SETUP
+#line 279 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 109:
-YY_RULE_SETUP
-#line 279 "lex.ll"
+case 110:
+YY_RULE_SETUP
+#line 280 "lex.ll"
 { BEGIN 0; }
 	YY_BREAK
 /* numeric constants */
-case 110:
-YY_RULE_SETUP
-#line 282 "lex.ll"
+case 111:
+YY_RULE_SETUP
+#line 283 "lex.ll"
 { NUMERIC_RETURN(ZERO); }				// CFA
 	YY_BREAK
-case 111:
-YY_RULE_SETUP
-#line 283 "lex.ll"
+case 112:
+YY_RULE_SETUP
+#line 284 "lex.ll"
 { NUMERIC_RETURN(ONE); }				// CFA
-	YY_BREAK
-case 112:
-YY_RULE_SETUP
-#line 284 "lex.ll"
-{ NUMERIC_RETURN(INTEGERconstant); }
 	YY_BREAK
 case 113:
@@ -2437,15 +2441,15 @@
 YY_RULE_SETUP
 #line 287 "lex.ll"
+{ NUMERIC_RETURN(INTEGERconstant); }
+	YY_BREAK
+case 116:
+YY_RULE_SETUP
+#line 288 "lex.ll"
 { NUMERIC_RETURN(REALDECIMALconstant); } // must appear before floating_constant
 	YY_BREAK
-case 116:
-YY_RULE_SETUP
-#line 288 "lex.ll"
+case 117:
+YY_RULE_SETUP
+#line 289 "lex.ll"
 { NUMERIC_RETURN(REALFRACTIONconstant); } // must appear before floating_constant
-	YY_BREAK
-case 117:
-YY_RULE_SETUP
-#line 289 "lex.ll"
-{ NUMERIC_RETURN(FLOATINGconstant); }
 	YY_BREAK
 case 118:
@@ -2454,63 +2458,63 @@
 { NUMERIC_RETURN(FLOATINGconstant); }
 	YY_BREAK
+case 119:
+YY_RULE_SETUP
+#line 291 "lex.ll"
+{ NUMERIC_RETURN(FLOATINGconstant); }
+	YY_BREAK
 /* character constant, allows empty value */
-case 119:
-YY_RULE_SETUP
-#line 293 "lex.ll"
+case 120:
+YY_RULE_SETUP
+#line 294 "lex.ll"
 { BEGIN QUOTE; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
 	YY_BREAK
-case 120:
-YY_RULE_SETUP
-#line 294 "lex.ll"
+case 121:
+YY_RULE_SETUP
+#line 295 "lex.ll"
 { strtext->append( yytext, yyleng ); }
 	YY_BREAK
-case 121:
-/* rule 121 can match eol */
-YY_RULE_SETUP
-#line 295 "lex.ll"
+case 122:
+/* rule 122 can match eol */
+YY_RULE_SETUP
+#line 296 "lex.ll"
 { BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(CHARACTERconstant); }
 	YY_BREAK
 /* ' stop highlighting */
 /* string constant */
-case 122:
-YY_RULE_SETUP
-#line 299 "lex.ll"
+case 123:
+YY_RULE_SETUP
+#line 300 "lex.ll"
 { BEGIN STRING; rm_underscore(); strtext = new std::string( yytext, yyleng ); }
 	YY_BREAK
-case 123:
-YY_RULE_SETUP
-#line 300 "lex.ll"
+case 124:
+YY_RULE_SETUP
+#line 301 "lex.ll"
 { strtext->append( yytext, yyleng ); }
 	YY_BREAK
-case 124:
-/* rule 124 can match eol */
-YY_RULE_SETUP
-#line 301 "lex.ll"
+case 125:
+/* rule 125 can match eol */
+YY_RULE_SETUP
+#line 302 "lex.ll"
 { BEGIN 0; strtext->append( yytext, yyleng ); RETURN_STR(STRINGliteral); }
 	YY_BREAK
 /* " stop highlighting */
 /* common character/string constant */
-case 125:
-YY_RULE_SETUP
-#line 305 "lex.ll"
+case 126:
+YY_RULE_SETUP
+#line 306 "lex.ll"
 { rm_underscore(); strtext->append( yytext, yyleng ); }
 	YY_BREAK
-case 126:
-/* rule 126 can match eol */
-YY_RULE_SETUP
-#line 306 "lex.ll"
+case 127:
+/* rule 127 can match eol */
+YY_RULE_SETUP
+#line 307 "lex.ll"
 {}						// continuation (ALSO HANDLED BY CPP)
 	YY_BREAK
-case 127:
-YY_RULE_SETUP
-#line 307 "lex.ll"
+case 128:
+YY_RULE_SETUP
+#line 308 "lex.ll"
 { strtext->append( yytext, yyleng ); } // unknown escape character
 	YY_BREAK
 /* punctuation */
-case 128:
-YY_RULE_SETUP
-#line 310 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
 case 129:
 YY_RULE_SETUP
@@ -2541,10 +2545,10 @@
 YY_RULE_SETUP
 #line 316 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 135:
+YY_RULE_SETUP
+#line 317 "lex.ll"
 { ASCIIOP_RETURN(); }					// also operator
-	YY_BREAK
-case 135:
-YY_RULE_SETUP
-#line 317 "lex.ll"
-{ ASCIIOP_RETURN(); }
 	YY_BREAK
 case 136:
@@ -2556,38 +2560,38 @@
 YY_RULE_SETUP
 #line 319 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 138:
+YY_RULE_SETUP
+#line 320 "lex.ll"
 { ASCIIOP_RETURN(); }					// also operator
 	YY_BREAK
-case 138:
-YY_RULE_SETUP
-#line 320 "lex.ll"
+case 139:
+YY_RULE_SETUP
+#line 321 "lex.ll"
 { NAMEDOP_RETURN(ELLIPSIS); }
 	YY_BREAK
 /* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
-case 139:
-YY_RULE_SETUP
-#line 323 "lex.ll"
+case 140:
+YY_RULE_SETUP
+#line 324 "lex.ll"
 { RETURN_VAL('['); }
 	YY_BREAK
-case 140:
-YY_RULE_SETUP
-#line 324 "lex.ll"
+case 141:
+YY_RULE_SETUP
+#line 325 "lex.ll"
 { RETURN_VAL(']'); }
 	YY_BREAK
-case 141:
-YY_RULE_SETUP
-#line 325 "lex.ll"
+case 142:
+YY_RULE_SETUP
+#line 326 "lex.ll"
 { RETURN_VAL('{'); }
 	YY_BREAK
-case 142:
-YY_RULE_SETUP
-#line 326 "lex.ll"
+case 143:
+YY_RULE_SETUP
+#line 327 "lex.ll"
 { RETURN_VAL('}'); }
 	YY_BREAK
 /* operators */
-case 143:
-YY_RULE_SETUP
-#line 329 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
 case 144:
 YY_RULE_SETUP
@@ -2657,122 +2661,122 @@
 case 157:
 YY_RULE_SETUP
-#line 344 "lex.ll"
+#line 343 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 158:
+YY_RULE_SETUP
+#line 345 "lex.ll"
 { NAMEDOP_RETURN(ICR); }
 	YY_BREAK
-case 158:
-YY_RULE_SETUP
-#line 345 "lex.ll"
+case 159:
+YY_RULE_SETUP
+#line 346 "lex.ll"
 { NAMEDOP_RETURN(DECR); }
 	YY_BREAK
-case 159:
-YY_RULE_SETUP
-#line 346 "lex.ll"
+case 160:
+YY_RULE_SETUP
+#line 347 "lex.ll"
 { NAMEDOP_RETURN(EQ); }
 	YY_BREAK
-case 160:
-YY_RULE_SETUP
-#line 347 "lex.ll"
+case 161:
+YY_RULE_SETUP
+#line 348 "lex.ll"
 { NAMEDOP_RETURN(NE); }
 	YY_BREAK
-case 161:
-YY_RULE_SETUP
-#line 348 "lex.ll"
+case 162:
+YY_RULE_SETUP
+#line 349 "lex.ll"
 { NAMEDOP_RETURN(LS); }
 	YY_BREAK
-case 162:
-YY_RULE_SETUP
-#line 349 "lex.ll"
+case 163:
+YY_RULE_SETUP
+#line 350 "lex.ll"
 { NAMEDOP_RETURN(RS); }
 	YY_BREAK
-case 163:
-YY_RULE_SETUP
-#line 350 "lex.ll"
+case 164:
+YY_RULE_SETUP
+#line 351 "lex.ll"
 { NAMEDOP_RETURN(LE); }
 	YY_BREAK
-case 164:
-YY_RULE_SETUP
-#line 351 "lex.ll"
+case 165:
+YY_RULE_SETUP
+#line 352 "lex.ll"
 { NAMEDOP_RETURN(GE); }
 	YY_BREAK
-case 165:
-YY_RULE_SETUP
-#line 352 "lex.ll"
+case 166:
+YY_RULE_SETUP
+#line 353 "lex.ll"
 { NAMEDOP_RETURN(ANDAND); }
 	YY_BREAK
-case 166:
-YY_RULE_SETUP
-#line 353 "lex.ll"
+case 167:
+YY_RULE_SETUP
+#line 354 "lex.ll"
 { NAMEDOP_RETURN(OROR); }
 	YY_BREAK
-case 167:
-YY_RULE_SETUP
-#line 354 "lex.ll"
+case 168:
+YY_RULE_SETUP
+#line 355 "lex.ll"
 { NAMEDOP_RETURN(ARROW); }
 	YY_BREAK
-case 168:
-YY_RULE_SETUP
-#line 355 "lex.ll"
+case 169:
+YY_RULE_SETUP
+#line 356 "lex.ll"
 { NAMEDOP_RETURN(PLUSassign); }
 	YY_BREAK
-case 169:
-YY_RULE_SETUP
-#line 356 "lex.ll"
+case 170:
+YY_RULE_SETUP
+#line 357 "lex.ll"
 { NAMEDOP_RETURN(MINUSassign); }
 	YY_BREAK
-case 170:
-YY_RULE_SETUP
-#line 357 "lex.ll"
+case 171:
+YY_RULE_SETUP
+#line 358 "lex.ll"
 { NAMEDOP_RETURN(MULTassign); }
 	YY_BREAK
-case 171:
-YY_RULE_SETUP
-#line 358 "lex.ll"
+case 172:
+YY_RULE_SETUP
+#line 359 "lex.ll"
 { NAMEDOP_RETURN(DIVassign); }
 	YY_BREAK
-case 172:
-YY_RULE_SETUP
-#line 359 "lex.ll"
+case 173:
+YY_RULE_SETUP
+#line 360 "lex.ll"
 { NAMEDOP_RETURN(MODassign); }
 	YY_BREAK
-case 173:
-YY_RULE_SETUP
-#line 360 "lex.ll"
+case 174:
+YY_RULE_SETUP
+#line 361 "lex.ll"
 { NAMEDOP_RETURN(ANDassign); }
 	YY_BREAK
-case 174:
-YY_RULE_SETUP
-#line 361 "lex.ll"
+case 175:
+YY_RULE_SETUP
+#line 362 "lex.ll"
 { NAMEDOP_RETURN(ORassign); }
 	YY_BREAK
-case 175:
-YY_RULE_SETUP
-#line 362 "lex.ll"
+case 176:
+YY_RULE_SETUP
+#line 363 "lex.ll"
 { NAMEDOP_RETURN(ERassign); }
 	YY_BREAK
-case 176:
-YY_RULE_SETUP
-#line 363 "lex.ll"
+case 177:
+YY_RULE_SETUP
+#line 364 "lex.ll"
 { NAMEDOP_RETURN(LSassign); }
 	YY_BREAK
-case 177:
-YY_RULE_SETUP
-#line 364 "lex.ll"
+case 178:
+YY_RULE_SETUP
+#line 365 "lex.ll"
 { NAMEDOP_RETURN(RSassign); }
 	YY_BREAK
-case 178:
-YY_RULE_SETUP
-#line 366 "lex.ll"
+case 179:
+YY_RULE_SETUP
+#line 367 "lex.ll"
 { NAMEDOP_RETURN(ATassign); }			// CFA
 	YY_BREAK
 /* CFA, operator identifier */
-case 179:
-YY_RULE_SETUP
-#line 369 "lex.ll"
+case 180:
+YY_RULE_SETUP
+#line 370 "lex.ll"
 { IDENTIFIER_RETURN(); }				// unary
-	YY_BREAK
-case 180:
-YY_RULE_SETUP
-#line 370 "lex.ll"
-{ IDENTIFIER_RETURN(); }
 	YY_BREAK
 case 181:
@@ -2784,4 +2788,9 @@
 YY_RULE_SETUP
 #line 372 "lex.ll"
+{ IDENTIFIER_RETURN(); }
+	YY_BREAK
+case 183:
+YY_RULE_SETUP
+#line 373 "lex.ll"
 { IDENTIFIER_RETURN(); }		// binary
 	YY_BREAK
@@ -2812,7 +2821,7 @@
 	  an argument list.
 	*/
-case 183:
-YY_RULE_SETUP
-#line 399 "lex.ll"
+case 184:
+YY_RULE_SETUP
+#line 400 "lex.ll"
 {
 	// 1 or 2 character unary operator ?
@@ -2827,15 +2836,15 @@
 	YY_BREAK
 /* unknown characters */
-case 184:
-YY_RULE_SETUP
-#line 411 "lex.ll"
+case 185:
+YY_RULE_SETUP
+#line 412 "lex.ll"
 { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
 	YY_BREAK
-case 185:
-YY_RULE_SETUP
-#line 413 "lex.ll"
+case 186:
+YY_RULE_SETUP
+#line 414 "lex.ll"
 ECHO;
 	YY_BREAK
-#line 2840 "Parser/lex.cc"
+#line 2849 "Parser/lex.cc"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(COMMENT):
@@ -3134,5 +3143,5 @@
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 905 )
+			if ( yy_current_state >= 909 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
@@ -3162,9 +3171,9 @@
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 905 )
+		if ( yy_current_state >= 909 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 904);
+	yy_is_jam = (yy_current_state == 908);
 
 	return yy_is_jam ? 0 : yy_current_state;
@@ -3812,5 +3821,5 @@
 #define YYTABLES_NAME "yytables"
 
-#line 413 "lex.ll"
+#line 414 "lex.ll"
 
 
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/Parser/lex.ll	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -4,7 +4,7 @@
  * The contents of this file are covered under the licence agreement in the
  * file "LICENCE" distributed with Cforall.
- * 
- * lex.l -- 
- * 
+ *
+ * lex.l --
+ *
  * Author           : Peter A. Buhr
  * Created On       : Sat Sep 22 08:58:10 2001
@@ -258,4 +258,5 @@
 trait			{ KEYWORD_RETURN(TRAIT); }				// CFA
 try				{ KEYWORD_RETURN(TRY); }				// CFA
+ttype			{ KEYWORD_RETURN(TTYPE); }				// CFA
 typedef			{ KEYWORD_RETURN(TYPEDEF); }
 typeof			{ KEYWORD_RETURN(TYPEOF); }				// GCC
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/Parser/parser.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -159,79 +159,80 @@
      FTYPE = 291,
      DTYPE = 292,
-     TRAIT = 293,
-     SIZEOF = 294,
-     OFFSETOF = 295,
-     ATTRIBUTE = 296,
-     EXTENSION = 297,
-     IF = 298,
-     ELSE = 299,
-     SWITCH = 300,
-     CASE = 301,
-     DEFAULT = 302,
-     DO = 303,
-     WHILE = 304,
-     FOR = 305,
-     BREAK = 306,
-     CONTINUE = 307,
-     GOTO = 308,
-     RETURN = 309,
-     CHOOSE = 310,
-     DISABLE = 311,
-     ENABLE = 312,
-     FALLTHRU = 313,
-     TRY = 314,
-     CATCH = 315,
-     CATCHRESUME = 316,
-     FINALLY = 317,
-     THROW = 318,
-     THROWRESUME = 319,
-     AT = 320,
-     ASM = 321,
-     ALIGNAS = 322,
-     ALIGNOF = 323,
-     ATOMIC = 324,
-     GENERIC = 325,
-     NORETURN = 326,
-     STATICASSERT = 327,
-     THREADLOCAL = 328,
-     IDENTIFIER = 329,
-     QUOTED_IDENTIFIER = 330,
-     TYPEDEFname = 331,
-     TYPEGENname = 332,
-     ATTR_IDENTIFIER = 333,
-     ATTR_TYPEDEFname = 334,
-     ATTR_TYPEGENname = 335,
-     INTEGERconstant = 336,
-     CHARACTERconstant = 337,
-     STRINGliteral = 338,
-     REALDECIMALconstant = 339,
-     REALFRACTIONconstant = 340,
-     FLOATINGconstant = 341,
-     ZERO = 342,
-     ONE = 343,
-     ARROW = 344,
-     ICR = 345,
-     DECR = 346,
-     LS = 347,
-     RS = 348,
-     LE = 349,
-     GE = 350,
-     EQ = 351,
-     NE = 352,
-     ANDAND = 353,
-     OROR = 354,
-     ELLIPSIS = 355,
-     MULTassign = 356,
-     DIVassign = 357,
-     MODassign = 358,
-     PLUSassign = 359,
-     MINUSassign = 360,
-     LSassign = 361,
-     RSassign = 362,
-     ANDassign = 363,
-     ERassign = 364,
-     ORassign = 365,
-     ATassign = 366,
-     THEN = 367
+     TTYPE = 293,
+     TRAIT = 294,
+     SIZEOF = 295,
+     OFFSETOF = 296,
+     ATTRIBUTE = 297,
+     EXTENSION = 298,
+     IF = 299,
+     ELSE = 300,
+     SWITCH = 301,
+     CASE = 302,
+     DEFAULT = 303,
+     DO = 304,
+     WHILE = 305,
+     FOR = 306,
+     BREAK = 307,
+     CONTINUE = 308,
+     GOTO = 309,
+     RETURN = 310,
+     CHOOSE = 311,
+     DISABLE = 312,
+     ENABLE = 313,
+     FALLTHRU = 314,
+     TRY = 315,
+     CATCH = 316,
+     CATCHRESUME = 317,
+     FINALLY = 318,
+     THROW = 319,
+     THROWRESUME = 320,
+     AT = 321,
+     ASM = 322,
+     ALIGNAS = 323,
+     ALIGNOF = 324,
+     ATOMIC = 325,
+     GENERIC = 326,
+     NORETURN = 327,
+     STATICASSERT = 328,
+     THREADLOCAL = 329,
+     IDENTIFIER = 330,
+     QUOTED_IDENTIFIER = 331,
+     TYPEDEFname = 332,
+     TYPEGENname = 333,
+     ATTR_IDENTIFIER = 334,
+     ATTR_TYPEDEFname = 335,
+     ATTR_TYPEGENname = 336,
+     INTEGERconstant = 337,
+     CHARACTERconstant = 338,
+     STRINGliteral = 339,
+     REALDECIMALconstant = 340,
+     REALFRACTIONconstant = 341,
+     FLOATINGconstant = 342,
+     ZERO = 343,
+     ONE = 344,
+     ARROW = 345,
+     ICR = 346,
+     DECR = 347,
+     LS = 348,
+     RS = 349,
+     LE = 350,
+     GE = 351,
+     EQ = 352,
+     NE = 353,
+     ANDAND = 354,
+     OROR = 355,
+     ELLIPSIS = 356,
+     MULTassign = 357,
+     DIVassign = 358,
+     MODassign = 359,
+     PLUSassign = 360,
+     MINUSassign = 361,
+     LSassign = 362,
+     RSassign = 363,
+     ANDassign = 364,
+     ERassign = 365,
+     ORassign = 366,
+     ATassign = 367,
+     THEN = 368
    };
 #endif
@@ -272,79 +273,80 @@
 #define FTYPE 291
 #define DTYPE 292
-#define TRAIT 293
-#define SIZEOF 294
-#define OFFSETOF 295
-#define ATTRIBUTE 296
-#define EXTENSION 297
-#define IF 298
-#define ELSE 299
-#define SWITCH 300
-#define CASE 301
-#define DEFAULT 302
-#define DO 303
-#define WHILE 304
-#define FOR 305
-#define BREAK 306
-#define CONTINUE 307
-#define GOTO 308
-#define RETURN 309
-#define CHOOSE 310
-#define DISABLE 311
-#define ENABLE 312
-#define FALLTHRU 313
-#define TRY 314
-#define CATCH 315
-#define CATCHRESUME 316
-#define FINALLY 317
-#define THROW 318
-#define THROWRESUME 319
-#define AT 320
-#define ASM 321
-#define ALIGNAS 322
-#define ALIGNOF 323
-#define ATOMIC 324
-#define GENERIC 325
-#define NORETURN 326
-#define STATICASSERT 327
-#define THREADLOCAL 328
-#define IDENTIFIER 329
-#define QUOTED_IDENTIFIER 330
-#define TYPEDEFname 331
-#define TYPEGENname 332
-#define ATTR_IDENTIFIER 333
-#define ATTR_TYPEDEFname 334
-#define ATTR_TYPEGENname 335
-#define INTEGERconstant 336
-#define CHARACTERconstant 337
-#define STRINGliteral 338
-#define REALDECIMALconstant 339
-#define REALFRACTIONconstant 340
-#define FLOATINGconstant 341
-#define ZERO 342
-#define ONE 343
-#define ARROW 344
-#define ICR 345
-#define DECR 346
-#define LS 347
-#define RS 348
-#define LE 349
-#define GE 350
-#define EQ 351
-#define NE 352
-#define ANDAND 353
-#define OROR 354
-#define ELLIPSIS 355
-#define MULTassign 356
-#define DIVassign 357
-#define MODassign 358
-#define PLUSassign 359
-#define MINUSassign 360
-#define LSassign 361
-#define RSassign 362
-#define ANDassign 363
-#define ERassign 364
-#define ORassign 365
-#define ATassign 366
-#define THEN 367
+#define TTYPE 293
+#define TRAIT 294
+#define SIZEOF 295
+#define OFFSETOF 296
+#define ATTRIBUTE 297
+#define EXTENSION 298
+#define IF 299
+#define ELSE 300
+#define SWITCH 301
+#define CASE 302
+#define DEFAULT 303
+#define DO 304
+#define WHILE 305
+#define FOR 306
+#define BREAK 307
+#define CONTINUE 308
+#define GOTO 309
+#define RETURN 310
+#define CHOOSE 311
+#define DISABLE 312
+#define ENABLE 313
+#define FALLTHRU 314
+#define TRY 315
+#define CATCH 316
+#define CATCHRESUME 317
+#define FINALLY 318
+#define THROW 319
+#define THROWRESUME 320
+#define AT 321
+#define ASM 322
+#define ALIGNAS 323
+#define ALIGNOF 324
+#define ATOMIC 325
+#define GENERIC 326
+#define NORETURN 327
+#define STATICASSERT 328
+#define THREADLOCAL 329
+#define IDENTIFIER 330
+#define QUOTED_IDENTIFIER 331
+#define TYPEDEFname 332
+#define TYPEGENname 333
+#define ATTR_IDENTIFIER 334
+#define ATTR_TYPEDEFname 335
+#define ATTR_TYPEGENname 336
+#define INTEGERconstant 337
+#define CHARACTERconstant 338
+#define STRINGliteral 339
+#define REALDECIMALconstant 340
+#define REALFRACTIONconstant 341
+#define FLOATINGconstant 342
+#define ZERO 343
+#define ONE 344
+#define ARROW 345
+#define ICR 346
+#define DECR 347
+#define LS 348
+#define RS 349
+#define LE 350
+#define GE 351
+#define EQ 352
+#define NE 353
+#define ANDAND 354
+#define OROR 355
+#define ELLIPSIS 356
+#define MULTassign 357
+#define DIVassign 358
+#define MODassign 359
+#define PLUSassign 360
+#define MINUSassign 361
+#define LSassign 362
+#define RSassign 363
+#define ANDassign 364
+#define ERassign 365
+#define ORassign 366
+#define ATassign 367
+#define THEN 368
 
 
@@ -376,5 +378,5 @@
 
 /* Line 293 of yacc.c  */
-#line 379 "Parser/parser.cc"
+#line 381 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -388,5 +390,5 @@
 
 /* Line 343 of yacc.c  */
-#line 391 "Parser/parser.cc"
+#line 393 "Parser/parser.cc"
 
 #ifdef short
@@ -607,18 +609,18 @@
 #define YYFINAL  251
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   10624
+#define YYLAST   10466
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  137
+#define YYNTOKENS  138
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  243
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  757
+#define YYNRULES  758
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1540
+#define YYNSTATES  1541
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   367
+#define YYMAXUTOK   368
 
 #define YYTRANSLATE(YYX)						\
@@ -631,14 +633,14 @@
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   125,     2,     2,     2,   128,   122,     2,
-     113,   114,   121,   123,   120,   124,   117,   127,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   134,   136,
-     129,   135,   130,   133,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   126,     2,     2,     2,   129,   123,     2,
+     114,   115,   122,   124,   121,   125,   118,   128,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   135,   137,
+     130,   136,   131,   134,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   115,     2,   116,   131,     2,     2,     2,     2,     2,
+       2,   116,     2,   117,   132,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   118,   132,   119,   126,     2,     2,     2,
+       2,     2,     2,   119,   133,   120,   127,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -664,5 +666,5 @@
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112
+     105,   106,   107,   108,   109,   110,   111,   112,   113
 };
 
@@ -721,31 +723,31 @@
     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,  1687,  1690,  1696,  1702,
-    1716,  1718,  1720,  1724,  1728,  1731,  1735,  1739,  1742,  1747,
-    1749,  1756,  1766,  1767,  1779,  1781,  1785,  1789,  1793,  1795,
-    1797,  1803,  1806,  1812,  1813,  1815,  1817,  1821,  1822,  1824,
-    1826,  1828,  1830,  1831,  1838,  1841,  1843,  1846,  1851,  1854,
-    1858,  1862,  1866,  1871,  1877,  1883,  1889,  1896,  1898,  1900,
-    1902,  1906,  1907,  1913,  1914,  1916,  1918,  1921,  1928,  1930,
-    1934,  1935,  1937,  1942,  1944,  1946,  1948,  1950,  1953,  1955,
-    1958,  1961,  1963,  1967,  1970,  1974,  1978,  1981,  1986,  1991,
-    1995,  2004,  2008,  2011,  2013,  2016,  2023,  2032,  2036,  2039,
-    2043,  2047,  2052,  2057,  2061,  2063,  2065,  2067,  2072,  2079,
-    2083,  2086,  2090,  2094,  2099,  2104,  2108,  2111,  2113,  2116,
-    2119,  2121,  2125,  2128,  2132,  2136,  2139,  2144,  2149,  2153,
-    2160,  2169,  2173,  2176,  2178,  2181,  2184,  2187,  2191,  2195,
-    2198,  2203,  2208,  2212,  2219,  2228,  2232,  2235,  2237,  2240,
-    2243,  2245,  2247,  2250,  2254,  2258,  2261,  2266,  2273,  2282,
-    2284,  2287,  2290,  2292,  2295,  2298,  2302,  2306,  2308,  2313,
-    2318,  2322,  2328,  2337,  2341,  2344,  2348,  2350,  2356,  2362,
-    2369,  2376,  2378,  2381,  2384,  2386,  2389,  2392,  2396,  2400,
-    2402,  2407,  2412,  2416,  2422,  2431,  2435,  2437,  2440,  2442,
-    2445,  2452,  2458,  2465,  2473,  2481,  2483,  2486,  2489,  2491,
-    2494,  2497,  2501,  2505,  2507,  2512,  2517,  2521,  2530,  2534,
-    2536,  2538,  2541,  2543,  2545,  2548,  2552,  2555,  2559,  2562,
-    2566,  2570,  2573,  2578,  2582,  2585,  2589,  2592,  2597,  2601,
-    2604,  2611,  2618,  2625,  2633,  2635,  2638,  2640,  2642,  2644,
-    2647,  2651,  2654,  2658,  2661,  2665,  2669,  2674,  2677,  2681,
-    2686,  2689,  2695,  2702,  2709,  2710,  2712,  2713
+    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
 };
 
@@ -753,276 +755,276 @@
 static const yytype_int16 yyrhs[] =
 {
-     308,     0,    -1,    -1,    -1,    81,    -1,    84,    -1,    85,
-      -1,    86,    -1,    82,    -1,    74,    -1,    78,    -1,   144,
-      -1,    74,    -1,    78,    -1,    74,    -1,   144,    -1,    87,
-      -1,    88,    -1,   146,    -1,    83,    -1,   146,    83,    -1,
-      74,    -1,   144,    -1,   174,    -1,   113,   176,   114,    -1,
-     113,   180,   114,    -1,   147,    -1,   148,   115,   138,   171,
-     139,   116,    -1,   148,   113,   149,   114,    -1,   148,   117,
-     143,    -1,   148,   117,   115,   138,   151,   139,   116,    -1,
-     148,    85,    -1,   148,    89,   143,    -1,   148,    89,   115,
-     138,   151,   139,   116,    -1,   148,    90,    -1,   148,    91,
-      -1,   113,   281,   114,   118,   285,   378,   119,    -1,   148,
-     118,   149,   119,    -1,   150,    -1,   149,   120,   150,    -1,
-      -1,   171,    -1,   152,    -1,   151,   120,   152,    -1,   153,
-      -1,    84,   152,    -1,    84,   115,   138,   151,   139,   116,
-      -1,   153,   117,   152,    -1,   153,   117,   115,   138,   151,
-     139,   116,    -1,   153,    89,   152,    -1,   153,    89,   115,
-     138,   151,   139,   116,    -1,    81,   154,    -1,    86,   154,
-      -1,   143,   154,    -1,    -1,   154,    85,    -1,   148,    -1,
-     140,    -1,   145,    -1,    42,   158,    -1,   156,   158,    -1,
-     157,   158,    -1,    90,   155,    -1,    91,   155,    -1,    39,
-     155,    -1,    39,   113,   281,   114,    -1,    68,   155,    -1,
-      68,   113,   281,   114,    -1,    40,   113,   281,   120,   143,
-     114,    -1,    78,    -1,    78,   113,   150,   114,    -1,    78,
-     113,   282,   114,    -1,   121,    -1,   122,    -1,   123,    -1,
-     124,    -1,   125,    -1,   126,    -1,   155,    -1,   113,   281,
-     114,   158,    -1,   158,    -1,   159,   121,   158,    -1,   159,
-     127,   158,    -1,   159,   128,   158,    -1,   159,    -1,   160,
-     123,   159,    -1,   160,   124,   159,    -1,   160,    -1,   161,
-      92,   160,    -1,   161,    93,   160,    -1,   161,    -1,   162,
-     129,   161,    -1,   162,   130,   161,    -1,   162,    94,   161,
-      -1,   162,    95,   161,    -1,   162,    -1,   163,    96,   162,
-      -1,   163,    97,   162,    -1,   163,    -1,   164,   122,   163,
-      -1,   164,    -1,   165,   131,   164,    -1,   165,    -1,   166,
-     132,   165,    -1,   166,    -1,   167,    98,   166,    -1,   167,
-      -1,   168,    99,   167,    -1,   168,    -1,   168,   133,   176,
-     134,   169,    -1,   168,   133,   134,   169,    -1,   169,    -1,
-     169,    -1,   155,   173,   171,    -1,    -1,   171,    -1,   135,
-      -1,   111,    -1,   101,    -1,   102,    -1,   103,    -1,   104,
-      -1,   105,    -1,   106,    -1,   107,    -1,   108,    -1,   109,
-      -1,   110,    -1,   115,   138,   120,   175,   139,   116,    -1,
-     115,   138,   171,   120,   175,   139,   116,    -1,   172,    -1,
-     175,   120,   172,    -1,   171,    -1,   176,   120,   171,    -1,
-      -1,   176,    -1,   179,    -1,   180,    -1,   184,    -1,   185,
-      -1,   197,    -1,   199,    -1,   200,    -1,   205,    -1,   131,
-     148,   118,   149,   119,   136,    -1,    74,   134,   318,   178,
-      -1,   118,   119,    -1,   118,   138,   138,   216,   181,   139,
-     119,    -1,   182,    -1,   181,   138,   182,    -1,   219,    -1,
-      42,   219,    -1,   314,    -1,   178,   139,    -1,   178,    -1,
-     183,   178,    -1,   177,   136,    -1,    43,   113,   176,   114,
-     178,    -1,    43,   113,   176,   114,   178,    44,   178,    -1,
-      45,   113,   176,   114,   190,    -1,    45,   113,   176,   114,
-     118,   138,   212,   191,   119,    -1,    55,   113,   176,   114,
-     190,    -1,    55,   113,   176,   114,   118,   138,   212,   193,
-     119,    -1,   170,    -1,   170,   100,   170,    -1,   316,    -1,
-     186,    -1,   187,   120,   186,    -1,    46,   187,   134,    -1,
-      47,   134,    -1,   188,    -1,   189,   188,    -1,   189,   178,
-      -1,    -1,   192,    -1,   189,   183,    -1,   192,   189,   183,
-      -1,    -1,   194,    -1,   189,   196,    -1,   189,   183,   195,
-      -1,   194,   189,   196,    -1,   194,   189,   183,   195,    -1,
-      -1,   196,    -1,    58,    -1,    58,   136,    -1,    49,   113,
-     176,   114,   178,    -1,    48,   178,    49,   113,   176,   114,
-     136,    -1,    50,   113,   138,   198,   114,   178,    -1,   177,
-     139,   136,   177,   136,   177,    -1,   219,   177,   136,   177,
-      -1,    53,    74,   136,    -1,    53,   121,   176,   136,    -1,
-      52,   136,    -1,    52,    74,   136,    -1,    51,   136,    -1,
-      51,    74,   136,    -1,    54,   177,   136,    -1,    63,   172,
-     136,    -1,    64,   172,   136,    -1,    64,   172,    65,   171,
-     136,    -1,    59,   180,   201,    -1,    59,   180,   203,    -1,
-      59,   180,   201,   203,    -1,   202,    -1,    60,   113,   100,
-     114,   180,    -1,   202,    60,   113,   100,   114,   180,    -1,
-      61,   113,   100,   114,   180,    -1,   202,    61,   113,   100,
-     114,   180,    -1,    60,   113,   138,   138,   204,   139,   114,
-     180,   139,    -1,   202,    60,   113,   138,   138,   204,   139,
-     114,   180,   139,    -1,    61,   113,   138,   138,   204,   139,
-     114,   180,   139,    -1,   202,    61,   113,   138,   138,   204,
-     139,   114,   180,   139,    -1,    62,   180,    -1,   232,    -1,
-     232,   315,    -1,   232,   363,    -1,   372,   143,    -1,   372,
-      -1,    66,   206,   113,   145,   114,   136,    -1,    66,   206,
-     113,   145,   134,   207,   114,   136,    -1,    66,   206,   113,
-     145,   134,   207,   134,   207,   114,   136,    -1,    66,   206,
-     113,   145,   134,   207,   134,   207,   134,   210,   114,   136,
-      -1,    66,   206,    53,   113,   145,   134,   134,   207,   134,
-     210,   134,   211,   114,   136,    -1,    -1,    11,    -1,    -1,
-     208,    -1,   209,    -1,   208,   120,   209,    -1,   145,   113,
-     170,   114,    -1,   115,   170,   116,   145,   113,   170,   114,
-      -1,    -1,   145,    -1,   210,   120,   145,    -1,   143,    -1,
-     211,   120,   143,    -1,   139,    -1,   213,    -1,   219,    -1,
-     213,   138,   219,    -1,   139,    -1,   215,    -1,   229,    -1,
-     215,   138,   229,    -1,    -1,   217,    -1,    31,   218,   136,
-      -1,   217,    31,   218,   136,    -1,   280,    -1,   218,   120,
-     280,    -1,   220,    -1,   229,    -1,   221,   139,   136,    -1,
-     226,   139,   136,    -1,   223,   139,   136,    -1,   299,   139,
-     136,    -1,   302,   139,   136,    -1,   222,   283,    -1,   238,
-     222,   283,    -1,   221,   139,   120,   138,   278,   283,    -1,
-     373,   278,   317,    -1,   376,   278,   317,    -1,   234,   376,
-     278,   317,    -1,   224,    -1,   234,   224,    -1,   238,   224,
-      -1,   238,   234,   224,    -1,   223,   139,   120,   138,   278,
-      -1,   376,   278,   113,   138,   266,   139,   114,    -1,   225,
-     278,   113,   138,   266,   139,   114,    -1,   115,   138,   268,
-     139,   116,    -1,   115,   138,   268,   139,   120,   138,   269,
-     139,   116,    -1,     3,   222,    -1,     3,   224,    -1,   226,
-     139,   120,   138,   143,    -1,     3,   232,   315,    -1,   227,
-     139,   120,   138,   315,    -1,   234,     3,   232,   315,    -1,
-     232,     3,   315,    -1,   232,     3,   234,   315,    -1,     3,
-     143,   135,   171,    -1,   228,   139,   120,   138,   143,   135,
-     171,    -1,   230,   139,   136,    -1,   227,   139,   136,    -1,
-     228,   139,   136,    -1,   246,   139,   136,    -1,   231,   315,
-     317,   283,    -1,   230,   120,   318,   315,   317,   283,    -1,
-     242,    -1,   246,    -1,   248,    -1,   289,    -1,   243,    -1,
-     247,    -1,   249,    -1,   290,    -1,    -1,   234,    -1,   235,
-      -1,   234,   235,    -1,   236,    -1,   320,    -1,    10,    -1,
-      12,    -1,    11,    -1,    14,    -1,    69,    -1,    -1,    13,
-     113,   237,   292,   114,    -1,   239,    -1,   234,   239,    -1,
-     238,   234,   239,    -1,   240,    -1,   239,   240,    -1,     5,
+     309,     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,
+      -1,    89,    -1,   147,    -1,    84,    -1,   147,    84,    -1,
+      75,    -1,   145,    -1,   175,    -1,   114,   177,   115,    -1,
+     114,   181,   115,    -1,   148,    -1,   149,   116,   139,   172,
+     140,   117,    -1,   149,   114,   150,   115,    -1,   149,   118,
+     144,    -1,   149,   118,   116,   139,   152,   140,   117,    -1,
+     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,
+     119,   150,   120,    -1,   151,    -1,   150,   121,   151,    -1,
+      -1,   172,    -1,   153,    -1,   152,   121,   153,    -1,   154,
+      -1,    85,   153,    -1,    85,   116,   139,   152,   140,   117,
+      -1,   154,   118,   153,    -1,   154,   118,   116,   139,   152,
+     140,   117,    -1,   154,    90,   153,    -1,   154,    90,   116,
+     139,   152,   140,   117,    -1,    82,   155,    -1,    87,   155,
+      -1,   144,   155,    -1,    -1,   155,    86,    -1,   149,    -1,
+     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,
+     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,
+     115,   159,    -1,   159,    -1,   160,   122,   159,    -1,   160,
+     128,   159,    -1,   160,   129,   159,    -1,   160,    -1,   161,
+     124,   160,    -1,   161,   125,   160,    -1,   161,    -1,   162,
+      93,   161,    -1,   162,    94,   161,    -1,   162,    -1,   163,
+     130,   162,    -1,   163,   131,   162,    -1,   163,    95,   162,
+      -1,   163,    96,   162,    -1,   163,    -1,   164,    97,   163,
+      -1,   164,    98,   163,    -1,   164,    -1,   165,   123,   164,
+      -1,   165,    -1,   166,   132,   165,    -1,   166,    -1,   167,
+     133,   166,    -1,   167,    -1,   168,    99,   167,    -1,   168,
+      -1,   169,   100,   168,    -1,   169,    -1,   169,   134,   177,
+     135,   170,    -1,   169,   134,   135,   170,    -1,   170,    -1,
+     170,    -1,   156,   174,   172,    -1,    -1,   172,    -1,   136,
+      -1,   112,    -1,   102,    -1,   103,    -1,   104,    -1,   105,
+      -1,   106,    -1,   107,    -1,   108,    -1,   109,    -1,   110,
+      -1,   111,    -1,   116,   139,   121,   176,   140,   117,    -1,
+     116,   139,   172,   121,   176,   140,   117,    -1,   173,    -1,
+     176,   121,   173,    -1,   172,    -1,   177,   121,   172,    -1,
+      -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,    75,   135,   319,   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,    75,   137,    -1,    54,   122,   177,   137,    -1,
+      53,   137,    -1,    53,    75,   137,    -1,    52,   137,    -1,
+      52,    75,   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,    71,    -1,    73,    -1,    16,    -1,    21,    -1,    20,
+      -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,   243,    -1,   238,   243,    -1,
-     242,   240,    -1,   242,   240,   234,    -1,   242,   240,   243,
-      -1,   244,    -1,   233,   245,   233,    -1,   241,    -1,   234,
-     241,    -1,   244,   235,    -1,   244,   241,    -1,    30,   113,
-     282,   114,    -1,    30,   113,   176,   114,    -1,    80,   113,
-     282,   114,    -1,    80,   113,   176,   114,    -1,   247,    -1,
-     238,   247,    -1,   246,   240,    -1,   246,   240,   234,    -1,
-     250,    -1,   234,   250,    -1,   247,   235,    -1,   249,    -1,
-     238,   249,    -1,   248,   240,    -1,   248,   240,   234,    -1,
-      76,    -1,   234,    76,    -1,   249,   235,    -1,   251,    -1,
-     262,    -1,   253,   118,   254,   119,    -1,   253,   280,    -1,
-      -1,   253,   280,   252,   118,   254,   119,    -1,   253,   113,
-     298,   114,   118,   254,   119,    -1,   253,   291,    -1,    33,
-     318,    -1,    34,   318,    -1,    -1,   254,   255,    -1,   256,
-     136,    -1,    42,   256,   136,    -1,   257,   136,    -1,    42,
-     257,   136,    -1,   372,    -1,   372,   280,    -1,   256,   120,
-     280,    -1,   256,   120,    -1,   232,   258,    -1,   257,   120,
-     318,   258,    -1,    -1,   260,    -1,   324,   259,    -1,   337,
-     259,    -1,   363,    -1,    -1,   260,    -1,   134,   170,    -1,
-      32,   318,    -1,   261,   118,   264,   378,   119,    -1,   261,
-     280,    -1,    -1,   261,   280,   263,   118,   264,   378,   119,
-      -1,   280,   265,    -1,   264,   120,   280,   265,    -1,    -1,
-     135,   170,    -1,    -1,   267,    -1,   269,    -1,   268,    -1,
-     268,   139,   120,   138,   269,    -1,   269,   139,   120,   138,
-     100,    -1,   268,   139,   120,   138,   100,    -1,   273,    -1,
-     269,   139,   120,   138,   273,    -1,   268,   139,   120,   138,
-     273,    -1,   268,   139,   120,   138,   269,   139,   120,   138,
-     273,    -1,   274,    -1,   269,   139,   120,   138,   274,    -1,
-      -1,   271,    -1,   272,    -1,   272,   139,   120,   138,   100,
-      -1,   276,    -1,   275,    -1,   272,   139,   120,   138,   276,
-      -1,   272,   139,   120,   138,   275,    -1,   275,    -1,   368,
-     278,   379,    -1,   376,   278,   379,    -1,   234,   376,   278,
-     379,    -1,   224,    -1,   276,    -1,   368,    -1,   376,    -1,
-     234,   376,    -1,   377,    -1,   231,   342,   379,    -1,   231,
-     346,   379,    -1,   231,    -1,   231,   357,    -1,   143,    -1,
-     277,   120,   143,    -1,   141,    -1,    76,    -1,    77,    -1,
-     142,    -1,    76,    -1,    77,    -1,   143,    -1,    76,    -1,
-      77,    -1,   372,    -1,   232,    -1,   232,   363,    -1,   372,
-      -1,   377,    -1,   232,    -1,   232,   351,    -1,    -1,   135,
-     284,    -1,   111,   284,    -1,   171,    -1,   118,   285,   378,
-     119,    -1,    -1,   284,    -1,   286,   284,    -1,   285,   120,
-     284,    -1,   285,   120,   286,   284,    -1,   287,   134,    -1,
-     280,   134,    -1,   288,    -1,   287,   288,    -1,   117,   280,
-      -1,   115,   138,   171,   139,   116,    -1,   115,   138,   316,
-     139,   116,    -1,   115,   138,   170,   100,   170,   139,   116,
-      -1,   117,   115,   138,   151,   139,   116,    -1,   290,    -1,
-     238,   290,    -1,   289,   240,    -1,   289,   240,   234,    -1,
-     291,    -1,   234,   291,    -1,   290,   235,    -1,    77,   113,
-     298,   114,    -1,   293,   379,    -1,   292,   120,   293,   379,
-      -1,    -1,   295,   280,   294,   296,    -1,   232,   342,    -1,
-      35,    -1,    37,    -1,    36,    -1,    -1,   296,   297,    -1,
-     132,   280,   113,   298,   114,    -1,   132,   118,   138,   304,
-     119,    -1,   132,   113,   138,   292,   139,   114,   118,   138,
-     304,   119,   113,   298,   114,    -1,   282,    -1,   171,    -1,
-     298,   120,   282,    -1,   298,   120,   171,    -1,    35,   300,
-      -1,   239,    35,   300,    -1,   299,   120,   300,    -1,   301,
-     296,    -1,   301,   296,   135,   282,    -1,   280,    -1,   279,
-     113,   138,   292,   139,   114,    -1,    38,   280,   113,   138,
-     292,   139,   114,   118,   119,    -1,    -1,    38,   280,   113,
-     138,   292,   139,   114,   118,   303,   304,   119,    -1,   305,
-      -1,   304,   138,   305,    -1,   306,   139,   136,    -1,   307,
-     139,   136,    -1,   222,    -1,   224,    -1,   306,   139,   120,
-     138,   278,    -1,   232,   315,    -1,   307,   139,   120,   138,
-     315,    -1,    -1,   309,    -1,   311,    -1,   309,   138,   311,
-      -1,    -1,   309,    -1,   219,    -1,   313,    -1,   205,    -1,
-      -1,     5,    83,   312,   118,   310,   119,    -1,    42,   311,
-      -1,   314,    -1,   329,   180,    -1,   333,   138,   214,   180,
-      -1,   223,   180,    -1,   231,   329,   180,    -1,   234,   329,
-     180,    -1,   238,   329,   180,    -1,   238,   234,   329,   180,
-      -1,   231,   333,   138,   214,   180,    -1,   234,   333,   138,
-     214,   180,    -1,   238,   333,   138,   214,   180,    -1,   238,
-     234,   333,   138,   214,   180,    -1,   324,    -1,   337,    -1,
-     329,    -1,   170,   126,   170,    -1,    -1,    66,   113,   145,
-     114,   318,    -1,    -1,   319,    -1,   320,    -1,   319,   320,
-      -1,    41,   113,   113,   321,   114,   114,    -1,   322,    -1,
-     321,   120,   322,    -1,    -1,   323,    -1,   323,   113,   177,
-     114,    -1,   278,    -1,   240,    -1,   241,    -1,   235,    -1,
-     325,   318,    -1,   326,    -1,   327,   318,    -1,   328,   318,
-      -1,   141,    -1,   113,   325,   114,    -1,   156,   324,    -1,
-     156,   234,   324,    -1,   113,   326,   114,    -1,   325,   355,
-      -1,   113,   326,   114,   355,    -1,   113,   327,   114,   356,
-      -1,   113,   327,   114,    -1,   113,   326,   114,   113,   138,
-     270,   139,   114,    -1,   113,   328,   114,    -1,   330,   318,
-      -1,   331,    -1,   332,   318,    -1,   325,   113,   138,   270,
-     139,   114,    -1,   113,   331,   114,   113,   138,   270,   139,
-     114,    -1,   113,   330,   114,    -1,   156,   329,    -1,   156,
-     234,   329,    -1,   113,   331,   114,    -1,   113,   331,   114,
-     355,    -1,   113,   332,   114,   356,    -1,   113,   332,   114,
-      -1,   334,    -1,   335,    -1,   336,    -1,   325,   113,   277,
-     114,    -1,   113,   335,   114,   113,   277,   114,    -1,   113,
-     334,   114,    -1,   156,   333,    -1,   156,   234,   333,    -1,
-     113,   335,   114,    -1,   113,   335,   114,   355,    -1,   113,
-     336,   114,   356,    -1,   113,   336,   114,    -1,   338,   318,
-      -1,   339,    -1,   340,   318,    -1,   341,   318,    -1,   347,
-      -1,   113,   338,   114,    -1,   156,   337,    -1,   156,   234,
-     337,    -1,   113,   339,   114,    -1,   338,   355,    -1,   113,
-     339,   114,   355,    -1,   113,   340,   114,   356,    -1,   113,
-     340,   114,    -1,   338,   113,   138,   270,   139,   114,    -1,
-     113,   339,   114,   113,   138,   270,   139,   114,    -1,   113,
-     341,   114,    -1,   325,   318,    -1,   343,    -1,   344,   318,
-      -1,   345,   318,    -1,   156,   342,    -1,   156,   234,   342,
-      -1,   113,   343,   114,    -1,   325,   361,    -1,   113,   343,
-     114,   355,    -1,   113,   344,   114,   356,    -1,   113,   344,
-     114,    -1,   325,   113,   138,   270,   139,   114,    -1,   113,
-     343,   114,   113,   138,   270,   139,   114,    -1,   113,   345,
-     114,    -1,   347,   318,    -1,   348,    -1,   349,   318,    -1,
-     350,   318,    -1,    76,    -1,    77,    -1,   156,   346,    -1,
-     156,   234,   346,    -1,   113,   348,   114,    -1,   347,   361,
-      -1,   113,   348,   114,   361,    -1,   347,   113,   138,   270,
-     139,   114,    -1,   113,   348,   114,   113,   138,   270,   139,
-     114,    -1,   352,    -1,   353,   318,    -1,   354,   318,    -1,
-     156,    -1,   156,   234,    -1,   156,   351,    -1,   156,   234,
-     351,    -1,   113,   352,   114,    -1,   355,    -1,   113,   352,
-     114,   355,    -1,   113,   353,   114,   356,    -1,   113,   353,
-     114,    -1,   113,   138,   270,   139,   114,    -1,   113,   352,
-     114,   113,   138,   270,   139,   114,    -1,   113,   354,   114,
-      -1,   115,   116,    -1,   115,   116,   356,    -1,   356,    -1,
-     115,   138,   171,   139,   116,    -1,   115,   138,   121,   139,
-     116,    -1,   356,   115,   138,   171,   139,   116,    -1,   356,
-     115,   138,   121,   139,   116,    -1,   358,    -1,   359,   318,
-      -1,   360,   318,    -1,   156,    -1,   156,   234,    -1,   156,
-     357,    -1,   156,   234,   357,    -1,   113,   358,   114,    -1,
-     361,    -1,   113,   358,   114,   361,    -1,   113,   359,   114,
-     356,    -1,   113,   359,   114,    -1,   113,   138,   270,   139,
-     114,    -1,   113,   358,   114,   113,   138,   270,   139,   114,
-      -1,   113,   360,   114,    -1,   362,    -1,   362,   356,    -1,
-     356,    -1,   115,   116,    -1,   115,   138,   234,   121,   139,
-     116,    -1,   115,   138,   234,   139,   116,    -1,   115,   138,
-     234,   171,   139,   116,    -1,   115,   138,     7,   233,   171,
-     139,   116,    -1,   115,   138,   234,     7,   171,   139,   116,
-      -1,   364,    -1,   365,   318,    -1,   366,   318,    -1,   156,
-      -1,   156,   234,    -1,   156,   363,    -1,   156,   234,   363,
-      -1,   113,   364,   114,    -1,   355,    -1,   113,   364,   114,
-     355,    -1,   113,   365,   114,   356,    -1,   113,   365,   114,
-      -1,   113,   364,   114,   113,   138,   270,   139,   114,    -1,
-     113,   366,   114,    -1,   368,    -1,   376,    -1,   234,   376,
-      -1,   369,    -1,   370,    -1,   156,   232,    -1,   234,   156,
-     232,    -1,   156,   377,    -1,   234,   156,   377,    -1,   156,
-     367,    -1,   234,   156,   367,    -1,   115,   116,   232,    -1,
-     371,   232,    -1,   115,   116,   356,   232,    -1,   371,   356,
-     232,    -1,   356,   232,    -1,   115,   116,   369,    -1,   371,
-     369,    -1,   115,   116,   356,   369,    -1,   371,   356,   369,
-      -1,   356,   369,    -1,   115,   138,   234,   121,   139,   116,
-      -1,   115,   138,   234,   171,   139,   116,    -1,   115,   138,
-     238,   171,   139,   116,    -1,   115,   138,   238,   234,   171,
-     139,   116,    -1,   376,    -1,   234,   376,    -1,   373,    -1,
-     374,    -1,   375,    -1,   156,   232,    -1,   234,   156,   232,
-      -1,   156,   377,    -1,   234,   156,   377,    -1,   156,   372,
-      -1,   234,   156,   372,    -1,   115,   116,   232,    -1,   115,
-     116,   356,   232,    -1,   356,   232,    -1,   115,   116,   374,
-      -1,   115,   116,   356,   374,    -1,   356,   374,    -1,   115,
-     138,   269,   139,   116,    -1,   376,   113,   138,   266,   139,
-     114,    -1,   225,   113,   138,   266,   139,   114,    -1,    -1,
-     120,    -1,    -1,   135,   171,    -1
+      -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,   178,   115,    -1,   279,    -1,   241,    -1,   242,    -1,
+     236,    -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,
+     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
 };
 
@@ -1079,31 +1081,31 @@
     1810,  1811,  1816,  1817,  1823,  1825,  1828,  1830,  1832,  1855,
     1856,  1858,  1860,  1865,  1866,  1868,  1873,  1878,  1879,  1885,
-    1884,  1888,  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,  2183,  2184,
-    2187,  2189,  2190,  2194,  2195,  2196,  2197,  2231,  2233,  2234,
-    2236,  2241,  2246,  2251,  2253,  2255,  2260,  2262,  2264,  2266,
-    2271,  2273,  2282,  2284,  2285,  2290,  2292,  2294,  2299,  2301,
-    2303,  2308,  2310,  2312,  2321,  2322,  2323,  2327,  2329,  2331,
-    2336,  2338,  2340,  2345,  2347,  2349,  2364,  2366,  2367,  2369,
-    2374,  2375,  2380,  2382,  2384,  2389,  2391,  2393,  2395,  2400,
-    2402,  2404,  2414,  2416,  2417,  2419,  2424,  2426,  2428,  2433,
-    2435,  2437,  2439,  2444,  2446,  2448,  2479,  2481,  2482,  2484,
-    2489,  2494,  2502,  2504,  2506,  2511,  2513,  2518,  2520,  2534,
-    2535,  2537,  2542,  2544,  2546,  2548,  2550,  2555,  2556,  2558,
-    2560,  2565,  2567,  2569,  2575,  2577,  2579,  2583,  2585,  2587,
-    2589,  2603,  2604,  2606,  2611,  2613,  2615,  2617,  2619,  2624,
-    2625,  2627,  2629,  2634,  2636,  2638,  2644,  2645,  2647,  2656,
-    2659,  2661,  2664,  2666,  2668,  2681,  2682,  2684,  2689,  2691,
-    2693,  2695,  2697,  2702,  2703,  2705,  2707,  2712,  2714,  2722,
-    2723,  2724,  2729,  2730,  2734,  2736,  2738,  2740,  2742,  2744,
-    2751,  2753,  2755,  2757,  2759,  2762,  2764,  2766,  2768,  2770,
-    2775,  2777,  2779,  2784,  2810,  2811,  2813,  2817,  2818,  2822,
-    2824,  2826,  2828,  2830,  2832,  2839,  2841,  2843,  2845,  2847,
-    2849,  2854,  2861,  2863,  2881,  2883,  2888,  2889
+    1884,  1888,  1892,  1894,  1896,  1898,  1904,  1905,  1910,  1915,
+    1917,  1922,  1924,  1925,  1927,  1932,  1934,  1936,  1941,  1943,
+    1948,  1953,  1961,  1967,  1966,  1980,  1981,  1986,  1987,  1991,
+    1996,  2001,  2009,  2014,  2025,  2026,  2031,  2032,  2038,  2039,
+    2043,  2044,  2045,  2048,  2047,  2058,  2067,  2073,  2079,  2088,
+    2094,  2100,  2106,  2112,  2120,  2126,  2134,  2140,  2149,  2150,
+    2151,  2155,  2161,  2162,  2168,  2169,  2173,  2174,  2179,  2185,
+    2186,  2189,  2191,  2192,  2196,  2197,  2198,  2199,  2233,  2235,
+    2236,  2238,  2243,  2248,  2253,  2255,  2257,  2262,  2264,  2266,
+    2268,  2273,  2275,  2284,  2286,  2287,  2292,  2294,  2296,  2301,
+    2303,  2305,  2310,  2312,  2314,  2323,  2324,  2325,  2329,  2331,
+    2333,  2338,  2340,  2342,  2347,  2349,  2351,  2366,  2368,  2369,
+    2371,  2376,  2377,  2382,  2384,  2386,  2391,  2393,  2395,  2397,
+    2402,  2404,  2406,  2416,  2418,  2419,  2421,  2426,  2428,  2430,
+    2435,  2437,  2439,  2441,  2446,  2448,  2450,  2481,  2483,  2484,
+    2486,  2491,  2496,  2504,  2506,  2508,  2513,  2515,  2520,  2522,
+    2536,  2537,  2539,  2544,  2546,  2548,  2550,  2552,  2557,  2558,
+    2560,  2562,  2567,  2569,  2571,  2577,  2579,  2581,  2585,  2587,
+    2589,  2591,  2605,  2606,  2608,  2613,  2615,  2617,  2619,  2621,
+    2626,  2627,  2629,  2631,  2636,  2638,  2640,  2646,  2647,  2649,
+    2658,  2661,  2663,  2666,  2668,  2670,  2683,  2684,  2686,  2691,
+    2693,  2695,  2697,  2699,  2704,  2705,  2707,  2709,  2714,  2716,
+    2724,  2725,  2726,  2731,  2732,  2736,  2738,  2740,  2742,  2744,
+    2746,  2753,  2755,  2757,  2759,  2761,  2764,  2766,  2768,  2770,
+    2772,  2777,  2779,  2781,  2786,  2812,  2813,  2815,  2819,  2820,
+    2824,  2826,  2828,  2830,  2832,  2834,  2841,  2843,  2845,  2847,
+    2849,  2851,  2856,  2863,  2865,  2883,  2885,  2890,  2891
 };
 #endif
@@ -1119,5 +1121,5 @@
   "SIGNED", "UNSIGNED", "ZERO_T", "ONE_T", "VALIST", "BOOL", "COMPLEX",
   "IMAGINARY", "TYPEOF", "LABEL", "ENUM", "STRUCT", "UNION", "OTYPE",
-  "FTYPE", "DTYPE", "TRAIT", "SIZEOF", "OFFSETOF", "ATTRIBUTE",
+  "FTYPE", "DTYPE", "TTYPE", "TRAIT", "SIZEOF", "OFFSETOF", "ATTRIBUTE",
   "EXTENSION", "IF", "ELSE", "SWITCH", "CASE", "DEFAULT", "DO", "WHILE",
   "FOR", "BREAK", "CONTINUE", "GOTO", "RETURN", "CHOOSE", "DISABLE",
@@ -1240,7 +1242,7 @@
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
      355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,    40,    41,    91,    93,    46,   123,   125,
-      44,    42,    38,    43,    45,    33,   126,    47,    37,    60,
-      62,    94,   124,    63,    58,    61,    59
+     365,   366,   367,   368,    40,    41,    91,    93,    46,   123,
+     125,    44,    42,    38,    43,    45,    33,   126,    47,    37,
+      60,    62,    94,   124,    63,    58,    61,    59
 };
 # endif
@@ -1249,80 +1251,80 @@
 static const yytype_uint16 yyr1[] =
 {
-       0,   137,   138,   139,   140,   140,   140,   140,   140,   141,
-     141,   141,   142,   142,   143,   143,   144,   144,   145,   146,
-     146,   147,   147,   147,   147,   147,   148,   148,   148,   148,
-     148,   148,   148,   148,   148,   148,   148,   148,   149,   149,
-     150,   150,   151,   151,   152,   152,   152,   152,   152,   152,
-     152,   153,   153,   153,   154,   154,   155,   155,   155,   155,
-     155,   155,   155,   155,   155,   155,   155,   155,   155,   155,
-     155,   155,   156,   156,   157,   157,   157,   157,   158,   158,
-     159,   159,   159,   159,   160,   160,   160,   161,   161,   161,
-     162,   162,   162,   162,   162,   163,   163,   163,   164,   164,
-     165,   165,   166,   166,   167,   167,   168,   168,   169,   169,
-     169,   170,   171,   171,   172,   172,   173,   173,   173,   173,
-     173,   173,   173,   173,   173,   173,   173,   173,   174,   174,
-     175,   175,   176,   176,   177,   177,   178,   178,   178,   178,
-     178,   178,   178,   178,   178,   179,   180,   180,   181,   181,
-     182,   182,   182,   182,   183,   183,   184,   185,   185,   185,
-     185,   185,   185,   186,   186,   186,   187,   187,   188,   188,
-     189,   189,   190,   191,   191,   192,   192,   193,   193,   194,
-     194,   194,   194,   195,   195,   196,   196,   197,   197,   197,
-     198,   198,   199,   199,   199,   199,   199,   199,   199,   199,
-     199,   199,   200,   200,   200,   201,   201,   201,   201,   201,
-     202,   202,   202,   202,   203,   204,   204,   204,   204,   204,
-     205,   205,   205,   205,   205,   206,   206,   207,   207,   208,
-     208,   209,   209,   210,   210,   210,   211,   211,   212,   212,
-     213,   213,   214,   214,   215,   215,   216,   216,   217,   217,
-     218,   218,   219,   219,   220,   220,   220,   220,   220,   221,
-     221,   221,   222,   222,   222,   223,   223,   223,   223,   223,
-     224,   224,   225,   225,   226,   226,   226,   227,   227,   227,
-     227,   227,   228,   228,   229,   229,   229,   229,   230,   230,
-     231,   231,   231,   231,   232,   232,   232,   232,   233,   233,
-     234,   234,   235,   235,   236,   236,   236,   236,   236,   237,
-     236,   238,   238,   238,   239,   239,   240,   240,   240,   240,
-     240,   240,   240,   240,   241,   241,   241,   241,   241,   241,
-     241,   241,   241,   241,   241,   241,   241,   241,   241,   242,
-     242,   242,   242,   242,   243,   243,   244,   244,   244,   244,
-     245,   245,   245,   245,   246,   246,   246,   246,   247,   247,
-     247,   248,   248,   248,   248,   249,   249,   249,   250,   250,
-     251,   251,   252,   251,   251,   251,   253,   253,   254,   254,
-     255,   255,   255,   255,   256,   256,   256,   256,   257,   257,
-     258,   258,   258,   258,   258,   259,   259,   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,   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,   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,   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
+       0,   138,   139,   140,   141,   141,   141,   141,   141,   142,
+     142,   142,   143,   143,   144,   144,   145,   145,   146,   147,
+     147,   148,   148,   148,   148,   148,   149,   149,   149,   149,
+     149,   149,   149,   149,   149,   149,   149,   149,   150,   150,
+     151,   151,   152,   152,   153,   153,   153,   153,   153,   153,
+     153,   154,   154,   154,   155,   155,   156,   156,   156,   156,
+     156,   156,   156,   156,   156,   156,   156,   156,   156,   156,
+     156,   156,   157,   157,   158,   158,   158,   158,   159,   159,
+     160,   160,   160,   160,   161,   161,   161,   162,   162,   162,
+     163,   163,   163,   163,   163,   164,   164,   164,   165,   165,
+     166,   166,   167,   167,   168,   168,   169,   169,   170,   170,
+     170,   171,   172,   172,   173,   173,   174,   174,   174,   174,
+     174,   174,   174,   174,   174,   174,   174,   174,   175,   175,
+     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,
+     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
 };
 
@@ -1379,31 +1381,31 @@
        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,     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,
+       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,
-       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
+       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
 };
 
@@ -1415,156 +1417,157 @@
      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,   553,   553,
-     553,     0,     0,     0,   298,   225,   308,   322,   323,     9,
-     365,     0,    10,    16,    17,     0,     2,    72,    73,   571,
-      11,   298,   531,   529,   252,     3,   460,     3,   265,     0,
+     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,   525,   530,   535,   303,     0,     0,
-     553,   583,   553,     2,   594,   595,   596,   298,     0,   737,
-     738,     0,    14,     0,    15,   298,   274,   275,     0,   299,
-     294,   295,   296,   297,   532,   309,   398,   554,   555,   376,
-     377,    14,   451,   452,    13,   447,   450,     0,   509,   504,
-     495,   451,   452,     0,     0,   534,   226,     0,   298,     0,
+       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,
-     739,   299,   588,   600,   743,   736,   734,   741,     0,     0,
-       0,   259,     2,     0,   538,   445,   446,   444,     0,     0,
-       0,     0,   553,     0,   640,   641,     0,     0,   551,   547,
-     553,   568,   553,   553,   549,     2,   548,   553,   607,   553,
-     553,   610,     0,     0,     0,   298,   298,   316,   366,     2,
+     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,   536,   582,   584,   298,     2,   747,
-     299,   750,   551,   551,     0,   299,     0,     0,   277,   553,
-     549,     2,   298,     0,     0,   298,   556,     2,   507,     2,
-     560,     0,     0,     0,     0,     0,     0,    21,    69,     4,
+       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,   501,    23,   458,   500,     0,   456,
-     457,     0,   572,   587,   590,   593,   599,   602,   605,     2,
-     745,   298,   748,     2,    72,   298,     3,   432,     0,   440,
+     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,   712,   713,   298,   435,
-     437,     2,   589,   601,   735,     2,     2,   254,     2,   465,
+     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,   573,   612,     0,   460,
-       2,   567,   576,   666,   569,   570,   539,   298,     2,   606,
-     615,   608,   609,     0,   280,   298,   298,   345,   299,     0,
-     299,   298,   740,   744,   742,   540,   298,   551,   260,   268,
-     313,     0,     2,   541,   298,   505,   342,   343,   287,   357,
-     364,     0,   298,     0,   754,   405,     0,   482,   506,   257,
-     258,   526,   298,   442,     0,   298,   242,     0,     2,   244,
+       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,   551,   298,   492,   494,   493,     0,     0,   756,     0,
-     298,     0,   298,   496,   298,   566,   564,   565,   563,     0,
-     558,   561,     0,     0,   298,    64,   298,    78,    59,   298,
-      66,   298,   298,    62,    63,     2,   132,     0,     0,   454,
-       0,   453,   734,   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,     0,
+     298,   552,   298,   492,   494,   493,   495,     0,     0,   757,
+       0,   298,     0,   298,   497,   298,   567,   565,   566,   564,
+       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,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     2,   652,   459,
-     649,   553,   553,   657,   486,   298,     2,   591,   592,     0,
-     603,   604,     0,   746,   749,   298,   298,     0,   714,   299,
-     718,   709,   710,   716,     0,     2,     2,   674,   553,   756,
-     623,   553,   553,   756,   553,   637,   553,   553,   688,   441,
-     671,   553,   553,   679,   686,   298,   436,   299,     0,     0,
-     298,   724,   299,   729,   756,   721,   298,   726,   756,   298,
-     298,     0,     0,    21,     2,     0,    22,     0,   466,   754,
-       0,     0,   472,   246,     0,   298,     0,     0,     0,   551,
-     575,   579,   581,   611,   614,   618,   621,   574,   613,     0,
-     288,   664,     0,   298,   281,     0,     0,     0,     0,   279,
-       2,     0,   264,   542,   298,     0,     0,   298,     2,   370,
-     390,   379,     0,     0,   384,   378,   755,     0,     0,   403,
-       0,   299,     3,   421,     3,   425,   424,   597,     0,   537,
-     298,    72,     3,   298,   440,   299,     3,   434,   435,     2,
-       0,     0,     0,   491,   310,   298,     0,   487,   489,     3,
-       2,     2,     0,   508,     3,     0,   560,   134,     0,     0,
-     227,     0,     0,     0,     0,    41,     0,     0,   298,    24,
-       0,    25,     0,   698,   703,   455,   695,   553,   553,     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,   653,   654,   650,   651,   503,
-     502,   298,     0,   720,   298,   725,   299,   298,   668,   711,
-     667,     2,   298,     0,     0,     0,     0,     0,     0,     0,
-       0,   689,     0,   675,   626,   642,   676,     2,   622,   629,
-     438,   624,   625,   439,     2,   636,   645,   638,   639,   672,
-     673,   687,   715,   719,   717,   756,   272,     2,   751,     2,
-     429,   723,   728,   430,     3,   408,     3,     3,     3,   460,
-       0,     0,     2,   474,   471,   755,     0,   467,     2,   470,
-     473,     0,   298,   247,   269,     3,   276,   278,     0,   460,
-       2,   577,   578,     2,   616,   617,     0,   665,   543,     3,
-     351,   350,   353,   352,   298,   544,     0,   545,   378,     0,
-       0,   298,     0,     0,   698,   388,   391,   395,   553,   395,
-     394,   387,   380,   553,   382,   385,   298,   405,   399,   111,
-     406,   754,     0,     0,   443,   245,     0,     0,     3,     2,
-     674,   436,     0,   533,     0,   756,   757,   495,     0,   298,
-     298,   298,     0,   557,   559,   135,     0,     0,   220,     0,
-       0,     0,   228,   229,    65,     0,    67,    70,    71,     0,
-     133,     0,     0,     0,   699,   700,   696,   697,   465,    79,
-     115,   130,     3,   114,     0,    28,    40,     3,     0,    37,
-     110,     0,     3,   656,   660,   663,   655,     3,   598,   722,
-     727,     2,    72,   298,     3,     3,   299,     0,     3,   628,
-     632,   635,   644,   678,   682,   685,   298,     3,   627,   643,
-     677,   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,     0,     0,     3,
-     136,   137,     2,   148,   138,   139,   140,   141,   142,   143,
-     150,   152,     0,     0,     0,   289,   298,   298,   553,     0,
-     546,   298,   381,   383,     0,   397,   699,   392,   396,   393,
-     386,   390,   373,   404,     0,   585,     2,   670,   669,     0,
-     675,     2,   488,   490,   510,     3,   518,   519,     0,     2,
-     514,     3,     3,     0,     0,   562,   227,     0,     0,     0,
-     227,     0,     0,   702,   706,   708,   701,   754,   114,     0,
-       3,    54,     0,    54,    54,     3,    42,    44,    39,     0,
-       3,   109,     0,     2,   658,   659,     0,   298,     0,     0,
-       0,     3,   644,     0,     2,   630,   631,     2,   646,     2,
-     680,   681,     0,     0,    72,     0,     3,     3,     3,     3,
-     416,   415,   419,   753,     2,     2,   752,     0,     0,     0,
-       0,     3,   469,     3,     0,   248,   151,     3,   299,   298,
-       0,     0,     0,     0,     2,     0,   196,     0,   194,     0,
-       0,     0,     0,     0,     0,     0,   553,     0,   156,   153,
-     298,     0,     0,   271,   283,     3,     3,   552,   619,   374,
-     389,   402,   298,   270,   298,     0,   521,   498,   298,     0,
-       0,   497,   512,     0,     0,     0,   221,     0,   230,    68,
-       2,   704,   705,     0,   131,   128,     0,    51,     2,    45,
-      52,    53,     0,     0,     0,     0,    27,     0,   661,   298,
-     586,   730,   731,   732,     0,   683,   298,   298,   298,     3,
-       3,     0,   691,     0,     0,     0,     0,   298,   298,     3,
-     550,   475,   476,     0,   251,   299,     0,     0,     0,     0,
-     298,   197,   195,   192,     0,   198,     0,     0,     0,     0,
-     202,   205,   203,   199,     0,   200,   134,    40,   149,   147,
-     249,     0,     0,   423,   427,   426,     0,   515,     2,   516,
-       2,   517,   511,   298,   233,     0,   231,     0,   233,   298,
-      36,   129,    55,     0,    43,    33,     2,    49,     2,    47,
-      30,     3,   733,     3,     3,     3,     0,     0,   690,   692,
-     633,   647,   273,     2,   413,     3,   412,     0,   478,   134,
-       0,     0,   134,     3,     0,   134,   193,     0,     2,     2,
-     214,   204,     0,     0,     0,   145,     0,   580,   620,     2,
-       0,     0,     2,   234,     0,     0,   222,     0,     3,     3,
-       0,     0,     0,     0,     0,     0,   693,   694,   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,   520,   522,   513,     0,     0,     0,
-       0,     0,     0,     3,     3,   662,   634,   648,   684,   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,   707,
-      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,   698,   216,   217,   218,     0,   207,     3,   209,
-       3,   298,   224,   237,   154,   175,   160,   134,   241,   190,
-     185,   183,   179,   162,   134,     0,   699,     0,     0,     0,
-       0,   155,   176,   186,   180,   184,   183,   181,     3,     3,
-       0,     0,   499,   182,   210,   212,     3,     3,   211,   213
+       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,   134,     0,
+       0,   227,     0,     0,     0,     0,    41,     0,     0,   298,
+      24,     0,    25,     0,   699,   704,   455,   696,   554,   554,
+       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,   135,     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,     0,     0,
+       3,   136,   137,     2,   148,   138,   139,   140,   141,   142,
+     143,   150,   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,    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,     0,   196,     0,   194,
+       0,     0,     0,     0,     0,     0,     0,   554,     0,   156,
+     153,   298,     0,     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,   192,     0,   198,     0,     0,     0,
+       0,   202,   205,   203,   199,     0,   200,   134,    40,   149,
+     147,   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,   145,     0,   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
 };
 
@@ -1572,190 +1575,191 @@
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   802,   466,   303,    49,   135,   136,   304,   305,   306,
-     307,   308,   754,   755,  1115,  1116,  1117,  1227,   309,   380,
+      -1,   803,   466,   303,    49,   135,   136,   304,   305,   306,
+     307,   308,   755,   756,  1116,  1117,  1118,  1228,   309,   380,
      311,   312,   313,   314,   315,   316,   317,   318,   319,   320,
-     321,   322,   323,  1012,   516,   961,   545,   325,   962,   935,
-    1038,  1504,  1040,  1041,  1042,  1043,  1505,  1044,  1045,  1422,
-    1423,  1385,  1386,  1387,  1483,  1484,  1488,  1489,  1524,  1525,
-    1046,  1344,  1047,  1048,  1280,  1281,  1282,  1466,  1049,   147,
-     941,   942,   943,  1364,  1446,  1458,  1459,   467,   468,   862,
-     863,  1020,    53,    54,    55,    56,    57,   347,   159,    60,
+     321,   322,   323,  1013,   517,   962,   546,   325,   963,   936,
+    1039,  1505,  1041,  1042,  1043,  1044,  1506,  1045,  1046,  1423,
+    1424,  1386,  1387,  1388,  1484,  1485,  1489,  1490,  1525,  1526,
+    1047,  1345,  1048,  1049,  1281,  1282,  1283,  1467,  1050,   147,
+     942,   943,   944,  1365,  1447,  1459,  1460,   467,   468,   863,
+     864,  1021,    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,   681,   682,
-     683,   895,  1067,   896,    85,    86,   456,   454,   689,   844,
-     845,   357,   358,   692,   693,   694,   359,   360,   361,   362,
-     464,   178,   137,   138,   520,   327,   171,   638,   639,   640,
-     641,   642,    87,   123,    89,   487,   488,   927,   489,   278,
-     493,   328,    90,   139,   140,    91,  1303,  1089,  1090,  1091,
-    1092,    92,    93,   710,    94,   274,    95,    96,   188,  1014,
-     672,   411,   127,    97,   499,   500,   501,   189,   269,   191,
+     121,    80,   122,    82,    83,   453,    84,   452,   682,   683,
+     684,   896,  1068,   897,    85,    86,   456,   454,   690,   845,
+     846,   357,   358,   693,   694,   695,   359,   360,   361,   362,
+     464,   178,   137,   138,   521,   327,   171,   639,   640,   641,
+     642,   643,    87,   123,    89,   488,   489,   928,   490,   278,
+     494,   328,    90,   139,   140,    91,  1304,  1090,  1091,  1092,
+    1093,    92,    93,   711,    94,   274,    95,    96,   188,  1015,
+     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,   814,   600,   601,   602,   603,
-     201,   605,   606,   607,   569,   570,   571,   572,   744,   107,
-     609,   610,   611,   612,   613,   614,   955,   746,   747,   748,
-     590,   365,   366,   367,   368,   329,   165,   109,   110,   111,
-     370,   687,   717
+     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,   956,   747,   748,   749,
+     591,   365,   366,   367,   368,   329,   165,   109,   110,   111,
+     370,   688,   718
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1267
+#define YYPACT_NINF -1263
 static const yytype_int16 yypact[] =
 {
-    5235,  8510, -1267,   -14, -1267, -1267, -1267, -1267, -1267, -1267,
-   -1267,   -27, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
-   -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,    84,    84,
-      84,  1541,   905,   123,  6677,   163, -1267, -1267, -1267, -1267,
-   -1267,   157, -1267, -1267, -1267,  1043,    81, -1267, -1267, -1267,
-   -1267,  4048, -1267, -1267, -1267, -1267,   225,   198, -1267,  1956,
-   -1267, -1267, -1267, -1267,   217,  1716,   371,    37,  6797, -1267,
-   -1267,  4048,   829, -1267, -1267,  1101,   380,  3172,   661,   839,
-    1101,   977, -1267, -1267,  1289,   340, -1267,  1101,  1140, -1267,
-     273, -1267,   439,   447, -1267, -1267, -1267, -1267,   337,   198,
-      84, -1267,    84, -1267, -1267, -1267, -1267,  7269,  1956, -1267,
-   -1267,  1956, -1267,   325, -1267,  7582, -1267, -1267,  2178,  8744,
-   -1267,   675,   675,   675, -1267, -1267, -1267,    84, -1267, -1267,
-   -1267,   360,   395,   436, -1267, -1267, -1267,   466, -1267, -1267,
-   -1267, -1267, -1267,   503,   515, -1267, -1267,   272,  8119,  1675,
-     307,   370,   377,   524,   565,   568,   580,  8828,  6307,   594,
-   -1267,  4677, -1267, -1267, -1267, -1267,   613, -1267,   271,  9583,
-    9583, -1267,   610,   339, -1267, -1267, -1267, -1267,   618,   379,
-     421,   468,    84,   603, -1267, -1267,  1716,  2591,   687, -1267,
-      90, -1267,    84,    84,   198, -1267, -1267,    91, -1267,    84,
-      84, -1267,  2973,   652,   657,   675,  6831, -1267, -1267, -1267,
-    4048, -1267, -1267,  1101, -1267, -1267, -1267,   198, -1267,  1956,
-     225, -1267,  7235, -1267,   675,   675,   675,   198, -1267,  1541,
-   -1267,  3826, -1267, -1267,   642,   675, -1267,   675, -1267,   157,
-    8119, -1267,   665, -1267,   905,   685,   675, -1267,  1541,   689,
-     710, -1267,  6677,   291, -1267, -1267, -1267,  8477, -1267, -1267,
-    4354, -1267,   687,     8,  9760,  8744,  2178,  2973, -1267,   101,
-   -1267, -1267,  7582,  1956,   740, 10515, -1267, -1267,   378, -1267,
-   10178,   730,   705,  9819,   773,  9760,  9878, -1267,   794, -1267,
-   -1267, -1267, -1267, -1267, -1267,  9937,  9937,  7885,    81, -1267,
-   -1267, -1267, -1267, -1267, -1267, -1267,   834, -1267,  1184,  2546,
-    8119,  9760, -1267,   525,   415,   844,   338,   853,   823,   831,
-     841,   886,    56, -1267, -1267, -1267,   518, -1267,   528, -1267,
-   -1267,  1675, -1267, -1267,   456,   900, -1267,   490,   900, -1267,
-   -1267,  7269, -1267,   940,   946,  8236, -1267, -1267,   536,  1525,
-    7667,  6831,  1101, -1267,  1101,   675,   675, -1267, -1267, -1267,
-   -1267, -1267, -1267,   675,  7269,  1956, -1267, -1267,  8828,  1786,
-   -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,  9524,
-    9760, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
-   -1267, -1267, -1267, -1267, -1267,  2178, -1267,   446,   945,   961,
-     968,   800,   973,   976,   981,  2591, -1267, -1267,   939,   225,
-     982, -1267, -1267,   987, -1267, -1267, -1267,  8477, -1267, -1267,
-   -1267, -1267, -1267,  2973, -1267,  8119,  8119, -1267,   675,  2178,
-   10547,  7742, -1267, -1267, -1267, -1267,  8477,     8, -1267, -1267,
-    1101,   198, -1267, -1267,  8477, -1267,  5404, -1267, -1267,   675,
-     675,   579,  8594,   994,   993,   983,   998,   675, -1267, -1267,
-   -1267, -1267,  9019, -1267,   616, 10212, -1267,   198,  1004, -1267,
-    2178, 10298,  9996, -1267, -1267, -1267, -1267,   843,  2973, -1267,
-    7742,   687,  5806, -1267, -1267, -1267,  1900,   626,   990,   905,
-   10515,  1647,  7582, -1267, 10515, -1267, -1267, -1267, -1267,   627,
-   -1267,  1013,   705,   154,  7885, -1267,  8860, -1267, -1267,  7885,
-   -1267,  8002,  7885, -1267, -1267,    81, -1267,   640,  1015,   658,
-    1021, -1267, -1267,  6061, -1267, -1267,   315, -1267, -1267,  9760,
-   -1267,   368,  9760, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
-   -1267, -1267, -1267, -1267, -1267,  9760, -1267, -1267,  9760,  9760,
-    9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,
-    9760,  9760,  9760,  9760,  9760,  9760,  3432,   518,  1212, -1267,
-   -1267,    84,    84, -1267, -1267,  8119, -1267, -1267,   987,   291,
-   -1267,   987, 10055, -1267, -1267,  8828,  6061,  1020, -1267,  8744,
-   -1267, -1267,   613, -1267,  1023,  1793,  1025,  1950,   136,   990,
-   -1267,    84,    84,   990,   407, -1267,    84,    84,   987, -1267,
-   -1267,    84,    84, -1267,   900,  8944,  1956, 10447,   356,   541,
-    8944, -1267,  4354, -1267,   990, -1267,  7269, -1267,   126,  7354,
-    7354,  1956,  9642,  1003, -1267,   789,  1008,  1010, -1267,  1026,
-    9583,   449, -1267,  1114,  1956,  7354,   291,  2178,   291,   687,
-     707,   900, -1267, -1267,   766,   900, -1267, -1267, -1267,   705,
-   -1267,   900,   198,  9019, -1267,   643,  1041,   647,  1045, -1267,
-     940,   198, -1267, -1267,  8477,   198,  1042,  8860,    81, -1267,
-    1307, -1267,   471,   481,   905, -1267,   905,  1047,  9760, -1267,
-     905, 10447, -1267, -1267,  1056, -1267, -1267, -1267,   291, -1267,
-   10373,   946, -1267,  7354,   694,  7667, -1267, -1267,   613,  1052,
-    1057,  1900,  2267, -1267, -1267, 10515,  9760, -1267, -1267,  1055,
-   -1267, -1267,  1048, -1267,  1055,  1063, 10178,  9760,  1046,  1051,
-     117,  1065,  1062,  1070,  1074, -1267,  1081,  1082,  6061, -1267,
-    9760, -1267,   658,  1520, -1267, -1267, -1267,    84,    84,  9701,
-    9760,  1077, -1267, -1267,   679, -1267,  9760, -1267, -1267,   821,
-   -1267, -1267, -1267, -1267,   525,   525,   415,   415,   844,   844,
-     844,   844,   338,   338,   853,   823,   831,   841,   886,  9760,
-     397,  9019,  1085,  1086,  1087,  1212, -1267, -1267, -1267, -1267,
-   -1267,  9019,   691, -1267,  7269, -1267,  6430,  8353, -1267, -1267,
-   -1267,  1793,  9019,   856,  1089,  1091,  1092,  1093,  1096,  1098,
-    1104, -1267,  3291,  1950, -1267, -1267, -1267, -1267, -1267, -1267,
-   -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
-   -1267,   987, -1267, -1267, -1267,   990, -1267, -1267, -1267, -1267,
-   -1267, -1267, -1267, -1267, -1267, -1267,  1105,  1106, -1267,   225,
-    1077,  9642, -1267, -1267, -1267,  9524,  1108, -1267, -1267, -1267,
-   -1267,   905,  5524,  1197, -1267, -1267, -1267, -1267,  1095,   225,
-   -1267, -1267,   987, -1267, -1267,   987,  1117,   987, -1267, -1267,
-   -1267, -1267, -1267, -1267,  6307, -1267,   198, -1267, -1267,   505,
-     507,  6307,  1549,  9760,  2098, -1267, -1267,  1099,    38,  1099,
-   -1267,   905, -1267,    84, -1267, -1267,  8627,   983, -1267, -1267,
-   -1267,   993,  1120,  1115, -1267, -1267,  1122,  1123, -1267,   694,
-    1698, -1267,   576, -1267,  2267,   990, -1267, -1267,  1126, 10515,
-    7582,  8119,  1129, -1267, -1267,  1125,  1135,  1118, -1267,  9760,
-    1141,   190,  1136, -1267,  1142,   291,  1142, -1267, -1267,  1142,
-   -1267,  1147,  1152,  1154,  1520, -1267, -1267, -1267,  9524, -1267,
-   -1267, -1267,  1163,  9760,   986, -1267,  9760, -1267,   986, -1267,
-   -1267,  9760, -1267,   894,   900, -1267, -1267, -1267, -1267, -1267,
-   -1267, -1267,   946,  8236, -1267, -1267,  6553,  1171, -1267,   898,
-     900, -1267,   920,   936,   900, -1267,   675,  7112, -1267, -1267,
-   -1267,  9019,  9019, -1267,  7742,  7742,  1172,  1167,  1168,  1175,
-   -1267,   670,   111,  1077, -1267,   986, -1267,  9583, -1267,  9760,
-     540, -1267,  5932,  1180,  1181,  9465,  1182,  1185,    -8,    40,
-      86,  9760,  1191,   198,  9760,  9760,  1177,   585,  1169, -1267,
-   -1267, -1267,  1187, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
-   -1267, -1267,   905,  1195,  9760, -1267,  9019,  9019,    84,  1201,
-   -1267,  8711, -1267, -1267,   862, -1267,  2098, -1267, -1267, -1267,
-   -1267,  1307, -1267, -1267,  1198, -1267, -1267, -1267, -1267,  1202,
-    1698, -1267, -1267,  1196, -1267,  1055, -1267, -1267,  2178,  1210,
-   -1267, -1267, -1267,   704,  1217, -1267,   117,  1214,  9760,  1200,
-     117,   117,  1224,   950,   900, -1267, -1267,  1026,  9760,  1230,
-    1163, -1267,   943, -1267, -1267,  1220, -1267,    78, -1267,  1231,
-    1220, -1267,  1234, -1267, -1267,   987,  1236,  6184,  1235,  1239,
-    1241, -1267, -1267,  1238, -1267, -1267,   987, -1267, -1267, -1267,
-   -1267,   987,  9760,  9760,   946,  1243, -1267, -1267, -1267, -1267,
-   -1267, -1267, -1267, -1267, -1267, -1267, -1267,  9760,  9760,  1244,
-    1248,  1220, -1267, -1267,   905, -1267, -1267, -1267,  7070,  7582,
-    9760,  9760,  1318,  9760, -1267,  1233, -1267,  1246, -1267,  1250,
-    9760,  1254,  9760,   938,  1255,    47,    84,  1805, -1267, -1267,
-    5524,  1256,   554, -1267, -1267, -1267, -1267, -1267, -1267, -1267,
-   -1267, -1267,  9281, -1267,  7742,  1260, -1267, -1267,  7582,   555,
-     561, -1267,  1273,  1262,   705,  1283, -1267,   256, -1267, -1267,
-   -1267, -1267,   987,  1282, -1267, -1267,  1288,  1321, -1267, -1267,
-    1321,  1321,   986,  1292,  1699,  1866, -1267,  1295, -1267,  9019,
-   -1267, -1267, -1267, -1267,  1298, -1267,  9019,  9019,  9019, -1267,
-   -1267,  1300, -1267,  1301,  1310,  1311,   725,  7429,  7548, -1267,
-   -1267, -1267, -1267,  1305, -1267,  7817,   709,   755,  1317,   758,
-    5667, -1267, -1267, -1267,   582, -1267,   768,  1319,  1323,   198,
-    1369,   935, -1267, -1267,  9760, -1267,  9465,  9760, -1267, -1267,
-   -1267,  1320,  1326, -1267, -1267, -1267,  1324, -1267, -1267, -1267,
-   -1267, -1267, -1267,  7582,   705,  1330, -1267,  1313,   705,  9019,
-   -1267, -1267, -1267,   986, -1267, -1267, -1267, -1267, -1267, -1267,
-   -1267, -1267, -1267, -1267, -1267, -1267,  1337,  1340, -1267, -1267,
-   -1267, -1267, -1267, -1267, -1267,  1343, -1267,  1342, -1267,  9465,
-     276,  9760,  9465, -1267,  1346,  9760, -1267,   281,  1361,  1363,
-   -1267, -1267,  1355,  1356,  1339, -1267,   901, -1267, -1267, -1267,
-    1956,  2178,  1347, -1267,   401,  9760, -1267,   783, -1267,  1220,
-     986,   986,  1362,  1364,  1365,  1367, -1267, -1267,  7742,  1357,
-   -1267,  1438,  9760,  1352, -1267, -1267,  9375, -1267,   791, -1267,
-    1360,  9465,  1368, -1267, -1267,  1386, -1267,  1389, -1267,  1407,
-    1409, -1267,  1376,  7582, -1267, -1267, -1267,   705,   291,  1403,
-    1382,  1405,  1404,  1220,  1220, -1267, -1267, -1267, -1267, -1267,
-    9465,   240, -1267,   474, -1267, -1267,  6917, -1267, -1267,  1385,
-    9760, -1267,  9760,  6917,   198,  8860,   198,  8860,  1410, -1267,
-    1411, -1267, -1267,  1408, -1267, -1267,   802, -1267, -1267, -1267,
-   -1267,  1422,  1423, -1267,  9760,  9760, -1267, -1267,   979,    59,
-   -1267, -1267,  1390, -1267,   979, -1267, -1267,  2042,   291, -1267,
-   -1267,   198,  8860,   198,  8860,  1427,  1412,   291, -1267, -1267,
-   -1267, -1267,  9375,  1425,   979,  6995,  9760,  9285,  1426,   979,
-    1435,  2042,  2360, -1267, -1267, -1267,  1436, -1267, -1267, -1267,
-   -1267,  8119, -1267, -1267, -1267,  9148, -1267,  9375, -1267, -1267,
-    1416,  9058, -1267, -1267,  9285,   198,  2360,   198,  1441,  1445,
-     814, -1267,  9148, -1267, -1267, -1267,  9058, -1267, -1267, -1267,
-     198,   198, -1267, -1267, -1267, -1267, -1267, -1267, -1267, -1267
+    6864,  4432, -1263,    10, -1263, -1263, -1263, -1263, -1263, -1263,
+   -1263,   -12, -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263,
+   -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263,    67,    67,
+      67,   564,   950,    20,  6985,   166, -1263, -1263, -1263, -1263,
+   -1263,    71, -1263, -1263, -1263,  1431,   111, -1263, -1263, -1263,
+   -1263,  3253, -1263, -1263, -1263, -1263,    83,   193, -1263,  1119,
+   -1263, -1263, -1263, -1263,   213,  1691,   349,    98,  7106, -1263,
+   -1263,  3253,   817, -1263, -1263,   596,   492,  5210,  1011,  1044,
+     596,  1122, -1263, -1263,   838,   957, -1263,   596,  1203, -1263,
+     236, -1263,   406,   508, -1263, -1263, -1263, -1263,   429,   193,
+      67, -1263,    67, -1263, -1263, -1263, -1263,  4697,  1119, -1263,
+   -1263,  1119, -1263,   434, -1263,  7806, -1263, -1263,  2149,  8896,
+   -1263,   644,   644,   644, -1263, -1263, -1263,    67, -1263, -1263,
+   -1263,   436,   458,   468, -1263, -1263, -1263,   480, -1263, -1263,
+   -1263, -1263, -1263,   498,   503, -1263, -1263,    77,  8347,  2436,
+     255,   519,   522,   535,   547,   585,   603,  8929,  6488,   597,
+   -1263,  4574, -1263, -1263, -1263, -1263,   608, -1263,   -37,  5487,
+    5487, -1263,   539,   241, -1263, -1263, -1263, -1263,   624,   287,
+     313,   327,    67,   621, -1263, -1263,  1691,  2813,   734, -1263,
+     120, -1263,    67,    67,   193, -1263, -1263,   204, -1263,    67,
+      67, -1263,  2931,   664,   675,   644,  6274, -1263, -1263, -1263,
+    3253, -1263, -1263,   596, -1263, -1263, -1263,   193, -1263,  1119,
+      83, -1263,  7457, -1263,   644,   644,   644,   193, -1263,   564,
+   -1263,  3379, -1263, -1263,   671,   644, -1263,   644, -1263,    71,
+    8347, -1263,   715, -1263,   950,   724,   644, -1263,   564,   704,
+     714, -1263,  6985,   544, -1263, -1263, -1263,  8708, -1263, -1263,
+    8263, -1263,   734,   123,  9697,  8896,  2149,  2931, -1263,   205,
+   -1263, -1263,  7806,  1119,   738,  5343, -1263, -1263,   211, -1263,
+   10116,   739,   650,  9756,   757,  9697,  9815, -1263,   763, -1263,
+   -1263, -1263, -1263, -1263, -1263,  9874,  9874,  8111,   111, -1263,
+   -1263, -1263, -1263, -1263, -1263, -1263,   795, -1263,  1259,  2219,
+    8347,  9697, -1263,   496,   315,   375,   430,   719,   760,   770,
+     771,   807,   114, -1263, -1263, -1263,   814, -1263,   402, -1263,
+   -1263,  2436, -1263, -1263,   104,   792, -1263,   372,   792, -1263,
+   -1263,  4697, -1263,   802,   812,  8465, -1263, -1263,   721,  1811,
+    7892,  6274,   596, -1263,   596,   644,   644, -1263, -1263, -1263,
+   -1263, -1263, -1263,   644,  4697,  1119, -1263, -1263,  8929,  1749,
+   -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263,  4858,
+    9697, -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263,
+   -1263, -1263, -1263, -1263, -1263,  2149, -1263,   677,   823,   827,
+     829,   862,   831,   834,   836,  2813, -1263, -1263,   842,    83,
+     841, -1263, -1263,   837, -1263, -1263, -1263,  8708, -1263, -1263,
+   -1263, -1263, -1263,  2931, -1263,  8347,  8347, -1263,   644,  2149,
+    6398,  7967, -1263, -1263, -1263, -1263,  8708,   123, -1263, -1263,
+     596,   193, -1263, -1263,  8708, -1263,  5038, -1263, -1263,   644,
+     644,   474,  8741,   848,   849,   824,   850,   644, -1263, -1263,
+   -1263, -1263,  9167, -1263,   507, 10150, -1263,   193,   853, -1263,
+    2149, 10237,  9933, -1263, -1263, -1263, -1263,   898,  2931, -1263,
+    7967,   734,  5424, -1263, -1263, -1263, -1263,  1676,   514,   844,
+     950,  5343,  1027,  7806, -1263,  5343, -1263, -1263, -1263, -1263,
+     545, -1263,   859,   650,   244,  8111, -1263,  9014, -1263, -1263,
+    8111, -1263,  8229,  8111, -1263, -1263,   111, -1263,   548,   867,
+     926,   872, -1263, -1263,  6240, -1263, -1263,   387, -1263, -1263,
+    9697, -1263,   467,  9697, -1263, -1263, -1263, -1263, -1263, -1263,
+   -1263, -1263, -1263, -1263, -1263, -1263,  9697, -1263, -1263,  9697,
+    9697,  9697,  9697,  9697,  9697,  9697,  9697,  9697,  9697,  9697,
+    9697,  9697,  9697,  9697,  9697,  9697,  9697,  4047,   814,  1636,
+   -1263, -1263,    67,    67, -1263, -1263,  8347, -1263, -1263,   837,
+     544, -1263,   837,  9992, -1263, -1263,  8929,  6240,   873, -1263,
+    8896, -1263, -1263,   608, -1263,   880,   787,   882,  2301,   259,
+     844, -1263,    67,    67,   844,   286, -1263,    67,    67,   837,
+   -1263, -1263,    67,    67, -1263,   792,  9047,  1119, 10388,   450,
+     493,  9047, -1263,  8263, -1263,   844, -1263,  4697, -1263,   -35,
+    7577,  7577,  1119,  5632,   869, -1263,   326,   874,   889, -1263,
+     881,  5487,   342, -1263,   977,  1119,  7577,   544,  2149,   544,
+     734,   382,   792, -1263, -1263,   405,   792, -1263, -1263, -1263,
+     650, -1263,   792,   193,  9167, -1263,   570,   918,   602,   921,
+   -1263,   802,   193, -1263, -1263,  8708,   193,   940,  9014,   111,
+   -1263,  1310, -1263,   353,   395,   950, -1263,   950,   941,  9697,
+   -1263,   950, 10388, -1263, -1263,   948, -1263, -1263, -1263,   544,
+   -1263, 10313,   812, -1263,  7577,   987,  7892, -1263, -1263,   608,
+     955,   960,  1676,  3085, -1263, -1263,  5343,  9697, -1263, -1263,
+     947, -1263, -1263,   956, -1263,   947,   967, 10116,  9697,   949,
+     954,   180,   972,   975,   984,   993, -1263,  1002,  1005,  6240,
+   -1263,  9697, -1263,   926,  1965, -1263, -1263, -1263,    67,    67,
+    9638,  9697,   992, -1263, -1263,   615, -1263,  9697, -1263, -1263,
+     711, -1263, -1263, -1263, -1263,   496,   496,   315,   315,   375,
+     375,   375,   375,   430,   430,   719,   760,   770,   771,   807,
+    9697,   330,  9167,  1006,  1007,  1008,  1636, -1263, -1263, -1263,
+   -1263, -1263,  9167,   620, -1263,  4697, -1263,  6612,  8583, -1263,
+   -1263, -1263,   787,  9167,   937,  1012,  1014,  1022,  1023,  1024,
+    1029,  1036, -1263,  3424,  2301, -1263, -1263, -1263, -1263, -1263,
+   -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263,
+   -1263, -1263,   837, -1263, -1263, -1263,   844, -1263, -1263, -1263,
+   -1263, -1263, -1263, -1263, -1263, -1263, -1263,  1039,  1043, -1263,
+      83,   992,  5632, -1263, -1263, -1263,  4858,  1042, -1263, -1263,
+   -1263, -1263,   950,  5809,  1095, -1263, -1263, -1263, -1263,  1030,
+      83, -1263, -1263,   837, -1263, -1263,   837,  1048,   837, -1263,
+   -1263, -1263, -1263, -1263, -1263,  6488, -1263,   193, -1263, -1263,
+     407,   410,  6488,  2038,  9697,  2697, -1263, -1263,  1037,    53,
+    1037, -1263,   950, -1263,    67, -1263, -1263,  8781,   824, -1263,
+   -1263, -1263,   849,  1059,  1021, -1263, -1263,  1062,  1063, -1263,
+     987,  2296, -1263,   528, -1263,  3085,   844, -1263, -1263,  1071,
+    5343,  7806,  8347,  1073, -1263, -1263,  1074,  1084,  1066, -1263,
+    9697,  1088,   282,  1083, -1263,  1091,   544,  1091, -1263, -1263,
+    1091, -1263,  1097,  1105,  1115,  1965, -1263, -1263, -1263,  4858,
+   -1263, -1263, -1263,  1113,  9697,   605, -1263,  9697, -1263,   605,
+   -1263, -1263,  9697, -1263,   424,   792, -1263, -1263, -1263, -1263,
+   -1263, -1263, -1263,   812,  8465, -1263, -1263,  6736,  1120, -1263,
+     568,   792, -1263,   594,   631,   792, -1263,   644,  3969, -1263,
+   -1263, -1263,  9167,  9167, -1263,  7967,  7967,  1123,  1118,  1127,
+    1125, -1263,   558,   212,   992, -1263,   605, -1263,  5487, -1263,
+    9697,   420, -1263,  6116,  1129,  1135,  9579,  1136,  1137,   146,
+     206,   181,  9697,  1140,   193,  9697,  9697,  1106,   305,  1124,
+   -1263, -1263, -1263,  1143, -1263, -1263, -1263, -1263, -1263, -1263,
+   -1263, -1263, -1263,   950,  1141,  9697, -1263,  9167,  9167,    67,
+    1150, -1263,  8856, -1263, -1263,   722, -1263,  2697, -1263, -1263,
+   -1263, -1263,  1310, -1263, -1263,  1148, -1263, -1263, -1263, -1263,
+    1154,  2296, -1263, -1263,  1139, -1263,   947, -1263, -1263,  2149,
+    1158, -1263, -1263, -1263,   627,  1151, -1263,   180,  1138,  9697,
+    1146,   180,   180,  1165,   653,   792, -1263, -1263,   881,  9697,
+    1164,  1113, -1263,  1068, -1263, -1263,  1163, -1263,   219, -1263,
+    1168,  1163, -1263,  1171, -1263, -1263,   837,  1173,  6364,  1172,
+    1175,  1177, -1263, -1263,  1180, -1263, -1263,   837, -1263, -1263,
+   -1263, -1263,   837,  9697,  9697,   812,  1179, -1263, -1263, -1263,
+   -1263, -1263, -1263, -1263, -1263, -1263, -1263, -1263,  9697,  9697,
+    1182,  1184,  1163, -1263, -1263,   950, -1263, -1263, -1263,  7382,
+    7806,  9697,  9697,  1240,  9697, -1263,  1160, -1263,  1170, -1263,
+    1174,  9697,  1178,  9697,  1032,  1185,    59,    67,  1380, -1263,
+   -1263,  5809,  1189,   442, -1263, -1263, -1263, -1263, -1263, -1263,
+   -1263, -1263, -1263,  9395, -1263,  7967,  1190, -1263, -1263,  7806,
+     454,   456, -1263,  1197,  1193,   650,  1210, -1263,   295, -1263,
+   -1263, -1263, -1263,   837,  1213, -1263, -1263,  1220,  1252, -1263,
+   -1263,  1252,  1252,   605,  1222,  1144,  1570, -1263,  1237, -1263,
+    9167, -1263, -1263, -1263, -1263,  1238, -1263,  9167,  9167,  9167,
+   -1263, -1263,  1239, -1263,  1241,  1242,  1245,   586,  7652,  7772,
+   -1263, -1263, -1263, -1263,  1244, -1263,  8042,   635,   640,  1249,
+     662,  5981, -1263, -1263, -1263,   460, -1263,   666,  1250,  1251,
+     193,  1306,   785, -1263, -1263,  9697, -1263,  9579,  9697, -1263,
+   -1263, -1263,  1255,  1257, -1263, -1263, -1263,  1262, -1263, -1263,
+   -1263, -1263, -1263, -1263,  7806,   650,  1270, -1263,  1254,   650,
+    9167, -1263, -1263, -1263,   605, -1263, -1263, -1263, -1263, -1263,
+   -1263, -1263, -1263, -1263, -1263, -1263, -1263,  1278,  1279, -1263,
+   -1263, -1263, -1263, -1263, -1263, -1263,  1282, -1263,  1284, -1263,
+    9579,    89,  9697,  9579, -1263,  1287,  9697, -1263,   136,  1302,
+    1311, -1263, -1263,  1297,  1299,  1280, -1263,   753, -1263, -1263,
+   -1263,  1119,  2149,  1300, -1263,   338,  9697, -1263,   667, -1263,
+    1163,   605,   605,  1314,  1315,  1320,  1328, -1263, -1263,  7967,
+    1304, -1263,  1376,  9697,  1309, -1263, -1263,  9489, -1263,   690,
+   -1263,  1313,  9579,  1321, -1263, -1263,  1331, -1263,  1333, -1263,
+    1351,  1361, -1263,  1337,  7806, -1263, -1263, -1263,   650,   544,
+    1362,  1339,  1365,  1364,  1163,  1163, -1263, -1263, -1263, -1263,
+   -1263,  9579,   234, -1263,   427, -1263, -1263,  7227, -1263, -1263,
+    1346,  9697, -1263,  9697,  7227,   193,  9014,   193,  9014,  1369,
+   -1263,  1370, -1263, -1263,  1367, -1263, -1263,   697, -1263, -1263,
+   -1263, -1263,  1371,  1373, -1263,  9697,  9697, -1263, -1263,   839,
+      85, -1263, -1263,  1358, -1263,   839, -1263, -1263,  2097,   544,
+   -1263, -1263,   193,  9014,   193,  9014,  1387,  1366,   544, -1263,
+   -1263, -1263, -1263,  9489,  1384,   839,  7306,  9697,  9399,  1388,
+     839,  1392,  2097,  3030, -1263, -1263, -1263,  1399, -1263, -1263,
+   -1263, -1263,  8347, -1263, -1263, -1263,  9261, -1263,  9489, -1263,
+   -1263,  1378,  9171, -1263, -1263,  9399,   193,  3030,   193,  1401,
+    1403,   712, -1263,  9261, -1263, -1263, -1263,  9171, -1263, -1263,
+   -1263,   193,   193, -1263, -1263, -1263, -1263, -1263, -1263, -1263,
+   -1263
 };
 
@@ -1763,29 +1767,29 @@
 static const yytype_int16 yypgoto[] =
 {
-   -1267,  4051,  2784, -1267,   133, -1267,  1353,   867,  -240, -1267,
-   -1267,   504,  -528,  -489,  -834, -1001, -1267,   -77,  4776,     0,
-   -1267,   793,   489,   531,   722,   534,   999,  1001,  1005,  1007,
-    1002, -1267,   711,  -584,  4023,  -739, -1267, -1267,   606,  -227,
-    -674,  -263, -1267,   335, -1267,   382,  -963, -1267, -1267,   119,
-   -1267,  -732, -1049,   228, -1267, -1267, -1267, -1267,    54, -1266,
-   -1267, -1267, -1267, -1267, -1267, -1267,   302, -1050,    23, -1267,
-    -171, -1267,   482,   277, -1267,   153, -1267,  -355, -1267, -1267,
-   -1267,   538,  -612, -1267, -1267,     9,  -990,   219,  2319, -1267,
-   -1267, -1267,  -124, -1267,   110,    36,  -188,  1213,  3869, -1267,
-   -1267,    12,    61,   970,  1623, -1267,  1495, -1267, -1267,    21,
-    1827, -1267,  2153,  1937, -1267, -1267, -1267,  -641, -1267,   911,
-     914,   521,   695,   -93, -1267, -1267, -1267,   906,   690,  -521,
-   -1267,  -507,  -417,  -420, -1267, -1267,  -914,  -941,  -147,   -54,
-    1019,    19, -1267,  2311,   381,  -366,  -185,  -122,   649,   745,
-   -1267,   964, -1267,  2435,  1823,  -463,   895, -1267, -1267,   693,
-   -1267,  -225, -1267,   103, -1267, -1267, -1267, -1263,   408, -1267,
-   -1267, -1267,  1139, -1267,    42, -1267, -1267,  -832,   -94, -1230,
-    -162,  2364, -1267,  3117, -1267,   908, -1267,  -103,   120,  -184,
-    -183,  -178,     7,   -40,   -39,   -36,  1505,     4,    32,    71,
-      92,  -173,  -172,  -170,  -168,  -306,  -510,  -503,  -496,  -559,
-    -313,  -498, -1267, -1267,  -514,  1064,  1072,  1076,  1925,  4399,
-    -524,  -566,  -556,  -543,  -548, -1267,  -508,  -723,  -722,  -717,
-    -582,  -166,  -229, -1267, -1267,   283,   102,     6, -1267,  3380,
-     108,  -611,  -462
+   -1263,  3947,  2776, -1263,    44, -1263,   887,   695,  -232, -1263,
+   -1263,   487,  -523,  -501,  -842,  -960, -1263,  -216,  4593,     0,
+   -1263,   122,   359,   368,   437,   403,   964,   965,   963,   966,
+     969, -1263,   998,  -607,  4667,  -955, -1263, -1263,   569,  -183,
+    -658,   414, -1263,  1406, -1263,   347, -1148, -1263, -1263,    84,
+   -1263,  -949, -1074,   191, -1263, -1263, -1263, -1263,    17, -1186,
+   -1263, -1263, -1263, -1263, -1263, -1263,   265, -1262,    33, -1263,
+    -866, -1263,   445,   246, -1263,   124, -1263,  -320, -1263, -1263,
+   -1263,   506,  -835, -1263, -1263,    19,  -980,    55,   606, -1263,
+   -1263, -1263,  -220, -1263,   129,  1096,  -190,  1478,  3486, -1263,
+   -1263,    96,   144,  1103,  1793, -1263,  1550, -1263, -1263,    27,
+    1989, -1263,  2286,  1081, -1263, -1263, -1263,  -632, -1263,   884,
+     886,   488,   668,  -575, -1263, -1263, -1263,   875,   659,  -511,
+   -1263,  -466,  -248,   801, -1263, -1263,  -959,  -944,  -218,   636,
+     989,    92, -1263,   209,   354,  -244,  -203,  -140,   611,   717,
+   -1263,   932, -1263,  2427,  1924,  -447,   860, -1263, -1263,   647,
+   -1263,  -235, -1263,   189, -1263, -1263, -1263, -1245,   370, -1263,
+   -1263, -1263,  1098, -1263,     2, -1263, -1263,  -849,  -115, -1223,
+    -150,  2775, -1263,  2462, -1263,   854, -1263,  -127,    40,  -178,
+    -174,  -173,     7,   -43,   -41,   -36,  1803,    12,    18,    21,
+    -101,  -168,  -162,  -160,  -144,  -317,  -520,  -513,  -497,  -545,
+    -300,  -486, -1263, -1263,  -547,  1009,  1026,  1028,  1598,  4212,
+    -563,  -557,  -544,  -532,  -458, -1263,  -514,  -722,  -720,  -718,
+    -585,  -194,  -291, -1263, -1263,   769,   138,   -88, -1263,  3371,
+     239,  -624,  -483
 };
 
@@ -1793,607 +1797,612 @@
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -529
+#define YYTABLE_NINF -530
 static const yytype_int16 yytable[] =
 {
-      51,   115,   398,   399,   759,   151,   152,    99,   400,   153,
-     116,   745,    71,   401,   402,   451,   403,   427,   404,   951,
-     952,    78,   734,    52,   268,   953,   409,   719,   856,   808,
-    1051,   724,  1167,   833,    51,   438,   604,   118,   815,   809,
-    1362,    99,   503,   599,   906,   149,    71,   382,   383,   154,
-     819,    51,   810,   936,   786,    78,   826,    52,   162,   666,
-     668,    72,   662,   706,  1152,   187,  1175,   203,   210,   124,
-     517,    51,   194,   816,   408,   217,   145,   155,   227,    33,
-     220,   671,   398,   399,   406,   804,   125,   160,   400,   675,
-    1150,  1151,   805,   401,   402,    72,   403,   807,   404,   806,
-     473,   475,   108,   108,   910,  -239,  -239,   115,   424,   848,
-      65,  1229,  1284,   261,  1177,   115,   156,   204,   267,   272,
-      98,   474,   846,   846,   865,    33,   723,   262,  1176,   213,
-     263,    33,    33,   469,  1120,   623,   108,   820,   846,   627,
-    1443,   823,    33,   259,    65,   736,   151,   152,   310,   149,
-     153,   160,  1424,   410,    98,   565,   162,   115,   345,   167,
-    1179,   210,   840,   342,   406,   150,   843,  1234,   372,   951,
-     952,    98,   900,   108,   146,   953,  1178,    33,  -239,   591,
-     713,  1161,   918,  1285,   326,   190,   187,   187,    98,   566,
-     154,    98,   177,   340,   162,  1235,   846,   157,   665,   667,
-     291,   804,   267,   253,   418,   410,   410,  1180,   805,   790,
-      51,  1157,   847,   847,   479,   806,   410,   162,   155,    58,
-     117,  1512,   210,   167,   660,  1424,   151,   152,   847,   441,
-     153,  1314,   939,  1317,  1319,   808,   144,  1158,   437,   474,
-     310,   177,   429,   879,   177,   809,   432,  1061,  1527,   817,
-    1050,   596,    51,    58,   999,   819,   330,   156,   810,    99,
-     272,   716,   728,  1152,    71,   272,   267,   267,   729,    98,
-     148,   976,   115,    78,   162,    52,   326,   517,    78,   407,
-    1167,    98,   517,   440,   604,   517,   847,   211,   730,  1000,
-     221,   804,   481,   469,   461,  1184,  1185,   310,   805,   498,
-    1074,   649,   657,   987,  1099,   806,   397,   190,   432,  1065,
-     310,   486,   469,    72,   707,   695,   172,  1152,   434,   886,
-     469,   706,  1382,  1383,  1100,   281,   568,  1382,  1383,   664,
-      98,   149,   445,   519,   164,   669,   169,   182,   372,   780,
-    1454,   115,    98,  1150,  1151,   345,   160,   584,   330,   597,
-     615,   458,   177,   808,   108,  1097,   795,  1181,  1051,   407,
-     170,   972,    65,   809,   620,   112,  1158,   470,   620,  1224,
-    1307,   977,    98,  1003,   202,   657,   810,   583,    43,    44,
-     434,   588,   988,  -294,   624,   282,   477,  1470,   628,   112,
-    1308,   376,   174,   248,  1384,   267,   816,   842,   164,  1393,
-     621,   833,    43,    44,   625,   187,   177,   377,   696,  1482,
-    1166,   213,   372,   177,   112,  1487,   141,   142,   167,   876,
-     253,   332,  1498,   267,  1500,   310,   310,    43,    44,   267,
-     752,   620,   555,   556,   254,  1507,  1167,  1152,    78,   251,
-    1514,   439,   112,  1167,  1138,  1140,  1106,  -524,    33,   591,
-     253,    98,   115,   593,   591,    43,    44,    78,   244,   386,
-     264,   326,   326,  1082,  1419,    78,  1085,   557,   558,   598,
-     267,    58,   836,   -12,   706,   387,   837,  1118,   267,  1369,
-     620,   177,    51,   757,   333,   372,   712,   869,   680,    99,
-     940,   334,   115,   433,    71,  1167,  1223,   658,   177,   389,
-     604,   118,   177,    78,   310,    52,   115,   998,  -448,   310,
-     491,   310,   310,   492,  1215,   390,   695,   740,   857,   743,
-     824,  1407,   596,   345,  1511,   190,   486,   470,   326,   416,
-     486,   971,   213,   330,   330,  1408,  1413,  1414,   551,   552,
-     519,   391,   519,    72,  1522,   519,   470,   326,   519,  -449,
-     469,  1526,   435,   867,   470,   433,  1000,   392,  1106,   253,
-     332,   410,   443,   900,   858,   980,   635,   568,   568,   576,
-     658,   410,   707,  1259,  1260,   310,   915,   897,  1050,   277,
-     521,  1147,  1148,   859,   108,   620,   345,  1149,   393,   615,
-     704,   901,    65,   164,  1455,   597,  1343,   597,   797,  1039,
-     330,   903,    98,   579,   394,   410,   598,   902,  1456,   696,
-      39,   326,   175,   176,    42,   620,   279,   904,   998,   330,
-     620,   793,   615,    43,    44,   901,   620,   903,   280,   620,
-     620,   567,   518,   410,   695,   835,  1195,  1196,   335,    47,
-      48,  1062,   574,  1063,   695,   620,   548,   267,   575,   371,
-     849,   832,   549,   550,  1428,   695,   588,   838,  1345,   287,
-    1164,   839,   841,   864,  1010,     2,   207,     4,     5,     6,
-       7,  1392,    43,    44,  1164,  1298,  1165,   115,   440,   336,
-     894,  1300,   337,   330,  1055,     8,     9,    10,    11,    12,
-    1290,  1299,   838,   676,   338,    78,  1081,  1301,   512,   575,
-     378,    58,   740,   620,   920,   615,  1093,   371,   398,   399,
-     706,   712,   712,   680,   400,   803,    33,   598,  1346,   401,
-     402,    78,   403,   834,   404,   707,   375,   696,   593,   384,
-     697,   388,    37,  1016,    38,   684,   698,   696,   345,   396,
-     714,   725,   743,   743,    36,   498,   715,   726,   696,   177,
-    1428,   486,   213,   408,   739,  1428,  1462,   880,  1463,  1356,
-     740,   882,  1172,   740,   177,   425,   213,   740,   951,   952,
-     426,   742,   899,   410,   953,  1428,   673,   177,   448,    47,
-      48,  1409,  1428,  -372,   470,   568,  -112,   521,   291,   521,
-    -112,   406,   521,   965,   620,   521,   983,    -3,  1421,   966,
-     898,   597,   699,  -401,  1068,   978,  1068,   919,  1142,   596,
-     470,   698,  1509,   597,  1460,    47,    48,   591,  1211,  1321,
-     870,  1460,   410,  1339,   575,   459,  1323,  1324,  1325,   740,
-     979,   803,   598,     2,   207,     4,     5,     6,     7,   518,
-    1335,  1332,  -295,   502,   518,  1333,   460,   518,   704,     8,
-       9,    10,    11,    12,   695,   695,   940,   213,   482,   177,
-     940,   940,   310,   112,   229,   141,   142,    50,   114,  1340,
-    1480,  1421,  1342,  1508,    71,   740,    43,    44,   740,   873,
-      33,   410,  1347,    78,   345,   731,   506,   732,   740,  1368,
-     733,   345,   894,   737,   894,  1162,   797,  1410,   114,   114,
-      37,    50,    38,  1407,   852,  1429,   115,   511,    36,   695,
-     695,   740,    50,   418,   653,   410,  1476,   524,    50,   920,
-     920,   803,  1477,    72,   712,  1213,    50,  1039,  1532,  1217,
-     115,   310,    50,   598,   575,    50,   553,   554,    50,  1086,
-     969,   966,   680,  1266,  1267,   561,  1269,   696,   696,   559,
-     560,   114,   114,  1274,   743,  1276,   479,   332,   410,  1494,
-     684,   707,   562,   657,   108,   486,  1088,   326,   897,   817,
-     332,   596,    65,   563,  1305,    50,   332,   410,    50,   112,
-    -296,   141,   142,   345,   564,    50,   407,     8,     9,    10,
-      11,    12,    43,    44,  1206,  1352,  1353,   878,  1277,  1278,
-    1279,   704,   696,   696,   620,   620,   885,  1123,  1106,   410,
-     887,  1134,  1064,   410,   898,   339,    50,   112,    33,   832,
-    1402,   966,   310,  1355,  1111,  1382,  1383,  1112,    50,  1113,
-      43,    44,   108,  1137,  1169,   596,  1230,  1231,   707,   330,
-     764,   765,   230,    78,   598,   231,    36,   440,   235,  1139,
-     237,   596,   659,    50,    50,  1294,   585,   246,  1228,   650,
-     112,   115,    -3,  1220,  1363,   410,   894,  1111,  1363,    50,
-    1112,   894,  1113,    43,    44,   651,  1381,    50,   508,  1389,
-     920,    58,   652,    72,   766,   767,    50,   654,   267,    50,
-     655,   834,   695,   772,   773,   656,   114,   680,   661,   695,
-     695,   695,   258,   546,   547,     2,   207,     4,     5,     6,
-       7,   114,   685,   686,  1388,   114,   690,    39,   688,    50,
-     114,    42,  -243,  1427,   108,   716,   727,   345,  1431,   741,
-      43,    44,   470,    50,    50,   749,   798,   -14,   546,   800,
-      50,   811,   -15,  -297,   854,   861,   855,    50,  1295,  1087,
-       8,     9,    10,    11,    12,   881,    45,  1453,   658,   883,
-     888,   931,   695,   899,    47,    48,   908,  1444,   272,   115,
-    -422,  -528,    37,   546,    38,   715,   923,   933,   220,   944,
-     937,    33,   945,   230,   946,   696,   898,   938,   947,   684,
-     310,   898,   696,   696,   696,   948,   949,   963,    50,   973,
-     974,   975,    71,   989,   620,   990,   991,   992,   115,    36,
-     993,    78,   994,    68,   119,    50,    50,  1086,   995,  -410,
-    -409,  1060,     8,     9,    10,    11,    12,  1018,  1052,   213,
-    1054,  1058,    50,   893,  1075,  1076,    50,   704,  1077,  1078,
-    1084,    58,  1521,  1094,  1088,   740,   636,    68,  1521,  1095,
-     496,    72,  1096,    33,  1098,   696,  1101,   620,   620,  1521,
-     958,  1103,    50,  1521,   161,   272,  1104,  1405,  1105,   525,
-     310,   108,    50,   526,   527,   528,  1520,   768,   769,   770,
-     771,    36,  1169,  1108,   222,  1132,  1153,  1154,  1155,  1156,
-      50,    78,   108,  1170,  1171,  1173,    50,   529,  1174,   530,
-      65,   531,   532,   115,  1182,  1188,    -3,   398,   399,  1193,
-     108,  1186,  1086,   400,   704,  1198,  1203,  1201,   401,   402,
-     260,   403,   230,   404,   235,   567,   440,   410,   491,  1207,
-    1214,    72,   114,    47,    48,  1212,  1216,    50,  1219,  1088,
-    1232,   761,   762,   763,   684,    50,  1225,  1236,  1238,    50,
-    1240,  1241,  1245,    50,   113,  1242,   114,  1243,   114,  1252,
-    1261,   267,   331,   112,  1262,   141,   239,  1268,  1183,  1271,
-     260,   350,   108,  1493,  1296,  1289,    43,    44,   620,  1404,
-     470,    39,  1272,   184,   185,    42,  1273,   211,   221,   406,
-    1275,  1283,  1302,   114,    43,    44,  1304,  1306,   114,   909,
-     405,  1310,   240,   115,  1311,   108,  1312,   241,  1315,    58,
-     230,  1320,  1086,   657,  1322,   423,  1328,  1329,   428,   430,
-     892,  1338,   410,   161,  1330,  1331,   115,  1087,    47,    48,
-    1341,  1279,  1348,   115,  1357,   115,  1349,   115,  1169,  1088,
-    1358,   893,  1359,  1365,   446,  1169,   114,    78,   449,  1366,
-     450,   151,   152,  1376,    78,   153,  1377,  -411,  1380,   457,
-    1391,  1395,    50,  1397,    50,    68,  1406,  1492,  1399,  1400,
-     471,  1467,   115,  1467,   115,  1401,  1415,  1333,  1416,  1417,
-     478,  1418,  1420,    50,   439,   115,  1425,    72,   430,    58,
-     970,  1492,  1492,   177,    72,    76,  1430,  1169,    50,   162,
-    1434,   310,   114,  1436,  1432,   108,    78,  1438,  1467,  1440,
-    1467,    50,  1442,   114,    50,   114,  1492,  1447,  1448,  1449,
-    1450,  1461,  1087,   372,  1471,  1473,  1486,  1475,   108,    76,
-       8,     9,    10,    11,    12,   108,   470,   326,  1478,  1479,
-    1501,  1187,   959,   470,  1506,  1513,    72,    50,  1502,  1515,
-    1517,   114,  1523,   114,   260,  1530,   163,   114,   589,  1531,
-     774,    33,  1011,   775,   617,   114,   223,   778,   776,  1110,
-     195,   777,  1288,   218,  1481,  1394,   228,   622,    50,    50,
-    1533,   622,  1351,  1218,   407,  1367,  1464,   108,   889,    36,
-    1192,   890,  1200,    50,  1069,   470,   911,  1073,   792,    39,
-    1017,   184,   185,    42,   909,   860,   463,  1107,   658,   330,
-     925,   477,    43,    44,  1350,   131,  1297,   132,   133,   134,
-    1083,   709,  1087,    39,     0,   184,   185,    42,    43,    44,
-     471,   782,     0,   742,   934,   410,    43,    44,   595,   783,
-     596,    47,    48,   784,   350,    58,    47,    48,     0,   471,
-     909,     0,    58,   353,   163,     0,     0,   471,     0,     0,
-       0,     0,   892,     0,   410,     0,   373,     0,    50,     0,
-      47,    48,     0,     0,     0,   691,     0,     0,   430,     0,
-      50,     0,  1121,     0,     0,     8,     9,    10,    11,    12,
-       0,   214,   163,   705,     0,    68,   496,     0,     0,     0,
-     233,     0,     0,   430,    58,     0,     0,   430,     8,     9,
-      10,    11,    12,     0,     0,   163,    33,     0,  1468,     0,
-    1468,   112,   636,   141,   142,     0,   447,   442,   114,     0,
-    1011,     0,     0,     0,    43,    44,   350,     0,     0,    33,
-       0,     0,   214,     0,    36,     0,     0,    76,     0,    39,
-       0,     0,    76,    42,     0,  1468,     0,  1468,     0,    50,
-     720,    50,    43,    44,     0,   721,     0,    36,   114,  1465,
-       0,  1469,     0,   112,     0,     0,   546,     0,     0,     0,
-    1111,   785,     0,  1112,   214,  1113,    43,    44,    45,     0,
-      39,    50,   184,   185,    42,     0,    47,    48,   622,   796,
-       0,     0,     0,    43,    44,     0,  1497,     0,  1499,   909,
-     813,   919,   114,   596,  1316,   508,     0,     0,   113,    47,
-      48,     0,     0,     0,     0,   636,     0,    79,   589,   186,
-       0,   114,     0,   589,     0,   114,   373,    47,    48,   622,
-       0,     0,   350,   350,     0,   214,   223,     0,     0,     0,
-    1528,     0,  1529,     0,     0,     0,     0,     0,   350,     0,
-      39,    79,   175,   176,    42,  1536,  1537,    39,   909,   909,
-       0,    42,     0,    43,    44,     0,   691,     0,     0,   753,
-      43,    44,   114,   214,   758,     0,     0,   471,   214,     0,
-     525,   216,     0,     0,   526,   527,   528,     0,   224,   375,
-       0,     0,     0,   497,     0,     0,   801,   243,   596,     0,
-     373,     0,    76,   471,    47,    48,   350,     0,   529,   114,
-     530,     0,   531,  1287,     0,   924,   353,     0,   430,     0,
-       0,    76,   463,    50,     0,     0,     0,     0,    50,    76,
-     112,     0,   216,     0,     0,     0,     0,  1111,     0,     0,
-    1112,   705,  1113,    43,    44,    50,   954,   353,     0,     0,
-       8,     9,    10,    11,    12,     0,     0,     0,     0,     0,
-       0,     0,     0,   214,    39,   353,     0,    76,    42,   114,
-       0,  1318,     0,     0,   216,   355,     0,    43,    44,     0,
-       0,    33,     0,     0,   691,     0,     0,     0,     0,   866,
-       0,   868,     0,     0,   691,   215,     0,   622,     0,     0,
-     986,     0,     0,   711,     0,   691,     0,     0,   353,    36,
-       0,    47,    48,     0,    39,   997,   184,   185,    42,     0,
-      39,   114,   175,   176,    42,     0,     0,    43,    44,     0,
-       0,     0,     0,    43,    44,   216,     0,     0,     0,     0,
-       0,   914,     0,   214,     0,     0,   215,     0,     0,     0,
-       0,     0,     0,   595,     0,   596,     0,     0,     0,   214,
-       0,    47,    48,     0,     0,    68,   909,     0,     0,    79,
-       0,   353,     0,   216,    79,     0,     0,     0,   216,     0,
-       0,     0,     0,   909,   214,     0,     0,   796,   215,   114,
-       0,   114,   114,     0,   705,     0,     0,  1066,     8,     9,
-      10,    11,    12,     0,     0,   412,    39,     0,   184,   185,
-      42,     0,   420,     0,   353,   353,     0,     0,     0,    43,
-      44,     0,     0,  1080,     0,     0,     0,     0,     0,    33,
-     353,     0,   430,   119,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    81,     0,  1491,     0,   410,   353,   215,
-       0,     0,     0,    47,    48,   909,   909,    36,     0,    76,
-       0,     0,    39,   216,   184,   185,    42,     0,   224,     0,
-     114,     0,     0,     0,     0,    43,    44,    81,     0,     0,
-       0,     0,     0,     0,   412,    76,   589,   215,   353,     0,
-       0,     0,   215,     0,     0,     0,     0,     0,     0,   428,
-       0,   892,   214,   410,   691,   691,     0,   350,   350,    47,
-      48,     0,     0,     0,   225,     0,     0,    50,    50,     0,
-       0,     0,     0,   353,     0,  1168,     0,   114,   114,     0,
-     214,     0,     0,     0,    79,   214,     0,     0,     0,     0,
-       0,   573,    39,   216,   184,   185,    42,     0,   355,   577,
-       0,     0,   580,    79,     0,    43,    44,     0,     0,   691,
-     691,    79,     0,     0,     0,   114,   353,     8,     9,    10,
-      11,    12,     0,     0,     0,     0,   353,   215,     0,   355,
-       0,   266,   223,     0,   216,     0,     0,   353,  1102,    47,
-      48,     0,     0,     0,     0,     0,     0,   355,    33,    79,
-       0,   356,     0,     0,   214,     0,     0,  1114,     0,    59,
-      59,  1114,   412,     0,     0,     0,   420,     0,   214,     0,
-       0,     0,     0,     0,    50,   114,    36,     0,     0,     0,
-     705,    39,     0,   143,   114,    42,     0,     0,     0,   497,
-     355,     0,     0,    59,    43,    44,     0,    76,    50,    50,
-       0,     0,     0,     0,     0,     0,     0,   215,  1114,     0,
-       8,     9,    10,    11,    12,     0,     0,     0,     0,   353,
-     711,     0,  1265,    50,     0,     0,   353,    59,    47,    48,
-      59,     0,   126,   129,   130,   242,   245,     0,     0,     0,
-       0,    33,   412,    68,     0,    81,     0,     0,   215,     0,
-      81,     0,   216,   355,     0,   691,     0,   705,     0,   214,
-       0,   119,     0,     0,     0,     0,     0,     0,     0,    36,
-       0,     0,     0,     0,    39,    88,   184,   185,    42,     0,
-     216,     0,     0,     0,     0,   216,     0,    43,    44,     0,
-       0,     0,   691,     0,     0,     0,   355,   355,     0,   691,
-     691,   691,     0,     0,   255,  1114,   256,     0,     0,    88,
-     350,   350,   355,  1491,     0,   410,     0,   348,     0,     0,
-       0,    47,    48,  1168,     0,     0,     0,     0,     0,     0,
-     355,     0,   573,   573,     0,     0,   353,   353,     0,   353,
-     353,    79,     0,     0,   225,     0,   226,     0,     0,     0,
-       0,     0,     0,     0,   216,     0,   119,    76,     0,     0,
-       0,     0,   691,     0,     0,     0,   215,    79,   216,     0,
+      51,   115,   151,   268,   152,   451,   746,    99,   398,   153,
+     760,   735,   399,   400,  1052,   427,   857,   438,   401,   261,
+     116,   952,   787,   953,   402,   954,   403,    78,  1051,   382,
+     383,   834,   600,    52,    51,   817,   145,   469,   409,   809,
+      98,    99,   404,  1168,   720,   149,  1151,  1152,   725,   605,
+     504,    51,   810,   816,   907,    58,   117,   154,   162,  1363,
+     406,    78,  1153,   155,   811,   187,   156,    52,   210,   342,
+     937,    51,   194,   624,    98,   217,   805,   628,   227,   474,
+    1185,  1186,   911,   806,   376,   150,   407,   424,   398,    58,
+     220,    98,   399,   400,   124,    33,    71,   663,   401,   807,
+     377,   717,   125,   177,   402,   190,   403,   115,    98,    33,
+     808,    98,   473,   475,   518,   115,   672,   821,   267,   272,
+     849,   824,   404,   211,   676,  1285,   221,  1121,   203,    65,
+      71,   281,  -239,  -239,   144,   866,  1383,  1384,   108,   108,
+     406,   820,   841,   151,    72,   152,   844,   827,   310,   149,
+     153,   592,   177,  1230,  1225,   177,   162,   115,   345,  1444,
+    1425,   210,    33,    65,   847,   847,   407,   901,   372,   410,
+     714,   952,   108,   953,  1162,   954,  1471,   146,    72,   204,
+     847,   667,   669,  1383,  1384,   148,   187,   187,  1167,    98,
+     408,   282,   805,   919,   162,   169,  1286,   469,   154,   806,
+     262,    98,   267,   263,   155,  -239,   661,   156,  1385,   108,
+      51,  1499,   213,  1501,   566,   807,   469,   162,   577,   170,
+     410,  1176,   210,   151,   469,   152,   397,   190,   157,   441,
+     153,  1214,   707,  1425,   253,  1218,   410,   474,   847,   977,
+     310,   143,   666,   668,   696,   809,    33,    33,   567,   724,
+      98,  1001,    51,   585,   461,  1394,  1180,  1062,   810,    99,
+     272,  1153,    98,   177,   291,   272,   267,   267,   737,  1000,
+     811,   729,   115,  1315,   162,  1318,  1320,   439,   658,    78,
+     650,  1178,   805,  1177,    78,    52,   708,  1066,  1075,   806,
+     167,  1168,    98,   242,   245,   796,   940,   310,   605,  1151,
+    1152,    33,  1513,  1181,   659,   807,   477,    58,   665,  1235,
+     310,   437,   172,  1158,   670,  1153,   988,   177,   418,   479,
+     410,   410,   518,  1069,   177,  1069,   569,   518,    33,  1528,
+     518,   149,   791,  1098,   182,  1455,   843,  1236,   372,  1159,
+    1512,   115,  1052,  1179,   492,   345,   820,   493,    71,   598,
+     616,   658,   202,  1004,   167,   887,  1051,   248,   817,   730,
+    1523,  1159,   386,   809,   621,   481,   440,  1527,   621,   253,
+     332,    98,   499,   818,  1182,   597,   810,   659,   387,   731,
+     287,    65,   848,   848,   781,  1483,   470,   330,   811,   599,
+     108,  1488,   177,    43,    44,   267,    72,  1100,   848,   834,
+     825,   112,   597,   141,   142,   187,   251,   509,   389,   177,
+    1308,  1508,   372,   177,    43,    44,  1515,  1101,   445,   513,
+    1420,   378,   592,   267,   390,   310,   310,   592,   877,   267,
+    1309,   621,   547,   548,   391,  1153,  1346,   458,  1429,   552,
+     553,  1107,   853,  1083,    78,   190,   696,  1168,   393,   434,
+     392,   741,   115,   455,  1168,   469,   848,   625,   859,  1408,
+     636,   629,   112,    78,   394,   972,  1119,   547,   554,   555,
+     267,    78,  1370,  1409,   902,    43,    44,   860,   267,   330,
+     621,   916,    51,  1086,  1224,   372,   580,   713,   410,    99,
+     903,   707,  1216,   115,   213,  -294,   871,   999,   410,   941,
+     870,   858,   547,   753,   981,   310,  1168,   115,  -525,    78,
+     310,   434,   310,   310,   605,    52,   904,   575,  1001,   874,
+     744,   410,    98,   576,   345,   556,   557,   599,   902,  1414,
+    1415,   904,   905,   868,  1429,  1139,  1141,    58,  1124,  1429,
+     410,  1165,   112,   253,  1063,   708,   470,  1064,  1456,   167,
+     -12,  1260,  1261,  1107,   898,    43,    44,  1166,   901,  1429,
+     558,   559,  1457,  1165,   696,   470,  1429,   837,   569,   569,
+     264,   838,  -448,   470,   696,  1299,   310,  1301,    71,  1291,
+     900,   741,  -449,   758,   594,   696,   621,   345,   638,   677,
+     616,  1300,  1461,  1302,   277,   576,   598,  1347,   598,  1461,
+       2,   207,     4,     5,     6,     7,    59,    59,   999,   705,
+     839,    65,   279,  1344,   840,   213,   621,   280,   549,   112,
+     108,   621,   698,   616,   550,   551,    72,   621,   699,   715,
+     621,   621,    43,    44,   333,   716,   804,   334,   599,   131,
+      59,   132,   133,   134,   707,   839,   621,  1011,   267,  1082,
+     335,  1509,    43,    44,     8,     9,    10,    11,    12,   384,
+     726,   177,   336,   740,   330,   330,   727,  1056,    37,   741,
+      38,   762,   763,   764,    59,  -112,   177,    59,   115,  -112,
+     112,   895,  1135,   798,   410,   881,    33,  1112,  1393,   177,
+    1113,   741,  1114,    43,    44,    50,   114,  1094,   708,   719,
+     337,   723,    78,  1333,   621,   921,   616,  1334,  1138,   836,
+     597,   371,   713,   713,    36,   398,  1017,   883,   338,   399,
+     400,   899,   375,   741,   850,   401,   114,   114,    78,    50,
+     966,   402,   330,   403,   291,   979,   967,   865,   388,   345,
+      50,   699,  1212,   744,   744,  1140,    50,   597,   576,   404,
+    1340,   330,   804,   599,    50,  1341,   741,  1150,   396,  1410,
+      50,   741,   440,    50,   348,  1357,    50,  1221,   406,   410,
+     952,   177,   953,  1463,   954,  1464,  1422,  1343,   425,   114,
+     114,  1348,  1411,   741,   696,   696,   569,   741,  1408,   426,
+     592,   253,   332,   410,   407,   621,    39,   984,   175,   176,
+      42,   408,   598,    50,   470,  1430,    50,  1143,   448,    43,
+      44,   741,  1477,    50,   598,   330,   560,   561,  1478,   499,
+     164,     2,   207,     4,     5,     6,     7,  1533,    59,  1510,
+     470,   970,   967,   576,  -372,   371,   213,   332,   410,   696,
+     696,   459,   804,  -401,    50,   854,  1353,  1354,  1481,  1422,
+     213,   460,   229,   503,   599,   835,    50,   482,    59,   732,
+     594,   733,    39,   310,   734,   941,    42,   738,   705,   941,
+     941,   507,   960,  1403,   967,    43,    44,   512,  1163,   525,
+     707,    50,    50,   562,   164,   345,  1383,  1384,   113,    37,
+      78,    38,   345,   895,   906,   895,   908,    50,  1231,  1232,
+     455,   802,   563,   597,   564,    50,   565,   115,   339,    47,
+      48,   765,   766,   112,    50,   141,   239,    50,    58,   586,
+     921,   921,   767,   768,   114,   713,    43,    44,   568,    -3,
+     410,   115,   310,  1065,   708,   899,    47,    48,   651,   114,
+     658,   213,   652,   114,   653,   898,   655,    50,   114,   656,
+    1087,   657,   240,   258,  1495,   744,   660,   241,   662,    71,
+     689,    50,    50,   773,   774,   599,   659,   686,    50,   691,
+     687,   900,  -243,   728,  1207,    50,   418,   654,   410,   433,
+     717,   798,   742,  1306,   345,  1295,  1088,   750,  1267,  1268,
+     799,  1270,    65,   769,   770,   771,   772,   801,  1275,   812,
+    1277,   108,   856,  1107,   -14,   621,   621,    72,   862,   -15,
+    1336,   708,   479,   332,   410,     2,   207,     4,     5,     6,
+       7,   705,   696,   310,   855,   112,    50,   141,   142,   696,
+     696,   696,   112,   882,   141,   142,   884,   348,    43,    44,
+     743,   433,   410,    50,    50,    43,    44,  -295,    47,    48,
+      78,   818,   332,   597,     8,     9,    10,    11,    12,   889,
+      50,   909,   115,  -422,    50,   638,   522,   895,   716,   108,
+     932,  1022,   895,  1364,   637,  -529,   244,  1364,    58,   164,
+     924,   921,   934,    37,   938,    38,    33,   945,    59,   267,
+      50,   939,   696,  1278,  1279,  1280,   946,   118,   697,   947,
+      50,   920,   112,   597,   141,   142,   547,   899,   948,    47,
+      48,  1071,   899,   964,    36,    43,    44,   949,    50,  1170,
+     950,   974,   975,   976,    50,  -296,  1053,   990,   345,   991,
+     348,   440,     8,     9,    10,    11,    12,   992,   993,   994,
+     463,   721,  1077,   112,   995,   509,   722,   160,    -3,   215,
+    1112,   996,   470,  1113,  -410,  1114,    43,    44,  -409,  1389,
+     114,   108,  1019,  1059,    33,    50,  1055,    72,   638,   272,
+     115,   330,   894,    50,  1076,   230,  1445,    50,   231,  1078,
+    1079,   235,    50,   237,  1229,   114,  1085,   114,  1095,   220,
+     246,   310,    36,   348,    39,   741,   175,   176,    42,  1096,
+     215,  1097,  1099,   259,  1102,   621,  -297,    43,    44,   115,
+     959,   160,  1104,     8,     9,    10,    11,    12,    78,   112,
+    1105,   685,   114,   835,   211,   221,  1112,   114,  1087,  1113,
+    1106,  1114,    43,    44,  1109,  1133,   348,   348,  1154,  1155,
+    1157,  1187,   215,  1171,   326,    33,    58,  1406,  1156,  1172,
+    1174,  1175,   348,   340,  1183,  1215,  1194,   705,   621,   621,
+    1317,  1189,  1022,    -3,  1088,  1199,   272,  1521,  1202,  1204,
+    1213,   310,   492,    36,   522,   114,   522,  1040,  1208,   522,
+    1220,  1226,   522,  1217,  1233,  1237,  1239,    71,  1241,  1242,
+    1269,    50,  1243,    50,  1244,  1246,  1253,  1272,    78,  1262,
+     697,  1263,   429,   215,   115,  1297,   432,  1273,   108,  1290,
+     348,  1274,    50,   213,   398,  1276,   230,  1303,   399,   400,
+      65,   439,  1284,  1087,   401,  1307,    58,    50,  1305,   108,
+     402,   114,   403,  1311,   705,    72,   326,  1312,  1313,  1316,
+      50,   215,   114,    50,   114,   526,   215,   108,   404,   527,
+     528,   529,   113,  1494,  1321,  1323,  1329,  1331,  1330,  1088,
+    1332,  1339,   267,  1342,  1349,  1350,   406,  1170,   432,  1280,
+    1358,   487,  1359,   530,  1265,   531,    50,   532,   533,   621,
+     114,  1360,   114,   497,  1366,    39,   114,   184,   185,    42,
+     658,  1367,   407,   520,   114,  1377,  1378,  -411,    43,    44,
+     470,  1381,  1392,  1396,   115,   177,   160,    50,    50,   108,
+     440,  1400,  1398,  1401,   754,    72,   659,  1402,   697,   759,
+    1407,  1421,    50,  1087,   893,  1334,   410,   115,   697,  1416,
+    1417,   215,    47,    48,   115,  1418,   115,   584,   115,   697,
+    1173,   589,   108,  1419,  1426,   894,  1435,   685,  1437,   151,
+    1431,   152,  1439,  1405,    78,   230,   153,   235,  1433,  1088,
+     622,    78,  1441,   174,   626,   880,   526,   463,  1493,    59,
+     527,   528,   529,   115,  1443,   115,  1449,  1448,    68,   119,
+    1450,  1451,    58,  1462,  1472,  1474,   115,  1476,  1479,    58,
+    1480,   348,  1493,  1493,   530,  1487,   531,    50,   532,  1288,
+     162,  1502,   310,  1503,  1507,   254,    39,  1516,  1514,    50,
+      42,   215,    68,    78,  1518,  1524,  1531,  1493,  1532,    43,
+      44,   326,   326,  1170,   372,  1188,   775,   777,   776,   161,
+    1170,   778,   477,  1111,   867,   779,   869,    59,  1289,  1395,
+    1482,    58,   108,   230,  1534,    45,  1352,  1219,   681,   222,
+      76,   637,   215,    47,    48,  1368,   470,   114,  1465,  1193,
+    1201,   118,   890,   470,   891,   108,   912,  1074,  1070,   793,
+    1108,    72,   108,  1018,   861,  1084,   926,   783,    72,  1298,
+     710,   935,  1170,   973,    76,   260,   915,   487,    50,   326,
+      50,   487,     0,   978,   784,     0,   785,   114,     0,     0,
+     416,   520,     0,   520,   989,  1040,   520,     0,   326,   520,
+       0,   348,   348,     0,     0,   470,     0,     0,     0,     0,
+      50,   223,     0,   435,   108,     0,     0,   331,     0,    59,
+      72,     0,     0,   443,     0,   260,   350,     0,   697,   697,
+       0,   114,     0,     0,     0,   112,     8,     9,    10,    11,
+      12,     0,  1112,     0,   637,  1113,     0,  1114,    43,    44,
+     114,     0,     0,     0,   114,   405,     0,     0,     0,     0,
+       0,   215,   326,     0,     0,     0,   685,     0,    33,     0,
+     423,     0,   794,   428,   430,     0,  1319,   910,   161,     0,
+       0,     0,     0,   697,   697,     0,     0,     0,     0,   215,
+       0,  1356,     0,   519,   215,     0,    36,     0,   353,   446,
+       0,   114,   833,   449,     0,   450,     0,   589,     0,     0,
+       0,     0,     0,   842,   457,     0,     0,     0,     0,     0,
+      68,     0,     0,     0,     0,   471,     0,     0,     0,     0,
+       0,   330,     0,     0,     0,   478,     0,     0,   114,     0,
+     568,    39,   410,   430,  1382,    42,     0,  1390,    47,    48,
+       0,     0,    50,     0,    43,    44,    39,    50,   184,   185,
+      42,     0,     0,   215,   681,    59,    59,     0,   971,    43,
+      44,   447,     0,     0,    50,     0,     0,   215,   412,     0,
+     712,     0,     0,     0,     0,   420,     0,    59,    47,    48,
+       0,  1428,    76,  1148,  1149,   186,  1432,    76,   114,     0,
+       0,     0,   487,    47,    48,    59,     0,     0,     0,   260,
+       0,     0,     0,   590,    39,     0,   175,   176,    42,   618,
+     497,   685,     0,  1103,     0,  1454,     0,    43,    44,  1296,
+       0,     0,   623,     0,     0,     0,   623,   674,     0,     0,
+    1012,     0,  1115,     0,   163,     0,  1115,     0,  1196,  1197,
+     114,   214,     0,   375,   348,   348,     0,   412,   195,     0,
+     233,   218,    59,   700,   228,     0,   697,    59,   215,     0,
+       0,     0,     0,   697,   697,   697,    39,     0,   184,   185,
+      42,   980,   910,     0,     0,   471,     0,     0,     0,    43,
+      44,   223,     0,  1115,     0,     0,     0,     0,     0,   350,
+      59,   519,   214,     0,   471,     0,   519,     0,     0,   519,
+    1522,     0,   471,     0,   574,   596,  1522,   597,   114,     0,
+     114,   114,   578,    47,    48,   581,     0,  1522,   910,     0,
+     692,  1522,     0,   430,     0,     0,   697,     0,     0,     0,
+       0,     0,   163,     0,   214,     0,     0,     0,   706,     0,
+      68,     0,     0,     0,   373,     0,     0,    76,     0,   430,
+    1122,     0,     0,   430,     0,     8,     9,    10,    11,    12,
+       0,   353,     0,     0,     0,   348,    76,     0,     0,    79,
+     163,     0,   216,     0,    76,   412,     0,     0,     0,   420,
+    1115,     0,   350,   681,     0,     0,     0,    33,   243,   114,
+      59,     0,   353,   163,     0,   214,     0,     0,  1012,     0,
+       0,     0,     0,    79,     0,   442,   487,  1089,   326,     0,
+     353,     0,    76,    59,     0,    36,     0,     0,     0,     0,
+      59,  1322,     0,   216,     0,     0,     0,   786,  1324,  1325,
+    1326,     0,     0,   214,     0,     0,    50,    50,   214,     0,
+     224,     0,     0,     0,   623,   797,   114,   114,   215,   879,
+       0,     0,     0,   498,   353,   412,   814,     0,   886,   743,
+     833,   410,   888,     0,     0,   216,     0,    47,    48,     0,
+       0,     0,    59,     0,   590,     0,     0,   910,     0,   590,
+       0,     0,     0,     0,   114,   623,     0,     0,   350,   350,
+       0,  1369,     0,    39,     0,   184,   185,    42,     0,     0,
+    1115,     0,  1115,  1115,   350,     0,    43,    44,     0,     0,
+       0,     0,     0,     0,   373,     0,     0,   353,     0,     0,
+       0,     0,   692,   214,     0,     0,   216,   355,     0,     0,
+       0,     0,   893,   471,   410,     0,   910,   910,   681,     0,
+      47,    48,     0,    50,   114,     0,   574,   574,     0,     0,
+       0,     0,    39,   114,   184,   185,    42,     0,     0,   471,
+     353,   353,   350,     0,   216,    43,    44,    50,    50,   216,
+       0,   925,     0,     0,   430,     0,   353,     0,     0,     0,
+       0,  1115,     0,     0,     0,  1469,     0,  1469,   373,     0,
+       0,  1492,    50,   410,   353,     0,     0,   706,     0,    47,
+      48,     0,   955,   214,    39,    76,   184,   185,    42,     0,
+       0,     0,     0,     0,     0,     0,     0,    43,    44,   214,
+       0,    79,  1469,     0,  1469,     0,    79,     0,     0,   872,
+     215,    76,     0,   875,   353,     0,     0,     0,  1115,  1115,
+     692,     0,     0,   266,   214,     0,     0,     0,     0,     0,
+     692,    47,    48,   623,   216,     0,   987,     0,     0,     0,
+       0,   692,     0,     0,     0,     0,    81,     0,     0,   353,
+       0,   998,     0,  1061,     0,     0,  1446,     0,     0,     0,
+       0,     0,     0,     0,     0,  1089,     8,     9,    10,    11,
+      12,     8,     9,    10,    11,    12,     0,     0,     0,     0,
+      81,   534,   535,   536,   537,   538,   539,   540,   541,   542,
+     543,   544,   353,     0,     0,     0,     0,     0,    33,     0,
+     224,    68,   353,    33,     0,     0,     0,   215,   223,     0,
+       0,     0,     0,   353,   216,   545,  1496,   225,     0,     0,
+       0,     0,     0,   797,   910,  1504,    36,     0,     0,     0,
+     706,    36,     0,  1067,     0,     0,    39,     0,   184,   185,
+      42,   910,     0,   214,   574,     0,     0,     0,     0,    43,
+      44,     0,     0,     0,     0,   216,     0,     0,     0,  1081,
+    1089,     0,     0,     0,     0,     0,    79,     0,   430,   119,
+     920,   214,   597,    76,     0,   596,   214,   597,    47,    48,
+     355,     0,     0,    47,    48,    79,     0,    88,     0,     0,
+       0,     0,     0,    79,     0,   353,     0,     0,     0,     0,
+    1184,     0,   353,     0,   356,     0,     8,     9,    10,    11,
+      12,   355,     0,   910,   910,     0,     0,     0,     0,     0,
+       0,    88,   590,     0,     0,     0,     0,     0,     0,   355,
+       0,    79,     0,     0,     0,   428,     0,     0,    33,     0,
+     692,   692,     0,   350,   350,   214,     0,     0,     0,     0,
+     128,   128,   128,     0,     0,     0,     0,   412,   226,   214,
+    1089,  1169,     0,     0,     0,     0,    36,     0,     0,     0,
+       0,    39,     0,   355,   216,    42,     0,     0,     0,     0,
+     498,     0,     0,     0,    43,    44,     0,     0,     0,     0,
+       0,     0,  1468,     0,  1468,   692,   692,     0,    81,     0,
+       0,     0,   216,    81,     0,     0,     0,   216,     0,     0,
+      45,     0,   353,   353,     0,   353,   353,     0,    47,    48,
+       0,     0,   128,     0,   128,     0,     0,     0,     0,  1468,
+       0,  1468,  1125,    76,     0,     0,   355,     0,     0,     0,
+       0,     0,     0,     0,     0,   363,     0,     0,  1136,   276,
+     214,     0,     0,     0,     0,     0,     0,     0,   326,     0,
+       0,     0,     0,     0,     0,     0,   706,   353,   353,     0,
+       0,     0,     0,     0,     0,     0,   216,     0,     0,   355,
      355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    59,     0,     0,     0,     0,   395,     0,     0,     0,
-       0,   353,   353,     0,   215,   455,   414,   415,     0,   215,
-       0,   419,     0,   421,   422,   355,     0,     0,     0,     0,
-      81,    59,     0,     0,     0,   871,     0,     0,     0,   874,
-       0,     0,     0,     0,   356,  1114,     0,  1114,  1114,    81,
-       0,   350,     0,   363,     0,     0,     0,    81,     0,     0,
-       0,     8,     9,    10,    11,    12,     0,     0,   355,   214,
-       0,     0,     0,     0,     0,   356,   119,     0,   355,   216,
-       0,     0,   353,     0,   224,     0,     0,     0,   215,   355,
-       0,     0,    33,   356,     0,    81,     0,     0,     0,  1168,
-       0,     0,   215,     0,     0,     0,  1168,   533,   534,   535,
-     536,   537,   538,   539,   540,   541,   542,   543,     0,     0,
-      36,     0,     0,     0,   223,    39,  1114,   184,   185,    42,
-       0,     0,     0,     0,     0,     0,   356,     0,    43,    44,
-       0,   544,     0,     0,     0,    76,     0,    88,     0,    79,
-     637,     0,    88,     0,     0,     0,     0,   353,  1168,   353,
-       0,     0,     0,     0,   186,  1516,     0,     0,     0,     0,
-     573,   355,    47,    48,     0,     0,     0,     0,   355,     0,
-       0,     0,     0,  1114,  1114,     0,     0,     0,     0,     0,
-       0,     0,     0,   215,   353,     0,     0,     0,     0,   356,
-       0,   353,   353,   353,     0,     0,     0,     0,     0,     0,
-     348,     0,   353,   353,     0,     0,     0,     0,     0,     0,
-       0,  1445,     0,     0,     0,    76,     0,     0,     0,     0,
+     216,     0,     0,     0,     0,   355,     0,   225,     0,     0,
+       0,     0,     0,     0,   128,     0,     0,     0,  1266,     0,
+       0,     0,   128,   355,   128,   128,     0,     0,     0,   128,
+       0,   128,   128,   412,    79,     0,     0,     0,     0,    68,
+       0,     0,     0,     0,     0,     0,     0,     0,   353,    88,
+       0,   692,     0,   706,    88,     0,  1351,   119,     0,     0,
+      79,     0,     0,   355,     0,     0,     0,     0,     0,     0,
+       0,     0,  1222,    81,     0,     0,     0,     8,     9,    10,
+      11,    12,     0,     0,     0,     0,     0,   356,   692,     0,
+     223,   216,    81,     0,     0,   692,   692,   692,   355,     0,
+      81,   128,     0,     0,     0,     0,   350,   350,     0,    33,
+       0,    76,     0,     0,     0,     0,     0,     0,   356,  1169,
+       0,     0,     0,   353,     0,   353,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   356,    36,    81,     0,
+       0,   355,    39,     0,   184,   185,    42,     0,   226,     0,
+     214,   355,   119,     0,     0,    43,    44,   224,   692,     0,
+     353,     0,   355,     0,     0,     0,     0,   353,   353,   353,
+       0,     0,     0,   126,   129,   130,     0,     0,   353,   353,
+     356,   893,     0,   410,     0,     0,     0,     0,     0,    47,
+      48,    76,     0,     8,     9,    10,    11,    12,     0,     0,
+       0,   168,     0,   173,     0,     0,   179,   180,   181,     0,
+     183,  1466,     0,  1470,    88,     0,     0,     0,     0,     0,
+       0,     0,    79,     0,   234,    33,     0,   350,   363,     0,
+     353,     0,     0,    88,     0,     0,   249,   250,     0,     0,
+       0,    88,     0,   356,   355,   255,     0,   256,  1498,     0,
+    1500,   355,   119,    36,     0,     0,     0,     0,    39,   363,
+     184,   185,    42,     0,     0,     0,     0,     0,     0,     0,
+       0,    43,    44,     0,     0,  1169,     0,   363,     0,    88,
+       0,   216,  1169,     0,     0,     0,   356,   356,     0,     0,
+       0,     0,  1529,     0,  1530,     0,     0,   186,     0,   353,
+       0,     0,   356,     0,     0,    47,    48,  1537,  1538,     0,
+       0,     8,     9,    10,    11,    12,     0,     0,     0,     0,
+     356,   363,     0,     0,     0,     0,     0,   395,     0,     0,
+       0,    81,   214,     0,  1169,     0,     0,   414,   415,     0,
+       0,  1517,   419,    33,   421,   422,     0,    76,     0,     0,
+       0,     0,     0,     0,    76,     0,     0,    81,     0,     0,
+     356,   355,   355,     0,   355,   355,     0,     0,     0,     0,
+       0,    36,     0,     0,     0,     0,    39,     0,   184,   185,
+      42,     0,    79,     0,   363,     0,     0,     0,     0,    43,
+      44,     0,     0,     0,     0,   356,     0,     0,     0,     0,
+       0,     0,     0,     0,   128,   128,    76,     0,     0,     0,
+       8,     9,    10,    11,    12,   266,   355,   355,     0,     0,
+       0,     0,     0,    47,    48,     0,     0,   363,   363,   214,
+       0,   128,     0,     0,   128,   128,     0,   128,   356,   128,
+     128,     0,    33,   363,   128,   128,     0,     0,   356,     0,
+       0,     0,     0,     0,   225,     0,     0,     0,     0,   356,
+       0,   363,     0,   216,     0,     8,     9,    10,    11,    12,
+      36,     0,    88,     0,     0,    39,     0,   184,   185,    42,
+       0,     0,     0,     0,     0,     0,     0,   355,    43,    44,
+     588,     0,   595,     0,     0,     0,     0,    33,    88,     0,
+       0,   363,     0,   619,   620,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1492,     0,   410,     0,     0,    81,
+       0,     0,    47,    48,     0,    36,     0,     0,     0,   224,
+      39,     0,     0,     0,    42,     0,   363,     0,     0,     0,
+       0,   356,     0,    43,    44,     0,     0,     0,   356,     0,
+      79,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     216,     0,   355,     0,   355,     0,     0,     0,     0,   712,
+       0,     0,     0,     0,     0,     0,     0,    47,    48,   363,
+     128,   128,     0,     0,     0,     0,     0,     0,     0,   363,
+       0,     0,     0,     0,     0,   226,     0,     0,     0,   355,
+     363,     0,     0,     0,     0,     0,   355,   355,   355,     0,
+       0,     0,     0,     0,     0,     0,     0,   355,   355,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   356,   356,     0,     0,   226,     0,     0,     0,
-       0,   214,     0,     0,     0,     0,     0,     0,   356,     0,
-     718,    59,   722,     0,   353,     0,     0,     0,     0,   216,
-       0,     0,     0,     0,     0,     0,   356,     0,     0,     0,
-       0,  1495,     0,   412,     0,     0,     0,    81,   355,   355,
-    1503,   355,   355,     0,     0,     0,     0,     0,     0,   168,
-       0,   173,   348,     0,   179,   180,   181,     0,   183,    79,
-       0,     0,    88,    81,     0,     0,   356,     0,     0,     0,
-       0,     0,   234,     0,     0,     0,   363,     0,     0,     0,
-       0,    88,     0,   353,   249,   250,     0,     0,     0,    88,
-       0,     0,     0,   355,   355,     0,     0,     0,   214,     0,
-       0,   356,     0,     0,     0,     0,     0,   363,  1124,     0,
-       0,     0,     0,     0,     0,   348,     0,     0,     0,     0,
-       0,     0,     0,     0,  1135,   363,     0,    88,     0,     0,
-       0,    76,     0,   215,     0,     0,     0,     0,    76,     0,
-       0,     0,     0,     0,   356,   787,   788,     0,     0,     0,
-       0,     0,     0,     0,   356,     0,   853,     0,   348,   348,
-     225,     0,     0,     0,   355,   356,     0,     0,   363,     0,
-       0,     0,   818,     0,   348,   821,   822,     0,   825,     0,
-     827,   828,     0,     0,     0,   829,   830,     0,     0,     0,
-      76,     0,     0,     8,     9,    10,    11,    12,     0,   412,
-       0,   216,     0,     0,     0,   905,   224,   907,     0,     0,
-       0,   455,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    33,    81,     0,    79,     0,     0,
-       0,   363,   348,     0,     0,     0,     0,     0,  1221,   355,
-       0,   355,     0,     0,     0,     0,     0,   356,     0,     0,
-       0,     0,    36,     0,   356,     0,     0,    39,     0,   184,
-     185,    42,     0,     0,     0,     0,     0,     0,     0,     0,
-      43,    44,     0,     0,   363,   363,   355,     0,     0,     0,
-       0,     0,     0,   355,   355,   355,     0,     0,     0,     0,
-     363,     0,     0,     0,   355,   355,   266,     0,   216,     0,
-       0,     0,     0,     0,    47,    48,     0,    79,   363,     0,
-       0,     0,     0,     0,     0,   215,     0,     0,     0,    88,
-       0,   956,   957,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   587,     0,
-     594,     0,     0,     0,     0,    88,   355,     0,   363,     0,
-       0,   618,   619,     0,     0,   128,   128,   128,     0,     0,
-       0,     0,     0,     0,   356,   356,     0,   356,   356,     0,
-       0,     0,     0,     0,     0,     0,   637,     0,     0,     0,
-       0,     0,  1021,   363,     0,    81,     0,     0,     0,     0,
-       0,    59,     8,     9,    10,    11,    12,    13,    14,    15,
+      79,     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,   356,   356,
+      88,   356,   356,     0,     0,    33,     0,     0,     0,   355,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    81,
+       0,     0,   363,     0,     0,     0,     0,     0,     0,   363,
+       0,     0,     0,    36,     0,     0,     0,     0,    39,     0,
+      40,    41,    42,     0,     0,     0,     0,     0,     0,     0,
+       0,    43,    44,   356,   356,     0,     0,   788,   789,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   128,     0,     0,     0,     0,   128,    45,   355,    46,
+       0,     0,     0,     0,   819,    47,    48,   822,   823,     0,
+     826,     0,   828,   829,     0,     0,     0,   830,   831,     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,   356,     0,    79,     0,     0,     0,
+       0,    33,   166,    79,     0,     0,     0,     0,     0,   363,
+     363,   997,   363,   363,     8,     9,    10,    11,    12,   219,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
+      88,     0,     0,     0,     0,     0,   225,     0,     0,     0,
+    -298,     0,     0,     0,   283,   284,    33,   285,     0,   913,
+       0,   914,     0,     0,     0,    79,     0,    81,   917,   918,
+       0,     0,     0,   923,   363,   363,   166,     0,     0,   356,
+     273,   356,     0,   286,    36,     0,   929,     0,     0,   287,
+       0,   933,     0,   288,     0,     0,   289,   290,   291,   292,
+     293,   294,    43,    44,     0,   295,   296,     0,     0,   166,
+       0,   128,     0,   957,   958,     0,   356,     0,   595,   369,
+       0,     0,   374,   356,   356,   356,     0,     0,   297,     0,
+     378,     0,     0,     0,   356,   356,   344,    48,   299,   300,
+     301,   302,     0,     0,   212,   363,     0,    81,     0,     0,
+       0,     0,     0,   232,     0,   236,     0,   238,     0,     0,
+       0,     0,     0,     0,   247,     0,     0,     0,     0,     0,
+       0,   166,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   219,     0,     0,   356,   226,     0,     0,
+       0,     0,     0,     0,     0,   212,     0,   236,   238,   247,
+       0,   166,     0,     0,     0,     0,     0,     0,    88,     0,
+       0,  1007,     0,  1008,  1009,  1010,     0,     0,     0,     0,
+     363,     0,   363,     0,     0,     0,   374,     0,     0,     0,
+       0,     0,  1054,   166,     0,     0,     0,   212,     0,   128,
+       0,     0,     0,     0,     0,     0,  1060,     0,     0,     0,
+       0,     0,     0,     0,     0,   356,     0,   363,   523,     0,
+       0,     0,     0,     0,   363,   363,   363,     0,     0,  1072,
+       0,   166,     0,     0,     0,   363,   363,     0,     0,     0,
+       0,     0,     0,     0,     0,  1080,     0,     0,    88,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   212,     0,
+     236,   238,   247,    81,     0,     0,   593,     0,     0,     0,
+      81,   617,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   363,     0,  1110,
+       0,     0,     0,     0,  1120,     0,   212,     0,     0,  1123,
+       0,   212,     0,     0,  1127,     0,     0,     0,     0,  1129,
+       0,  1130,  1131,     0,     0,  1134,   496,     0,     0,     0,
+       0,     0,    81,     0,  1146,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1160,  1161,     0,     0,     0,     0,   166,   166,     0,     0,
+       0,     0,   369,     0,     0,     0,   363,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1190,   212,     0,  1192,
+       0,     0,     0,   523,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1198,     0,   212,     0,     0,     0,
+       0,   236,   238,     0,     0,     0,     0,     0,     0,   247,
+       0,   709,     0,     0,    88,     0,     0,     0,     0,     0,
+       0,    88,  1206,     0,   166,     0,     0,     0,  1210,  1211,
+       0,     0,     0,     0,     0,     0,   523,     0,   523,     0,
+       0,   523,     0,   166,   523,     0,     0,  1227,     0,     0,
+       0,   212,  1234,     0,     0,   369,     0,  1238,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  1245,   212,
+       0,     0,     0,    88,   212,     0,   212,     0,     0,     0,
+       0,  1252,     0,  1254,  1255,  1256,  1257,     0,     0,     0,
+       0,     0,   212,     0,     0,   212,   212,     0,  1264,     0,
+    1160,     0,     0,   212,   173,     0,     0,   166,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   212,   369,     0,
+       0,   800,  1287,     0,   212,     0,     0,     0,     0,     0,
+       0,     0,  1292,  1293,     0,     0,  1144,     0,     0,     8,
+       9,    10,    11,    12,     0,     0,     0,   593,     0,     0,
+       0,     0,   593,   158,     0,     0,     0,     0,     0,     0,
+       0,   369,   369,     0,     0,     0,     0,     0,     0,   283,
+     284,    33,   285,     0,     0,     0,     0,   369,     0,     0,
+       0,     0,     0,     0,     0,     0,  1327,  1328,     0,     0,
+       0,     0,     0,     0,     0,     0,  1338,     0,   286,    36,
+     252,     0,     0,     0,   287,     0,     0,     0,   288,   523,
+     257,   289,   290,   291,   292,   293,   294,    43,    44,     0,
+     295,   296,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   369,   212,   922,     0,     0,
+       0,     0,     0,   297,     0,   378,     0,   283,   284,     0,
+     285,  1145,    48,   299,   300,   301,   302,     0,  1373,     0,
+    1374,  1375,  1376,     0,   212,     0,     0,     0,     0,   212,
+     709,     0,  1380,     0,     0,     0,   286,     0,     0,   385,
+    1391,     0,   287,     0,     0,     0,   288,     0,     0,   289,
+     290,   291,   292,   293,   294,    43,    44,     0,   295,   296,
+       0,     0,   417,     0,     0,  1412,  1413,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   431,     0,     0,     0,
+       0,   297,     0,   378,     0,   436,     0,     0,   617,    47,
+      48,   299,   300,   301,   302,   444,     0,     0,   212,     0,
+       0,     0,   780,     0,     0,     0,     0,     0,     0,     0,
+    1452,  1453,   212,     0,     0,     0,     0,     0,     0,     0,
+     462,     0,     0,  1458,     0,   472,     0,     0,     0,     0,
+    1458,     0,     0,   496,     0,     0,     0,     0,   480,     0,
+       0,     0,     0,     0,   491,     0,   495,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1491,     0,   524,     0,  1497,     0,     0,
+       0,     0,     0,     0,     0,     0,   369,     0,     0,     0,
+       0,     0,     0,   709,     0,     0,     0,     0,     0,     0,
+       0,     0,   212,     0,     0,  1519,     0,  1520,   523,     0,
+       0,     0,     0,   212,     0,     0,   583,     0,     0,     0,
+     587,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     212,     0,     0,   166,     0,  1535,  1536,     0,     0,     0,
+       0,     0,     0,  1539,  1540,     0,     0,     0,   630,     0,
+       0,     0,   631,   632,     0,   633,     0,     0,     0,     0,
+       0,     0,   644,   645,     0,   646,   647,     0,   648,     0,
+     649,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   593,     0,   583,     0,     0,
+       0,     0,     0,     0,     0,   664,     0,     0,     0,   341,
+     364,     0,     0,     0,     0,     0,   369,   369,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   675,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   413,     0,     0,     0,     0,     0,     0,   413,
+       0,   212,     0,     0,     0,   701,     0,     0,     0,     0,
+       0,   704,     0,     0,     0,     0,   462,     0,     0,     0,
+       0,     0,     0,   523,     0,     0,     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,   215,   348,     0,   355,     0,     0,     0,   356,
-     356,     0,  1070,    33,     0,     0,   363,   128,     0,   128,
-       0,     0,     0,     0,     0,     0,   363,     0,     0,     0,
-       0,     0,   226,     0,     0,     0,     0,   363,     0,     0,
-       0,    36,     0,     0,   276,     0,     0,     0,     0,    59,
-       0,     0,     0,    79,     0,     0,     0,     0,     0,     0,
-      79,     0,     0,     0,     0,     0,     0,  1071,     0,   637,
+      26,    27,     0,   739,    28,    29,    30,     0,     0,     0,
+       0,     0,     0,   212,    33,     0,     0,     0,   757,     0,
+       0,   413,     0,     0,   212,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   709,
+       0,     0,    36,     0,     0,     0,     0,   112,     0,    40,
+      41,     0,     0,     0,     0,   782,     0,     0,     0,     0,
+      43,    44,     0,     0,   792,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   413,     0,
+     219,     0,     0,     0,   813,     0,   413,   579,    46,   413,
+     582,     0,     0,   212,    47,    48,     0,   364,     0,     0,
+       0,   609,     0,     0,     0,     0,     0,   212,     0,     0,
+       0,     0,     0,     0,     0,     0,   709,     0,     0,     0,
+     627,     0,   852,     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,   413,
+       0,     0,     0,   413,     0,     0,    33,     0,   885,     0,
+       0,     0,     0,     0,     0,     0,   892,     0,     0,   369,
+     369,     0,     0,     0,     0,     0,     0,   219,     0,     0,
+       0,     0,     0,   364,    36,     0,     0,     0,     0,    39,
+       0,   208,    41,    42,     0,   212,     0,   252,     0,     0,
+       0,     0,    43,    44,     0,     0,     0,     0,   930,   931,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     356,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    88,   996,   128,
-       0,     8,     9,    10,    11,    12,     0,   128,     0,   128,
-     128,     0,    79,     0,   128,     0,   128,   128,     0,   363,
-       0,     0,   225,   348,   348,     0,   363,     0,     0,     0,
-     283,   284,    33,   285,     0,     0,     0,     0,     0,     0,
-       0,    59,     0,    81,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   356,     0,   356,     0,   286,
-      36,     0,     0,  1021,     0,   287,     0,     0,     0,   288,
-       0,     0,   289,   290,   291,   292,   293,   294,    43,    44,
-       0,   295,   296,     0,     0,     0,   128,     0,     0,     0,
-       0,     0,   356,     0,     0,     0,     0,     0,     0,   356,
-     356,   356,     0,     0,   297,     0,   378,     0,     0,     0,
-     356,   356,   344,    48,   299,   300,   301,   302,     0,     0,
-       0,     0,  1197,    81,     0,     0,     0,     0,     0,     0,
-       0,   166,     0,     0,     0,     0,   363,   363,     0,   363,
-     363,     0,     0,     0,     0,     0,     0,     0,   219,     0,
-       0,     0,     0,     0,     0,     0,     0,    88,     0,     0,
-       0,     0,   356,     0,     0,     0,     0,     0,     0,     0,
-       0,   283,   284,     0,   285,  1264,   912,     0,   913,     0,
-       0,     0,     0,     0,     0,   916,   917,    59,    59,     0,
-     922,   363,   363,     0,     0,   166,     0,     0,     0,   273,
-     286,     0,     0,   928,     0,     0,   287,     0,   932,    59,
-     288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
-      44,     0,   295,   296,     0,     0,     0,    59,   166,     0,
-       0,   356,     0,     0,     0,   594,     0,     0,   369,     0,
-       0,   374,     0,     0,     0,   297,     0,   378,     0,     0,
-    1286,     0,     0,    47,    48,   299,   300,   301,   302,     0,
-       0,     0,   363,     0,     0,     0,   779,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   348,   348,     0,    81,
-       0,     0,     0,     0,    59,     0,    81,     0,     0,    59,
-     166,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   219,     0,   226,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     166,     0,    59,     0,     0,    88,     0,     0,  1006,     0,
-    1007,  1008,  1009,     0,     0,     0,     0,   363,    81,   363,
-       0,     0,     0,     0,     0,   374,     0,     0,     0,  1053,
-       0,     0,   166,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1059,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   363,     0,     0,   522,     0,     0,
-       0,   363,   363,   363,     0,     0,     0,     0,   128,   128,
-     166,     0,   363,   363,     0,     0,     0,   348,     0,     0,
-       0,     0,  1079,     0,     0,    88,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   128,     0,     0,   128,   128,
-       0,   128,    59,   128,   128,   592,     0,     0,   128,   128,
-     616,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   363,    59,  1109,     0,     0,     0,
-       0,  1119,    59,     0,     0,     0,  1122,     0,     0,     0,
-       0,  1126,     0,     0,     0,     0,  1128,     0,  1129,  1130,
-       0,     0,  1133,     0,     0,     0,     0,     0,     0,     0,
-       0,  1145,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1159,  1160,     0,
-       0,     0,     0,     0,    59,   166,   166,     0,     0,     0,
-       0,   369,     0,   363,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1189,     0,     0,  1191,     0,     0,     0,
-       0,     0,   522,     0,     0,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,  -298,     0,     0,     0,
-     708,    88,     0,     0,   128,   128,     0,    33,    88,  1205,
-       0,     0,   166,     0,     0,  1209,  1210,     0,     0,     0,
-       0,     0,     0,     0,   522,     0,   522,     0,     0,   522,
-       0,   166,   522,     0,  1226,    36,     0,     0,     0,  1233,
-       0,     0,     0,   369,  1237,     0,  -298,     0,     0,     0,
-       0,     0,     0,     0,     0,  1244,     0,     0,     0,     0,
-      88,     0,     0,     0,     0,     0,     0,     0,  1251,     0,
-    1253,  1254,  1255,  1256,     0,     0,     0,   212,     0,     0,
-       0,     0,     0,     0,     0,  1263,   232,  1159,   236,     0,
-     238,   173,     0,     0,     0,   166,     0,   247,     0,     0,
-       0,     0,     0,     0,     0,     0,   369,     0,     0,   799,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,  1291,
-    1292,     0,     0,     0,     0,     0,     0,     0,   212,     0,
-     236,   238,   247,     0,     0,   592,     0,     0,     0,     0,
-     592,     0,     0,     0,     0,     0,     0,     0,     0,   369,
-     369,     0,     0,     0,     0,   128,     0,     0,     0,     0,
-     128,     0,     0,     0,     0,   369,     0,     0,     0,     0,
-     212,     0,     0,  1326,  1327,     0,     0,     0,     0,     0,
-       0,     0,     0,  1337,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   522,     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,   369,     0,   921,     0,     0,     0,    33,
-       0,   212,     0,   236,   238,   247,     0,   158,     0,     0,
-       0,     0,     0,     0,     0,  1372,     0,  1373,  1374,  1375,
-       0,     0,     0,     0,     0,     0,     0,    36,   708,  1379,
-       0,     0,    39,     0,    40,    41,    42,  1390,     0,   212,
-       0,     0,     0,     0,   212,    43,    44,     0,     0,     0,
-       0,     0,     0,     0,   252,     0,     0,     0,     0,   495,
-       0,     0,  1411,  1412,   257,     0,     0,     0,     0,     0,
-       0,    45,     0,    46,     0,     0,     0,     0,     0,    47,
-      48,   324,     0,     0,     0,   128,   616,     0,     0,     0,
-       0,   346,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   381,   381,     0,     0,     0,  1451,  1452,     0,
-     212,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1457,     0,     0,     0,     0,     0,     0,  1457,     0,   212,
-       0,     0,     0,   385,   236,   238,     0,     0,     0,     0,
-       0,     0,   247,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   417,     0,     0,     0,
-    1490,     0,     0,     0,  1496,     0,     0,     0,     0,     0,
-     431,     0,     0,   324,   369,     0,     0,     0,     0,   436,
-       0,   708,     0,     0,   212,     0,     0,     0,     0,   444,
-       0,     0,  1518,     0,  1519,     0,   522,   476,     0,     0,
-       0,     0,   212,     0,     0,     0,     0,   212,     0,   212,
-       0,     0,     0,   128,   462,     0,     0,     0,     0,   472,
-       0,   166,  1534,  1535,     0,   212,     0,     0,   212,   212,
-    1538,  1539,   480,     0,     0,     0,   212,     0,   490,     0,
-     494,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     212,     0,     0,     0,     0,     0,     0,   212,     0,   523,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   592,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,   369,   369,    28,    29,    30,     0,
-     582,     0,     0,     0,   586,    33,     0,     0,     0,     0,
-       0,     0,   381,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   629,    36,     0,     0,   630,   631,     0,   632,
-     208,    41,     0,     0,     0,     0,   643,   644,     0,   645,
-     646,   522,   647,     0,   648,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   212,     0,
-       0,   582,     0,     0,     0,     0,     0,     0,     0,   663,
-       0,     0,     0,     0,     0,    47,    48,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   212,     0,     0,     0,
-       0,   212,     0,   674,     0,   702,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   708,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   700,
-       0,     0,     0,     0,     0,   703,     0,     0,     0,     0,
-     462,     0,     0,     0,   735,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   751,     0,   219,     0,
-       0,     0,   735,     0,     0,   735,   341,   364,     0,     0,
-     212,     0,     0,     0,     0,     0,   738,     0,   760,     0,
-       0,     0,     0,     0,   212,     0,     0,     0,     0,     0,
-       0,   756,     0,     0,   708,     0,     0,     0,     0,   413,
-       0,     0,     0,     0,     0,   495,   413,     0,   789,     0,
-       0,     0,     0,     0,     0,   346,     0,     0,     0,   751,
-       0,     0,     0,     0,     0,     0,     0,     0,   781,     0,
-       0,     0,     0,     0,     0,     0,     0,   791,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   369,   369,     0,
-       0,     0,     0,     0,     0,   219,     0,   812,     0,     0,
-       0,     0,     0,     0,   212,   850,     0,     0,     0,     0,
-       0,     0,     0,   381,     0,   212,     0,     0,   413,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   212,     0,     0,   851,     0,     8,     9,    10,
+       0,     0,     0,     0,     0,     0,     0,     0,    45,   413,
+     271,     0,   364,     0,     0,     0,    47,    48,     0,     0,
+     965,     0,     0,     0,     0,   969,     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,    33,     0,
-       0,   884,     0,     0,     0,   413,     0,     0,     0,   891,
-       0,     0,     0,   413,   578,     0,   413,   581,     0,   926,
-       0,     0,     0,     0,   364,     0,    36,     0,   608,     0,
-       0,    39,     0,   208,    41,    42,     0,     0,   369,     0,
-     252,   751,     0,   950,    43,    44,     0,   626,     0,     0,
-       0,   929,   930,   960,     0,     0,     0,     0,     0,   967,
+      29,    30,   413,     0,     0,     0,   364,     0,     0,    33,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      45,     0,   271,   212,     0,     0,   413,     0,    47,    48,
-     413,     0,     0,   964,     0,     0,     0,     0,   968,     0,
-       0,     0,     0,     0,     0,   522,     0,   522,     0,   984,
-     985,     0,     0,   212,     0,     0,     0,     0,     0,     0,
-     364,     0,     0,     0,     0,   346,     0,     0,     0,     0,
+     369,     0,   212,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1002,     0,    36,     0,     0,
+       0,     0,  1003,     0,    40,    41,     0,     0,     0,     0,
+     413,   413,     0,     0,     0,  1005,     0,  1006,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   795,   364,
+    1016,     0,     0,     0,     0,     0,  1020,   523,   609,   523,
+     609,   609,     0,   258,     0,   324,     0,   609,  1057,    47,
+      48,  1058,     0,     0,     0,   346,     0,   832,   364,     0,
+       0,     0,     0,   364,     0,     0,   381,   381,     0,     0,
+       0,     0,   364,   364,   523,     0,   523,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   364,     0,
+       0,     0,     0,   413,   873,     0,     0,   413,   876,     0,
+       0,     0,     0,   166,   878,     0,   506,     0,   508,   511,
+       0,     0,     0,     0,     0,     0,     0,     0,   514,   515,
+       0,     0,     0,   413,     0,     0,     0,     0,   283,   284,
+       0,   285,     0,   508,   508,     0,     0,   324,     0,     0,
+       0,     0,     0,     0,     0,     0,   364,   609,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   286,     0,  1128,
+       0,   476,     0,   634,     0,   141,   142,   288,   508,     0,
+     289,   290,   291,   292,   293,   294,    43,    44,     0,   295,
+     296,   364,     0,     0,     0,   413,   413,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   522,     0,   522,   212,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   212,     0,  1001,     0,
-       0,     0,     0,     0,  1013,  1002,   413,     0,   381,   364,
-       0,   166,     0,     0,     0,     0,     0,     0,  1004,     0,
-    1005,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1015,     0,     0,     0,   346,     0,  1019,
-       0,     0,     0,     0,   346,     0,     0,     0,   413,     0,
-       0,  1056,   364,     0,  1057,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   212,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
-       0,     0,     0,     0,   324,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   413,   413,     0,     0,
+       0,     0,   297,   508,   635,     0,   636,   379,     0,     0,
+      47,    48,   299,   300,   301,   302,     0,     0,     0,     0,
+    1191,     0,     0,     0,     0,     0,     0,     0,   413,     0,
+       0,     0,     0,   212,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   609,     0,   609,     0,     0,     0,
+       0,     0,     0,     0,  1203,     0,   609,     0,     0,  1205,
+       0,     0,     0,     0,     0,     0,     0,  1209,     0,     0,
+       0,     0,     0,     0,     0,     0,   381,     0,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,  -299,     0,
+       0,  1240,     0,     0,     0,     0,     0,     0,     0,     0,
+      33,     0,  1247,     0,     0,  1248,     0,  1249,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   364,     0,     0,
+       0,     0,  1258,  1259,   364,   413,     0,   413,    36,     0,
+       0,   413,     0,     0,     0,     0,     0,     0,     0,  -299,
+       0,     0,  1271,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   609,   609,     0,     0,     0,     0,     0,   703,
+       0,     0,   508,   508,   508,   508,   508,   508,   508,   508,
+     508,   508,   508,   508,   508,   508,   508,   508,   508,   508,
+       0,     0,     0,     0,     0,     0,     0,   413,  1310,     0,
+       0,     0,     0,     0,     0,     0,  1314,     0,     0,   736,
+       0,     0,     0,     0,     0,     0,   413,  1126,     0,     0,
+       0,   752,     0,     0,     0,     0,   364,   736,     0,     0,
+     736,     0,   413,  1137,     0,   609,   609,  1142,     0,     0,
+       0,     0,     0,   761,     0,     0,     0,   364,   364,     0,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+       0,     0,     0,   790,     0,     0,  1361,     0,  1362,     0,
+     346,     0,    33,     0,   752,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1371,     0,  1372,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   413,     0,   413,
+      36,  1379,   508,     0,   413,     0,     0,     0,     0,     0,
+       0,     0,     0,   609,     0,     0,  1397,  1399,     0,     0,
+     851,     0,     0,     0,     0,     0,     0,  1404,   381,     0,
+    1209,     0,     0,     0,     0,     0,   413,  1223,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   381,     0,     0,   794,   364,   960,     0,     0,   735,
-       0,     0,     0,     0,   608,     0,   608,   608,     0,     0,
-       0,     0,     0,   608,     0,     0,     0,     0,     0,  1131,
-       0,     0,     0,   831,   364,     0,     0,     0,     0,   364,
-    1146,     0,     0,     0,     0,     0,     0,     0,   364,   364,
-       0,     0,  1127,     0,     0,     0,     0,   212,     0,     0,
-     381,     0,  1163,     0,   364,     0,     0,     0,     0,   413,
-     872,     0,     0,   413,   875,     0,     0,   960,   960,   505,
-     877,   507,   510,     0,     0,     0,     0,     0,     0,     0,
-       0,   513,   514,     0,     0,     0,     0,  1194,     0,   413,
-       0,     0,     0,     0,     0,     0,   507,   507,     0,     0,
-       0,     0,     0,  1190,     0,     0,     0,     0,     0,     0,
-       0,     0,   364,   608,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   507,     0,     0,     0,     0,     0,  1202,     0,     0,
-       0,   960,  1204,     0,   212,     0,     0,   364,     0,     0,
-    1208,   413,   413,     0,     0,     0,     0,     0,     0,     0,
-     850,     0,     0,     0,     0,     0,   507,     0,     0,     0,
-       0,     0,     0,     0,     0,  1249,  1250,     0,     0,     0,
-       0,     0,     0,     0,  1239,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   413,  1246,     0,     0,  1247,     0,
-    1248,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     608,     0,   608,     0,     0,  1257,  1258,     0,     0,     0,
-       0,     0,   608,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1270,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  -523,     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,  1309,     0,    32,     0,     0,    33,    34,     0,  1313,
-       0,     0,     0,   364,     0,     0,     0,     0,     0,     0,
-     364,   413,     0,   413,     0,     0,     0,   413,     0,     0,
-       0,    35,     0,     0,    36,     0,    37,  1354,    38,    39,
-     735,    40,    41,    42,     0,     0,     0,     0,   608,   608,
-       0,     0,    43,    44,   507,   507,   507,   507,   507,   507,
-     507,   507,   507,   507,   507,   507,   507,   507,   507,   507,
-     507,   507,     0,     0,     0,     0,     0,     0,    45,  1360,
-      46,  1361,     0,   413,     0,     0,    47,    48,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,  1370,     0,  1371,
-       0,     0,   413,  1125,     0,     0,     0,     0,     0,     0,
-       0,     0,   364,     0,  1378,   212,     0,     0,   413,  1136,
-       0,   608,   608,  1141,     0,     0,     0,     0,     0,  1396,
-    1398,     0,     0,   364,   364,     0,     0,     0,     0,     0,
-    1403,     0,     0,  1208,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,  -299,  1426,     0,     0,     0,     0,
-       0,     0,     0,     0,  1433,    33,     0,  1435,     0,  1437,
-    1439,  1441,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   413,   507,   413,     0,     0,     0,     0,
-     413,     0,     0,    36,     0,     0,     0,     0,     0,   608,
-       0,     0,     0,     0,  -299,     0,     0,     0,     0,     0,
-    1472,     0,  1474,     0,  1208,     0,     0,     0,     0,     0,
-       0,     0,   413,  1222,     0,     0,     0,     0,     0,     0,
-    1485,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   324,   507,   364,     1,     2,   207,
+       0,     0,  1427,     0,     0,     0,     0,     0,     0,     0,
+     364,  1434,     0,   508,  1436,     0,  1438,  1440,  1442,     0,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,   508,     0,    28,    29,    30,   483,   484,
+     485,   486,     0,     0,   927,    33,     0,  1473,     0,  1475,
+       0,  1209,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   752,  1486,   951,     0,
+       0,     0,     0,    36,     0,     0,     0,   364,   961,     0,
+      40,    41,     0,     0,   968,     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,   507,    28,    29,    30,    31,
-       0,     0,    32,   283,   284,    33,  1022,  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,    36,     0,    37,     0,    38,  1036,     0,
-      40,    41,   288,   364,     0,   289,   290,   291,   292,   293,
-     294,    43,    44,     0,   295,   296,     0,     0,     0,     0,
+      24,    25,    26,    27,     0,     0,    28,    29,    30,    31,
+       0,     0,     0,    32,   985,   986,    33,    34,     0,     0,
+     364,   364,     0,     0,     0,     0,     0,     0,     0,     0,
+     346,     0,     0,     0,     0,     0,     0,   508,     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,  1014,
+       0,     0,     0,   381,     0,     0,     0,   283,   284,     0,
+     285,     0,     0,   508,     0,     0,     0,     0,    45,     0,
+      46,     0,     0,     0,  -528,     0,    47,    48,     0,     0,
+       0,     0,   346,     0,     0,     0,   286,     0,     0,   346,
+       0,     0,   287,     0,     0,   508,   288,     0,     0,   289,
+     290,   291,   292,   293,   294,    43,    44,   508,   295,   296,
        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,  1037,   364,   364,     0,     0,
-    -134,     0,     0,     0,     0,     0,     0,     0,     0,   507,
-       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,    32,   283,   284,    33,   285,
-       0,     0,     0,     0,     0,   507,     0,     0,     0,     0,
+       0,   364,     0,     0,     0,     0,     0,     0,     0,   324,
+       0,   297,     0,   378,     0,     0,   379,     0,     0,    47,
+      48,   299,   300,   301,   302,     0,   508,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   381,     0,     0,     0,
+       0,   961,     0,     0,   736,     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,    40,    41,   288,     0,   507,   289,   290,
-     291,   292,   293,   294,    43,    44,     0,   295,   296,   507,
+       0,     0,     0,     0,  1132,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1147,     0,     0,     0,     0,
+       0,     0,   283,   284,     0,   285,     0,     0,     0,     0,
+     413,     0,     0,     0,     0,   381,     0,  1164,     0,     0,
+       0,     0,   508,     0,     0,     0,     0,     0,     0,     0,
+       0,   286,   961,   961,   413,   413,     0,   287,     0,     0,
+       0,   288,     0,     0,   289,   290,   291,   292,   293,   294,
+      43,    44,  1195,   295,   296,     0,     0,     0,     0,   413,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   364,     0,     0,
-     297,     0,   298,     0,     0,     0,     0,     0,    47,    48,
-     299,   300,   301,   302,     0,     0,     0,     0,   507,     0,
-       0,     0,     0,  -134,     0,     0,     0,     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,    32,     0,     0,    33,    34,     0,
+       0,     0,     0,     0,     0,     0,   297,     0,   378,     0,
+       0,   508,   508,   751,    47,    48,   299,   300,   301,   302,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   413,     0,     0,     0,
-       0,     0,    35,     0,   507,    36,     0,    37,     0,    38,
-      39,     0,    40,    41,    42,     0,     0,     0,     0,     0,
-     413,   413,     0,    43,    44,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   961,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   413,     0,     0,     0,    45,
-       0,    46,     0,     0,     0,  -527,     0,    47,    48,     0,
-       0,     0,     0,   507,   507,     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,     0,     0,     0,     0,   851,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1250,  1251,     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,  1023,  1024,     0,  1025,     0,     0,  1026,  1027,
+    1028,  1029,  1030,  1031,  1032,  1033,     0,     0,     0,  1034,
+       0,     0,     0,  1035,  1036,     0,    35,     0,   286,    36,
+       0,    37,     0,    38,  1037,     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,   298,     0,     0,   172,     0,
+       0,    47,    48,   299,   300,   301,   302,     0,     0,     0,
+       0,  1038,     0,     0,     0,     0,  -134,     0,     0,     0,
+       0,     0,  1355,     0,     0,   736,     0,     0,     0,   508,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   508,     0,     0,     0,
+       0,     0,     0,     0,     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,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   508,   508,
      286,    36,     0,    37,     0,    38,   287,     0,    40,    41,
      288,     0,     0,   289,   290,   291,   292,   293,   294,    43,
@@ -2402,34 +2411,10 @@
        0,     0,     0,     0,     0,   297,     0,   298,     0,     0,
        0,     0,     0,    47,    48,   299,   300,   301,   302,     0,
-       0,     0,     0,     0,     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,     0,     0,    28,    29,    30,     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,    37,     0,    38,   287,     0,    40,    41,   288,
-       0,   507,   289,   290,   291,   292,   293,   294,    43,    44,
-       0,   295,   296,     0,     0,     0,     0,     0,   507,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   297,     0,   343,     0,     0,     0,
-       0,   750,   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,   283,   284,    33,   285,     0,     0,     0,
-     507,   507,     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,
-      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,   750,    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,   283,   284,    33,   285,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  -134,     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,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   324,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,   286,    36,     0,    37,     0,
@@ -2438,21 +2423,46 @@
        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,   344,    48,
+     297,     0,   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,   283,
-     284,    33,   285,     0,     0,     0,     0,     0,     0,     0,
+       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,   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,     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,   208,    41,     0,   297,     0,
+     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,     0,     0,     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,     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,     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,   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,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
@@ -2462,144 +2472,149 @@
       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,
-       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,    32,     0,     0,    33,    34,
+       0,     0,     0,     0,     0,     0,   297,     0,   982,     0,
+       0,     0,     0,     0,   983,    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,     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,     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,     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,
+       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,   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,     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,    39,     0,   208,    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,
-     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,     0,     0,    28,
-      29,    30,     0,     0,     0,     0,     0,     0,    33,     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,    36,     0,    37,     0,
-      38,    39,    33,   208,    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,
-      36,     0,     0,     0,     0,     0,     0,    40,    41,     0,
       45,     0,   209,     0,     0,     0,     0,     0,    47,    48,
        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,  -298,     0,    28,
-      29,    30,    31,     0,     0,    32,     0,     0,    33,     0,
+      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,    36,     0,    37,     0,
-      38,     0,     0,    40,    41,     0,     0,  -298,     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,    46,    32,     0,     0,    33,     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,     0,    36,     0,    37,     0,    38,     0,
-       0,    40,    41,   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,
-       0,     0,    28,    29,    30,     0,     0,     0,     0,     0,
-      46,    33,     0,     0,     0,     0,    47,    48,     0,  1143,
-       0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    36,
-       0,    37,     0,    38,     0,     0,   208,    41,     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,   209,   287,     0,     0,     0,
-     288,    47,    48,   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,  1144,    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,     0,    33,     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,    36,     0,    37,     0,    38,    39,
-      33,   208,    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,    36,     0,
-       0,     0,     0,     0,     0,    40,    41,     0,    45,     0,
-     209,     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,    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,     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,  -407,   670,
-      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,     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,   670,     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,     0,     0,
-      28,    29,    30,     0,     0,     0,     0,     0,     0,    33,
-       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,    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,   670,     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,    33,     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,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,     0,     0,    28,    29,
+      30,    31,     0,    46,     0,    32,     0,     0,    33,    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,     0,     0,    36,     0,    37,     0,
-      38,     0,     0,   208,    41,     0,     2,   207,     4,     5,
+      38,     0,     0,    40,    41,   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,     0,     0,    28,    29,    30,     0,     0,     0,
-       0,     0,   271,    33,     0,     0,     0,     0,    47,    48,
+       0,     0,    46,     0,    33,     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,
-       0,     2,   207,     4,     5,     6,     7,     8,     9,    10,
+       0,     0,    36,     0,    37,     0,    38,     0,     0,   208,
+      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,   670,    33,     0,
-       0,     0,     0,    47,    48,     0,     0,     0,     0,     0,
+      29,    30,     0,     0,     0,     0,     0,     0,   209,    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,    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,   283,   284,    33,   285,     0,     0,
-       0,     0,   209,     0,     0,     0,     0,     0,    47,    48,
+       0,     0,     0,     0,     0,     0,     0,    36,     0,    37,
+       0,    38,    39,     0,   208,    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,   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,
-     515,     0,     0,   172,     0,     0,    47,    48,   299,   300,
-     301,   302,     8,     9,    10,    11,    12,    13,    14,    15,
+       0,    45,     0,   209,     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,     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,   283,   284,    33,   285,     0,     0,     0,     0,     0,
+       0,     0,  -407,   671,    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,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  1335,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     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,     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,  1337,     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,     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,    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,    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,    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,    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,
@@ -2607,21 +2622,33 @@
       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,   -40,   298,     0,     0,
-       0,     0,     0,    47,    48,   299,   300,   301,   302,     8,
+       0,     0,     0,     0,     0,   297,     0,   516,     0,     0,
+     172,     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,   283,   284,
-      33,   285,     0,     0,     0,     0,     0,     0,     0,     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,    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,     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,   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,   297,     0,   298,     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,   283,   284,    33,   285,     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,    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,
@@ -2635,159 +2662,118 @@
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
-       0,     0,   283,   284,    33,   285,     0,     0,     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,   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,   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,   297,     0,   378,     0,
-       0,     0,     0,     0,    47,    48,   299,   300,   301,   302,
-     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,    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,    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,     0,    36,
-       0,     0,     0,     0,   112,     0,    40,    41,     0,     0,
-       0,     0,     0,     0,     0,    -3,     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,    33,   677,     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,     0,     0,     0,    33,   677,
-      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,     0,    36,     0,     0,     0,
-       0,     0,     0,    40,    41,     0,     0,     0,     0,   678,
-       0,     0,     0,   679,     0,    47,    48,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   297,     0,   378,
+       0,     0,     0,     0,     0,    47,    48,   299,   300,   301,
+     302,   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,     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,   678,    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,     0,   678,    28,    29,    30,  1072,     0,    47,    48,
-       0,     0,    33,   677,     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,     0,     0,     0,    33,     0,    40,    41,     0,
+      27,    36,     0,    28,    29,    30,     0,     0,    40,    41,
+       0,     0,     0,    33,   678,     0,     0,    -3,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    36,     0,     0,     0,     0,     0,     0,
-     208,    41,     0,     0,     0,     0,   678,     0,     0,     0,
-    1199,     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,   271,
-      28,    29,    30,     0,     0,    47,    48,     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,    33,     0,     0,    40,    41,     0,     0,     0,     0,
+       0,    36,     0,     0,     0,     0,     0,   679,    40,    41,
+       0,   680,     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,   678,
+       0,  1073,     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,    36,     0,     0,     0,
+       0,    33,   679,   208,    41,     0,  1200,     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,     0,   339,     0,     0,     0,     0,     0,    47,
-      48,     0,     0,     0,     8,     9,    10,    11,    12,    13,
+       0,     0,   271,     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,   678,    28,    29,    30,     0,
-       0,    47,    48,     0,     0,    33,     0,     0,     0,     0,
+      24,    25,    26,    27,     0,   339,    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,    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,     0,    36,     0,     0,
+       0,     0,     0,     0,    40,    41,     0,     0,     0,     0,
+     679,     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,     0,     0,    36,     0,     0,     0,     0,     0,     0,
-      40,    41,     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,     0,
-       0,    28,    29,    30,     0,     0,     0,     0,     0,   670,
-      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,   283,   284,     0,
-     285,  1023,     0,  1024,     0,     0,  1025,  1026,  1027,  1028,
-    1029,  1030,  1031,  1032,     0,     0,  1510,  1033,     0,     0,
-       0,  1034,  1035,     0,    35,     0,   286,     0,     0,     0,
-       0,     0,  1036,  -420,     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,   172,     0,     0,    47,
-      48,   299,   300,   301,   302,     0,     0,   283,   284,  1037,
-     285,  1023,     0,  1024,  -134,     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,     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,   172,     0,     0,    47,
-      48,   299,   300,   301,   302,     0,     0,     0,     0,  1037,
-       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,    33,     0,   283,   284,     0,   285,  1023,     0,
-    1024,  1382,  1383,  1025,  1026,  1027,  1028,  1029,  1030,  1031,
-    1032,     0,     0,  1510,  1033,     0,     0,     0,  1034,  1035,
-      36,    35,    37,   286,    38,     0,     0,    40,    41,  1036,
-       0,     0,     0,   288,     0,     0,   289,   290,   291,   292,
-     293,   294,    43,    44,     0,   295,   296,     0,     0,     0,
-       0,  1293,     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,  1037,   285,  1023,     0,
-    1024,  1382,  1383,  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,     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,   172,     0,     0,    47,    48,   299,   300,
-     301,   302,     0,     0,   283,   284,  1037,   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,     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,   172,     0,     0,    47,    48,   299,   300,
-     301,   302,   286,     0,     0,     0,  1037,     0,   633,     0,
-     141,   142,   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,   634,
-       0,   635,   379,     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,   379,     0,     0,    47,    48,   299,   300,   301,   302,
-     286,     0,     0,     0,     0,     0,   287,     0,     0,     0,
+       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,     0,     0,    28,
+      29,    30,     0,     0,     0,     0,     0,     0,     0,    33,
+       0,   283,   284,     0,   285,  1024,     0,  1025,     0,     0,
+    1026,  1027,  1028,  1029,  1030,  1031,  1032,  1033,     0,     0,
+    1511,  1034,     0,     0,     0,  1035,  1036,    36,    35,    37,
+     286,    38,     0,     0,    40,    41,  1037,     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,     0,     0,     0,     0,     0,
+       0,     0,  -420,     0,     0,   297,     0,   378,     0,     0,
+     172,     0,     0,    47,    48,   299,   300,   301,   302,     0,
+       0,   283,   284,  1038,   285,  1024,     0,  1025,  -134,     0,
+    1026,  1027,  1028,  1029,  1030,  1031,  1032,  1033,     0,     0,
+       0,  1034,     0,     0,     0,  1035,  1036,     0,    35,     0,
+     286,     0,     0,     0,     0,     0,  1037,     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,   750,    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,   958,
-       0,     0,    47,    48,   299,   300,   301,   302,   286,     0,
-       0,     0,     0,     0,   287,     0,     0,     0,   288,     0,
+     172,     0,     0,    47,    48,   299,   300,   301,   302,     0,
+       0,     0,     0,  1038,     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,  1024,     0,  1025,  1383,  1384,  1026,  1027,
+    1028,  1029,  1030,  1031,  1032,  1033,     0,     0,  1511,  1034,
+       0,     0,     0,  1035,  1036,    36,    35,    37,   286,    38,
+       0,     0,    40,    41,  1037,     0,     0,     0,   288,     0,
+       0,   289,   290,   291,   292,   293,   294,    43,    44,     0,
+     295,   296,     0,     0,     0,     0,  1294,     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,  1038,   285,  1024,     0,  1025,  1383,  1384,  1026,  1027,
+    1028,  1029,  1030,  1031,  1032,  1033,     0,     0,     0,  1034,
+       0,     0,     0,  1035,  1036,     0,    35,     0,   286,     0,
+       0,     0,     0,     0,  1037,     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,   172,     0,
+       0,    47,    48,   299,   300,   301,   302,     0,     0,   283,
+     284,  1038,   285,  1024,     0,  1025,     0,     0,  1026,  1027,
+    1028,  1029,  1030,  1031,  1032,  1033,     0,     0,     0,  1034,
+       0,     0,     0,  1035,  1036,     0,    35,     0,   286,     0,
+       0,     0,     0,     0,  1037,     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,     0,     0,   297,     0,   378,     0,     0,   172,     0,
        0,    47,    48,   299,   300,   301,   302,   286,     0,     0,
-       0,     0,     0,   287,     0,     0,     0,   288,     0,     0,
+       0,  1038,     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,   504,     0,   378,     0,     0,     0,     0,     0,
+       0,     0,   297,     0,   378,     0,     0,   959,     0,     0,
       47,    48,   299,   300,   301,   302,   286,     0,     0,     0,
        0,     0,   287,     0,     0,     0,   288,     0,     0,   289,
@@ -2795,5 +2781,5 @@
        0,     0,     0,     0,     0,     0,   283,   284,     0,   285,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   509,     0,   378,     0,     0,     0,     0,     0,    47,
+       0,   297,     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,
@@ -2801,33 +2787,45 @@
        0,     0,     0,     0,     0,   283,   284,     0,   285,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     512,     0,   378,     0,     0,     0,     0,     0,    47,    48,
+     505,     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,   701,    48,   299,
+       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,     0,     0,   297,     0,
-     378,     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,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
-       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,    36,     0,    37,
-       0,    38,    39,    33,   175,   176,    42,     0,     0,     0,
-       0,     0,     0,     0,     0,    43,    44,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   297,     0,   378,     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,     0,     0,
+       0,     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,    39,    33,   175,   176,    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,    36,     0,     0,     0,     0,   112,     0,    40,    41,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
-      44,   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,     0,     0,
-      28,    29,    30,     0,     0,     0,     0,     0,     0,    33,
+      36,     0,     0,     0,     0,   112,     0,    40,    41,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    43,    44,
+     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,     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,
@@ -2837,30 +2835,20 @@
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
       25,    26,    27,     0,     0,    28,    29,    30,     0,     0,
-       0,     0,     0,     0,    33,     0,     0,     0,     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,    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,    33,     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,     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,     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,    33,     0,
-       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,    36,     0,     0,     0,
-       0,     0,     0,   208,    41
+       0,     0,     0,     0,     0,     0,     0,     0,    36,     0,
+      37,     0,    38,     0,     0,   208,    41
 };
 
 #define yypact_value_is_default(yystate) \
-  ((yystate) == (-1267))
+  ((yystate) == (-1263))
 
 #define yytable_value_is_error(yytable_value) \
@@ -2869,1067 +2857,1051 @@
 static const yytype_int16 yycheck[] =
 {
-       0,     1,   186,   186,   532,    45,    45,     0,   186,    45,
-       1,   519,     0,   186,   186,   240,   186,   205,   186,   742,
-     742,     0,   511,     0,   118,   742,   188,   490,   639,   595,
-     862,   494,  1022,   615,    34,   220,   349,     1,   597,   595,
-    1303,    34,   282,   349,   685,    45,    34,   169,   170,    45,
-     598,    51,   595,   727,   568,    34,   604,    34,    51,   425,
-     426,     0,   417,   480,  1005,    65,    74,    30,    68,    83,
-     297,    71,    65,   597,    66,    68,    34,    45,    71,    41,
-      71,   436,   266,   266,   187,   595,   113,    51,   266,   444,
-    1004,  1005,   595,   266,   266,    34,   266,   595,   266,   595,
-     262,   263,     0,     1,   688,    46,    47,   107,   202,   630,
-       0,  1112,    65,   107,    74,   115,    45,    80,   118,   119,
-       0,   113,   629,   630,   645,    41,   492,   108,   136,    68,
-     111,    41,    41,   257,   968,   364,    34,   599,   645,   368,
-    1403,   603,    41,   107,    34,   511,   186,   186,   148,   149,
-     186,   115,  1382,   115,    34,    99,   149,   157,   158,    51,
-      74,   161,   624,   157,   267,    45,   628,    89,   161,   892,
-     892,    51,   680,    71,    11,   892,   136,    41,   119,   345,
-     486,  1015,   703,   136,   148,    65,   186,   187,    68,   133,
-     186,    71,    59,   157,   187,   117,   703,   116,   425,   426,
-      83,   711,   202,   113,   113,   115,   115,   121,   711,   575,
-     210,   100,   629,   630,   113,   711,   115,   210,   186,     0,
-       1,  1487,   222,   115,   409,  1455,   266,   266,   645,   222,
-     266,  1232,   115,  1234,  1235,   801,   113,   126,   219,   113,
-     240,   108,   206,   663,   111,   801,   210,   888,  1514,   113,
-     862,   115,   252,    34,   813,   803,   148,   186,   801,   252,
-     260,   135,   502,  1204,   252,   265,   266,   267,   114,   149,
-     113,   785,   272,   252,   267,   252,   240,   504,   257,   187,
-    1270,   161,   509,   222,   597,   512,   703,    68,   134,   813,
-      71,   801,   273,   417,   252,  1034,  1035,   297,   801,   280,
-     911,   395,   405,   801,   114,   801,   186,   187,   272,   893,
-     310,   275,   436,   252,   480,   462,   118,  1258,   210,   674,
-     444,   738,    46,    47,   134,    53,   326,    46,    47,   423,
-     210,   331,   229,   297,    51,   429,   111,   120,   331,   566,
-     100,   341,   222,  1257,  1258,   345,   310,   341,   240,   349,
-     350,   248,   219,   919,   252,   939,   585,  1031,  1190,   267,
-     135,   781,   252,   919,   364,    74,   126,   257,   368,  1108,
-     114,   791,   252,   835,     3,   478,   919,   341,    87,    88,
-     272,   345,   802,     3,   365,   113,   266,  1437,   369,    74,
-     134,   120,    57,   120,   118,   395,   920,   626,   115,   118,
-     364,   983,    87,    88,   368,   405,   273,   136,   462,  1458,
-    1022,   350,   405,   280,    74,  1464,    76,    77,   310,   659,
-     113,   114,  1472,   423,  1474,   425,   426,    87,    88,   429,
-     115,   431,    94,    95,    99,  1484,  1426,  1378,   417,     0,
-    1489,   222,    74,  1433,   992,   993,   954,     0,    41,   615,
-     113,   331,   452,   345,   620,    87,    88,   436,   118,   120,
-     135,   425,   426,   925,  1378,   444,   929,   129,   130,   349,
-     470,   252,   116,   113,   891,   136,   120,   966,   478,  1313,
-     480,   348,   482,   115,   114,   478,   486,   649,   452,   482,
-     730,   114,   492,   210,   482,  1485,  1107,   405,   365,   120,
-     813,   465,   369,   482,   504,   482,   506,   813,   113,   509,
-     132,   511,   512,   135,  1098,   136,   663,   120,   640,   519,
-     113,   120,   115,   523,  1487,   405,   490,   417,   492,   194,
-     494,   134,   471,   425,   426,   134,  1370,  1371,   123,   124,
-     504,   120,   506,   482,  1507,   509,   436,   511,   512,   113,
-     674,  1514,   217,   647,   444,   272,  1080,   136,  1066,   113,
-     114,   115,   227,  1071,   115,   794,   117,   567,   568,   113,
-     478,   115,   738,  1157,  1158,   575,   700,   680,  1190,   113,
-     297,  1001,  1002,   134,   482,   585,   586,  1004,   120,   589,
-     480,   120,   482,   310,   120,   595,  1270,   597,   586,   862,
-     492,   120,   482,   113,   136,   115,   486,   136,   134,   663,
-      74,   575,    76,    77,    78,   615,   113,   136,   924,   511,
-     620,   585,   622,    87,    88,   120,   626,   120,   113,   629,
-     630,   113,   297,   115,   781,   616,  1056,  1057,   114,   121,
-     122,   136,   114,   136,   791,   645,   121,   647,   120,   113,
-     631,   615,   127,   128,  1386,   802,   620,   116,  1270,    74,
-     120,   120,   626,   644,   849,     4,     5,     6,     7,     8,
-       9,  1345,    87,    88,   120,   120,   136,   677,   617,   114,
-     680,   120,   114,   575,   869,    10,    11,    12,    13,    14,
-     136,   136,   116,   114,   114,   674,   120,   136,   113,   120,
-     115,   482,   120,   703,   704,   705,   931,   113,   892,   892,
-    1127,   711,   712,   677,   892,   595,    41,   597,   136,   892,
-     892,   700,   892,   615,   892,   891,   113,   781,   620,   119,
-     114,   113,    71,   855,    73,   452,   120,   791,   738,   136,
-     114,   114,   742,   743,    69,   726,   120,   120,   802,   616,
-    1482,   715,   691,    66,   114,  1487,  1430,   114,  1432,  1287,
-     120,   114,  1025,   120,   631,   113,   705,   120,  1491,  1491,
-     113,   113,   680,   115,  1491,  1507,   441,   644,   136,   121,
-     122,  1365,  1514,   118,   674,   785,   116,   504,    83,   506,
-     120,   894,   509,   114,   794,   512,   796,   136,  1382,   120,
-     680,   801,   467,   118,   897,   114,   899,   113,   996,   115,
-     700,   120,  1486,   813,  1426,   121,   122,   983,   114,  1239,
-     113,  1433,   115,   114,   120,   136,  1246,  1247,  1248,   120,
-     794,   711,   712,     4,     5,     6,     7,     8,     9,   504,
-    1257,   116,     3,   113,   509,   120,   136,   512,   738,    10,
-      11,    12,    13,    14,  1001,  1002,  1096,   796,   118,   726,
-    1100,  1101,   862,    74,    35,    76,    77,     0,     1,   114,
-    1454,  1455,   114,  1485,   862,   120,    87,    88,   120,   113,
-      41,   115,   114,   862,   884,   504,   113,   506,   120,  1309,
-     509,   891,   892,   512,   894,  1017,   884,   114,    31,    32,
-      71,    34,    73,   120,   115,   114,   906,   113,    69,  1056,
-    1057,   120,    45,   113,   114,   115,   114,    83,    51,   919,
-     920,   801,   120,   862,   924,  1096,    59,  1190,   114,  1100,
-     930,   931,    65,   813,   120,    68,    92,    93,    71,   930,
-     119,   120,   906,  1170,  1171,   122,  1173,  1001,  1002,    96,
-      97,    84,    85,  1180,   954,  1182,   113,   114,   115,  1467,
-     677,  1127,   131,  1066,   862,   929,   930,   931,  1071,   113,
-     114,   115,   862,   132,  1214,   108,   114,   115,   111,    74,
-       3,    76,    77,   983,    98,   118,   894,    10,    11,    12,
-      13,    14,    87,    88,  1088,    60,    61,   662,    60,    61,
-      62,   891,  1056,  1057,  1004,  1005,   671,   113,  1516,   115,
-     675,   113,   892,   115,   894,   115,   149,    74,    41,   983,
-     119,   120,  1022,  1286,    81,    46,    47,    84,   161,    86,
-      87,    88,   930,   113,  1022,   115,  1113,  1114,  1204,   931,
-     551,   552,    72,  1022,   924,    75,    69,   986,    78,   113,
-      80,   115,   113,   186,   187,  1202,   116,    87,   115,   114,
-      74,  1061,   116,   113,  1304,   115,  1066,    81,  1308,   202,
-      84,  1071,    86,    87,    88,   114,  1339,   210,   285,  1342,
-    1080,   862,   114,  1022,   553,   554,   219,   114,  1088,   222,
-     114,   983,  1239,   559,   560,   114,   229,  1061,   116,  1246,
-    1247,  1248,   115,   310,   311,     4,     5,     6,     7,     8,
-       9,   244,   118,   120,  1341,   248,   118,    74,   135,   252,
-     253,    78,   118,  1386,  1022,   135,   113,  1127,  1391,   114,
-      87,    88,  1022,   266,   267,   114,   116,   134,   345,   116,
-     273,   116,   134,     3,   134,    31,   120,   280,  1202,   930,
-      10,    11,    12,    13,    14,   114,   113,  1420,  1066,   114,
-     118,   113,  1309,  1071,   121,   122,   119,  1407,  1168,  1169,
-     114,   119,    71,   380,    73,   120,   119,   114,  1169,   114,
-     134,    41,   120,   213,   114,  1239,  1066,   136,   114,   906,
-    1190,  1071,  1246,  1247,  1248,   114,   114,   120,   331,   114,
-     114,   114,  1190,   114,  1204,   114,   114,   114,  1208,    69,
-     114,  1190,   114,     0,     1,   348,   349,  1208,   114,   114,
-     114,   886,    10,    11,    12,    13,    14,   119,    31,  1168,
-     135,   114,   365,   134,   114,   120,   369,  1127,   116,   116,
-     114,  1022,  1505,   114,  1208,   120,   379,    34,  1511,   114,
-     280,  1190,   134,    41,   113,  1309,   120,  1257,  1258,  1522,
-     118,   114,   395,  1526,    51,  1265,   114,  1361,   114,    85,
-    1270,  1169,   405,    89,    90,    91,  1501,   555,   556,   557,
-     558,    69,  1270,   120,    71,   114,   114,   120,   120,   114,
-     423,  1270,  1190,   113,   113,   113,   429,   113,   113,   115,
-    1190,   117,   118,  1303,   113,   136,   119,  1491,  1491,   114,
-    1208,   134,  1303,  1491,  1204,   114,   114,   119,  1491,  1491,
-     107,  1491,   352,  1491,   354,   113,  1265,   115,   132,   119,
-     116,  1270,   465,   121,   122,   118,   136,   470,   114,  1303,
-     120,   548,   549,   550,  1061,   478,   116,   116,   114,   482,
-     114,   116,   114,   486,     1,   116,   489,   116,   491,   116,
-     116,  1361,   149,    74,   116,    76,    77,    49,  1033,   136,
-     157,   158,  1270,  1467,   114,   119,    87,    88,  1378,  1360,
-    1270,    74,   136,    76,    77,    78,   136,  1168,  1169,  1492,
-     136,   136,   119,   526,    87,    88,   134,   114,   531,   688,
-     187,   119,   113,  1403,   116,  1303,    85,   118,   116,  1190,
-     440,   116,  1403,  1516,   116,   202,   116,   116,   205,   206,
-     113,   116,   115,   210,   114,   114,  1426,  1208,   121,   122,
-     113,    62,   113,  1433,   114,  1435,   113,  1437,  1426,  1403,
-     114,   134,   118,   113,   231,  1433,   579,  1426,   235,   136,
-     237,  1491,  1491,   116,  1433,  1491,   116,   114,   116,   246,
-     114,   100,   595,   100,   597,   252,   119,  1467,   113,   113,
-     257,  1435,  1472,  1437,  1474,   136,   114,   120,   114,   114,
-     267,   114,    44,   616,  1265,  1485,   134,  1426,   275,  1270,
-     779,  1491,  1492,  1360,  1433,     0,   136,  1485,   631,  1492,
-     114,  1501,   635,   114,   136,  1403,  1485,   100,  1472,   100,
-    1474,   644,   136,   646,   647,   648,  1516,   114,   136,   114,
-     116,   136,  1303,  1516,   114,   114,   136,   119,  1426,    34,
-      10,    11,    12,    13,    14,  1433,  1426,  1501,   116,   116,
-     113,  1037,   749,  1433,   119,   119,  1485,   680,   136,   114,
-     114,   684,   136,   686,   341,   114,    51,   690,   345,   114,
-     561,    41,   851,   562,   351,   698,    71,   565,   563,   963,
-      65,   564,  1190,    68,  1455,  1347,    71,   364,   711,   712,
-    1526,   368,  1280,  1101,  1492,  1308,  1433,  1485,   677,    69,
-    1052,   677,  1071,   726,   899,  1485,   690,   907,   579,    74,
-     855,    76,    77,    78,   893,   641,   253,   958,  1516,  1501,
-     715,  1491,    87,    88,  1279,    74,  1208,    76,    77,    78,
-     927,   482,  1403,    74,    -1,    76,    77,    78,    87,    88,
-     417,   567,    -1,   113,   726,   115,    87,    88,   113,   567,
-     115,   121,   122,   567,   431,  1426,   121,   122,    -1,   436,
-     939,    -1,  1433,   158,   149,    -1,    -1,   444,    -1,    -1,
-      -1,    -1,   113,    -1,   115,    -1,   161,    -1,   801,    -1,
-     121,   122,    -1,    -1,    -1,   462,    -1,    -1,   465,    -1,
-     813,    -1,   971,    -1,    -1,    10,    11,    12,    13,    14,
-      -1,    68,   187,   480,    -1,   482,   726,    -1,    -1,    -1,
-      77,    -1,    -1,   490,  1485,    -1,    -1,   494,    10,    11,
-      12,    13,    14,    -1,    -1,   210,    41,    -1,  1435,    -1,
-    1437,    74,   855,    76,    77,    -1,   231,   222,   861,    -1,
-    1019,    -1,    -1,    -1,    87,    88,   523,    -1,    -1,    41,
-      -1,    -1,   119,    -1,    69,    -1,    -1,   252,    -1,    74,
-      -1,    -1,   257,    78,    -1,  1472,    -1,  1474,    -1,   892,
-     113,   894,    87,    88,    -1,   118,    -1,    69,   901,  1434,
-      -1,  1436,    -1,    74,    -1,    -1,   983,    -1,    -1,    -1,
-      81,   568,    -1,    84,   161,    86,    87,    88,   113,    -1,
-      74,   924,    76,    77,    78,    -1,   121,   122,   585,   586,
-      -1,    -1,    -1,    87,    88,    -1,  1471,    -1,  1473,  1098,
-     597,   113,   945,   115,   115,  1022,    -1,    -1,   465,   121,
-     122,    -1,    -1,    -1,    -1,   958,    -1,     0,   615,   113,
-      -1,   964,    -1,   620,    -1,   968,   331,   121,   122,   626,
-      -1,    -1,   629,   630,    -1,   222,   351,    -1,    -1,    -1,
-    1515,    -1,  1517,    -1,    -1,    -1,    -1,    -1,   645,    -1,
-      74,    34,    76,    77,    78,  1530,  1531,    74,  1157,  1158,
-      -1,    78,    -1,    87,    88,    -1,   663,    -1,    -1,   526,
-      87,    88,  1015,   260,   531,    -1,    -1,   674,   265,    -1,
-      85,    68,    -1,    -1,    89,    90,    91,    -1,    71,   113,
-      -1,    -1,    -1,   280,    -1,    -1,   113,    84,   115,    -1,
-     405,    -1,   417,   700,   121,   122,   703,    -1,   113,  1052,
-     115,    -1,   117,   118,    -1,   712,   431,    -1,   715,    -1,
-      -1,   436,   579,  1066,    -1,    -1,    -1,    -1,  1071,   444,
-      74,    -1,   119,    -1,    -1,    -1,    -1,    81,    -1,    -1,
-      84,   738,    86,    87,    88,  1088,   743,   462,    -1,    -1,
-      10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   350,    74,   480,    -1,   482,    78,  1112,
-      -1,   115,    -1,    -1,   161,   158,    -1,    87,    88,    -1,
-      -1,    41,    -1,    -1,   781,    -1,    -1,    -1,    -1,   646,
-      -1,   648,    -1,    -1,   791,    68,    -1,   794,    -1,    -1,
-     797,    -1,    -1,   113,    -1,   802,    -1,    -1,   523,    69,
-      -1,   121,   122,    -1,    74,   812,    76,    77,    78,    -1,
-      74,  1164,    76,    77,    78,    -1,    -1,    87,    88,    -1,
-      -1,    -1,    -1,    87,    88,   222,    -1,    -1,    -1,    -1,
-      -1,   698,    -1,   430,    -1,    -1,   119,    -1,    -1,    -1,
-      -1,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,   446,
-      -1,   121,   122,    -1,    -1,   862,  1365,    -1,    -1,   252,
-      -1,   586,    -1,   260,   257,    -1,    -1,    -1,   265,    -1,
-      -1,    -1,    -1,  1382,   471,    -1,    -1,   884,   161,  1232,
-      -1,  1234,  1235,    -1,   891,    -1,    -1,   894,    10,    11,
-      12,    13,    14,    -1,    -1,   190,    74,    -1,    76,    77,
-      78,    -1,   197,    -1,   629,   630,    -1,    -1,    -1,    87,
-      88,    -1,    -1,   920,    -1,    -1,    -1,    -1,    -1,    41,
-     645,    -1,   929,   930,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     0,    -1,   113,    -1,   115,   663,   222,
-      -1,    -1,    -1,   121,   122,  1454,  1455,    69,    -1,   674,
-      -1,    -1,    74,   350,    76,    77,    78,    -1,   351,    -1,
-    1313,    -1,    -1,    -1,    -1,    87,    88,    34,    -1,    -1,
-      -1,    -1,    -1,    -1,   269,   700,   983,   260,   703,    -1,
-      -1,    -1,   265,    -1,    -1,    -1,    -1,    -1,    -1,   996,
-      -1,   113,   589,   115,  1001,  1002,    -1,  1004,  1005,   121,
-     122,    -1,    -1,    -1,    71,    -1,    -1,  1360,  1361,    -1,
-      -1,    -1,    -1,   738,    -1,  1022,    -1,  1370,  1371,    -1,
-     617,    -1,    -1,    -1,   417,   622,    -1,    -1,    -1,    -1,
-      -1,   326,    74,   430,    76,    77,    78,    -1,   431,   334,
-      -1,    -1,   337,   436,    -1,    87,    88,    -1,    -1,  1056,
-    1057,   444,    -1,    -1,    -1,  1408,   781,    10,    11,    12,
-      13,    14,    -1,    -1,    -1,    -1,   791,   350,    -1,   462,
-      -1,   113,   797,    -1,   471,    -1,    -1,   802,   945,   121,
-     122,    -1,    -1,    -1,    -1,    -1,    -1,   480,    41,   482,
-      -1,   158,    -1,    -1,   691,    -1,    -1,   964,    -1,     0,
-       1,   968,   397,    -1,    -1,    -1,   401,    -1,   705,    -1,
-      -1,    -1,    -1,    -1,  1467,  1468,    69,    -1,    -1,    -1,
-    1127,    74,    -1,    32,  1477,    78,    -1,    -1,    -1,   726,
-     523,    -1,    -1,    34,    87,    88,    -1,   862,  1491,  1492,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   430,  1015,    -1,
-      10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,   884,
-     113,    -1,  1169,  1516,    -1,    -1,   891,    68,   121,   122,
-      71,    -1,    28,    29,    30,    84,    85,    -1,    -1,    -1,
-      -1,    41,   477,  1190,    -1,   252,    -1,    -1,   471,    -1,
-     257,    -1,   589,   586,    -1,  1202,    -1,  1204,    -1,   796,
-      -1,  1208,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
-      -1,    -1,    -1,    -1,    74,     0,    76,    77,    78,    -1,
-     617,    -1,    -1,    -1,    -1,   622,    -1,    87,    88,    -1,
-      -1,    -1,  1239,    -1,    -1,    -1,   629,   630,    -1,  1246,
-    1247,  1248,    -1,    -1,   100,  1112,   102,    -1,    -1,    34,
-    1257,  1258,   645,   113,    -1,   115,    -1,   158,    -1,    -1,
-      -1,   121,   122,  1270,    -1,    -1,    -1,    -1,    -1,    -1,
-     663,    -1,   567,   568,    -1,    -1,  1001,  1002,    -1,  1004,
-    1005,   674,    -1,    -1,   351,    -1,    71,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   691,    -1,  1303,  1022,    -1,    -1,
-      -1,    -1,  1309,    -1,    -1,    -1,   589,   700,   705,    -1,
-     703,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   222,    -1,    -1,    -1,    -1,   182,    -1,    -1,    -1,
-      -1,  1056,  1057,    -1,   617,   244,   192,   193,    -1,   622,
-      -1,   197,    -1,   199,   200,   738,    -1,    -1,    -1,    -1,
-     417,   252,    -1,    -1,    -1,   650,    -1,    -1,    -1,   654,
-      -1,    -1,    -1,    -1,   431,  1232,    -1,  1234,  1235,   436,
-      -1,  1378,    -1,   158,    -1,    -1,    -1,   444,    -1,    -1,
-      -1,    10,    11,    12,    13,    14,    -1,    -1,   781,   986,
-      -1,    -1,    -1,    -1,    -1,   462,  1403,    -1,   791,   796,
-      -1,    -1,  1127,    -1,   797,    -1,    -1,    -1,   691,   802,
-      -1,    -1,    41,   480,    -1,   482,    -1,    -1,    -1,  1426,
-      -1,    -1,   705,    -1,    -1,    -1,  1433,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,    -1,    -1,
-      69,    -1,    -1,    -1,  1169,    74,  1313,    76,    77,    78,
-      -1,    -1,    -1,    -1,    -1,    -1,   523,    -1,    87,    88,
-      -1,   135,    -1,    -1,    -1,  1190,    -1,   252,    -1,   862,
-     379,    -1,   257,    -1,    -1,    -1,    -1,  1202,  1485,  1204,
-      -1,    -1,    -1,    -1,   113,  1492,    -1,    -1,    -1,    -1,
-     785,   884,   121,   122,    -1,    -1,    -1,    -1,   891,    -1,
-      -1,    -1,    -1,  1370,  1371,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   796,  1239,    -1,    -1,    -1,    -1,   586,
-      -1,  1246,  1247,  1248,    -1,    -1,    -1,    -1,    -1,    -1,
-     431,    -1,  1257,  1258,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1408,    -1,    -1,    -1,  1270,    -1,    -1,    -1,    -1,
+       0,     1,    45,   118,    45,   240,   520,     0,   186,    45,
+     533,   512,   186,   186,   863,   205,   640,   220,   186,   107,
+       1,   743,   569,   743,   186,   743,   186,     0,   863,   169,
+     170,   616,   349,     0,    34,   598,    34,   257,   188,   596,
+       0,    34,   186,  1023,   491,    45,  1005,  1006,   495,   349,
+     282,    51,   596,   598,   686,     0,     1,    45,    51,  1304,
+     187,    34,  1006,    45,   596,    65,    45,    34,    68,   157,
+     728,    71,    65,   364,    34,    68,   596,   368,    71,   114,
+    1035,  1036,   689,   596,   121,    45,   187,   202,   266,    34,
+      71,    51,   266,   266,    84,    42,     0,   417,   266,   596,
+     137,   136,   114,    59,   266,    65,   266,   107,    68,    42,
+     596,    71,   262,   263,   297,   115,   436,   600,   118,   119,
+     631,   604,   266,    68,   444,    66,    71,   969,    30,     0,
+      34,    54,    47,    48,   114,   646,    47,    48,     0,     1,
+     267,   599,   625,   186,     0,   186,   629,   605,   148,   149,
+     186,   345,   108,  1113,  1109,   111,   149,   157,   158,  1404,
+    1383,   161,    42,    34,   630,   631,   267,   681,   161,   116,
+     487,   893,    34,   893,  1016,   893,  1438,    11,    34,    81,
+     646,   425,   426,    47,    48,   114,   186,   187,  1023,   149,
+      67,   114,   712,   704,   187,   112,   137,   417,   186,   712,
+     108,   161,   202,   111,   186,   120,   409,   186,   119,    71,
+     210,  1473,    68,  1475,   100,   712,   436,   210,   114,   136,
+     116,    75,   222,   266,   444,   266,   186,   187,   117,   222,
+     266,  1097,   480,  1456,   114,  1101,   116,   114,   704,   786,
+     240,    32,   425,   426,   462,   802,    42,    42,   134,   493,
+     210,   814,   252,   341,   252,   119,    75,   889,   802,   252,
+     260,  1205,   222,   219,    84,   265,   266,   267,   512,   814,
+     802,   503,   272,  1233,   267,  1235,  1236,   222,   405,   252,
+     395,    75,   802,   137,   257,   252,   480,   894,   912,   802,
+      51,  1271,   252,    84,    85,   586,   116,   297,   598,  1258,
+    1259,    42,  1488,   122,   405,   802,   266,   252,   423,    90,
+     310,   219,   119,   101,   429,  1259,   802,   273,   114,   114,
+     116,   116,   505,   898,   280,   900,   326,   510,    42,  1515,
+     513,   331,   576,   940,   121,   101,   627,   118,   331,   127,
+    1488,   341,  1191,   137,   133,   345,   804,   136,   252,   349,
+     350,   478,     3,   836,   115,   675,  1191,   121,   921,   115,
+    1508,   127,   121,   920,   364,   273,   222,  1515,   368,   114,
+     115,   331,   280,   114,  1032,   116,   920,   478,   137,   135,
+      75,   252,   630,   631,   567,  1459,   257,   148,   920,   349,
+     252,  1465,   348,    88,    89,   395,   252,   115,   646,   984,
+     114,    75,   116,    77,    78,   405,     0,   285,   121,   365,
+     115,  1485,   405,   369,    88,    89,  1490,   135,   229,   114,
+    1379,   116,   616,   423,   137,   425,   426,   621,   660,   429,
+     135,   431,   310,   311,   121,  1379,  1271,   248,  1387,   124,
+     125,   955,   116,   926,   417,   405,   664,  1427,   121,   210,
+     137,   121,   452,   244,  1434,   675,   704,   365,   116,   121,
+     118,   369,    75,   436,   137,   135,   967,   345,    93,    94,
+     470,   444,  1314,   135,   121,    88,    89,   135,   478,   240,
+     480,   701,   482,   930,  1108,   478,   114,   487,   116,   482,
+     137,   739,  1099,   493,   350,     3,   114,   814,   116,   731,
+     650,   641,   380,   116,   795,   505,  1486,   507,     0,   482,
+     510,   272,   512,   513,   814,   482,   121,   115,  1081,   114,
+     520,   116,   482,   121,   524,    95,    96,   487,   121,  1371,
+    1372,   121,   137,   648,  1483,   993,   994,   482,   114,  1488,
+     116,   121,    75,   114,   137,   739,   417,   137,   121,   310,
+     114,  1158,  1159,  1067,   681,    88,    89,   137,  1072,  1508,
+     130,   131,   135,   121,   782,   436,  1515,   117,   568,   569,
+     136,   121,   114,   444,   792,   121,   576,   121,   482,   137,
+     681,   121,   114,   116,   345,   803,   586,   587,   379,   115,
+     590,   137,  1427,   137,   114,   121,   596,   137,   598,  1434,
+       4,     5,     6,     7,     8,     9,     0,     1,   925,   480,
+     117,   482,   114,  1271,   121,   471,   616,   114,   122,    75,
+     482,   621,   115,   623,   128,   129,   482,   627,   121,   115,
+     630,   631,    88,    89,   115,   121,   596,   115,   598,    75,
+      34,    77,    78,    79,   892,   117,   646,   850,   648,   121,
+     115,  1486,    88,    89,    10,    11,    12,    13,    14,   120,
+     115,   617,   115,   115,   425,   426,   121,   870,    72,   121,
+      74,   549,   550,   551,    68,   117,   632,    71,   678,   121,
+      75,   681,   114,   587,   116,   115,    42,    82,  1346,   645,
+      85,   121,    87,    88,    89,     0,     1,   932,   892,   490,
+     115,   492,   675,   117,   704,   705,   706,   121,   114,   617,
+     116,   114,   712,   713,    70,   893,   856,   115,   115,   893,
+     893,   681,   114,   121,   632,   893,    31,    32,   701,    34,
+     115,   893,   493,   893,    84,   115,   121,   645,   114,   739,
+      45,   121,   115,   743,   744,   114,    51,   116,   121,   893,
+     115,   512,   712,   713,    59,   115,   121,  1005,   137,  1366,
+      65,   121,   618,    68,   158,  1288,    71,   114,   895,   116,
+    1492,   727,  1492,  1431,  1492,  1433,  1383,   115,   114,    84,
+      85,   115,   115,   121,  1002,  1003,   786,   121,   121,   114,
+     984,   114,   115,   116,   895,   795,    75,   797,    77,    78,
+      79,    67,   802,   108,   675,   115,   111,   997,   137,    88,
+      89,   121,   115,   118,   814,   576,    97,    98,   121,   727,
+      51,     4,     5,     6,     7,     8,     9,   115,   222,  1487,
+     701,   120,   121,   121,   119,   114,   692,   115,   116,  1057,
+    1058,   137,   802,   119,   149,   636,    61,    62,  1455,  1456,
+     706,   137,    35,   114,   814,   616,   161,   119,   252,   505,
+     621,   507,    75,   863,   510,  1097,    79,   513,   739,  1101,
+    1102,   114,   750,   120,   121,    88,    89,   114,  1018,    84,
+    1128,   186,   187,   123,   115,   885,    47,    48,     1,    72,
+     863,    74,   892,   893,   685,   895,   687,   202,  1114,  1115,
+     691,   114,   132,   116,   133,   210,    99,   907,   116,   122,
+     123,   552,   553,    75,   219,    77,    78,   222,   863,   117,
+     920,   921,   554,   555,   229,   925,    88,    89,   114,   117,
+     116,   931,   932,   893,  1128,   895,   122,   123,   115,   244,
+    1067,   797,   115,   248,   115,  1072,   115,   252,   253,   115,
+     931,   115,   114,   116,  1468,   955,   114,   119,   117,   863,
+     136,   266,   267,   560,   561,   925,  1067,   119,   273,   119,
+     121,  1072,   119,   114,  1089,   280,   114,   115,   116,   210,
+     136,   885,   115,  1215,   984,  1203,   931,   115,  1171,  1172,
+     117,  1174,   863,   556,   557,   558,   559,   117,  1181,   117,
+    1183,   863,   121,  1517,   135,  1005,  1006,   863,    31,   135,
+    1258,  1205,   114,   115,   116,     4,     5,     6,     7,     8,
+       9,   892,  1240,  1023,   135,    75,   331,    77,    78,  1247,
+    1248,  1249,    75,   115,    77,    78,   115,   431,    88,    89,
+     114,   272,   116,   348,   349,    88,    89,     3,   122,   123,
+    1023,   114,   115,   116,    10,    11,    12,    13,    14,   119,
+     365,   120,  1062,   115,   369,   856,   297,  1067,   121,   931,
+     114,   862,  1072,  1305,   379,   120,   119,  1309,  1023,   310,
+     120,  1081,   115,    72,   135,    74,    42,   115,   482,  1089,
+     395,   137,  1310,    61,    62,    63,   121,     1,   462,   115,
+     405,   114,    75,   116,    77,    78,   984,  1067,   115,   122,
+     123,   902,  1072,   121,    70,    88,    89,   115,   423,  1023,
+     115,   115,   115,   115,   429,     3,    31,   115,  1128,   115,
+     524,   987,    10,    11,    12,    13,    14,   115,   115,   115,
+     253,   114,   121,    75,   115,  1023,   119,    51,   137,    68,
+      82,   115,  1023,    85,   115,    87,    88,    89,   115,  1342,
+     465,  1023,   120,   115,    42,   470,   136,  1023,   959,  1169,
+    1170,   932,   135,   478,   115,    72,  1408,   482,    75,   117,
+     117,    78,   487,    80,   116,   490,   115,   492,   115,  1170,
+      87,  1191,    70,   587,    75,   121,    77,    78,    79,   115,
+     119,   135,   114,   107,   121,  1205,     3,    88,    89,  1209,
+     119,   115,   115,    10,    11,    12,    13,    14,  1191,    75,
+     115,   452,   527,   984,  1169,  1170,    82,   532,  1209,    85,
+     115,    87,    88,    89,   121,   115,   630,   631,   115,   121,
+     115,   135,   161,   114,   148,    42,  1191,  1362,   121,   114,
+     114,   114,   646,   157,   114,   117,   115,  1128,  1258,  1259,
+     116,   137,  1053,   120,  1209,   115,  1266,  1502,   120,   115,
+     119,  1271,   133,    70,   505,   580,   507,   863,   120,   510,
+     115,   117,   513,   137,   121,   117,   115,  1191,   115,   117,
+      50,   596,   117,   598,   117,   115,   117,   137,  1271,   117,
+     664,   117,   206,   222,  1304,   115,   210,   137,  1170,   120,
+     704,   137,   617,  1169,  1492,   137,   213,   120,  1492,  1492,
+    1191,  1266,   137,  1304,  1492,   115,  1271,   632,   135,  1191,
+    1492,   636,  1492,   120,  1205,  1191,   240,   117,    86,   117,
+     645,   260,   647,   648,   649,    86,   265,  1209,  1492,    90,
+      91,    92,   465,  1468,   117,   117,   117,   115,   117,  1304,
+     115,   117,  1362,   114,   114,   114,  1493,  1271,   272,    63,
+     115,   275,   115,   114,  1165,   116,   681,   118,   119,  1379,
+     685,   119,   687,   280,   114,    75,   691,    77,    78,    79,
+    1517,   137,  1493,   297,   699,   117,   117,   115,    88,    89,
+    1271,   117,   115,   101,  1404,  1361,   310,   712,   713,  1271,
+    1266,   114,   101,   114,   527,  1271,  1517,   137,   782,   532,
+     120,    45,   727,  1404,   114,   121,   116,  1427,   792,   115,
+     115,   350,   122,   123,  1434,   115,  1436,   341,  1438,   803,
+    1026,   345,  1304,   115,   135,   135,   115,   678,   115,  1492,
+     137,  1492,   101,  1361,  1427,   352,  1492,   354,   137,  1404,
+     364,  1434,   101,    57,   368,   664,    86,   580,  1468,   863,
+      90,    91,    92,  1473,   137,  1475,   137,   115,     0,     1,
+     115,   117,  1427,   137,   115,   115,  1486,   120,   117,  1434,
+     117,   885,  1492,  1493,   114,   137,   116,   802,   118,   119,
+    1493,   114,  1502,   137,   120,    99,    75,   115,   120,   814,
+      79,   430,    34,  1486,   115,   137,   115,  1517,   115,    88,
+      89,   425,   426,  1427,  1517,  1038,   562,   564,   563,    51,
+    1434,   565,  1492,   964,   647,   566,   649,   931,  1191,  1348,
+    1456,  1486,  1404,   440,  1527,   114,  1281,  1102,   452,    71,
+       0,   856,   471,   122,   123,  1309,  1427,   862,  1434,  1053,
+    1072,   465,   678,  1434,   678,  1427,   691,   908,   900,   580,
+     959,  1427,  1434,   856,   642,   928,   716,   568,  1434,  1209,
+     482,   727,  1486,   782,    34,   107,   699,   491,   893,   493,
+     895,   495,    -1,   792,   568,    -1,   568,   902,    -1,    -1,
+     194,   505,    -1,   507,   803,  1191,   510,    -1,   512,   513,
+      -1,  1005,  1006,    -1,    -1,  1486,    -1,    -1,    -1,    -1,
+     925,    71,    -1,   217,  1486,    -1,    -1,   149,    -1,  1023,
+    1486,    -1,    -1,   227,    -1,   157,   158,    -1,  1002,  1003,
+      -1,   946,    -1,    -1,    -1,    75,    10,    11,    12,    13,
+      14,    -1,    82,    -1,   959,    85,    -1,    87,    88,    89,
+     965,    -1,    -1,    -1,   969,   187,    -1,    -1,    -1,    -1,
+      -1,   590,   576,    -1,    -1,    -1,   907,    -1,    42,    -1,
+     202,    -1,   586,   205,   206,    -1,   116,   689,   210,    -1,
+      -1,    -1,    -1,  1057,  1058,    -1,    -1,    -1,    -1,   618,
+      -1,  1287,    -1,   297,   623,    -1,    70,    -1,   158,   231,
+      -1,  1016,   616,   235,    -1,   237,    -1,   621,    -1,    -1,
+      -1,    -1,    -1,   627,   246,    -1,    -1,    -1,    -1,    -1,
+     252,    -1,    -1,    -1,    -1,   257,    -1,    -1,    -1,    -1,
+      -1,  1502,    -1,    -1,    -1,   267,    -1,    -1,  1053,    -1,
+     114,    75,   116,   275,  1340,    79,    -1,  1343,   122,   123,
+      -1,    -1,  1067,    -1,    88,    89,    75,  1072,    77,    78,
+      79,    -1,    -1,   692,   678,  1169,  1170,    -1,   780,    88,
+      89,   231,    -1,    -1,  1089,    -1,    -1,   706,   190,    -1,
+     114,    -1,    -1,    -1,    -1,   197,    -1,  1191,   122,   123,
+      -1,  1387,   252,  1002,  1003,   114,  1392,   257,  1113,    -1,
+      -1,    -1,   716,   122,   123,  1209,    -1,    -1,    -1,   341,
+      -1,    -1,    -1,   345,    75,    -1,    77,    78,    79,   351,
+     727,  1062,    -1,   946,    -1,  1421,    -1,    88,    89,  1203,
+      -1,    -1,   364,    -1,    -1,    -1,   368,   441,    -1,    -1,
+     852,    -1,   965,    -1,    51,    -1,   969,    -1,  1057,  1058,
+    1165,    68,    -1,   114,  1258,  1259,    -1,   269,    65,    -1,
+      77,    68,  1266,   467,    71,    -1,  1240,  1271,   797,    -1,
+      -1,    -1,    -1,  1247,  1248,  1249,    75,    -1,    77,    78,
+      79,   795,   894,    -1,    -1,   417,    -1,    -1,    -1,    88,
+      89,   351,    -1,  1016,    -1,    -1,    -1,    -1,    -1,   431,
+    1304,   505,   119,    -1,   436,    -1,   510,    -1,    -1,   513,
+    1506,    -1,   444,    -1,   326,   114,  1512,   116,  1233,    -1,
+    1235,  1236,   334,   122,   123,   337,    -1,  1523,   940,    -1,
+     462,  1527,    -1,   465,    -1,    -1,  1310,    -1,    -1,    -1,
+      -1,    -1,   149,    -1,   161,    -1,    -1,    -1,   480,    -1,
+     482,    -1,    -1,    -1,   161,    -1,    -1,   417,    -1,   491,
+     972,    -1,    -1,   495,    -1,    10,    11,    12,    13,    14,
+      -1,   431,    -1,    -1,    -1,  1379,   436,    -1,    -1,     0,
+     187,    -1,    68,    -1,   444,   397,    -1,    -1,    -1,   401,
+    1113,    -1,   524,   907,    -1,    -1,    -1,    42,    84,  1314,
+    1404,    -1,   462,   210,    -1,   222,    -1,    -1,  1020,    -1,
+      -1,    -1,    -1,    34,    -1,   222,   930,   931,   932,    -1,
+     480,    -1,   482,  1427,    -1,    70,    -1,    -1,    -1,    -1,
+    1434,  1240,    -1,   119,    -1,    -1,    -1,   569,  1247,  1248,
+    1249,    -1,    -1,   260,    -1,    -1,  1361,  1362,   265,    -1,
+      71,    -1,    -1,    -1,   586,   587,  1371,  1372,   987,   663,
+      -1,    -1,    -1,   280,   524,   477,   598,    -1,   672,   114,
+     984,   116,   676,    -1,    -1,   161,    -1,   122,   123,    -1,
+      -1,    -1,  1486,    -1,   616,    -1,    -1,  1099,    -1,   621,
+      -1,    -1,    -1,    -1,  1409,   627,    -1,    -1,   630,   631,
+      -1,  1310,    -1,    75,    -1,    77,    78,    79,    -1,    -1,
+    1233,    -1,  1235,  1236,   646,    -1,    88,    89,    -1,    -1,
+      -1,    -1,    -1,    -1,   331,    -1,    -1,   587,    -1,    -1,
+      -1,    -1,   664,   350,    -1,    -1,   222,   158,    -1,    -1,
+      -1,    -1,   114,   675,   116,    -1,  1158,  1159,  1062,    -1,
+     122,   123,    -1,  1468,  1469,    -1,   568,   569,    -1,    -1,
+      -1,    -1,    75,  1478,    77,    78,    79,    -1,    -1,   701,
+     630,   631,   704,    -1,   260,    88,    89,  1492,  1493,   265,
+      -1,   713,    -1,    -1,   716,    -1,   646,    -1,    -1,    -1,
+      -1,  1314,    -1,    -1,    -1,  1436,    -1,  1438,   405,    -1,
+      -1,   114,  1517,   116,   664,    -1,    -1,   739,    -1,   122,
+     123,    -1,   744,   430,    75,   675,    77,    78,    79,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,   446,
+      -1,   252,  1473,    -1,  1475,    -1,   257,    -1,    -1,   651,
+    1169,   701,    -1,   655,   704,    -1,    -1,    -1,  1371,  1372,
+     782,    -1,    -1,   114,   471,    -1,    -1,    -1,    -1,    -1,
+     792,   122,   123,   795,   350,    -1,   798,    -1,    -1,    -1,
+      -1,   803,    -1,    -1,    -1,    -1,     0,    -1,    -1,   739,
+      -1,   813,    -1,   887,    -1,    -1,  1409,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1209,    10,    11,    12,    13,
+      14,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
+      34,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,   782,    -1,    -1,    -1,    -1,    -1,    42,    -1,
+     351,   863,   792,    42,    -1,    -1,    -1,  1266,   798,    -1,
+      -1,    -1,    -1,   803,   430,   136,  1469,    71,    -1,    -1,
+      -1,    -1,    -1,   885,  1366,  1478,    70,    -1,    -1,    -1,
+     892,    70,    -1,   895,    -1,    -1,    75,    -1,    77,    78,
+      79,  1383,    -1,   590,   786,    -1,    -1,    -1,    -1,    88,
+      89,    -1,    -1,    -1,    -1,   471,    -1,    -1,    -1,   921,
+    1304,    -1,    -1,    -1,    -1,    -1,   417,    -1,   930,   931,
+     114,   618,   116,   863,    -1,   114,   623,   116,   122,   123,
+     431,    -1,    -1,   122,   123,   436,    -1,     0,    -1,    -1,
+      -1,    -1,    -1,   444,    -1,   885,    -1,    -1,    -1,    -1,
+    1034,    -1,   892,    -1,   158,    -1,    10,    11,    12,    13,
+      14,   462,    -1,  1455,  1456,    -1,    -1,    -1,    -1,    -1,
+      -1,    34,   984,    -1,    -1,    -1,    -1,    -1,    -1,   480,
+      -1,   482,    -1,    -1,    -1,   997,    -1,    -1,    42,    -1,
+    1002,  1003,    -1,  1005,  1006,   692,    -1,    -1,    -1,    -1,
+      28,    29,    30,    -1,    -1,    -1,    -1,   899,    71,   706,
+    1404,  1023,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,
+      -1,    75,    -1,   524,   590,    79,    -1,    -1,    -1,    -1,
+     727,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,    -1,
+      -1,    -1,  1436,    -1,  1438,  1057,  1058,    -1,   252,    -1,
+      -1,    -1,   618,   257,    -1,    -1,    -1,   623,    -1,    -1,
+     114,    -1,  1002,  1003,    -1,  1005,  1006,    -1,   122,   123,
+      -1,    -1,   100,    -1,   102,    -1,    -1,    -1,    -1,  1473,
+      -1,  1475,   974,  1023,    -1,    -1,   587,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   158,    -1,    -1,   990,   127,
+     797,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1502,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1128,  1057,  1058,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   692,    -1,    -1,   630,
+     631,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     706,    -1,    -1,    -1,    -1,   646,    -1,   351,    -1,    -1,
+      -1,    -1,    -1,    -1,   182,    -1,    -1,    -1,  1170,    -1,
+      -1,    -1,   190,   664,   192,   193,    -1,    -1,    -1,   197,
+      -1,   199,   200,  1065,   675,    -1,    -1,    -1,    -1,  1191,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1128,   252,
+      -1,  1203,    -1,  1205,   257,    -1,  1280,  1209,    -1,    -1,
+     701,    -1,    -1,   704,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1104,   417,    -1,    -1,    -1,    10,    11,    12,
+      13,    14,    -1,    -1,    -1,    -1,    -1,   431,  1240,    -1,
+    1170,   797,   436,    -1,    -1,  1247,  1248,  1249,   739,    -1,
+     444,   269,    -1,    -1,    -1,    -1,  1258,  1259,    -1,    42,
+      -1,  1191,    -1,    -1,    -1,    -1,    -1,    -1,   462,  1271,
+      -1,    -1,    -1,  1203,    -1,  1205,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   480,    70,   482,    -1,
+      -1,   782,    75,    -1,    77,    78,    79,    -1,   351,    -1,
+     987,   792,  1304,    -1,    -1,    88,    89,   798,  1310,    -1,
+    1240,    -1,   803,    -1,    -1,    -1,    -1,  1247,  1248,  1249,
+      -1,    -1,    -1,    28,    29,    30,    -1,    -1,  1258,  1259,
+     524,   114,    -1,   116,    -1,    -1,    -1,    -1,    -1,   122,
+     123,  1271,    -1,    10,    11,    12,    13,    14,    -1,    -1,
+      -1,    55,    -1,    57,    -1,    -1,    60,    61,    62,    -1,
+      64,  1435,    -1,  1437,   417,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   863,    -1,    78,    42,    -1,  1379,   431,    -1,
+    1310,    -1,    -1,   436,    -1,    -1,    90,    91,    -1,    -1,
+      -1,   444,    -1,   587,   885,   100,    -1,   102,  1472,    -1,
+    1474,   892,  1404,    70,    -1,    -1,    -1,    -1,    75,   462,
+      77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    88,    89,    -1,    -1,  1427,    -1,   480,    -1,   482,
+      -1,   987,  1434,    -1,    -1,    -1,   630,   631,    -1,    -1,
+      -1,    -1,  1516,    -1,  1518,    -1,    -1,   114,    -1,  1379,
+      -1,    -1,   646,    -1,    -1,   122,   123,  1531,  1532,    -1,
+      -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
+     664,   524,    -1,    -1,    -1,    -1,    -1,   182,    -1,    -1,
+      -1,   675,  1169,    -1,  1486,    -1,    -1,   192,   193,    -1,
+      -1,  1493,   197,    42,   199,   200,    -1,  1427,    -1,    -1,
+      -1,    -1,    -1,    -1,  1434,    -1,    -1,   701,    -1,    -1,
+     704,  1002,  1003,    -1,  1005,  1006,    -1,    -1,    -1,    -1,
+      -1,    70,    -1,    -1,    -1,    -1,    75,    -1,    77,    78,
+      79,    -1,  1023,    -1,   587,    -1,    -1,    -1,    -1,    88,
+      89,    -1,    -1,    -1,    -1,   739,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   572,   573,  1486,    -1,    -1,    -1,
+      10,    11,    12,    13,    14,   114,  1057,  1058,    -1,    -1,
+      -1,    -1,    -1,   122,   123,    -1,    -1,   630,   631,  1266,
+      -1,   599,    -1,    -1,   602,   603,    -1,   605,   782,   607,
+     608,    -1,    42,   646,   612,   613,    -1,    -1,   792,    -1,
+      -1,    -1,    -1,    -1,   798,    -1,    -1,    -1,    -1,   803,
+      -1,   664,    -1,  1169,    -1,    10,    11,    12,    13,    14,
+      70,    -1,   675,    -1,    -1,    75,    -1,    77,    78,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1128,    88,    89,
+     344,    -1,   346,    -1,    -1,    -1,    -1,    42,   701,    -1,
+      -1,   704,    -1,   357,   358,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   114,    -1,   116,    -1,    -1,   863,
+      -1,    -1,   122,   123,    -1,    70,    -1,    -1,    -1,  1170,
+      75,    -1,    -1,    -1,    79,    -1,   739,    -1,    -1,    -1,
+      -1,   885,    -1,    88,    89,    -1,    -1,    -1,   892,    -1,
+    1191,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1266,    -1,  1203,    -1,  1205,    -1,    -1,    -1,    -1,   114,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   782,
+     748,   749,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   792,
+      -1,    -1,    -1,    -1,    -1,   798,    -1,    -1,    -1,  1240,
+     803,    -1,    -1,    -1,    -1,    -1,  1247,  1248,  1249,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1258,  1259,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   629,   630,    -1,    -1,   351,    -1,    -1,    -1,
-      -1,  1168,    -1,    -1,    -1,    -1,    -1,    -1,   645,    -1,
-     489,   482,   491,    -1,  1309,    -1,    -1,    -1,    -1,   986,
-      -1,    -1,    -1,    -1,    -1,    -1,   663,    -1,    -1,    -1,
-      -1,  1468,    -1,   898,    -1,    -1,    -1,   674,  1001,  1002,
-    1477,  1004,  1005,    -1,    -1,    -1,    -1,    -1,    -1,    55,
-      -1,    57,   523,    -1,    60,    61,    62,    -1,    64,  1022,
-      -1,    -1,   417,   700,    -1,    -1,   703,    -1,    -1,    -1,
-      -1,    -1,    78,    -1,    -1,    -1,   431,    -1,    -1,    -1,
-      -1,   436,    -1,  1378,    90,    91,    -1,    -1,    -1,   444,
-      -1,    -1,    -1,  1056,  1057,    -1,    -1,    -1,  1265,    -1,
-      -1,   738,    -1,    -1,    -1,    -1,    -1,   462,   973,    -1,
-      -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   989,   480,    -1,   482,    -1,    -1,
-      -1,  1426,    -1,   986,    -1,    -1,    -1,    -1,  1433,    -1,
-      -1,    -1,    -1,    -1,   781,   571,   572,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   791,    -1,   635,    -1,   629,   630,
-     797,    -1,    -1,    -1,  1127,   802,    -1,    -1,   523,    -1,
-      -1,    -1,   598,    -1,   645,   601,   602,    -1,   604,    -1,
-     606,   607,    -1,    -1,    -1,   611,   612,    -1,    -1,    -1,
-    1485,    -1,    -1,    10,    11,    12,    13,    14,    -1,  1064,
-      -1,  1168,    -1,    -1,    -1,   684,  1169,   686,    -1,    -1,
-      -1,   690,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    41,   862,    -1,  1190,    -1,    -1,
-      -1,   586,   703,    -1,    -1,    -1,    -1,    -1,  1103,  1202,
-      -1,  1204,    -1,    -1,    -1,    -1,    -1,   884,    -1,    -1,
-      -1,    -1,    69,    -1,   891,    -1,    -1,    74,    -1,    76,
-      77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      87,    88,    -1,    -1,   629,   630,  1239,    -1,    -1,    -1,
-      -1,    -1,    -1,  1246,  1247,  1248,    -1,    -1,    -1,    -1,
-     645,    -1,    -1,    -1,  1257,  1258,   113,    -1,  1265,    -1,
-      -1,    -1,    -1,    -1,   121,   122,    -1,  1270,   663,    -1,
-      -1,    -1,    -1,    -1,    -1,  1168,    -1,    -1,    -1,   674,
-      -1,   747,   748,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   344,    -1,
-     346,    -1,    -1,    -1,    -1,   700,  1309,    -1,   703,    -1,
-      -1,   357,   358,    -1,    -1,    28,    29,    30,    -1,    -1,
-      -1,    -1,    -1,    -1,  1001,  1002,    -1,  1004,  1005,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   855,    -1,    -1,    -1,
-      -1,    -1,   861,   738,    -1,  1022,    -1,    -1,    -1,    -1,
-      -1,   862,    10,    11,    12,    13,    14,    15,    16,    17,
+    1271,    -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,  1002,  1003,
+     863,  1005,  1006,    -1,    -1,    42,    -1,    -1,    -1,  1310,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1023,
+      -1,    -1,   885,    -1,    -1,    -1,    -1,    -1,    -1,   892,
+      -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    75,    -1,
+      77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    88,    89,  1057,  1058,    -1,    -1,   572,   573,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   899,    -1,    -1,    -1,    -1,   904,   114,  1379,   116,
+      -1,    -1,    -1,    -1,   599,   122,   123,   602,   603,    -1,
+     605,    -1,   607,   608,    -1,    -1,    -1,   612,   613,    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,  1128,    -1,  1427,    -1,    -1,    -1,
+      -1,    42,    51,  1434,    -1,    -1,    -1,    -1,    -1,  1002,
+    1003,     7,  1005,  1006,    10,    11,    12,    13,    14,    68,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,
+    1023,    -1,    -1,    -1,    -1,    -1,  1170,    -1,    -1,    -1,
+      81,    -1,    -1,    -1,    40,    41,    42,    43,    -1,   693,
+      -1,   695,    -1,    -1,    -1,  1486,    -1,  1191,   702,   703,
+      -1,    -1,    -1,   707,  1057,  1058,   115,    -1,    -1,  1203,
+     119,  1205,    -1,    69,    70,    -1,   720,    -1,    -1,    75,
+      -1,   725,    -1,    79,    -1,    -1,    82,    83,    84,    85,
+      86,    87,    88,    89,    -1,    91,    92,    -1,    -1,   148,
+      -1,  1059,    -1,   748,   749,    -1,  1240,    -1,   752,   158,
+      -1,    -1,   161,  1247,  1248,  1249,    -1,    -1,   114,    -1,
+     116,    -1,    -1,    -1,  1258,  1259,   122,   123,   124,   125,
+     126,   127,    -1,    -1,    68,  1128,    -1,  1271,    -1,    -1,
+      -1,    -1,    -1,    77,    -1,    79,    -1,    81,    -1,    -1,
+      -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
+      -1,   210,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   222,    -1,    -1,  1310,  1170,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   119,    -1,   121,   122,   123,
+      -1,   240,    -1,    -1,    -1,    -1,    -1,    -1,  1191,    -1,
+      -1,   845,    -1,   847,   848,   849,    -1,    -1,    -1,    -1,
+    1203,    -1,  1205,    -1,    -1,    -1,   265,    -1,    -1,    -1,
+      -1,    -1,   866,   272,    -1,    -1,    -1,   161,    -1,  1187,
+      -1,    -1,    -1,    -1,    -1,    -1,   880,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1379,    -1,  1240,   297,    -1,
+      -1,    -1,    -1,    -1,  1247,  1248,  1249,    -1,    -1,   904,
+      -1,   310,    -1,    -1,    -1,  1258,  1259,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   919,    -1,    -1,  1271,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   222,    -1,
+     224,   225,   226,  1427,    -1,    -1,   345,    -1,    -1,    -1,
+    1434,   350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1310,    -1,   963,
+      -1,    -1,    -1,    -1,   968,    -1,   260,    -1,    -1,   973,
+      -1,   265,    -1,    -1,   978,    -1,    -1,    -1,    -1,   983,
+      -1,   985,   986,    -1,    -1,   989,   280,    -1,    -1,    -1,
+      -1,    -1,  1486,    -1,   998,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1014,  1015,    -1,    -1,    -1,    -1,   425,   426,    -1,    -1,
+      -1,    -1,   431,    -1,    -1,    -1,  1379,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1040,   331,    -1,  1043,
+      -1,    -1,    -1,   452,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1059,    -1,   350,    -1,    -1,    -1,
+      -1,   355,   356,    -1,    -1,    -1,    -1,    -1,    -1,   363,
+      -1,   480,    -1,    -1,  1427,    -1,    -1,    -1,    -1,    -1,
+      -1,  1434,  1086,    -1,   493,    -1,    -1,    -1,  1092,  1093,
+      -1,    -1,    -1,    -1,    -1,    -1,   505,    -1,   507,    -1,
+      -1,   510,    -1,   512,   513,    -1,    -1,  1111,    -1,    -1,
+      -1,   405,  1116,    -1,    -1,   524,    -1,  1121,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1132,   423,
+      -1,    -1,    -1,  1486,   428,    -1,   430,    -1,    -1,    -1,
+      -1,  1145,    -1,  1147,  1148,  1149,  1150,    -1,    -1,    -1,
+      -1,    -1,   446,    -1,    -1,   449,   450,    -1,  1162,    -1,
+    1164,    -1,    -1,   457,  1168,    -1,    -1,   576,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   471,   587,    -1,
+      -1,   590,  1187,    -1,   478,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1196,  1197,    -1,    -1,     7,    -1,    -1,    10,
+      11,    12,    13,    14,    -1,    -1,    -1,   616,    -1,    -1,
+      -1,    -1,   621,    46,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   630,   631,    -1,    -1,    -1,    -1,    -1,    -1,    40,
+      41,    42,    43,    -1,    -1,    -1,    -1,   646,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1250,  1251,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1260,    -1,    69,    70,
+      93,    -1,    -1,    -1,    75,    -1,    -1,    -1,    79,   678,
+     103,    82,    83,    84,    85,    86,    87,    88,    89,    -1,
+      91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   704,   590,   706,    -1,    -1,
+      -1,    -1,    -1,   114,    -1,   116,    -1,    40,    41,    -1,
+      43,   122,   123,   124,   125,   126,   127,    -1,  1322,    -1,
+    1324,  1325,  1326,    -1,   618,    -1,    -1,    -1,    -1,   623,
+     739,    -1,  1336,    -1,    -1,    -1,    69,    -1,    -1,   172,
+    1344,    -1,    75,    -1,    -1,    -1,    79,    -1,    -1,    82,
+      83,    84,    85,    86,    87,    88,    89,    -1,    91,    92,
+      -1,    -1,   195,    -1,    -1,  1369,  1370,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   209,    -1,    -1,    -1,
+      -1,   114,    -1,   116,    -1,   218,    -1,    -1,   797,   122,
+     123,   124,   125,   126,   127,   228,    -1,    -1,   692,    -1,
+      -1,    -1,   135,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1414,  1415,   706,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     253,    -1,    -1,  1427,    -1,   258,    -1,    -1,    -1,    -1,
+    1434,    -1,    -1,   727,    -1,    -1,    -1,    -1,   271,    -1,
+      -1,    -1,    -1,    -1,   277,    -1,   279,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1467,    -1,   298,    -1,  1471,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   885,    -1,    -1,    -1,
+      -1,    -1,    -1,   892,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   786,    -1,    -1,  1499,    -1,  1501,   907,    -1,
+      -1,    -1,    -1,   797,    -1,    -1,   339,    -1,    -1,    -1,
+     343,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     814,    -1,    -1,   932,    -1,  1529,  1530,    -1,    -1,    -1,
+      -1,    -1,    -1,  1537,  1538,    -1,    -1,    -1,   371,    -1,
+      -1,    -1,   375,   376,    -1,   378,    -1,    -1,    -1,    -1,
+      -1,    -1,   385,   386,    -1,   388,   389,    -1,   391,    -1,
+     393,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   984,    -1,   410,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   418,    -1,    -1,    -1,   157,
+     158,    -1,    -1,    -1,    -1,    -1,  1005,  1006,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   442,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   190,    -1,    -1,    -1,    -1,    -1,    -1,   197,
+      -1,   925,    -1,    -1,    -1,   468,    -1,    -1,    -1,    -1,
+      -1,   474,    -1,    -1,    -1,    -1,   479,    -1,    -1,    -1,
+      -1,    -1,    -1,  1062,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   955,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,  1265,   884,    -1,  1378,    -1,    -1,    -1,  1056,
-    1057,    -1,   901,    41,    -1,    -1,   781,   100,    -1,   102,
-      -1,    -1,    -1,    -1,    -1,    -1,   791,    -1,    -1,    -1,
-      -1,    -1,   797,    -1,    -1,    -1,    -1,   802,    -1,    -1,
-      -1,    69,    -1,    -1,   127,    -1,    -1,    -1,    -1,   930,
-      -1,    -1,    -1,  1426,    -1,    -1,    -1,    -1,    -1,    -1,
-    1433,    -1,    -1,    -1,    -1,    -1,    -1,   903,    -1,   958,
+      28,    29,    -1,   516,    32,    33,    34,    -1,    -1,    -1,
+      -1,    -1,    -1,   987,    42,    -1,    -1,    -1,   531,    -1,
+      -1,   269,    -1,    -1,   998,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1128,
+      -1,    -1,    70,    -1,    -1,    -1,    -1,    75,    -1,    77,
+      78,    -1,    -1,    -1,    -1,   568,    -1,    -1,    -1,    -1,
+      88,    89,    -1,    -1,   577,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   326,    -1,
+    1169,    -1,    -1,    -1,   597,    -1,   334,   335,   116,   337,
+     338,    -1,    -1,  1067,   122,   123,    -1,   345,    -1,    -1,
+      -1,   349,    -1,    -1,    -1,    -1,    -1,  1081,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1205,    -1,    -1,    -1,
+     368,    -1,   635,    -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,   397,
+      -1,    -1,    -1,   401,    -1,    -1,    42,    -1,   671,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   679,    -1,    -1,  1258,
+    1259,    -1,    -1,    -1,    -1,    -1,    -1,  1266,    -1,    -1,
+      -1,    -1,    -1,   431,    70,    -1,    -1,    -1,    -1,    75,
+      -1,    77,    78,    79,    -1,  1169,    -1,   710,    -1,    -1,
+      -1,    -1,    88,    89,    -1,    -1,    -1,    -1,   721,   722,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1127,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   862,     7,   182,
-      -1,    10,    11,    12,    13,    14,    -1,   190,    -1,   192,
-     193,    -1,  1485,    -1,   197,    -1,   199,   200,    -1,   884,
-      -1,    -1,  1169,  1004,  1005,    -1,   891,    -1,    -1,    -1,
-      39,    40,    41,    42,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1022,    -1,  1190,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1202,    -1,  1204,    -1,    68,
-      69,    -1,    -1,  1052,    -1,    74,    -1,    -1,    -1,    78,
-      -1,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
-      -1,    90,    91,    -1,    -1,    -1,   269,    -1,    -1,    -1,
-      -1,    -1,  1239,    -1,    -1,    -1,    -1,    -1,    -1,  1246,
-    1247,  1248,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,
-    1257,  1258,   121,   122,   123,   124,   125,   126,    -1,    -1,
-      -1,    -1,  1058,  1270,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    51,    -1,    -1,    -1,    -1,  1001,  1002,    -1,  1004,
-    1005,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1022,    -1,    -1,
-      -1,    -1,  1309,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    39,    40,    -1,    42,  1164,   692,    -1,   694,    -1,
-      -1,    -1,    -1,    -1,    -1,   701,   702,  1168,  1169,    -1,
-     706,  1056,  1057,    -1,    -1,   115,    -1,    -1,    -1,   119,
-      68,    -1,    -1,   719,    -1,    -1,    74,    -1,   724,  1190,
-      78,    -1,    -1,    81,    82,    83,    84,    85,    86,    87,
-      88,    -1,    90,    91,    -1,    -1,    -1,  1208,   148,    -1,
-      -1,  1378,    -1,    -1,    -1,   751,    -1,    -1,   158,    -1,
-      -1,   161,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
-    1186,    -1,    -1,   121,   122,   123,   124,   125,   126,    -1,
-      -1,    -1,  1127,    -1,    -1,    -1,   134,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1257,  1258,    -1,  1426,
-      -1,    -1,    -1,    -1,  1265,    -1,  1433,    -1,    -1,  1270,
-     210,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   222,    -1,  1169,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,   477,
+     116,    -1,   480,    -1,    -1,    -1,   122,   123,    -1,    -1,
+     753,    -1,    -1,    -1,    -1,   758,    -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,   520,    -1,    -1,    -1,   524,    -1,    -1,    42,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     240,    -1,  1303,    -1,    -1,  1190,    -1,    -1,   844,    -1,
-     846,   847,   848,    -1,    -1,    -1,    -1,  1202,  1485,  1204,
-      -1,    -1,    -1,    -1,    -1,   265,    -1,    -1,    -1,   865,
-      -1,    -1,   272,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   879,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1239,    -1,    -1,   297,    -1,    -1,
-      -1,  1246,  1247,  1248,    -1,    -1,    -1,    -1,   571,   572,
-     310,    -1,  1257,  1258,    -1,    -1,    -1,  1378,    -1,    -1,
-      -1,    -1,   918,    -1,    -1,  1270,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   598,    -1,    -1,   601,   602,
-      -1,   604,  1403,   606,   607,   345,    -1,    -1,   611,   612,
-     350,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1309,  1426,   962,    -1,    -1,    -1,
-      -1,   967,  1433,    -1,    -1,    -1,   972,    -1,    -1,    -1,
-      -1,   977,    -1,    -1,    -1,    -1,   982,    -1,   984,   985,
-      -1,    -1,   988,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   997,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1013,  1014,    -1,
-      -1,    -1,    -1,    -1,  1485,   425,   426,    -1,    -1,    -1,
-      -1,   431,    -1,  1378,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1039,    -1,    -1,  1042,    -1,    -1,    -1,
-      -1,    -1,   452,    -1,    -1,    -1,    10,    11,    12,    13,
+    1379,    -1,  1266,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   818,    -1,    70,    -1,    -1,
+      -1,    -1,   825,    -1,    77,    78,    -1,    -1,    -1,    -1,
+     568,   569,    -1,    -1,    -1,   838,    -1,   840,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   586,   587,
+     853,    -1,    -1,    -1,    -1,    -1,   859,  1436,   596,  1438,
+     598,   599,    -1,   116,    -1,   148,    -1,   605,   871,   122,
+     123,   874,    -1,    -1,    -1,   158,    -1,   615,   616,    -1,
+      -1,    -1,    -1,   621,    -1,    -1,   169,   170,    -1,    -1,
+      -1,    -1,   630,   631,  1473,    -1,  1475,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   646,    -1,
+      -1,    -1,    -1,   651,   652,    -1,    -1,   655,   656,    -1,
+      -1,    -1,    -1,  1502,   662,    -1,   283,    -1,   285,   286,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   295,   296,
+      -1,    -1,    -1,   681,    -1,    -1,    -1,    -1,    40,    41,
+      -1,    43,    -1,   310,   311,    -1,    -1,   240,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   704,   705,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,   982,
+      -1,   264,    -1,    75,    -1,    77,    78,    79,   345,    -1,
+      82,    83,    84,    85,    86,    87,    88,    89,    -1,    91,
+      92,   739,    -1,    -1,    -1,   743,   744,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   114,   380,   116,    -1,   118,   119,    -1,    -1,
+     122,   123,   124,   125,   126,   127,    -1,    -1,    -1,    -1,
+    1043,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   786,    -1,
+      -1,    -1,    -1,  1517,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   802,    -1,   804,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1077,    -1,   814,    -1,    -1,  1082,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1090,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   379,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    -1,
+      -1,  1124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      42,    -1,  1135,    -1,    -1,  1138,    -1,  1140,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   885,    -1,    -1,
+      -1,    -1,  1155,  1156,   892,   893,    -1,   895,    70,    -1,
+      -1,   899,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,
+      -1,    -1,  1175,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   920,   921,    -1,    -1,    -1,    -1,    -1,   472,
+      -1,    -1,   549,   550,   551,   552,   553,   554,   555,   556,
+     557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   955,  1221,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1229,    -1,    -1,   512,
+      -1,    -1,    -1,    -1,    -1,    -1,   974,   975,    -1,    -1,
+      -1,   524,    -1,    -1,    -1,    -1,   984,   530,    -1,    -1,
+     533,    -1,   990,   991,    -1,   993,   994,   995,    -1,    -1,
+      -1,    -1,    -1,   546,    -1,    -1,    -1,  1005,  1006,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      -1,    -1,    -1,   576,    -1,    -1,  1299,    -1,  1301,    -1,
+     583,    -1,    42,    -1,   587,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1317,    -1,  1319,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1065,    -1,  1067,
+      70,  1334,   689,    -1,  1072,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1081,    -1,    -1,  1349,  1350,    -1,    -1,
+     633,    -1,    -1,    -1,    -1,    -1,    -1,  1360,   641,    -1,
+    1363,    -1,    -1,    -1,    -1,    -1,  1104,  1105,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1128,  1394,    -1,   750,  1397,    -1,  1399,  1400,  1401,    -1,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,   780,    -1,    32,    33,    34,    35,    36,
+      37,    38,    -1,    -1,   717,    42,    -1,  1440,    -1,  1442,
+      -1,  1444,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   739,  1460,   741,    -1,
+      -1,    -1,    -1,    70,    -1,    -1,    -1,  1205,   751,    -1,
+      77,    78,    -1,    -1,   757,    -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,   797,   798,    42,    43,    -1,    -1,
+    1258,  1259,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     813,    -1,    -1,    -1,    -1,    -1,    -1,   894,    -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,   852,
+      -1,    -1,    -1,   856,    -1,    -1,    -1,    40,    41,    -1,
+      43,    -1,    -1,   940,    -1,    -1,    -1,    -1,   114,    -1,
+     116,    -1,    -1,    -1,   120,    -1,   122,   123,    -1,    -1,
+      -1,    -1,   885,    -1,    -1,    -1,    69,    -1,    -1,   892,
+      -1,    -1,    75,    -1,    -1,   972,    79,    -1,    -1,    82,
+      83,    84,    85,    86,    87,    88,    89,   984,    91,    92,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1379,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   932,
+      -1,   114,    -1,   116,    -1,    -1,   119,    -1,    -1,   122,
+     123,   124,   125,   126,   127,    -1,  1023,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   959,    -1,    -1,    -1,
+      -1,   964,    -1,    -1,   967,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   987,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   998,    -1,    -1,    -1,    -1,
+      -1,    -1,    40,    41,    -1,    43,    -1,    -1,    -1,    -1,
+    1468,    -1,    -1,    -1,    -1,  1018,    -1,  1020,    -1,    -1,
+      -1,    -1,  1099,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    69,  1035,  1036,  1492,  1493,    -1,    75,    -1,    -1,
+      -1,    79,    -1,    -1,    82,    83,    84,    85,    86,    87,
+      88,    89,  1055,    91,    92,    -1,    -1,    -1,    -1,  1517,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   114,    -1,   116,    -1,
+      -1,  1158,  1159,   121,   122,   123,   124,   125,   126,   127,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1109,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1128,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1143,  1144,     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,    -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,    -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,    -1,    -1,    -1,
+      -1,    -1,  1285,    -1,    -1,  1288,    -1,    -1,    -1,  1366,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1383,    -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,    -1,
+      39,    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,  1455,  1456,
+      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,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   137,     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,
-     480,  1426,    -1,    -1,   747,   748,    -1,    41,  1433,  1085,
-      -1,    -1,   492,    -1,    -1,  1091,  1092,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   504,    -1,   506,    -1,    -1,   509,
-      -1,   511,   512,    -1,  1110,    69,    -1,    -1,    -1,  1115,
-      -1,    -1,    -1,   523,  1120,    -1,    80,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1131,    -1,    -1,    -1,    -1,
-    1485,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1144,    -1,
-    1146,  1147,  1148,  1149,    -1,    -1,    -1,    68,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1161,    77,  1163,    79,    -1,
-      81,  1167,    -1,    -1,    -1,   575,    -1,    88,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,   589,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1195,
-    1196,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,
-     121,   122,   123,    -1,    -1,   615,    -1,    -1,    -1,    -1,
-     620,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   629,
-     630,    -1,    -1,    -1,    -1,   898,    -1,    -1,    -1,    -1,
-     903,    -1,    -1,    -1,    -1,   645,    -1,    -1,    -1,    -1,
-     161,    -1,    -1,  1249,  1250,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1259,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   677,    10,    11,
+      24,    25,    26,    27,    28,    29,    -1,    -1,    32,    33,
+      34,    35,    -1,    -1,    -1,    39,    40,    41,    42,    43,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1502,
+      -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,    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,    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,   703,    -1,   705,    -1,    -1,    -1,    41,
-      -1,   222,    -1,   224,   225,   226,    -1,    46,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1321,    -1,  1323,  1324,  1325,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,   738,  1335,
-      -1,    -1,    74,    -1,    76,    77,    78,  1343,    -1,   260,
-      -1,    -1,    -1,    -1,   265,    87,    88,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,   280,
-      -1,    -1,  1368,  1369,   103,    -1,    -1,    -1,    -1,    -1,
-      -1,   113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,
-     122,   148,    -1,    -1,    -1,  1058,   796,    -1,    -1,    -1,
-      -1,   158,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   169,   170,    -1,    -1,    -1,  1413,  1414,    -1,
-     331,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1426,    -1,    -1,    -1,    -1,    -1,    -1,  1433,    -1,   350,
-      -1,    -1,    -1,   172,   355,   356,    -1,    -1,    -1,    -1,
-      -1,    -1,   363,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   195,    -1,    -1,    -1,
-    1466,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,    -1,
-     209,    -1,    -1,   240,   884,    -1,    -1,    -1,    -1,   218,
-      -1,   891,    -1,    -1,   405,    -1,    -1,    -1,    -1,   228,
-      -1,    -1,  1498,    -1,  1500,    -1,   906,   264,    -1,    -1,
-      -1,    -1,   423,    -1,    -1,    -1,    -1,   428,    -1,   430,
-      -1,    -1,    -1,  1186,   253,    -1,    -1,    -1,    -1,   258,
-      -1,   931,  1528,  1529,    -1,   446,    -1,    -1,   449,   450,
-    1536,  1537,   271,    -1,    -1,    -1,   457,    -1,   277,    -1,
-     279,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     471,    -1,    -1,    -1,    -1,    -1,    -1,   478,    -1,   298,
+      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,   983,    10,    11,    12,    13,    14,    15,
+      -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,    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,    -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,  1004,  1005,    32,    33,    34,    -1,
-     339,    -1,    -1,    -1,   343,    41,    -1,    -1,    -1,    -1,
-      -1,    -1,   379,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      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,   371,    69,    -1,    -1,   375,   376,    -1,   378,
-      76,    77,    -1,    -1,    -1,    -1,   385,   386,    -1,   388,
-     389,  1061,   391,    -1,   393,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   589,    -1,
-      -1,   410,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   418,
-      -1,    -1,    -1,    -1,    -1,   121,   122,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   617,    -1,    -1,    -1,
-      -1,   622,    -1,   442,    -1,   472,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1127,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   468,
-      -1,    -1,    -1,    -1,    -1,   474,    -1,    -1,    -1,    -1,
-     479,    -1,    -1,    -1,   511,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   523,    -1,  1168,    -1,
-      -1,    -1,   529,    -1,    -1,   532,   157,   158,    -1,    -1,
-     691,    -1,    -1,    -1,    -1,    -1,   515,    -1,   545,    -1,
-      -1,    -1,    -1,    -1,   705,    -1,    -1,    -1,    -1,    -1,
-      -1,   530,    -1,    -1,  1204,    -1,    -1,    -1,    -1,   190,
-      -1,    -1,    -1,    -1,    -1,   726,   197,    -1,   575,    -1,
-      -1,    -1,    -1,    -1,    -1,   582,    -1,    -1,    -1,   586,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   567,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   576,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1257,  1258,    -1,
-      -1,    -1,    -1,    -1,    -1,  1265,    -1,   596,    -1,    -1,
-      -1,    -1,    -1,    -1,   785,   632,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   640,    -1,   796,    -1,    -1,   269,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   813,    -1,    -1,   634,    -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,    41,    -1,
-      -1,   670,    -1,    -1,    -1,   326,    -1,    -1,    -1,   678,
-      -1,    -1,    -1,   334,   335,    -1,   337,   338,    -1,   716,
-      -1,    -1,    -1,    -1,   345,    -1,    69,    -1,   349,    -1,
-      -1,    74,    -1,    76,    77,    78,    -1,    -1,  1378,    -1,
-     709,   738,    -1,   740,    87,    88,    -1,   368,    -1,    -1,
-      -1,   720,   721,   750,    -1,    -1,    -1,    -1,    -1,   756,
+      -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,
-     113,    -1,   115,   924,    -1,    -1,   397,    -1,   121,   122,
-     401,    -1,    -1,   752,    -1,    -1,    -1,    -1,   757,    -1,
-      -1,    -1,    -1,    -1,    -1,  1435,    -1,  1437,    -1,   796,
-     797,    -1,    -1,   954,    -1,    -1,    -1,    -1,    -1,    -1,
-     431,    -1,    -1,    -1,    -1,   812,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1472,    -1,  1474,   986,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   997,    -1,   817,    -1,
-      -1,    -1,    -1,    -1,   851,   824,   477,    -1,   855,   480,
-      -1,  1501,    -1,    -1,    -1,    -1,    -1,    -1,   837,    -1,
-     839,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   852,    -1,    -1,    -1,   884,    -1,   858,
-      -1,    -1,    -1,    -1,   891,    -1,    -1,    -1,   519,    -1,
-      -1,   870,   523,    -1,   873,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1066,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1080,
-      -1,    -1,    -1,    -1,   931,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   567,   568,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   958,    -1,    -1,   585,   586,   963,    -1,    -1,   966,
-      -1,    -1,    -1,    -1,   595,    -1,   597,   598,    -1,    -1,
-      -1,    -1,    -1,   604,    -1,    -1,    -1,    -1,    -1,   986,
-      -1,    -1,    -1,   614,   615,    -1,    -1,    -1,    -1,   620,
-     997,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   629,   630,
-      -1,    -1,   981,    -1,    -1,    -1,    -1,  1168,    -1,    -1,
-    1017,    -1,  1019,    -1,   645,    -1,    -1,    -1,    -1,   650,
-     651,    -1,    -1,   654,   655,    -1,    -1,  1034,  1035,   283,
-     661,   285,   286,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   295,   296,    -1,    -1,    -1,    -1,  1054,    -1,   680,
-      -1,    -1,    -1,    -1,    -1,    -1,   310,   311,    -1,    -1,
-      -1,    -1,    -1,  1042,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   703,   704,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   345,    -1,    -1,    -1,    -1,    -1,  1076,    -1,    -1,
-      -1,  1108,  1081,    -1,  1265,    -1,    -1,   738,    -1,    -1,
-    1089,   742,   743,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1127,    -1,    -1,    -1,    -1,    -1,   380,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1142,  1143,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1123,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   785,  1134,    -1,    -1,  1137,    -1,
-    1139,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     801,    -1,   803,    -1,    -1,  1154,  1155,    -1,    -1,    -1,
-      -1,    -1,   813,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1174,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     0,    -1,    -1,     3,     4,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   114,    -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,    24,
       25,    26,    27,    28,    29,    -1,    -1,    32,    33,    34,
-      35,  1220,    -1,    38,    -1,    -1,    41,    42,    -1,  1228,
-      -1,    -1,    -1,   884,    -1,    -1,    -1,    -1,    -1,    -1,
-     891,   892,    -1,   894,    -1,    -1,    -1,   898,    -1,    -1,
-      -1,    66,    -1,    -1,    69,    -1,    71,  1284,    73,    74,
-    1287,    76,    77,    78,    -1,    -1,    -1,    -1,   919,   920,
-      -1,    -1,    87,    88,   548,   549,   550,   551,   552,   553,
-     554,   555,   556,   557,   558,   559,   560,   561,   562,   563,
-     564,   565,    -1,    -1,    -1,    -1,    -1,    -1,   113,  1298,
-     115,  1300,    -1,   954,    -1,    -1,   121,   122,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1316,    -1,  1318,
-      -1,    -1,   973,   974,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   983,    -1,  1333,  1516,    -1,    -1,   989,   990,
-      -1,   992,   993,   994,    -1,    -1,    -1,    -1,    -1,  1348,
-    1349,    -1,    -1,  1004,  1005,    -1,    -1,    -1,    -1,    -1,
-    1359,    -1,    -1,  1362,    10,    11,    12,    13,    14,    15,
+      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,     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,    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,     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,    32,
+      33,    34,    35,    -1,    -1,    -1,    39,    -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,    -1,    -1,    81,     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,   116,    -1,    39,    -1,    -1,    42,   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,    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,   116,    -1,    42,    -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,    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,   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,    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,     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,     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,    -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,    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,   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,    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,   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,    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,    43,    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,    -1,    -1,    77,    78,
+      -1,    -1,    -1,    42,    43,    -1,    -1,   119,    -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,    43,
+      -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,   120,    -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,    30,  1384,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1393,    41,    -1,  1396,    -1,  1398,
-    1399,  1400,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1064,   688,  1066,    -1,    -1,    -1,    -1,
-    1071,    -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,  1080,
-      -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
-    1439,    -1,  1441,    -1,  1443,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1103,  1104,    -1,    -1,    -1,    -1,    -1,    -1,
-    1459,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1501,   749,  1127,     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,   779,    32,    33,    34,    35,
-      -1,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
-      -1,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
-      -1,    -1,    -1,    59,    -1,    -1,    -1,    63,    64,    -1,
-      66,    -1,    68,    69,    -1,    71,    -1,    73,    74,    -1,
-      76,    77,    78,  1204,    -1,    81,    82,    83,    84,    85,
-      86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,
+      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,   113,    -1,   115,
-      -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,   125,
-     126,    -1,    -1,    -1,    -1,   131,  1257,  1258,    -1,    -1,
-     136,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   893,
+      -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,    -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,   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,    -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,
+     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,    -1,    -1,    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,    -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,   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,    -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,   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,   119,    -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,    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,    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,
+       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,    -1,    -1,
+      -1,    -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,    75,    42,    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,
+      70,    -1,    -1,    -1,    -1,    75,    -1,    77,    78,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,
        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,    38,    39,    40,    41,    42,
-      -1,    -1,    -1,    -1,    -1,   939,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    68,    69,    -1,    71,    -1,
-      73,    74,    -1,    76,    77,    78,    -1,   971,    81,    82,
-      83,    84,    85,    86,    87,    88,    -1,    90,    91,   983,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1378,    -1,    -1,
-     113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
-     123,   124,   125,   126,    -1,    -1,    -1,    -1,  1022,    -1,
-      -1,    -1,    -1,   136,    -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,    38,    -1,    -1,    41,    42,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1467,    -1,    -1,    -1,
-      -1,    -1,    66,    -1,  1098,    69,    -1,    71,    -1,    73,
-      74,    -1,    76,    77,    78,    -1,    -1,    -1,    -1,    -1,
-    1491,  1492,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1516,    -1,    -1,    -1,   113,
-      -1,   115,    -1,    -1,    -1,   119,    -1,   121,   122,    -1,
-      -1,    -1,    -1,  1157,  1158,     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,
-      38,    39,    40,    41,    42,    -1,    -1,    -1,    -1,    -1,
+      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,
-      68,    69,    -1,    71,    -1,    73,    74,    -1,    76,    77,
-      78,    -1,    -1,    81,    82,    83,    84,    85,    86,    87,
-      88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
-      -1,    -1,    -1,   121,   122,   123,   124,   125,   126,    -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,
-      39,    40,    41,    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,    68,
-      69,    -1,    71,    -1,    73,    74,    -1,    76,    77,    78,
-      -1,  1365,    81,    82,    83,    84,    85,    86,    87,    88,
-      -1,    90,    91,    -1,    -1,    -1,    -1,    -1,  1382,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,
-      -1,   120,   121,   122,   123,   124,   125,   126,     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,    39,    40,    41,    42,    -1,    -1,    -1,
-    1454,  1455,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    68,    69,    -1,    71,    -1,    73,    74,    -1,
-      76,    77,    78,    -1,    -1,    81,    82,    83,    84,    85,
-      86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,
-      -1,    -1,    -1,    -1,   120,   121,   122,   123,   124,   125,
-     126,     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,    39,    40,    41,    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,    68,    69,    -1,    71,    -1,
-      73,    74,    -1,    76,    77,    78,    -1,    -1,    81,    82,
-      83,    84,    85,    86,    87,    88,    -1,    90,    91,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
-     123,   124,   125,   126,     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,    39,
-      40,    41,    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,    68,    69,
-      -1,    71,    -1,    73,    74,    -1,    76,    77,    78,    -1,
-      -1,    81,    82,    83,    84,    85,    86,    87,    88,    -1,
-      90,    91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,    -1,
-      -1,   121,   122,   123,   124,   125,   126,     4,     5,     6,
+      -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,    39,    40,    41,    42,    -1,    -1,    -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,    68,    69,    -1,    71,    -1,    73,    74,    -1,    76,
-      77,    78,    -1,    -1,    81,    82,    83,    84,    85,    86,
-      87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,
-      -1,    -1,    -1,    -1,   121,   122,   123,   124,   125,   126,
-       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,    38,    -1,    -1,    41,    42,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    66,    -1,    -1,    69,    -1,    71,    -1,
-      73,    74,    -1,    76,    77,    78,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
-       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,    41,    -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,    69,    -1,    71,    -1,
-      73,    74,    41,    76,    77,    78,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    88,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,
-     113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
-       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,    32,
-      33,    34,    35,    -1,    -1,    38,    -1,    -1,    41,    -1,
-      -1,    -1,    -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,    -1,    71,    -1,
-      73,    -1,    -1,    76,    77,    -1,    -1,    80,     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,   115,    38,    -1,    -1,    41,    -1,   121,   122,
-      -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,    -1,    71,    -1,    73,    -1,
-      -1,    76,    77,     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,
-     115,    41,    -1,    -1,    -1,    -1,   121,   122,    -1,     7,
-      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
-      -1,    71,    -1,    73,    -1,    -1,    76,    77,    -1,    -1,
-      -1,    39,    40,    41,    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,
-      68,    69,    -1,    -1,    -1,   115,    74,    -1,    -1,    -1,
-      78,   121,   122,    81,    82,    83,    84,    85,    86,    87,
-      88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
-      -1,    -1,    -1,   121,   122,   123,   124,   125,   126,     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,    41,    -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,    69,    -1,    71,    -1,    73,    74,
-      41,    76,    77,    78,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,
-      -1,    -1,    -1,    -1,    -1,    76,    77,    -1,   113,    -1,
-     115,    -1,    -1,    -1,    -1,    -1,   121,   122,     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,   115,    -1,    32,    33,    34,    -1,
-     121,   122,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -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,    -1,    71,    -1,    73,    -1,    -1,
-      76,    77,    -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,   114,   115,
-      41,    -1,    -1,    -1,    -1,   121,   122,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,
-      71,    -1,    73,    -1,    -1,    76,    77,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   100,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,
-     121,   122,     4,     5,     6,     7,     8,     9,    10,    11,
+      -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,    41,
-      -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,    69,    -1,    71,
-      -1,    73,    -1,    41,    76,    77,    -1,    -1,    -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,   100,    -1,
-      -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,
-      -1,    -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,
-     122,     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,   115,    -1,    32,
-      33,    34,    -1,   121,   122,    -1,    -1,    -1,    41,    -1,
-      -1,    -1,    -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,    -1,    71,    -1,
-      73,    -1,    -1,    76,    77,    -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,   115,    41,    -1,    -1,    -1,    -1,   121,   122,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    69,    -1,    71,    -1,    73,    -1,    -1,    76,    77,
-      -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,   115,    41,    -1,
-      -1,    -1,    -1,   121,   122,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    71,    -1,
-      73,    -1,    -1,    76,    77,    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,    39,    40,    41,    42,    -1,    -1,
-      -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    68,    69,    -1,    -1,    -1,    -1,    74,
-      -1,    76,    77,    78,    -1,    -1,    81,    82,    83,    84,
-      85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
-     115,    -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,
-     125,   126,    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,    39,    40,    41,    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,
-      68,    69,    -1,    -1,    -1,    -1,    74,    -1,    76,    77,
-      78,    -1,    -1,    81,    82,    83,    84,    85,    86,    87,
-      88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   113,   114,   115,    -1,    -1,
-      -1,    -1,    -1,   121,   122,   123,   124,   125,   126,    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,    39,    40,
-      41,    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,    68,    69,    -1,
-      -1,    -1,    -1,    74,    -1,    76,    77,    78,    -1,    -1,
-      81,    82,    83,    84,    85,    86,    87,    88,    -1,    90,
-      91,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   113,    -1,   115,    -1,    -1,    -1,    -1,    -1,
-     121,   122,   123,   124,   125,   126,    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,    39,    40,    41,    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,    68,    69,    -1,    -1,    -1,    -1,
-      74,    -1,    76,    77,    78,    -1,    -1,    81,    82,    83,
-      84,    85,    86,    87,    88,    -1,    90,    91,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,
-      -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,   123,
-     124,   125,   126,    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,    39,    40,    41,    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,    68,    69,    -1,    -1,    -1,    -1,    74,    -1,    76,
-      77,    78,    -1,    -1,    81,    82,    83,    84,    85,    86,
-      87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,
-      -1,    -1,    -1,    -1,   121,   122,   123,   124,   125,   126,
-       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,    41,    -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,    69,    -1,    71,    -1,
-      73,    41,    -1,    76,    77,    -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,
-      -1,    -1,    -1,    -1,    74,    -1,    76,    77,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,    -1,    87,    88,    -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,   115,    32,    33,    34,    -1,
-      -1,   121,   122,    -1,    -1,    41,    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,    69,    -1,    -1,    -1,    -1,    41,    42,
-      76,    77,    -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,    -1,    -1,    -1,
-      -1,    -1,    -1,    76,    77,    -1,    -1,    -1,    -1,   115,
-      -1,    -1,    -1,   119,    -1,   121,   122,    -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,   115,    32,    33,    34,   119,    -1,   121,   122,
-      -1,    -1,    41,    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,
-      69,    -1,    -1,    -1,    -1,    41,    -1,    76,    77,    -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,    -1,    -1,    -1,    -1,    -1,    -1,
-      76,    77,    -1,    -1,    -1,    -1,   115,    -1,    -1,    -1,
-     119,    -1,   121,   122,    -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,   115,
-      32,    33,    34,    -1,    -1,   121,   122,    -1,    -1,    41,
-      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,    69,    -1,    -1,
-      -1,    41,    -1,    -1,    76,    77,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
-      -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    -1,    -1,
-      -1,    -1,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,
-     122,    -1,    -1,    -1,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    -1,   115,    32,    33,    34,    -1,
-      -1,   121,   122,    -1,    -1,    41,    -1,    -1,    -1,    -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,    -1,    -1,    -1,    -1,    -1,    -1,
-      76,    77,    -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,   115,
-      41,    -1,    -1,    -1,    -1,   121,   122,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,
-      71,    -1,    73,    -1,    -1,    76,    77,    39,    40,    -1,
-      42,    43,    -1,    45,    -1,    -1,    48,    49,    50,    51,
-      52,    53,    54,    55,    -1,    -1,    58,    59,    -1,    -1,
-      -1,    63,    64,    -1,    66,    -1,    68,    -1,    -1,    -1,
-      -1,    -1,    74,   114,    -1,    -1,    78,    -1,    -1,    81,
-      82,    83,    84,    85,    86,    87,    88,    -1,    90,    91,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   113,    -1,   115,    -1,    -1,   118,    -1,    -1,   121,
-     122,   123,   124,   125,   126,    -1,    -1,    39,    40,   131,
-      42,    43,    -1,    45,   136,    -1,    48,    49,    50,    51,
-      52,    53,    54,    55,    -1,    -1,    -1,    59,    -1,    -1,
-      -1,    63,    64,    -1,    66,    -1,    68,    -1,    -1,    -1,
-      -1,    -1,    74,    -1,    -1,    -1,    78,    -1,    -1,    81,
-      82,    83,    84,    85,    86,    87,    88,    -1,    90,    91,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   113,    -1,   115,    -1,    -1,   118,    -1,    -1,   121,
-     122,   123,   124,   125,   126,    -1,    -1,    -1,    -1,   131,
-      -1,    -1,    -1,    -1,   136,     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,    41,    -1,    39,    40,    -1,    42,    43,    -1,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    -1,    58,    59,    -1,    -1,    -1,    63,    64,
-      69,    66,    71,    68,    73,    -1,    -1,    76,    77,    74,
-      -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,    84,
-      85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
-      -1,   100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
-     115,    -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,
-     125,   126,    -1,    -1,    39,    40,   131,    42,    43,    -1,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    -1,    -1,    59,    -1,    -1,    -1,    63,    64,
-      -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,    74,
-      -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,    84,
-      85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
-     115,    -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,
-     125,   126,    -1,    -1,    39,    40,   131,    42,    43,    -1,
-      45,    -1,    -1,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    -1,    -1,    59,    -1,    -1,    -1,    63,    64,
-      -1,    66,    -1,    68,    -1,    -1,    -1,    -1,    -1,    74,
-      -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,    84,
-      85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
-      -1,    -1,    -1,    39,    40,    -1,    42,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
-     115,    -1,    -1,   118,    -1,    -1,   121,   122,   123,   124,
-     125,   126,    68,    -1,    -1,    -1,   131,    -1,    74,    -1,
-      76,    77,    78,    -1,    -1,    81,    82,    83,    84,    85,
-      86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,
-      -1,    -1,    39,    40,    -1,    42,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,
-      -1,   117,   118,    -1,    -1,   121,   122,   123,   124,   125,
-     126,    68,    -1,    -1,    -1,    -1,    -1,    74,    -1,    -1,
-      -1,    78,    -1,    -1,    81,    82,    83,    84,    85,    86,
-      87,    88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,
-      -1,    39,    40,    -1,    42,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,
-      -1,   118,    -1,    -1,   121,   122,   123,   124,   125,   126,
-      68,    -1,    -1,    -1,    -1,    -1,    74,    -1,    -1,    -1,
-      78,    -1,    -1,    81,    82,    83,    84,    85,    86,    87,
-      88,    -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,
-      39,    40,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,
-      -1,    -1,   120,   121,   122,   123,   124,   125,   126,    68,
-      -1,    -1,    -1,    -1,    -1,    74,    -1,    -1,    -1,    78,
-      -1,    -1,    81,    82,    83,    84,    85,    86,    87,    88,
-      -1,    90,    91,    -1,    -1,    -1,    -1,    -1,    -1,    39,
-      40,    -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   113,    -1,   115,    -1,    -1,   118,
-      -1,    -1,   121,   122,   123,   124,   125,   126,    68,    -1,
-      -1,    -1,    -1,    -1,    74,    -1,    -1,    -1,    78,    -1,
-      -1,    81,    82,    83,    84,    85,    86,    87,    88,    -1,
-      90,    91,    -1,    -1,    -1,    -1,    -1,    -1,    39,    40,
-      -1,    42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   113,    -1,   115,    -1,    -1,    -1,    -1,
-      -1,   121,   122,   123,   124,   125,   126,    68,    -1,    -1,
-      -1,    -1,    -1,    74,    -1,    -1,    -1,    78,    -1,    -1,
-      81,    82,    83,    84,    85,    86,    87,    88,    -1,    90,
-      91,    -1,    -1,    -1,    -1,    -1,    -1,    39,    40,    -1,
-      42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   113,    -1,   115,    -1,    -1,    -1,    -1,    -1,
-     121,   122,   123,   124,   125,   126,    68,    -1,    -1,    -1,
-      -1,    -1,    74,    -1,    -1,    -1,    78,    -1,    -1,    81,
-      82,    83,    84,    85,    86,    87,    88,    -1,    90,    91,
-      -1,    -1,    -1,    -1,    -1,    -1,    39,    40,    -1,    42,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,
-     122,   123,   124,   125,   126,    68,    -1,    -1,    -1,    -1,
-      -1,    74,    -1,    -1,    -1,    78,    -1,    -1,    81,    82,
-      83,    84,    85,    86,    87,    88,    -1,    90,    91,    -1,
-      -1,    -1,    -1,    -1,    -1,    39,    40,    -1,    42,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     113,    -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,
-     123,   124,   125,   126,    68,    -1,    -1,    -1,    -1,    -1,
-      74,    -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,
-      84,    85,    86,    87,    88,    -1,    90,    91,    -1,    -1,
-      -1,    -1,    -1,    -1,    39,    40,    -1,    42,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,
-      -1,   115,    -1,    -1,    -1,    -1,    -1,   121,   122,   123,
-     124,   125,   126,    68,    -1,    -1,    -1,    -1,    -1,    74,
-      -1,    -1,    -1,    78,    -1,    -1,    81,    82,    83,    84,
-      85,    86,    87,    88,    -1,    90,    91,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   113,    -1,
-     115,    -1,    -1,    -1,    -1,    -1,   121,   122,   123,   124,
-     125,   126,     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,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
-      -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,    69,    -1,    71,
-      -1,    73,    74,    41,    76,    77,    78,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    87,    88,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    69,    -1,    -1,    -1,    -1,    74,    -1,    76,    77,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
-      88,     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,    41,
-      -1,    -1,    -1,    -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,    -1,    71,
-      -1,    73,    -1,    -1,    76,    77,     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,    41,    -1,    -1,    -1,    -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,    -1,    71,    -1,    73,    -1,    -1,    76,
-      77,     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,    41,    -1,
-      -1,    -1,    -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,    -1,    71,    -1,
-      73,    -1,    -1,    76,    77,    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,    -1,    -1,    -1,    41,    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,    69,    -1,    -1,    -1,    41,    -1,
-      -1,    76,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,
-      -1,    -1,    -1,    76,    77
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
+      72,    -1,    74,    -1,    -1,    77,    78
 };
 
@@ -3941,155 +3913,156 @@
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    32,    33,
-      34,    35,    38,    41,    42,    66,    69,    71,    73,    74,
-      76,    77,    78,    87,    88,   113,   115,   121,   122,   141,
-     144,   156,   205,   219,   220,   221,   222,   223,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   238,   239,   240,   241,   242,   243,   244,   246,   247,
-     248,   249,   250,   251,   253,   261,   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,    74,   143,   144,   156,   222,   224,   232,   234,
-     243,   247,   249,   290,    83,   113,   318,   319,   320,   318,
-     318,    74,    76,    77,    78,   142,   143,   279,   280,   300,
-     301,    76,    77,   280,   113,   311,    11,   206,   113,   156,
-     325,   330,   331,   332,   334,   335,   336,   116,   138,   225,
-     232,   234,   329,   333,   372,   373,   376,   377,   139,   111,
-     135,   283,   118,   139,   180,    76,    77,   141,   278,   139,
-     139,   139,   120,   139,    76,    77,   113,   156,   315,   324,
-     325,   326,   327,   328,   329,   333,   337,   338,   339,   340,
-     341,   347,     3,    30,    80,   245,     3,     5,    76,   115,
-     156,   224,   235,   239,   241,   250,   291,   329,   333,   376,
-     222,   224,   234,   243,   247,   249,   290,   329,   333,    35,
-     240,   240,   235,   241,   139,   240,   235,   240,   235,    77,
-     113,   118,   280,   291,   118,   280,   240,   235,   120,   139,
-     139,     0,   138,   113,   180,   318,   318,   138,   115,   232,
-     234,   374,   278,   278,   135,   234,   113,   156,   315,   325,
-     329,   115,   156,   376,   312,   237,   320,   113,   296,   113,
-     113,    53,   113,    39,    40,    42,    68,    74,    78,    81,
-      82,    83,    84,    85,    86,    90,    91,   113,   115,   123,
-     124,   125,   126,   140,   144,   145,   146,   147,   148,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   171,   174,   232,   282,   298,   372,
-     377,   234,   114,   114,   114,   114,   114,   114,   114,   115,
-     232,   356,   374,   115,   121,   156,   171,   224,   225,   231,
-     234,   238,   239,   243,   246,   247,   249,   268,   269,   273,
-     274,   275,   276,   290,   356,   368,   369,   370,   371,   376,
-     377,   113,   329,   333,   376,   113,   120,   136,   115,   118,
-     156,   171,   284,   284,   119,   138,   120,   136,   113,   120,
-     136,   120,   136,   120,   136,   318,   136,   325,   326,   327,
-     328,   338,   339,   340,   341,   234,   324,   337,    66,   317,
-     115,   318,   355,   356,   318,   318,   180,   138,   113,   318,
-     355,   318,   318,   234,   315,   113,   113,   233,   234,   232,
-     234,   138,   232,   372,   377,   180,   138,   278,   283,   224,
-     239,   329,   333,   180,   138,   300,   234,   243,   136,   234,
-     234,   298,   254,   252,   264,   280,   263,   234,   300,   136,
-     136,   311,   138,   143,   277,     3,   139,   214,   215,   229,
-     231,   234,   138,   317,   113,   317,   171,   325,   234,   113,
-     138,   278,   118,    35,    36,    37,   232,   292,   293,   295,
-     138,   132,   135,   297,   138,   235,   240,   241,   278,   321,
-     322,   323,   113,   145,   113,   155,   113,   155,   158,   113,
-     155,   113,   113,   155,   155,   115,   171,   176,   180,   232,
-     281,   372,   376,   138,    83,    85,    89,    90,    91,   113,
-     115,   117,   118,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   135,   173,   158,   158,   121,   127,
-     128,   123,   124,    92,    93,    94,    95,   129,   130,    96,
-      97,   122,   131,   132,    98,    99,   133,   113,   156,   351,
-     352,   353,   354,   355,   114,   120,   113,   355,   356,   113,
-     355,   356,   138,   232,   374,   116,   138,   139,   232,   234,
-     367,   368,   376,   377,   139,   113,   115,   156,   325,   342,
-     343,   344,   345,   346,   347,   348,   349,   350,   356,   357,
-     358,   359,   360,   361,   362,   156,   376,   234,   139,   139,
-     156,   232,   234,   369,   278,   232,   356,   369,   278,   138,
-     138,   138,   138,    74,   115,   117,   144,   280,   284,   285,
-     286,   287,   288,   138,   138,   138,   138,   138,   138,   315,
-     114,   114,   114,   114,   114,   114,   114,   324,   337,   113,
-     283,   116,   214,   138,   315,   176,   282,   176,   282,   315,
-     115,   214,   317,   180,   138,   214,   114,    42,   115,   119,
-     232,   255,   256,   257,   372,   118,   120,   378,   135,   265,
-     118,   234,   270,   271,   272,   275,   276,   114,   120,   180,
-     138,   121,   171,   138,   231,   234,   269,   368,   376,   309,
-     310,   113,   156,   342,   114,   120,   135,   379,   280,   292,
-     113,   118,   280,   282,   292,   114,   120,   113,   145,   114,
-     134,   281,   281,   281,   150,   171,   282,   281,   138,   114,
-     120,   114,   113,   156,   355,   363,   364,   365,   366,   114,
-     120,   171,   115,   143,   149,   150,   138,   115,   143,   149,
-     171,   158,   158,   158,   159,   159,   160,   160,   161,   161,
-     161,   161,   162,   162,   163,   164,   165,   166,   167,   134,
-     176,   138,   352,   353,   354,   234,   351,   318,   318,   171,
-     282,   138,   277,   232,   356,   369,   234,   238,   116,   376,
-     116,   113,   138,   325,   343,   344,   345,   348,   358,   359,
-     360,   116,   138,   234,   342,   346,   357,   113,   318,   361,
-     379,   318,   318,   379,   113,   318,   361,   318,   318,   318,
-     318,   356,   232,   367,   377,   278,   116,   120,   116,   120,
-     379,   232,   369,   379,   266,   267,   268,   269,   266,   278,
-     171,   138,   115,   280,   134,   120,   378,   284,   115,   134,
-     288,    31,   216,   217,   278,   266,   143,   315,   143,   317,
-     113,   355,   356,   113,   355,   356,   145,   356,   180,   270,
-     114,   114,   114,   114,   138,   180,   214,   180,   118,   256,
-     257,   138,   113,   134,   156,   258,   260,   324,   325,   337,
-     363,   120,   136,   120,   136,   280,   254,   280,   119,   169,
-     170,   264,   139,   139,   143,   229,   139,   139,   266,   113,
-     156,   376,   139,   119,   234,   293,   171,   294,   139,   138,
-     138,   113,   139,   114,   322,   176,   177,   134,   136,   115,
-     145,   207,   208,   209,   114,   120,   114,   114,   114,   114,
-     171,   364,   365,   366,   234,   363,   318,   318,   118,   158,
-     171,   172,   175,   120,   138,   114,   120,   171,   138,   119,
-     169,   134,   270,   114,   114,   114,   351,   270,   114,   232,
-     369,   115,   121,   156,   171,   171,   234,   348,   270,   114,
-     114,   114,   114,   114,   114,   114,     7,   234,   342,   346,
-     357,   138,   138,   379,   138,   138,   139,   139,   139,   139,
-     283,   169,   170,   171,   316,   138,   284,   286,   119,   138,
-     218,   280,    42,    43,    45,    48,    49,    50,    51,    52,
-      53,    54,    55,    59,    63,    64,    74,   131,   177,   178,
-     179,   180,   181,   182,   184,   185,   197,   199,   200,   205,
-     219,   314,    31,   139,   135,   283,   138,   138,   114,   139,
-     180,   254,   136,   136,   325,   170,   234,   259,   260,   259,
-     280,   318,   119,   265,   378,   114,   120,   116,   116,   139,
-     234,   120,   379,   296,   114,   292,   222,   224,   232,   304,
-     305,   306,   307,   298,   114,   114,   134,   170,   113,   114,
-     134,   120,   143,   114,   114,   114,   363,   285,   120,   139,
-     175,    81,    84,    86,   143,   151,   152,   153,   150,   139,
-     151,   169,   139,   113,   355,   356,   139,   138,   139,   139,
-     139,   171,   114,   139,   113,   355,   356,   113,   361,   113,
-     361,   356,   233,     7,   121,   139,   171,   270,   270,   269,
-     273,   273,   274,   114,   120,   120,   114,   100,   126,   139,
-     139,   151,   284,   171,   120,   136,   219,   223,   234,   238,
-     113,   113,   178,   113,   113,    74,   136,    74,   136,    74,
-     121,   177,   113,   180,   172,   172,   134,   148,   136,   139,
-     138,   139,   218,   114,   171,   270,   270,   318,   114,   119,
-     258,   119,   138,   114,   138,   139,   315,   119,   138,   139,
-     139,   114,   118,   207,   116,   170,   136,   207,   209,   114,
-     113,   355,   356,   378,   172,   116,   139,   154,   115,   152,
-     154,   154,   120,   139,    89,   117,   116,   139,   114,   138,
-     114,   116,   116,   116,   139,   114,   138,   138,   138,   171,
-     171,   139,   116,   139,   139,   139,   139,   138,   138,   170,
-     170,   116,   116,   139,   280,   234,   176,   176,    49,   176,
-     138,   136,   136,   136,   176,   136,   176,    60,    61,    62,
-     201,   202,   203,   136,    65,   136,   318,   118,   182,   119,
-     136,   139,   139,   100,   275,   276,   114,   305,   120,   136,
-     120,   136,   119,   303,   134,   145,   114,   114,   134,   138,
-     119,   116,    85,   138,   152,   116,   115,   152,   115,   152,
-     116,   270,   116,   270,   270,   270,   139,   139,   116,   116,
-     114,   114,   116,   120,   100,   269,   100,   139,   116,   114,
-     114,   113,   114,   177,   198,   219,   136,   114,   113,   113,
-     180,   203,    60,    61,   171,   178,   149,   114,   114,   118,
-     138,   138,   304,   145,   210,   113,   136,   210,   270,   151,
-     138,   138,   139,   139,   139,   139,   116,   116,   138,   139,
-     116,   178,    46,    47,   118,   188,   189,   190,   176,   178,
-     139,   114,   177,   118,   190,   100,   138,   100,   138,   113,
-     113,   136,   119,   138,   278,   315,   119,   120,   134,   170,
-     114,   139,   139,   151,   151,   114,   114,   114,   114,   273,
-      44,   170,   186,   187,   316,   134,   138,   178,   188,   114,
-     136,   178,   136,   138,   114,   138,   114,   138,   100,   138,
-     100,   138,   136,   304,   145,   143,   211,   114,   136,   114,
-     116,   139,   139,   178,   100,   120,   134,   139,   212,   213,
-     219,   136,   177,   177,   212,   180,   204,   232,   372,   180,
-     204,   114,   138,   114,   138,   119,   114,   120,   116,   116,
-     170,   186,   189,   191,   192,   138,   136,   189,   193,   194,
-     139,   113,   156,   315,   363,   143,   139,   180,   204,   180,
-     204,   113,   136,   143,   178,   183,   119,   189,   219,   177,
-      58,   183,   196,   119,   189,   114,   234,   114,   139,   139,
-     298,   178,   183,   136,   195,   196,   183,   196,   180,   180,
-     114,   114,   114,   195,   139,   139,   180,   180,   139,   139
+      34,    35,    39,    42,    43,    67,    70,    72,    74,    75,
+      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,   236,   241,   242,   279,
+     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,
+     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,   177,   178,   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,   132,   178,
+     179,   180,   181,   182,   183,   185,   186,   198,   200,   201,
+     206,   220,   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,   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,    75,   137,    75,   137,
+      75,   122,   178,   114,   181,   173,   173,   135,   149,   137,
+     140,   139,   140,   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,   137,   177,   137,   177,    61,    62,
+      63,   202,   203,   204,   137,    66,   137,   319,   119,   183,
+     120,   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,   179,   150,   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
 };
 
@@ -7564,32 +7537,39 @@
 /* Line 1806 of yacc.c  */
 #line 1895 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Dtype; }
+    break;
+
+  case 494:
+
+/* Line 1806 of yacc.c  */
+#line 1897 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
 
-  case 494:
-
-/* Line 1806 of yacc.c  */
-#line 1897 "parser.yy"
-    { (yyval.tclass) = DeclarationNode::Dtype; }
-    break;
-
   case 495:
 
 /* Line 1806 of yacc.c  */
-#line 1902 "parser.yy"
+#line 1899 "parser.yy"
+    { (yyval.tclass) = DeclarationNode::Ttype; }
+    break;
+
+  case 496:
+
+/* Line 1806 of yacc.c  */
+#line 1904 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 496:
-
-/* Line 1806 of yacc.c  */
-#line 1904 "parser.yy"
+  case 497:
+
+/* Line 1806 of yacc.c  */
+#line 1906 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) ? (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ) : (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 497:
-
-/* Line 1806 of yacc.c  */
-#line 1909 "parser.yy"
+  case 498:
+
+/* Line 1806 of yacc.c  */
+#line 1911 "parser.yy"
     {
 			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
@@ -7598,78 +7578,78 @@
     break;
 
-  case 498:
-
-/* Line 1806 of yacc.c  */
-#line 1914 "parser.yy"
+  case 499:
+
+/* Line 1806 of yacc.c  */
+#line 1916 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
 
-  case 499:
-
-/* Line 1806 of yacc.c  */
-#line 1916 "parser.yy"
+  case 500:
+
+/* Line 1806 of yacc.c  */
+#line 1918 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 500:
-
-/* Line 1806 of yacc.c  */
-#line 1921 "parser.yy"
+  case 501:
+
+/* Line 1806 of yacc.c  */
+#line 1923 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_typevalue( (yyvsp[(1) - (1)].decl) ) ); }
     break;
 
-  case 502:
-
-/* Line 1806 of yacc.c  */
-#line 1924 "parser.yy"
+  case 503:
+
+/* Line 1806 of yacc.c  */
+#line 1926 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( new ExpressionNode( build_typevalue( (yyvsp[(3) - (3)].decl) ) ) ) ); }
     break;
 
-  case 503:
-
-/* Line 1806 of yacc.c  */
-#line 1926 "parser.yy"
+  case 504:
+
+/* Line 1806 of yacc.c  */
+#line 1928 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_last( (yyvsp[(3) - (3)].en) )); }
     break;
 
-  case 504:
-
-/* Line 1806 of yacc.c  */
-#line 1931 "parser.yy"
+  case 505:
+
+/* Line 1806 of yacc.c  */
+#line 1933 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 505:
-
-/* Line 1806 of yacc.c  */
-#line 1933 "parser.yy"
+  case 506:
+
+/* Line 1806 of yacc.c  */
+#line 1935 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 506:
-
-/* Line 1806 of yacc.c  */
-#line 1935 "parser.yy"
+  case 507:
+
+/* Line 1806 of yacc.c  */
+#line 1937 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 507:
-
-/* Line 1806 of yacc.c  */
-#line 1940 "parser.yy"
+  case 508:
+
+/* Line 1806 of yacc.c  */
+#line 1942 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 508:
-
-/* Line 1806 of yacc.c  */
-#line 1942 "parser.yy"
+  case 509:
+
+/* Line 1806 of yacc.c  */
+#line 1944 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 509:
-
-/* Line 1806 of yacc.c  */
-#line 1947 "parser.yy"
+  case 510:
+
+/* Line 1806 of yacc.c  */
+#line 1949 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7678,8 +7658,8 @@
     break;
 
-  case 510:
-
-/* Line 1806 of yacc.c  */
-#line 1952 "parser.yy"
+  case 511:
+
+/* Line 1806 of yacc.c  */
+#line 1954 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7688,8 +7668,8 @@
     break;
 
-  case 511:
-
-/* Line 1806 of yacc.c  */
-#line 1960 "parser.yy"
+  case 512:
+
+/* Line 1806 of yacc.c  */
+#line 1962 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
@@ -7698,8 +7678,8 @@
     break;
 
-  case 512:
-
-/* Line 1806 of yacc.c  */
-#line 1965 "parser.yy"
+  case 513:
+
+/* Line 1806 of yacc.c  */
+#line 1967 "parser.yy"
     {
 			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
@@ -7708,8 +7688,8 @@
     break;
 
-  case 513:
-
-/* Line 1806 of yacc.c  */
-#line 1970 "parser.yy"
+  case 514:
+
+/* Line 1806 of yacc.c  */
+#line 1972 "parser.yy"
     {
 			typedefTable.leaveTrait();
@@ -7719,15 +7699,15 @@
     break;
 
-  case 515:
-
-/* Line 1806 of yacc.c  */
-#line 1980 "parser.yy"
+  case 516:
+
+/* Line 1806 of yacc.c  */
+#line 1982 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 518:
-
-/* Line 1806 of yacc.c  */
-#line 1990 "parser.yy"
+  case 519:
+
+/* Line 1806 of yacc.c  */
+#line 1992 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7736,8 +7716,8 @@
     break;
 
-  case 519:
-
-/* Line 1806 of yacc.c  */
-#line 1995 "parser.yy"
+  case 520:
+
+/* Line 1806 of yacc.c  */
+#line 1997 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7746,8 +7726,8 @@
     break;
 
-  case 520:
-
-/* Line 1806 of yacc.c  */
-#line 2000 "parser.yy"
+  case 521:
+
+/* Line 1806 of yacc.c  */
+#line 2002 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7756,8 +7736,8 @@
     break;
 
-  case 521:
-
-/* Line 1806 of yacc.c  */
-#line 2008 "parser.yy"
+  case 522:
+
+/* Line 1806 of yacc.c  */
+#line 2010 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7766,8 +7746,8 @@
     break;
 
-  case 522:
-
-/* Line 1806 of yacc.c  */
-#line 2013 "parser.yy"
+  case 523:
+
+/* Line 1806 of yacc.c  */
+#line 2015 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7776,43 +7756,43 @@
     break;
 
-  case 523:
-
-/* Line 1806 of yacc.c  */
-#line 2023 "parser.yy"
+  case 524:
+
+/* Line 1806 of yacc.c  */
+#line 2025 "parser.yy"
     {}
     break;
 
-  case 524:
-
-/* Line 1806 of yacc.c  */
-#line 2025 "parser.yy"
+  case 525:
+
+/* Line 1806 of yacc.c  */
+#line 2027 "parser.yy"
     { parseTree = parseTree ? parseTree->appendList( (yyvsp[(1) - (1)].decl) ) : (yyvsp[(1) - (1)].decl);	}
     break;
 
-  case 526:
-
-/* Line 1806 of yacc.c  */
-#line 2031 "parser.yy"
+  case 527:
+
+/* Line 1806 of yacc.c  */
+#line 2033 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
 
-  case 527:
-
-/* Line 1806 of yacc.c  */
-#line 2036 "parser.yy"
+  case 528:
+
+/* Line 1806 of yacc.c  */
+#line 2038 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 531:
-
-/* Line 1806 of yacc.c  */
-#line 2044 "parser.yy"
+  case 532:
+
+/* Line 1806 of yacc.c  */
+#line 2046 "parser.yy"
     {}
     break;
 
-  case 532:
-
-/* Line 1806 of yacc.c  */
-#line 2046 "parser.yy"
+  case 533:
+
+/* Line 1806 of yacc.c  */
+#line 2048 "parser.yy"
     {
 			linkageStack.push( linkage );				// handle nested extern "C"/"Cforall"
@@ -7821,8 +7801,8 @@
     break;
 
-  case 533:
-
-/* Line 1806 of yacc.c  */
-#line 2051 "parser.yy"
+  case 534:
+
+/* Line 1806 of yacc.c  */
+#line 2053 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7832,8 +7812,8 @@
     break;
 
-  case 534:
-
-/* Line 1806 of yacc.c  */
-#line 2057 "parser.yy"
+  case 535:
+
+/* Line 1806 of yacc.c  */
+#line 2059 "parser.yy"
     {	// mark all fields in list
 			for ( DeclarationNode *iter = (yyvsp[(2) - (2)].decl); iter != nullptr; iter = (DeclarationNode *)iter->get_next() )
@@ -7843,8 +7823,8 @@
     break;
 
-  case 536:
-
-/* Line 1806 of yacc.c  */
-#line 2072 "parser.yy"
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2074 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7854,8 +7834,8 @@
     break;
 
-  case 537:
-
-/* Line 1806 of yacc.c  */
-#line 2078 "parser.yy"
+  case 538:
+
+/* Line 1806 of yacc.c  */
+#line 2080 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7865,8 +7845,8 @@
     break;
 
-  case 538:
-
-/* Line 1806 of yacc.c  */
-#line 2087 "parser.yy"
+  case 539:
+
+/* Line 1806 of yacc.c  */
+#line 2089 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7876,8 +7856,8 @@
     break;
 
-  case 539:
-
-/* Line 1806 of yacc.c  */
-#line 2093 "parser.yy"
+  case 540:
+
+/* Line 1806 of yacc.c  */
+#line 2095 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7887,8 +7867,8 @@
     break;
 
-  case 540:
-
-/* Line 1806 of yacc.c  */
-#line 2099 "parser.yy"
+  case 541:
+
+/* Line 1806 of yacc.c  */
+#line 2101 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7898,8 +7878,8 @@
     break;
 
-  case 541:
-
-/* Line 1806 of yacc.c  */
-#line 2105 "parser.yy"
+  case 542:
+
+/* Line 1806 of yacc.c  */
+#line 2107 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7909,8 +7889,8 @@
     break;
 
-  case 542:
-
-/* Line 1806 of yacc.c  */
-#line 2111 "parser.yy"
+  case 543:
+
+/* Line 1806 of yacc.c  */
+#line 2113 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7920,8 +7900,8 @@
     break;
 
-  case 543:
-
-/* Line 1806 of yacc.c  */
-#line 2119 "parser.yy"
+  case 544:
+
+/* Line 1806 of yacc.c  */
+#line 2121 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7931,8 +7911,8 @@
     break;
 
-  case 544:
-
-/* Line 1806 of yacc.c  */
-#line 2125 "parser.yy"
+  case 545:
+
+/* Line 1806 of yacc.c  */
+#line 2127 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7942,8 +7922,8 @@
     break;
 
-  case 545:
-
-/* Line 1806 of yacc.c  */
-#line 2133 "parser.yy"
+  case 546:
+
+/* Line 1806 of yacc.c  */
+#line 2135 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7953,8 +7933,8 @@
     break;
 
-  case 546:
-
-/* Line 1806 of yacc.c  */
-#line 2139 "parser.yy"
+  case 547:
+
+/* Line 1806 of yacc.c  */
+#line 2141 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7964,75 +7944,61 @@
     break;
 
-  case 550:
-
-/* Line 1806 of yacc.c  */
-#line 2154 "parser.yy"
+  case 551:
+
+/* Line 1806 of yacc.c  */
+#line 2156 "parser.yy"
     { (yyval.en) = new ExpressionNode( build_range( (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ) ); }
     break;
 
-  case 551:
-
-/* Line 1806 of yacc.c  */
-#line 2159 "parser.yy"
+  case 552:
+
+/* Line 1806 of yacc.c  */
+#line 2161 "parser.yy"
     { (yyval.constant) = nullptr; }
     break;
 
-  case 552:
-
-/* Line 1806 of yacc.c  */
-#line 2161 "parser.yy"
+  case 553:
+
+/* Line 1806 of yacc.c  */
+#line 2163 "parser.yy"
     { (yyval.constant) = (yyvsp[(3) - (5)].constant); }
     break;
 
-  case 553:
-
-/* Line 1806 of yacc.c  */
-#line 2166 "parser.yy"
+  case 554:
+
+/* Line 1806 of yacc.c  */
+#line 2168 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 556:
-
-/* Line 1806 of yacc.c  */
-#line 2173 "parser.yy"
+  case 557:
+
+/* Line 1806 of yacc.c  */
+#line 2175 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 557:
-
-/* Line 1806 of yacc.c  */
-#line 2179 "parser.yy"
+  case 558:
+
+/* Line 1806 of yacc.c  */
+#line 2181 "parser.yy"
     { (yyval.decl) = nullptr; }
     break;
 
-  case 562:
-
-/* Line 1806 of yacc.c  */
-#line 2190 "parser.yy"
+  case 563:
+
+/* Line 1806 of yacc.c  */
+#line 2192 "parser.yy"
     { delete (yyvsp[(3) - (4)].en); }
     break;
 
-  case 563:
-
-/* Line 1806 of yacc.c  */
-#line 2194 "parser.yy"
+  case 564:
+
+/* Line 1806 of yacc.c  */
+#line 2196 "parser.yy"
     { delete (yyvsp[(1) - (1)].tok); }
     break;
 
-  case 564:
-
-/* Line 1806 of yacc.c  */
-#line 2195 "parser.yy"
-    { delete (yyvsp[(1) - (1)].decl); }
-    break;
-
   case 565:
-
-/* Line 1806 of yacc.c  */
-#line 2196 "parser.yy"
-    { delete (yyvsp[(1) - (1)].decl); }
-    break;
-
-  case 566:
 
 /* Line 1806 of yacc.c  */
@@ -8041,15 +8007,22 @@
     break;
 
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2198 "parser.yy"
+    { delete (yyvsp[(1) - (1)].decl); }
+    break;
+
   case 567:
 
 /* Line 1806 of yacc.c  */
-#line 2232 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 569:
-
-/* Line 1806 of yacc.c  */
-#line 2235 "parser.yy"
+#line 2199 "parser.yy"
+    { delete (yyvsp[(1) - (1)].decl); }
+    break;
+
+  case 568:
+
+/* Line 1806 of yacc.c  */
+#line 2234 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8065,5 +8038,12 @@
 
 /* Line 1806 of yacc.c  */
-#line 2242 "parser.yy"
+#line 2239 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 572:
+
+/* Line 1806 of yacc.c  */
+#line 2244 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8072,44 +8052,37 @@
     break;
 
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2247 "parser.yy"
+  case 573:
+
+/* Line 1806 of yacc.c  */
+#line 2249 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2252 "parser.yy"
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2254 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2254 "parser.yy"
+  case 575:
+
+/* Line 1806 of yacc.c  */
+#line 2256 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 575:
-
-/* Line 1806 of yacc.c  */
-#line 2256 "parser.yy"
+  case 576:
+
+/* Line 1806 of yacc.c  */
+#line 2258 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 576:
-
-/* Line 1806 of yacc.c  */
-#line 2261 "parser.yy"
+  case 577:
+
+/* Line 1806 of yacc.c  */
+#line 2263 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 577:
-
-/* Line 1806 of yacc.c  */
-#line 2263 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -8125,82 +8098,82 @@
 /* Line 1806 of yacc.c  */
 #line 2267 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2269 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 580:
-
-/* Line 1806 of yacc.c  */
-#line 2272 "parser.yy"
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2274 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2274 "parser.yy"
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2276 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2283 "parser.yy"
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2285 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2286 "parser.yy"
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2288 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2291 "parser.yy"
+  case 586:
+
+/* Line 1806 of yacc.c  */
+#line 2293 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 586:
-
-/* Line 1806 of yacc.c  */
-#line 2293 "parser.yy"
+  case 587:
+
+/* Line 1806 of yacc.c  */
+#line 2295 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 587:
-
-/* Line 1806 of yacc.c  */
-#line 2295 "parser.yy"
+  case 588:
+
+/* Line 1806 of yacc.c  */
+#line 2297 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 588:
-
-/* Line 1806 of yacc.c  */
-#line 2300 "parser.yy"
+  case 589:
+
+/* Line 1806 of yacc.c  */
+#line 2302 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 589:
-
-/* Line 1806 of yacc.c  */
-#line 2302 "parser.yy"
+  case 590:
+
+/* Line 1806 of yacc.c  */
+#line 2304 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2304 "parser.yy"
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2306 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 591:
-
-/* Line 1806 of yacc.c  */
-#line 2309 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -8216,54 +8189,54 @@
 /* Line 1806 of yacc.c  */
 #line 2313 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 594:
+
+/* Line 1806 of yacc.c  */
+#line 2315 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2328 "parser.yy"
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2330 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2330 "parser.yy"
+  case 599:
+
+/* Line 1806 of yacc.c  */
+#line 2332 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
 
-  case 599:
-
-/* Line 1806 of yacc.c  */
-#line 2332 "parser.yy"
+  case 600:
+
+/* Line 1806 of yacc.c  */
+#line 2334 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 600:
-
-/* Line 1806 of yacc.c  */
-#line 2337 "parser.yy"
+  case 601:
+
+/* Line 1806 of yacc.c  */
+#line 2339 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 601:
-
-/* Line 1806 of yacc.c  */
-#line 2339 "parser.yy"
+  case 602:
+
+/* Line 1806 of yacc.c  */
+#line 2341 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 602:
-
-/* Line 1806 of yacc.c  */
-#line 2341 "parser.yy"
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2343 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 603:
-
-/* Line 1806 of yacc.c  */
-#line 2346 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -8279,18 +8252,18 @@
 /* Line 1806 of yacc.c  */
 #line 2350 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2352 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2365 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2368 "parser.yy"
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2367 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8303,44 +8276,44 @@
     break;
 
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2376 "parser.yy"
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2372 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2378 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2381 "parser.yy"
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2383 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2383 "parser.yy"
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2385 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2385 "parser.yy"
+  case 615:
+
+/* Line 1806 of yacc.c  */
+#line 2387 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 615:
-
-/* Line 1806 of yacc.c  */
-#line 2390 "parser.yy"
+  case 616:
+
+/* Line 1806 of yacc.c  */
+#line 2392 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 616:
-
-/* Line 1806 of yacc.c  */
-#line 2392 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -8356,39 +8329,39 @@
 /* Line 1806 of yacc.c  */
 #line 2396 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 619:
+
+/* Line 1806 of yacc.c  */
+#line 2398 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 619:
-
-/* Line 1806 of yacc.c  */
-#line 2401 "parser.yy"
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2403 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2403 "parser.yy"
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2405 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2405 "parser.yy"
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2407 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2415 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2418 "parser.yy"
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2417 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8404,34 +8377,34 @@
 
 /* Line 1806 of yacc.c  */
-#line 2425 "parser.yy"
+#line 2422 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2427 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2427 "parser.yy"
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2429 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2429 "parser.yy"
+  case 629:
+
+/* Line 1806 of yacc.c  */
+#line 2431 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 629:
-
-/* Line 1806 of yacc.c  */
-#line 2434 "parser.yy"
+  case 630:
+
+/* Line 1806 of yacc.c  */
+#line 2436 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 630:
-
-/* Line 1806 of yacc.c  */
-#line 2436 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -8447,39 +8420,39 @@
 /* Line 1806 of yacc.c  */
 #line 2440 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 633:
+
+/* Line 1806 of yacc.c  */
+#line 2442 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 633:
-
-/* Line 1806 of yacc.c  */
-#line 2445 "parser.yy"
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2447 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 634:
-
-/* Line 1806 of yacc.c  */
-#line 2447 "parser.yy"
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2449 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 635:
-
-/* Line 1806 of yacc.c  */
-#line 2449 "parser.yy"
+  case 636:
+
+/* Line 1806 of yacc.c  */
+#line 2451 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 636:
-
-/* Line 1806 of yacc.c  */
-#line 2480 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 638:
-
-/* Line 1806 of yacc.c  */
-#line 2483 "parser.yy"
+  case 637:
+
+/* Line 1806 of yacc.c  */
+#line 2482 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8495,5 +8468,12 @@
 
 /* Line 1806 of yacc.c  */
-#line 2490 "parser.yy"
+#line 2487 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 641:
+
+/* Line 1806 of yacc.c  */
+#line 2492 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8502,8 +8482,8 @@
     break;
 
-  case 641:
-
-/* Line 1806 of yacc.c  */
-#line 2495 "parser.yy"
+  case 642:
+
+/* Line 1806 of yacc.c  */
+#line 2497 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8512,58 +8492,51 @@
     break;
 
-  case 642:
-
-/* Line 1806 of yacc.c  */
-#line 2503 "parser.yy"
+  case 643:
+
+/* Line 1806 of yacc.c  */
+#line 2505 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 643:
-
-/* Line 1806 of yacc.c  */
-#line 2505 "parser.yy"
+  case 644:
+
+/* Line 1806 of yacc.c  */
+#line 2507 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 644:
-
-/* Line 1806 of yacc.c  */
-#line 2507 "parser.yy"
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2509 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2512 "parser.yy"
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2514 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2514 "parser.yy"
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2516 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2519 "parser.yy"
+  case 648:
+
+/* Line 1806 of yacc.c  */
+#line 2521 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2521 "parser.yy"
+  case 649:
+
+/* Line 1806 of yacc.c  */
+#line 2523 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
-    break;
-
-  case 650:
-
-/* Line 1806 of yacc.c  */
-#line 2536 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -8578,41 +8551,41 @@
 
 /* Line 1806 of yacc.c  */
-#line 2543 "parser.yy"
+#line 2540 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2545 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2545 "parser.yy"
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2547 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2547 "parser.yy"
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2549 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2549 "parser.yy"
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2551 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2551 "parser.yy"
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2553 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 658:
-
-/* Line 1806 of yacc.c  */
-#line 2557 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -8628,75 +8601,75 @@
 /* Line 1806 of yacc.c  */
 #line 2561 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2563 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2566 "parser.yy"
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2568 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
     break;
 
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2568 "parser.yy"
+  case 663:
+
+/* Line 1806 of yacc.c  */
+#line 2570 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 663:
-
-/* Line 1806 of yacc.c  */
-#line 2570 "parser.yy"
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2572 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 664:
-
-/* Line 1806 of yacc.c  */
-#line 2576 "parser.yy"
+  case 665:
+
+/* Line 1806 of yacc.c  */
+#line 2578 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2578 "parser.yy"
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2580 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2584 "parser.yy"
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2586 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
 
-  case 668:
-
-/* Line 1806 of yacc.c  */
-#line 2586 "parser.yy"
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2588 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
 
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2588 "parser.yy"
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2590 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
 
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2590 "parser.yy"
+  case 671:
+
+/* Line 1806 of yacc.c  */
+#line 2592 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
-    break;
-
-  case 672:
-
-/* Line 1806 of yacc.c  */
-#line 2605 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -8711,41 +8684,41 @@
 
 /* Line 1806 of yacc.c  */
-#line 2612 "parser.yy"
+#line 2609 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2614 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2614 "parser.yy"
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2616 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2616 "parser.yy"
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2618 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2618 "parser.yy"
+  case 678:
+
+/* Line 1806 of yacc.c  */
+#line 2620 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 678:
-
-/* Line 1806 of yacc.c  */
-#line 2620 "parser.yy"
+  case 679:
+
+/* Line 1806 of yacc.c  */
+#line 2622 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 680:
-
-/* Line 1806 of yacc.c  */
-#line 2626 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -8761,82 +8734,82 @@
 /* Line 1806 of yacc.c  */
 #line 2630 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2632 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 683:
-
-/* Line 1806 of yacc.c  */
-#line 2635 "parser.yy"
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2637 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( nullptr, nullptr, (yyvsp[(3) - (5)].decl), nullptr ); }
     break;
 
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2637 "parser.yy"
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2639 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 685:
-
-/* Line 1806 of yacc.c  */
-#line 2639 "parser.yy"
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2641 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 687:
-
-/* Line 1806 of yacc.c  */
-#line 2646 "parser.yy"
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2648 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2657 "parser.yy"
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2659 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2660 "parser.yy"
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2662 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2662 "parser.yy"
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2664 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
 
-  case 692:
-
-/* Line 1806 of yacc.c  */
-#line 2665 "parser.yy"
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2667 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2667 "parser.yy"
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2669 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
 
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2669 "parser.yy"
+  case 695:
+
+/* Line 1806 of yacc.c  */
+#line 2671 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
-    break;
-
-  case 696:
-
-/* Line 1806 of yacc.c  */
-#line 2683 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
@@ -8851,41 +8824,41 @@
 
 /* Line 1806 of yacc.c  */
-#line 2690 "parser.yy"
+#line 2687 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2692 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2692 "parser.yy"
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2694 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2694 "parser.yy"
+  case 701:
+
+/* Line 1806 of yacc.c  */
+#line 2696 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 701:
-
-/* Line 1806 of yacc.c  */
-#line 2696 "parser.yy"
+  case 702:
+
+/* Line 1806 of yacc.c  */
+#line 2698 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 702:
-
-/* Line 1806 of yacc.c  */
-#line 2698 "parser.yy"
+  case 703:
+
+/* Line 1806 of yacc.c  */
+#line 2700 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 704:
-
-/* Line 1806 of yacc.c  */
-#line 2704 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
@@ -8901,271 +8874,271 @@
 /* Line 1806 of yacc.c  */
 #line 2708 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
+    break;
+
+  case 707:
+
+/* Line 1806 of yacc.c  */
+#line 2710 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 707:
-
-/* Line 1806 of yacc.c  */
-#line 2713 "parser.yy"
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2715 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 708:
-
-/* Line 1806 of yacc.c  */
-#line 2715 "parser.yy"
+  case 709:
+
+/* Line 1806 of yacc.c  */
+#line 2717 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 711:
-
-/* Line 1806 of yacc.c  */
-#line 2725 "parser.yy"
+  case 712:
+
+/* Line 1806 of yacc.c  */
+#line 2727 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 714:
-
-/* Line 1806 of yacc.c  */
-#line 2735 "parser.yy"
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2737 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2737 "parser.yy"
+  case 716:
+
+/* Line 1806 of yacc.c  */
+#line 2739 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2739 "parser.yy"
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2741 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2741 "parser.yy"
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2743 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 718:
-
-/* Line 1806 of yacc.c  */
-#line 2743 "parser.yy"
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2745 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2745 "parser.yy"
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2747 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2752 "parser.yy"
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2754 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2754 "parser.yy"
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2756 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2756 "parser.yy"
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2758 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2758 "parser.yy"
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2760 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2760 "parser.yy"
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2762 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2763 "parser.yy"
+  case 726:
+
+/* Line 1806 of yacc.c  */
+#line 2765 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 726:
-
-/* Line 1806 of yacc.c  */
-#line 2765 "parser.yy"
+  case 727:
+
+/* Line 1806 of yacc.c  */
+#line 2767 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 727:
-
-/* Line 1806 of yacc.c  */
-#line 2767 "parser.yy"
+  case 728:
+
+/* Line 1806 of yacc.c  */
+#line 2769 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 728:
-
-/* Line 1806 of yacc.c  */
-#line 2769 "parser.yy"
+  case 729:
+
+/* Line 1806 of yacc.c  */
+#line 2771 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 729:
-
-/* Line 1806 of yacc.c  */
-#line 2771 "parser.yy"
+  case 730:
+
+/* Line 1806 of yacc.c  */
+#line 2773 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 730:
-
-/* Line 1806 of yacc.c  */
-#line 2776 "parser.yy"
+  case 731:
+
+/* Line 1806 of yacc.c  */
+#line 2778 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 731:
-
-/* Line 1806 of yacc.c  */
-#line 2778 "parser.yy"
+  case 732:
+
+/* Line 1806 of yacc.c  */
+#line 2780 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 732:
-
-/* Line 1806 of yacc.c  */
-#line 2783 "parser.yy"
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2785 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
 
-  case 733:
-
-/* Line 1806 of yacc.c  */
-#line 2785 "parser.yy"
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2787 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
 
-  case 735:
-
-/* Line 1806 of yacc.c  */
-#line 2812 "parser.yy"
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2814 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 739:
-
-/* Line 1806 of yacc.c  */
-#line 2823 "parser.yy"
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2825 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2825 "parser.yy"
+  case 741:
+
+/* Line 1806 of yacc.c  */
+#line 2827 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2827 "parser.yy"
+  case 742:
+
+/* Line 1806 of yacc.c  */
+#line 2829 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 742:
-
-/* Line 1806 of yacc.c  */
-#line 2829 "parser.yy"
+  case 743:
+
+/* Line 1806 of yacc.c  */
+#line 2831 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 743:
-
-/* Line 1806 of yacc.c  */
-#line 2831 "parser.yy"
+  case 744:
+
+/* Line 1806 of yacc.c  */
+#line 2833 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 744:
-
-/* Line 1806 of yacc.c  */
-#line 2833 "parser.yy"
+  case 745:
+
+/* Line 1806 of yacc.c  */
+#line 2835 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 745:
-
-/* Line 1806 of yacc.c  */
-#line 2840 "parser.yy"
+  case 746:
+
+/* Line 1806 of yacc.c  */
+#line 2842 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
 
-  case 746:
-
-/* Line 1806 of yacc.c  */
-#line 2842 "parser.yy"
+  case 747:
+
+/* Line 1806 of yacc.c  */
+#line 2844 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
 
-  case 747:
-
-/* Line 1806 of yacc.c  */
-#line 2844 "parser.yy"
+  case 748:
+
+/* Line 1806 of yacc.c  */
+#line 2846 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 748:
-
-/* Line 1806 of yacc.c  */
-#line 2846 "parser.yy"
+  case 749:
+
+/* Line 1806 of yacc.c  */
+#line 2848 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
 
-  case 749:
-
-/* Line 1806 of yacc.c  */
-#line 2848 "parser.yy"
+  case 750:
+
+/* Line 1806 of yacc.c  */
+#line 2850 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( nullptr, nullptr, false ) ); }
     break;
 
-  case 750:
-
-/* Line 1806 of yacc.c  */
-#line 2850 "parser.yy"
+  case 751:
+
+/* Line 1806 of yacc.c  */
+#line 2852 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 751:
-
-/* Line 1806 of yacc.c  */
-#line 2855 "parser.yy"
+  case 752:
+
+/* Line 1806 of yacc.c  */
+#line 2857 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
-    break;
-
-  case 752:
-
-/* Line 1806 of yacc.c  */
-#line 2862 "parser.yy"
-    { (yyval.decl) = DeclarationNode::newFunction( nullptr, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), nullptr ); }
     break;
 
@@ -9177,15 +9150,22 @@
     break;
 
-  case 756:
-
-/* Line 1806 of yacc.c  */
-#line 2888 "parser.yy"
+  case 754:
+
+/* Line 1806 of yacc.c  */
+#line 2866 "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 2890 "parser.yy"
     { (yyval.en) = nullptr; }
     break;
 
-  case 757:
-
-/* Line 1806 of yacc.c  */
-#line 2890 "parser.yy"
+  case 758:
+
+/* Line 1806 of yacc.c  */
+#line 2892 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9194,5 +9174,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9197 "Parser/parser.cc"
+#line 9177 "Parser/parser.cc"
       default: break;
     }
@@ -9425,5 +9405,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2893 "parser.yy"
+#line 2895 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/Parser/parser.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -73,79 +73,80 @@
      FTYPE = 291,
      DTYPE = 292,
-     TRAIT = 293,
-     SIZEOF = 294,
-     OFFSETOF = 295,
-     ATTRIBUTE = 296,
-     EXTENSION = 297,
-     IF = 298,
-     ELSE = 299,
-     SWITCH = 300,
-     CASE = 301,
-     DEFAULT = 302,
-     DO = 303,
-     WHILE = 304,
-     FOR = 305,
-     BREAK = 306,
-     CONTINUE = 307,
-     GOTO = 308,
-     RETURN = 309,
-     CHOOSE = 310,
-     DISABLE = 311,
-     ENABLE = 312,
-     FALLTHRU = 313,
-     TRY = 314,
-     CATCH = 315,
-     CATCHRESUME = 316,
-     FINALLY = 317,
-     THROW = 318,
-     THROWRESUME = 319,
-     AT = 320,
-     ASM = 321,
-     ALIGNAS = 322,
-     ALIGNOF = 323,
-     ATOMIC = 324,
-     GENERIC = 325,
-     NORETURN = 326,
-     STATICASSERT = 327,
-     THREADLOCAL = 328,
-     IDENTIFIER = 329,
-     QUOTED_IDENTIFIER = 330,
-     TYPEDEFname = 331,
-     TYPEGENname = 332,
-     ATTR_IDENTIFIER = 333,
-     ATTR_TYPEDEFname = 334,
-     ATTR_TYPEGENname = 335,
-     INTEGERconstant = 336,
-     CHARACTERconstant = 337,
-     STRINGliteral = 338,
-     REALDECIMALconstant = 339,
-     REALFRACTIONconstant = 340,
-     FLOATINGconstant = 341,
-     ZERO = 342,
-     ONE = 343,
-     ARROW = 344,
-     ICR = 345,
-     DECR = 346,
-     LS = 347,
-     RS = 348,
-     LE = 349,
-     GE = 350,
-     EQ = 351,
-     NE = 352,
-     ANDAND = 353,
-     OROR = 354,
-     ELLIPSIS = 355,
-     MULTassign = 356,
-     DIVassign = 357,
-     MODassign = 358,
-     PLUSassign = 359,
-     MINUSassign = 360,
-     LSassign = 361,
-     RSassign = 362,
-     ANDassign = 363,
-     ERassign = 364,
-     ORassign = 365,
-     ATassign = 366,
-     THEN = 367
+     TTYPE = 293,
+     TRAIT = 294,
+     SIZEOF = 295,
+     OFFSETOF = 296,
+     ATTRIBUTE = 297,
+     EXTENSION = 298,
+     IF = 299,
+     ELSE = 300,
+     SWITCH = 301,
+     CASE = 302,
+     DEFAULT = 303,
+     DO = 304,
+     WHILE = 305,
+     FOR = 306,
+     BREAK = 307,
+     CONTINUE = 308,
+     GOTO = 309,
+     RETURN = 310,
+     CHOOSE = 311,
+     DISABLE = 312,
+     ENABLE = 313,
+     FALLTHRU = 314,
+     TRY = 315,
+     CATCH = 316,
+     CATCHRESUME = 317,
+     FINALLY = 318,
+     THROW = 319,
+     THROWRESUME = 320,
+     AT = 321,
+     ASM = 322,
+     ALIGNAS = 323,
+     ALIGNOF = 324,
+     ATOMIC = 325,
+     GENERIC = 326,
+     NORETURN = 327,
+     STATICASSERT = 328,
+     THREADLOCAL = 329,
+     IDENTIFIER = 330,
+     QUOTED_IDENTIFIER = 331,
+     TYPEDEFname = 332,
+     TYPEGENname = 333,
+     ATTR_IDENTIFIER = 334,
+     ATTR_TYPEDEFname = 335,
+     ATTR_TYPEGENname = 336,
+     INTEGERconstant = 337,
+     CHARACTERconstant = 338,
+     STRINGliteral = 339,
+     REALDECIMALconstant = 340,
+     REALFRACTIONconstant = 341,
+     FLOATINGconstant = 342,
+     ZERO = 343,
+     ONE = 344,
+     ARROW = 345,
+     ICR = 346,
+     DECR = 347,
+     LS = 348,
+     RS = 349,
+     LE = 350,
+     GE = 351,
+     EQ = 352,
+     NE = 353,
+     ANDAND = 354,
+     OROR = 355,
+     ELLIPSIS = 356,
+     MULTassign = 357,
+     DIVassign = 358,
+     MODassign = 359,
+     PLUSassign = 360,
+     MINUSassign = 361,
+     LSassign = 362,
+     RSassign = 363,
+     ANDassign = 364,
+     ERassign = 365,
+     ORassign = 366,
+     ATassign = 367,
+     THEN = 368
    };
 #endif
@@ -186,79 +187,80 @@
 #define FTYPE 291
 #define DTYPE 292
-#define TRAIT 293
-#define SIZEOF 294
-#define OFFSETOF 295
-#define ATTRIBUTE 296
-#define EXTENSION 297
-#define IF 298
-#define ELSE 299
-#define SWITCH 300
-#define CASE 301
-#define DEFAULT 302
-#define DO 303
-#define WHILE 304
-#define FOR 305
-#define BREAK 306
-#define CONTINUE 307
-#define GOTO 308
-#define RETURN 309
-#define CHOOSE 310
-#define DISABLE 311
-#define ENABLE 312
-#define FALLTHRU 313
-#define TRY 314
-#define CATCH 315
-#define CATCHRESUME 316
-#define FINALLY 317
-#define THROW 318
-#define THROWRESUME 319
-#define AT 320
-#define ASM 321
-#define ALIGNAS 322
-#define ALIGNOF 323
-#define ATOMIC 324
-#define GENERIC 325
-#define NORETURN 326
-#define STATICASSERT 327
-#define THREADLOCAL 328
-#define IDENTIFIER 329
-#define QUOTED_IDENTIFIER 330
-#define TYPEDEFname 331
-#define TYPEGENname 332
-#define ATTR_IDENTIFIER 333
-#define ATTR_TYPEDEFname 334
-#define ATTR_TYPEGENname 335
-#define INTEGERconstant 336
-#define CHARACTERconstant 337
-#define STRINGliteral 338
-#define REALDECIMALconstant 339
-#define REALFRACTIONconstant 340
-#define FLOATINGconstant 341
-#define ZERO 342
-#define ONE 343
-#define ARROW 344
-#define ICR 345
-#define DECR 346
-#define LS 347
-#define RS 348
-#define LE 349
-#define GE 350
-#define EQ 351
-#define NE 352
-#define ANDAND 353
-#define OROR 354
-#define ELLIPSIS 355
-#define MULTassign 356
-#define DIVassign 357
-#define MODassign 358
-#define PLUSassign 359
-#define MINUSassign 360
-#define LSassign 361
-#define RSassign 362
-#define ANDassign 363
-#define ERassign 364
-#define ORassign 365
-#define ATassign 366
-#define THEN 367
+#define TTYPE 293
+#define TRAIT 294
+#define SIZEOF 295
+#define OFFSETOF 296
+#define ATTRIBUTE 297
+#define EXTENSION 298
+#define IF 299
+#define ELSE 300
+#define SWITCH 301
+#define CASE 302
+#define DEFAULT 303
+#define DO 304
+#define WHILE 305
+#define FOR 306
+#define BREAK 307
+#define CONTINUE 308
+#define GOTO 309
+#define RETURN 310
+#define CHOOSE 311
+#define DISABLE 312
+#define ENABLE 313
+#define FALLTHRU 314
+#define TRY 315
+#define CATCH 316
+#define CATCHRESUME 317
+#define FINALLY 318
+#define THROW 319
+#define THROWRESUME 320
+#define AT 321
+#define ASM 322
+#define ALIGNAS 323
+#define ALIGNOF 324
+#define ATOMIC 325
+#define GENERIC 326
+#define NORETURN 327
+#define STATICASSERT 328
+#define THREADLOCAL 329
+#define IDENTIFIER 330
+#define QUOTED_IDENTIFIER 331
+#define TYPEDEFname 332
+#define TYPEGENname 333
+#define ATTR_IDENTIFIER 334
+#define ATTR_TYPEDEFname 335
+#define ATTR_TYPEGENname 336
+#define INTEGERconstant 337
+#define CHARACTERconstant 338
+#define STRINGliteral 339
+#define REALDECIMALconstant 340
+#define REALFRACTIONconstant 341
+#define FLOATINGconstant 342
+#define ZERO 343
+#define ONE 344
+#define ARROW 345
+#define ICR 346
+#define DECR 347
+#define LS 348
+#define RS 349
+#define LE 350
+#define GE 351
+#define EQ 352
+#define NE 353
+#define ANDAND 354
+#define OROR 355
+#define ELLIPSIS 356
+#define MULTassign 357
+#define DIVassign 358
+#define MODassign 359
+#define PLUSassign 360
+#define MINUSassign 361
+#define LSassign 362
+#define RSassign 363
+#define ANDassign 364
+#define ERassign 365
+#define ORassign 366
+#define ATassign 367
+#define THEN 368
 
 
@@ -290,5 +292,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 293 "Parser/parser.h"
+#line 295 "Parser/parser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/Parser/parser.yy	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -83,5 +83,5 @@
 %token TYPEOF LABEL										// GCC
 %token ENUM STRUCT UNION
-%token OTYPE FTYPE DTYPE TRAIT							// CFA
+%token OTYPE FTYPE DTYPE TTYPE TRAIT							// CFA
 %token SIZEOF OFFSETOF
 %token ATTRIBUTE EXTENSION								// GCC
@@ -1893,7 +1893,9 @@
 		{ $$ = DeclarationNode::Otype; }
 	| DTYPE
+		{ $$ = DeclarationNode::Dtype; }
+	| FTYPE
 		{ $$ = DeclarationNode::Ftype; }
-	| FTYPE
-		{ $$ = DeclarationNode::Dtype; }
+	| TTYPE
+		{ $$ = DeclarationNode::Ttype; }
 	;
 
Index: src/ResolvExpr/AdjustExprType.cc
===================================================================
--- src/ResolvExpr/AdjustExprType.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/ResolvExpr/AdjustExprType.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -22,4 +22,5 @@
 	class AdjustExprType : public Mutator {
 		typedef Mutator Parent;
+		using Parent::mutate;
 	  public:
 		AdjustExprType( const TypeEnvironment &env, const SymTab::Indexer &indexer );
Index: src/ResolvExpr/AlternativeFinder.cc
===================================================================
--- src/ResolvExpr/AlternativeFinder.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/ResolvExpr/AlternativeFinder.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -267,81 +267,45 @@
 		std::list< Expression* >& actuals = appExpr->get_args();
 
-		std::list< Type * > formalTypes;
-		std::list< Type * >::iterator formalType = formalTypes.end();
-
 		for ( std::list< Expression* >::iterator actualExpr = actuals.begin(); actualExpr != actuals.end(); ++actualExpr ) {
-
+			Type * actualType = (*actualExpr)->get_result();
 			PRINT(
 				std::cerr << "actual expression:" << std::endl;
 				(*actualExpr)->print( std::cerr, 8 );
 				std::cerr << "--- results are" << std::endl;
-				(*actualExpr)->get_result()->print( std::cerr, 8 );
-			)
-			std::list< DeclarationWithType* >::iterator startFormal = formal;
+				actualType->print( std::cerr, 8 );
+			)
 			Cost actualCost;
-			std::list< Type * > flatActualTypes;
-			flatten( (*actualExpr)->get_result(), back_inserter( flatActualTypes ) );
-			for ( std::list< Type* >::iterator actualType = flatActualTypes.begin(); actualType != flatActualTypes.end(); ++actualType ) {
-
-
-				// tuple handling code
-				if ( formalType == formalTypes.end() ) {
-					// the type of the formal parameter may be a tuple type. To make this easier to work with,
-					// flatten the tuple type and traverse the resulting list of types, incrementing the formal
-					// iterator once its types have been extracted. Once a particular formal parameter's type has
-					// been exhausted load the next formal parameter's type.
-					if ( formal == formals.end() ) {
-						if ( function->get_isVarArgs() ) {
-							convCost += Cost( 1, 0, 0 );
-							break;
-						} else {
-							return Cost::infinity;
-						}
-					}
-					formalTypes.clear();
-					flatten( (*formal)->get_type(), back_inserter( formalTypes ) );
-					formalType = formalTypes.begin();
-					++formal;
+			if ( formal == formals.end() ) {
+				if ( function->get_isVarArgs() ) {
+					convCost += Cost( 1, 0, 0 );
+					continue;
+				} else {
+					return Cost::infinity;
 				}
-
-				PRINT(
-					std::cerr << std::endl << "converting ";
-					(*actualType)->print( std::cerr, 8 );
-					std::cerr << std::endl << " to ";
-					(*formalType)->print( std::cerr, 8 );
-				)
-				Cost newCost = conversionCost( *actualType, *formalType, indexer, alt.env );
-				PRINT(
-					std::cerr << std::endl << "cost is" << newCost << std::endl;
-				)
-
-				if ( newCost == Cost::infinity ) {
-					return newCost;
-				}
-				convCost += newCost;
-				actualCost += newCost;
-
-				convCost += Cost( 0, polyCost( *formalType, alt.env, indexer ) + polyCost( *actualType, alt.env, indexer ), 0 );
-
-				formalType++;
-			}
+			}
+			Type * formalType = (*formal)->get_type();
+			PRINT(
+				std::cerr << std::endl << "converting ";
+				actualType->print( std::cerr, 8 );
+				std::cerr << std::endl << " to ";
+				formalType->print( std::cerr, 8 );
+			)
+			Cost newCost = conversionCost( actualType, formalType, indexer, alt.env );
+			PRINT(
+				std::cerr << std::endl << "cost is" << newCost << std::endl;
+			)
+
+			if ( newCost == Cost::infinity ) {
+				return newCost;
+			}
+			convCost += newCost;
+			actualCost += newCost;
 			if ( actualCost != Cost( 0, 0, 0 ) ) {
-				std::list< DeclarationWithType* >::iterator startFormalPlusOne = startFormal;
-				startFormalPlusOne++;
-				if ( formal == startFormalPlusOne ) {
-					// not a tuple type
-					Type *newType = (*startFormal)->get_type()->clone();
-					alt.env.apply( newType );
-					*actualExpr = new CastExpr( *actualExpr, newType );
-				} else {
-					TupleType *newType = new TupleType( Type::Qualifiers() );
-					for ( std::list< DeclarationWithType* >::iterator i = startFormal; i != formal; ++i ) {
-						newType->get_types().push_back( (*i)->get_type()->clone() );
-					}
-					alt.env.apply( newType );
-					*actualExpr = new CastExpr( *actualExpr, newType );
-				}
-			}
-
+				Type *newType = formalType->clone();
+				alt.env.apply( newType );
+				*actualExpr = new CastExpr( *actualExpr, newType );
+			}
+			convCost += Cost( 0, polyCost( formalType, alt.env, indexer ) + polyCost( actualType, alt.env, indexer ), 0 );
+			++formal; // can't be in for-loop update because of the continue
 		}
 		if ( formal != formals.end() ) {
@@ -364,5 +328,4 @@
 			}
 			convCost += newCost;
-
 			convCost += Cost( 0, polyCost( assert->second.formalType, alt.env, indexer ) + polyCost( assert->second.actualType, alt.env, indexer ), 0 );
 		}
@@ -376,5 +339,5 @@
 			unifiableVars[ (*tyvar)->get_name() ] = TypeDecl::Data{ *tyvar };
 			for ( std::list< DeclarationWithType* >::iterator assert = (*tyvar)->get_assertions().begin(); assert != (*tyvar)->get_assertions().end(); ++assert ) {
-				needAssertions[ *assert ] = true;
+				needAssertions[ *assert ].isUsed = true;
 			}
 ///     needAssertions.insert( needAssertions.end(), (*tyvar)->get_assertions().begin(), (*tyvar)->get_assertions().end() );
@@ -388,13 +351,33 @@
 		if ( TupleType * tupleType = dynamic_cast< TupleType * >( formalType ) ) {
 			// formalType is a TupleType - group actuals into a TupleExpr whose type unifies with the TupleType
-			TupleExpr * tupleExpr = new TupleExpr();
+			std::list< Expression * > exprs;
 			for ( Type * type : *tupleType ) {
-				if ( ! instantiateArgument( type, defaultValue, actualIt, actualEnd, openVars, resultEnv, resultNeed, resultHave, indexer, cost, back_inserter( tupleExpr->get_exprs() ) ) ) {
-					delete tupleExpr;
+				if ( ! instantiateArgument( type, defaultValue, actualIt, actualEnd, openVars, resultEnv, resultNeed, resultHave, indexer, cost, back_inserter( exprs ) ) ) {
+					deleteAll( exprs );
 					return false;
 				}
 			}
-			tupleExpr->set_result( Tuples::makeTupleType( tupleExpr->get_exprs() ) );
-			*out++ = tupleExpr;
+			*out++ = new TupleExpr( exprs );
+		} else if ( TypeInstType * ttype = Tuples::isTtype( formalType ) ) {
+			// xxx - mixing default arguments with variadic??
+			std::list< Expression * > exprs;
+			for ( ; actualIt != actualEnd; ++actualIt ) {
+				exprs.push_back( actualIt->expr->clone() );
+				cost += actualIt->cost;
+			}
+			Expression * arg = nullptr;
+			if ( exprs.size() == 1 && Tuples::isTtype( exprs.front()->get_result() ) ) {
+				// the case where a ttype value is passed directly is special, e.g. for argument forwarding purposes
+				// xxx - what if passing multiple arguments, last of which is ttype?
+				// xxx - what would happen if unify was changed so that unifying tuple types flattened both before unifying lists? then pass in TupleType(ttype) below.
+				arg = exprs.front();
+			} else {
+				arg = new TupleExpr( exprs );
+			}
+			assert( arg && arg->get_result() );
+			if ( ! unify( ttype, arg->get_result(), resultEnv, resultNeed, resultHave, openVars, indexer ) ) {
+				return false;
+			}
+			*out++ = arg;
 		} else if ( actualIt != actualEnd ) {
 			// both actualType and formalType are atomic (non-tuple) types - if they unify
@@ -483,5 +466,5 @@
 	void addToIndexer( AssertionSet &assertSet, SymTab::Indexer &indexer ) {
 		for ( AssertionSet::iterator i = assertSet.begin(); i != assertSet.end(); ++i ) {
-			if ( i->second == true ) {
+			if ( i->second.isUsed ) {
 				i->first->accept( indexer );
 			}
@@ -494,4 +477,9 @@
 		if ( begin == end ) {
 			if ( newNeed.empty() ) {
+				PRINT(
+					std::cerr << "all assertions satisfied, output alternative: ";
+					newAlt.print( std::cerr );
+					std::cerr << std::endl;
+				);
 				*out++ = newAlt;
 				return;
@@ -510,5 +498,5 @@
 
 		ForwardIterator cur = begin++;
-		if ( ! cur->second ) {
+		if ( ! cur->second.isUsed ) {
 			inferRecursive( begin, end, newAlt, openVars, decls, newNeed, /*needParents,*/ level, indexer, out );
 			return; // xxx - should this continue? previously this wasn't here, and it looks like it should be
@@ -554,4 +542,14 @@
 				assert( (*candidate)->get_uniqueId() );
 				DeclarationWithType *candDecl = static_cast< DeclarationWithType* >( Declaration::declFromId( (*candidate)->get_uniqueId() ) );
+
+				// everything with an empty idChain was pulled in by the current assertion.
+				// add current assertion's idChain + current assertion's ID so that the correct inferParameters can be found.
+				for ( auto & a : newerNeed ) {
+					if ( a.second.idChain.empty() ) {
+						a.second.idChain = cur->second.idChain;
+						a.second.idChain.push_back( curDecl->get_uniqueId() );
+					}
+				}
+
 				//AssertionParentSet newNeedParents( needParents );
 				// skip repeatingly-self-recursive assertion satisfaction
@@ -569,6 +567,11 @@
 				)
 				ApplicationExpr *appExpr = static_cast< ApplicationExpr* >( newerAlt.expr );
+				// follow the current assertion's ID chain to find the correct set of inferred parameters to add the candidate to (i.e. the set of inferred parameters belonging to the entity which requested the assertion parameter).
+				InferredParams * inferParameters = &appExpr->get_inferParams();
+				for ( UniqueId id : cur->second.idChain ) {
+					inferParameters = (*inferParameters)[ id ].inferParams.get();
+				}
 				// XXX: this is a memory leak, but adjType can't be deleted because it might contain assertions
-				appExpr->get_inferParams()[ curDecl->get_uniqueId() ] = ParamEntry( (*candidate)->get_uniqueId(), adjType->clone(), curDecl->get_type()->clone(), varExpr );
+				(*inferParameters)[ curDecl->get_uniqueId() ] = ParamEntry( (*candidate)->get_uniqueId(), adjType->clone(), curDecl->get_type()->clone(), varExpr );
 				inferRecursive( begin, end, newerAlt, newOpenVars, newDecls, newerNeed, /*newNeedParents,*/ level, indexer, out );
 			} else {
@@ -609,5 +612,5 @@
 		makeUnifiableVars( funcType, openVars, resultNeed );
 		AltList instantiatedActuals; // filled by instantiate function
-		if ( targetType && ! targetType->isVoid() ) {
+		if ( targetType && ! targetType->isVoid() && ! funcType->get_returnVals().empty() ) {
 			// attempt to narrow based on expected target type
 			Type * returnType = funcType->get_returnVals().front()->get_type();
@@ -1075,5 +1078,5 @@
 	}
 
-	void AlternativeFinder::visit( TupleExpr *tupleExpr ) {
+	void AlternativeFinder::visit( UntypedTupleExpr *tupleExpr ) {
 		std::list< AlternativeFinder > subExprAlternatives;
 		findSubExprs( tupleExpr->get_exprs().begin(), tupleExpr->get_exprs().end(), back_inserter( subExprAlternatives ) );
@@ -1081,12 +1084,15 @@
 		combos( subExprAlternatives.begin(), subExprAlternatives.end(), back_inserter( possibilities ) );
 		for ( std::list< AltList >::const_iterator i = possibilities.begin(); i != possibilities.end(); ++i ) {
-			TupleExpr *newExpr = new TupleExpr;
-			makeExprList( *i, newExpr->get_exprs() );
-			newExpr->set_result( Tuples::makeTupleType( newExpr->get_exprs() ) );
+			std::list< Expression * > exprs;
+			makeExprList( *i, exprs );
 
 			TypeEnvironment compositeEnv;
 			simpleCombineEnvironments( i->begin(), i->end(), compositeEnv );
-			alternatives.push_back( Alternative( newExpr, compositeEnv, sumCost( *i ) ) );
+			alternatives.push_back( Alternative( new TupleExpr( exprs ) , compositeEnv, sumCost( *i ) ) );
 		} // for
+	}
+
+	void AlternativeFinder::visit( TupleExpr *tupleExpr ) {
+		alternatives.push_back( Alternative( tupleExpr->clone(), env, Cost::zero ) );
 	}
 
Index: src/ResolvExpr/AlternativeFinder.h
===================================================================
--- src/ResolvExpr/AlternativeFinder.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/ResolvExpr/AlternativeFinder.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -64,7 +64,8 @@
 		virtual void visit( ConditionalExpr *conditionalExpr );
 		virtual void visit( CommaExpr *commaExpr );
-		virtual void visit( TupleExpr *tupleExpr );
 		virtual void visit( ImplicitCopyCtorExpr * impCpCtorExpr );
 		virtual void visit( ConstructorExpr * ctorExpr );
+		virtual void visit( UntypedTupleExpr *tupleExpr );
+		virtual void visit( TupleExpr *tupleExpr );
 		virtual void visit( TupleIndexExpr *tupleExpr );
 		virtual void visit( TupleAssignExpr *tupleExpr );
Index: src/ResolvExpr/FindOpenVars.cc
===================================================================
--- src/ResolvExpr/FindOpenVars.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/ResolvExpr/FindOpenVars.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -50,5 +50,5 @@
 				openVars[ (*i)->get_name() ] = TypeDecl::Data{ (*i) };
 				for ( std::list< DeclarationWithType* >::const_iterator assert = (*i)->get_assertions().begin(); assert != (*i)->get_assertions().end(); ++assert ) {
-					needAssertions[ *assert ] = false;
+					needAssertions[ *assert ].isUsed = false;
 				}
 ///       cloneAll( (*i)->get_assertions(), needAssertions );
@@ -59,5 +59,5 @@
 				closedVars[ (*i)->get_name() ] = TypeDecl::Data{ (*i) };
 				for ( std::list< DeclarationWithType* >::const_iterator assert = (*i)->get_assertions().begin(); assert != (*i)->get_assertions().end(); ++assert ) {
-					haveAssertions[ *assert ] = false;
+					haveAssertions[ *assert ].isUsed = false;
 				}
 ///       cloneAll( (*i)->get_assertions(), haveAssertions );
Index: src/ResolvExpr/TypeEnvironment.cc
===================================================================
--- src/ResolvExpr/TypeEnvironment.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/ResolvExpr/TypeEnvironment.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -75,5 +75,5 @@
 		for ( AssertionSet::const_iterator i = assertions.begin(); i != assertions.end(); ++i ) {
 			i->first->print( os, indent );
-			if ( i->second ) {
+			if ( i->second.isUsed ) {
 				os << "(used)";
 			} else {
Index: src/ResolvExpr/TypeEnvironment.h
===================================================================
--- src/ResolvExpr/TypeEnvironment.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/ResolvExpr/TypeEnvironment.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -31,5 +31,12 @@
 		bool operator()( DeclarationWithType * d1, DeclarationWithType * d2 ) const;
 	};
-	typedef std::map< DeclarationWithType*, bool, AssertCompare > AssertionSet;
+	struct AssertionSetValue {
+		bool isUsed;
+		// chain of Unique IDs of the assertion declarations. The first ID in the chain is the ID of an assertion on the current type,
+		// with each successive ID being the ID of an assertion pulled in by the previous ID. The last ID in the chain is
+		// the ID of the assertion that pulled in the current assertion.
+		std::list< UniqueId > idChain;
+	};
+	typedef std::map< DeclarationWithType*, AssertionSetValue, AssertCompare > AssertionSet;
 	typedef std::map< std::string, TypeDecl::Data > OpenVarSet;
 
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/ResolvExpr/Unify.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -26,5 +26,5 @@
 #include "SymTab/Indexer.h"
 #include "Common/utility.h"
-
+#include "Tuples/Tuples.h"
 
 // #define DEBUG
@@ -157,9 +157,12 @@
 			// if the type variable is specified to be a complete type then the incoming
 			// type must also be complete
+			// xxx - should this also check that type is not a tuple type and that it's not a ttype?
 			return ! isFtype( type, indexer ) && (! data.isComplete || isComplete( type ));
 		  case TypeDecl::Ftype:
 			return isFtype( type, indexer );
+			case TypeDecl::Ttype:
+			// ttype unifies with any tuple type
+			return dynamic_cast< TupleType * >( type );
 		} // switch
-		assert( false );
 		return false;
 	}
@@ -431,5 +434,5 @@
 		if ( i != assertions.end() ) {
 ///     std::cerr << "found it!" << std::endl;
-			i->second = true;
+			i->second.isUsed = true;
 		} // if
 	}
@@ -485,18 +488,87 @@
 	}
 
+	template< typename Iterator >
+	std::unique_ptr<Type> combineTypes( Iterator begin, Iterator end ) {
+		std::list< Type * > types;
+		for ( ; begin != end; ++begin ) {
+			// it's guaranteed that a ttype variable will be bound to a flat tuple, so ensure that this results in a flat tuple
+			flatten( (*begin)->get_type(), back_inserter( types ) );
+		}
+		return std::unique_ptr<Type>( new TupleType( Type::Qualifiers(), types ) );
+	}
+
 	template< typename Iterator1, typename Iterator2 >
 	bool unifyDeclList( Iterator1 list1Begin, Iterator1 list1End, Iterator2 list2Begin, Iterator2 list2End, TypeEnvironment &env, AssertionSet &needAssertions, AssertionSet &haveAssertions, const OpenVarSet &openVars, const SymTab::Indexer &indexer ) {
 		for ( ; list1Begin != list1End && list2Begin != list2End; ++list1Begin, ++list2Begin ) {
-			// Type * commonType;
-			// if ( ! unifyInexact( (*list1Begin)->get_type(), (*list2Begin)->get_type(), env, needAssertions, haveAssertions, openVars, WidenMode( true, true ), indexer, commonType ) ) {
-			if ( ! unifyExact( (*list1Begin)->get_type(), (*list2Begin)->get_type(), env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer ) ) {
+			Type * t1 = (*list1Begin)->get_type();
+			Type * t2 = (*list2Begin)->get_type();
+			bool isTtype1 = Tuples::isTtype( t1 );
+			bool isTtype2 = Tuples::isTtype( t2 );
+			// xxx - assumes ttype must be last parameter
+			// xxx - there may be a nice way to refactor this, but be careful because the argument positioning might matter in some cases.
+			if ( isTtype1 && ! isTtype2 ) {
+				// combine all of the things in list2, then unify
+				return unifyExact( t1, combineTypes( list2Begin, list2End ).get(), env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer );
+			} else if ( isTtype2 && ! isTtype1 ) {
+				// combine all of the things in list1, then unify
+				return unifyExact( combineTypes( list1Begin, list1End ).get(), t2, env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer );
+			} else if ( ! unifyExact( t1, t2, env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer ) ) {
 				return false;
 			} // if
 		} // for
-		if ( list1Begin != list1End || list2Begin != list2End ) {
-			return false;
+		// may get to the end of one argument list before the end of the other. This is only okay when the other is a ttype
+		if ( list1Begin != list1End ) {
+			// try unifying empty tuple type with ttype
+			Type * t1 = (*list1Begin)->get_type();
+			if ( Tuples::isTtype( t1 ) ) {
+				return unifyExact( t1, combineTypes( list2Begin, list2End ).get(), env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer );
+			} else return false;
+		} else if ( list2Begin != list2End ) {
+			// try unifying empty tuple type with ttype
+			Type * t2 = (*list2Begin)->get_type();
+			if ( Tuples::isTtype( t2 ) ) {
+				return unifyExact( combineTypes( list1Begin, list1End ).get(), t2, env, needAssertions, haveAssertions, openVars, WidenMode( false, false ), indexer );
+			} else return false;
 		} else {
 			return true;
 		} // if
+	}
+
+	/// Finds ttypes and replaces them with their expansion, if known.
+	/// This needs to be done so that satisfying ttype assertions is easier.
+	/// If this isn't done then argument lists can have wildly different
+	/// size and structure, when they should be compatible.
+	struct TtypeExpander : public Mutator {
+		TypeEnvironment & env;
+		TtypeExpander( TypeEnvironment & env ) : env( env ) {}
+		Type * mutate( TypeInstType * typeInst ) {
+			EqvClass eqvClass;
+			if ( env.lookup( typeInst->get_name(), eqvClass ) ) {
+				if ( eqvClass.data.kind == TypeDecl::Ttype ) {
+					// expand ttype parameter into its actual type
+					if ( eqvClass.type ) {
+						delete typeInst;
+						return eqvClass.type->clone();
+					}
+				}
+			}
+			return typeInst;
+		}
+	};
+
+	/// flattens a list of declarations, so that each tuple type has a single declaration.
+	/// makes use of TtypeExpander to ensure ttypes are flat as well.
+	void flattenList( std::list< DeclarationWithType * > src, std::list< DeclarationWithType * > & dst, TypeEnvironment & env ) {
+		dst.clear();
+		for ( DeclarationWithType * dcl : src ) {
+			TtypeExpander expander( env );
+			dcl->acceptMutator( expander );
+			std::list< Type * > types;
+			flatten( dcl->get_type(), back_inserter( types ) );
+			for ( Type * t : types ) {
+				dst.push_back( new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::C, nullptr, t, nullptr ) );
+			}
+			delete dcl;
+		}
 	}
 
@@ -504,8 +576,17 @@
 		FunctionType *otherFunction = dynamic_cast< FunctionType* >( type2 );
 		if ( otherFunction && functionType->get_isVarArgs() == otherFunction->get_isVarArgs() ) {
-			if ( functionType->get_parameters().size() == otherFunction->get_parameters().size() && functionType->get_returnVals().size() == otherFunction->get_returnVals().size() ) {
-				if ( unifyDeclList( functionType->get_parameters().begin(), functionType->get_parameters().end(), otherFunction->get_parameters().begin(), otherFunction->get_parameters().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
-					if ( unifyDeclList( functionType->get_returnVals().begin(), functionType->get_returnVals().end(), otherFunction->get_returnVals().begin(), otherFunction->get_returnVals().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
-
+			// flatten the parameter lists for both functions so that tuple structure
+			// doesn't affect unification. Must be a clone so that the types don't change.
+			std::unique_ptr<FunctionType> flatFunc( functionType->clone() );
+			std::unique_ptr<FunctionType> flatOther( otherFunction->clone() );
+			flattenList( flatFunc->get_parameters(), flatFunc->get_parameters(), env );
+			flattenList( flatOther->get_parameters(), flatOther->get_parameters(), env );
+
+			// sizes don't have to match if ttypes are involved; need to be more precise wrt where the ttype is to prevent errors
+			if ( (flatFunc->get_parameters().size() == flatOther->get_parameters().size() && flatFunc->get_returnVals().size() == flatOther->get_returnVals().size()) || flatFunc->isTtype() || flatOther->isTtype() ) {
+				if ( unifyDeclList( flatFunc->get_parameters().begin(), flatFunc->get_parameters().end(), flatOther->get_parameters().begin(), flatOther->get_parameters().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
+					if ( unifyDeclList( flatFunc->get_returnVals().begin(), flatFunc->get_returnVals().end(), flatOther->get_returnVals().begin(), flatOther->get_returnVals().end(), env, needAssertions, haveAssertions, openVars, indexer ) ) {
+
+						// the original types must be used in mark assertions, since pointer comparisons are used
 						markAssertions( haveAssertions, needAssertions, functionType );
 						markAssertions( haveAssertions, needAssertions, otherFunction );
Index: src/ResolvExpr/typeops.h
===================================================================
--- src/ResolvExpr/typeops.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/ResolvExpr/typeops.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -164,5 +164,5 @@
 			}
 		} else {
-			*out++ = type;
+			*out++ = type->clone();
 		}
 	}
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SymTab/Indexer.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -453,14 +453,4 @@
 	}
 
-	void Indexer::visit( TupleExpr *tupleExpr ) {
-		acceptNewScope( tupleExpr->get_result(), *this );
-		acceptAll( tupleExpr->get_exprs(), *this );
-	}
-
-	void Indexer::visit( TupleAssignExpr *tupleExpr ) {
-		acceptNewScope( tupleExpr->get_result(), *this );
-		maybeAccept( tupleExpr->get_stmtExpr(), *this );
-	}
-
 	void Indexer::visit( TypeExpr *typeExpr ) {
 		acceptNewScope( typeExpr->get_result(), *this );
@@ -474,7 +464,69 @@
 	}
 
+	void Indexer::visit( ImplicitCopyCtorExpr *impCpCtorExpr ) {
+		acceptNewScope( impCpCtorExpr->get_result(), *this );
+		maybeAccept( impCpCtorExpr->get_callExpr(), *this );
+		acceptAll( impCpCtorExpr->get_tempDecls(), *this );
+		acceptAll( impCpCtorExpr->get_returnDecls(), *this );
+		acceptAll( impCpCtorExpr->get_dtors(), *this );
+	}
+
+	void Indexer::visit( ConstructorExpr * ctorExpr ) {
+		acceptNewScope( ctorExpr->get_result(), *this );
+		maybeAccept( ctorExpr->get_callExpr(), *this );
+	}
+
+	void Indexer::visit( CompoundLiteralExpr *compLitExpr ) {
+		acceptNewScope( compLitExpr->get_result(), *this );
+		maybeAccept( compLitExpr->get_type(), *this );
+		maybeAccept( compLitExpr->get_initializer(), *this );
+	}
+
 	void Indexer::visit( UntypedValofExpr *valofExpr ) {
 		acceptNewScope( valofExpr->get_result(), *this );
 		maybeAccept( valofExpr->get_body(), *this );
+	}
+
+	void Indexer::visit( RangeExpr *rangeExpr ) {
+		maybeAccept( rangeExpr->get_low(), *this );
+		maybeAccept( rangeExpr->get_high(), *this );
+	}
+
+	void Indexer::visit( UntypedTupleExpr *tupleExpr ) {
+		acceptNewScope( tupleExpr->get_result(), *this );
+		acceptAll( tupleExpr->get_exprs(), *this );
+	}
+
+	void Indexer::visit( TupleExpr *tupleExpr ) {
+		acceptNewScope( tupleExpr->get_result(), *this );
+		acceptAll( tupleExpr->get_exprs(), *this );
+	}
+
+	void Indexer::visit( TupleIndexExpr *tupleExpr ) {
+		acceptNewScope( tupleExpr->get_result(), *this );
+		maybeAccept( tupleExpr->get_tuple(), *this );
+	}
+
+	void Indexer::visit( MemberTupleExpr *tupleExpr ) {
+		acceptNewScope( tupleExpr->get_result(), *this );
+		maybeAccept( tupleExpr->get_member(), *this );
+		maybeAccept( tupleExpr->get_aggregate(), *this );
+	}
+
+	void Indexer::visit( TupleAssignExpr *tupleExpr ) {
+		acceptNewScope( tupleExpr->get_result(), *this );
+		maybeAccept( tupleExpr->get_stmtExpr(), *this );
+	}
+
+	void Indexer::visit( StmtExpr *stmtExpr ) {
+		acceptNewScope( stmtExpr->get_result(), *this );
+		maybeAccept( stmtExpr->get_statements(), *this );
+		acceptAll( stmtExpr->get_returnDecls(), *this );
+		acceptAll( stmtExpr->get_dtors(), *this );
+	}
+
+	void Indexer::visit( UniqueExpr *uniqueExpr ) {
+		acceptNewScope( uniqueExpr->get_result(), *this );
+		maybeAccept( uniqueExpr->get_expr(), *this );
 	}
 
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SymTab/Indexer.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -66,7 +66,16 @@
 		virtual void visit( TypeExpr *typeExpr );
 		virtual void visit( AsmExpr *asmExpr );
+		virtual void visit( ImplicitCopyCtorExpr *impCpCtorExpr );
+		virtual void visit( ConstructorExpr * ctorExpr );
+		virtual void visit( CompoundLiteralExpr *compLitExpr );
 		virtual void visit( UntypedValofExpr *valofExpr );
+		virtual void visit( RangeExpr *rangeExpr );
+		virtual void visit( UntypedTupleExpr *tupleExpr );
 		virtual void visit( TupleExpr *tupleExpr );
+		virtual void visit( TupleIndexExpr *tupleExpr );
+		virtual void visit( MemberTupleExpr *tupleExpr );
 		virtual void visit( TupleAssignExpr *tupleExpr );
+		virtual void visit( StmtExpr * stmtExpr );
+		virtual void visit( UniqueExpr * uniqueExpr );
 
 		virtual void visit( TraitInstType *contextInst );
Index: src/SymTab/Mangler.cc
===================================================================
--- src/SymTab/Mangler.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SymTab/Mangler.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -214,4 +214,9 @@
 				mangleName << "f";
 				break;
+				case TypeDecl::Ttype:
+				mangleName << "tVARGS";
+				break;
+				default:
+				assert( false );
 			} // switch
 			mangleName << numStream.str();
@@ -256,5 +261,5 @@
 		if ( ! type->get_forall().empty() ) {
 			std::list< std::string > assertionNames;
-			int tcount = 0, dcount = 0, fcount = 0;
+			int tcount = 0, dcount = 0, fcount = 0, vcount = 0;
 			mangleName << "A";
 			for ( Type::ForallList::iterator i = type->get_forall().begin(); i != type->get_forall().end(); ++i ) {
@@ -269,4 +274,9 @@
 					fcount++;
 					break;
+				  case TypeDecl::Ttype:
+					vcount++;
+					break;
+				  default:
+					assert( false );
 				} // switch
 				varNums[ (*i )->get_name() ] = std::pair< int, int >( nextVarNum++, (int )(*i )->get_kind() );
@@ -280,5 +290,5 @@
 				} // for
 			} // for
-			mangleName << tcount << "_" << dcount << "_" << fcount << "_";
+			mangleName << tcount << "_" << dcount << "_" << fcount << "_" << vcount << "_";
 			std::copy( assertionNames.begin(), assertionNames.end(), std::ostream_iterator< std::string >( mangleName, "" ) );
 			mangleName << "_";
Index: src/SynTree/ApplicationExpr.cc
===================================================================
--- src/SynTree/ApplicationExpr.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/ApplicationExpr.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -24,5 +24,5 @@
 
 ParamEntry::ParamEntry( const ParamEntry &other ) :
-		decl( other.decl ), actualType( maybeClone( other.actualType ) ), formalType( maybeClone( other.formalType ) ), expr( maybeClone( other.expr ) ) {
+		decl( other.decl ), actualType( maybeClone( other.actualType ) ), formalType( maybeClone( other.formalType ) ), expr( maybeClone( other.expr ) ), inferParams( new InferredParams( *other.inferParams ) ) {
 }
 
@@ -34,4 +34,5 @@
 	formalType = maybeClone( other.formalType );
 	expr = maybeClone( other.expr );
+	*inferParams = *other.inferParams;
 	return *this;
 }
@@ -62,4 +63,16 @@
 }
 
+void printInferParams( const InferredParams & inferParams, std::ostream &os, int indent, int level ) {
+	if ( ! inferParams.empty() ) {
+		os << std::string(indent, ' ') << "with inferred parameters " << level << ":" << std::endl;
+		for ( InferredParams::const_iterator i = inferParams.begin(); i != inferParams.end(); ++i ) {
+			os << std::string(indent+2, ' ');
+			Declaration::declFromId( i->second.decl )->printShort( os, indent+2 );
+			os << std::endl;
+			printInferParams( *i->second.inferParams, os, indent+2, level+1 );
+		} // for
+	} // if
+}
+
 void ApplicationExpr::print( std::ostream &os, int indent ) const {
 	os << "Application of" << std::endl << std::string(indent+2, ' ');
@@ -69,12 +82,5 @@
 		printAll( args, os, indent+2 );
 	} // if
-	if ( ! inferParams.empty() ) {
-		os << std::string(indent, ' ') << "with inferred parameters:" << std::endl;
-		for ( InferredParams::const_iterator i = inferParams.begin(); i != inferParams.end(); ++i ) {
-			os << std::string(indent+2, ' ');
-			Declaration::declFromId( i->second.decl )->printShort( os, indent+2 );
-			os << std::endl;
-		} // for
-	} // if
+	printInferParams( inferParams, os, indent+2, 0 );
 	Expression::print( os, indent );
 }
Index: src/SynTree/Declaration.cc
===================================================================
--- src/SynTree/Declaration.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/Declaration.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -57,5 +57,9 @@
 
 std::ostream & operator<<( std::ostream & out, const Declaration * decl ) {
-	decl->print( out );
+	if ( decl ){
+		decl->print( out );
+	} else {
+		out << "nullptr";
+	}
 	return out;
 }
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/Declaration.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -179,5 +179,5 @@
 	typedef NamedTypeDecl Parent;
   public:
-	enum Kind { Any, Dtype, Ftype };
+	enum Kind { Any, Dtype, Ftype, Ttype };
 	/// Data extracted from a type decl
 	struct Data {
Index: src/SynTree/Expression.cc
===================================================================
--- src/SynTree/Expression.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/Expression.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -672,5 +672,9 @@
 
 std::ostream & operator<<( std::ostream & out, const Expression * expr ) {
-	expr->print( out );
+	if ( expr ) {
+		expr->print( out );
+	} else {
+		out << "nullptr";
+	}
 	return out;
 }
Index: src/SynTree/Expression.h
===================================================================
--- src/SynTree/Expression.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/Expression.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -54,9 +54,12 @@
 };
 
+struct ParamEntry;
+typedef std::map< UniqueId, ParamEntry > InferredParams;
+
 /// ParamEntry contains the i.d. of a declaration and a type that is derived from that declaration,
 /// but subject to decay-to-pointer and type parameter renaming
 struct ParamEntry {
-	ParamEntry(): decl( 0 ), actualType( 0 ), formalType( 0 ), expr( 0 ) {}
-	ParamEntry( UniqueId decl, Type *actualType, Type *formalType, Expression* expr ): decl( decl ), actualType( actualType ), formalType( formalType ), expr( expr ) {}
+	ParamEntry(): decl( 0 ), actualType( 0 ), formalType( 0 ), expr( 0 ), inferParams( new InferredParams ) {}
+	ParamEntry( UniqueId decl, Type *actualType, Type *formalType, Expression* expr ): decl( decl ), actualType( actualType ), formalType( formalType ), expr( expr ), inferParams( new InferredParams ) {}
 	ParamEntry( const ParamEntry &other );
 	~ParamEntry();
@@ -67,7 +70,6 @@
 	Type *formalType;
 	Expression* expr;
-};
-
-typedef std::map< UniqueId, ParamEntry > InferredParams;
+	std::unique_ptr< InferredParams > inferParams;
+};
 
 /// ApplicationExpr represents the application of a function to a set of parameters.  This is the result of running an
@@ -634,12 +636,28 @@
 };
 
+/// UntypedTupleExpr represents a tuple expression ( [a, b, c] ) before resolution
+class UntypedTupleExpr : public Expression {
+  public:
+	UntypedTupleExpr( const std::list< Expression * > & exprs, Expression *_aname = nullptr );
+	UntypedTupleExpr( const UntypedTupleExpr &other );
+	virtual ~UntypedTupleExpr();
+
+	std::list<Expression*>& get_exprs() { return exprs; }
+
+	virtual UntypedTupleExpr *clone() const { return new UntypedTupleExpr( *this ); }
+	virtual void accept( Visitor &v ) { v.visit( this ); }
+	virtual Expression *acceptMutator( Mutator &m ) { return m.mutate( this ); }
+	virtual void print( std::ostream &os, int indent = 0 ) const;
+  private:
+	std::list<Expression*> exprs;
+};
+
 /// TupleExpr represents a tuple expression ( [a, b, c] )
 class TupleExpr : public Expression {
   public:
-	TupleExpr( const std::list< Expression * > & exprs = std::list< Expression * >(), Expression *_aname = nullptr );
+	TupleExpr( const std::list< Expression * > & exprs, Expression *_aname = nullptr );
 	TupleExpr( const TupleExpr &other );
 	virtual ~TupleExpr();
 
-	void set_exprs( std::list<Expression*> newValue ) { exprs = newValue; }
 	std::list<Expression*>& get_exprs() { return exprs; }
 
Index: src/SynTree/FunctionType.cc
===================================================================
--- src/SynTree/FunctionType.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/FunctionType.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// FunctionType.cc -- 
+// FunctionType.cc --
 //
 // Author           : Richard C. Bilson
@@ -19,4 +19,5 @@
 #include "Declaration.h"
 #include "Common/utility.h"
+#include "Tuples/Tuples.h"
 
 FunctionType::FunctionType( const Type::Qualifiers &tq, bool isVarArgs ) : Type( tq ), isVarArgs( isVarArgs ) {
@@ -31,4 +32,17 @@
 	deleteAll( returnVals );
 	deleteAll( parameters );
+}
+
+namespace {
+	bool containsTtype( const std::list<DeclarationWithType * > & l ) {
+		if ( ! l.empty() ) {
+			return Tuples::isTtype( l.back()->get_type() );
+		}
+		return false;
+	}
+}
+
+bool FunctionType::isTtype() const {
+	return containsTtype( returnVals ) || containsTtype( parameters );
 }
 
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/Mutator.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -23,4 +23,5 @@
 #include "Constant.h"
 #include "Common/utility.h"
+#include "TypeSubstitution.h"
 
 Mutator::Mutator() {}
@@ -178,4 +179,5 @@
 
 Expression *Mutator::mutate( ApplicationExpr *applicationExpr ) {
+	applicationExpr->set_env( maybeMutate( applicationExpr->get_env(), *this ) );
 	applicationExpr->set_result( maybeMutate( applicationExpr->get_result(), *this ) );
 	applicationExpr->set_function( maybeMutate( applicationExpr->get_function(), *this ) );
@@ -185,4 +187,5 @@
 
 Expression *Mutator::mutate( UntypedExpr *untypedExpr ) {
+	untypedExpr->set_env( maybeMutate( untypedExpr->get_env(), *this ) );
 	untypedExpr->set_result( maybeMutate( untypedExpr->get_result(), *this ) );
 	mutateAll( untypedExpr->get_args(), *this );
@@ -191,4 +194,5 @@
 
 Expression *Mutator::mutate( NameExpr *nameExpr ) {
+	nameExpr->set_env( maybeMutate( nameExpr->get_env(), *this ) );
 	nameExpr->set_result( maybeMutate( nameExpr->get_result(), *this ) );
 	return nameExpr;
@@ -196,4 +200,5 @@
 
 Expression *Mutator::mutate( AddressExpr *addressExpr ) {
+	addressExpr->set_env( maybeMutate( addressExpr->get_env(), *this ) );
 	addressExpr->set_result( maybeMutate( addressExpr->get_result(), *this ) );
 	addressExpr->set_arg( maybeMutate( addressExpr->get_arg(), *this ) );
@@ -202,4 +207,5 @@
 
 Expression *Mutator::mutate( LabelAddressExpr *labelAddressExpr ) {
+	labelAddressExpr->set_env( maybeMutate( labelAddressExpr->get_env(), *this ) );
 	labelAddressExpr->set_result( maybeMutate( labelAddressExpr->get_result(), *this ) );
 	labelAddressExpr->set_arg( maybeMutate( labelAddressExpr->get_arg(), *this ) );
@@ -208,4 +214,5 @@
 
 Expression *Mutator::mutate( CastExpr *castExpr ) {
+	castExpr->set_env( maybeMutate( castExpr->get_env(), *this ) );
 	castExpr->set_result( maybeMutate( castExpr->get_result(), *this ) );
 	castExpr->set_arg( maybeMutate( castExpr->get_arg(), *this ) );
@@ -214,4 +221,5 @@
 
 Expression *Mutator::mutate( UntypedMemberExpr *memberExpr ) {
+	memberExpr->set_env( maybeMutate( memberExpr->get_env(), *this ) );
 	memberExpr->set_result( maybeMutate( memberExpr->get_result(), *this ) );
 	memberExpr->set_aggregate( maybeMutate( memberExpr->get_aggregate(), *this ) );
@@ -221,4 +229,5 @@
 
 Expression *Mutator::mutate( MemberExpr *memberExpr ) {
+	memberExpr->set_env( maybeMutate( memberExpr->get_env(), *this ) );
 	memberExpr->set_result( maybeMutate( memberExpr->get_result(), *this ) );
 	memberExpr->set_aggregate( maybeMutate( memberExpr->get_aggregate(), *this ) );
@@ -227,4 +236,5 @@
 
 Expression *Mutator::mutate( VariableExpr *variableExpr ) {
+	variableExpr->set_env( maybeMutate( variableExpr->get_env(), *this ) );
 	variableExpr->set_result( maybeMutate( variableExpr->get_result(), *this ) );
 	return variableExpr;
@@ -232,4 +242,5 @@
 
 Expression *Mutator::mutate( ConstantExpr *constantExpr ) {
+	constantExpr->set_env( maybeMutate( constantExpr->get_env(), *this ) );
 	constantExpr->set_result( maybeMutate( constantExpr->get_result(), *this ) );
 //  maybeMutate( constantExpr->get_constant(), *this )
@@ -238,4 +249,5 @@
 
 Expression *Mutator::mutate( SizeofExpr *sizeofExpr ) {
+	sizeofExpr->set_env( maybeMutate( sizeofExpr->get_env(), *this ) );
 	sizeofExpr->set_result( maybeMutate( sizeofExpr->get_result(), *this ) );
 	if ( sizeofExpr->get_isType() ) {
@@ -248,4 +260,5 @@
 
 Expression *Mutator::mutate( AlignofExpr *alignofExpr ) {
+	alignofExpr->set_env( maybeMutate( alignofExpr->get_env(), *this ) );
 	alignofExpr->set_result( maybeMutate( alignofExpr->get_result(), *this ) );
 	if ( alignofExpr->get_isType() ) {
@@ -258,4 +271,5 @@
 
 Expression *Mutator::mutate( UntypedOffsetofExpr *offsetofExpr ) {
+	offsetofExpr->set_env( maybeMutate( offsetofExpr->get_env(), *this ) );
 	offsetofExpr->set_result( maybeMutate( offsetofExpr->get_result(), *this ) );
 	offsetofExpr->set_type( maybeMutate( offsetofExpr->get_type(), *this ) );
@@ -264,4 +278,5 @@
 
 Expression *Mutator::mutate( OffsetofExpr *offsetofExpr ) {
+	offsetofExpr->set_env( maybeMutate( offsetofExpr->get_env(), *this ) );
 	offsetofExpr->set_result( maybeMutate( offsetofExpr->get_result(), *this ) );
 	offsetofExpr->set_type( maybeMutate( offsetofExpr->get_type(), *this ) );
@@ -271,4 +286,5 @@
 
 Expression *Mutator::mutate( OffsetPackExpr *offsetPackExpr ) {
+	offsetPackExpr->set_env( maybeMutate( offsetPackExpr->get_env(), *this ) );
 	offsetPackExpr->set_result( maybeMutate( offsetPackExpr->get_result(), *this ) );
 	offsetPackExpr->set_type( maybeMutate( offsetPackExpr->get_type(), *this ) );
@@ -277,4 +293,5 @@
 
 Expression *Mutator::mutate( AttrExpr *attrExpr ) {
+	attrExpr->set_env( maybeMutate( attrExpr->get_env(), *this ) );
 	attrExpr->set_result( maybeMutate( attrExpr->get_result(), *this ) );
 	if ( attrExpr->get_isType() ) {
@@ -287,4 +304,5 @@
 
 Expression *Mutator::mutate( LogicalExpr *logicalExpr ) {
+	logicalExpr->set_env( maybeMutate( logicalExpr->get_env(), *this ) );
 	logicalExpr->set_result( maybeMutate( logicalExpr->get_result(), *this ) );
 	logicalExpr->set_arg1( maybeMutate( logicalExpr->get_arg1(), *this ) );
@@ -294,4 +312,5 @@
 
 Expression *Mutator::mutate( ConditionalExpr *conditionalExpr ) {
+	conditionalExpr->set_env( maybeMutate( conditionalExpr->get_env(), *this ) );
 	conditionalExpr->set_result( maybeMutate( conditionalExpr->get_result(), *this ) );
 	conditionalExpr->set_arg1( maybeMutate( conditionalExpr->get_arg1(), *this ) );
@@ -302,4 +321,5 @@
 
 Expression *Mutator::mutate( CommaExpr *commaExpr ) {
+	commaExpr->set_env( maybeMutate( commaExpr->get_env(), *this ) );
 	commaExpr->set_result( maybeMutate( commaExpr->get_result(), *this ) );
 	commaExpr->set_arg1( maybeMutate( commaExpr->get_arg1(), *this ) );
@@ -309,4 +329,5 @@
 
 Expression *Mutator::mutate( TypeExpr *typeExpr ) {
+	typeExpr->set_env( maybeMutate( typeExpr->get_env(), *this ) );
 	typeExpr->set_result( maybeMutate( typeExpr->get_result(), *this ) );
 	typeExpr->set_type( maybeMutate( typeExpr->get_type(), *this ) );
@@ -315,4 +336,5 @@
 
 Expression *Mutator::mutate( AsmExpr *asmExpr ) {
+	asmExpr->set_env( maybeMutate( asmExpr->get_env(), *this ) );
 	asmExpr->set_inout( maybeMutate( asmExpr->get_inout(), *this ) );
 	asmExpr->set_constraint( maybeMutate( asmExpr->get_constraint(), *this ) );
@@ -322,4 +344,6 @@
 
 Expression* Mutator::mutate( ImplicitCopyCtorExpr *impCpCtorExpr ) {
+	impCpCtorExpr->set_env( maybeMutate( impCpCtorExpr->get_env(), *this ) );
+	impCpCtorExpr->set_result( maybeMutate( impCpCtorExpr->get_result(), *this ) );
 	impCpCtorExpr->set_callExpr( maybeMutate( impCpCtorExpr->get_callExpr(), *this ) );
 	mutateAll( impCpCtorExpr->get_tempDecls(), *this );
@@ -330,4 +354,5 @@
 
 Expression* Mutator::mutate( ConstructorExpr *ctorExpr ) {
+	ctorExpr->set_env( maybeMutate( ctorExpr->get_env(), *this ) );
 	ctorExpr->set_result( maybeMutate( ctorExpr->get_result(), *this ) );
 	ctorExpr->set_callExpr( maybeMutate( ctorExpr->get_callExpr(), *this ) );
@@ -336,4 +361,5 @@
 
 Expression *Mutator::mutate( CompoundLiteralExpr *compLitExpr ) {
+	compLitExpr->set_env( maybeMutate( compLitExpr->get_env(), *this ) );
 	compLitExpr->set_result( maybeMutate( compLitExpr->get_result(), *this ) );
 	compLitExpr->set_type( maybeMutate( compLitExpr->get_type(), *this ) );
@@ -343,4 +369,5 @@
 
 Expression *Mutator::mutate( UntypedValofExpr *valofExpr ) {
+	valofExpr->set_env( maybeMutate( valofExpr->get_env(), *this ) );
 	valofExpr->set_result( maybeMutate( valofExpr->get_result(), *this ) );
 	return valofExpr;
@@ -348,4 +375,5 @@
 
 Expression *Mutator::mutate( RangeExpr *rangeExpr ) {
+	rangeExpr->set_env( maybeMutate( rangeExpr->get_env(), *this ) );
 	rangeExpr->set_low( maybeMutate( rangeExpr->get_low(), *this ) );
 	rangeExpr->set_high( maybeMutate( rangeExpr->get_high(), *this ) );
@@ -353,5 +381,6 @@
 }
 
-Expression *Mutator::mutate( TupleExpr *tupleExpr ) {
+Expression *Mutator::mutate( UntypedTupleExpr *tupleExpr ) {
+	tupleExpr->set_env( maybeMutate( tupleExpr->get_env(), *this ) );
 	tupleExpr->set_result( maybeMutate( tupleExpr->get_result(), *this ) );
 	mutateAll( tupleExpr->get_exprs(), *this );
@@ -359,5 +388,13 @@
 }
 
+Expression *Mutator::mutate( TupleExpr *tupleExpr ) {
+	tupleExpr->set_env( maybeMutate( tupleExpr->get_env(), *this ) );
+	tupleExpr->set_result( maybeMutate( tupleExpr->get_result(), *this ) );
+	mutateAll( tupleExpr->get_exprs(), *this );
+	return tupleExpr;
+}
+
 Expression *Mutator::mutate( TupleIndexExpr *tupleExpr ) {
+	tupleExpr->set_env( maybeMutate( tupleExpr->get_env(), *this ) );
 	tupleExpr->set_result( maybeMutate( tupleExpr->get_result(), *this ) );
 	tupleExpr->set_tuple( maybeMutate( tupleExpr->get_tuple(), *this ) );
@@ -366,4 +403,5 @@
 
 Expression *Mutator::mutate( MemberTupleExpr *tupleExpr ) {
+	tupleExpr->set_env( maybeMutate( tupleExpr->get_env(), *this ) );
 	tupleExpr->set_result( maybeMutate( tupleExpr->get_result(), *this ) );
 	tupleExpr->set_member( maybeMutate( tupleExpr->get_member(), *this ) );
@@ -373,4 +411,5 @@
 
 Expression *Mutator::mutate( TupleAssignExpr *assignExpr ) {
+	assignExpr->set_env( maybeMutate( assignExpr->get_env(), *this ) );
 	assignExpr->set_result( maybeMutate( assignExpr->get_result(), *this ) );
 	assignExpr->set_stmtExpr( maybeMutate( assignExpr->get_stmtExpr(), *this ) );
@@ -379,4 +418,5 @@
 
 Expression *Mutator::mutate( StmtExpr *stmtExpr ) {
+	stmtExpr->set_env( maybeMutate( stmtExpr->get_env(), *this ) );
 	stmtExpr->set_result( maybeMutate( stmtExpr->get_result(), *this ) );
 	stmtExpr->set_statements( maybeMutate( stmtExpr->get_statements(), *this ) );
@@ -387,4 +427,5 @@
 
 Expression *Mutator::mutate( UniqueExpr *uniqueExpr ) {
+	uniqueExpr->set_env( maybeMutate( uniqueExpr->get_env(), *this ) );
 	uniqueExpr->set_result( maybeMutate( uniqueExpr->get_result(), *this ) );
 	uniqueExpr->set_expr( maybeMutate( uniqueExpr->get_expr(), *this ) );
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/Mutator.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -78,4 +78,5 @@
 	virtual Expression* mutate( UntypedValofExpr *valofExpr );
 	virtual Expression* mutate( RangeExpr *rangeExpr );
+	virtual Expression* mutate( UntypedTupleExpr *tupleExpr );
 	virtual Expression* mutate( TupleExpr *tupleExpr );
 	virtual Expression* mutate( TupleIndexExpr *tupleExpr );
Index: src/SynTree/Statement.cc
===================================================================
--- src/SynTree/Statement.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/Statement.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -388,5 +388,9 @@
 
 std::ostream & operator<<( std::ostream & out, const Statement * statement ) {
-	statement->print( out );
+	if ( statement ) {
+		statement->print( out );
+	} else {
+		out << "nullptr";
+	}
 	return out;
 }
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/SynTree.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -83,4 +83,5 @@
 class UntypedValofExpr;
 class RangeExpr;
+class UntypedTupleExpr;
 class TupleExpr;
 class TupleIndexExpr;
Index: src/SynTree/TupleExpr.cc
===================================================================
--- src/SynTree/TupleExpr.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/TupleExpr.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -21,10 +21,23 @@
 #include "VarExprReplacer.h"
 
+UntypedTupleExpr::UntypedTupleExpr( const std::list< Expression * > & exprs, Expression *_aname ) : Expression( _aname ), exprs( exprs ) {
+}
+
+UntypedTupleExpr::UntypedTupleExpr( const UntypedTupleExpr &other ) : Expression( other ) {
+	cloneAll( other.exprs, exprs );
+}
+
+UntypedTupleExpr::~UntypedTupleExpr() {
+	deleteAll( exprs );
+}
+
+void UntypedTupleExpr::print( std::ostream &os, int indent ) const {
+	os << "Untyped Tuple:" << std::endl;
+	printAll( exprs, os, indent+2 );
+	Expression::print( os, indent );
+}
+
 TupleExpr::TupleExpr( const std::list< Expression * > & exprs, Expression *_aname ) : Expression( _aname ), exprs( exprs ) {
-	if ( ! exprs.empty() ) {
-		if ( std::all_of( exprs.begin(), exprs.end(), [](Expression * expr) { return expr->get_result(); } ) ) {
-			set_result( Tuples::makeTupleType( exprs ) );
-		}
-	}
+	set_result( Tuples::makeTupleType( exprs ) );
 }
 
@@ -45,5 +58,5 @@
 TupleIndexExpr::TupleIndexExpr( Expression * tuple, unsigned int index ) : tuple( tuple ), index( index )  {
 	TupleType * type = safe_dynamic_cast< TupleType * >( tuple->get_result() );
-	assert( type->size() > index );
+	assertf( type->size() > index, "TupleIndexExpr index out of bounds: tuple size %d, requested index %d in expr %s", type->size(), index, toString( tuple ).c_str() );
 	set_result( (*std::next( type->get_types().begin(), index ))->clone() );
 	get_result()->set_isLvalue( type->get_isLvalue() );
Index: src/SynTree/Type.cc
===================================================================
--- src/SynTree/Type.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/Type.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -85,5 +85,9 @@
 
 std::ostream & operator<<( std::ostream & out, const Type * type ) {
-	type->print( out );
+	if ( type ) {
+		type->print( out );
+	} else {
+		out << "nullptr";
+	}
 	return out;
 }
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/Type.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -204,6 +204,8 @@
 	std::list<DeclarationWithType*> & get_returnVals() { return returnVals; }
 	std::list<DeclarationWithType*> & get_parameters() { return parameters; }
-	bool get_isVarArgs() { return isVarArgs; }
+	bool get_isVarArgs() const { return isVarArgs; }
 	void set_isVarArgs( bool newValue ) { isVarArgs = newValue; }
+
+	bool isTtype() const;
 
 	virtual FunctionType *clone() const { return new FunctionType( *this ); }
Index: src/SynTree/TypeDecl.cc
===================================================================
--- src/SynTree/TypeDecl.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/TypeDecl.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -18,5 +18,5 @@
 #include "Common/utility.h"
 
-TypeDecl::TypeDecl( const std::string &name, DeclarationNode::StorageClass sc, Type *type, Kind kind ) : Parent( name, sc, type ), kind( kind ), sized( kind == Any ) {
+TypeDecl::TypeDecl( const std::string &name, DeclarationNode::StorageClass sc, Type *type, Kind kind ) : Parent( name, sc, type ), kind( kind ), sized( kind == Any || kind == Ttype ) {
 }
 
@@ -25,5 +25,5 @@
 
 std::string TypeDecl::typeString() const {
-	static const char *kindNames[] = { "type", "incomplete type", "function type" };
+	static const char *kindNames[] = { "type", "incomplete type", "function type", "tuple type" };
 	return kindNames[ kind ];
 }
Index: src/SynTree/TypeSubstitution.cc
===================================================================
--- src/SynTree/TypeSubstitution.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/TypeSubstitution.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -231,4 +231,14 @@
 }
 
+TypeSubstitution * TypeSubstitution::acceptMutator( Mutator & mutator ) {
+	for ( auto & p : typeEnv ) {
+		p.second = maybeMutate( p.second, mutator );
+	}
+	for ( auto & p : varEnv ) {
+		p.second = maybeMutate( p.second, mutator );
+	}
+	return this;
+}
+
 void TypeSubstitution::print( std::ostream &os, int indent ) const {
 	os << std::string( indent, ' ' ) << "Types:" << std::endl;
Index: src/SynTree/TypeSubstitution.h
===================================================================
--- src/SynTree/TypeSubstitution.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/TypeSubstitution.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -53,4 +53,6 @@
 
 	void normalize();
+
+	TypeSubstitution * acceptMutator( Mutator & mutator );
 
 	void print( std::ostream &os, int indent = 0 ) const;
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/Visitor.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -273,4 +273,5 @@
 
 void Visitor::visit( ImplicitCopyCtorExpr *impCpCtorExpr ) {
+	maybeAccept( impCpCtorExpr->get_result(), *this );
 	maybeAccept( impCpCtorExpr->get_callExpr(), *this );
 	acceptAll( impCpCtorExpr->get_tempDecls(), *this );
@@ -298,4 +299,9 @@
 	maybeAccept( rangeExpr->get_low(), *this );
 	maybeAccept( rangeExpr->get_high(), *this );
+}
+
+void Visitor::visit( UntypedTupleExpr *tupleExpr ) {
+	maybeAccept( tupleExpr->get_result(), *this );
+	acceptAll( tupleExpr->get_exprs(), *this );
 }
 
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/SynTree/Visitor.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -78,4 +78,5 @@
 	virtual void visit( UntypedValofExpr *valofExpr );
 	virtual void visit( RangeExpr *rangeExpr );
+	virtual void visit( UntypedTupleExpr *tupleExpr );
 	virtual void visit( TupleExpr *tupleExpr );
 	virtual void visit( TupleIndexExpr *tupleExpr );
Index: src/Tuples/Explode.h
===================================================================
--- src/Tuples/Explode.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/Tuples/Explode.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -33,19 +33,25 @@
 	/// helper function used by explode
 	template< typename OutputIterator >
-	void explodeUnique( Expression * expr, const ResolvExpr::Alternative & alt, const SymTab::Indexer & indexer, OutputIterator out ) {
+	void explodeUnique( Expression * expr, const ResolvExpr::Alternative & alt, const SymTab::Indexer & indexer, OutputIterator out, bool isTupleAssign ) {
+		if ( isTupleAssign ) {
+			// tuple assignment needs AddressExprs to be recursively exploded to easily get at all of the components
+			if ( AddressExpr * addrExpr = dynamic_cast< AddressExpr * >( expr ) ) {
+				ResolvExpr::AltList alts;
+				explodeUnique( addrExpr->get_arg(), alt, indexer, back_inserter( alts ), isTupleAssign );
+				for ( ResolvExpr::Alternative & alt : alts ) {
+					// distribute '&' over all components
+					alt.expr = distributeAddr( alt.expr );
+					*out++ = alt;
+				}
+				// in tuple assignment, still need to handle the other cases, but only if not already handled here (don't want to output too many alternatives)
+				return;
+			}
+		}
 		Type * res = expr->get_result();
-		if ( AddressExpr * addrExpr = dynamic_cast< AddressExpr * >( expr ) ) {
-			ResolvExpr::AltList alts;
-			explodeUnique( addrExpr->get_arg(), alt, indexer, back_inserter( alts ) );
-			for ( ResolvExpr::Alternative & alt : alts ) {
-				// distribute '&' over all components
-				alt.expr = distributeAddr( alt.expr );
-				*out++ = alt;
-			}
-		} else if ( TupleType * tupleType = dynamic_cast< TupleType * > ( res ) ) {
+		if ( TupleType * tupleType = dynamic_cast< TupleType * > ( res ) ) {
 			if ( TupleExpr * tupleExpr = dynamic_cast< TupleExpr * >( expr ) ) {
 				// can open tuple expr and dump its exploded components
 				for ( Expression * expr : tupleExpr->get_exprs() ) {
-					explodeUnique( expr, alt, indexer, out );
+					explodeUnique( expr, alt, indexer, out, isTupleAssign );
 				}
 			} else {
@@ -58,5 +64,5 @@
 				for ( unsigned int i = 0; i < tupleType->size(); i++ ) {
 					TupleIndexExpr * idx = new TupleIndexExpr( arg->clone(), i );
-					explodeUnique( idx, alt, indexer, out );
+					explodeUnique( idx, alt, indexer, out, isTupleAssign );
 					delete idx;
 				}
@@ -71,19 +77,19 @@
 	/// expands a tuple-valued alternative into multiple alternatives, each with a non-tuple-type
 	template< typename OutputIterator >
-	void explode( const ResolvExpr::Alternative &alt, const SymTab::Indexer & indexer, OutputIterator out ) {
-		explodeUnique( alt.expr, alt, indexer, out );
+	void explode( const ResolvExpr::Alternative &alt, const SymTab::Indexer & indexer, OutputIterator out, bool isTupleAssign = false ) {
+		explodeUnique( alt.expr, alt, indexer, out, isTupleAssign );
 	}
 
 	// explode list of alternatives
 	template< typename AltIterator, typename OutputIterator >
-	void explode( AltIterator altBegin, AltIterator altEnd, const SymTab::Indexer & indexer, OutputIterator out ) {
+	void explode( AltIterator altBegin, AltIterator altEnd, const SymTab::Indexer & indexer, OutputIterator out, bool isTupleAssign = false ) {
 		for ( ; altBegin != altEnd; ++altBegin ) {
-			explode( *altBegin, indexer, out );
+			explode( *altBegin, indexer, out, isTupleAssign );
 		}
 	}
 
 	template< typename OutputIterator >
-	void explode( const ResolvExpr::AltList & alts, const SymTab::Indexer & indexer, OutputIterator out ) {
-		explode( alts.begin(), alts.end(), indexer, out );
+	void explode( const ResolvExpr::AltList & alts, const SymTab::Indexer & indexer, OutputIterator out, bool isTupleAssign = false ) {
+		explode( alts.begin(), alts.end(), indexer, out, isTupleAssign );
 	}
 } // namespace Tuples
Index: src/Tuples/TupleAssignment.cc
===================================================================
--- src/Tuples/TupleAssignment.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/Tuples/TupleAssignment.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -73,9 +73,9 @@
 	};
 
-	/// true if expr is an expression of tuple type, i.e. a tuple expression, tuple variable, or MRV (multiple-return-value) function
+	/// true if expr is an expression of tuple type
 	bool isTuple( Expression *expr ) {
 		if ( ! expr ) return false;
 		assert( expr->has_result() );
-		return dynamic_cast<TupleExpr *>(expr) || expr->get_result()->size() > 1;
+		return dynamic_cast< TupleType * >( expr->get_result() );
 	}
 
@@ -142,5 +142,9 @@
 		matcher->match( new_assigns );
 
-		if ( new_assigns.empty() ) return;
+		if ( ! matcher->lhs.empty() || ! matcher->rhs.empty() ) {
+			// if both lhs and rhs are empty then this is the empty tuple case, wherein it's okay for new_assigns to be empty.
+			// if not the empty tuple case, return early so that no new alternatives are generated.
+			if ( new_assigns.empty() ) return;
+		}
 		ResolvExpr::AltList current;
 		// now resolve new assignments
@@ -186,5 +190,5 @@
 
 		// explode the lhs so that each field of the tuple-valued-expr is assigned.
-		explode( lhsAlt, spotter.currentFinder.get_indexer(), back_inserter(lhs) );
+		explode( lhsAlt, spotter.currentFinder.get_indexer(), back_inserter(lhs), true );
 
 		// and finally, re-add the cast to each lhs expr, so that qualified tuple fields can be constructed
@@ -211,5 +215,5 @@
 	TupleAssignSpotter::MultipleAssignMatcher::MultipleAssignMatcher( TupleAssignSpotter &spotter, const ResolvExpr::AltList & alts ) : Matcher( spotter, alts ) {
 		// explode the rhs so that each field of the tuple-valued-expr is assigned.
-		explode( std::next(alts.begin(), 1), alts.end(), spotter.currentFinder.get_indexer(), back_inserter(rhs) );
+		explode( std::next(alts.begin(), 1), alts.end(), spotter.currentFinder.get_indexer(), back_inserter(rhs), true );
 	}
 
@@ -248,8 +252,10 @@
 		static UniqueName lhsNamer( "__massassign_L" );
 		static UniqueName rhsNamer( "__massassign_R" );
-		assert ( ! lhs.empty() && rhs.size() <= 1);
+		// empty tuple case falls into this matcher, hence the second part of the assert
+		assert( (! lhs.empty() && rhs.size() <= 1) || (lhs.empty() && rhs.empty()) );
 
 		ObjectDecl * rtmp = rhs.size() == 1 ? newObject( rhsNamer, rhs.front().expr ) : nullptr;
 		for ( ResolvExpr::Alternative & lhsAlt : lhs ) {
+			// create a temporary object for each value in the lhs and create a call involving the rhs
 			ObjectDecl * ltmp = newObject( lhsNamer, lhsAlt.expr );
 			out.push_back( createFunc( spotter.fname, ltmp, rtmp ) );
@@ -263,6 +269,6 @@
 		static UniqueName rhsNamer( "__multassign_R" );
 
-		// xxx - need more complicated matching?
 		if ( lhs.size() == rhs.size() ) {
+			// produce a new temporary object for each value in the lhs and rhs and pairwise create the calls
 			std::list< ObjectDecl * > ltmp;
 			std::list< ObjectDecl * > rtmp;
Index: src/Tuples/TupleExpansion.cc
===================================================================
--- src/Tuples/TupleExpansion.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/Tuples/TupleExpansion.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -144,5 +144,5 @@
 
 	Expression * MemberTupleExpander::mutate( UntypedMemberExpr * memberExpr ) {
-		if ( TupleExpr * tupleExpr = dynamic_cast< TupleExpr * > ( memberExpr->get_member() ) ) {
+		if ( UntypedTupleExpr * tupleExpr = dynamic_cast< UntypedTupleExpr * > ( memberExpr->get_member() ) ) {
 			Expression * aggr = memberExpr->get_aggregate()->clone()->acceptMutator( *this );
 			// aggregate expressions which might be impure must be wrapped in unique expressions
@@ -225,4 +225,8 @@
 				decl->get_parameters().push_back( tyParam );
 			}
+			if ( tupleType->size() == 0 ) {
+				// empty structs are not standard C. Add a dummy field to empty tuples to silence warnings when a compound literal Tuple0 is created.
+				decl->get_members().push_back( new ObjectDecl( "dummy", DeclarationNode::NoStorageClass, LinkageSpec::C, nullptr, new BasicType( Type::Qualifiers(), BasicType::SignedInt ), nullptr ) );
+			}
 			typeMap[mangleName] = decl;
 			addDeclaration( decl );
@@ -315,5 +319,15 @@
 			qualifiers &= type->get_qualifiers();
 		} // for
+		if ( exprs.empty() ) qualifiers = Type::Qualifiers();
 		return tupleType;
+	}
+
+	TypeInstType * isTtype( Type * type ) {
+		if ( TypeInstType * inst = dynamic_cast< TypeInstType * >( type ) ) {
+			if ( inst->get_baseType()->get_kind() == TypeDecl::Ttype ) {
+				return inst;
+			}
+		}
+		return nullptr;
 	}
 
Index: src/Tuples/Tuples.h
===================================================================
--- src/Tuples/Tuples.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/Tuples/Tuples.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -42,4 +42,7 @@
 	Type * makeTupleType( const std::list< Expression * > & exprs );
 
+	/// returns a TypeInstType if `type` is a ttype, nullptr otherwise
+	TypeInstType * isTtype( Type * type );
+
 	/// returns true if the expression may contain side-effects.
 	bool maybeImpure( Expression * expr );
Index: src/libcfa/math.c
===================================================================
--- src/libcfa/math.c	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/libcfa/math.c	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -1,10 +1,10 @@
-// 
+//
 // Cforall Version 1.0.0 Copyright (C) 2016 University of Waterloo
 //
 // The contents of this file are covered under the licence agreement in the
 // file "LICENCE" distributed with Cforall.
-// 
-// math.c -- 
-// 
+//
+// math.c --
+//
 // Author           : Peter A. Buhr
 // Created On       : Tue Apr 19 22:23:08 2016
@@ -12,5 +12,5 @@
 // Last Modified On : Sun Apr 24 08:52:31 2016
 // Update Count     : 75
-// 
+//
 
 #include "math"
@@ -34,14 +34,14 @@
 long double remainder( long double x, long double y ) { return remainderl( x, y ); }
 
-// [ int, float ] remquo( float x, float y ) { int quo; x = remquof( x, y, &quo ); return [ quo, x ]; }
+[ int, float ] remquo( float x, float y ) { int quo; x = remquof( x, y, &quo ); return [ quo, x ]; }
 float remquo( float x, float y, int *quo ) { return remquof( x, y, quo ); }
-// [ int, double ] remquo( double x, double y ) { int quo; x = remquo( x, y, &quo ); return [ quo, x ]; }
-// [ int, long double ] remquo( long double x, long double y ) { int quo; x = remquol( x, y, &quo ); return [ quo, x ]; }
+[ int, double ] remquo( double x, double y ) { int quo; x = remquo( x, y, &quo ); return [ quo, x ]; }
+[ int, long double ] remquo( long double x, long double y ) { int quo; x = remquol( x, y, &quo ); return [ quo, x ]; }
 long double remquo( long double x, long double y, int *quo ) { return remquol( x, y, quo ); }
 
-// [ int, float ] div( float x, float y ) { int quo; x = remquof( x, y, &quo ); return [ quo, x ]; }
+[ int, float ] div( float x, float y ) { int quo; x = remquof( x, y, &quo ); return [ quo, x ]; }
 float div( float x, float y, int *quo ) { return remquof( x, y, quo ); }
-// [ int, double ] div( double x, double y ) { int quo; x = remquo( x, y, &quo ); return [ quo, x ]; }
-// [ int, long double ] div( long double x, long double y ) { int quo; x = remquol( x, y, &quo ); return [ quo, x ]; }
+[ int, double ] div( double x, double y ) { int quo; x = remquo( x, y, &quo ); return [ quo, x ]; }
+[ int, long double ] div( long double x, long double y ) { int quo; x = remquol( x, y, &quo ); return [ quo, x ]; }
 long double div( long double x, long double y, int *quo ) { return remquol( x, y, quo ); }
 
@@ -278,8 +278,8 @@
 long double ldexp( long double x, int exp2 ) { return ldexpl( x, exp2 ); }
 
-// [ float, float ] modf( float x ) { float i; x = modff( x, &i ); return [ i, x ]; }
+[ float, float ] modf( float x ) { float i; x = modff( x, &i ); return [ i, x ]; }
 float modf( float x, float *i ) { return modff( x, i ); }
-// [ double, double ] modf( double x ) { double i; x = modf( x, &i ); return [ i, x ]; }
-// [ long double, long double ] modf( long double x ) { long double i; x = modfl( x, &i ); return [ i, x ]; }
+[ double, double ] modf( double x ) { double i; x = modf( x, &i ); return [ i, x ]; }
+[ long double, long double ] modf( long double x ) { long double i; x = modfl( x, &i ); return [ i, x ]; }
 long double modf( long double x, long double *i ) { return modfl( x, i ); }
 
Index: src/libcfa/stdlib
===================================================================
--- src/libcfa/stdlib	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/libcfa/stdlib	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -47,4 +47,8 @@
 void free( void * ptr );
 } // extern "C"
+
+forall( otype T, ttype Params | { void ?{}(T *, Params); } ) T * new( Params p );
+forall( dtype T | { void ^?{}(T *); } ) void delete( T * ptr );
+
 
 //---------------------------------------
Index: src/libcfa/stdlib.c
===================================================================
--- src/libcfa/stdlib.c	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/libcfa/stdlib.c	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -5,5 +5,5 @@
 // file "LICENCE" distributed with Cforall.
 //
-// algorithm.c -- 
+// algorithm.c --
 //
 // Author           : Peter A. Buhr
@@ -78,4 +78,17 @@
 } // posix_memalign
 
+forall( otype T, ttype Params | { void ?{}(T *, Params); } )
+T * new( Params p ) {
+	return ((T*)malloc()){ p };
+}
+
+forall( dtype T | { void ^?{}(T *); } )
+void delete( T * ptr ) {
+  if ( ptr ) {
+    ^ptr{};
+    free( ptr );
+  }
+}
+
 //---------------------------------------
 
@@ -141,5 +154,5 @@
 	if ( sscanf( ptr, "%Lf%Lfi", &re, &im ) == EOF ) {}
 	return re + im * _Complex_I;
-}	
+}
 
 int strto( const char * sptr, char ** eptr, int base ) {
@@ -213,6 +226,6 @@
 //---------------------------------------
 
-// forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
-// [ T, T ] div( T t1, T t2 ) { return [ t1 / t2, t1 % t2 ]; }
+forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
+[ T, T ] div( T t1, T t2 ) { return [ t1 / t2, t1 % t2 ]; }
 
 //---------------------------------------
Index: src/main.cc
===================================================================
--- src/main.cc	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/main.cc	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -69,4 +69,5 @@
 	symtabp = false,
 	treep = false,
+	tuplep = false,
 	validp = false,
 	errorp = false,
@@ -266,6 +267,14 @@
 		OPTPRINT( "expandUniqueExpr" ); // xxx - is this the right place for this? want to expand ASAP so that subsequent passes don't need to worry about double-visiting a unique expr - needs to go after InitTweak::fix so that copy constructed return declarations are reused
 		Tuples::expandUniqueExpr( translationUnit );
+
+		OPTPRINT( "convertSpecializations" ) // needs to happen before tuple types are expanded
+		GenPoly::convertSpecializations( translationUnit );
+
 		OPTPRINT( "expandTuples" ); // xxx - is this the right place for this?
 		Tuples::expandTuples( translationUnit );
+		if ( tuplep ) {
+			dump( translationUnit );
+			return 0;
+		}
 
 		OPTPRINT("instantiateGenerics")
@@ -273,6 +282,4 @@
 		OPTPRINT( "copyParams" );
 		GenPoly::copyParams( translationUnit );
-		OPTPRINT( "convertSpecializations" )
-		GenPoly::convertSpecializations( translationUnit );
 		OPTPRINT( "convertLvalue" )
 		GenPoly::convertLvalue( translationUnit );
@@ -327,5 +334,5 @@
 
 void parse_cmdline( int argc, char * argv[], const char *& filename ) {
-	enum { Ast, Bbox, Bresolver, CtorInitFix, Expr, ExprAlt, Grammar, LibCFA, Nopreamble, Parse, Prototypes, Resolver, Symbol, Tree, Validate, };
+	enum { Ast, Bbox, Bresolver, CtorInitFix, Expr, ExprAlt, Grammar, LibCFA, Nopreamble, Parse, Prototypes, Resolver, Symbol, Tree, TupleExpansion, Validate, };
 
 	static struct option long_opts[] = {
@@ -344,4 +351,5 @@
 		{ "symbol", no_argument, 0, Symbol },
 		{ "tree", no_argument, 0, Tree },
+		{ "tuple-expansion", no_argument, 0, TupleExpansion },
 		{ "validate", no_argument, 0, Validate },
 		{ 0, 0, 0, 0 }
@@ -352,5 +360,5 @@
 
 	int c;
-	while ( (c = getopt_long( argc, argv, "abBcefglnpqrstvyzD:F:", long_opts, &long_index )) != -1 ) {
+	while ( (c = getopt_long( argc, argv, "abBcefglnpqrstTvyzD:F:", long_opts, &long_index )) != -1 ) {
 		switch ( c ) {
 		  case Ast:
@@ -362,5 +370,5 @@
 			bresolvep = true;
 			break;
-		  case 'B':										// print before resolver steps
+		  case 'B':										// print before box steps
 			bboxp = true;
 			break;
@@ -408,4 +416,8 @@
 		  case 't':										// build in tree
 			treep = true;
+			break;
+		  case TupleExpansion:
+		  case 'T':										// print after tuple expansion
+			tuplep = true;
 			break;
 		  case 'v':										// dump AST after decl validation pass
Index: src/tests/.expect/tupleVariadic.txt
===================================================================
--- src/tests/.expect/tupleVariadic.txt	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
+++ src/tests/.expect/tupleVariadic.txt	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -0,0 +1,18 @@
+called ?{} with no a
+array = { }
+called ?{} with a: 999
+array = { 999, }
+called ?{} with a: 123 456
+array = { 123, 456, }
+called ?{} with a: 100 200 300
+array = { 100, 200, 300, }
+called ?{} with a: 10 2 3 4
+array = { 10, 2, 3, 4, }
+copy=111111
+calling func
+called process(int) 3
+called process(double) 2
+called process(int) 111
+called process(double) 4.145
+called func(void)
+finished func
Index: src/tests/avltree/avl.h
===================================================================
--- src/tests/avltree/avl.h	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/tests/avltree/avl.h	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -19,4 +19,7 @@
 forall(otype T | Comparable(T))
 int ?>?(T t1, T t2);
+
+// xxx - unbound type variable problems when trying to use new instead of create
+// forall( otype T, ttype Params | { void ?{}(T *, Params); } ) T * new( Params p );
 
 forall(dtype T | { void ^?{}(T *); })
Index: src/tests/avltree/avl0.c
===================================================================
--- src/tests/avltree/avl0.c	(revision bb82c03bc8335801bc35bfe955fe778079574ec8)
+++ src/tests/avltree/avl0.c	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -10,10 +10,2 @@
   return t2 < t1;
 }
-
-forall(dtype T | { void ^?{}(T *); })
-void delete(T * x) {
-  if (x) {
-    ^?{}(x);
-    free(x);
-  }
-}
Index: src/tests/tupleVariadic.c
===================================================================
--- src/tests/tupleVariadic.c	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
+++ src/tests/tupleVariadic.c	(revision 2162c2c9192e4775f713c9a98904d0a0f866d966)
@@ -0,0 +1,124 @@
+//
+// 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.
+//
+// tuplePolymorphism.c --
+//
+// Author           : Rob Schluntz
+// Created On       : Fri Dec 16 10:25:35 2016
+// Last Modified By : Rob Schluntz
+// Last Modified On : Fri Dec 21 14:42:48 2016
+// Update Count     : 2
+//
+
+void func(void) {
+	printf("called func(void)\n");
+}
+forall(otype T, ttype Params | { void process(T); void func(Params); })
+void func(T arg1, Params p) {
+	process(arg1);
+	func(p);
+}
+void process(int x) {
+	printf("called process(int) %d\n", x);
+}
+void process(double x) {
+	printf("called process(double) %g\n", x);
+}
+
+forall(otype T, ttype Params | { void ?{}(T *, Params); })
+T * new(Params p);
+
+struct array {
+	int * data;
+	int size;
+};
+
+// xxx - eventually this will be collapsed...x
+void ?{}(array * a) {
+	a->size = 0;
+	a->data = 0;
+	printf("called ?{} with no a\n");
+}
+
+void ?{}(array * a, int a0) {
+	a->size = 1;
+	a->data = (int*)malloc(sizeof(int)*a->size);
+	a->data[0] = a0;
+	printf("called ?{} with a: %d\n", a0);
+}
+
+void ?{}(array * a, int a0, int a1) {
+	a->size = 2;
+	a->data = (int*)malloc(sizeof(int)*a->size);
+	a->data[0] = a0;
+	a->data[1] = a1;
+	printf("called ?{} with a: %d %d\n", a0, a1);
+}
+
+void ?{}(array * a, int a0, int a1, int a2) {
+	a->size = 3;
+	a->data = (int*)malloc(sizeof(int)*a->size);
+	a->data[0] = a0;
+	a->data[1] = a1;
+	a->data[2] = a2;
+	printf("called ?{} with a: %d %d %d\n", a0, a1, a2);
+}
+
+// test use of a tuple argument
+[void] ?{}(array * a, [int, int, int, int] args) {
+	int a0, a1, a2, a3;
+	[a0, a1, a2, a3] = args;
+	a->size = 4;
+	a->data = malloc(sizeof(int)*a->size);
+	a->data[0] = a0;
+	a->data[1] = a1;
+	a->data[2] = a2;
+	a->data[3] = a3;
+	printf("called ?{} with a: %d %d %d %d\n", a0, a1, a2, a3);
+}
+
+void print(array * x) {
+	printf("array = { ");
+	for (int i = 0; i < x->size; ++i) {
+		printf("%d, ", x->data[i]);
+	}
+	printf("}\n");
+}
+
+forall(otype T)
+T * copy(T x) {
+	// test calling new inside a polymorphic function
+	return new(x);
+}
+
+int main() {
+	array * x0 = new();
+	print(x0);
+
+	array * x1 = new(999);
+	print(x1);
+
+	array * x2 = new(123, 456);
+	print(x2);
+
+	array * x3 = new(100, 200, 300);
+	print(x3);
+
+	array * x4 = new(10, 2, 3, 4);
+	print(x4);
+
+	int * ptr = copy(111111);
+	printf("copy=%d\n", *ptr);
+
+	printf("calling func\n");
+	func(3, 2.0, 111, 4.145);
+	printf("finished func\n");
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// End: //
+
