Index: src/CodeGen/CodeGenerator.cc
===================================================================
--- src/CodeGen/CodeGenerator.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/CodeGen/CodeGenerator.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jan 25 21:22:00 2016
-// Update Count     : 242
+// Last Modified On : Wed Mar  2 17:32:16 2016
+// Update Count     : 243
 //
 
@@ -170,5 +170,5 @@
 	}
   
-	void CodeGenerator::visit( ContextDecl *aggregateDecl ) {}
+	void CodeGenerator::visit( TraitDecl *aggregateDecl ) {}
   
 	void CodeGenerator::visit( TypedefDecl *typeDecl ) {
Index: src/CodeGen/CodeGenerator.h
===================================================================
--- src/CodeGen/CodeGenerator.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/CodeGen/CodeGenerator.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Aug 12 14:27:14 2015
-// Update Count     : 27
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:32:24 2016
+// Update Count     : 28
 //
 
@@ -38,5 +38,5 @@
 		virtual void visit( UnionDecl *aggregateDecl );
 		virtual void visit( EnumDecl *aggregateDecl );
-		virtual void visit( ContextDecl *aggregateDecl );
+		virtual void visit( TraitDecl *aggregateDecl );
 		virtual void visit( TypedefDecl *typeDecl );
 		virtual void visit( TypeDecl *typeDecl );
Index: src/Makefile.am
===================================================================
--- src/Makefile.am	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Makefile.am	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -11,6 +11,6 @@
 ## Created On       : Sun May 31 08:51:46 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Thu Jan 28 16:50:26 2016
-## Update Count     : 55
+## Last Modified On : Fri Feb 26 17:19:16 2016
+## Update Count     : 57
 ###############################################################################
 
@@ -46,5 +46,5 @@
 driver_cfa_cpp_CXXFLAGS = -Wno-deprecated -Wall -DDEBUG_ALL
 
-CXXFLAGS = -g	# remove default -O2 to allow better debugging
+CXXFLAGS = -g -std=c++11		# remove default -O2 to allow better debugging
 
 MAINTAINERCLEANFILES += ${libdir}/${notdir ${cfa_cpplib_PROGRAMS}}
Index: src/Makefile.in
===================================================================
--- src/Makefile.in	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Makefile.in	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -247,5 +247,5 @@
 CXX = @CXX@
 CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = -g	# remove default -O2 to allow better debugging
+CXXFLAGS = -g -std=c++11		# remove default -O2 to allow better debugging
 CYGPATH_W = @CYGPATH_W@
 DEFS = @DEFS@
@@ -411,7 +411,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/Makefile
+	  $(AUTOMAKE) --foreign src/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: src/Parser/DeclarationNode.cc
===================================================================
--- src/Parser/DeclarationNode.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/DeclarationNode.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 12:34:05 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 14 14:46:32 2015
-// Update Count     : 126
+// Last Modified On : Wed Mar  2 17:26:24 2016
+// Update Count     : 134
 //
 
@@ -34,8 +34,9 @@
 const char *DeclarationNode::storageName[] = { "extern", "static", "auto", "register", "inline", "fortran", "_Noreturn", "_Thread_local", "" };
 const char *DeclarationNode::qualifierName[] = { "const", "restrict", "volatile", "lvalue", "_Atomic" };
-const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary" };
+const char *DeclarationNode::basicTypeName[] = { "char", "int", "float", "double", "void", "_Bool", "_Complex", "_Imaginary",  };
 const char *DeclarationNode::modifierName[]  = { "signed", "unsigned", "short", "long" };
 const char *DeclarationNode::aggregateName[] = { "struct", "union", "context" };
 const char *DeclarationNode::typeClassName[] = { "type", "dtype", "ftype" };
+const char *DeclarationNode::builtinTypeName[] = { "__builtin_va_list" };
 
 UniqueName DeclarationNode::anonymous( "__anonymous" );
@@ -147,4 +148,11 @@
 	newnode->type = new TypeData( TypeData::Basic );
 	newnode->type->basic->typeSpec.push_back( bt );
+	return newnode;
+}
+
+DeclarationNode *DeclarationNode::newBuiltinType( BuiltinType bt ) {
+	DeclarationNode *newnode = new DeclarationNode;
+	newnode->type = new TypeData( TypeData::Builtin );
+	newnode->type->builtin->type = bt;
 	return newnode;
 }
@@ -215,5 +223,5 @@
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->name = assign_strptr( name );
-	// do something with the constant
+	newnode->enumeratorValue = constant;
 	return newnode;
 }
@@ -243,8 +251,8 @@
 }
 
-DeclarationNode *DeclarationNode::newContext( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {
+DeclarationNode *DeclarationNode::newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::Aggregate );
-	newnode->type->aggregate->kind = Context;
+	newnode->type->aggregate->kind = Trait;
 	newnode->type->aggregate->params = params;
 	newnode->type->aggregate->fields = asserts;
@@ -253,9 +261,9 @@
 }
 
-DeclarationNode *DeclarationNode::newContextUse( std::string *name, ExpressionNode *params ) {
+DeclarationNode *DeclarationNode::newTraitUse( std::string *name, ExpressionNode *params ) {
 	DeclarationNode *newnode = new DeclarationNode;
 	newnode->type = new TypeData( TypeData::AggregateInst );
 	newnode->type->aggInst->aggregate = new TypeData( TypeData::Aggregate );
-	newnode->type->aggInst->aggregate->aggregate->kind = Context;
+	newnode->type->aggInst->aggregate->aggregate->kind = Trait;
 	newnode->type->aggInst->aggregate->aggregate->name = assign_strptr( name );
 	newnode->type->aggInst->params = params;
@@ -794,5 +802,5 @@
 			errors.append( e );
 		} // try
-		cur = dynamic_cast< DeclarationNode *>( cur->get_link() );
+		cur = dynamic_cast<DeclarationNode *>( cur->get_link() );
 	} // while
 	if ( ! errors.isEmpty() ) {
@@ -881,6 +889,6 @@
 			  ret = new UnionInstType( type->buildQualifiers(), type->aggregate->name );
 			  break;
-			case DeclarationNode::Context:
-			  ret = new ContextInstType( type->buildQualifiers(), type->aggregate->name );
+			case DeclarationNode::Trait:
+			  ret = new TraitInstType( type->buildQualifiers(), type->aggregate->name );
 			  break;
 			default:
Index: src/Parser/ParseNode.h
===================================================================
--- src/Parser/ParseNode.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/ParseNode.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 13:28:16 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Feb  1 13:32:32 2016
-// Update Count     : 184
+// Last Modified On : Wed Mar  2 17:26:35 2016
+// Update Count     : 190
 //
 
@@ -329,6 +329,7 @@
 	enum BasicType { Char, Int, Float, Double, Void, Bool, Complex, Imaginary };
 	enum Modifier  { Signed, Unsigned, Short, Long };
-	enum Aggregate { Struct, Union, Context };
+	enum Aggregate { Struct, Union, Trait };
 	enum TypeClass { Type, Dtype, Ftype };
+	enum BuiltinType { Valist };
 
 	static const char *storageName[];  
@@ -338,4 +339,5 @@
 	static const char *aggregateName[];
 	static const char *typeClassName[];
+	static const char *builtinTypeName[];
 
 	static DeclarationNode *newFunction( std::string *name, DeclarationNode *ret, DeclarationNode *param, StatementNode *body, bool newStyle = false );
@@ -352,6 +354,6 @@
 	static DeclarationNode *newFromTypeGen( std::string *, ExpressionNode *params );
 	static DeclarationNode *newTypeParam( TypeClass, std::string *);
-	static DeclarationNode *newContext( std::string *name, DeclarationNode *params, DeclarationNode *asserts );
-	static DeclarationNode *newContextUse( std::string *name, ExpressionNode *params );
+	static DeclarationNode *newTrait( std::string *name, DeclarationNode *params, DeclarationNode *asserts );
+	static DeclarationNode *newTraitUse( std::string *name, ExpressionNode *params );
 	static DeclarationNode *newTypeDecl( std::string *name, DeclarationNode *typeParams );
 	static DeclarationNode *newPointer( DeclarationNode *qualifiers );
@@ -363,4 +365,5 @@
 	static DeclarationNode *newAttr( std::string *, ExpressionNode *expr );
 	static DeclarationNode *newAttr( std::string *, DeclarationNode *type );
+	static DeclarationNode *newBuiltinType( BuiltinType );
 
 	DeclarationNode *addQualifiers( DeclarationNode *);
@@ -401,4 +404,5 @@
 	LinkageSpec::Type get_linkage() const { return linkage; }
 	DeclarationNode *extractAggregate() const;
+	ExpressionNode *get_enumeratorValue() const { return enumeratorValue; }
 
 	DeclarationNode();
@@ -413,4 +417,5 @@
 	std::list< std::string > attributes;
 	ExpressionNode *bitfieldWidth;
+	ExpressionNode *enumeratorValue;
 	InitializerNode *initializer;
 	bool hasEllipsis;
Index: src/Parser/TypeData.cc
===================================================================
--- src/Parser/TypeData.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/TypeData.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:12:51 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jul 14 14:57:23 2015
-// Update Count     : 32
+// Last Modified On : Wed Mar  2 17:26:45 2016
+// Update Count     : 49
 //
 
@@ -23,4 +23,5 @@
 #include "SynTree/Expression.h"
 #include "SynTree/Statement.h"
+#include "SynTree/Initializer.h"
 
 TypeData::TypeData( Kind k ) : kind( k ), base( 0 ), forall( 0 ) {
@@ -84,4 +85,7 @@
 		typeexpr->expr = 0;
 		break;
+	  case Builtin:
+		builtin = new Builtin_t;
+		break;
 	  case Attr:
 		attr = new Attr_t;
@@ -149,4 +153,7 @@
 		delete typeexpr->expr;
 		delete typeexpr;
+		break;
+	  case Builtin:
+		delete builtin;
 		break;
 	  case Attr:
@@ -221,4 +228,7 @@
 		newtype->typeexpr->expr = maybeClone( typeexpr->expr );
 		break;
+	  case Builtin:
+		newtype->builtin->type = builtin->type;
+		break;
 	  case Attr:
 		newtype->attr->expr = maybeClone( attr->expr );
@@ -396,4 +406,7 @@
 			attr->type->print( os, indent + 2 );
 		} // if
+		break;
+	  case Builtin:
+		os << "gcc builtin type";
 		break;
 	  default:
@@ -506,4 +519,6 @@
 	  case Typeof:
 		return buildTypeof();
+	  case Builtin:
+		return new VarArgsType( buildQualifiers() );
 	  case Attr:
 		return buildAttr();
@@ -805,6 +820,6 @@
 		buildForall( aggregate->params, at->get_parameters() );
 		break;
-	  case DeclarationNode::Context:
-		at = new ContextDecl( aggregate->name );
+	  case DeclarationNode::Trait:
+		at = new TraitDecl( aggregate->name );
 		buildList( aggregate->params, at->get_parameters() );
 		break;
@@ -845,6 +860,6 @@
 			ret = new UnionInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
 			break;
-		  case DeclarationNode::Context:
-			ret = new ContextInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
+		  case DeclarationNode::Trait:
+			ret = new TraitInstType( buildQualifiers(), aggInst->aggregate->aggregate->name );
 			break;
 		  default:
@@ -883,4 +898,11 @@
 	EnumDecl *ret = new EnumDecl( enumeration->name );
 	buildList( enumeration->constants, ret->get_members() );
+	std::list< Declaration * >::iterator members = ret->get_members().begin();
+	for ( const DeclarationNode *cur = enumeration->constants; cur != NULL; cur = dynamic_cast<DeclarationNode *>( cur->get_link() ), ++members ) {
+		if ( cur->get_enumeratorValue() != NULL ) {
+			ObjectDecl *member = dynamic_cast<ObjectDecl *>(*members);
+			member->set_init( new SingleInit( maybeBuild< Expression >( cur->get_enumeratorValue() ) ) );
+		} // if
+	} // for
 	return ret;
 }
Index: src/Parser/TypeData.h
===================================================================
--- src/Parser/TypeData.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/TypeData.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:18:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jan 14 23:31:15 2016
-// Update Count     : 17
+// Last Modified On : Fri Feb 26 14:21:38 2016
+// Update Count     : 19
 //
 
@@ -24,5 +24,5 @@
 struct TypeData {
 	enum Kind { Unknown, Basic, Pointer, Array, Function, Aggregate, AggregateInst,
-				Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Attr } kind;
+				Enum, EnumConstant, Symbolic, SymbolicInst, Variable, Tuple, Typeof, Builtin, Attr } kind;
 
 	TypeData( Kind k = Unknown );
@@ -98,4 +98,8 @@
 	};
 
+	struct Builtin_t {
+		DeclarationNode::BuiltinType type;
+	};
+
 	struct Attr_t {
 		std::string name;
@@ -116,4 +120,5 @@
 		Typeof_t * typeexpr;
 		Attr_t * attr;
+		Builtin_t * builtin;
 	};
 
Index: src/Parser/TypedefTable.cc
===================================================================
--- src/Parser/TypedefTable.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/TypedefTable.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:20:13 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jun 26 07:30:16 2015
-// Update Count     : 19
+// Last Modified On : Wed Mar  2 17:25:55 2016
+// Update Count     : 20
 //
 
@@ -61,7 +61,7 @@
 
 void TypedefTable::addToScope( const std::string &identifier, kind_t kind, int scope ) {
-	if ( currentContext != "" && scope == contextScope ) {
+	if ( currentTrait != "" && scope == contextScope ) {
 		DeferredEntry entry = { identifier, kind };
-		contexts[currentContext].push_back( entry );
+		contexts[currentTrait].push_back( entry );
 	} else {
 		debugPrint( "Adding " << identifier << " as kind " << kind << " scope " << scope << " from scope " << currentScope << endl );
@@ -112,5 +112,5 @@
 }
 
-void TypedefTable::openContext( const std::string &contextName ) {
+void TypedefTable::openTrait( const std::string &contextName ) {
 	map< string, deferListType >::iterator i = contexts.find( contextName );
 	if ( i != contexts.end() ) {
@@ -150,11 +150,11 @@
 }
 
-void TypedefTable::enterContext( const std::string &contextName ) {
-	currentContext = contextName;
+void TypedefTable::enterTrait( const std::string &contextName ) {
+	currentTrait = contextName;
 	contextScope = currentScope;
 }
 
-void TypedefTable::leaveContext() {
-	currentContext = "";
+void TypedefTable::leaveTrait() {
+	currentTrait = "";
 }
 
Index: src/Parser/TypedefTable.h
===================================================================
--- src/Parser/TypedefTable.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/TypedefTable.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 15:24:36 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jun 25 22:52:15 2015
-// Update Count     : 11
+// Last Modified On : Wed Mar  2 17:26:54 2016
+// Update Count     : 12
 //
 
@@ -40,5 +40,5 @@
 
 	int currentScope;
-	std::string currentContext;
+	std::string currentTrait;
 	int contextScope;
 	
@@ -79,10 +79,10 @@
 	
 	// dump the definitions from a pre-defined context into the current scope
-	void openContext( const std::string &contextName );
+	void openTrait( const std::string &contextName );
 	
 	void enterScope();
 	void leaveScope();
-	void enterContext( const std::string &contextName );
-	void leaveContext();
+	void enterTrait( const std::string &contextName );
+	void leaveTrait();
 
 	void print() const;
Index: src/Parser/lex.cc
===================================================================
--- src/Parser/lex.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/lex.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -382,6 +382,6 @@
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 179
-#define YY_END_OF_BUFFER 180
+#define YY_NUM_RULES 180
+#define YY_END_OF_BUFFER 181
 /* This struct is not used in this scanner,
    but its presence is necessary. */
@@ -391,102 +391,103 @@
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[876] =
+static yyconst flex_int16_t yy_accept[888] =
     {   0,
-        0,    0,    0,    0,    0,    0,  114,  114,  117,  117,
-      180,  178,    7,    9,    8,  137,  116,  101,  142,  145,
-      113,  124,  125,  140,  138,  128,  139,  131,  141,  106,
-      107,  108,  129,  130,  147,  149,  148,  150,  178,  101,
-      122,  178,  123,  143,  101,  103,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  126,  146,  127,  144,    7,  178,    4,    4,  179,
-      104,  179,  105,  114,  115,  121,  117,  118,    7,    9,
-        0,    8,  154,  173,  101,    0,  166,  136,  159,  167,
-      164,  151,  162,  152,  163,  161,    0,  111,    3,    0,
-
-      165,  111,  109,    0,    0,  109,  109,    0,    0,  109,
-      108,  108,  108,    0,  108,  134,  135,  133,  155,  157,
-      153,  158,  156,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  102,  172,
-        0,  116,  113,  101,    0,    0,  169,    0,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,   39,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,   57,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  168,  160,    7,    0,    0,    0,    2,    0,
-
-        5,  104,    0,    0,    0,  114,    0,  120,  119,  119,
-        0,    0,    0,  117,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,  132,
-      111,  111,    0,  111,  111,  111,    0,    6,  111,  109,
-        0,    0,    0,  111,    0,  109,  109,  109,  109,    0,
-      110,    0,    0,  108,  108,  108,  108,    0,  170,  171,
-        0,  176,  174,    0,    0,    0,  102,    0,    0,    0,
-        0,    0,    0,    0,    0,  101,   17,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,   14,  101,  101,  101,  101,
-
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,   51,  101,  101,  101,   64,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,   88,  101,  101,  101,  101,  101,  101,  101,    0,
-        0,    0,    0,    0,    0,    0,    0,  119,    0,    0,
-        0,    0,    0,  119,    0,    0,  177,    0,    0,    0,
-        0,    0,    0,    0,  111,    0,  111,    0,  111,    0,
-        0,  111,  111,  109,  109,    0,    0,  110,  110,    0,
-      110,    0,  110,  108,  108,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  175,  101,  101,  101,  101,
-
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,   21,
-      101,   24,  101,   27,  101,  101,  101,  101,  101,  101,
-      101,   42,  101,   44,  101,  101,  101,  101,  101,  101,
-      101,   56,  101,   67,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,   89,  101,  101,   96,  101,
-      101,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,  119,    0,    0,    0,    0,
-        0,  111,  111,    0,    0,    0,    0,    0,  110,  110,
-        0,  112,    0,  110,  110,    0,    0,    0,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,  101,  101,
-       22,  101,  101,  101,  101,  101,  101,  101,   15,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,   23,   25,  101,   32,  101,  101,  101,
-      101,  101,   41,  101,  101,  101,  101,   49,  101,  101,
-       54,  101,  101,  101,  101,  101,   76,  101,  101,  101,
-      101,  101,   86,  101,  101,   94,  101,  101,  100,    0,
+        0,    0,    0,    0,    0,    0,  115,  115,  118,  118,
+      181,  179,    7,    9,    8,  138,  117,  102,  143,  146,
+      114,  125,  126,  141,  139,  129,  140,  132,  142,  107,
+      108,  109,  130,  131,  148,  150,  149,  151,  179,  102,
+      123,  179,  124,  144,  102,  104,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  127,  147,  128,  145,    7,  179,    4,    4,
+      180,  105,  180,  106,  115,  116,  122,  118,  119,    7,
+        9,    0,    8,  155,  174,  102,    0,  167,  137,  160,
+      168,  165,  152,  163,  153,  164,  162,    0,  112,    3,
+
+        0,  166,  112,  110,    0,    0,  110,  110,    0,    0,
+      110,  109,  109,  109,    0,  109,  135,  136,  134,  156,
+      158,  154,  159,  157,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  103,
+      173,    0,  117,  114,  102,    0,    0,  170,    0,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,   38,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,   56,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  169,  161,    7,    0,    0,    0,
+
+        2,    0,    5,  105,    0,    0,    0,  115,    0,  121,
+      120,  120,    0,    0,    0,  118,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,  112,    0,
-        0,  110,  112,  112,  112,  112,  112,  110,    0,    0,
-
-        0,    0,    0,    0,    0,    0,    0,    0,  101,    0,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,   59,  101,  101,  101,
-      101,  101,  101,  101,  101,   28,  101,  101,  101,  101,
-       40,   43,   46,  101,  101,   52,  101,   61,   68,  101,
-      101,   75,   77,   80,   81,   83,   84,  101,  101,   91,
-      101,  101,    0,    1,    0,    0,    0,    0,    0,    0,
-      104,    0,    0,    0,  119,    0,    0,    0,    0,  112,
-      112,  112,  112,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  101,  101,   18,  101,  101,  101,  101,  101,
-
-      101,  101,   16,  101,  101,  101,   33,  101,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,   35,  101,
-       37,   38,  101,   48,   53,  101,  101,  101,   90,  101,
-      101,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   10,   11,   29,   55,  101,  101,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,   60,
-       62,   65,  101,  101,   78,   92,  101,  101,   36,   47,
-       71,   72,  101,   95,   97,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,  101,   69,  101,
-      101,   12,  101,  101,   30,   34,  101,  101,  101,   66,
-
-      101,  101,  101,  101,  101,  101,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   58,
-      101,  101,  101,  101,  101,  101,  101,   50,   63,   73,
-       79,   93,   98,  101,  101,    0,    0,    0,    0,    0,
-        0,    0,    0,  101,  101,   13,   19,  101,   31,  101,
-      101,  101,   26,   87,    0,    0,  101,  101,  101,  101,
-      101,   74,   99,  101,   85,   20,  101,   45,   82,  101,
-      101,  101,  101,   70,    0
+        0,  133,  112,  112,    0,  112,  112,  112,    0,    6,
+      112,  110,    0,    0,    0,  112,    0,  110,  110,  110,
+      110,    0,  111,    0,    0,  109,  109,  109,  109,    0,
+      171,  172,    0,  177,  175,    0,    0,    0,  103,    0,
+        0,    0,    0,    0,    0,    0,    0,  102,   17,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,   14,  102,  102,
+
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,   50,  102,  102,  102,
+       63,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,   89,  102,  102,  102,  102,
+      102,  102,  102,    0,    0,    0,    0,    0,    0,    0,
+        0,  120,    0,    0,    0,    0,    0,  120,    0,    0,
+      178,    0,    0,    0,    0,    0,    0,    0,  112,    0,
+      112,    0,  112,    0,    0,  112,  112,  110,  110,    0,
+        0,  111,  111,    0,  111,    0,  111,  109,  109,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  176,
+
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,   21,  102,   24,  102,   27,  102,  102,
+      102,  102,  102,  102,  102,   41,  102,   43,  102,  102,
+      102,  102,  102,  102,  102,   55,  102,   66,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,   97,  102,  102,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,  120,    0,    0,    0,    0,    0,  112,  112,    0,
+        0,    0,    0,    0,  111,  111,    0,  113,    0,  111,
+
+      111,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,  102,  102,   22,  102,  102,  102,
+      102,  102,  102,  102,   15,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,   23,
+       25,  102,   32,  102,  102,  102,  102,   40,  102,  102,
+      102,  102,   48,  102,  102,   53,  102,  102,   70,  102,
+      102,  102,   76,  102,  102,  102,  102,  102,   86,   88,
+      102,  102,   94,  102,  102,  101,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  113,    0,    0,  111,  113,
+
+      113,  113,  113,  113,  111,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,  102,    0,  102,  102,  102,
+      102,  102,  102,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,   58,  102,  102,  102,  102,  102,  102,
+      102,  102,   28,  102,  102,  102,   39,   42,   45,  102,
+      102,   51,  102,   60,   67,  102,  102,   75,   77,   80,
+       81,   83,   84,  102,  102,   91,  102,  102,    0,    1,
+        0,    0,    0,    0,    0,    0,  105,    0,    0,    0,
+      120,    0,    0,    0,    0,  113,  113,  113,  113,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
+
+       18,  102,  102,  102,  102,  102,  102,  102,   16,  102,
+      102,  102,   33,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,  102,   36,   37,  102,   47,   52,
+      102,  102,  102,   90,  102,  102,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
+       11,   29,   54,  102,  102,  102,  102,  102,  102,  102,
+      102,  102,  102,  102,   59,   61,   64,  102,  102,   78,
+       92,  102,  102,   35,   46,   71,   72,  102,   95,   98,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,  102,   68,  102,  102,   12,  102,  102,   30,
+
+       34,  102,  102,  102,   65,  102,  102,  102,  102,  102,
+      102,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   57,  102,  102,  102,  102,  102,
+      102,  102,   49,   62,   73,   79,   93,   99,  102,  102,
+        0,    0,    0,    0,    0,    0,    0,    0,  102,  102,
+       13,   19,  102,  102,   31,  102,  102,  102,   26,   87,
+        0,    0,  102,  102,  102,  102,  102,  102,   74,  100,
+      102,   85,   20,  102,  102,   44,   82,  102,  102,  102,
+      102,  102,  102,  102,   96,   69,    0
     } ;
 
@@ -536,243 +537,247 @@
     } ;
 
-static yyconst flex_int16_t yy_base[1050] =
+static yyconst flex_int16_t yy_base[1062] =
     {   0,
-        0,   83, 2238, 2237,   93,    0,  175,  176,  177,  178,
-     2252, 2782,  189, 2782,  195,   54, 2782, 2197,   59,  171,
-     2782, 2782, 2782,   55,  186, 2782,  189,  187,  202,  214,
-      272,    0, 2213, 2782,  214, 2213,  150,  340,  153,  222,
-     2782,  157, 2782,  215,  224, 2782,  207,  181,  221,  249,
-      235,  289,  155,  255,  218,  206,  266,  256,  323,  259,
-      192, 2782,  223, 2782, 2210,  377,  342, 2782, 2220, 2782,
-     2187,  234, 2782,    0, 2782,  421,    0, 2782,  393, 2782,
-      399,  405, 2782,  492, 2184,  241, 2782, 2782, 2782, 2782,
-     2782, 2201, 2782, 2200, 2782, 2782, 2211,  552, 2782, 2226,
-
-     2782,  413,  393,  437,  493,  377,  318,  195,  430,  382,
-        0,  384,  321,  196,  427, 2782, 2782, 2782, 2194, 2782,
-     2782, 2782, 2193, 2192,  252,  302, 2206,  342,  435,  422,
-      381,  455,  400,  494, 2185,  440, 2133,  469, 2163, 2782,
-      276, 2782, 2782,  520, 2159, 2157, 2782, 2128,  414,  463,
-      470,  325,  254,  479,  432,  274,  480,  423,  483,  498,
-      492,  503,  499,  509,  341,  455,  484,  377,  510,  512,
-      517,  518,  529,  530,  531,  537, 2154,  541,  536,  544,
-      557,  546,  566,  569,  538,  552,  548,  554,  588,  571,
-      570,  580, 2782, 2782,  645,  651, 2202,  657, 2782,  663,
-
-     2782, 2152,  593, 2147, 2144,    0,  631, 2782, 2782,  669,
-     2141, 2140, 2139,    0, 2160,  629,  635,  639,  678,  677,
-      666,  670,  671,  674, 2138,  681,  682, 2115, 2114, 2782,
-        0,  597,  702,  678,  676, 2111, 2160, 2782,  693,    0,
-      710,  723,  743,  762,  788,  707, 2782, 2119, 2094,    0,
-      776, 2138,  768,  723, 2782, 2113, 2086,  809, 2782, 2782,
-     2118, 2782, 2782,  705,  710, 2098, 2097,  724, 2091, 2088,
-     2087,    0, 2086,    0, 2056,  709,  682,  707,  712,  710,
-      724,  647,  750,  671,  786,  751,  748,  731,  778,  787,
-      789,  788,  792,  790,  758, 2084,  796,  806,  800,  813,
-
-      798,  810,  802,  816,  822,  819,  815,  826,  830,  829,
-      831,  832,  833,  837,  839,  841,  846,  843, 2081,  848,
-      850,  849,  851,  852,  854,  853,  857,  855,  858,  863,
-      868, 2080,  867,  912,  871,  878,  872,  879,  882,  937,
-      939, 2076, 2074, 2071,    0, 2070,    0,  927,  931, 2069,
-        0, 2067,    0, 2064,    0, 2084, 2782,  913,  926, 2064,
-     2060,    0, 2057,    0, 2782,  942,  960,  953, 2782,  966,
-      981, 1005, 2053, 2782, 2782,  955,  968,  995,  968, 1028,
-      892, 1014,  970, 2782, 2782, 2049, 2047, 2045,    0, 2042,
-        0, 2040,    0, 2038,    0, 2782,  909,  944,  982,  943,
-
-     1006,  911, 1012,  923, 1013, 1019, 1009, 1016, 1023, 1024,
-     1020,  972, 1030, 1028,  989, 1026, 1034, 1027, 1039, 2038,
-     1044, 2035, 1048, 2034, 1049, 1051, 1052, 1053, 1056, 1057,
-     1055, 2033, 1059, 2031,  946, 1063, 1066, 1067, 1068, 1071,
-     1069, 2028, 1075, 2025, 1077, 1080, 1079, 1082, 1084, 1086,
-     1087, 1090, 1097, 1107, 1088, 1108, 1093, 1098, 2024, 1096,
-     1111, 1164, 2020,    0, 2018,    0, 2015,    0, 2012,    0,
-     1151, 2011,    0, 2010,    0, 2008, 2005, 2002,    0, 2001,
-        0, 1156, 2000, 1162, 1148, 1182, 1149, 1126, 1147, 2782,
-     1201, 1215, 1241, 2010, 1983, 1992, 1991,    0, 1990,    0,
-
-     1988,    0, 1985,    0, 1982,    0, 1981,    0, 1161, 1149,
-     1983, 1179, 1140, 1180, 1117, 1182, 1192, 1199, 1181, 1163,
-     1196, 1200, 1201, 1220, 1198, 1221, 1224,  604, 1226, 1227,
-     1231, 1233, 1234, 1981, 1244, 1236, 1978, 1240, 1241, 1246,
-     1247, 1243, 1975, 1250, 1251, 1253, 1254, 1974, 1255, 1267,
-     1973, 1264, 1271, 1256, 1263, 1257, 1971, 1275, 1277, 1279,
-     1260, 1281, 1290, 1285, 1288, 1968, 1289, 1291, 1967, 2015,
-     1961,    0, 1958,    0, 1957,    0, 1956,    0, 1954,    0,
-     1921,    0, 1919,    0, 1918,    0, 1336, 1342, 1369, 1353,
-     1915, 2782, 1359, 1307, 1359, 1309, 1912, 2782, 1911,    0,
-
-     1910,    0, 1908,    0, 1905,    0,    0,    0, 1905,    0,
-     1347, 1295, 1292, 1323, 1337, 1338, 1296, 1349, 1351, 1355,
-     1353, 1348, 1363, 1364, 1371, 1373, 1380, 1375, 1403, 1381,
-     1385, 1389, 1094, 1387, 1390, 1904, 1391, 1393, 1397, 1401,
-     1903, 1901, 1898, 1394, 1400, 1897, 1404, 1896, 1894, 1402,
-     1408, 1891, 1890, 1889, 1887, 1884, 1880, 1417, 1412, 1876,
-     1420, 1418, 1921, 2782, 1853,    0, 1852,    0,    0,    0,
-     1854,    0,    0,    0, 2782,    0,    0,    0,    0, 1463,
-     1849, 2782, 2782, 1469, 1846,    0, 1845,    0,    0,    0,
-        0, 1844, 1407, 1446, 1845, 1406, 1423, 1300, 1431, 1449,
-
-     1455, 1447, 1842, 1457, 1448, 1459, 1464, 1460, 1490, 1474,
-     1470, 1494, 1480, 1475, 1484, 1485, 1486, 1482, 1841, 1487,
-     1840, 1838, 1489, 1835, 1834, 1491, 1493, 1497, 1833, 1498,
-     1500,    0,    0,    0, 1828, 1825, 1824, 1548,    0, 1823,
-     1821, 1818, 1817, 1816, 1817, 1814, 1813, 1812, 1505, 1510,
-     1502, 1501, 1504, 1508, 1513, 1517, 1526, 1528, 1559, 1810,
-     1533, 1807, 1534, 1535, 1544, 1545, 1538, 1539, 1806, 1805,
-     1803, 1800, 1540, 1799, 1798, 1793, 1786, 1784, 1783, 1780,
-     1779, 1778, 1776, 1759, 1750, 1749, 1746, 1546, 1742, 1549,
-     1550, 1552, 1554, 1557, 1558, 1739, 1556, 1589, 1566, 1732,
-
-     1565, 1572, 1577, 1579, 1567, 1578, 1727, 1726, 1705, 1704,
-     1703, 1696, 1694, 1693, 1650, 1649, 1647, 1645, 1644, 1646,
-     1571, 1584, 1582, 1581, 1586, 1593, 1595, 1645, 1644, 1597,
-     1642, 1641, 1598, 1599, 1602, 1636, 1635, 1633, 1422, 1421,
-     1205, 1201,  946, 1605, 1610,  910, 1603, 1607,  768, 1613,
-     1618, 1619,  723,  605,  503,  370, 1609, 1620, 1623, 1624,
-     1625,  338,  337, 1627,  290,  251, 1630,  200,  196, 1631,
-     1632, 1637, 1633,  136, 2782, 1707, 1720, 1733, 1743, 1753,
-     1766, 1776, 1789, 1802, 1815, 1823, 1833, 1840, 1847, 1854,
-     1861, 1868, 1875, 1882, 1889, 1896, 1909, 1916, 1920, 1928,
-
-     1931, 1938, 1945, 1952, 1955, 1962, 1968, 1981, 1994, 2001,
-     2008, 2015, 2022, 2025, 2032, 2035, 2042, 2045, 2052, 2055,
-     2062, 2065, 2072, 2075, 2082, 2085, 2092, 2100, 2107, 2114,
-     2121, 2128, 2131, 2138, 2141, 2148, 2151, 2158, 2164, 2177,
-     2184, 2191, 2194, 2201, 2204, 2211, 2214, 2221, 2224, 2231,
-     2234, 2241, 2244, 2251, 2258, 2261, 2268, 2271, 2278, 2285,
-     2292, 2295, 2302, 2305, 2312, 2315, 2322, 2325, 2332, 2335,
-     2342, 2348, 2361, 2368, 2375, 2378, 2385, 2388, 2395, 2398,
-     2405, 2408, 2415, 2418, 2425, 2428, 2435, 2438, 2445, 2448,
-     2455, 2462, 2465, 2472, 2475, 2482, 2485, 2492, 2495, 2498,
-
-     2504, 2511, 2520, 2527, 2534, 2537, 2544, 2547, 2550, 2556,
-     2563, 2566, 2569, 2572, 2575, 2578, 2581, 2584, 2591, 2594,
-     2601, 2604, 2607, 2610, 2613, 2623, 2630, 2633, 2636, 2639,
-     2646, 2653, 2660, 2663, 2670, 2677, 2684, 2691, 2698, 2705,
-     2712, 2719, 2726, 2733, 2740, 2747, 2754, 2761, 2768
+        0,   83, 2268, 2265,   93,    0,  175,  176,  177,  178,
+     2279, 2798,  189, 2798,  195,   54, 2798, 2226,   59,  171,
+     2798, 2798, 2798,   55,  186, 2798,  189,  187,  202,  214,
+      272,    0, 2244, 2798,  214, 2243,  150,  340,  153,  222,
+     2798,  157, 2798,  215,  224, 2798,  207,  181,  221,  249,
+      235,  289,  155,  255,  218,  231,  206,  266,  256,  323,
+      259,  192, 2798,  252, 2798, 2238,  377,  342, 2798, 2249,
+     2798, 2218,  241, 2798,    0, 2798,  421,    0, 2798,  393,
+     2798,  399,  405, 2798,  492, 2216,  276, 2798, 2798, 2798,
+     2798, 2798, 2231, 2798, 2228, 2798, 2798, 2240,  552, 2798,
+
+     2257, 2798,  413,  393,  437,  493,  377,  318,  195,  430,
+      382,    0,  384,  321,  196,  427, 2798, 2798, 2798, 2226,
+     2798, 2798, 2798, 2223, 2220,  304,  342, 2235,  381,  435,
+      422,  400,  455,  440,  494, 2216,  469, 2165,  497, 2193,
+     2798,  432, 2798, 2798,  521, 2187, 2186, 2798, 2159,  470,
+      414,  436,  325,  254,  463,  480,  486,  563,  274,  482,
+      484,  487,  495,  234,  489,  341,  488,  490,  377,  507,
+      497,  501,  503,  514,  515,  506,  529, 2186,  531,  537,
+      505,  518,  536,  534,  538,  559,  575,  571,  577,  574,
+      599,  590,  581,  592, 2798, 2798,  662,  668, 2232,  674,
+
+     2798,  680, 2798, 2180,  583, 2176, 2175,    0,  671, 2798,
+     2798,  686, 2173, 2170, 2167,    0, 2189,  568,  615,  618,
+      695,  694,  627,  654,  628,  683, 2186,  686,  687, 2163,
+     2160, 2798,    0,  680,  712,  703,  682, 2157, 2208, 2798,
+      711,    0,  702,  756,  762,  795,  774,  604, 2798, 2167,
+     2141,    0,  803, 2167,  780,  684, 2798, 2143, 2118,  804,
+     2798, 2798, 2148, 2798, 2798,  724,  728, 2126, 2126,  694,
+     2122, 2120, 2117,    0, 2114,    0, 2085,  679,  682,  696,
+      423,  722,  757,  703,  758,  741,  799,  764,  725,  789,
+      697,  774,  788,  792,  760,  784,  795, 2115,  809,  797,
+
+      816,  196,  804,  812,  817,  823,  829,  632,  831,  832,
+      836,  819,  837,  833,  840,  844,  847,  843,  853,  851,
+     2113,  854,  855,  856,  859,  857,  858,  860,  861,  867,
+      863,  866,  868,  873,  874, 2110,  877,  716,  882,  883,
+      884,  888,  894,  947,  944, 2104, 2103, 2102,    0, 2100,
+        0,  934,  939, 2097,    0, 2094,    0, 2093,    0, 2113,
+     2798,  934,  935, 2092, 2087,    0, 2086,    0, 2798,  947,
+      967,  958, 2798,  973,  988, 1012, 2085, 2798, 2798,  932,
+      962,  999,  975, 1033,  912, 1020,  956, 2798, 2798, 2083,
+     2080, 2079,    0, 2078,    0, 2076,    0, 2073,    0, 2798,
+
+      956,  936,  978,  950,  994, 1010, 1016,  973, 1019, 1020,
+     1024, 1012, 1029, 1030, 1026, 1027, 1032, 1038, 1044, 1031,
+     1051, 1049, 1041, 2072, 1055, 2068, 1054, 2066, 1057, 1058,
+     1059,  974, 1061, 1064, 1065, 2064, 1070, 2061, 1063, 1071,
+     1073, 1075, 1076, 1081, 1077, 2059, 1082, 2057, 1084, 1087,
+     1089, 1092, 1094, 1095, 1100, 1090, 1098, 1106, 1115, 1102,
+     1103, 1116, 1104, 1118, 2054, 1119, 1123, 1169, 2048,    0,
+     2047,    0, 2046,    0, 2044,    0, 1164, 2041,    0, 2038,
+        0, 2037, 2036, 2034,    0, 2031,    0, 1171, 2028, 1177,
+     1137, 1197, 1164, 1112, 1131, 2798, 1216, 1230, 1256, 2039,
+
+     2014, 2024, 2021,    0, 2018,    0, 2017,    0, 2016,    0,
+     2014,    0, 2011,    0, 1159, 1164, 2011, 1160, 1178, 1182,
+     1133, 1194, 1208, 1185,  541, 1199, 1197, 1215, 1193, 1209,
+     1211, 1225, 1210, 1254, 1235, 1237, 1239, 1241, 1242, 2010,
+     1252, 1248, 2009, 1249, 1253, 1255, 1251, 2007, 1258, 1261,
+     1262, 1264, 2004, 1265, 1271, 2001, 1263, 1273, 2000, 1269,
+     1275, 1277, 1999, 1281, 1283, 1285, 1284, 1286, 1296, 1997,
+     1295, 1287, 1994, 1299, 1300, 1991, 2039, 1986,    0, 1984,
+        0, 1981,    0, 1980,    0, 1979,    0, 1977,    0, 1974,
+        0, 1973,    0, 1336, 1346, 1369, 1357, 1972, 2798, 1375,
+
+     1311, 1347, 1313, 1970, 2798, 1937,    0, 1935,    0, 1934,
+        0, 1931,    0,    0,    0, 1931,    0, 1353, 1354, 1305,
+     1302, 1335, 1363, 1366, 1367, 1364,  586, 1370, 1365, 1374,
+     1368, 1376, 1369, 1385, 1380, 1166, 1392, 1394, 1327, 1395,
+     1396, 1399, 1930, 1398, 1400, 1401, 1929, 1927, 1924, 1403,
+     1402, 1921, 1409, 1920, 1919, 1406, 1404, 1917, 1914, 1913,
+     1912, 1910, 1907, 1416, 1417, 1906, 1419, 1405, 1954, 2798,
+     1900,    0, 1897,    0,    0,    0, 1896,    0,    0,    0,
+     2798,    0,    0,    0,    0, 1459, 1889, 2798, 2798, 1465,
+     1885,    0, 1869,    0,    0,    0,    0, 1868, 1424, 1442,
+
+     1870, 1444, 1447, 1443, 1451, 1453, 1455, 1457, 1868, 1459,
+     1460, 1476, 1461, 1463, 1494, 1477, 1478, 1504, 1483, 1482,
+     1481, 1488, 1490, 1491, 1492, 1865, 1864, 1493, 1863, 1861,
+     1497, 1496, 1499, 1858, 1500, 1502,    0,    0,    0, 1854,
+     1853, 1851, 1550,    0, 1848, 1847, 1846, 1844, 1841, 1843,
+     1842, 1840, 1837, 1507, 1513, 1505, 1514, 1509, 1515, 1528,
+     1506, 1531, 1533, 1562, 1836, 1536, 1835, 1537, 1541, 1544,
+     1549, 1542, 1543, 1833, 1830, 1829, 1828, 1550, 1826, 1823,
+     1819, 1818, 1816, 1813, 1812, 1811, 1809, 1802, 1800, 1799,
+     1796, 1795, 1551, 1797, 1554, 1556, 1555, 1559, 1560, 1561,
+
+     1795, 1565, 1592, 1568, 1778, 1569, 1576, 1577, 1584, 1570,
+     1572, 1766, 1765, 1762, 1755, 1752, 1745, 1743, 1742, 1721,
+     1720, 1719, 1712, 1710, 1712, 1582, 1587, 1595, 1590, 1589,
+     1597, 1585, 1670, 1669, 1601, 1666, 1665, 1605, 1606, 1609,
+     1660, 1659, 1655, 1654, 1651, 1650, 1649, 1593, 1610, 1611,
+     1412, 1614, 1612, 1620, 1337, 1621, 1623, 1627, 1000,  928,
+      896,  778, 1628, 1629, 1631, 1632, 1633, 1635,  709,  628,
+     1637,  373,  338, 1639, 1640,  337,  257, 1641, 1643, 1645,
+     1647, 1646, 1649, 1651,  200,  136, 2798, 1723, 1736, 1749,
+     1759, 1769, 1782, 1792, 1805, 1818, 1831, 1839, 1849, 1856,
+
+     1863, 1870, 1877, 1884, 1891, 1898, 1905, 1912, 1925, 1932,
+     1936, 1944, 1947, 1954, 1961, 1968, 1971, 1978, 1984, 1997,
+     2010, 2017, 2024, 2031, 2038, 2041, 2048, 2051, 2058, 2061,
+     2068, 2071, 2078, 2081, 2088, 2091, 2098, 2101, 2108, 2116,
+     2123, 2130, 2137, 2144, 2147, 2154, 2157, 2164, 2167, 2174,
+     2180, 2193, 2200, 2207, 2210, 2217, 2220, 2227, 2230, 2237,
+     2240, 2247, 2250, 2257, 2260, 2267, 2274, 2277, 2284, 2287,
+     2294, 2301, 2308, 2311, 2318, 2321, 2328, 2331, 2338, 2341,
+     2348, 2351, 2358, 2364, 2377, 2384, 2391, 2394, 2401, 2404,
+     2411, 2414, 2421, 2424, 2431, 2434, 2441, 2444, 2451, 2454,
+
+     2461, 2464, 2471, 2478, 2481, 2488, 2491, 2498, 2501, 2508,
+     2511, 2514, 2520, 2527, 2536, 2543, 2550, 2553, 2560, 2563,
+     2566, 2572, 2579, 2582, 2585, 2588, 2591, 2594, 2597, 2600,
+     2607, 2610, 2617, 2620, 2623, 2626, 2629, 2639, 2646, 2649,
+     2652, 2655, 2662, 2669, 2676, 2679, 2686, 2693, 2700, 2707,
+     2714, 2721, 2728, 2735, 2742, 2749, 2756, 2763, 2770, 2777,
+     2784
     } ;
 
-static yyconst flex_int16_t yy_def[1050] =
+static yyconst flex_int16_t yy_def[1062] =
     {   0,
-      875,    1,  876,  876,  875,    5,  877,  877,  878,  878,
-      875,  875,  875,  875,  875,  875,  875,  879,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,   31,  875,  875,  875,  875,  875,  875,  880,  879,
-      875,  875,  875,  875,  879,  875,  879,  879,  879,  879,
-      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
-      879,  875,  875,  875,  875,  875,  881,  875,  875,  875,
-      882,  875,  875,  883,  875,  875,  884,  875,  875,  875,
-      875,  875,  875,  875,  879,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  885,
-
-      875,   98,   30,  875,  875,  875,  875,  886,   30,  875,
-       31,  875,  875,   31,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  887,  875,
-      875,  875,  875,  879,  888,  889,  875,  875,  879,  879,
-      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
-      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
-      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
-      879,  879,  879,  879,  879,  879,  879,  879,  879,  879,
-      879,  879,  875,  875,  875,  881,  881,  881,  875,  881,
-
-      875,  882,  875,  890,  891,  883,  875,  875,  875,  875,
-      892,  893,  894,  884,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  895,  896,  875,
-       98,  875,  875,  875,  875,   98,  897,  875,  875,  103,
-      103,  875,  875,  875,  875,  875,  875,  875,  875,  898,
-      899,  900,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  887,  875,  901,  902,
-      903,  904,  905,  906,  875,  907,  907,  907,  907,  907,
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
-
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  907,
-      907,  907,  907,  907,  907,  907,  907,  907,  907,  908,
-      909,  910,  911,  912,  913,  914,  915,  875,  875,  916,
-      917,  918,  919,  920,  921,  875,  875,  875,  875,  875,
-      922,  923,  924,  925,  875,  875,  875,  875,  875,  875,
-      875,  367,  372,  875,  875,  926,  927,  928,  875,  875,
-      875,  928,  875,  875,  875,  929,  930,  931,  932,  933,
-      934,  935,  936,  937,  938,  875,  939,  939,  939,  939,
-
-      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
-      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
-      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
-      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
-      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
-      939,  939,  939,  939,  939,  939,  939,  939,  939,  939,
-      939,  940,  941,  942,  943,  944,  945,  946,  947,  948,
-      875,  949,  950,  951,  952,  953,  953,  954,  955,  956,
-      957,  875,  482,  875,  958,  875,  958,  875,  875,  875,
-      875,  875,  875,  875,  875,  959,  960,  961,  962,  963,
-
-      964,  965,  966,  967,  968,  969,  970,  971,  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,  982,  983,
-      984,  985,  986,  987,  988,  989,  875,  875,  875,  875,
-      990,  875,  589,  875,  875,  875,  593,  875,  991,  992,
-
-      993,  994,  995,  996,  997,  998,  999, 1000, 1001, 1002,
-     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, 1003,  875, 1004, 1005, 1006, 1007, 1008, 1009,
-     1010, 1011, 1012, 1013,  875, 1014, 1015, 1016, 1017,  875,
-      680,  875,  875,  875, 1018, 1019, 1020, 1021, 1022, 1023,
-     1024, 1025, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1027, 1028, 1029, 1030, 1031, 1032,  875, 1033, 1018,
-     1020, 1034, 1035, 1025, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1036, 1037, 1030, 1038, 1031,
-     1039, 1032, 1040, 1041, 1034, 1042, 1035, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-
-     1026, 1026, 1026, 1026, 1026, 1026, 1043, 1036, 1044, 1037,
-     1045, 1038, 1046, 1039, 1047, 1040, 1048, 1041, 1042, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1049, 1043, 1044, 1045, 1046,
-     1020, 1047, 1048, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1049, 1020, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026, 1026,
-     1026, 1026, 1026, 1026,    0,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875
+      887,    1,  888,  888,  887,    5,  889,  889,  890,  890,
+      887,  887,  887,  887,  887,  887,  887,  891,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,   31,  887,  887,  887,  887,  887,  887,  892,  891,
+      887,  887,  887,  887,  891,  887,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  887,  887,  887,  887,  887,  893,  887,  887,
+      887,  894,  887,  887,  895,  887,  887,  896,  887,  887,
+      887,  887,  887,  887,  887,  891,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+
+      897,  887,   99,   30,  887,  887,  887,  887,  898,   30,
+      887,   31,  887,  887,   31,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  899,
+      887,  887,  887,  887,  891,  900,  901,  887,  887,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  891,  891,  891,  891,  891,  891,
+      891,  891,  891,  891,  887,  887,  887,  893,  893,  893,
+
+      887,  893,  887,  894,  887,  902,  903,  895,  887,  887,
+      887,  887,  904,  905,  906,  896,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  907,
+      908,  887,   99,  887,  887,  887,  887,   99,  909,  887,
+      887,  104,  104,  887,  887,  887,  887,  887,  887,  887,
+      887,  910,  911,  912,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  899,  887,
+      913,  914,  915,  916,  917,  918,  887,  919,  919,  919,
+      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
+      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
+
+      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
+      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
+      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
+      919,  919,  919,  919,  919,  919,  919,  919,  919,  919,
+      919,  919,  919,  920,  921,  922,  923,  924,  925,  926,
+      927,  887,  887,  928,  929,  930,  931,  932,  933,  887,
+      887,  887,  887,  887,  934,  935,  936,  937,  887,  887,
+      887,  887,  887,  887,  887,  371,  376,  887,  887,  938,
+      939,  940,  887,  887,  887,  940,  887,  887,  887,  941,
+      942,  943,  944,  945,  946,  947,  948,  949,  950,  887,
+
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  951,  951,  951,
+      951,  951,  951,  951,  951,  951,  951,  952,  953,  954,
+      955,  956,  957,  958,  959,  960,  887,  961,  962,  963,
+      964,  965,  965,  966,  967,  968,  969,  887,  488,  887,
+      970,  887,  970,  887,  887,  887,  887,  887,  887,  887,
+
+      887,  971,  972,  973,  974,  975,  976,  977,  978,  979,
+      980,  981,  982,  983,  984,  984,  984,  984,  984,  984,
+      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
+      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
+      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
+      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
+      984,  984,  984,  984,  984,  984,  984,  984,  984,  984,
+      984,  984,  984,  984,  984,  984,  985,  986,  987,  988,
+      989,  990,  991,  992,  993,  994,  995,  996,  997,  998,
+      999, 1000, 1001,  887,  887,  887,  887, 1002,  887,  596,
+
+      887,  887,  887,  600,  887, 1003, 1004, 1005, 1006, 1007,
+     1008, 1009, 1010, 1011, 1012, 1013, 1014, 1013, 1013, 1013,
+     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
+     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1015,  887,
+     1016, 1017, 1018, 1019, 1020, 1021, 1022, 1023, 1024, 1025,
+      887, 1026, 1027, 1028, 1029,  887,  686,  887,  887,  887,
+     1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1038,
+
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1039, 1040, 1041, 1042,
+     1043, 1044,  887, 1045, 1030, 1032, 1046, 1047, 1037, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1048, 1049, 1042, 1050, 1043, 1051, 1044, 1052, 1053, 1046,
+     1054, 1047, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1055, 1048, 1056, 1049, 1057, 1050, 1058, 1051, 1059,
+     1052, 1060, 1053, 1054, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1061, 1055, 1056, 1057, 1058, 1032, 1059, 1060, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1061, 1032, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038, 1038,
+     1038, 1038, 1038, 1038, 1038, 1038,    0,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887
     } ;
 
-static yyconst flex_int16_t yy_nxt[2867] =
+static yyconst flex_int16_t yy_nxt[2883] =
     {   0,
        12,   13,   14,   15,   15,   15,   13,   16,   17,   12,
@@ -782,316 +787,318 @@
        18,   18,   40,   18,   18,   18,   18,   18,   40,   18,
        41,   42,   43,   44,   45,   46,   47,   48,   49,   50,
-       51,   52,   53,   18,   54,   18,   55,   18,   18,   18,
-       18,   56,   57,   58,   59,   60,   61,   18,   18,   18,
-       62,   63,   64,   65,   66,   83,   91,   84,   84,   66,
-       87,   88,   67,   70,   70,   70,   70,   70,   70,   70,
-
-       70,   70,   70,   71,   70,   70,   70,   70,   70,   70,
-       70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
-       70,   70,   70,   70,   70,   70,   70,   70,   71,   71,
+       51,   52,   53,   18,   54,   18,   55,   18,   18,   56,
+       18,   57,   58,   59,   60,   61,   62,   18,   18,   18,
+       63,   64,   65,   66,   67,   84,   92,   85,   85,   67,
+       88,   89,   68,   71,   71,   71,   71,   71,   71,   71,
+
+       71,   71,   71,   72,   71,   71,   71,   71,   71,   71,
        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   70,   72,   70,   70,   71,   73,   71,
-       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   70,   70,   70,   70,   75,   75,   78,
-       78,  122,  123,   89,  140,   78,   78,   86,   75,   75,
-       79,   80,   81,   81,   81,   79,   81,   80,   82,   82,
-
-       82,   81,   90,   92,  141,  145,   86,   97,   94,   98,
-       98,   98,   98,   98,   98,  250,  875,   93,   99,   84,
-       95,   96,   84,  100,  176,  117,   76,   76,   76,   76,
-      142,  146,   86,  101,  102,  143,  103,  103,  103,  103,
-      104,  104,  118,   86,  119,  120,  147,   86,  148,  252,
-      258,   86,  160,  105,  193,  192,  106,   86,   86,  149,
-      150,  151,  107,  108,  152,  153,  181,  154,  109,   86,
-      155,  156,   86,   86,  105,   86,  144,  161,  157,  158,
-      110,  159,  204,  261,  162,  262,   86,  179,  107,  228,
-      163,  108,  102,  180,  111,  111,  111,  111,  111,  111,
-
-       86,  168,   86,  169,  194,   86,   86,   86,  205,  164,
-       86,  105,  170,  165,  112,  229,  177,   86,  166,  186,
-      113,  281,  167,  178,  269,   86,  114,  187,  191,  182,
-      183,  142,  105,  261,  188,  262,  143,  284,  115,  184,
-       86,   86,  185,  198,  199,  171,  113,  124,  198,  189,
-      270,  125,  126,  172,  127,  173,  128,  129,  174,  130,
-      248,  131,  175,  256,  200,  200,  200,  200,  200,  200,
-      132,  133,  134,  261,   86,  262,   86,  144,  195,   80,
-       81,   81,   81,  195,  249,  280,  196,  257,   86,   86,
-      135,  190,   86,  136,   79,   80,   81,   81,   81,   79,
-
-       81,   80,   81,   81,   81,   81,   81,   80,   82,   82,
-       82,   81,  261,  305,  262,  240,  240,  240,  240,  246,
-      137,  138,  207,  208,  875,  247,  254,  207,   86,  209,
-      247,  261,  255,  262,  209,   98,   98,   98,   98,   98,
-       98,  263,  875,  210,  210,  210,  210,  241,  246,  308,
-      875,  247,  263,  261,  209,  262,  247,  102,  255,  104,
-      104,  104,  104,  104,  104,   86,  261,  239,  262,  211,
-      875,  261,  209,  262,   86,  255,  105,  209,  209,  875,
-      276,  209,  209,   86,  253,  264,  261,  277,  262,  209,
-      296,  242,  209,  254,  209,  212,  209,  105,  213,  215,
-
-      261,  255,  262,  216,  217,  283,   86,  875,  218,  219,
-      243,  220,  243,  221,   86,  244,  244,  244,  244,  244,
-      244,   86,  222,  223,  224,  261,  265,  262,  142,  306,
-       86,   86,  278,  143,   86,   86,  285,  286,  287,  279,
-      288,  289,  225,   86,  290,  226,  291,  245,  282,   86,
-       86,  292,  293,  294,   86,  295,  297,  875,  298,  301,
-       86,   86,  307,   86,  299,  300,  309,  303,   86,   86,
-      304,   86,  302,  227,  231,  231,  231,  231,  231,  231,
-       86,   86,   86,  312,  310,  311,  313,   86,   86,   86,
-      232,  233,   86,  234,  235,   86,  142,   86,  314,   86,
-
-      321,  315,  330,   86,  320,   86,  236,  318,   86,  316,
-      317,  232,  233,  232,  319,  325,  234,   86,  235,  322,
-       86,   86,   86,  331,  333,  328,  332,  629,  326,  323,
-      324,   86,  207,  208,  337,  335,  338,  207,  365,   86,
-      329,  342,  334,  336,  339,  327,  195,   80,   81,   81,
-       81,  195,  198,  199,  196,   86,   86,  198,  198,  199,
-      356,  365,  357,  198,  340,  199,  356,  343,  357,  340,
-      356,  341,  357,  200,  200,  200,  200,  200,  200,  200,
-      200,  200,  200,  200,  200,  200,  200,  200,  200,  200,
-      200,  348,  348,  348,  348,  357,  357,  356,   86,  357,
-
-      358,  356,  356,  357,  357,  356,  359,  357,  356,  356,
-      357,  357,  356,  356,  357,  357,  369,  365,  403,  366,
-      369,  366,   86,  349,  367,  367,  367,  367,  367,  367,
-      875,  232,  233,   86,  234,  235,  261,  369,  262,  369,
-      365,  261,  405,  262,  369,  104,  104,  104,  104,  104,
-      104,  398,  232,  233,  232,  374,  368,  234,   86,  235,
-       86,   86,  105,   86,  371,  244,  244,  244,  244,  244,
-      244,  384,  386,  397,   86,   86,  399,  253,  401,  400,
-      402,  374,   86,  105,  372,  372,  372,  372,  372,  372,
-      104,  104,  104,  104,  104,  104,  377,  384,  387,   86,
-
-      232,   86,   86,  234,  235,  243,  404,  243,  411,   86,
-      244,  244,  244,  244,  244,  244,  373,  410,  379,   86,
-      380,  232,  253,  232,  381,  409,  234,  419,  235,   86,
-      382,  111,  111,  111,  111,  111,  111,   86,   86,   86,
-       86,   86,  383,   86,  412,  415,  380,   86,  416,   86,
-      381,   86,  406,   86,  413,  414,  417,   86,  407,  408,
-      422,   86,  421,  258,   86,  420,   86,   86,  418,  424,
-       86,  423,  428,   86,  426,  427,  430,   86,  429,  425,
-       86,   86,   86,   86,   86,  431,  432,  433,   86,  437,
-       86,  435,   86,  438,   86,  439,  434,   86,  436,   86,
-
-       86,   86,   86,   86,   86,   86,   86,  443,   86,   86,
-      444,  441,  440,  446,   86,  442,  445,  451,   86,   86,
-      142,  450,   86,   86,  447,  449,  448,  456,  452,   86,
-       86,  459,  453,   86,  494,  460,  454,  455,  340,  199,
-      457,  199,  458,  340,  356,  341,  357,  197,  461,  209,
-      209,  209,  209,  348,  348,  348,  348,  356,  495,  357,
-       86,   86,   86,   86,  367,  367,  367,  367,  367,  367,
-      366,  509,  366,  514,   86,  367,  367,  367,  367,  367,
-      367,  471,  482,  482,  482,  482,  482,  482,  231,  231,
-      231,  231,  231,  231,   86,   86,  516,   86,  232,  486,
-
-      875,  234,  235,  240,  240,  240,  240,  104,  104,  487,
-      489,  510,  486,  512,  483,  377,  490,  545,  490,  232,
-      370,  232,  488,   86,  234,  486,  235,  372,  372,  372,
-      372,  372,  372,   86,  875,  371,  489,  379,  486,  380,
-       86,  525,  490,  381,  490,  491,  529,  491,  511,  382,
-      492,  492,  492,  492,  492,  492,  379,   86,  380,  373,
-       86,  383,  381,   86,   86,  380,  513,   86,  496,  381,
-       86,   86,  515,  517,   86,   86,  519,   86,   86,   86,
-      383,   86,  493,  518,  380,   86,  526,  521,  381,  520,
-       86,  522,  523,  524,  527,   86,  531,  532,  530,   86,
-
-       86,  528,   86,   86,   86,  533,   86,   86,   86,  534,
-       86,  535,  538,  541,   86,  543,  539,   86,   86,   86,
-       86,  536,   86,  542,  537,  544,   86,  540,   86,  551,
-       86,   86,  547,   86,  549,   86,  546,   86,   86,   86,
-      548,   86,  550,  552,   86,   86,  558,   86,   86,   86,
-      555,  553,  554,  556,  560,  561,  559,  557,   86,   86,
-      567,  566,   86,  716,  563,  562,  199,  564,   86,  568,
-      486,  569,  570,  209,  209,  209,  209,  565,  482,  482,
-      482,  482,  482,  482,  372,  372,  372,  372,  372,  372,
-      616,   86,  486,  486,  232,  592,  486,  234,  235,  588,
-
-       86,  588,  487,  591,  589,  589,  589,  589,  589,  589,
-      483,  614,   86,  612,   86,  232,  484,  232,  486,  486,
-      234,  592,  235,  492,  492,  492,  492,  492,  492,  611,
-       86,   86,   86,   86,  621,  620,  590,  593,  593,  593,
-      593,  593,  593,   86,  615,  613,  617,   86,  618,   86,
-       86,   86,   86,  594,  626,  875,  595,  596,  491,  856,
-      491,  619,  622,  492,  492,  492,  492,  492,  492,  597,
-      623,   86,   86,  624,  594,   86,  594,   86,   86,  595,
-      625,  596,   86,  627,   86,   86,  630,   86,  628,  635,
-      634,   86,   86,  633,   86,   86,  636,   86,   86,  632,
-
-      631,   86,   86,  641,   86,   86,   86,   86,   86,  638,
-      642,   86,  639,  640,   86,   86,  644,  637,   86,  643,
-      645,  646,   86,  647,  648,  652,   86,  651,   86,  650,
-       86,  649,   86,  656,  653,  658,   86,  655,  654,   86,
-       86,   86,   86,   86,  657,  659,   86,   86,  682,  660,
-      682,   86,  696,  695,  700,  662,  749,  661,  482,  482,
-      482,  482,  482,  482,  589,  589,  589,  589,  589,  589,
-      588,  682,  588,  682,   86,  589,  589,  589,  589,  589,
-      589,  593,  593,  593,  593,  593,  593,  697,   86,   86,
-      587,  680,  680,  680,  680,  680,  680,  683,   86,   86,
-
-       86,  683,   86,  693,   86,  698,   86,  594,  701,  703,
-      595,  596,  699,  597,   86,   86,  694,  704,  683,  702,
-      683,  705,   86,  681,   86,  683,   86,  712,  594,  706,
-      594,   86,   86,  595,  710,  596,   86,  707,   86,  708,
-       86,   86,   86,  711,   86,   86,  709,  713,   86,  715,
-      718,   86,   86,   86,   86,   86,  714,   86,   86,   86,
-      717,  722,  726,   86,  719,  723,  727,  720,   86,   86,
-      721,   86,  725,  729,   86,  875,  875,  728,  724,  745,
-      730,  748,   86,  747,  731,  680,  680,  680,  680,  680,
-      680,  593,  593,  593,  593,  593,  593,   86,   86,   86,
-
-       86,  594,  750,  751,  595,  596,   86,  746,   86,  752,
-       86,   86,  755,  759,  754,   86,  753,  681,  757,  756,
-      762,   86,  594,  684,  594,   86,   86,  595,  760,  596,
-      761,   86,  758,   86,  763,   86,   86,   86,   86,  764,
-       86,   86,   86,  765,   86,   86,  766,  769,   86,   86,
-      767,   86,   86,   86,  768,   86,   86,  774,  790,   86,
-      775,   86,  771,  770,   86,  792,  772,  791,   86,  773,
-      680,  680,  680,  680,  680,  680,  788,   86,  789,   86,
-      796,  794,  793,  798,   86,   86,   86,  799,  800,   86,
-       86,   86,  797,  801,  795,   86,   86,   86,  802,  803,
-
-       86,   86,  738,   86,  804,   86,  823,   86,   86,   86,
-       86,  825,  826,  805,  806,  828,   86,   86,   86,  822,
-      829,  821,   86,   86,  820,  827,  831,  824,   86,   86,
-       86,  832,   86,   86,  834,   86,  846,   86,  830,  833,
-       86,  847,  845,  844,   86,  835,   86,  849,   86,   86,
-       86,  851,  852,   86,   86,  848,   86,  859,   86,  853,
-       86,   86,  854,  850,   86,  857,  858,  861,  860,   86,
-       86,   86,  862,  863,   86,   86,   86,  866,   86,  868,
-      864,   86,   86,   86,   86,  867,  865,  875,   86,  875,
-      855,  871,   86,   86,  874,   86,   86,   86,  875,  875,
-
-      869,  843,  870,  875,  842,  872,  873,   68,   68,   68,
-       68,   68,   68,   68,   68,   68,   68,   68,   68,   68,
-       74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
-       74,   74,   74,   77,   77,   77,   77,   77,   77,   77,
-       77,   77,   77,   77,   77,   77,   85,  875,  840,   85,
-      875,   85,   85,   85,   85,   85,  139,  839,  875,  838,
-      139,  139,  139,  139,  139,  139,  197,  197,  197,  197,
-      197,  197,  197,  197,  197,  197,  197,  197,  197,  202,
-      875,  837,  202,   86,  202,  202,  202,  202,  202,  206,
-       86,  206,  206,   86,  206,  206,  206,  206,  206,  206,
-
-      875,  206,  214,  819,  875,  214,  214,  214,  214,  214,
-      214,  214,  214,  818,  214,  237,  237,  237,  237,  237,
-      237,  237,  237,  237,  237,  237,  237,  237,  251,  251,
-      816,  251,  875,  814,  875,  251,  267,  812,  875,  267,
-      810,  267,  267,  267,  267,  267,  271,  808,  271,   86,
-       86,   86,  271,  273,   86,  273,   86,   86,   86,  273,
-      344,   86,  344,   86,   86,   86,  344,  346,   86,  346,
-      875,  787,  785,  346,  350,  875,  350,  875,  782,  780,
-      350,  352,  778,  352,   86,   86,   86,  352,  354,   86,
-      354,   86,   86,   86,  354,  361,   86,  361,  744,  741,
-
-      740,  361,  363,  738,  363,  203,  734,  733,  363,  237,
-      237,  237,  237,  237,  237,  237,  237,  237,  237,  237,
-      237,  237,  376,  664,  376,  378,  378,   86,  378,  378,
-      378,   86,  378,  251,  251,   86,  251,  388,   86,  388,
-       86,   86,   86,  388,  390,   86,  390,   86,   86,   86,
-      390,  392,   86,  392,   86,   86,   86,  392,  271,  691,
-      271,  394,  690,  394,  688,  686,  684,  394,  273,  591,
-      273,   85,  679,  678,   85,  676,   85,   85,   85,   85,
-       85,  197,  197,  197,  197,  197,  197,  197,  197,  197,
-      197,  197,  197,  197,  462,  462,  462,  462,  462,  462,
-
-      462,  462,  462,  462,  462,  462,  462,  463,  674,  463,
-      672,  670,  668,  463,  465,  666,  465,  664,   86,   86,
-      465,  467,   86,  467,   86,   86,   86,  467,  344,   86,
-      344,  469,   86,  469,   86,  610,  608,  469,  346,  606,
-      346,  472,  604,  472,  602,  600,  496,  472,  350,  598,
-      350,  474,  598,  474,  587,  586,  584,  474,  352,  477,
-      352,  476,  477,  476,  582,  580,  578,  476,  354,  576,
-      354,  478,  574,  478,  572,   86,   86,  478,  361,   86,
-      361,  480,   86,  480,   86,   86,   86,  480,  363,   86,
-      363,  485,  508,  485,  506,  485,  504,  485,  376,  502,
-
-      376,  500,  376,  498,  376,  378,  378,  484,  378,  378,
-      378,  481,  378,  497,  479,  497,  357,  357,  477,  497,
-      499,  475,  499,  473,  470,  468,  499,  501,  466,  501,
-      464,   86,   86,  501,  388,   86,  388,  503,  396,  503,
-      395,  393,  391,  503,  390,  389,  390,  505,  268,  505,
-      263,  262,  385,  505,  392,  385,  392,  507,  250,  507,
-      375,  375,  238,  507,  394,  370,  394,   85,  364,  362,
-       85,  360,   85,   85,   85,   85,   85,  462,  462,  462,
-      462,  462,  462,  462,  462,  462,  462,  462,  462,  462,
-      571,  356,  571,  355,  353,  351,  571,  463,  347,  463,
-
-      573,  345,  573,  203,  199,   86,  573,  465,  275,  465,
-      575,  274,  575,  272,  268,  263,  575,  467,  266,  467,
-      577,  263,  577,  261,  260,  259,  577,  469,  238,  469,
-      579,  230,  579,   84,   84,   86,  579,  472,  203,  472,
-      581,  201,  581,   84,  121,  116,  581,  474,   86,  474,
-      476,  875,  476,   69,   69,  875,  476,  583,  875,  583,
-      875,  875,  875,  583,  478,  875,  478,  585,  875,  585,
-      875,  875,  875,  585,  480,  875,  480,  485,  875,  485,
-      875,  485,  875,  485,  378,  875,  378,  875,  875,  875,
-      378,  599,  875,  599,  875,  875,  875,  599,  497,  875,
-
-      497,  601,  875,  601,  875,  875,  875,  601,  499,  875,
-      499,  603,  875,  603,  875,  875,  875,  603,  501,  875,
-      501,  605,  875,  605,  875,  875,  875,  605,  503,  875,
-      503,  607,  875,  607,  875,  875,  875,  607,  505,  875,
-      505,  609,  875,  609,  875,  875,  875,  609,  507,  875,
-      507,   85,  875,  875,   85,  875,   85,   85,   85,   85,
-       85,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  663,  665,  875,  665,  875,  875,  875,
-      665,  571,  875,  571,  667,  875,  667,  875,  875,  875,
-      667,  573,  875,  573,  669,  875,  669,  875,  875,  875,
-
-      669,  575,  875,  575,  671,  875,  671,  875,  875,  875,
-      671,  577,  875,  577,  673,  875,  673,  875,  875,  875,
-      673,  579,  875,  579,  675,  875,  675,  875,  875,  875,
-      675,  581,  875,  581,  677,  875,  677,  875,  875,  875,
-      677,  583,  875,  583,   85,  875,   85,  875,  875,  875,
-       85,  585,  875,  585,  485,  875,  485,  875,  875,  875,
-      485,  685,  875,  685,  875,  875,  875,  685,  599,  875,
-      599,  687,  875,  687,  875,  875,  875,  687,  601,  875,
-      601,  689,  875,  689,  875,  875,  875,  689,  603,  875,
-      603,  139,  875,  139,  875,  875,  875,  139,  605,  875,
-
-      605,  692,  875,  692,  607,  875,  607,   85,  875,  875,
-       85,  875,   85,   85,   85,   85,   85,  609,  875,  609,
-      663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
-      663,  663,  663,  732,  875,  732,  875,  875,  875,  732,
-      665,  875,  665,  202,  875,  202,  875,  875,  875,  202,
-      667,  875,  667,  735,  875,  735,  669,  875,  669,  202,
-      875,  875,  202,  875,  202,  202,  202,  202,  202,  671,
-      875,  671,  736,  875,  736,  673,  875,  673,  675,  875,
-      675,  737,  875,  737,  677,  875,  677,   85,  875,   85,
-      739,  875,  739,  875,  875,  875,  739,  685,  875,  685,
-
-      267,  875,  267,  875,  875,  875,  267,  687,  875,  687,
-      742,  875,  742,  689,  875,  689,  139,  875,  139,  743,
-      875,  743,  875,  875,  875,  743,   85,  875,  875,   85,
-      875,   85,   85,   85,   85,   85,  776,  875,  776,  732,
-      875,  732,  202,  875,  202,  777,  875,  777,  875,  875,
-      875,  777,  779,  875,  779,  875,  875,  875,  779,  781,
-      875,  781,  875,  875,  875,  781,  783,  875,  783,  784,
-      875,  784,  875,  875,  875,  784,  786,  875,  786,  875,
-      875,  875,  786,  807,  875,  807,  875,  875,  875,  807,
-      809,  875,  809,  875,  875,  875,  809,  811,  875,  811,
-
-      875,  875,  875,  811,  813,  875,  813,  875,  875,  875,
-      813,  815,  875,  815,  875,  875,  875,  815,  817,  875,
-      817,  875,  875,  875,  817,  609,  875,  609,  875,  875,
-      875,  609,  836,  875,  836,  875,  875,  875,  836,  671,
-      875,  671,  875,  875,  875,  671,  675,  875,  675,  875,
-      875,  875,  675,   85,  875,   85,  875,  875,  875,   85,
-      841,  875,  841,  875,  875,  875,  841,  139,  875,  139,
-      875,  875,  875,  139,  202,  875,  202,  875,  875,  875,
-      202,   11,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875
+       71,   71,   71,   71,   71,   71,   71,   71,   72,   72,
+       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
+       72,   72,   72,   71,   73,   71,   71,   72,   74,   72,
+       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
+       72,   72,   72,   72,   72,   72,   72,   72,   72,   72,
+       72,   72,   72,   71,   71,   71,   71,   76,   76,   79,
+       79,  123,  124,   90,  141,   79,   79,   87,   76,   76,
+       80,   81,   82,   82,   82,   80,   82,   81,   83,   83,
+
+       83,   82,   91,   93,  142,  146,   87,   98,   95,   99,
+       99,   99,   99,   99,   99,  252,  887,   94,  100,   85,
+       96,   97,   85,  101,  177,  118,   77,   77,   77,   77,
+      143,  147,   87,  102,  103,  144,  104,  104,  104,  104,
+      105,  105,  119,   87,  120,  121,  148,   87,  149,  254,
+      260,   87,  161,  106,  427,  194,  107,   87,   87,  150,
+      151,  152,  108,  109,  153,  154,  183,  155,  110,   87,
+      156,  157,   87,   87,  106,   87,  145,  162,  158,  159,
+      111,  160,   87,  195,  163,   87,   87,  180,  108,  206,
+      164,  109,  103,  181,  112,  112,  112,  112,  112,  112,
+
+       87,  169,  305,  170,  182,   87,   87,   87,   87,  165,
+       87,  106,  171,  166,  113,  207,  178,   87,  167,  188,
+      114,  283,  168,  179,  230,   87,  115,  189,  193,  184,
+      185,  143,  106,  196,  190,  263,  144,  264,  116,  186,
+       87,  298,  187,  200,  201,  172,  114,  125,  200,  191,
+      231,  126,  127,  173,  128,  174,  129,  130,  175,  131,
+      250,  132,  176,  258,  202,  202,  202,  202,  202,  202,
+      133,  134,  135,  263,   87,  264,   87,  145,  197,   81,
+       82,   82,   82,  197,  251,  282,  198,  259,   87,   87,
+      136,  192,   87,  137,   80,   81,   82,   82,   82,   80,
+
+       82,   81,   82,   82,   82,   82,   82,   81,   83,   83,
+       83,   82,  263,  307,  264,  242,  242,  242,  242,  248,
+      138,  139,  209,  210,   87,  249,  256,  209,   87,  211,
+      249,  263,  257,  264,  211,   99,   99,   99,   99,   99,
+       99,  265,  887,  212,  212,  212,  212,  243,  248,  310,
+      887,  249,  265,  263,  211,  264,  249,  103,  257,  105,
+      105,  105,  105,  105,  105,   87,  263,  241,  264,  213,
+      887,  263,  211,  264,   87,  257,  106,  211,  211,  887,
+      271,  211,  211,  280,  255,  266,  263,   87,  264,  211,
+      404,  244,  211,  256,  211,  214,  211,  106,  215,  217,
+
+      263,  257,  264,  218,  219,  281,  272,  887,  220,  221,
+      245,  222,  245,  223,   87,  246,  246,  246,  246,  246,
+      246,   87,  224,  225,  226,  263,  267,  264,  263,  143,
+      264,   87,  284,   87,  144,   87,  278,   87,   87,   87,
+       87,   87,  227,  279,  300,  228,   87,  247,   87,  286,
+      306,  303,   87,  285,   87,  299,   87,   87,   87,  301,
+      302,  323,  308,  311,  304,   87,   87,  314,  309,   87,
+      313,  315,   87,  229,  233,  233,  233,  233,  233,  233,
+       87,  312,   87,  316,  318,   87,  317,   87,   87,   87,
+      234,  235,   87,  236,  237,  627,  324,  320,  325,  360,
+
+      329,  361,  319,  328,  321,  322,  238,  143,  326,  327,
+       87,  234,  235,  234,   87,  331,  236,  330,  237,  287,
+      288,  289,   87,  290,  291,   87,   87,  292,   87,  293,
+      332,  346,   87,  335,  294,  295,  296,   87,  297,  333,
+      709,   87,  334,   87,  337,  341,  360,  342,  361,  360,
+       87,  361,  378,  338,  339,  336,  343,  347,  360,  360,
+      361,  361,  340,  197,   81,   82,   82,   82,  197,  200,
+      201,  198,  209,  210,  200,  200,  201,  209,  378,   87,
+      200,  344,  201,   87,  362,  360,  344,  361,  345,  434,
+      202,  202,  202,  202,  202,  202,  202,  202,  202,  202,
+
+      202,  202,  202,  202,  202,  202,  202,  202,  352,  352,
+      352,  352,  361,  361,  360,  363,  361,  360,  360,  361,
+      361,  369,  887,  369,  143,  360,  360,  361,  361,  370,
+       87,  370,  388,   87,  371,  371,  371,  371,  371,  371,
+      353,  373,  390,  401,  369,  373,  369,   87,   87,  234,
+      235,  402,  236,  237,   87,  263,  375,  264,  388,  263,
+       87,  264,  373,  416,  373,  403,  372,   87,  391,  373,
+      234,  235,  234,   87,  407,  236,   87,  237,  105,  105,
+      105,  105,  105,  105,  246,  246,  246,  246,  246,  246,
+      405,  245,   87,  245,  414,  106,  246,  246,  246,  246,
+
+      246,  246,  105,  105,  105,  105,  105,  105,   87,   87,
+      255,   87,  409,  406,  408,   87,  106,  376,  376,  376,
+      376,  376,  376,  381,  421,   87,  112,  112,  112,  112,
+      112,  112,  887,  234,  255,   87,  236,  237,  413,   87,
+       87,  417,  418,   87,  419,  383,   87,  384,   87,  377,
+       87,  385,  420,  425,  234,   87,  234,  386,  260,  236,
+       87,  237,  422,   87,  423,  410,  415,   87,   87,  387,
+       87,  411,  412,  384,   87,  428,  426,  385,  424,  432,
+       87,  429,   87,   87,   87,  433,  438,   87,   87,  430,
+      431,   87,  436,  437,   87,   87,  441,  439,   87,  440,
+
+      442,  435,   87,  443,   87,   87,   87,   87,   87,   87,
+       87,   87,   87,  445,   87,  447,  448,   87,   87,   87,
+      444,  449,  446,  451,   87,   87,  450,  456,   87,  455,
+      452,  454,  453,   87,   87,   87,  457,  462,  461,   87,
+      458,  459,  460,  465,  466,   87,  201,  464,  344,  201,
+      887,  463,  199,  344,  500,  345,  211,  211,  211,  211,
+      467,  352,  352,  352,  352,  360,  360,  361,  361,  371,
+      371,  371,  371,  371,  371,  370,  492,  370,  501,   87,
+      371,  371,  371,  371,  371,  371,  493,   87,  477,  488,
+      488,  488,  488,  488,  488,  233,  233,  233,  233,  233,
+
+      233,   87,  492,  516,  496,  234,  492,   87,  236,  237,
+      242,  242,  242,  242,  105,  105,  494,  495,  515,  381,
+      518,  489,  495,  496,   87,   87,  234,  374,  234,   87,
+      496,  236,  492,  237,  376,  376,  376,  376,  376,  376,
+      887,  383,  375,  384,  517,   87,  522,  385,  545,  496,
+      497,   87,  497,  386,  519,  498,  498,  498,  498,  498,
+      498,   87,  383,   87,  384,  387,  377,   87,  385,  384,
+       87,   87,  520,  385,  502,   87,  521,   87,   87,  523,
+       87,   87,   87,   87,  524,  526,  387,  499,  532,   87,
+      384,  525,   87,  527,  385,   87,  531,  528,  529,  530,
+
+       87,  535,   87,  536,  533,   87,   87,  539,   87,   87,
+       87,  534,   87,  537,   87,   87,   87,  541,  546,  538,
+      540,   87,   87,  544,   87,  548,   87,   87,   87,  542,
+      547,  543,   87,   87,  550,   87,  549,  556,   87,  552,
+       87,   87,  554,   87,  551,   87,   87,  559,  553,   87,
+      557,   87,  555,   87,   87,   87,  492,   87,  558,  565,
+      564,  560,  566,  561,  567,  562,   87,   87,  563,   87,
+       87,  201,  573,  568,   87,  571,  570,  577,  569,  599,
+      574,  492,  492,  576,   87,  572,  211,  211,  211,  211,
+      718,  493,  575,  488,  488,  488,  488,  488,  488,  376,
+
+      376,  376,  376,  376,  376,  599,  623,  492,  492,  234,
+       87,   87,  236,  237,  595,   87,  595,   87,  598,  596,
+      596,  596,  596,  596,  596,  489,  620,  618,  619,   87,
+      234,  490,  234,   87,  492,  236,   87,  237,  498,  498,
+      498,  498,  498,  498,   87,   87,  622,  626,   87,  621,
+       87,  597,  600,  600,  600,  600,  600,  600,  624,   87,
+       87,   87,   87,  629,  625,  631,   87,  633,  601,  632,
+      628,  602,  603,  497,  635,  497,   87,  636,  498,  498,
+      498,  498,  498,  498,  604,  630,   87,  634,   87,  601,
+       87,  601,   87,   87,  602,  637,  603,  642,  641,   87,
+
+       87,  640,   87,   87,   87,   87,   87,  639,  643,   87,
+      638,  647,   87,   87,   87,   87,   87,  644,  648,  645,
+       87,  646,   87,  654,   87,  650,   87,  653,   87,  649,
+      651,  652,   87,  655,   87,   87,   87,   87,   87,  657,
+      659,  664,  656,  661,  660,  658,   87,   87,  666,  663,
+       87,   87,  688,   87,  688,  665,   87,  662,  488,  488,
+      488,  488,  488,  488,  668,  702,  703,  667,  596,  596,
+      596,  596,  596,  596,  595,  688,  595,  688,   87,  596,
+      596,  596,  596,  596,  596,  689,   87,  721,   87,  689,
+      594,  686,  686,  686,  686,  686,  686,  600,  600,  600,
+
+      600,  600,  600,  704,   87,   87,  689,  601,  689,  699,
+      602,  603,  701,  689,   87,   87,   87,   87,   87,   87,
+       87,   87,  700,  687,  706,   87,  707,   87,  601,  604,
+      601,   87,  708,  602,  710,  603,   87,  705,  711,  716,
+      712,  713,  715,   87,  714,   87,   87,   87,  717,   87,
+       87,   87,   87,   87,   87,   87,   87,   87,  719,  724,
+       87,  727,  732,   87,  722,  720,  731,   87,   87,  723,
+       87,  736,  725,  726,  728,   87,  733,  730,  734,  735,
+      729,  686,  686,  686,  686,  686,  686,  600,  600,  600,
+      600,  600,  600,   87,   87,   87,  750,  601,   87,  754,
+
+      602,  603,   87,  751,   87,  753,   87,  756,   87,  757,
+       87,   87,   87,  687,   87,  762,  759,  764,  601,  690,
+      601,  752,  755,  602,  760,  603,  758,   87,   87,   87,
+      767,  765,   87,   87,   87,  763,  761,  768,  766,   87,
+      770,   87,   87,   87,   87,   87,  769,   87,   87,  771,
+       87,   87,  774,   87,  772,   87,   87,   87,   87,  779,
+       87,  795,  780,  773,   87,   87,   87,  775,  776,  777,
+      797,  778,  686,  686,  686,  686,  686,  686,  793,   87,
+      796,  794,   87,  800,   87,  801,  803,   87,   87,  798,
+      804,  805,   87,   87,   87,   87,  799,  802,  807,  806,
+
+       87,   87,   87,  808,  743,   87,   87,   87,  809,  828,
+       87,   87,   87,   87,  830,  831,   87,  810,  833,   87,
+       87,   87,  834,   87,  811,  827,  826,   87,   87,  825,
+      836,  837,  829,   87,  832,   87,   87,  839,   87,  840,
+       87,   87,  835,   87,  838,  850,   87,  887,   87,  851,
+      852,  855,   87,  856,  849,  857,   87,   87,  853,  858,
+       87,   87,   87,   87,  854,   87,  859,  864,  865,  860,
+      863,   87,   87,  866,   87,  868,  867,  869,   87,   87,
+       87,  870,   87,   87,   87,  873,   87,  875,   87,  876,
+       87,   87,   87,  874,   87,  872,   87,   87,   87,  871,
+
+       87,  880,   87,  887,  862,  887,  879,  881,  887,  887,
+      877,  878,  886,  887,  861,  884,   87,   87,  882,  883,
+       87,   87,  885,   69,   69,   69,   69,   69,   69,   69,
+       69,   69,   69,   69,   69,   69,   75,   75,   75,   75,
+       75,   75,   75,   75,   75,   75,   75,   75,   75,   78,
+       78,   78,   78,   78,   78,   78,   78,   78,   78,   78,
+       78,   78,   86,   87,  887,   86,  887,   86,   86,   86,
+       86,   86,  140,  848,  887,  847,  140,  140,  140,  140,
+      140,  140,  199,  199,  199,  199,  199,  199,  199,  199,
+      199,  199,  199,  199,  199,  204,  887,  845,  204,  887,
+
+      204,  204,  204,  204,  204,  208,  844,  208,  208,  887,
+      208,  208,  208,  208,  208,  208,  843,  208,  216,  887,
+      842,  216,  216,  216,  216,  216,  216,  216,  216,   87,
+      216,  239,  239,  239,  239,  239,  239,  239,  239,  239,
+      239,  239,  239,  239,  253,  253,   87,  253,   87,  887,
+      824,  253,  269,  887,  823,  269,  821,  269,  269,  269,
+      269,  269,  273,  887,  273,  819,  887,  817,  273,  275,
+      887,  275,  815,  813,   87,  275,  348,   87,  348,   87,
+       87,   87,  348,  350,   87,  350,   87,   87,   87,  350,
+      354,   87,  354,   87,   87,  887,  354,  356,  792,  356,
+
+      790,  887,  887,  356,  358,  787,  358,  785,  783,   87,
+      358,  365,   87,  365,   87,   87,   87,  365,  367,   87,
+      367,   87,  749,  746,  367,  239,  239,  239,  239,  239,
+      239,  239,  239,  239,  239,  239,  239,  239,  380,  745,
+      380,  382,  382,  743,  382,  382,  382,  205,  382,  253,
+      253,  739,  253,  392,  738,  392,  670,   87,   87,  392,
+      394,   87,  394,   87,   87,   87,  394,  396,   87,  396,
+       87,   87,   87,  396,  273,   87,  273,  398,   87,  398,
+       87,   87,   87,  398,  275,  697,  275,   86,  696,  694,
+       86,  692,   86,   86,   86,   86,   86,  199,  199,  199,
+
+      199,  199,  199,  199,  199,  199,  199,  199,  199,  199,
+      468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
+      468,  468,  468,  469,  690,  469,  598,  685,  684,  469,
+      471,  682,  471,  680,  678,  676,  471,  473,  674,  473,
+      672,  670,   87,  473,  348,   87,  348,  475,   87,  475,
+       87,   87,   87,  475,  350,   87,  350,  478,   87,  478,
+       87,   87,   87,  478,  354,  617,  354,  480,  615,  480,
+      613,  611,  609,  480,  356,  607,  356,  482,  502,  482,
+      605,  605,  594,  482,  358,  593,  358,  484,  591,  484,
+      483,  483,  589,  484,  365,  587,  365,  486,  585,  486,
+
+      583,  581,  579,  486,  367,   87,  367,  491,   87,  491,
+       87,  491,   87,  491,  380,   87,  380,   87,  380,   87,
+      380,  382,  382,   87,  382,  382,  382,  514,  382,  503,
+      512,  503,  510,  508,  506,  503,  505,  504,  505,  490,
+      487,  485,  505,  507,  361,  507,  361,  483,  481,  507,
+      392,  479,  392,  509,  476,  509,  474,  472,  470,  509,
+      394,   87,  394,  511,   87,  511,   87,  400,  399,  511,
+      396,  397,  396,  513,  395,  513,  393,  270,  265,  513,
+      398,  264,  398,   86,  389,  389,   86,  252,   86,   86,
+       86,   86,   86,  468,  468,  468,  468,  468,  468,  468,
+
+      468,  468,  468,  468,  468,  468,  578,  379,  578,  379,
+      240,  374,  578,  469,  368,  469,  580,  366,  580,  364,
+      360,  359,  580,  471,  357,  471,  582,  355,  582,  351,
+      349,  205,  582,  473,  201,  473,  584,   87,  584,  277,
+      276,  274,  584,  475,  270,  475,  586,  265,  586,  268,
+      265,  263,  586,  478,  262,  478,  588,  261,  588,  240,
+      232,   85,  588,  480,   85,  480,  482,   87,  482,  205,
+      203,   85,  482,  590,  122,  590,  117,   87,  887,  590,
+      484,   70,  484,  592,   70,  592,  887,  887,  887,  592,
+      486,  887,  486,  491,  887,  491,  887,  491,  887,  491,
+
+      382,  887,  382,  887,  887,  887,  382,  606,  887,  606,
+      887,  887,  887,  606,  503,  887,  503,  608,  887,  608,
+      887,  887,  887,  608,  505,  887,  505,  610,  887,  610,
+      887,  887,  887,  610,  507,  887,  507,  612,  887,  612,
+      887,  887,  887,  612,  509,  887,  509,  614,  887,  614,
+      887,  887,  887,  614,  511,  887,  511,  616,  887,  616,
+      887,  887,  887,  616,  513,  887,  513,   86,  887,  887,
+       86,  887,   86,   86,   86,   86,   86,  669,  669,  669,
+      669,  669,  669,  669,  669,  669,  669,  669,  669,  669,
+      671,  887,  671,  887,  887,  887,  671,  578,  887,  578,
+
+      673,  887,  673,  887,  887,  887,  673,  580,  887,  580,
+      675,  887,  675,  887,  887,  887,  675,  582,  887,  582,
+      677,  887,  677,  887,  887,  887,  677,  584,  887,  584,
+      679,  887,  679,  887,  887,  887,  679,  586,  887,  586,
+      681,  887,  681,  887,  887,  887,  681,  588,  887,  588,
+      683,  887,  683,  887,  887,  887,  683,  590,  887,  590,
+       86,  887,   86,  887,  887,  887,   86,  592,  887,  592,
+      491,  887,  491,  887,  887,  887,  491,  691,  887,  691,
+      887,  887,  887,  691,  606,  887,  606,  693,  887,  693,
+      887,  887,  887,  693,  608,  887,  608,  695,  887,  695,
+
+      887,  887,  887,  695,  610,  887,  610,  140,  887,  140,
+      887,  887,  887,  140,  612,  887,  612,  698,  887,  698,
+      614,  887,  614,   86,  887,  887,   86,  887,   86,   86,
+       86,   86,   86,  616,  887,  616,  669,  669,  669,  669,
+      669,  669,  669,  669,  669,  669,  669,  669,  669,  737,
+      887,  737,  887,  887,  887,  737,  671,  887,  671,  204,
+      887,  204,  887,  887,  887,  204,  673,  887,  673,  740,
+      887,  740,  675,  887,  675,  204,  887,  887,  204,  887,
+      204,  204,  204,  204,  204,  677,  887,  677,  741,  887,
+      741,  679,  887,  679,  681,  887,  681,  742,  887,  742,
+
+      683,  887,  683,   86,  887,   86,  744,  887,  744,  887,
+      887,  887,  744,  691,  887,  691,  269,  887,  269,  887,
+      887,  887,  269,  693,  887,  693,  747,  887,  747,  695,
+      887,  695,  140,  887,  140,  748,  887,  748,  887,  887,
+      887,  748,   86,  887,  887,   86,  887,   86,   86,   86,
+       86,   86,  781,  887,  781,  737,  887,  737,  204,  887,
+      204,  782,  887,  782,  887,  887,  887,  782,  784,  887,
+      784,  887,  887,  887,  784,  786,  887,  786,  887,  887,
+      887,  786,  788,  887,  788,  789,  887,  789,  887,  887,
+      887,  789,  791,  887,  791,  887,  887,  887,  791,  812,
+
+      887,  812,  887,  887,  887,  812,  814,  887,  814,  887,
+      887,  887,  814,  816,  887,  816,  887,  887,  887,  816,
+      818,  887,  818,  887,  887,  887,  818,  820,  887,  820,
+      887,  887,  887,  820,  822,  887,  822,  887,  887,  887,
+      822,  616,  887,  616,  887,  887,  887,  616,  841,  887,
+      841,  887,  887,  887,  841,  677,  887,  677,  887,  887,
+      887,  677,  681,  887,  681,  887,  887,  887,  681,   86,
+      887,   86,  887,  887,  887,   86,  846,  887,  846,  887,
+      887,  887,  846,  140,  887,  140,  887,  887,  887,  140,
+      204,  887,  204,  887,  887,  887,  204,   11,  887,  887,
+
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887
     } ;
 
-static yyconst flex_int16_t yy_chk[2867] =
+static yyconst flex_int16_t yy_chk[2883] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1114,304 +1121,306 @@
         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,  874,    7,    8,
+       10,   37,   37,   20,   39,    9,   10,  886,    7,    8,
        13,   13,   13,   13,   13,   13,   15,   15,   15,   15,
 
        15,   15,   20,   25,   39,   42,   53,   28,   27,   28,
-       28,   28,   28,   28,   28,  108,  114,   25,   29,   25,
+       28,   28,   28,   28,   28,  109,  115,   25,   29,   25,
        27,   27,   27,   29,   53,   35,    7,    8,    9,   10,
        40,   42,   48,   29,   30,   40,   30,   30,   30,   30,
-       30,   30,   35,   61,   35,   35,   44,  869,   44,  108,
-      114,  868,   48,   30,   63,   61,   30,   56,   47,   45,
-       45,   45,   30,   30,   45,   45,   56,   45,   30,   55,
+       30,   30,   35,   62,   35,   35,   44,  302,   44,  109,
+      115,  885,   48,   30,  302,   62,   30,   57,   47,   45,
+       45,   45,   30,   30,   45,   45,   57,   45,   30,   55,
        45,   45,   49,   40,   30,   45,   40,   49,   45,   47,
-       30,   47,   72,  125,   49,  125,   51,   55,   30,   86,
+       30,   47,   56,   64,   49,  164,   51,   55,   30,   73,
        49,   30,   31,   55,   31,   31,   31,   31,   31,   31,
 
-       50,   51,  866,   51,   63,  153,   54,   58,   72,   50,
-       60,   31,   51,   50,   31,   86,   54,   57,   50,   58,
-       31,  153,   50,   54,  141,  156,   31,   58,   60,   57,
-       57,   59,   31,  126,   58,  126,   59,  156,   31,   57,
-       52,  865,   57,   67,   67,   52,   31,   38,   67,   59,
-      141,   38,   38,   52,   38,   52,   38,   38,   52,   38,
-      107,   38,   52,  113,   67,   67,   67,   67,   67,   67,
-       38,   38,   38,  128,   59,  128,  152,   59,   66,   66,
-       66,   66,   66,   66,  107,  152,   66,  113,  863,  862,
-       38,   59,  165,   38,   79,   79,   79,   79,   79,   79,
-
-       81,   81,   81,   81,   81,   81,   82,   82,   82,   82,
-       82,   82,  131,  165,  131,  103,  103,  103,  103,  106,
-       38,   38,   76,   76,  856,  106,  112,   76,  168,   76,
-      110,  133,  112,  133,   76,  102,  102,  102,  102,  102,
-      102,  130,  103,   76,   76,   76,   76,  103,  110,  168,
-      109,  106,  129,  130,   76,  130,  110,  104,  112,  104,
-      104,  104,  104,  104,  104,  149,  129,  102,  129,   76,
-      103,  136,   76,  136,  158,  115,  104,   76,   76,  109,
-      149,   76,   76,  155,  109,  132,  132,  149,  132,   76,
-      158,  104,   76,  115,   76,   76,   76,  104,   76,   84,
-
-      138,  115,  138,   84,   84,  155,  166,  109,   84,   84,
-      105,   84,  105,   84,  150,  105,  105,  105,  105,  105,
-      105,  151,   84,   84,   84,  134,  134,  134,  144,  166,
-      154,  157,  150,  144,  159,  167,  157,  157,  157,  151,
-      157,  157,   84,  161,  157,   84,  157,  105,  154,  160,
-      163,  157,  157,  157,  162,  157,  159,  855,  160,  162,
-      164,  169,  167,  170,  161,  161,  169,  163,  171,  172,
-      164,  144,  162,   84,   98,   98,   98,   98,   98,   98,
-      173,  174,  175,  171,  169,  170,  172,  179,  176,  185,
-       98,   98,  178,   98,   98,  180,  189,  182,  173,  187,
-
-      180,  174,  185,  186,  179,  188,   98,  178,  181,  175,
-      176,   98,   98,   98,  178,  182,   98,  183,   98,  181,
-      184,  191,  190,  186,  188,  184,  187,  528,  183,  181,
-      181,  192,  207,  207,  191,  190,  191,  207,  232,  189,
-      184,  203,  189,  190,  192,  183,  195,  195,  195,  195,
-      195,  195,  196,  196,  195,  528,  854,  196,  198,  198,
-      216,  232,  216,  198,  200,  200,  217,  203,  217,  200,
-      218,  200,  218,  196,  196,  196,  196,  196,  196,  198,
-      198,  198,  198,  198,  198,  200,  200,  200,  200,  200,
-      200,  210,  210,  210,  210,  219,  220,  221,  282,  221,
-
-      222,  222,  223,  222,  223,  224,  224,  224,  220,  219,
-      220,  219,  226,  227,  226,  227,  234,  235,  282,  233,
-      234,  233,  284,  210,  233,  233,  233,  233,  233,  233,
-      241,  239,  239,  277,  239,  239,  264,  234,  264,  234,
-      235,  265,  284,  265,  234,  242,  242,  242,  242,  242,
-      242,  277,  239,  239,  239,  246,  233,  239,  278,  239,
-      276,  280,  242,  279,  241,  243,  243,  243,  243,  243,
-      243,  254,  268,  276,  853,  281,  278,  242,  280,  279,
-      281,  246,  288,  242,  244,  244,  244,  244,  244,  244,
-      253,  253,  253,  253,  253,  253,  251,  254,  268,  287,
-
-      244,  283,  286,  244,  244,  245,  283,  245,  288,  295,
-      245,  245,  245,  245,  245,  245,  244,  287,  251,  849,
-      251,  244,  253,  244,  251,  286,  244,  295,  244,  289,
-      251,  258,  258,  258,  258,  258,  258,  285,  290,  292,
-      291,  294,  251,  293,  289,  291,  251,  297,  292,  301,
-      251,  299,  285,  303,  290,  290,  293,  298,  285,  285,
-      299,  302,  298,  258,  300,  297,  307,  304,  294,  301,
-      306,  300,  304,  305,  303,  303,  306,  308,  305,  302,
-      310,  309,  311,  312,  313,  307,  308,  309,  314,  313,
-      315,  311,  316,  314,  318,  315,  310,  317,  312,  320,
-
-      322,  321,  323,  324,  326,  325,  328,  318,  327,  329,
-      320,  316,  315,  322,  330,  317,  321,  327,  333,  331,
-      334,  326,  335,  337,  323,  325,  324,  333,  328,  336,
-      338,  337,  329,  339,  381,  338,  330,  331,  340,  340,
-      335,  341,  336,  340,  358,  340,  358,  341,  339,  348,
-      348,  348,  348,  349,  349,  349,  349,  359,  381,  359,
-      397,  846,  402,  334,  366,  366,  366,  366,  366,  366,
-      368,  397,  368,  402,  404,  368,  368,  368,  368,  368,
-      368,  348,  367,  367,  367,  367,  367,  367,  370,  370,
-      370,  370,  370,  370,  400,  398,  404,  435,  367,  376,
-
-      843,  367,  367,  371,  371,  371,  371,  371,  371,  376,
-      379,  398,  377,  400,  367,  378,  379,  435,  383,  367,
-      370,  367,  377,  412,  367,  376,  367,  372,  372,  372,
-      372,  372,  372,  399,  382,  371,  383,  378,  377,  378,
-      415,  412,  379,  378,  383,  380,  415,  380,  399,  378,
-      380,  380,  380,  380,  380,  380,  382,  401,  382,  372,
-      407,  378,  382,  403,  405,  378,  401,  408,  382,  378,
-      406,  411,  403,  405,  409,  410,  407,  416,  418,  414,
-      382,  413,  380,  406,  382,  417,  413,  409,  382,  408,
-      419,  410,  410,  411,  414,  421,  417,  418,  416,  423,
-
-      425,  414,  426,  427,  428,  419,  431,  429,  430,  421,
-      433,  423,  427,  429,  436,  431,  427,  437,  438,  439,
-      441,  425,  440,  430,  426,  433,  443,  428,  445,  441,
-      447,  446,  437,  448,  439,  449,  436,  450,  451,  455,
-      438,  452,  440,  443,  457,  633,  450,  460,  453,  458,
-      447,  445,  446,  448,  452,  453,  451,  449,  454,  456,
-      458,  457,  461,  633,  455,  454,  462,  456,  515,  460,
-      488,  461,  462,  471,  471,  471,  471,  456,  482,  482,
-      482,  482,  482,  482,  484,  484,  484,  484,  484,  484,
-      515,  513,  485,  487,  482,  489,  488,  482,  482,  486,
-
-      510,  486,  485,  487,  486,  486,  486,  486,  486,  486,
-      482,  513,  509,  510,  520,  482,  484,  482,  485,  487,
-      482,  489,  482,  491,  491,  491,  491,  491,  491,  509,
-      512,  514,  519,  516,  520,  519,  486,  492,  492,  492,
-      492,  492,  492,  517,  514,  512,  516,  521,  517,  525,
-      518,  522,  523,  492,  525,  842,  492,  492,  493,  841,
-      493,  518,  521,  493,  493,  493,  493,  493,  493,  492,
-      522,  524,  526,  523,  492,  527,  492,  529,  530,  492,
-      524,  492,  531,  526,  532,  533,  529,  536,  527,  535,
-      533,  538,  539,  532,  542,  535,  536,  540,  541,  531,
-
-      530,  544,  545,  542,  546,  547,  549,  554,  556,  539,
-      544,  561,  540,  541,  555,  552,  546,  538,  550,  545,
-      547,  549,  553,  550,  552,  556,  558,  555,  559,  554,
-      560,  553,  562,  561,  558,  563,  564,  560,  559,  565,
-      567,  563,  568,  613,  562,  564,  612,  617,  594,  565,
-      596,  698,  613,  612,  617,  568,  698,  567,  587,  587,
-      587,  587,  587,  587,  588,  588,  588,  588,  588,  588,
-      590,  594,  590,  596,  614,  590,  590,  590,  590,  590,
-      590,  593,  593,  593,  593,  593,  593,  614,  615,  616,
-      587,  589,  589,  589,  589,  589,  589,  595,  611,  622,
-
-      618,  595,  619,  611,  621,  615,  620,  589,  618,  620,
-      589,  589,  616,  593,  623,  624,  611,  621,  595,  619,
-      595,  622,  625,  589,  626,  595,  628,  629,  589,  623,
-      589,  627,  630,  589,  627,  589,  631,  624,  634,  625,
-      632,  635,  637,  628,  638,  644,  626,  630,  639,  632,
-      635,  645,  640,  650,  629,  647,  631,  696,  693,  651,
-      634,  640,  650,  659,  637,  644,  651,  638,  658,  662,
-      639,  661,  647,  659,  697,  840,  839,  658,  645,  693,
-      661,  697,  699,  696,  662,  680,  680,  680,  680,  680,
-      680,  684,  684,  684,  684,  684,  684,  694,  702,  705,
-
-      700,  680,  699,  700,  680,  680,  701,  694,  704,  701,
-      706,  708,  705,  709,  704,  707,  702,  680,  707,  706,
-      712,  711,  680,  684,  680,  710,  714,  680,  710,  680,
-      711,  713,  708,  718,  713,  715,  716,  717,  720,  714,
-      723,  709,  726,  715,  727,  712,  716,  720,  728,  730,
-      717,  731,  752,  751,  718,  753,  749,  730,  751,  754,
-      731,  750,  726,  723,  755,  753,  727,  752,  756,  728,
-      738,  738,  738,  738,  738,  738,  749,  757,  750,  758,
-      757,  755,  754,  759,  761,  763,  764,  761,  763,  767,
-      768,  773,  758,  764,  756,  765,  766,  788,  765,  766,
-
-      790,  791,  738,  792,  767,  793,  792,  797,  794,  795,
-      759,  794,  795,  768,  773,  798,  801,  799,  805,  791,
-      799,  790,  821,  802,  788,  797,  802,  793,  803,  806,
-      804,  803,  824,  823,  805,  822,  823,  825,  801,  804,
-      798,  824,  822,  821,  826,  806,  827,  826,  830,  833,
-      834,  830,  833,  835,  847,  825,  844,  847,  848,  834,
-      857,  845,  835,  827,  850,  844,  845,  850,  848,  851,
-      852,  858,  851,  852,  859,  860,  861,  859,  864,  861,
-      857,  867,  870,  871,  873,  860,  858,  838,  872,  837,
-      836,  870,  832,  831,  873,  829,  828,  820,  819,  818,
-
-      864,  817,  867,  816,  815,  871,  872,  876,  876,  876,
-      876,  876,  876,  876,  876,  876,  876,  876,  876,  876,
-      877,  877,  877,  877,  877,  877,  877,  877,  877,  877,
-      877,  877,  877,  878,  878,  878,  878,  878,  878,  878,
-      878,  878,  878,  878,  878,  878,  879,  814,  813,  879,
-      812,  879,  879,  879,  879,  879,  880,  811,  810,  809,
-      880,  880,  880,  880,  880,  880,  881,  881,  881,  881,
-      881,  881,  881,  881,  881,  881,  881,  881,  881,  882,
-      808,  807,  882,  800,  882,  882,  882,  882,  882,  883,
-      796,  883,  883,  789,  883,  883,  883,  883,  883,  883,
-
-      787,  883,  884,  786,  785,  884,  884,  884,  884,  884,
-      884,  884,  884,  784,  884,  885,  885,  885,  885,  885,
-      885,  885,  885,  885,  885,  885,  885,  885,  886,  886,
-      783,  886,  782,  781,  780,  886,  887,  779,  778,  887,
-      777,  887,  887,  887,  887,  887,  888,  776,  888,  775,
-      774,  772,  888,  889,  771,  889,  770,  769,  762,  889,
-      890,  760,  890,  748,  747,  746,  890,  891,  745,  891,
-      744,  743,  742,  891,  892,  741,  892,  740,  737,  736,
-      892,  893,  735,  893,  729,  725,  724,  893,  894,  722,
-      894,  721,  719,  703,  894,  895,  695,  895,  692,  687,
-
-      685,  895,  896,  681,  896,  671,  667,  665,  896,  897,
-      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
-      897,  897,  898,  663,  898,  899,  899,  660,  899,  899,
-      899,  657,  899,  900,  900,  656,  900,  901,  655,  901,
-      654,  653,  652,  901,  902,  649,  902,  648,  646,  643,
-      902,  903,  642,  903,  641,  636,  609,  903,  904,  605,
-      904,  905,  603,  905,  601,  599,  597,  905,  906,  591,
-      906,  907,  585,  583,  907,  581,  907,  907,  907,  907,
-      907,  908,  908,  908,  908,  908,  908,  908,  908,  908,
-      908,  908,  908,  908,  909,  909,  909,  909,  909,  909,
-
-      909,  909,  909,  909,  909,  909,  909,  910,  579,  910,
-      577,  575,  573,  910,  911,  571,  911,  570,  569,  566,
-      911,  912,  557,  912,  551,  548,  543,  912,  913,  537,
-      913,  914,  534,  914,  511,  507,  505,  914,  915,  503,
-      915,  916,  501,  916,  499,  497,  496,  916,  917,  495,
-      917,  918,  494,  918,  483,  480,  478,  918,  919,  477,
-      919,  920,  476,  920,  474,  472,  469,  920,  921,  467,
-      921,  922,  465,  922,  463,  459,  444,  922,  923,  442,
-      923,  924,  434,  924,  432,  424,  422,  924,  925,  420,
-      925,  926,  394,  926,  392,  926,  390,  926,  927,  388,
-
-      927,  387,  927,  386,  927,  928,  928,  373,  928,  928,
-      928,  363,  928,  929,  361,  929,  360,  356,  354,  929,
-      930,  352,  930,  350,  346,  344,  930,  931,  343,  931,
-      342,  332,  319,  931,  932,  296,  932,  933,  275,  933,
-      273,  271,  270,  933,  934,  269,  934,  935,  267,  935,
-      266,  261,  257,  935,  936,  256,  936,  937,  252,  937,
-      249,  248,  237,  937,  938,  236,  938,  939,  229,  228,
-      939,  225,  939,  939,  939,  939,  939,  940,  940,  940,
-      940,  940,  940,  940,  940,  940,  940,  940,  940,  940,
-      941,  215,  941,  213,  212,  211,  941,  942,  205,  942,
-
-      943,  204,  943,  202,  197,  177,  943,  944,  148,  944,
-      945,  146,  945,  145,  139,  137,  945,  946,  135,  946,
-      947,  127,  947,  124,  123,  119,  947,  948,  100,  948,
-      949,   97,  949,   94,   92,   85,  949,  950,   71,  950,
-      951,   69,  951,   65,   36,   33,  951,  952,   18,  952,
-      953,   11,  953,    4,    3,    0,  953,  954,    0,  954,
-        0,    0,    0,  954,  955,    0,  955,  956,    0,  956,
-        0,    0,    0,  956,  957,    0,  957,  958,    0,  958,
-        0,  958,    0,  958,  959,    0,  959,    0,    0,    0,
-      959,  960,    0,  960,    0,    0,    0,  960,  961,    0,
-
-      961,  962,    0,  962,    0,    0,    0,  962,  963,    0,
-      963,  964,    0,  964,    0,    0,    0,  964,  965,    0,
-      965,  966,    0,  966,    0,    0,    0,  966,  967,    0,
-      967,  968,    0,  968,    0,    0,    0,  968,  969,    0,
-      969,  970,    0,  970,    0,    0,    0,  970,  971,    0,
-      971,  972,    0,    0,  972,    0,  972,  972,  972,  972,
-      972,  973,  973,  973,  973,  973,  973,  973,  973,  973,
-      973,  973,  973,  973,  974,    0,  974,    0,    0,    0,
-      974,  975,    0,  975,  976,    0,  976,    0,    0,    0,
-      976,  977,    0,  977,  978,    0,  978,    0,    0,    0,
-
-      978,  979,    0,  979,  980,    0,  980,    0,    0,    0,
-      980,  981,    0,  981,  982,    0,  982,    0,    0,    0,
-      982,  983,    0,  983,  984,    0,  984,    0,    0,    0,
-      984,  985,    0,  985,  986,    0,  986,    0,    0,    0,
-      986,  987,    0,  987,  988,    0,  988,    0,    0,    0,
-      988,  989,    0,  989,  990,    0,  990,    0,    0,    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, 1000,    0, 1000, 1001,    0,    0,
-     1001,    0, 1001, 1001, 1001, 1001, 1001, 1002,    0, 1002,
-     1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003, 1003,
-     1003, 1003, 1003, 1004,    0, 1004,    0,    0,    0, 1004,
-     1005,    0, 1005, 1006,    0, 1006,    0,    0,    0, 1006,
-     1007,    0, 1007, 1008,    0, 1008, 1009,    0, 1009, 1010,
-        0,    0, 1010,    0, 1010, 1010, 1010, 1010, 1010, 1011,
-        0, 1011, 1012,    0, 1012, 1013,    0, 1013, 1014,    0,
-     1014, 1015,    0, 1015, 1016,    0, 1016, 1017,    0, 1017,
-     1018,    0, 1018,    0,    0,    0, 1018, 1019,    0, 1019,
-
-     1020,    0, 1020,    0,    0,    0, 1020, 1021,    0, 1021,
-     1022,    0, 1022, 1023,    0, 1023, 1024,    0, 1024, 1025,
-        0, 1025,    0,    0,    0, 1025, 1026,    0,    0, 1026,
-        0, 1026, 1026, 1026, 1026, 1026, 1027,    0, 1027, 1028,
-        0, 1028, 1029,    0, 1029, 1030,    0, 1030,    0,    0,
-        0, 1030, 1031,    0, 1031,    0,    0,    0, 1031, 1032,
-        0, 1032,    0,    0,    0, 1032, 1033,    0, 1033, 1034,
-        0, 1034,    0,    0,    0, 1034, 1035,    0, 1035,    0,
-        0,    0, 1035, 1036,    0, 1036,    0,    0,    0, 1036,
-     1037,    0, 1037,    0,    0,    0, 1037, 1038,    0, 1038,
-
-        0,    0,    0, 1038, 1039,    0, 1039,    0,    0,    0,
-     1039, 1040,    0, 1040,    0,    0,    0, 1040, 1041,    0,
-     1041,    0,    0,    0, 1041, 1042,    0, 1042,    0,    0,
-        0, 1042, 1043,    0, 1043,    0,    0,    0, 1043, 1044,
-        0, 1044,    0,    0,    0, 1044, 1045,    0, 1045,    0,
-        0,    0, 1045, 1046,    0, 1046,    0,    0,    0, 1046,
-     1047,    0, 1047,    0,    0,    0, 1047, 1048,    0, 1048,
-        0,    0,    0, 1048, 1049,    0, 1049,    0,    0,    0,
-     1049,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875,  875,  875,  875,  875,
-      875,  875,  875,  875,  875,  875
+       50,   51,  164,   51,   56,  154,   54,   59,  877,   50,
+       61,   31,   51,   50,   31,   73,   54,   58,   50,   59,
+       31,  154,   50,   54,   87,  159,   31,   59,   61,   58,
+       58,   60,   31,   64,   59,  126,   60,  126,   31,   58,
+       52,  159,   58,   68,   68,   52,   31,   38,   68,   60,
+       87,   38,   38,   52,   38,   52,   38,   38,   52,   38,
+      108,   38,   52,  114,   68,   68,   68,   68,   68,   68,
+       38,   38,   38,  127,   60,  127,  153,   60,   67,   67,
+       67,   67,   67,   67,  108,  153,   67,  114,  876,  873,
+       38,   60,  166,   38,   80,   80,   80,   80,   80,   80,
+
+       82,   82,   82,   82,   82,   82,   83,   83,   83,   83,
+       83,   83,  129,  166,  129,  104,  104,  104,  104,  107,
+       38,   38,   77,   77,  872,  107,  113,   77,  169,   77,
+      111,  132,  113,  132,   77,  103,  103,  103,  103,  103,
+      103,  131,  104,   77,   77,   77,   77,  104,  111,  169,
+      110,  107,  130,  131,   77,  131,  111,  105,  113,  105,
+      105,  105,  105,  105,  105,  151,  130,  103,  130,   77,
+      104,  134,   77,  134,  281,  116,  105,   77,   77,  110,
+      142,   77,   77,  151,  110,  133,  133,  152,  133,   77,
+      281,  105,   77,  116,   77,   77,   77,  105,   77,   85,
+
+      137,  116,  137,   85,   85,  152,  142,  110,   85,   85,
+      106,   85,  106,   85,  155,  106,  106,  106,  106,  106,
+      106,  150,   85,   85,   85,  135,  135,  135,  139,  145,
+      139,  156,  155,  160,  145,  161,  150,  157,  162,  167,
+      165,  168,   85,  150,  161,   85,  163,  106,  171,  157,
+      165,  163,  172,  156,  173,  160,  181,  176,  170,  162,
+      162,  181,  167,  170,  163,  174,  175,  172,  168,  182,
+      171,  173,  145,   85,   99,   99,   99,   99,   99,   99,
+      177,  170,  179,  174,  176,  184,  175,  183,  180,  185,
+       99,   99,  525,   99,   99,  525,  182,  179,  183,  218,
+
+      185,  218,  177,  184,  179,  180,   99,  191,  183,  183,
+      186,   99,   99,   99,  158,  186,   99,  185,   99,  158,
+      158,  158,  188,  158,  158,  190,  187,  158,  189,  158,
+      186,  205,  193,  189,  158,  158,  158,  627,  158,  187,
+      627,  192,  188,  194,  190,  193,  219,  193,  219,  220,
+      191,  220,  248,  191,  192,  189,  194,  205,  223,  225,
+      223,  225,  192,  197,  197,  197,  197,  197,  197,  198,
+      198,  197,  209,  209,  198,  200,  200,  209,  248,  870,
+      200,  202,  202,  308,  224,  224,  202,  224,  202,  308,
+      198,  198,  198,  198,  198,  198,  200,  200,  200,  200,
+
+      200,  200,  202,  202,  202,  202,  202,  202,  212,  212,
+      212,  212,  221,  222,  226,  226,  226,  228,  229,  228,
+      229,  234,  243,  237,  338,  222,  221,  222,  221,  235,
+      278,  235,  256,  279,  235,  235,  235,  235,  235,  235,
+      212,  236,  270,  278,  234,  236,  237,  280,  291,  241,
+      241,  279,  241,  241,  284,  266,  243,  266,  256,  267,
+      869,  267,  236,  291,  236,  280,  235,  338,  270,  236,
+      241,  241,  241,  282,  284,  241,  289,  241,  244,  244,
+      244,  244,  244,  244,  245,  245,  245,  245,  245,  245,
+      282,  247,  286,  247,  289,  244,  247,  247,  247,  247,
+
+      247,  247,  255,  255,  255,  255,  255,  255,  283,  285,
+      244,  295,  286,  283,  285,  288,  244,  246,  246,  246,
+      246,  246,  246,  253,  295,  292,  260,  260,  260,  260,
+      260,  260,  862,  246,  255,  296,  246,  246,  288,  293,
+      290,  292,  292,  294,  293,  253,  297,  253,  300,  246,
+      287,  253,  294,  300,  246,  303,  246,  253,  260,  246,
+      299,  246,  296,  304,  297,  287,  290,  301,  305,  253,
+      312,  287,  287,  253,  306,  303,  301,  253,  299,  306,
+      307,  304,  309,  310,  314,  307,  312,  311,  313,  305,
+      305,  315,  310,  311,  318,  316,  315,  313,  317,  314,
+
+      316,  309,  320,  317,  319,  322,  323,  324,  326,  327,
+      325,  328,  329,  318,  331,  320,  322,  332,  330,  333,
+      317,  323,  319,  325,  334,  335,  324,  330,  337,  329,
+      326,  328,  327,  339,  340,  341,  331,  337,  335,  342,
+      332,  333,  334,  341,  342,  343,  345,  340,  344,  344,
+      861,  339,  345,  344,  385,  344,  352,  352,  352,  352,
+      343,  353,  353,  353,  353,  362,  363,  362,  363,  370,
+      370,  370,  370,  370,  370,  372,  380,  372,  385,  860,
+      372,  372,  372,  372,  372,  372,  380,  402,  352,  371,
+      371,  371,  371,  371,  371,  374,  374,  374,  374,  374,
+
+      374,  404,  380,  402,  387,  371,  381,  401,  371,  371,
+      375,  375,  375,  375,  375,  375,  381,  383,  401,  382,
+      404,  371,  387,  383,  408,  432,  371,  374,  371,  403,
+      387,  371,  381,  371,  376,  376,  376,  376,  376,  376,
+      386,  382,  375,  382,  403,  405,  408,  382,  432,  383,
+      384,  859,  384,  382,  405,  384,  384,  384,  384,  384,
+      384,  406,  386,  412,  386,  382,  376,  407,  386,  382,
+      409,  410,  406,  382,  386,  411,  407,  415,  416,  409,
+      413,  414,  420,  417,  410,  412,  386,  384,  417,  418,
+      386,  411,  423,  413,  386,  419,  416,  414,  414,  415,
+
+      422,  419,  421,  420,  418,  427,  425,  423,  429,  430,
+      431,  418,  433,  421,  439,  434,  435,  427,  433,  422,
+      425,  437,  440,  431,  441,  435,  442,  443,  445,  429,
+      434,  430,  444,  447,  439,  449,  437,  445,  450,  441,
+      451,  456,  443,  452,  440,  453,  454,  450,  442,  457,
+      447,  455,  444,  460,  461,  463,  494,  458,  449,  456,
+      455,  451,  457,  452,  458,  453,  459,  462,  454,  464,
+      466,  468,  463,  459,  467,  462,  461,  468,  460,  495,
+      464,  491,  494,  467,  521,  462,  477,  477,  477,  477,
+      636,  491,  466,  488,  488,  488,  488,  488,  488,  490,
+
+      490,  490,  490,  490,  490,  495,  521,  491,  493,  488,
+      515,  518,  488,  488,  492,  516,  492,  636,  493,  492,
+      492,  492,  492,  492,  492,  488,  518,  515,  516,  519,
+      488,  490,  488,  520,  493,  488,  524,  488,  497,  497,
+      497,  497,  497,  497,  529,  522,  520,  524,  527,  519,
+      526,  492,  498,  498,  498,  498,  498,  498,  522,  523,
+      530,  533,  531,  527,  523,  529,  528,  531,  498,  530,
+      526,  498,  498,  499,  533,  499,  532,  534,  499,  499,
+      499,  499,  499,  499,  498,  528,  535,  532,  536,  498,
+      537,  498,  538,  539,  498,  535,  498,  541,  539,  542,
+
+      544,  538,  547,  541,  545,  534,  546,  537,  542,  549,
+      536,  547,  550,  551,  557,  552,  554,  544,  549,  545,
+      560,  546,  555,  557,  558,  551,  561,  555,  562,  550,
+      552,  554,  564,  558,  565,  567,  566,  568,  572,  561,
+      564,  569,  560,  566,  565,  562,  571,  569,  572,  568,
+      574,  575,  601,  621,  603,  571,  620,  567,  594,  594,
+      594,  594,  594,  594,  575,  620,  621,  574,  595,  595,
+      595,  595,  595,  595,  597,  601,  597,  603,  639,  597,
+      597,  597,  597,  597,  597,  602,  622,  639,  855,  602,
+      594,  596,  596,  596,  596,  596,  596,  600,  600,  600,
+
+      600,  600,  600,  622,  618,  619,  602,  596,  602,  618,
+      596,  596,  619,  602,  623,  626,  629,  624,  625,  631,
+      633,  628,  618,  596,  624,  630,  625,  632,  596,  600,
+      596,  635,  626,  596,  628,  596,  634,  623,  629,  634,
+      630,  631,  633,  637,  632,  638,  640,  641,  635,  644,
+      642,  645,  646,  651,  650,  657,  668,  656,  637,  642,
+      653,  646,  657,  851,  640,  638,  656,  664,  665,  641,
+      667,  668,  644,  645,  650,  699,  664,  653,  665,  667,
+      651,  686,  686,  686,  686,  686,  686,  690,  690,  690,
+      690,  690,  690,  700,  704,  702,  699,  686,  703,  704,
+
+      686,  686,  705,  700,  706,  703,  707,  706,  708,  707,
+      710,  711,  713,  686,  714,  713,  710,  715,  686,  690,
+      686,  702,  705,  686,  711,  686,  708,  712,  716,  717,
+      718,  716,  721,  720,  719,  714,  712,  719,  717,  722,
+      721,  723,  724,  725,  728,  715,  720,  732,  731,  722,
+      733,  735,  725,  736,  723,  718,  756,  761,  754,  735,
+      758,  756,  736,  724,  755,  757,  759,  728,  731,  732,
+      758,  733,  743,  743,  743,  743,  743,  743,  754,  760,
+      757,  755,  762,  761,  763,  762,  764,  766,  768,  759,
+      766,  768,  769,  772,  773,  770,  760,  763,  770,  769,
+
+      771,  778,  793,  771,  743,  795,  797,  796,  772,  797,
+      798,  799,  800,  764,  799,  800,  802,  773,  803,  804,
+      806,  810,  804,  811,  778,  796,  795,  807,  808,  793,
+      807,  808,  798,  826,  802,  809,  832,  810,  827,  811,
+      830,  829,  806,  803,  809,  827,  828,  848,  831,  828,
+      829,  831,  835,  832,  826,  835,  838,  839,  830,  838,
+      840,  849,  850,  853,  830,  852,  839,  850,  852,  840,
+      849,  854,  856,  853,  857,  856,  854,  857,  858,  863,
+      864,  858,  865,  866,  867,  865,  868,  867,  871,  868,
+      874,  875,  878,  866,  879,  864,  880,  882,  881,  863,
+
+      883,  878,  884,  847,  846,  845,  875,  879,  844,  843,
+      871,  874,  884,  842,  841,  882,  837,  836,  880,  881,
+      834,  833,  883,  888,  888,  888,  888,  888,  888,  888,
+      888,  888,  888,  888,  888,  888,  889,  889,  889,  889,
+      889,  889,  889,  889,  889,  889,  889,  889,  889,  890,
+      890,  890,  890,  890,  890,  890,  890,  890,  890,  890,
+      890,  890,  891,  825,  824,  891,  823,  891,  891,  891,
+      891,  891,  892,  822,  821,  820,  892,  892,  892,  892,
+      892,  892,  893,  893,  893,  893,  893,  893,  893,  893,
+      893,  893,  893,  893,  893,  894,  819,  818,  894,  817,
+
+      894,  894,  894,  894,  894,  895,  816,  895,  895,  815,
+      895,  895,  895,  895,  895,  895,  814,  895,  896,  813,
+      812,  896,  896,  896,  896,  896,  896,  896,  896,  805,
+      896,  897,  897,  897,  897,  897,  897,  897,  897,  897,
+      897,  897,  897,  897,  898,  898,  801,  898,  794,  792,
+      791,  898,  899,  790,  789,  899,  788,  899,  899,  899,
+      899,  899,  900,  787,  900,  786,  785,  784,  900,  901,
+      783,  901,  782,  781,  780,  901,  902,  779,  902,  777,
+      776,  775,  902,  903,  774,  903,  767,  765,  753,  903,
+      904,  752,  904,  751,  750,  749,  904,  905,  748,  905,
+
+      747,  746,  745,  905,  906,  742,  906,  741,  740,  734,
+      906,  907,  730,  907,  729,  727,  726,  907,  908,  709,
+      908,  701,  698,  693,  908,  909,  909,  909,  909,  909,
+      909,  909,  909,  909,  909,  909,  909,  909,  910,  691,
+      910,  911,  911,  687,  911,  911,  911,  677,  911,  912,
+      912,  673,  912,  913,  671,  913,  669,  666,  663,  913,
+      914,  662,  914,  661,  660,  659,  914,  915,  658,  915,
+      655,  654,  652,  915,  916,  649,  916,  917,  648,  917,
+      647,  643,  616,  917,  918,  612,  918,  919,  610,  608,
+      919,  606,  919,  919,  919,  919,  919,  920,  920,  920,
+
+      920,  920,  920,  920,  920,  920,  920,  920,  920,  920,
+      921,  921,  921,  921,  921,  921,  921,  921,  921,  921,
+      921,  921,  921,  922,  604,  922,  598,  592,  590,  922,
+      923,  588,  923,  586,  584,  582,  923,  924,  580,  924,
+      578,  577,  576,  924,  925,  573,  925,  926,  570,  926,
+      563,  559,  556,  926,  927,  553,  927,  928,  548,  928,
+      543,  540,  517,  928,  929,  513,  929,  930,  511,  930,
+      509,  507,  505,  930,  931,  503,  931,  932,  502,  932,
+      501,  500,  489,  932,  933,  486,  933,  934,  484,  934,
+      483,  482,  480,  934,  935,  478,  935,  936,  475,  936,
+
+      473,  471,  469,  936,  937,  465,  937,  938,  448,  938,
+      446,  938,  438,  938,  939,  436,  939,  428,  939,  426,
+      939,  940,  940,  424,  940,  940,  940,  398,  940,  941,
+      396,  941,  394,  392,  391,  941,  942,  390,  942,  377,
+      367,  365,  942,  943,  364,  943,  360,  358,  356,  943,
+      944,  354,  944,  945,  350,  945,  348,  347,  346,  945,
+      946,  336,  946,  947,  321,  947,  298,  277,  275,  947,
+      948,  273,  948,  949,  272,  949,  271,  269,  268,  949,
+      950,  263,  950,  951,  259,  258,  951,  254,  951,  951,
+      951,  951,  951,  952,  952,  952,  952,  952,  952,  952,
+
+      952,  952,  952,  952,  952,  952,  953,  251,  953,  250,
+      239,  238,  953,  954,  231,  954,  955,  230,  955,  227,
+      217,  215,  955,  956,  214,  956,  957,  213,  957,  207,
+      206,  204,  957,  958,  199,  958,  959,  178,  959,  149,
+      147,  146,  959,  960,  140,  960,  961,  138,  961,  136,
+      128,  125,  961,  962,  124,  962,  963,  120,  963,  101,
+       98,   95,  963,  964,   93,  964,  965,   86,  965,   72,
+       70,   66,  965,  966,   36,  966,   33,   18,   11,  966,
+      967,    4,  967,  968,    3,  968,    0,    0,    0,  968,
+      969,    0,  969,  970,    0,  970,    0,  970,    0,  970,
+
+      971,    0,  971,    0,    0,    0,  971,  972,    0,  972,
+        0,    0,    0,  972,  973,    0,  973,  974,    0,  974,
+        0,    0,    0,  974,  975,    0,  975,  976,    0,  976,
+        0,    0,    0,  976,  977,    0,  977,  978,    0,  978,
+        0,    0,    0,  978,  979,    0,  979,  980,    0,  980,
+        0,    0,    0,  980,  981,    0,  981,  982,    0,  982,
+        0,    0,    0,  982,  983,    0,  983,  984,    0,    0,
+      984,    0,  984,  984,  984,  984,  984,  985,  985,  985,
+      985,  985,  985,  985,  985,  985,  985,  985,  985,  985,
+      986,    0,  986,    0,    0,    0,  986,  987,    0,  987,
+
+      988,    0,  988,    0,    0,    0,  988,  989,    0,  989,
+      990,    0,  990,    0,    0,    0,  990,  991,    0,  991,
+      992,    0,  992,    0,    0,    0,  992,  993,    0,  993,
+      994,    0,  994,    0,    0,    0,  994,  995,    0,  995,
+      996,    0,  996,    0,    0,    0,  996,  997,    0,  997,
+      998,    0,  998,    0,    0,    0,  998,  999,    0,  999,
+     1000,    0, 1000,    0,    0,    0, 1000, 1001,    0, 1001,
+     1002,    0, 1002,    0,    0,    0, 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,
+     1012,    0, 1012, 1013,    0,    0, 1013,    0, 1013, 1013,
+     1013, 1013, 1013, 1014,    0, 1014, 1015, 1015, 1015, 1015,
+     1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1016,
+        0, 1016,    0,    0,    0, 1016, 1017,    0, 1017, 1018,
+        0, 1018,    0,    0,    0, 1018, 1019,    0, 1019, 1020,
+        0, 1020, 1021,    0, 1021, 1022,    0,    0, 1022,    0,
+     1022, 1022, 1022, 1022, 1022, 1023,    0, 1023, 1024,    0,
+     1024, 1025,    0, 1025, 1026,    0, 1026, 1027,    0, 1027,
+
+     1028,    0, 1028, 1029,    0, 1029, 1030,    0, 1030,    0,
+        0,    0, 1030, 1031,    0, 1031, 1032,    0, 1032,    0,
+        0,    0, 1032, 1033,    0, 1033, 1034,    0, 1034, 1035,
+        0, 1035, 1036,    0, 1036, 1037,    0, 1037,    0,    0,
+        0, 1037, 1038,    0,    0, 1038,    0, 1038, 1038, 1038,
+     1038, 1038, 1039,    0, 1039, 1040,    0, 1040, 1041,    0,
+     1041, 1042,    0, 1042,    0,    0,    0, 1042, 1043,    0,
+     1043,    0,    0,    0, 1043, 1044,    0, 1044,    0,    0,
+        0, 1044, 1045,    0, 1045, 1046,    0, 1046,    0,    0,
+        0, 1046, 1047,    0, 1047,    0,    0,    0, 1047, 1048,
+
+        0, 1048,    0,    0,    0, 1048, 1049,    0, 1049,    0,
+        0,    0, 1049, 1050,    0, 1050,    0,    0,    0, 1050,
+     1051,    0, 1051,    0,    0,    0, 1051, 1052,    0, 1052,
+        0,    0,    0, 1052, 1053,    0, 1053,    0,    0,    0,
+     1053, 1054,    0, 1054,    0,    0,    0, 1054, 1055,    0,
+     1055,    0,    0,    0, 1055, 1056,    0, 1056,    0,    0,
+        0, 1056, 1057,    0, 1057,    0,    0,    0, 1057, 1058,
+        0, 1058,    0,    0,    0, 1058, 1059,    0, 1059,    0,
+        0,    0, 1059, 1060,    0, 1060,    0,    0,    0, 1060,
+     1061,    0, 1061,    0,    0,    0, 1061,  887,  887,  887,
+
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887,  887,  887,  887,  887,  887,  887,  887,  887,
+      887,  887
     } ;
 
 /* Table of booleans, true if rule could match eol. */
-static yyconst flex_int32_t yy_rule_can_match_eol[180] =
+static yyconst flex_int32_t yy_rule_can_match_eol[181] =
     {   0,
 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
@@ -1420,9 +1429,9 @@
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 0, 0, 0, 
     0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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;
@@ -1452,6 +1461,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Tue Feb  2 15:06:54 2016
- * Update Count     : 426
+ * Last Modified On : Wed Mar  2 18:07:20 2016
+ * Update Count     : 434
  */
 #line 20 "lex.ll"
@@ -1511,5 +1520,5 @@
 
 
-#line 1514 "Parser/lex.cc"
+#line 1523 "Parser/lex.cc"
 
 #define INITIAL 0
@@ -1706,5 +1715,5 @@
 
 				   /* line directives */
-#line 1709 "Parser/lex.cc"
+#line 1718 "Parser/lex.cc"
 
 	if ( !(yy_init) )
@@ -1760,5 +1769,5 @@
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 876 )
+				if ( yy_current_state >= 888 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
@@ -1766,5 +1775,5 @@
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 2782 );
+		while ( yy_base[yy_current_state] != 2798 );
 
 yy_find_action:
@@ -2003,120 +2012,120 @@
 YY_RULE_SETUP
 #line 203 "lex.ll"
-{ KEYWORD_RETURN(CONTEXT); }			// CFA
+{ KEYWORD_RETURN(CONTINUE); }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 204 "lex.ll"
-{ KEYWORD_RETURN(CONTINUE); }
+{ KEYWORD_RETURN(DEFAULT); }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 205 "lex.ll"
-{ KEYWORD_RETURN(DEFAULT); }
+{ KEYWORD_RETURN(DISABLE); }			// CFA
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 206 "lex.ll"
-{ KEYWORD_RETURN(DISABLE); }			// CFA
+{ KEYWORD_RETURN(DO); }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 207 "lex.ll"
-{ KEYWORD_RETURN(DO); }
+{ KEYWORD_RETURN(DOUBLE); }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 208 "lex.ll"
-{ KEYWORD_RETURN(DOUBLE); }
+{ KEYWORD_RETURN(DTYPE); }				// CFA
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 209 "lex.ll"
-{ KEYWORD_RETURN(DTYPE); }				// CFA
+{ KEYWORD_RETURN(ELSE); }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 210 "lex.ll"
-{ KEYWORD_RETURN(ELSE); }
+{ KEYWORD_RETURN(ENABLE); }				// CFA
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 211 "lex.ll"
-{ KEYWORD_RETURN(ENABLE); }				// CFA
+{ KEYWORD_RETURN(ENUM); }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 212 "lex.ll"
-{ KEYWORD_RETURN(ENUM); }
+{ KEYWORD_RETURN(EXTENSION); }			// GCC
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 213 "lex.ll"
-{ KEYWORD_RETURN(EXTENSION); }			// GCC
+{ KEYWORD_RETURN(EXTERN); }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 214 "lex.ll"
-{ KEYWORD_RETURN(EXTERN); }
+{ KEYWORD_RETURN(FALLTHRU); }			// CFA
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 215 "lex.ll"
-{ KEYWORD_RETURN(FALLTHRU); }			// CFA
+{ KEYWORD_RETURN(FINALLY); }			// CFA
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 216 "lex.ll"
-{ KEYWORD_RETURN(FINALLY); }			// CFA
+{ KEYWORD_RETURN(FLOAT); }
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
 #line 217 "lex.ll"
-{ KEYWORD_RETURN(FLOAT); }
+{ KEYWORD_RETURN(FLOAT); }				// GCC
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
 #line 218 "lex.ll"
-{ KEYWORD_RETURN(FLOAT); }				// GCC
+{ KEYWORD_RETURN(FOR); }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
 #line 219 "lex.ll"
-{ KEYWORD_RETURN(FOR); }
+{ KEYWORD_RETURN(FORALL); }				// CFA
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 220 "lex.ll"
-{ KEYWORD_RETURN(FORALL); }				// CFA
+{ KEYWORD_RETURN(FORTRAN); }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 221 "lex.ll"
-{ KEYWORD_RETURN(FORTRAN); }
+{ KEYWORD_RETURN(FTYPE); }				// CFA
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 222 "lex.ll"
-{ KEYWORD_RETURN(FTYPE); }				// CFA
+{ KEYWORD_RETURN(GENERIC); }			// C11
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 223 "lex.ll"
-{ KEYWORD_RETURN(GENERIC); }			// C11
+{ KEYWORD_RETURN(GOTO); }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 224 "lex.ll"
-{ KEYWORD_RETURN(GOTO); }
+{ KEYWORD_RETURN(IF); }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 225 "lex.ll"
-{ KEYWORD_RETURN(IF); }
+{ KEYWORD_RETURN(IMAGINARY); }			// C99
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 226 "lex.ll"
-{ KEYWORD_RETURN(IMAGINARY); }			// C99
+{ KEYWORD_RETURN(IMAGINARY); }			// GCC
 	YY_BREAK
 case 59:
@@ -2128,10 +2137,10 @@
 YY_RULE_SETUP
 #line 228 "lex.ll"
-{ KEYWORD_RETURN(IMAGINARY); }			// GCC
+{ KEYWORD_RETURN(INLINE); }				// C99
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 229 "lex.ll"
-{ KEYWORD_RETURN(INLINE); }				// C99
+{ KEYWORD_RETURN(INLINE); }				// GCC
 	YY_BREAK
 case 62:
@@ -2143,40 +2152,40 @@
 YY_RULE_SETUP
 #line 231 "lex.ll"
-{ KEYWORD_RETURN(INLINE); }				// GCC
+{ KEYWORD_RETURN(INT); }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 232 "lex.ll"
-{ KEYWORD_RETURN(INT); }
+{ KEYWORD_RETURN(INT); }				// GCC
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 233 "lex.ll"
-{ KEYWORD_RETURN(INT); }				// GCC
+{ KEYWORD_RETURN(LABEL); }				// GCC
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 234 "lex.ll"
-{ KEYWORD_RETURN(LABEL); }				// GCC
+{ KEYWORD_RETURN(LONG); }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 235 "lex.ll"
-{ KEYWORD_RETURN(LONG); }
+{ KEYWORD_RETURN(LVALUE); }				// CFA
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 236 "lex.ll"
-{ KEYWORD_RETURN(LVALUE); }				// CFA
+{ KEYWORD_RETURN(NORETURN); }			// C11
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 237 "lex.ll"
-{ KEYWORD_RETURN(NORETURN); }			// C11
+{ KEYWORD_RETURN(OFFSETOF); }		// GCC
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
 #line 238 "lex.ll"
-{ KEYWORD_RETURN(OFFSETOF); }		// GCC
+{ KEYWORD_RETURN(OTYPE); }				// CFA
 	YY_BREAK
 case 71:
@@ -2268,10 +2277,10 @@
 YY_RULE_SETUP
 #line 256 "lex.ll"
+{ KEYWORD_RETURN(TRAIT); }				// CFA
+	YY_BREAK
+case 89:
+YY_RULE_SETUP
+#line 257 "lex.ll"
 { KEYWORD_RETURN(TRY); }				// CFA
-	YY_BREAK
-case 89:
-YY_RULE_SETUP
-#line 257 "lex.ll"
-{ KEYWORD_RETURN(TYPE); }				// CFA
 	YY_BREAK
 case 90:
@@ -2308,15 +2317,15 @@
 YY_RULE_SETUP
 #line 264 "lex.ll"
+{ KEYWORD_RETURN(VALIST); }			// GCC
+	YY_BREAK
+case 97:
+YY_RULE_SETUP
+#line 265 "lex.ll"
 { KEYWORD_RETURN(VOID); }
 	YY_BREAK
-case 97:
-YY_RULE_SETUP
-#line 265 "lex.ll"
+case 98:
+YY_RULE_SETUP
+#line 266 "lex.ll"
 { KEYWORD_RETURN(VOLATILE); }
-	YY_BREAK
-case 98:
-YY_RULE_SETUP
-#line 266 "lex.ll"
-{ KEYWORD_RETURN(VOLATILE); }			// GCC
 	YY_BREAK
 case 99:
@@ -2328,47 +2337,47 @@
 YY_RULE_SETUP
 #line 268 "lex.ll"
+{ KEYWORD_RETURN(VOLATILE); }			// GCC
+	YY_BREAK
+case 101:
+YY_RULE_SETUP
+#line 269 "lex.ll"
 { KEYWORD_RETURN(WHILE); }
 	YY_BREAK
 /* identifier */
-case 101:
-YY_RULE_SETUP
-#line 271 "lex.ll"
+case 102:
+YY_RULE_SETUP
+#line 272 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 102:
-YY_RULE_SETUP
-#line 272 "lex.ll"
+case 103:
+YY_RULE_SETUP
+#line 273 "lex.ll"
 { ATTRIBUTE_RETURN(); }
 	YY_BREAK
-case 103:
-YY_RULE_SETUP
-#line 273 "lex.ll"
+case 104:
+YY_RULE_SETUP
+#line 274 "lex.ll"
 { BEGIN BKQUOTE; }
 	YY_BREAK
-case 104:
-YY_RULE_SETUP
-#line 274 "lex.ll"
+case 105:
+YY_RULE_SETUP
+#line 275 "lex.ll"
 { IDENTIFIER_RETURN(); }
 	YY_BREAK
-case 105:
-YY_RULE_SETUP
-#line 275 "lex.ll"
+case 106:
+YY_RULE_SETUP
+#line 276 "lex.ll"
 { BEGIN 0; }
 	YY_BREAK
 /* numeric constants */
-case 106:
-YY_RULE_SETUP
-#line 278 "lex.ll"
+case 107:
+YY_RULE_SETUP
+#line 279 "lex.ll"
 { NUMERIC_RETURN(ZERO); }				// CFA
 	YY_BREAK
-case 107:
-YY_RULE_SETUP
-#line 279 "lex.ll"
+case 108:
+YY_RULE_SETUP
+#line 280 "lex.ll"
 { NUMERIC_RETURN(ONE); }				// CFA
-	YY_BREAK
-case 108:
-YY_RULE_SETUP
-#line 280 "lex.ll"
-{ NUMERIC_RETURN(INTEGERconstant); }
 	YY_BREAK
 case 109:
@@ -2385,5 +2394,5 @@
 YY_RULE_SETUP
 #line 283 "lex.ll"
-{ NUMERIC_RETURN(FLOATINGconstant); }
+{ NUMERIC_RETURN(INTEGERconstant); }
 	YY_BREAK
 case 112:
@@ -2392,63 +2401,63 @@
 { NUMERIC_RETURN(FLOATINGconstant); }
 	YY_BREAK
+case 113:
+YY_RULE_SETUP
+#line 285 "lex.ll"
+{ NUMERIC_RETURN(FLOATINGconstant); }
+	YY_BREAK
 /* character constant, allows empty value */
-case 113:
-YY_RULE_SETUP
-#line 287 "lex.ll"
+case 114:
+YY_RULE_SETUP
+#line 288 "lex.ll"
 { BEGIN QUOTE; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
 	YY_BREAK
-case 114:
-YY_RULE_SETUP
-#line 288 "lex.ll"
+case 115:
+YY_RULE_SETUP
+#line 289 "lex.ll"
 { *strtext += std::string( yytext ); }
 	YY_BREAK
-case 115:
-/* rule 115 can match eol */
-YY_RULE_SETUP
-#line 289 "lex.ll"
+case 116:
+/* rule 116 can match eol */
+YY_RULE_SETUP
+#line 290 "lex.ll"
 { BEGIN 0; *strtext += std::string( yytext); RETURN_STR(CHARACTERconstant); }
 	YY_BREAK
 /* ' stop highlighting */
 /* string constant */
-case 116:
-YY_RULE_SETUP
-#line 293 "lex.ll"
+case 117:
+YY_RULE_SETUP
+#line 294 "lex.ll"
 { BEGIN STRING; rm_underscore(); strtext = new std::string; *strtext += std::string( yytext ); }
 	YY_BREAK
-case 117:
-YY_RULE_SETUP
-#line 294 "lex.ll"
+case 118:
+YY_RULE_SETUP
+#line 295 "lex.ll"
 { *strtext += std::string( yytext ); }
 	YY_BREAK
-case 118:
-/* rule 118 can match eol */
-YY_RULE_SETUP
-#line 295 "lex.ll"
+case 119:
+/* rule 119 can match eol */
+YY_RULE_SETUP
+#line 296 "lex.ll"
 { BEGIN 0; *strtext += std::string( yytext ); RETURN_STR(STRINGliteral); }
 	YY_BREAK
 /* " stop highlighting */
 /* common character/string constant */
-case 119:
-YY_RULE_SETUP
-#line 299 "lex.ll"
+case 120:
+YY_RULE_SETUP
+#line 300 "lex.ll"
 { rm_underscore(); *strtext += std::string( yytext ); }
 	YY_BREAK
-case 120:
-/* rule 120 can match eol */
-YY_RULE_SETUP
-#line 300 "lex.ll"
+case 121:
+/* rule 121 can match eol */
+YY_RULE_SETUP
+#line 301 "lex.ll"
 {}						// continuation (ALSO HANDLED BY CPP)
 	YY_BREAK
-case 121:
-YY_RULE_SETUP
-#line 301 "lex.ll"
+case 122:
+YY_RULE_SETUP
+#line 302 "lex.ll"
 { *strtext += std::string( yytext ); } // unknown escape character
 	YY_BREAK
 /* punctuation */
-case 122:
-YY_RULE_SETUP
-#line 304 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
 case 123:
 YY_RULE_SETUP
@@ -2479,10 +2488,10 @@
 YY_RULE_SETUP
 #line 310 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 129:
+YY_RULE_SETUP
+#line 311 "lex.ll"
 { ASCIIOP_RETURN(); }					// also operator
-	YY_BREAK
-case 129:
-YY_RULE_SETUP
-#line 311 "lex.ll"
-{ ASCIIOP_RETURN(); }
 	YY_BREAK
 case 130:
@@ -2494,38 +2503,38 @@
 YY_RULE_SETUP
 #line 313 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 132:
+YY_RULE_SETUP
+#line 314 "lex.ll"
 { ASCIIOP_RETURN(); }					// also operator
 	YY_BREAK
-case 132:
-YY_RULE_SETUP
-#line 314 "lex.ll"
+case 133:
+YY_RULE_SETUP
+#line 315 "lex.ll"
 { NAMEDOP_RETURN(ELLIPSIS); }
 	YY_BREAK
 /* alternative C99 brackets, "<:" & "<:<:" handled by preprocessor */
-case 133:
-YY_RULE_SETUP
-#line 317 "lex.ll"
+case 134:
+YY_RULE_SETUP
+#line 318 "lex.ll"
 { RETURN_VAL('['); }
 	YY_BREAK
-case 134:
-YY_RULE_SETUP
-#line 318 "lex.ll"
+case 135:
+YY_RULE_SETUP
+#line 319 "lex.ll"
 { RETURN_VAL(']'); }
 	YY_BREAK
-case 135:
-YY_RULE_SETUP
-#line 319 "lex.ll"
+case 136:
+YY_RULE_SETUP
+#line 320 "lex.ll"
 { RETURN_VAL('{'); }
 	YY_BREAK
-case 136:
-YY_RULE_SETUP
-#line 320 "lex.ll"
+case 137:
+YY_RULE_SETUP
+#line 321 "lex.ll"
 { RETURN_VAL('}'); }
 	YY_BREAK
 /* operators */
-case 137:
-YY_RULE_SETUP
-#line 323 "lex.ll"
-{ ASCIIOP_RETURN(); }
-	YY_BREAK
 case 138:
 YY_RULE_SETUP
@@ -2595,122 +2604,122 @@
 case 151:
 YY_RULE_SETUP
-#line 338 "lex.ll"
+#line 337 "lex.ll"
+{ ASCIIOP_RETURN(); }
+	YY_BREAK
+case 152:
+YY_RULE_SETUP
+#line 339 "lex.ll"
 { NAMEDOP_RETURN(ICR); }
 	YY_BREAK
-case 152:
-YY_RULE_SETUP
-#line 339 "lex.ll"
+case 153:
+YY_RULE_SETUP
+#line 340 "lex.ll"
 { NAMEDOP_RETURN(DECR); }
 	YY_BREAK
-case 153:
-YY_RULE_SETUP
-#line 340 "lex.ll"
+case 154:
+YY_RULE_SETUP
+#line 341 "lex.ll"
 { NAMEDOP_RETURN(EQ); }
 	YY_BREAK
-case 154:
-YY_RULE_SETUP
-#line 341 "lex.ll"
+case 155:
+YY_RULE_SETUP
+#line 342 "lex.ll"
 { NAMEDOP_RETURN(NE); }
 	YY_BREAK
-case 155:
-YY_RULE_SETUP
-#line 342 "lex.ll"
+case 156:
+YY_RULE_SETUP
+#line 343 "lex.ll"
 { NAMEDOP_RETURN(LS); }
 	YY_BREAK
-case 156:
-YY_RULE_SETUP
-#line 343 "lex.ll"
+case 157:
+YY_RULE_SETUP
+#line 344 "lex.ll"
 { NAMEDOP_RETURN(RS); }
 	YY_BREAK
-case 157:
-YY_RULE_SETUP
-#line 344 "lex.ll"
+case 158:
+YY_RULE_SETUP
+#line 345 "lex.ll"
 { NAMEDOP_RETURN(LE); }
 	YY_BREAK
-case 158:
-YY_RULE_SETUP
-#line 345 "lex.ll"
+case 159:
+YY_RULE_SETUP
+#line 346 "lex.ll"
 { NAMEDOP_RETURN(GE); }
 	YY_BREAK
-case 159:
-YY_RULE_SETUP
-#line 346 "lex.ll"
+case 160:
+YY_RULE_SETUP
+#line 347 "lex.ll"
 { NAMEDOP_RETURN(ANDAND); }
 	YY_BREAK
-case 160:
-YY_RULE_SETUP
-#line 347 "lex.ll"
+case 161:
+YY_RULE_SETUP
+#line 348 "lex.ll"
 { NAMEDOP_RETURN(OROR); }
 	YY_BREAK
-case 161:
-YY_RULE_SETUP
-#line 348 "lex.ll"
+case 162:
+YY_RULE_SETUP
+#line 349 "lex.ll"
 { NAMEDOP_RETURN(ARROW); }
 	YY_BREAK
-case 162:
-YY_RULE_SETUP
-#line 349 "lex.ll"
+case 163:
+YY_RULE_SETUP
+#line 350 "lex.ll"
 { NAMEDOP_RETURN(PLUSassign); }
 	YY_BREAK
-case 163:
-YY_RULE_SETUP
-#line 350 "lex.ll"
+case 164:
+YY_RULE_SETUP
+#line 351 "lex.ll"
 { NAMEDOP_RETURN(MINUSassign); }
 	YY_BREAK
-case 164:
-YY_RULE_SETUP
-#line 351 "lex.ll"
+case 165:
+YY_RULE_SETUP
+#line 352 "lex.ll"
 { NAMEDOP_RETURN(MULTassign); }
 	YY_BREAK
-case 165:
-YY_RULE_SETUP
-#line 352 "lex.ll"
+case 166:
+YY_RULE_SETUP
+#line 353 "lex.ll"
 { NAMEDOP_RETURN(DIVassign); }
 	YY_BREAK
-case 166:
-YY_RULE_SETUP
-#line 353 "lex.ll"
+case 167:
+YY_RULE_SETUP
+#line 354 "lex.ll"
 { NAMEDOP_RETURN(MODassign); }
 	YY_BREAK
-case 167:
-YY_RULE_SETUP
-#line 354 "lex.ll"
+case 168:
+YY_RULE_SETUP
+#line 355 "lex.ll"
 { NAMEDOP_RETURN(ANDassign); }
 	YY_BREAK
-case 168:
-YY_RULE_SETUP
-#line 355 "lex.ll"
+case 169:
+YY_RULE_SETUP
+#line 356 "lex.ll"
 { NAMEDOP_RETURN(ORassign); }
 	YY_BREAK
-case 169:
-YY_RULE_SETUP
-#line 356 "lex.ll"
+case 170:
+YY_RULE_SETUP
+#line 357 "lex.ll"
 { NAMEDOP_RETURN(ERassign); }
 	YY_BREAK
-case 170:
-YY_RULE_SETUP
-#line 357 "lex.ll"
+case 171:
+YY_RULE_SETUP
+#line 358 "lex.ll"
 { NAMEDOP_RETURN(LSassign); }
 	YY_BREAK
-case 171:
-YY_RULE_SETUP
-#line 358 "lex.ll"
+case 172:
+YY_RULE_SETUP
+#line 359 "lex.ll"
 { NAMEDOP_RETURN(RSassign); }
 	YY_BREAK
-case 172:
-YY_RULE_SETUP
-#line 360 "lex.ll"
+case 173:
+YY_RULE_SETUP
+#line 361 "lex.ll"
 { NAMEDOP_RETURN(ATassign); }
 	YY_BREAK
 /* CFA, operator identifier */
-case 173:
-YY_RULE_SETUP
-#line 363 "lex.ll"
+case 174:
+YY_RULE_SETUP
+#line 364 "lex.ll"
 { IDENTIFIER_RETURN(); }				// unary
-	YY_BREAK
-case 174:
-YY_RULE_SETUP
-#line 364 "lex.ll"
-{ IDENTIFIER_RETURN(); }
 	YY_BREAK
 case 175:
@@ -2722,4 +2731,9 @@
 YY_RULE_SETUP
 #line 366 "lex.ll"
+{ IDENTIFIER_RETURN(); }
+	YY_BREAK
+case 177:
+YY_RULE_SETUP
+#line 367 "lex.ll"
 { IDENTIFIER_RETURN(); }		// binary
 	YY_BREAK
@@ -2750,7 +2764,7 @@
 	  an argument list.
 	*/
-case 177:
-YY_RULE_SETUP
-#line 393 "lex.ll"
+case 178:
+YY_RULE_SETUP
+#line 394 "lex.ll"
 {
 	// 1 or 2 character unary operator ?
@@ -2765,15 +2779,15 @@
 	YY_BREAK
 /* unknown characters */
-case 178:
-YY_RULE_SETUP
-#line 405 "lex.ll"
+case 179:
+YY_RULE_SETUP
+#line 406 "lex.ll"
 { printf("unknown character(s):\"%s\" on line %d\n", yytext, yylineno); }
 	YY_BREAK
-case 179:
-YY_RULE_SETUP
-#line 407 "lex.ll"
+case 180:
+YY_RULE_SETUP
+#line 408 "lex.ll"
 ECHO;
 	YY_BREAK
-#line 2778 "Parser/lex.cc"
+#line 2792 "Parser/lex.cc"
 case YY_STATE_EOF(INITIAL):
 case YY_STATE_EOF(COMMENT):
@@ -3072,5 +3086,5 @@
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 876 )
+			if ( yy_current_state >= 888 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
@@ -3100,9 +3114,9 @@
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 876 )
+		if ( yy_current_state >= 888 )
 			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 == 875);
+	yy_is_jam = (yy_current_state == 887);
 
 	return yy_is_jam ? 0 : yy_current_state;
@@ -3750,5 +3764,5 @@
 #define YYTABLES_NAME "yytables"
 
-#line 407 "lex.ll"
+#line 408 "lex.ll"
 
 
Index: src/Parser/lex.ll
===================================================================
--- src/Parser/lex.ll	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/lex.ll	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
  * Created On       : Sat Sep 22 08:58:10 2001
  * Last Modified By : Peter A. Buhr
- * Last Modified On : Tue Feb  2 15:06:54 2016
- * Update Count     : 426
+ * Last Modified On : Wed Mar  2 18:07:20 2016
+ * Update Count     : 434
  */
 
@@ -137,5 +137,5 @@
 %%
 				   /* line directives */
-^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["][^\n]*"\n" {
+^{h_white}*"#"{h_white}*[0-9]+{h_white}*["][^"\n]+["].*"\n" {
 	/* " stop highlighting */
 	char *end_num;
@@ -201,5 +201,4 @@
 __const			{ KEYWORD_RETURN(CONST); }				// GCC
 __const__		{ KEYWORD_RETURN(CONST); }				// GCC
-context			{ KEYWORD_RETURN(CONTEXT); }			// CFA
 continue		{ KEYWORD_RETURN(CONTINUE); }
 default			{ KEYWORD_RETURN(DEFAULT); }
@@ -237,4 +236,5 @@
 _Noreturn		{ KEYWORD_RETURN(NORETURN); }			// C11
 __builtin_offsetof { KEYWORD_RETURN(OFFSETOF); }		// GCC
+otype			{ KEYWORD_RETURN(OTYPE); }				// CFA
 register		{ KEYWORD_RETURN(REGISTER); }
 restrict		{ KEYWORD_RETURN(RESTRICT); }			// C99
@@ -254,6 +254,6 @@
 throw			{ KEYWORD_RETURN(THROW); }				// CFA
 throwResume		{ KEYWORD_RETURN(THROWRESUME); }		// CFA
+trait			{ KEYWORD_RETURN(TRAIT); }				// CFA
 try				{ KEYWORD_RETURN(TRY); }				// CFA
-type			{ KEYWORD_RETURN(TYPE); }				// CFA
 typedef			{ KEYWORD_RETURN(TYPEDEF); }
 typeof			{ KEYWORD_RETURN(TYPEOF); }				// GCC
@@ -262,4 +262,5 @@
 union			{ KEYWORD_RETURN(UNION); }
 unsigned		{ KEYWORD_RETURN(UNSIGNED); }
+__builtin_va_list { KEYWORD_RETURN(VALIST); }			// GCC
 void			{ KEYWORD_RETURN(VOID); }
 volatile		{ KEYWORD_RETURN(VOLATILE); }
Index: src/Parser/parser.cc
===================================================================
--- src/Parser/parser.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/parser.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -138,88 +138,89 @@
      SIGNED = 277,
      UNSIGNED = 278,
-     BOOL = 279,
-     COMPLEX = 280,
-     IMAGINARY = 281,
-     TYPEOF = 282,
-     LABEL = 283,
-     ENUM = 284,
-     STRUCT = 285,
-     UNION = 286,
-     TYPE = 287,
-     FTYPE = 288,
-     DTYPE = 289,
-     CONTEXT = 290,
-     SIZEOF = 291,
-     OFFSETOF = 292,
-     ATTRIBUTE = 293,
-     EXTENSION = 294,
-     IF = 295,
-     ELSE = 296,
-     SWITCH = 297,
-     CASE = 298,
-     DEFAULT = 299,
-     DO = 300,
-     WHILE = 301,
-     FOR = 302,
-     BREAK = 303,
-     CONTINUE = 304,
-     GOTO = 305,
-     RETURN = 306,
-     CHOOSE = 307,
-     DISABLE = 308,
-     ENABLE = 309,
-     FALLTHRU = 310,
-     TRY = 311,
-     CATCH = 312,
-     CATCHRESUME = 313,
-     FINALLY = 314,
-     THROW = 315,
-     THROWRESUME = 316,
-     AT = 317,
-     ASM = 318,
-     ALIGNAS = 319,
-     ALIGNOF = 320,
-     ATOMIC = 321,
-     GENERIC = 322,
-     NORETURN = 323,
-     STATICASSERT = 324,
-     THREADLOCAL = 325,
-     IDENTIFIER = 326,
-     QUOTED_IDENTIFIER = 327,
-     TYPEDEFname = 328,
-     TYPEGENname = 329,
-     ATTR_IDENTIFIER = 330,
-     ATTR_TYPEDEFname = 331,
-     ATTR_TYPEGENname = 332,
-     INTEGERconstant = 333,
-     FLOATINGconstant = 334,
-     CHARACTERconstant = 335,
-     STRINGliteral = 336,
-     ZERO = 337,
-     ONE = 338,
-     ARROW = 339,
-     ICR = 340,
-     DECR = 341,
-     LS = 342,
-     RS = 343,
-     LE = 344,
-     GE = 345,
-     EQ = 346,
-     NE = 347,
-     ANDAND = 348,
-     OROR = 349,
-     ELLIPSIS = 350,
-     MULTassign = 351,
-     DIVassign = 352,
-     MODassign = 353,
-     PLUSassign = 354,
-     MINUSassign = 355,
-     LSassign = 356,
-     RSassign = 357,
-     ANDassign = 358,
-     ERassign = 359,
-     ORassign = 360,
-     ATassign = 361,
-     THEN = 362
+     VALIST = 279,
+     BOOL = 280,
+     COMPLEX = 281,
+     IMAGINARY = 282,
+     TYPEOF = 283,
+     LABEL = 284,
+     ENUM = 285,
+     STRUCT = 286,
+     UNION = 287,
+     OTYPE = 288,
+     FTYPE = 289,
+     DTYPE = 290,
+     TRAIT = 291,
+     SIZEOF = 292,
+     OFFSETOF = 293,
+     ATTRIBUTE = 294,
+     EXTENSION = 295,
+     IF = 296,
+     ELSE = 297,
+     SWITCH = 298,
+     CASE = 299,
+     DEFAULT = 300,
+     DO = 301,
+     WHILE = 302,
+     FOR = 303,
+     BREAK = 304,
+     CONTINUE = 305,
+     GOTO = 306,
+     RETURN = 307,
+     CHOOSE = 308,
+     DISABLE = 309,
+     ENABLE = 310,
+     FALLTHRU = 311,
+     TRY = 312,
+     CATCH = 313,
+     CATCHRESUME = 314,
+     FINALLY = 315,
+     THROW = 316,
+     THROWRESUME = 317,
+     AT = 318,
+     ASM = 319,
+     ALIGNAS = 320,
+     ALIGNOF = 321,
+     ATOMIC = 322,
+     GENERIC = 323,
+     NORETURN = 324,
+     STATICASSERT = 325,
+     THREADLOCAL = 326,
+     IDENTIFIER = 327,
+     QUOTED_IDENTIFIER = 328,
+     TYPEDEFname = 329,
+     TYPEGENname = 330,
+     ATTR_IDENTIFIER = 331,
+     ATTR_TYPEDEFname = 332,
+     ATTR_TYPEGENname = 333,
+     INTEGERconstant = 334,
+     FLOATINGconstant = 335,
+     CHARACTERconstant = 336,
+     STRINGliteral = 337,
+     ZERO = 338,
+     ONE = 339,
+     ARROW = 340,
+     ICR = 341,
+     DECR = 342,
+     LS = 343,
+     RS = 344,
+     LE = 345,
+     GE = 346,
+     EQ = 347,
+     NE = 348,
+     ANDAND = 349,
+     OROR = 350,
+     ELLIPSIS = 351,
+     MULTassign = 352,
+     DIVassign = 353,
+     MODassign = 354,
+     PLUSassign = 355,
+     MINUSassign = 356,
+     LSassign = 357,
+     RSassign = 358,
+     ANDassign = 359,
+     ERassign = 360,
+     ORassign = 361,
+     ATassign = 362,
+     THEN = 363
    };
 #endif
@@ -246,88 +247,89 @@
 #define SIGNED 277
 #define UNSIGNED 278
-#define BOOL 279
-#define COMPLEX 280
-#define IMAGINARY 281
-#define TYPEOF 282
-#define LABEL 283
-#define ENUM 284
-#define STRUCT 285
-#define UNION 286
-#define TYPE 287
-#define FTYPE 288
-#define DTYPE 289
-#define CONTEXT 290
-#define SIZEOF 291
-#define OFFSETOF 292
-#define ATTRIBUTE 293
-#define EXTENSION 294
-#define IF 295
-#define ELSE 296
-#define SWITCH 297
-#define CASE 298
-#define DEFAULT 299
-#define DO 300
-#define WHILE 301
-#define FOR 302
-#define BREAK 303
-#define CONTINUE 304
-#define GOTO 305
-#define RETURN 306
-#define CHOOSE 307
-#define DISABLE 308
-#define ENABLE 309
-#define FALLTHRU 310
-#define TRY 311
-#define CATCH 312
-#define CATCHRESUME 313
-#define FINALLY 314
-#define THROW 315
-#define THROWRESUME 316
-#define AT 317
-#define ASM 318
-#define ALIGNAS 319
-#define ALIGNOF 320
-#define ATOMIC 321
-#define GENERIC 322
-#define NORETURN 323
-#define STATICASSERT 324
-#define THREADLOCAL 325
-#define IDENTIFIER 326
-#define QUOTED_IDENTIFIER 327
-#define TYPEDEFname 328
-#define TYPEGENname 329
-#define ATTR_IDENTIFIER 330
-#define ATTR_TYPEDEFname 331
-#define ATTR_TYPEGENname 332
-#define INTEGERconstant 333
-#define FLOATINGconstant 334
-#define CHARACTERconstant 335
-#define STRINGliteral 336
-#define ZERO 337
-#define ONE 338
-#define ARROW 339
-#define ICR 340
-#define DECR 341
-#define LS 342
-#define RS 343
-#define LE 344
-#define GE 345
-#define EQ 346
-#define NE 347
-#define ANDAND 348
-#define OROR 349
-#define ELLIPSIS 350
-#define MULTassign 351
-#define DIVassign 352
-#define MODassign 353
-#define PLUSassign 354
-#define MINUSassign 355
-#define LSassign 356
-#define RSassign 357
-#define ANDassign 358
-#define ERassign 359
-#define ORassign 360
-#define ATassign 361
-#define THEN 362
+#define VALIST 279
+#define BOOL 280
+#define COMPLEX 281
+#define IMAGINARY 282
+#define TYPEOF 283
+#define LABEL 284
+#define ENUM 285
+#define STRUCT 286
+#define UNION 287
+#define OTYPE 288
+#define FTYPE 289
+#define DTYPE 290
+#define TRAIT 291
+#define SIZEOF 292
+#define OFFSETOF 293
+#define ATTRIBUTE 294
+#define EXTENSION 295
+#define IF 296
+#define ELSE 297
+#define SWITCH 298
+#define CASE 299
+#define DEFAULT 300
+#define DO 301
+#define WHILE 302
+#define FOR 303
+#define BREAK 304
+#define CONTINUE 305
+#define GOTO 306
+#define RETURN 307
+#define CHOOSE 308
+#define DISABLE 309
+#define ENABLE 310
+#define FALLTHRU 311
+#define TRY 312
+#define CATCH 313
+#define CATCHRESUME 314
+#define FINALLY 315
+#define THROW 316
+#define THROWRESUME 317
+#define AT 318
+#define ASM 319
+#define ALIGNAS 320
+#define ALIGNOF 321
+#define ATOMIC 322
+#define GENERIC 323
+#define NORETURN 324
+#define STATICASSERT 325
+#define THREADLOCAL 326
+#define IDENTIFIER 327
+#define QUOTED_IDENTIFIER 328
+#define TYPEDEFname 329
+#define TYPEGENname 330
+#define ATTR_IDENTIFIER 331
+#define ATTR_TYPEDEFname 332
+#define ATTR_TYPEGENname 333
+#define INTEGERconstant 334
+#define FLOATINGconstant 335
+#define CHARACTERconstant 336
+#define STRINGliteral 337
+#define ZERO 338
+#define ONE 339
+#define ARROW 340
+#define ICR 341
+#define DECR 342
+#define LS 343
+#define RS 344
+#define LE 345
+#define GE 346
+#define EQ 347
+#define NE 348
+#define ANDAND 349
+#define OROR 350
+#define ELLIPSIS 351
+#define MULTassign 352
+#define DIVassign 353
+#define MODassign 354
+#define PLUSassign 355
+#define MINUSassign 356
+#define LSassign 357
+#define RSassign 358
+#define ANDassign 359
+#define ERassign 360
+#define ORassign 361
+#define ATassign 362
+#define THEN 363
 
 
@@ -339,5 +341,5 @@
 
 /* Line 293 of yacc.c  */
-#line 110 "parser.yy"
+#line 111 "parser.yy"
 
 	Token tok;
@@ -356,5 +358,5 @@
 
 /* Line 293 of yacc.c  */
-#line 359 "Parser/parser.cc"
+#line 361 "Parser/parser.cc"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
@@ -368,5 +370,5 @@
 
 /* Line 343 of yacc.c  */
-#line 371 "Parser/parser.cc"
+#line 373 "Parser/parser.cc"
 
 #ifdef short
@@ -585,20 +587,20 @@
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  248
+#define YYFINAL  249
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   11042
+#define YYLAST   11290
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  132
+#define YYNTOKENS  133
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  238
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  751
+#define YYNRULES  752
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  1578
+#define YYNSTATES  1579
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   362
+#define YYMAXUTOK   363
 
 #define YYTRANSLATE(YYX)						\
@@ -611,14 +613,14 @@
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,   117,     2,     2,     2,   124,   119,     2,
-     108,   109,   118,   120,   115,   121,   112,   123,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   116,   131,
-     125,   130,   126,   129,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,   118,     2,     2,     2,   125,   120,     2,
+     109,   110,   119,   121,   116,   122,   113,   124,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   117,   132,
+     126,   131,   127,   130,     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,   110,     2,   111,   127,     2,     2,     2,     2,     2,
+       2,   111,     2,   112,   128,     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,   113,   128,   114,   122,     2,     2,     2,
+       2,     2,     2,   114,   129,   115,   123,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -644,5 +646,5 @@
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107
+     105,   106,   107,   108
 };
 
@@ -685,47 +687,47 @@
     1156,  1158,  1161,  1163,  1165,  1167,  1169,  1171,  1173,  1175,
     1177,  1179,  1181,  1183,  1185,  1187,  1189,  1191,  1193,  1195,
-    1197,  1199,  1201,  1203,  1205,  1208,  1211,  1215,  1219,  1221,
-    1225,  1227,  1230,  1233,  1236,  1241,  1246,  1251,  1256,  1258,
-    1261,  1264,  1268,  1270,  1273,  1276,  1278,  1281,  1284,  1288,
-    1290,  1293,  1296,  1298,  1300,  1305,  1308,  1314,  1322,  1325,
-    1328,  1331,  1333,  1336,  1339,  1343,  1346,  1350,  1352,  1355,
-    1359,  1362,  1365,  1370,  1371,  1373,  1376,  1379,  1381,  1382,
-    1384,  1387,  1390,  1396,  1403,  1406,  1409,  1414,  1415,  1418,
-    1419,  1421,  1423,  1425,  1431,  1437,  1443,  1445,  1451,  1457,
-    1467,  1469,  1475,  1476,  1478,  1480,  1486,  1488,  1490,  1496,
-    1502,  1504,  1508,  1512,  1517,  1519,  1521,  1523,  1525,  1528,
-    1530,  1534,  1538,  1540,  1543,  1545,  1549,  1551,  1553,  1555,
-    1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1574,  1576,
-    1578,  1580,  1583,  1584,  1587,  1590,  1592,  1597,  1598,  1600,
-    1603,  1607,  1612,  1615,  1618,  1620,  1623,  1625,  1628,  1634,
-    1640,  1648,  1655,  1657,  1660,  1663,  1667,  1669,  1672,  1675,
-    1680,  1683,  1688,  1689,  1694,  1697,  1699,  1701,  1703,  1704,
-    1707,  1713,  1719,  1733,  1735,  1737,  1741,  1745,  1748,  1752,
-    1756,  1759,  1764,  1766,  1773,  1783,  1784,  1796,  1798,  1802,
-    1806,  1810,  1812,  1814,  1820,  1823,  1829,  1830,  1832,  1834,
-    1838,  1839,  1841,  1843,  1845,  1847,  1848,  1855,  1858,  1860,
-    1863,  1868,  1871,  1875,  1879,  1883,  1888,  1894,  1900,  1906,
-    1913,  1915,  1917,  1919,  1923,  1924,  1930,  1931,  1933,  1935,
-    1938,  1945,  1947,  1951,  1952,  1954,  1959,  1961,  1963,  1965,
-    1967,  1970,  1972,  1975,  1978,  1980,  1984,  1987,  1991,  1995,
-    1998,  2003,  2008,  2012,  2021,  2025,  2028,  2030,  2033,  2040,
-    2049,  2053,  2056,  2060,  2064,  2069,  2074,  2078,  2080,  2082,
-    2084,  2089,  2096,  2100,  2103,  2107,  2111,  2116,  2121,  2125,
-    2128,  2130,  2133,  2136,  2138,  2142,  2145,  2149,  2153,  2156,
-    2161,  2166,  2170,  2177,  2186,  2190,  2193,  2195,  2198,  2201,
-    2204,  2208,  2212,  2215,  2220,  2225,  2229,  2236,  2245,  2249,
-    2252,  2254,  2257,  2260,  2262,  2264,  2267,  2271,  2275,  2278,
-    2283,  2290,  2299,  2301,  2304,  2307,  2309,  2312,  2315,  2319,
-    2323,  2325,  2330,  2335,  2339,  2345,  2354,  2358,  2361,  2365,
-    2367,  2373,  2379,  2386,  2393,  2395,  2398,  2401,  2403,  2406,
-    2409,  2413,  2417,  2419,  2424,  2429,  2433,  2439,  2448,  2452,
-    2454,  2457,  2459,  2462,  2469,  2475,  2482,  2490,  2498,  2500,
-    2503,  2506,  2508,  2511,  2514,  2518,  2522,  2524,  2529,  2534,
-    2538,  2547,  2551,  2553,  2555,  2558,  2560,  2562,  2565,  2569,
-    2572,  2576,  2579,  2583,  2587,  2590,  2595,  2599,  2602,  2606,
-    2609,  2614,  2618,  2621,  2628,  2635,  2642,  2650,  2652,  2655,
-    2657,  2659,  2661,  2664,  2668,  2671,  2675,  2678,  2682,  2686,
-    2691,  2694,  2698,  2703,  2706,  2712,  2718,  2725,  2732,  2733,
-    2735,  2736
+    1197,  1199,  1201,  1203,  1205,  1207,  1210,  1213,  1217,  1221,
+    1223,  1227,  1229,  1232,  1235,  1238,  1243,  1248,  1253,  1258,
+    1260,  1263,  1266,  1270,  1272,  1275,  1278,  1280,  1283,  1286,
+    1290,  1292,  1295,  1298,  1300,  1302,  1307,  1310,  1316,  1324,
+    1327,  1330,  1333,  1335,  1338,  1341,  1345,  1348,  1352,  1354,
+    1357,  1361,  1364,  1367,  1372,  1373,  1375,  1378,  1381,  1383,
+    1384,  1386,  1389,  1392,  1398,  1405,  1408,  1411,  1416,  1417,
+    1420,  1421,  1423,  1425,  1427,  1433,  1439,  1445,  1447,  1453,
+    1459,  1469,  1471,  1477,  1478,  1480,  1482,  1488,  1490,  1492,
+    1498,  1504,  1506,  1510,  1514,  1519,  1521,  1523,  1525,  1527,
+    1530,  1532,  1536,  1540,  1542,  1545,  1547,  1551,  1553,  1555,
+    1557,  1559,  1561,  1563,  1565,  1567,  1569,  1571,  1573,  1576,
+    1578,  1580,  1582,  1585,  1586,  1589,  1592,  1594,  1599,  1600,
+    1602,  1605,  1609,  1614,  1617,  1620,  1622,  1625,  1627,  1630,
+    1636,  1642,  1650,  1657,  1659,  1662,  1665,  1669,  1671,  1674,
+    1677,  1682,  1685,  1690,  1691,  1696,  1699,  1701,  1703,  1705,
+    1706,  1709,  1715,  1721,  1735,  1737,  1739,  1743,  1747,  1750,
+    1754,  1758,  1761,  1766,  1768,  1775,  1785,  1786,  1798,  1800,
+    1804,  1808,  1812,  1814,  1816,  1822,  1825,  1831,  1832,  1834,
+    1836,  1840,  1841,  1843,  1845,  1847,  1849,  1850,  1857,  1860,
+    1862,  1865,  1870,  1873,  1877,  1881,  1885,  1890,  1896,  1902,
+    1908,  1915,  1917,  1919,  1921,  1925,  1926,  1932,  1933,  1935,
+    1937,  1940,  1947,  1949,  1953,  1954,  1956,  1961,  1963,  1965,
+    1967,  1969,  1972,  1974,  1977,  1980,  1982,  1986,  1989,  1993,
+    1997,  2000,  2005,  2010,  2014,  2023,  2027,  2030,  2032,  2035,
+    2042,  2051,  2055,  2058,  2062,  2066,  2071,  2076,  2080,  2082,
+    2084,  2086,  2091,  2098,  2102,  2105,  2109,  2113,  2118,  2123,
+    2127,  2130,  2132,  2135,  2138,  2140,  2144,  2147,  2151,  2155,
+    2158,  2163,  2168,  2172,  2179,  2188,  2192,  2195,  2197,  2200,
+    2203,  2206,  2210,  2214,  2217,  2222,  2227,  2231,  2238,  2247,
+    2251,  2254,  2256,  2259,  2262,  2264,  2266,  2269,  2273,  2277,
+    2280,  2285,  2292,  2301,  2303,  2306,  2309,  2311,  2314,  2317,
+    2321,  2325,  2327,  2332,  2337,  2341,  2347,  2356,  2360,  2363,
+    2367,  2369,  2375,  2381,  2388,  2395,  2397,  2400,  2403,  2405,
+    2408,  2411,  2415,  2419,  2421,  2426,  2431,  2435,  2441,  2450,
+    2454,  2456,  2459,  2461,  2464,  2471,  2477,  2484,  2492,  2500,
+    2502,  2505,  2508,  2510,  2513,  2516,  2520,  2524,  2526,  2531,
+    2536,  2540,  2549,  2553,  2555,  2557,  2560,  2562,  2564,  2567,
+    2571,  2574,  2578,  2581,  2585,  2589,  2592,  2597,  2601,  2604,
+    2608,  2611,  2616,  2620,  2623,  2630,  2637,  2644,  2652,  2654,
+    2657,  2659,  2661,  2663,  2666,  2670,  2673,  2677,  2680,  2684,
+    2688,  2693,  2696,  2700,  2705,  2708,  2714,  2720,  2727,  2734,
+    2735,  2737,  2738
 };
 
@@ -733,278 +735,279 @@
 static const yytype_int16 yyrhs[] =
 {
-     298,     0,    -1,    -1,    -1,    78,    -1,    79,    -1,    80,
-      -1,    71,    -1,    75,    -1,   139,    -1,    71,    -1,    75,
-      -1,    71,    -1,   139,    -1,    82,    -1,    83,    -1,    81,
-      -1,   140,    81,    -1,    71,    -1,   139,    -1,   108,   167,
-     109,    -1,   108,   171,   109,    -1,   141,    -1,   142,   110,
-     133,   162,   134,   111,    -1,   142,   108,   143,   109,    -1,
-     142,   112,   138,    -1,   142,   112,   110,   133,   145,   134,
-     111,    -1,   142,    84,   138,    -1,   142,    84,   110,   133,
-     145,   134,   111,    -1,   142,    85,    -1,   142,    86,    -1,
-     108,   271,   109,   113,   275,   368,   114,    -1,   142,   113,
-     143,   114,    -1,   144,    -1,   143,   115,   144,    -1,    -1,
-     162,    -1,   138,   116,   162,    -1,   110,   133,   162,   134,
-     111,   116,   162,    -1,   110,   133,   162,   115,   165,   134,
-     111,   116,   162,    -1,   146,    -1,   145,   115,   146,    -1,
-     138,    -1,   138,   112,   146,    -1,   138,   112,   110,   133,
-     145,   134,   111,    -1,   138,    84,   146,    -1,   138,    84,
-     110,   133,   145,   134,   111,    -1,   142,    -1,   135,    -1,
-     140,    -1,    85,   147,    -1,    86,   147,    -1,    39,   149,
-      -1,   148,   149,    -1,   117,   149,    -1,   118,   149,    -1,
-      36,   147,    -1,    36,   108,   271,   109,    -1,    37,   108,
-     271,   115,   138,   109,    -1,    75,    -1,    75,   108,   272,
-     109,    -1,    75,   108,   144,   109,    -1,    65,   147,    -1,
-      65,   108,   271,   109,    -1,    93,   138,    -1,   119,    -1,
-     120,    -1,   121,    -1,   122,    -1,   147,    -1,   108,   271,
-     109,   149,    -1,   108,   271,   109,   164,    -1,   149,    -1,
-     150,   118,   149,    -1,   150,   123,   149,    -1,   150,   124,
-     149,    -1,   150,    -1,   151,   120,   150,    -1,   151,   121,
-     150,    -1,   151,    -1,   152,    87,   151,    -1,   152,    88,
-     151,    -1,   152,    -1,   153,   125,   152,    -1,   153,   126,
-     152,    -1,   153,    89,   152,    -1,   153,    90,   152,    -1,
-     153,    -1,   154,    91,   153,    -1,   154,    92,   153,    -1,
-     154,    -1,   155,   119,   154,    -1,   155,    -1,   156,   127,
-     155,    -1,   156,    -1,   157,   128,   156,    -1,   157,    -1,
-     158,    93,   157,    -1,   158,    -1,   159,    94,   158,    -1,
-     159,    -1,   159,   129,   167,   116,   160,    -1,   159,   129,
-     116,   160,    -1,   159,   129,   167,   116,   164,    -1,   160,
-      -1,   160,    -1,   147,   130,   162,    -1,   147,   166,   162,
-      -1,   164,   369,    -1,    -1,   162,    -1,   110,   111,    -1,
-     110,   133,   162,   134,   111,    -1,   110,   133,   115,   165,
-     134,   111,    -1,   110,   133,   162,   115,   165,   134,   111,
-      -1,   163,    -1,   165,   115,   163,    -1,    96,    -1,    97,
-      -1,    98,    -1,    99,    -1,   100,    -1,   101,    -1,   102,
-      -1,   103,    -1,   104,    -1,   105,    -1,   162,    -1,   167,
-     115,   162,    -1,    -1,   167,    -1,   170,    -1,   171,    -1,
-     175,    -1,   176,    -1,   188,    -1,   190,    -1,   191,    -1,
-     196,    -1,   127,   142,   113,   143,   114,   131,    -1,   138,
-     116,   308,   169,    -1,   113,   114,    -1,   113,   133,   133,
-     207,   172,   134,   114,    -1,   173,    -1,   172,   133,   173,
-      -1,   210,    -1,    39,   210,    -1,   304,    -1,   169,   134,
-      -1,   169,    -1,   174,   169,    -1,   168,   131,    -1,    40,
-     108,   167,   109,   169,    -1,    40,   108,   167,   109,   169,
-      41,   169,    -1,    42,   108,   167,   109,   181,    -1,    42,
-     108,   167,   109,   113,   133,   203,   182,   114,    -1,    52,
-     108,   167,   109,   181,    -1,    52,   108,   167,   109,   113,
-     133,   203,   184,   114,    -1,   161,    -1,   161,    95,   161,
-      -1,   306,    -1,   177,    -1,   178,   115,   177,    -1,    43,
-     178,   116,    -1,    44,   116,    -1,   179,    -1,   180,   179,
-      -1,   180,   169,    -1,    -1,   183,    -1,   180,   174,    -1,
-     183,   180,   174,    -1,    -1,   185,    -1,   180,   187,    -1,
-     180,   174,   186,    -1,   185,   180,   187,    -1,   185,   180,
-     174,   186,    -1,    -1,   187,    -1,    55,    -1,    55,   131,
-      -1,    46,   108,   167,   109,   169,    -1,    45,   169,    46,
-     108,   167,   109,   131,    -1,    47,   108,   133,   189,   109,
-     169,    -1,   168,   134,   131,   168,   131,   168,    -1,   210,
-     168,   131,   168,    -1,    50,   138,   131,    -1,    50,   118,
-     167,   131,    -1,    49,   131,    -1,    49,   138,   131,    -1,
-      48,   131,    -1,    48,   138,   131,    -1,    51,   168,   131,
-      -1,    60,   163,   131,    -1,    61,   163,   131,    -1,    61,
-     163,    62,   162,   131,    -1,    56,   171,   192,    -1,    56,
-     171,   194,    -1,    56,   171,   192,   194,    -1,   193,    -1,
-      57,   108,    95,   109,   171,    -1,   193,    57,   108,    95,
-     109,   171,    -1,    58,   108,    95,   109,   171,    -1,   193,
-      58,   108,    95,   109,   171,    -1,    57,   108,   133,   133,
-     195,   134,   109,   171,   134,    -1,   193,    57,   108,   133,
-     133,   195,   134,   109,   171,   134,    -1,    58,   108,   133,
-     133,   195,   134,   109,   171,   134,    -1,   193,    58,   108,
-     133,   133,   195,   134,   109,   171,   134,    -1,    59,   171,
-      -1,   223,    -1,   223,   305,    -1,   223,   353,    -1,   362,
-     138,    -1,   362,    -1,    63,   197,   108,   140,   109,   131,
-      -1,    63,   197,   108,   140,   116,   198,   109,   131,    -1,
-      63,   197,   108,   140,   116,   198,   116,   198,   109,   131,
-      -1,    63,   197,   108,   140,   116,   198,   116,   198,   116,
-     201,   109,   131,    -1,    63,   197,    50,   108,   140,   116,
-     116,   198,   116,   201,   116,   202,   109,   131,    -1,    -1,
-      11,    -1,    -1,   199,    -1,   200,    -1,   199,   115,   200,
-      -1,   140,   108,   161,   109,    -1,   110,   161,   111,   140,
-     108,   161,   109,    -1,    -1,   140,    -1,   201,   115,   140,
-      -1,   138,    -1,   202,   115,   138,    -1,   134,    -1,   204,
-      -1,   210,    -1,   204,   133,   210,    -1,   134,    -1,   206,
-      -1,   220,    -1,   206,   133,   220,    -1,    -1,   208,    -1,
-      28,   209,   131,    -1,   208,    28,   209,   131,    -1,   270,
-      -1,   209,   115,   270,    -1,   211,    -1,   220,    -1,   212,
-     134,   131,    -1,   217,   134,   131,    -1,   214,   134,   131,
-      -1,   289,   134,   131,    -1,   292,   134,   131,    -1,   213,
-     273,    -1,   229,   213,   273,    -1,   212,   134,   115,   133,
-     268,   273,    -1,   363,   268,   307,    -1,   366,   268,   307,
-      -1,   225,   366,   268,   307,    -1,   215,    -1,   225,   215,
-      -1,   229,   215,    -1,   229,   225,   215,    -1,   214,   134,
-     115,   133,   268,    -1,   110,   111,   268,   108,   133,   256,
-     134,   109,    -1,   366,   268,   108,   133,   256,   134,   109,
-      -1,   216,   268,   108,   133,   256,   134,   109,    -1,   110,
-     133,   258,   134,   111,    -1,   110,   133,   258,   134,   115,
-     133,   259,   134,   111,    -1,     3,   213,    -1,     3,   215,
-      -1,   217,   134,   115,   133,   138,    -1,     3,   223,   305,
-      -1,   218,   134,   115,   133,   305,    -1,   225,     3,   223,
-     305,    -1,   223,     3,   305,    -1,   223,     3,   225,   305,
-      -1,     3,   138,   130,   162,    -1,   219,   134,   115,   133,
-     138,   130,   162,    -1,   221,   134,   131,    -1,   218,   134,
-     131,    -1,   219,   134,   131,    -1,   238,   134,   131,    -1,
-     222,   305,   307,   273,    -1,   221,   115,   308,   305,   307,
-     273,    -1,   234,    -1,   238,    -1,   240,    -1,   279,    -1,
-     235,    -1,   239,    -1,   241,    -1,   280,    -1,    -1,   225,
-      -1,   226,    -1,   225,   226,    -1,   227,    -1,   310,    -1,
-      10,    -1,    12,    -1,    11,    -1,    14,    -1,    66,    -1,
-      -1,    13,   108,   228,   282,   109,    -1,   230,    -1,   225,
-     230,    -1,   229,   225,   230,    -1,   231,    -1,   230,   231,
-      -1,   232,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
-      -1,     8,    -1,     9,    -1,    68,    -1,    70,    -1,    16,
+     299,     0,    -1,    -1,    -1,    79,    -1,    80,    -1,    81,
+      -1,    72,    -1,    76,    -1,   140,    -1,    72,    -1,    76,
+      -1,    72,    -1,   140,    -1,    83,    -1,    84,    -1,    82,
+      -1,   141,    82,    -1,    72,    -1,   140,    -1,   109,   168,
+     110,    -1,   109,   172,   110,    -1,   142,    -1,   143,   111,
+     134,   163,   135,   112,    -1,   143,   109,   144,   110,    -1,
+     143,   113,   139,    -1,   143,   113,   111,   134,   146,   135,
+     112,    -1,   143,    85,   139,    -1,   143,    85,   111,   134,
+     146,   135,   112,    -1,   143,    86,    -1,   143,    87,    -1,
+     109,   272,   110,   114,   276,   369,   115,    -1,   143,   114,
+     144,   115,    -1,   145,    -1,   144,   116,   145,    -1,    -1,
+     163,    -1,   139,   117,   163,    -1,   111,   134,   163,   135,
+     112,   117,   163,    -1,   111,   134,   163,   116,   166,   135,
+     112,   117,   163,    -1,   147,    -1,   146,   116,   147,    -1,
+     139,    -1,   139,   113,   147,    -1,   139,   113,   111,   134,
+     146,   135,   112,    -1,   139,    85,   147,    -1,   139,    85,
+     111,   134,   146,   135,   112,    -1,   143,    -1,   136,    -1,
+     141,    -1,    86,   148,    -1,    87,   148,    -1,    40,   150,
+      -1,   149,   150,    -1,   118,   150,    -1,   119,   150,    -1,
+      37,   148,    -1,    37,   109,   272,   110,    -1,    38,   109,
+     272,   116,   139,   110,    -1,    76,    -1,    76,   109,   273,
+     110,    -1,    76,   109,   145,   110,    -1,    66,   148,    -1,
+      66,   109,   272,   110,    -1,    94,   139,    -1,   120,    -1,
+     121,    -1,   122,    -1,   123,    -1,   148,    -1,   109,   272,
+     110,   150,    -1,   109,   272,   110,   165,    -1,   150,    -1,
+     151,   119,   150,    -1,   151,   124,   150,    -1,   151,   125,
+     150,    -1,   151,    -1,   152,   121,   151,    -1,   152,   122,
+     151,    -1,   152,    -1,   153,    88,   152,    -1,   153,    89,
+     152,    -1,   153,    -1,   154,   126,   153,    -1,   154,   127,
+     153,    -1,   154,    90,   153,    -1,   154,    91,   153,    -1,
+     154,    -1,   155,    92,   154,    -1,   155,    93,   154,    -1,
+     155,    -1,   156,   120,   155,    -1,   156,    -1,   157,   128,
+     156,    -1,   157,    -1,   158,   129,   157,    -1,   158,    -1,
+     159,    94,   158,    -1,   159,    -1,   160,    95,   159,    -1,
+     160,    -1,   160,   130,   168,   117,   161,    -1,   160,   130,
+     117,   161,    -1,   160,   130,   168,   117,   165,    -1,   161,
+      -1,   161,    -1,   148,   131,   163,    -1,   148,   167,   163,
+      -1,   165,   370,    -1,    -1,   163,    -1,   111,   112,    -1,
+     111,   134,   163,   135,   112,    -1,   111,   134,   116,   166,
+     135,   112,    -1,   111,   134,   163,   116,   166,   135,   112,
+      -1,   164,    -1,   166,   116,   164,    -1,    97,    -1,    98,
+      -1,    99,    -1,   100,    -1,   101,    -1,   102,    -1,   103,
+      -1,   104,    -1,   105,    -1,   106,    -1,   163,    -1,   168,
+     116,   163,    -1,    -1,   168,    -1,   171,    -1,   172,    -1,
+     176,    -1,   177,    -1,   189,    -1,   191,    -1,   192,    -1,
+     197,    -1,   128,   143,   114,   144,   115,   132,    -1,   139,
+     117,   309,   170,    -1,   114,   115,    -1,   114,   134,   134,
+     208,   173,   135,   115,    -1,   174,    -1,   173,   134,   174,
+      -1,   211,    -1,    40,   211,    -1,   305,    -1,   170,   135,
+      -1,   170,    -1,   175,   170,    -1,   169,   132,    -1,    41,
+     109,   168,   110,   170,    -1,    41,   109,   168,   110,   170,
+      42,   170,    -1,    43,   109,   168,   110,   182,    -1,    43,
+     109,   168,   110,   114,   134,   204,   183,   115,    -1,    53,
+     109,   168,   110,   182,    -1,    53,   109,   168,   110,   114,
+     134,   204,   185,   115,    -1,   162,    -1,   162,    96,   162,
+      -1,   307,    -1,   178,    -1,   179,   116,   178,    -1,    44,
+     179,   117,    -1,    45,   117,    -1,   180,    -1,   181,   180,
+      -1,   181,   170,    -1,    -1,   184,    -1,   181,   175,    -1,
+     184,   181,   175,    -1,    -1,   186,    -1,   181,   188,    -1,
+     181,   175,   187,    -1,   186,   181,   188,    -1,   186,   181,
+     175,   187,    -1,    -1,   188,    -1,    56,    -1,    56,   132,
+      -1,    47,   109,   168,   110,   170,    -1,    46,   170,    47,
+     109,   168,   110,   132,    -1,    48,   109,   134,   190,   110,
+     170,    -1,   169,   135,   132,   169,   132,   169,    -1,   211,
+     169,   132,   169,    -1,    51,   139,   132,    -1,    51,   119,
+     168,   132,    -1,    50,   132,    -1,    50,   139,   132,    -1,
+      49,   132,    -1,    49,   139,   132,    -1,    52,   169,   132,
+      -1,    61,   164,   132,    -1,    62,   164,   132,    -1,    62,
+     164,    63,   163,   132,    -1,    57,   172,   193,    -1,    57,
+     172,   195,    -1,    57,   172,   193,   195,    -1,   194,    -1,
+      58,   109,    96,   110,   172,    -1,   194,    58,   109,    96,
+     110,   172,    -1,    59,   109,    96,   110,   172,    -1,   194,
+      59,   109,    96,   110,   172,    -1,    58,   109,   134,   134,
+     196,   135,   110,   172,   135,    -1,   194,    58,   109,   134,
+     134,   196,   135,   110,   172,   135,    -1,    59,   109,   134,
+     134,   196,   135,   110,   172,   135,    -1,   194,    59,   109,
+     134,   134,   196,   135,   110,   172,   135,    -1,    60,   172,
+      -1,   224,    -1,   224,   306,    -1,   224,   354,    -1,   363,
+     139,    -1,   363,    -1,    64,   198,   109,   141,   110,   132,
+      -1,    64,   198,   109,   141,   117,   199,   110,   132,    -1,
+      64,   198,   109,   141,   117,   199,   117,   199,   110,   132,
+      -1,    64,   198,   109,   141,   117,   199,   117,   199,   117,
+     202,   110,   132,    -1,    64,   198,    51,   109,   141,   117,
+     117,   199,   117,   202,   117,   203,   110,   132,    -1,    -1,
+      11,    -1,    -1,   200,    -1,   201,    -1,   200,   116,   201,
+      -1,   141,   109,   162,   110,    -1,   111,   162,   112,   141,
+     109,   162,   110,    -1,    -1,   141,    -1,   202,   116,   141,
+      -1,   139,    -1,   203,   116,   139,    -1,   135,    -1,   205,
+      -1,   211,    -1,   205,   134,   211,    -1,   135,    -1,   207,
+      -1,   221,    -1,   207,   134,   221,    -1,    -1,   209,    -1,
+      29,   210,   132,    -1,   209,    29,   210,   132,    -1,   271,
+      -1,   210,   116,   271,    -1,   212,    -1,   221,    -1,   213,
+     135,   132,    -1,   218,   135,   132,    -1,   215,   135,   132,
+      -1,   290,   135,   132,    -1,   293,   135,   132,    -1,   214,
+     274,    -1,   230,   214,   274,    -1,   213,   135,   116,   134,
+     269,   274,    -1,   364,   269,   308,    -1,   367,   269,   308,
+      -1,   226,   367,   269,   308,    -1,   216,    -1,   226,   216,
+      -1,   230,   216,    -1,   230,   226,   216,    -1,   215,   135,
+     116,   134,   269,    -1,   111,   112,   269,   109,   134,   257,
+     135,   110,    -1,   367,   269,   109,   134,   257,   135,   110,
+      -1,   217,   269,   109,   134,   257,   135,   110,    -1,   111,
+     134,   259,   135,   112,    -1,   111,   134,   259,   135,   116,
+     134,   260,   135,   112,    -1,     3,   214,    -1,     3,   216,
+      -1,   218,   135,   116,   134,   139,    -1,     3,   224,   306,
+      -1,   219,   135,   116,   134,   306,    -1,   226,     3,   224,
+     306,    -1,   224,     3,   306,    -1,   224,     3,   226,   306,
+      -1,     3,   139,   131,   163,    -1,   220,   135,   116,   134,
+     139,   131,   163,    -1,   222,   135,   132,    -1,   219,   135,
+     132,    -1,   220,   135,   132,    -1,   239,   135,   132,    -1,
+     223,   306,   308,   274,    -1,   222,   116,   309,   306,   308,
+     274,    -1,   235,    -1,   239,    -1,   241,    -1,   280,    -1,
+     236,    -1,   240,    -1,   242,    -1,   281,    -1,    -1,   226,
+      -1,   227,    -1,   226,   227,    -1,   228,    -1,   311,    -1,
+      10,    -1,    12,    -1,    11,    -1,    14,    -1,    67,    -1,
+      -1,    13,   109,   229,   283,   110,    -1,   231,    -1,   226,
+     231,    -1,   230,   226,   231,    -1,   232,    -1,   231,   232,
+      -1,   233,    -1,     5,    -1,     7,    -1,     4,    -1,     6,
+      -1,     8,    -1,     9,    -1,    69,    -1,    71,    -1,    16,
       -1,    21,    -1,    20,    -1,    18,    -1,    19,    -1,    17,
-      -1,    22,    -1,    23,    -1,    15,    -1,    24,    -1,    25,
-      -1,    26,    -1,   235,    -1,   229,   235,    -1,   234,   231,
-      -1,   234,   231,   225,    -1,   234,   231,   235,    -1,   236,
-      -1,   224,   237,   224,    -1,   233,    -1,   225,   233,    -1,
-     236,   226,    -1,   236,   233,    -1,    27,   108,   272,   109,
-      -1,    27,   108,   167,   109,    -1,    77,   108,   272,   109,
-      -1,    77,   108,   167,   109,    -1,   239,    -1,   229,   239,
-      -1,   238,   231,    -1,   238,   231,   225,    -1,   242,    -1,
-     225,   242,    -1,   239,   226,    -1,   241,    -1,   229,   241,
-      -1,   240,   231,    -1,   240,   231,   225,    -1,    73,    -1,
-     225,    73,    -1,   241,   226,    -1,   243,    -1,   253,    -1,
-     244,   113,   245,   114,    -1,   244,   270,    -1,   244,   270,
-     113,   245,   114,    -1,   244,   108,   288,   109,   113,   245,
-     114,    -1,   244,   281,    -1,    30,   308,    -1,    31,   308,
-      -1,   246,    -1,   245,   246,    -1,   247,   131,    -1,    39,
-     247,   131,    -1,   248,   131,    -1,    39,   248,   131,    -1,
-     362,    -1,   362,   270,    -1,   247,   115,   270,    -1,   247,
-     115,    -1,   223,   249,    -1,   248,   115,   308,   249,    -1,
-      -1,   251,    -1,   314,   250,    -1,   327,   250,    -1,   353,
-      -1,    -1,   251,    -1,   116,   161,    -1,    29,   308,    -1,
-     252,   113,   254,   368,   114,    -1,   252,   270,   113,   254,
-     368,   114,    -1,   252,   270,    -1,   270,   255,    -1,   254,
-     115,   270,   255,    -1,    -1,   130,   161,    -1,    -1,   257,
-      -1,   259,    -1,   258,    -1,   258,   134,   115,   133,   259,
-      -1,   259,   134,   115,   133,    95,    -1,   258,   134,   115,
-     133,    95,    -1,   263,    -1,   259,   134,   115,   133,   263,
-      -1,   258,   134,   115,   133,   263,    -1,   258,   134,   115,
-     133,   259,   134,   115,   133,   263,    -1,   264,    -1,   259,
-     134,   115,   133,   264,    -1,    -1,   261,    -1,   262,    -1,
-     262,   134,   115,   133,    95,    -1,   266,    -1,   265,    -1,
-     262,   134,   115,   133,   266,    -1,   262,   134,   115,   133,
-     265,    -1,   265,    -1,   358,   268,   369,    -1,   366,   268,
-     369,    -1,   225,   366,   268,   369,    -1,   215,    -1,   266,
-      -1,   358,    -1,   366,    -1,   225,   366,    -1,   367,    -1,
-     222,   332,   369,    -1,   222,   336,   369,    -1,   222,    -1,
-     222,   347,    -1,   138,    -1,   267,   115,   138,    -1,   136,
-      -1,    73,    -1,    74,    -1,   137,    -1,    73,    -1,    74,
-      -1,   138,    -1,    73,    -1,    74,    -1,   362,    -1,   223,
-      -1,   223,   353,    -1,   362,    -1,   367,    -1,   223,    -1,
-     223,   341,    -1,    -1,   130,   274,    -1,   106,   274,    -1,
-     162,    -1,   113,   275,   368,   114,    -1,    -1,   274,    -1,
-     276,   274,    -1,   275,   115,   274,    -1,   275,   115,   276,
-     274,    -1,   277,   116,    -1,   270,   116,    -1,   278,    -1,
-     277,   278,    -1,    79,    -1,   112,   270,    -1,   110,   133,
-     162,   134,   111,    -1,   110,   133,   306,   134,   111,    -1,
-     110,   133,   161,    95,   161,   134,   111,    -1,   112,   110,
-     133,   145,   134,   111,    -1,   280,    -1,   229,   280,    -1,
-     279,   231,    -1,   279,   231,   225,    -1,   281,    -1,   225,
-     281,    -1,   280,   226,    -1,    74,   108,   288,   109,    -1,
-     283,   369,    -1,   282,   115,   283,   369,    -1,    -1,   285,
-     270,   284,   286,    -1,   223,   332,    -1,    32,    -1,    34,
-      -1,    33,    -1,    -1,   286,   287,    -1,   128,   270,   108,
-     288,   109,    -1,   128,   113,   133,   294,   114,    -1,   128,
-     108,   133,   282,   134,   109,   113,   133,   294,   114,   108,
-     288,   109,    -1,   272,    -1,   162,    -1,   288,   115,   272,
-      -1,   288,   115,   162,    -1,    32,   290,    -1,   230,    32,
-     290,    -1,   289,   115,   290,    -1,   291,   286,    -1,   291,
-     286,   130,   272,    -1,   270,    -1,   269,   108,   133,   282,
-     134,   109,    -1,    35,   270,   108,   133,   282,   134,   109,
-     113,   114,    -1,    -1,    35,   270,   108,   133,   282,   134,
-     109,   113,   293,   294,   114,    -1,   295,    -1,   294,   133,
-     295,    -1,   296,   134,   131,    -1,   297,   134,   131,    -1,
-     213,    -1,   215,    -1,   296,   134,   115,   133,   268,    -1,
-     223,   305,    -1,   297,   134,   115,   133,   305,    -1,    -1,
-     299,    -1,   301,    -1,   299,   133,   301,    -1,    -1,   299,
-      -1,   210,    -1,   303,    -1,   196,    -1,    -1,     5,    81,
-     302,   113,   300,   114,    -1,    39,   301,    -1,   304,    -1,
-     319,   171,    -1,   323,   133,   205,   171,    -1,   214,   171,
-      -1,   222,   319,   171,    -1,   225,   319,   171,    -1,   229,
-     319,   171,    -1,   229,   225,   319,   171,    -1,   222,   323,
-     133,   205,   171,    -1,   225,   323,   133,   205,   171,    -1,
-     229,   323,   133,   205,   171,    -1,   229,   225,   323,   133,
-     205,   171,    -1,   314,    -1,   319,    -1,   327,    -1,   161,
-     122,   161,    -1,    -1,    63,   108,   140,   109,   308,    -1,
-      -1,   309,    -1,   310,    -1,   309,   310,    -1,    38,   108,
-     108,   311,   109,   109,    -1,   312,    -1,   311,   115,   312,
-      -1,    -1,   313,    -1,   313,   108,   168,   109,    -1,   268,
-      -1,   232,    -1,   233,    -1,   226,    -1,   315,   308,    -1,
-     316,    -1,   317,   308,    -1,   318,   308,    -1,   136,    -1,
-     108,   315,   109,    -1,   118,   314,    -1,   118,   225,   314,
-      -1,   108,   316,   109,    -1,   315,   345,    -1,   108,   316,
-     109,   345,    -1,   108,   317,   109,   346,    -1,   108,   317,
-     109,    -1,   108,   316,   109,   108,   133,   260,   134,   109,
-      -1,   108,   318,   109,    -1,   320,   308,    -1,   321,    -1,
-     322,   308,    -1,   315,   108,   133,   260,   134,   109,    -1,
-     108,   321,   109,   108,   133,   260,   134,   109,    -1,   108,
-     320,   109,    -1,   118,   319,    -1,   118,   225,   319,    -1,
-     108,   321,   109,    -1,   108,   321,   109,   345,    -1,   108,
-     322,   109,   346,    -1,   108,   322,   109,    -1,   324,    -1,
-     325,    -1,   326,    -1,   315,   108,   267,   109,    -1,   108,
-     325,   109,   108,   267,   109,    -1,   108,   324,   109,    -1,
-     118,   323,    -1,   118,   225,   323,    -1,   108,   325,   109,
-      -1,   108,   325,   109,   345,    -1,   108,   326,   109,   346,
-      -1,   108,   326,   109,    -1,   328,   308,    -1,   329,    -1,
-     330,   308,    -1,   331,   308,    -1,   337,    -1,   108,   328,
-     109,    -1,   118,   327,    -1,   118,   225,   327,    -1,   108,
-     329,   109,    -1,   328,   345,    -1,   108,   329,   109,   345,
-      -1,   108,   330,   109,   346,    -1,   108,   330,   109,    -1,
-     328,   108,   133,   260,   134,   109,    -1,   108,   329,   109,
-     108,   133,   260,   134,   109,    -1,   108,   331,   109,    -1,
-     315,   308,    -1,   333,    -1,   334,   308,    -1,   335,   308,
-      -1,   118,   332,    -1,   118,   225,   332,    -1,   108,   333,
-     109,    -1,   315,   351,    -1,   108,   333,   109,   345,    -1,
-     108,   334,   109,   346,    -1,   108,   334,   109,    -1,   315,
-     108,   133,   260,   134,   109,    -1,   108,   333,   109,   108,
-     133,   260,   134,   109,    -1,   108,   335,   109,    -1,   337,
-     308,    -1,   338,    -1,   339,   308,    -1,   340,   308,    -1,
-      73,    -1,    74,    -1,   118,   336,    -1,   118,   225,   336,
-      -1,   108,   338,   109,    -1,   337,   351,    -1,   108,   338,
-     109,   351,    -1,   337,   108,   133,   260,   134,   109,    -1,
-     108,   338,   109,   108,   133,   260,   134,   109,    -1,   342,
-      -1,   343,   308,    -1,   344,   308,    -1,   118,    -1,   118,
-     225,    -1,   118,   341,    -1,   118,   225,   341,    -1,   108,
-     342,   109,    -1,   345,    -1,   108,   342,   109,   345,    -1,
-     108,   343,   109,   346,    -1,   108,   343,   109,    -1,   108,
-     133,   260,   134,   109,    -1,   108,   342,   109,   108,   133,
-     260,   134,   109,    -1,   108,   344,   109,    -1,   110,   111,
-      -1,   110,   111,   346,    -1,   346,    -1,   110,   133,   162,
-     134,   111,    -1,   110,   133,   118,   134,   111,    -1,   346,
-     110,   133,   162,   134,   111,    -1,   346,   110,   133,   118,
-     134,   111,    -1,   348,    -1,   349,   308,    -1,   350,   308,
-      -1,   118,    -1,   118,   225,    -1,   118,   347,    -1,   118,
-     225,   347,    -1,   108,   348,   109,    -1,   351,    -1,   108,
-     348,   109,   351,    -1,   108,   349,   109,   346,    -1,   108,
-     349,   109,    -1,   108,   133,   260,   134,   109,    -1,   108,
-     348,   109,   108,   133,   260,   134,   109,    -1,   108,   350,
-     109,    -1,   352,    -1,   352,   346,    -1,   346,    -1,   110,
-     111,    -1,   110,   133,   225,   118,   134,   111,    -1,   110,
-     133,   225,   134,   111,    -1,   110,   133,   225,   162,   134,
-     111,    -1,   110,   133,     7,   224,   162,   134,   111,    -1,
-     110,   133,   225,     7,   162,   134,   111,    -1,   354,    -1,
-     355,   308,    -1,   356,   308,    -1,   118,    -1,   118,   225,
-      -1,   118,   353,    -1,   118,   225,   353,    -1,   108,   354,
-     109,    -1,   345,    -1,   108,   354,   109,   345,    -1,   108,
-     355,   109,   346,    -1,   108,   355,   109,    -1,   108,   354,
-     109,   108,   133,   260,   134,   109,    -1,   108,   356,   109,
-      -1,   358,    -1,   366,    -1,   225,   366,    -1,   359,    -1,
-     360,    -1,   118,   223,    -1,   225,   118,   223,    -1,   118,
-     367,    -1,   225,   118,   367,    -1,   118,   357,    -1,   225,
-     118,   357,    -1,   110,   111,   223,    -1,   361,   223,    -1,
-     110,   111,   346,   223,    -1,   361,   346,   223,    -1,   346,
-     223,    -1,   110,   111,   359,    -1,   361,   359,    -1,   110,
-     111,   346,   359,    -1,   361,   346,   359,    -1,   346,   359,
-      -1,   110,   133,   225,   118,   134,   111,    -1,   110,   133,
-     225,   162,   134,   111,    -1,   110,   133,   229,   162,   134,
-     111,    -1,   110,   133,   229,   225,   162,   134,   111,    -1,
-     366,    -1,   225,   366,    -1,   363,    -1,   364,    -1,   365,
-      -1,   118,   223,    -1,   225,   118,   223,    -1,   118,   367,
-      -1,   225,   118,   367,    -1,   118,   362,    -1,   225,   118,
-     362,    -1,   110,   111,   223,    -1,   110,   111,   346,   223,
-      -1,   346,   223,    -1,   110,   111,   364,    -1,   110,   111,
-     346,   364,    -1,   346,   364,    -1,   110,   133,   259,   134,
-     111,    -1,   110,   111,   108,   256,   109,    -1,   366,   108,
-     133,   256,   134,   109,    -1,   216,   108,   133,   256,   134,
-     109,    -1,    -1,   115,    -1,    -1,   130,   162,    -1
+      -1,    22,    -1,    23,    -1,    15,    -1,    25,    -1,    26,
+      -1,    27,    -1,    24,    -1,   236,    -1,   230,   236,    -1,
+     235,   232,    -1,   235,   232,   226,    -1,   235,   232,   236,
+      -1,   237,    -1,   225,   238,   225,    -1,   234,    -1,   226,
+     234,    -1,   237,   227,    -1,   237,   234,    -1,    28,   109,
+     273,   110,    -1,    28,   109,   168,   110,    -1,    78,   109,
+     273,   110,    -1,    78,   109,   168,   110,    -1,   240,    -1,
+     230,   240,    -1,   239,   232,    -1,   239,   232,   226,    -1,
+     243,    -1,   226,   243,    -1,   240,   227,    -1,   242,    -1,
+     230,   242,    -1,   241,   232,    -1,   241,   232,   226,    -1,
+      74,    -1,   226,    74,    -1,   242,   227,    -1,   244,    -1,
+     254,    -1,   245,   114,   246,   115,    -1,   245,   271,    -1,
+     245,   271,   114,   246,   115,    -1,   245,   109,   289,   110,
+     114,   246,   115,    -1,   245,   282,    -1,    31,   309,    -1,
+      32,   309,    -1,   247,    -1,   246,   247,    -1,   248,   132,
+      -1,    40,   248,   132,    -1,   249,   132,    -1,    40,   249,
+     132,    -1,   363,    -1,   363,   271,    -1,   248,   116,   271,
+      -1,   248,   116,    -1,   224,   250,    -1,   249,   116,   309,
+     250,    -1,    -1,   252,    -1,   315,   251,    -1,   328,   251,
+      -1,   354,    -1,    -1,   252,    -1,   117,   162,    -1,    30,
+     309,    -1,   253,   114,   255,   369,   115,    -1,   253,   271,
+     114,   255,   369,   115,    -1,   253,   271,    -1,   271,   256,
+      -1,   255,   116,   271,   256,    -1,    -1,   131,   162,    -1,
+      -1,   258,    -1,   260,    -1,   259,    -1,   259,   135,   116,
+     134,   260,    -1,   260,   135,   116,   134,    96,    -1,   259,
+     135,   116,   134,    96,    -1,   264,    -1,   260,   135,   116,
+     134,   264,    -1,   259,   135,   116,   134,   264,    -1,   259,
+     135,   116,   134,   260,   135,   116,   134,   264,    -1,   265,
+      -1,   260,   135,   116,   134,   265,    -1,    -1,   262,    -1,
+     263,    -1,   263,   135,   116,   134,    96,    -1,   267,    -1,
+     266,    -1,   263,   135,   116,   134,   267,    -1,   263,   135,
+     116,   134,   266,    -1,   266,    -1,   359,   269,   370,    -1,
+     367,   269,   370,    -1,   226,   367,   269,   370,    -1,   216,
+      -1,   267,    -1,   359,    -1,   367,    -1,   226,   367,    -1,
+     368,    -1,   223,   333,   370,    -1,   223,   337,   370,    -1,
+     223,    -1,   223,   348,    -1,   139,    -1,   268,   116,   139,
+      -1,   137,    -1,    74,    -1,    75,    -1,   138,    -1,    74,
+      -1,    75,    -1,   139,    -1,    74,    -1,    75,    -1,   363,
+      -1,   224,    -1,   224,   354,    -1,   363,    -1,   368,    -1,
+     224,    -1,   224,   342,    -1,    -1,   131,   275,    -1,   107,
+     275,    -1,   163,    -1,   114,   276,   369,   115,    -1,    -1,
+     275,    -1,   277,   275,    -1,   276,   116,   275,    -1,   276,
+     116,   277,   275,    -1,   278,   117,    -1,   271,   117,    -1,
+     279,    -1,   278,   279,    -1,    80,    -1,   113,   271,    -1,
+     111,   134,   163,   135,   112,    -1,   111,   134,   307,   135,
+     112,    -1,   111,   134,   162,    96,   162,   135,   112,    -1,
+     113,   111,   134,   146,   135,   112,    -1,   281,    -1,   230,
+     281,    -1,   280,   232,    -1,   280,   232,   226,    -1,   282,
+      -1,   226,   282,    -1,   281,   227,    -1,    75,   109,   289,
+     110,    -1,   284,   370,    -1,   283,   116,   284,   370,    -1,
+      -1,   286,   271,   285,   287,    -1,   224,   333,    -1,    33,
+      -1,    35,    -1,    34,    -1,    -1,   287,   288,    -1,   129,
+     271,   109,   289,   110,    -1,   129,   114,   134,   295,   115,
+      -1,   129,   109,   134,   283,   135,   110,   114,   134,   295,
+     115,   109,   289,   110,    -1,   273,    -1,   163,    -1,   289,
+     116,   273,    -1,   289,   116,   163,    -1,    33,   291,    -1,
+     231,    33,   291,    -1,   290,   116,   291,    -1,   292,   287,
+      -1,   292,   287,   131,   273,    -1,   271,    -1,   270,   109,
+     134,   283,   135,   110,    -1,    36,   271,   109,   134,   283,
+     135,   110,   114,   115,    -1,    -1,    36,   271,   109,   134,
+     283,   135,   110,   114,   294,   295,   115,    -1,   296,    -1,
+     295,   134,   296,    -1,   297,   135,   132,    -1,   298,   135,
+     132,    -1,   214,    -1,   216,    -1,   297,   135,   116,   134,
+     269,    -1,   224,   306,    -1,   298,   135,   116,   134,   306,
+      -1,    -1,   300,    -1,   302,    -1,   300,   134,   302,    -1,
+      -1,   300,    -1,   211,    -1,   304,    -1,   197,    -1,    -1,
+       5,    82,   303,   114,   301,   115,    -1,    40,   302,    -1,
+     305,    -1,   320,   172,    -1,   324,   134,   206,   172,    -1,
+     215,   172,    -1,   223,   320,   172,    -1,   226,   320,   172,
+      -1,   230,   320,   172,    -1,   230,   226,   320,   172,    -1,
+     223,   324,   134,   206,   172,    -1,   226,   324,   134,   206,
+     172,    -1,   230,   324,   134,   206,   172,    -1,   230,   226,
+     324,   134,   206,   172,    -1,   315,    -1,   320,    -1,   328,
+      -1,   162,   123,   162,    -1,    -1,    64,   109,   141,   110,
+     309,    -1,    -1,   310,    -1,   311,    -1,   310,   311,    -1,
+      39,   109,   109,   312,   110,   110,    -1,   313,    -1,   312,
+     116,   313,    -1,    -1,   314,    -1,   314,   109,   169,   110,
+      -1,   269,    -1,   233,    -1,   234,    -1,   227,    -1,   316,
+     309,    -1,   317,    -1,   318,   309,    -1,   319,   309,    -1,
+     137,    -1,   109,   316,   110,    -1,   119,   315,    -1,   119,
+     226,   315,    -1,   109,   317,   110,    -1,   316,   346,    -1,
+     109,   317,   110,   346,    -1,   109,   318,   110,   347,    -1,
+     109,   318,   110,    -1,   109,   317,   110,   109,   134,   261,
+     135,   110,    -1,   109,   319,   110,    -1,   321,   309,    -1,
+     322,    -1,   323,   309,    -1,   316,   109,   134,   261,   135,
+     110,    -1,   109,   322,   110,   109,   134,   261,   135,   110,
+      -1,   109,   321,   110,    -1,   119,   320,    -1,   119,   226,
+     320,    -1,   109,   322,   110,    -1,   109,   322,   110,   346,
+      -1,   109,   323,   110,   347,    -1,   109,   323,   110,    -1,
+     325,    -1,   326,    -1,   327,    -1,   316,   109,   268,   110,
+      -1,   109,   326,   110,   109,   268,   110,    -1,   109,   325,
+     110,    -1,   119,   324,    -1,   119,   226,   324,    -1,   109,
+     326,   110,    -1,   109,   326,   110,   346,    -1,   109,   327,
+     110,   347,    -1,   109,   327,   110,    -1,   329,   309,    -1,
+     330,    -1,   331,   309,    -1,   332,   309,    -1,   338,    -1,
+     109,   329,   110,    -1,   119,   328,    -1,   119,   226,   328,
+      -1,   109,   330,   110,    -1,   329,   346,    -1,   109,   330,
+     110,   346,    -1,   109,   331,   110,   347,    -1,   109,   331,
+     110,    -1,   329,   109,   134,   261,   135,   110,    -1,   109,
+     330,   110,   109,   134,   261,   135,   110,    -1,   109,   332,
+     110,    -1,   316,   309,    -1,   334,    -1,   335,   309,    -1,
+     336,   309,    -1,   119,   333,    -1,   119,   226,   333,    -1,
+     109,   334,   110,    -1,   316,   352,    -1,   109,   334,   110,
+     346,    -1,   109,   335,   110,   347,    -1,   109,   335,   110,
+      -1,   316,   109,   134,   261,   135,   110,    -1,   109,   334,
+     110,   109,   134,   261,   135,   110,    -1,   109,   336,   110,
+      -1,   338,   309,    -1,   339,    -1,   340,   309,    -1,   341,
+     309,    -1,    74,    -1,    75,    -1,   119,   337,    -1,   119,
+     226,   337,    -1,   109,   339,   110,    -1,   338,   352,    -1,
+     109,   339,   110,   352,    -1,   338,   109,   134,   261,   135,
+     110,    -1,   109,   339,   110,   109,   134,   261,   135,   110,
+      -1,   343,    -1,   344,   309,    -1,   345,   309,    -1,   119,
+      -1,   119,   226,    -1,   119,   342,    -1,   119,   226,   342,
+      -1,   109,   343,   110,    -1,   346,    -1,   109,   343,   110,
+     346,    -1,   109,   344,   110,   347,    -1,   109,   344,   110,
+      -1,   109,   134,   261,   135,   110,    -1,   109,   343,   110,
+     109,   134,   261,   135,   110,    -1,   109,   345,   110,    -1,
+     111,   112,    -1,   111,   112,   347,    -1,   347,    -1,   111,
+     134,   163,   135,   112,    -1,   111,   134,   119,   135,   112,
+      -1,   347,   111,   134,   163,   135,   112,    -1,   347,   111,
+     134,   119,   135,   112,    -1,   349,    -1,   350,   309,    -1,
+     351,   309,    -1,   119,    -1,   119,   226,    -1,   119,   348,
+      -1,   119,   226,   348,    -1,   109,   349,   110,    -1,   352,
+      -1,   109,   349,   110,   352,    -1,   109,   350,   110,   347,
+      -1,   109,   350,   110,    -1,   109,   134,   261,   135,   110,
+      -1,   109,   349,   110,   109,   134,   261,   135,   110,    -1,
+     109,   351,   110,    -1,   353,    -1,   353,   347,    -1,   347,
+      -1,   111,   112,    -1,   111,   134,   226,   119,   135,   112,
+      -1,   111,   134,   226,   135,   112,    -1,   111,   134,   226,
+     163,   135,   112,    -1,   111,   134,     7,   225,   163,   135,
+     112,    -1,   111,   134,   226,     7,   163,   135,   112,    -1,
+     355,    -1,   356,   309,    -1,   357,   309,    -1,   119,    -1,
+     119,   226,    -1,   119,   354,    -1,   119,   226,   354,    -1,
+     109,   355,   110,    -1,   346,    -1,   109,   355,   110,   346,
+      -1,   109,   356,   110,   347,    -1,   109,   356,   110,    -1,
+     109,   355,   110,   109,   134,   261,   135,   110,    -1,   109,
+     357,   110,    -1,   359,    -1,   367,    -1,   226,   367,    -1,
+     360,    -1,   361,    -1,   119,   224,    -1,   226,   119,   224,
+      -1,   119,   368,    -1,   226,   119,   368,    -1,   119,   358,
+      -1,   226,   119,   358,    -1,   111,   112,   224,    -1,   362,
+     224,    -1,   111,   112,   347,   224,    -1,   362,   347,   224,
+      -1,   347,   224,    -1,   111,   112,   360,    -1,   362,   360,
+      -1,   111,   112,   347,   360,    -1,   362,   347,   360,    -1,
+     347,   360,    -1,   111,   134,   226,   119,   135,   112,    -1,
+     111,   134,   226,   163,   135,   112,    -1,   111,   134,   230,
+     163,   135,   112,    -1,   111,   134,   230,   226,   163,   135,
+     112,    -1,   367,    -1,   226,   367,    -1,   364,    -1,   365,
+      -1,   366,    -1,   119,   224,    -1,   226,   119,   224,    -1,
+     119,   368,    -1,   226,   119,   368,    -1,   119,   363,    -1,
+     226,   119,   363,    -1,   111,   112,   224,    -1,   111,   112,
+     347,   224,    -1,   347,   224,    -1,   111,   112,   365,    -1,
+     111,   112,   347,   365,    -1,   347,   365,    -1,   111,   134,
+     260,   135,   112,    -1,   111,   112,   109,   257,   110,    -1,
+     367,   109,   134,   257,   135,   110,    -1,   217,   109,   134,
+     257,   135,   110,    -1,    -1,   116,    -1,    -1,   131,   163,
+      -1
 };
 
@@ -1012,80 +1015,80 @@
 static const yytype_uint16 yyrline[] =
 {
-       0,   290,   290,   296,   305,   306,   307,   311,   312,   313,
-     317,   318,   322,   323,   327,   328,   332,   333,   339,   341,
-     343,   345,   350,   351,   357,   361,   363,   364,   366,   367,
-     369,   371,   373,   381,   382,   388,   389,   390,   395,   397,
-     402,   403,   407,   411,   413,   415,   417,   422,   425,   427,
-     429,   431,   433,   435,   437,   439,   445,   447,   449,   451,
-     453,   455,   457,   459,   461,   466,   467,   468,   469,   473,
-     474,   476,   481,   482,   484,   486,   491,   492,   494,   499,
-     500,   502,   507,   508,   510,   512,   514,   519,   520,   522,
-     527,   528,   533,   534,   539,   540,   545,   546,   551,   552,
-     557,   558,   560,   562,   567,   572,   573,   575,   577,   583,
-     584,   590,   592,   594,   596,   601,   602,   607,   608,   609,
-     610,   611,   612,   613,   614,   615,   616,   620,   621,   627,
-     628,   634,   635,   636,   637,   638,   639,   640,   641,   642,
-     651,   658,   660,   670,   671,   676,   678,   680,   682,   686,
-     687,   692,   697,   700,   702,   704,   709,   711,   719,   720,
-     722,   726,   727,   732,   733,   738,   739,   743,   748,   749,
-     753,   755,   761,   762,   766,   768,   770,   772,   778,   779,
-     783,   784,   788,   790,   792,   797,   799,   804,   806,   810,
-     813,   817,   820,   824,   826,   830,   832,   839,   841,   843,
-     852,   854,   856,   858,   860,   865,   867,   869,   871,   876,
-     889,   890,   895,   897,   902,   906,   908,   910,   912,   914,
-     920,   921,   927,   928,   932,   933,   938,   940,   946,   947,
-     949,   954,   956,   963,   965,   969,   970,   975,   977,   981,
-     982,   986,   988,   992,   993,   997,   998,  1002,  1003,  1018,
-    1019,  1020,  1021,  1022,  1026,  1031,  1038,  1048,  1053,  1058,
-    1066,  1071,  1076,  1081,  1086,  1094,  1116,  1121,  1128,  1130,
-    1137,  1142,  1147,  1158,  1163,  1168,  1173,  1178,  1187,  1192,
-    1200,  1201,  1202,  1203,  1209,  1214,  1222,  1223,  1224,  1225,
-    1229,  1230,  1231,  1232,  1237,  1238,  1247,  1248,  1253,  1254,
-    1259,  1261,  1263,  1265,  1267,  1270,  1269,  1281,  1282,  1284,
-    1294,  1295,  1300,  1304,  1306,  1308,  1310,  1312,  1314,  1316,
-    1318,  1323,  1325,  1327,  1329,  1331,  1333,  1335,  1337,  1339,
-    1341,  1343,  1345,  1351,  1352,  1354,  1356,  1358,  1363,  1364,
-    1370,  1371,  1373,  1375,  1380,  1382,  1384,  1386,  1391,  1392,
-    1394,  1396,  1401,  1402,  1404,  1409,  1410,  1412,  1414,  1419,
-    1421,  1423,  1428,  1429,  1433,  1435,  1437,  1439,  1441,  1446,
-    1448,  1453,  1455,  1460,  1461,  1463,  1464,  1469,  1470,  1472,
-    1474,  1479,  1481,  1487,  1488,  1490,  1493,  1496,  1501,  1502,
-    1507,  1512,  1516,  1518,  1520,  1525,  1527,  1533,  1534,  1542,
-    1543,  1547,  1548,  1549,  1551,  1553,  1560,  1561,  1563,  1565,
-    1570,  1571,  1577,  1578,  1582,  1583,  1588,  1589,  1590,  1592,
-    1600,  1601,  1603,  1606,  1608,  1612,  1613,  1614,  1616,  1618,
-    1622,  1627,  1635,  1636,  1645,  1647,  1652,  1653,  1654,  1658,
-    1659,  1660,  1664,  1665,  1666,  1670,  1671,  1672,  1677,  1678,
-    1679,  1680,  1686,  1687,  1689,  1694,  1695,  1700,  1701,  1702,
-    1703,  1704,  1719,  1720,  1725,  1726,  1734,  1736,  1738,  1741,
-    1743,  1745,  1768,  1769,  1771,  1773,  1778,  1779,  1781,  1786,
-    1791,  1792,  1798,  1797,  1801,  1805,  1807,  1809,  1815,  1816,
-    1821,  1826,  1828,  1833,  1835,  1836,  1838,  1843,  1845,  1847,
-    1852,  1854,  1859,  1864,  1872,  1878,  1877,  1891,  1892,  1897,
-    1898,  1902,  1907,  1912,  1920,  1925,  1936,  1937,  1948,  1949,
-    1955,  1956,  1960,  1961,  1962,  1965,  1964,  1975,  1980,  1985,
-    1991,  2000,  2006,  2012,  2018,  2024,  2032,  2038,  2046,  2052,
-    2061,  2062,  2063,  2067,  2071,  2073,  2078,  2079,  2083,  2084,
-    2089,  2095,  2096,  2099,  2101,  2102,  2106,  2107,  2108,  2109,
-    2143,  2145,  2146,  2148,  2153,  2158,  2163,  2165,  2167,  2172,
-    2174,  2176,  2178,  2183,  2185,  2195,  2197,  2198,  2203,  2205,
-    2207,  2212,  2214,  2216,  2221,  2223,  2225,  2234,  2235,  2236,
-    2240,  2242,  2244,  2249,  2251,  2253,  2258,  2260,  2262,  2277,
-    2279,  2280,  2282,  2287,  2288,  2293,  2295,  2297,  2302,  2304,
-    2306,  2308,  2313,  2315,  2317,  2327,  2329,  2330,  2332,  2337,
-    2339,  2341,  2346,  2348,  2350,  2352,  2357,  2359,  2361,  2392,
-    2394,  2395,  2397,  2402,  2407,  2415,  2417,  2419,  2424,  2426,
-    2431,  2433,  2447,  2448,  2450,  2455,  2457,  2459,  2461,  2463,
-    2468,  2469,  2471,  2473,  2478,  2480,  2482,  2488,  2490,  2492,
-    2496,  2498,  2500,  2502,  2516,  2517,  2519,  2524,  2526,  2528,
-    2530,  2532,  2537,  2538,  2540,  2542,  2547,  2549,  2551,  2557,
-    2558,  2560,  2569,  2572,  2574,  2577,  2579,  2581,  2594,  2595,
-    2597,  2602,  2604,  2606,  2608,  2610,  2615,  2616,  2618,  2620,
-    2625,  2627,  2635,  2636,  2637,  2642,  2643,  2647,  2649,  2651,
-    2653,  2655,  2657,  2664,  2666,  2668,  2670,  2672,  2674,  2676,
-    2678,  2680,  2682,  2687,  2689,  2691,  2696,  2722,  2723,  2725,
-    2729,  2730,  2734,  2736,  2738,  2740,  2742,  2744,  2751,  2753,
-    2755,  2757,  2759,  2761,  2766,  2771,  2773,  2775,  2793,  2795,
-    2800,  2801
+       0,   291,   291,   297,   306,   307,   308,   312,   313,   314,
+     318,   319,   323,   324,   328,   329,   333,   334,   340,   342,
+     344,   346,   351,   352,   358,   362,   364,   365,   367,   368,
+     370,   372,   374,   382,   383,   389,   390,   391,   396,   398,
+     403,   404,   408,   412,   414,   416,   418,   423,   426,   428,
+     430,   432,   434,   436,   438,   440,   446,   448,   450,   452,
+     454,   456,   458,   460,   462,   467,   468,   469,   470,   474,
+     475,   477,   482,   483,   485,   487,   492,   493,   495,   500,
+     501,   503,   508,   509,   511,   513,   515,   520,   521,   523,
+     528,   529,   534,   535,   540,   541,   546,   547,   552,   553,
+     558,   559,   561,   563,   568,   573,   574,   576,   578,   584,
+     585,   591,   593,   595,   597,   602,   603,   608,   609,   610,
+     611,   612,   613,   614,   615,   616,   617,   621,   622,   628,
+     629,   635,   636,   637,   638,   639,   640,   641,   642,   643,
+     652,   659,   661,   671,   672,   677,   679,   681,   683,   687,
+     688,   693,   698,   701,   703,   705,   710,   712,   720,   721,
+     723,   727,   728,   733,   734,   739,   740,   744,   749,   750,
+     754,   756,   762,   763,   767,   769,   771,   773,   779,   780,
+     784,   785,   789,   791,   793,   798,   800,   805,   807,   811,
+     814,   818,   821,   825,   827,   831,   833,   840,   842,   844,
+     853,   855,   857,   859,   861,   866,   868,   870,   872,   877,
+     890,   891,   896,   898,   903,   907,   909,   911,   913,   915,
+     921,   922,   928,   929,   933,   934,   939,   941,   947,   948,
+     950,   955,   957,   964,   966,   970,   971,   976,   978,   982,
+     983,   987,   989,   993,   994,   998,   999,  1003,  1004,  1019,
+    1020,  1021,  1022,  1023,  1027,  1032,  1039,  1049,  1054,  1059,
+    1067,  1072,  1077,  1082,  1087,  1095,  1117,  1122,  1129,  1131,
+    1138,  1143,  1148,  1159,  1164,  1169,  1174,  1179,  1188,  1193,
+    1201,  1202,  1203,  1204,  1210,  1215,  1223,  1224,  1225,  1226,
+    1230,  1231,  1232,  1233,  1238,  1239,  1248,  1249,  1254,  1255,
+    1260,  1262,  1264,  1266,  1268,  1271,  1270,  1282,  1283,  1285,
+    1295,  1296,  1301,  1305,  1307,  1309,  1311,  1313,  1315,  1317,
+    1319,  1324,  1326,  1328,  1330,  1332,  1334,  1336,  1338,  1340,
+    1342,  1344,  1346,  1348,  1354,  1355,  1357,  1359,  1361,  1366,
+    1367,  1373,  1374,  1376,  1378,  1383,  1385,  1387,  1389,  1394,
+    1395,  1397,  1399,  1404,  1405,  1407,  1412,  1413,  1415,  1417,
+    1422,  1424,  1426,  1431,  1432,  1436,  1438,  1440,  1442,  1444,
+    1449,  1451,  1456,  1458,  1463,  1464,  1466,  1467,  1472,  1473,
+    1475,  1477,  1482,  1484,  1490,  1491,  1493,  1496,  1499,  1504,
+    1505,  1510,  1515,  1519,  1521,  1523,  1528,  1530,  1536,  1537,
+    1545,  1546,  1550,  1551,  1552,  1554,  1556,  1563,  1564,  1566,
+    1568,  1573,  1574,  1580,  1581,  1585,  1586,  1591,  1592,  1593,
+    1595,  1603,  1604,  1606,  1609,  1611,  1615,  1616,  1617,  1619,
+    1621,  1625,  1630,  1638,  1639,  1648,  1650,  1655,  1656,  1657,
+    1661,  1662,  1663,  1667,  1668,  1669,  1673,  1674,  1675,  1680,
+    1681,  1682,  1683,  1689,  1690,  1692,  1697,  1698,  1703,  1704,
+    1705,  1706,  1707,  1722,  1723,  1728,  1729,  1737,  1739,  1741,
+    1744,  1746,  1748,  1771,  1772,  1774,  1776,  1781,  1782,  1784,
+    1789,  1794,  1795,  1801,  1800,  1804,  1808,  1810,  1812,  1818,
+    1819,  1824,  1829,  1831,  1836,  1838,  1839,  1841,  1846,  1848,
+    1850,  1855,  1857,  1862,  1867,  1875,  1881,  1880,  1894,  1895,
+    1900,  1901,  1905,  1910,  1915,  1923,  1928,  1939,  1940,  1951,
+    1952,  1958,  1959,  1963,  1964,  1965,  1968,  1967,  1978,  1983,
+    1988,  1994,  2003,  2009,  2015,  2021,  2027,  2035,  2041,  2049,
+    2055,  2064,  2065,  2066,  2070,  2074,  2076,  2081,  2082,  2086,
+    2087,  2092,  2098,  2099,  2102,  2104,  2105,  2109,  2110,  2111,
+    2112,  2146,  2148,  2149,  2151,  2156,  2161,  2166,  2168,  2170,
+    2175,  2177,  2179,  2181,  2186,  2188,  2198,  2200,  2201,  2206,
+    2208,  2210,  2215,  2217,  2219,  2224,  2226,  2228,  2237,  2238,
+    2239,  2243,  2245,  2247,  2252,  2254,  2256,  2261,  2263,  2265,
+    2280,  2282,  2283,  2285,  2290,  2291,  2296,  2298,  2300,  2305,
+    2307,  2309,  2311,  2316,  2318,  2320,  2330,  2332,  2333,  2335,
+    2340,  2342,  2344,  2349,  2351,  2353,  2355,  2360,  2362,  2364,
+    2395,  2397,  2398,  2400,  2405,  2410,  2418,  2420,  2422,  2427,
+    2429,  2434,  2436,  2450,  2451,  2453,  2458,  2460,  2462,  2464,
+    2466,  2471,  2472,  2474,  2476,  2481,  2483,  2485,  2491,  2493,
+    2495,  2499,  2501,  2503,  2505,  2519,  2520,  2522,  2527,  2529,
+    2531,  2533,  2535,  2540,  2541,  2543,  2545,  2550,  2552,  2554,
+    2560,  2561,  2563,  2572,  2575,  2577,  2580,  2582,  2584,  2597,
+    2598,  2600,  2605,  2607,  2609,  2611,  2613,  2618,  2619,  2621,
+    2623,  2628,  2630,  2638,  2639,  2640,  2645,  2646,  2650,  2652,
+    2654,  2656,  2658,  2660,  2667,  2669,  2671,  2673,  2675,  2677,
+    2679,  2681,  2683,  2685,  2690,  2692,  2694,  2699,  2725,  2726,
+    2728,  2732,  2733,  2737,  2739,  2741,  2743,  2745,  2747,  2754,
+    2756,  2758,  2760,  2762,  2764,  2769,  2774,  2776,  2778,  2796,
+    2798,  2803,  2804
 };
 #endif
@@ -1099,13 +1102,13 @@
   "STATIC", "INLINE", "FORTRAN", "CONST", "VOLATILE", "RESTRICT", "FORALL",
   "LVALUE", "VOID", "CHAR", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE",
-  "SIGNED", "UNSIGNED", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF", "LABEL",
-  "ENUM", "STRUCT", "UNION", "TYPE", "FTYPE", "DTYPE", "CONTEXT", "SIZEOF",
-  "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH", "CASE",
-  "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO", "RETURN",
-  "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH", "CATCHRESUME",
-  "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS", "ALIGNOF",
-  "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT", "THREADLOCAL",
-  "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname", "TYPEGENname",
-  "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
+  "SIGNED", "UNSIGNED", "VALIST", "BOOL", "COMPLEX", "IMAGINARY", "TYPEOF",
+  "LABEL", "ENUM", "STRUCT", "UNION", "OTYPE", "FTYPE", "DTYPE", "TRAIT",
+  "SIZEOF", "OFFSETOF", "ATTRIBUTE", "EXTENSION", "IF", "ELSE", "SWITCH",
+  "CASE", "DEFAULT", "DO", "WHILE", "FOR", "BREAK", "CONTINUE", "GOTO",
+  "RETURN", "CHOOSE", "DISABLE", "ENABLE", "FALLTHRU", "TRY", "CATCH",
+  "CATCHRESUME", "FINALLY", "THROW", "THROWRESUME", "AT", "ASM", "ALIGNAS",
+  "ALIGNOF", "ATOMIC", "GENERIC", "NORETURN", "STATICASSERT",
+  "THREADLOCAL", "IDENTIFIER", "QUOTED_IDENTIFIER", "TYPEDEFname",
+  "TYPEGENname", "ATTR_IDENTIFIER", "ATTR_TYPEDEFname", "ATTR_TYPEGENname",
   "INTEGERconstant", "FLOATINGconstant", "CHARACTERconstant",
   "STRINGliteral", "ZERO", "ONE", "ARROW", "ICR", "DECR", "LS", "RS", "LE",
@@ -1169,18 +1172,18 @@
   "type_parameter", "$@2", "type_class", "assertion_list_opt", "assertion",
   "type_name_list", "type_declaring_list", "type_declarator",
-  "type_declarator_name", "context_specifier", "$@3",
-  "context_declaration_list", "context_declaration",
-  "new_context_declaring_list", "context_declaring_list",
-  "translation_unit", "external_definition_list",
-  "external_definition_list_opt", "external_definition", "$@4",
-  "external_function_definition", "function_definition", "declarator",
-  "subrange", "asm_name_opt", "attribute_list_opt", "attribute_list",
-  "attribute", "attribute_parameter_list", "attrib", "any_word",
-  "variable_declarator", "paren_identifier", "variable_ptr",
-  "variable_array", "variable_function", "function_declarator",
-  "function_no_ptr", "function_ptr", "function_array",
-  "old_function_declarator", "old_function_no_ptr", "old_function_ptr",
-  "old_function_array", "type_redeclarator", "paren_type", "type_ptr",
-  "type_array", "type_function", "identifier_parameter_declarator",
+  "type_declarator_name", "trait_specifier", "$@3",
+  "trait_declaration_list", "trait_declaration",
+  "new_trait_declaring_list", "trait_declaring_list", "translation_unit",
+  "external_definition_list", "external_definition_list_opt",
+  "external_definition", "$@4", "external_function_definition",
+  "function_definition", "declarator", "subrange", "asm_name_opt",
+  "attribute_list_opt", "attribute_list", "attribute",
+  "attribute_parameter_list", "attrib", "any_word", "variable_declarator",
+  "paren_identifier", "variable_ptr", "variable_array",
+  "variable_function", "function_declarator", "function_no_ptr",
+  "function_ptr", "function_array", "old_function_declarator",
+  "old_function_no_ptr", "old_function_ptr", "old_function_array",
+  "type_redeclarator", "paren_type", "type_ptr", "type_array",
+  "type_function", "identifier_parameter_declarator",
   "identifier_parameter_ptr", "identifier_parameter_array",
   "identifier_parameter_function", "type_parameter_redeclarator",
@@ -1219,8 +1222,8 @@
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360,   361,   362,    40,    41,
-      91,    93,    46,   123,   125,    44,    58,    33,    42,    38,
-      43,    45,   126,    47,    37,    60,    62,    94,   124,    63,
-      61,    59
+     355,   356,   357,   358,   359,   360,   361,   362,   363,    40,
+      41,    91,    93,    46,   123,   125,    44,    58,    33,    42,
+      38,    43,    45,   126,    47,    37,    60,    62,    94,   124,
+      63,    61,    59
 };
 # endif
@@ -1229,80 +1232,80 @@
 static const yytype_uint16 yyr1[] =
 {
-       0,   132,   133,   134,   135,   135,   135,   136,   136,   136,
-     137,   137,   138,   138,   139,   139,   140,   140,   141,   141,
-     141,   141,   142,   142,   142,   142,   142,   142,   142,   142,
-     142,   142,   142,   143,   143,   144,   144,   144,   144,   144,
-     145,   145,   146,   146,   146,   146,   146,   147,   147,   147,
-     147,   147,   147,   147,   147,   147,   147,   147,   147,   147,
-     147,   147,   147,   147,   147,   148,   148,   148,   148,   149,
-     149,   149,   150,   150,   150,   150,   151,   151,   151,   152,
-     152,   152,   153,   153,   153,   153,   153,   154,   154,   154,
-     155,   155,   156,   156,   157,   157,   158,   158,   159,   159,
-     160,   160,   160,   160,   161,   162,   162,   162,   162,   163,
-     163,   164,   164,   164,   164,   165,   165,   166,   166,   166,
-     166,   166,   166,   166,   166,   166,   166,   167,   167,   168,
-     168,   169,   169,   169,   169,   169,   169,   169,   169,   169,
-     170,   171,   171,   172,   172,   173,   173,   173,   173,   174,
-     174,   175,   176,   176,   176,   176,   176,   176,   177,   177,
-     177,   178,   178,   179,   179,   180,   180,   181,   182,   182,
-     183,   183,   184,   184,   185,   185,   185,   185,   186,   186,
-     187,   187,   188,   188,   188,   189,   189,   190,   190,   190,
-     190,   190,   190,   190,   190,   190,   190,   191,   191,   191,
-     192,   192,   192,   192,   192,   193,   193,   193,   193,   194,
-     195,   195,   195,   195,   195,   196,   196,   196,   196,   196,
-     197,   197,   198,   198,   199,   199,   200,   200,   201,   201,
-     201,   202,   202,   203,   203,   204,   204,   205,   205,   206,
-     206,   207,   207,   208,   208,   209,   209,   210,   210,   211,
-     211,   211,   211,   211,   212,   212,   212,   213,   213,   213,
-     214,   214,   214,   214,   214,   215,   215,   215,   216,   216,
-     217,   217,   217,   218,   218,   218,   218,   218,   219,   219,
-     220,   220,   220,   220,   221,   221,   222,   222,   222,   222,
-     223,   223,   223,   223,   224,   224,   225,   225,   226,   226,
-     227,   227,   227,   227,   227,   228,   227,   229,   229,   229,
-     230,   230,   231,   232,   232,   232,   232,   232,   232,   232,
-     232,   233,   233,   233,   233,   233,   233,   233,   233,   233,
-     233,   233,   233,   234,   234,   234,   234,   234,   235,   235,
-     236,   236,   236,   236,   237,   237,   237,   237,   238,   238,
-     238,   238,   239,   239,   239,   240,   240,   240,   240,   241,
-     241,   241,   242,   242,   243,   243,   243,   243,   243,   244,
-     244,   245,   245,   246,   246,   246,   246,   247,   247,   247,
-     247,   248,   248,   249,   249,   249,   249,   249,   250,   250,
-     251,   252,   253,   253,   253,   254,   254,   255,   255,   256,
-     256,   257,   257,   257,   257,   257,   258,   258,   258,   258,
-     259,   259,   260,   260,   261,   261,   262,   262,   262,   262,
-     263,   263,   263,   263,   263,   264,   264,   264,   264,   264,
-     265,   265,   266,   266,   267,   267,   268,   268,   268,   269,
-     269,   269,   270,   270,   270,   271,   271,   271,   272,   272,
-     272,   272,   273,   273,   273,   274,   274,   275,   275,   275,
-     275,   275,   276,   276,   277,   277,   278,   278,   278,   278,
-     278,   278,   279,   279,   279,   279,   280,   280,   280,   281,
-     282,   282,   284,   283,   283,   285,   285,   285,   286,   286,
-     287,   287,   287,   288,   288,   288,   288,   289,   289,   289,
-     290,   290,   291,   291,   292,   293,   292,   294,   294,   295,
-     295,   296,   296,   296,   297,   297,   298,   298,   299,   299,
-     300,   300,   301,   301,   301,   302,   301,   301,   303,   303,
-     303,   304,   304,   304,   304,   304,   304,   304,   304,   304,
-     305,   305,   305,   306,   307,   307,   308,   308,   309,   309,
-     310,   311,   311,   312,   312,   312,   313,   313,   313,   313,
-     314,   314,   314,   314,   315,   315,   316,   316,   316,   317,
-     317,   317,   317,   318,   318,   319,   319,   319,   320,   320,
-     320,   321,   321,   321,   322,   322,   322,   323,   323,   323,
-     324,   324,   324,   325,   325,   325,   326,   326,   326,   327,
-     327,   327,   327,   328,   328,   329,   329,   329,   330,   330,
-     330,   330,   331,   331,   331,   332,   332,   332,   332,   333,
-     333,   333,   334,   334,   334,   334,   335,   335,   335,   336,
-     336,   336,   336,   337,   337,   338,   338,   338,   339,   339,
-     340,   340,   341,   341,   341,   342,   342,   342,   342,   342,
-     343,   343,   343,   343,   344,   344,   344,   345,   345,   345,
-     346,   346,   346,   346,   347,   347,   347,   348,   348,   348,
-     348,   348,   349,   349,   349,   349,   350,   350,   350,   351,
-     351,   351,   352,   352,   352,   352,   352,   352,   353,   353,
-     353,   354,   354,   354,   354,   354,   355,   355,   355,   355,
-     356,   356,   357,   357,   357,   358,   358,   359,   359,   359,
-     359,   359,   359,   360,   360,   360,   360,   360,   360,   360,
-     360,   360,   360,   361,   361,   361,   361,   362,   362,   362,
-     363,   363,   364,   364,   364,   364,   364,   364,   365,   365,
-     365,   365,   365,   365,   366,   367,   367,   367,   368,   368,
-     369,   369
+       0,   133,   134,   135,   136,   136,   136,   137,   137,   137,
+     138,   138,   139,   139,   140,   140,   141,   141,   142,   142,
+     142,   142,   143,   143,   143,   143,   143,   143,   143,   143,
+     143,   143,   143,   144,   144,   145,   145,   145,   145,   145,
+     146,   146,   147,   147,   147,   147,   147,   148,   148,   148,
+     148,   148,   148,   148,   148,   148,   148,   148,   148,   148,
+     148,   148,   148,   148,   148,   149,   149,   149,   149,   150,
+     150,   150,   151,   151,   151,   151,   152,   152,   152,   153,
+     153,   153,   154,   154,   154,   154,   154,   155,   155,   155,
+     156,   156,   157,   157,   158,   158,   159,   159,   160,   160,
+     161,   161,   161,   161,   162,   163,   163,   163,   163,   164,
+     164,   165,   165,   165,   165,   166,   166,   167,   167,   167,
+     167,   167,   167,   167,   167,   167,   167,   168,   168,   169,
+     169,   170,   170,   170,   170,   170,   170,   170,   170,   170,
+     171,   172,   172,   173,   173,   174,   174,   174,   174,   175,
+     175,   176,   177,   177,   177,   177,   177,   177,   178,   178,
+     178,   179,   179,   180,   180,   181,   181,   182,   183,   183,
+     184,   184,   185,   185,   186,   186,   186,   186,   187,   187,
+     188,   188,   189,   189,   189,   190,   190,   191,   191,   191,
+     191,   191,   191,   191,   191,   191,   191,   192,   192,   192,
+     193,   193,   193,   193,   193,   194,   194,   194,   194,   195,
+     196,   196,   196,   196,   196,   197,   197,   197,   197,   197,
+     198,   198,   199,   199,   200,   200,   201,   201,   202,   202,
+     202,   203,   203,   204,   204,   205,   205,   206,   206,   207,
+     207,   208,   208,   209,   209,   210,   210,   211,   211,   212,
+     212,   212,   212,   212,   213,   213,   213,   214,   214,   214,
+     215,   215,   215,   215,   215,   216,   216,   216,   217,   217,
+     218,   218,   218,   219,   219,   219,   219,   219,   220,   220,
+     221,   221,   221,   221,   222,   222,   223,   223,   223,   223,
+     224,   224,   224,   224,   225,   225,   226,   226,   227,   227,
+     228,   228,   228,   228,   228,   229,   228,   230,   230,   230,
+     231,   231,   232,   233,   233,   233,   233,   233,   233,   233,
+     233,   234,   234,   234,   234,   234,   234,   234,   234,   234,
+     234,   234,   234,   234,   235,   235,   235,   235,   235,   236,
+     236,   237,   237,   237,   237,   238,   238,   238,   238,   239,
+     239,   239,   239,   240,   240,   240,   241,   241,   241,   241,
+     242,   242,   242,   243,   243,   244,   244,   244,   244,   244,
+     245,   245,   246,   246,   247,   247,   247,   247,   248,   248,
+     248,   248,   249,   249,   250,   250,   250,   250,   250,   251,
+     251,   252,   253,   254,   254,   254,   255,   255,   256,   256,
+     257,   257,   258,   258,   258,   258,   258,   259,   259,   259,
+     259,   260,   260,   261,   261,   262,   262,   263,   263,   263,
+     263,   264,   264,   264,   264,   264,   265,   265,   265,   265,
+     265,   266,   266,   267,   267,   268,   268,   269,   269,   269,
+     270,   270,   270,   271,   271,   271,   272,   272,   272,   273,
+     273,   273,   273,   274,   274,   274,   275,   275,   276,   276,
+     276,   276,   276,   277,   277,   278,   278,   279,   279,   279,
+     279,   279,   279,   280,   280,   280,   280,   281,   281,   281,
+     282,   283,   283,   285,   284,   284,   286,   286,   286,   287,
+     287,   288,   288,   288,   289,   289,   289,   289,   290,   290,
+     290,   291,   291,   292,   292,   293,   294,   293,   295,   295,
+     296,   296,   297,   297,   297,   298,   298,   299,   299,   300,
+     300,   301,   301,   302,   302,   302,   303,   302,   302,   304,
+     304,   304,   305,   305,   305,   305,   305,   305,   305,   305,
+     305,   306,   306,   306,   307,   308,   308,   309,   309,   310,
+     310,   311,   312,   312,   313,   313,   313,   314,   314,   314,
+     314,   315,   315,   315,   315,   316,   316,   317,   317,   317,
+     318,   318,   318,   318,   319,   319,   320,   320,   320,   321,
+     321,   321,   322,   322,   322,   323,   323,   323,   324,   324,
+     324,   325,   325,   325,   326,   326,   326,   327,   327,   327,
+     328,   328,   328,   328,   329,   329,   330,   330,   330,   331,
+     331,   331,   331,   332,   332,   332,   333,   333,   333,   333,
+     334,   334,   334,   335,   335,   335,   335,   336,   336,   336,
+     337,   337,   337,   337,   338,   338,   339,   339,   339,   340,
+     340,   341,   341,   342,   342,   342,   343,   343,   343,   343,
+     343,   344,   344,   344,   344,   345,   345,   345,   346,   346,
+     346,   347,   347,   347,   347,   348,   348,   348,   349,   349,
+     349,   349,   349,   350,   350,   350,   350,   351,   351,   351,
+     352,   352,   352,   353,   353,   353,   353,   353,   353,   354,
+     354,   354,   355,   355,   355,   355,   355,   356,   356,   356,
+     356,   357,   357,   358,   358,   358,   359,   359,   360,   360,
+     360,   360,   360,   360,   361,   361,   361,   361,   361,   361,
+     361,   361,   361,   361,   362,   362,   362,   362,   363,   363,
+     363,   364,   364,   365,   365,   365,   365,   365,   365,   366,
+     366,   366,   366,   366,   366,   367,   368,   368,   368,   369,
+     369,   370,   370
 };
 
@@ -1343,47 +1346,47 @@
        1,     2,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     2,     2,     3,     3,     1,     3,
-       1,     2,     2,     2,     4,     4,     4,     4,     1,     2,
-       2,     3,     1,     2,     2,     1,     2,     2,     3,     1,
-       2,     2,     1,     1,     4,     2,     5,     7,     2,     2,
-       2,     1,     2,     2,     3,     2,     3,     1,     2,     3,
-       2,     2,     4,     0,     1,     2,     2,     1,     0,     1,
-       2,     2,     5,     6,     2,     2,     4,     0,     2,     0,
-       1,     1,     1,     5,     5,     5,     1,     5,     5,     9,
-       1,     5,     0,     1,     1,     5,     1,     1,     5,     5,
-       1,     3,     3,     4,     1,     1,     1,     1,     2,     1,
-       3,     3,     1,     2,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     2,     1,     1,
-       1,     2,     0,     2,     2,     1,     4,     0,     1,     2,
-       3,     4,     2,     2,     1,     2,     1,     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,
+       1,     1,     1,     1,     1,     2,     2,     3,     3,     1,
+       3,     1,     2,     2,     2,     4,     4,     4,     4,     1,
+       2,     2,     3,     1,     2,     2,     1,     2,     2,     3,
+       1,     2,     2,     1,     1,     4,     2,     5,     7,     2,
+       2,     2,     1,     2,     2,     3,     2,     3,     1,     2,
+       3,     2,     2,     4,     0,     1,     2,     2,     1,     0,
+       1,     2,     2,     5,     6,     2,     2,     4,     0,     2,
+       0,     1,     1,     1,     5,     5,     5,     1,     5,     5,
+       9,     1,     5,     0,     1,     1,     5,     1,     1,     5,
+       5,     1,     3,     3,     4,     1,     1,     1,     1,     2,
+       1,     3,     3,     1,     2,     1,     3,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
+       1,     1,     2,     0,     2,     2,     1,     4,     0,     1,
+       2,     3,     4,     2,     2,     1,     2,     1,     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,     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,     5,     6,     6,     0,     1,
-       0,     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,     5,     6,     6,     0,
+       1,     0,     2
 };
 
@@ -1395,160 +1398,160 @@
      294,   294,   315,   313,   316,   314,   317,   318,   300,   302,
      301,     0,   303,   329,   321,   326,   324,   325,   323,   322,
-     327,   328,   330,   331,   332,   546,   546,   546,     0,     0,
-       0,   294,   220,   304,   319,   320,     7,   359,     0,     8,
-      14,    15,     0,     2,   294,   564,     9,   524,   522,   247,
-       3,   452,     3,   260,     0,     3,     3,     3,   248,     3,
-       0,     0,     0,   295,   296,   298,   294,   307,   310,   312,
-     340,   286,   333,   338,   287,   348,   288,   355,   352,   362,
-       0,     0,   363,   289,   472,   476,     3,     3,     0,     2,
-     518,   523,   528,   299,     0,     0,   546,   576,   546,     2,
-     587,   588,   589,   294,     0,   730,   731,     0,    12,   294,
-       0,    13,   270,   271,     0,   295,   290,   291,   292,   293,
-     525,   305,   391,   547,   548,   369,   370,    12,   443,   444,
-      11,   439,   442,     0,   502,   497,   488,   443,   444,     0,
-       0,   527,   221,     0,   294,     0,     0,     0,     0,     0,
-       0,     0,     0,   294,   294,     2,     0,   732,   295,   581,
-     593,   736,   729,   727,   734,     0,     0,     0,   254,     2,
-       0,   531,   437,   438,   436,     0,     0,     0,     0,   546,
-       0,   633,   634,     0,     0,   544,   540,   546,   561,   546,
-     546,   541,     2,   542,   546,   600,   546,   546,   603,     0,
-       0,     0,   294,   294,   313,   360,     2,   294,   261,   297,
-     308,   341,   353,   477,     0,     2,     0,   452,   262,   295,
-     334,   349,   356,   473,     0,     2,     0,   311,   335,   342,
-     343,     0,   350,   354,   357,   361,   444,   294,   294,   365,
-     368,     0,   394,   474,   478,     0,     0,     0,     1,   294,
-       2,   529,   575,   577,   294,     2,   740,   295,   743,   544,
-     544,   295,     0,     0,     0,   273,   546,   541,     2,   294,
-       0,     0,   294,   549,     2,   500,     2,   553,     0,     0,
-       0,     0,     0,     0,    18,    59,     4,     5,     6,    16,
-       0,     0,     0,   294,     2,     0,   294,    65,    66,    67,
-      68,    48,    19,    49,    22,    47,    69,     0,    72,    76,
-      79,    82,    87,    90,    92,    94,    96,    98,   100,   105,
-     494,   750,   450,   493,     0,   448,   449,     0,   565,   580,
-     583,   586,   592,   595,   598,   359,     0,     2,   738,     0,
-     294,   741,     2,   294,     3,   424,     0,   432,   295,   294,
-     307,   333,   287,   348,   355,     3,     3,   406,   410,   420,
-     425,   472,   294,   426,   705,   706,   294,   427,   429,   294,
-       2,   582,   594,   728,     2,     2,   249,     2,   457,     0,
-     455,   454,   453,   141,     2,     2,   251,     2,     2,   250,
-       2,   281,     2,   282,     0,   280,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   566,   605,     0,   452,     2,
-     560,   569,   659,   562,   563,   532,   294,     2,   599,   608,
-     601,   602,     0,   276,   294,   294,   339,   295,     0,   295,
-       0,   294,   733,   737,   735,   533,   294,   544,   255,   263,
-     309,     0,     2,   534,   294,   498,   336,   337,   283,   351,
-     358,     0,   294,     2,   383,   294,   371,     0,     0,   377,
-     727,   294,   748,   397,     0,   475,   499,   252,   253,   519,
-     294,   434,     0,   294,   237,     0,     2,   239,     0,   295,
-       0,   257,     2,   258,   278,     0,     0,     2,   294,   544,
-     294,   485,   487,   486,     0,     0,   750,     0,   294,     0,
-     294,   489,   294,   559,   557,   558,   556,     0,   551,   554,
-       0,     0,   294,    56,   294,    69,    52,   294,    62,   294,
-     294,    50,    51,    64,     2,   127,     0,     0,   446,     0,
-     445,   111,   294,    54,    55,    17,     0,    29,    30,    35,
-       2,     0,    35,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,     0,     0,    53,     0,     0,     0,     0,
+     327,   328,   333,   330,   331,   332,   547,   547,   547,     0,
+       0,     0,   294,   220,   304,   319,   320,     7,   360,     0,
+       8,    14,    15,     0,     2,   294,   565,     9,   525,   523,
+     247,     3,   453,     3,   260,     0,     3,     3,     3,   248,
+       3,     0,     0,     0,   295,   296,   298,   294,   307,   310,
+     312,   341,   286,   334,   339,   287,   349,   288,   356,   353,
+     363,     0,     0,   364,   289,   473,   477,     3,     3,     0,
+       2,   519,   524,   529,   299,     0,     0,   547,   577,   547,
+       2,   588,   589,   590,   294,     0,   731,   732,     0,    12,
+     294,     0,    13,   270,   271,     0,   295,   290,   291,   292,
+     293,   526,   305,   392,   548,   549,   370,   371,    12,   444,
+     445,    11,   440,   443,     0,   503,   498,   489,   444,   445,
+       0,     0,   528,   221,     0,   294,     0,     0,     0,     0,
+       0,     0,     0,     0,   294,   294,     2,     0,   733,   295,
+     582,   594,   737,   730,   728,   735,     0,     0,     0,   254,
+       2,     0,   532,   438,   439,   437,     0,     0,     0,     0,
+     547,     0,   634,   635,     0,     0,   545,   541,   547,   562,
+     547,   547,   542,     2,   543,   547,   601,   547,   547,   604,
+       0,     0,     0,   294,   294,   313,   361,     2,   294,   261,
+     297,   308,   342,   354,   478,     0,     2,     0,   453,   262,
+     295,   335,   350,   357,   474,     0,     2,     0,   311,   336,
+     343,   344,     0,   351,   355,   358,   362,   445,   294,   294,
+     366,   369,     0,   395,   475,   479,     0,     0,     0,     1,
+     294,     2,   530,   576,   578,   294,     2,   741,   295,   744,
+     545,   545,   295,     0,     0,     0,   273,   547,   542,     2,
+     294,     0,     0,   294,   550,     2,   501,     2,   554,     0,
+       0,     0,     0,     0,     0,    18,    59,     4,     5,     6,
+      16,     0,     0,     0,   294,     2,     0,   294,    65,    66,
+      67,    68,    48,    19,    49,    22,    47,    69,     0,    72,
+      76,    79,    82,    87,    90,    92,    94,    96,    98,   100,
+     105,   495,   751,   451,   494,     0,   449,   450,     0,   566,
+     581,   584,   587,   593,   596,   599,   360,     0,     2,   739,
+       0,   294,   742,     2,   294,     3,   425,     0,   433,   295,
+     294,   307,   334,   287,   349,   356,     3,     3,   407,   411,
+     421,   426,   473,   294,   427,   706,   707,   294,   428,   430,
+     294,     2,   583,   595,   729,     2,     2,   249,     2,   458,
+       0,   456,   455,   454,   141,     2,     2,   251,     2,     2,
+     250,     2,   281,     2,   282,     0,   280,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   567,   606,     0,   453,
+       2,   561,   570,   660,   563,   564,   533,   294,     2,   600,
+     609,   602,   603,     0,   276,   294,   294,   340,   295,     0,
+     295,     0,   294,   734,   738,   736,   534,   294,   545,   255,
+     263,   309,     0,     2,   535,   294,   499,   337,   338,   283,
+     352,   359,     0,   294,     2,   384,   294,   372,     0,     0,
+     378,   728,   294,   749,   398,     0,   476,   500,   252,   253,
+     520,   294,   435,     0,   294,   237,     0,     2,   239,     0,
+     295,     0,   257,     2,   258,   278,     0,     0,     2,   294,
+     545,   294,   486,   488,   487,     0,     0,   751,     0,   294,
+       0,   294,   490,   294,   560,   558,   559,   557,     0,   552,
+     555,     0,     0,   294,    56,   294,    69,    52,   294,    62,
+     294,   294,    50,    51,    64,     2,   127,     0,     0,   447,
+       0,   446,   111,   294,    54,    55,    17,     0,    29,    30,
+      35,     2,     0,    35,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,     0,     0,    53,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   108,     2,   645,   451,
-     642,   546,   546,   650,   479,   294,     2,   584,   585,     0,
-     596,   597,     0,     2,   739,   742,   111,   294,     2,   294,
-       0,   707,   295,   711,   702,   703,   709,     0,     2,     2,
-     667,   546,   750,   616,   546,   546,   750,   546,   630,   546,
-     546,   681,   433,   664,   546,   546,   672,   679,   294,   428,
-     295,     0,     0,   294,   717,   295,   722,   750,   714,   294,
-     719,   750,   294,   294,   294,     0,   111,     0,    18,     5,
-       2,     0,    19,     0,   458,   748,     0,     0,   464,   241,
-       0,   294,     0,     0,     0,   544,   568,   572,   574,   604,
-     607,   611,   614,   567,   606,     0,   284,   657,     0,   294,
-     277,     0,     0,     0,     0,   275,     2,     0,   259,   535,
-     294,     0,     0,     0,     0,   294,   294,     0,     0,   691,
-     381,   384,   388,   546,   388,   696,   387,   688,   546,   546,
-     364,   372,   380,   373,   546,   375,   378,   294,   749,     0,
-       0,   395,   748,   295,     3,   413,     3,   417,   416,   590,
-       0,   530,   294,     3,     3,   294,   432,   295,     3,   426,
-     427,     2,     0,     0,     0,   484,   306,   294,   480,   482,
-       3,     2,     2,     0,   501,     3,     0,   553,   129,     0,
-       0,   222,     0,     0,     0,     2,     0,     0,    36,     0,
-       0,   111,   294,    20,     0,    21,     0,   691,   447,     0,
-     109,     3,     2,    27,     2,     0,    33,     0,     2,    25,
-       0,   106,   107,    73,    74,    75,    77,    78,    80,    81,
-      85,    86,    83,    84,    88,    89,    91,    93,    95,    97,
-      99,     0,     0,   751,   294,     0,     0,     0,   646,   647,
-     643,   644,   496,   495,   294,     0,     3,   294,   713,   294,
-     718,   295,   294,   294,   294,   661,   704,   660,     2,   294,
-       0,     0,     0,     0,     0,     0,     0,     0,   682,     0,
-     668,   619,   635,   669,     2,   615,   622,   430,   617,   618,
-     431,     2,   629,   638,   631,   632,   665,   666,   680,   708,
-     712,   710,   750,   268,     2,   744,     2,   421,   716,   721,
-     422,     0,   400,     3,     3,     3,     3,   452,     3,     0,
-       2,   467,   463,   749,     0,   459,   466,     2,   462,   465,
-       0,   294,   242,   264,     3,   272,   274,     0,   452,     2,
-     570,   571,     2,   609,   610,     0,   658,   536,     3,   345,
-     344,   347,   346,   294,   537,     0,   538,   294,   374,   376,
-       2,     0,     0,     0,     0,   104,   390,   692,   693,   385,
-     389,   386,   689,   690,   379,   383,   366,   397,   392,   398,
-       0,     0,     0,   435,   240,     0,     0,     3,     2,   667,
-     428,     0,   526,     0,   750,   488,     0,   294,   294,   294,
-       0,   550,   552,   130,     0,     0,   215,     0,     0,     0,
-     223,   224,    57,     0,    63,   294,     0,    61,    60,     0,
-     128,   692,   457,    70,    71,   110,   115,     3,   109,     0,
-       0,     0,    24,    35,     3,     0,    32,   102,     0,     3,
-     649,   653,   656,   648,     3,   591,     3,   715,   720,     2,
-     294,     3,     3,   295,     0,     3,   621,   625,   628,   637,
-     671,   675,   678,   294,     3,   620,   636,   670,   294,   294,
-     423,   294,   294,   745,     0,     0,     0,     0,   256,     0,
-     104,     0,     3,     3,     0,   460,     0,   456,     0,     0,
-     245,   294,     0,     0,   129,     0,     0,     0,     0,     0,
-     129,     0,     0,   109,   109,     2,     0,     0,     0,     3,
-     131,   132,     2,   143,   133,   134,   135,   136,   137,   138,
-     145,   147,     0,     0,     0,   285,   294,   294,   546,     0,
-     539,   294,   111,   695,   699,   701,   694,   382,   396,   393,
-     578,     2,   663,   662,     0,   668,     2,   481,   483,   503,
-       3,   511,   512,     0,     2,   507,     3,     3,     0,     0,
-     555,   222,     0,     0,     0,   222,     0,     0,     3,    37,
-     748,   109,     0,     3,   660,    42,     3,    40,     3,    34,
-       0,     3,   101,   103,     0,     2,   651,   652,     0,     0,
-     294,     0,     0,     0,     3,   637,     0,     2,   623,   624,
-       2,   639,     2,   673,   674,     0,     0,     3,     0,     3,
-       3,     3,     3,   408,   407,   411,     2,     2,   747,   746,
-     112,     0,     0,     0,     0,     3,   461,     3,     0,   243,
-     146,     3,   295,   294,     0,     0,     0,     0,     2,   191,
-       0,   189,     0,     0,     0,     0,     0,     0,     0,     0,
-     111,     0,   546,   151,   148,   294,     0,     0,   267,   279,
-       3,     3,   545,   612,   367,     2,   697,   698,   294,   266,
-     294,     0,   514,   491,   294,     0,     0,   490,   505,     0,
-       0,     0,   216,     0,   225,    58,   109,     0,     0,   116,
-     113,     0,     0,     0,     0,     0,     0,    23,     0,   654,
-     294,   579,   265,   723,   724,   725,     0,   676,   294,   294,
-     294,     3,     3,     0,   684,     0,     0,     0,     0,   294,
-     294,     3,   543,   468,   469,     0,     0,   246,   295,     0,
-       0,     0,     0,   294,   192,   190,     0,   187,   193,     0,
-       0,     0,     0,   197,   200,   198,   194,     0,   195,    35,
-     129,   144,   142,   244,     0,     0,   294,   415,   419,   418,
-       0,   508,     2,   509,     2,   510,   504,   294,   228,     0,
-     226,     0,   228,     3,   660,    31,   114,     2,    45,     2,
-      43,    41,    28,   112,    26,     3,   726,     3,     3,     3,
-       0,     0,   683,   685,   626,   640,   269,     2,   405,     3,
-     404,     0,   471,   468,   129,     0,     0,   129,     3,     0,
-     129,   188,     0,     2,     2,   209,   199,     0,     0,     0,
-       0,   140,   573,   613,     3,     2,     0,     0,     2,   229,
-       0,     0,   217,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   686,   687,   294,     0,   470,   152,     0,     0,
-       2,   165,   129,   154,     0,   182,     0,   129,     0,     2,
-     156,     0,     2,     0,     2,     2,     2,   196,    32,     0,
-     294,   513,   515,   506,     0,     0,     0,     0,   114,    38,
-       3,     3,   655,   627,   641,   677,   409,   129,   158,   161,
-       0,   160,   164,     3,   167,   166,     0,   129,   184,   129,
-       3,     0,   294,     0,   294,     0,     2,     0,     2,   139,
-     700,     2,   230,   231,     0,   227,   218,     0,     0,     0,
-     153,     0,     0,   163,   233,   168,     2,   235,   183,     0,
-     186,   172,   201,     3,   210,   214,   203,     3,     0,   294,
-       0,   294,     0,     0,     0,    39,    46,    44,   159,   162,
-     129,     0,   169,   294,   129,   129,     0,   173,     0,     0,
-     691,   211,   212,   213,     0,   202,     3,   204,     3,   294,
-     219,   232,   149,   170,   155,   129,   236,   185,   180,   178,
-     174,   157,   129,     0,   692,     0,     0,     0,     0,   150,
-     171,   181,   175,   179,   178,   176,     3,     3,     0,     0,
-     492,   177,   205,   207,     3,     3,   206,   208
+       0,     0,     0,     0,     0,     0,     0,   108,     2,   646,
+     452,   643,   547,   547,   651,   480,   294,     2,   585,   586,
+       0,   597,   598,     0,     2,   740,   743,   111,   294,     2,
+     294,     0,   708,   295,   712,   703,   704,   710,     0,     2,
+       2,   668,   547,   751,   617,   547,   547,   751,   547,   631,
+     547,   547,   682,   434,   665,   547,   547,   673,   680,   294,
+     429,   295,     0,     0,   294,   718,   295,   723,   751,   715,
+     294,   720,   751,   294,   294,   294,     0,   111,     0,    18,
+       5,     2,     0,    19,     0,   459,   749,     0,     0,   465,
+     241,     0,   294,     0,     0,     0,   545,   569,   573,   575,
+     605,   608,   612,   615,   568,   607,     0,   284,   658,     0,
+     294,   277,     0,     0,     0,     0,   275,     2,     0,   259,
+     536,   294,     0,     0,     0,     0,   294,   294,     0,     0,
+     692,   382,   385,   389,   547,   389,   697,   388,   689,   547,
+     547,   365,   373,   381,   374,   547,   376,   379,   294,   750,
+       0,     0,   396,   749,   295,     3,   414,     3,   418,   417,
+     591,     0,   531,   294,     3,     3,   294,   433,   295,     3,
+     427,   428,     2,     0,     0,     0,   485,   306,   294,   481,
+     483,     3,     2,     2,     0,   502,     3,     0,   554,   129,
+       0,     0,   222,     0,     0,     0,     2,     0,     0,    36,
+       0,     0,   111,   294,    20,     0,    21,     0,   692,   448,
+       0,   109,     3,     2,    27,     2,     0,    33,     0,     2,
+      25,     0,   106,   107,    73,    74,    75,    77,    78,    80,
+      81,    85,    86,    83,    84,    88,    89,    91,    93,    95,
+      97,    99,     0,     0,   752,   294,     0,     0,     0,   647,
+     648,   644,   645,   497,   496,   294,     0,     3,   294,   714,
+     294,   719,   295,   294,   294,   294,   662,   705,   661,     2,
+     294,     0,     0,     0,     0,     0,     0,     0,     0,   683,
+       0,   669,   620,   636,   670,     2,   616,   623,   431,   618,
+     619,   432,     2,   630,   639,   632,   633,   666,   667,   681,
+     709,   713,   711,   751,   268,     2,   745,     2,   422,   717,
+     722,   423,     0,   401,     3,     3,     3,     3,   453,     3,
+       0,     2,   468,   464,   750,     0,   460,   467,     2,   463,
+     466,     0,   294,   242,   264,     3,   272,   274,     0,   453,
+       2,   571,   572,     2,   610,   611,     0,   659,   537,     3,
+     346,   345,   348,   347,   294,   538,     0,   539,   294,   375,
+     377,     2,     0,     0,     0,     0,   104,   391,   693,   694,
+     386,   390,   387,   690,   691,   380,   384,   367,   398,   393,
+     399,     0,     0,     0,   436,   240,     0,     0,     3,     2,
+     668,   429,     0,   527,     0,   751,   489,     0,   294,   294,
+     294,     0,   551,   553,   130,     0,     0,   215,     0,     0,
+       0,   223,   224,    57,     0,    63,   294,     0,    61,    60,
+       0,   128,   693,   458,    70,    71,   110,   115,     3,   109,
+       0,     0,     0,    24,    35,     3,     0,    32,   102,     0,
+       3,   650,   654,   657,   649,     3,   592,     3,   716,   721,
+       2,   294,     3,     3,   295,     0,     3,   622,   626,   629,
+     638,   672,   676,   679,   294,     3,   621,   637,   671,   294,
+     294,   424,   294,   294,   746,     0,     0,     0,     0,   256,
+       0,   104,     0,     3,     3,     0,   461,     0,   457,     0,
+       0,   245,   294,     0,     0,   129,     0,     0,     0,     0,
+       0,   129,     0,     0,   109,   109,     2,     0,     0,     0,
+       3,   131,   132,     2,   143,   133,   134,   135,   136,   137,
+     138,   145,   147,     0,     0,     0,   285,   294,   294,   547,
+       0,   540,   294,   111,   696,   700,   702,   695,   383,   397,
+     394,   579,     2,   664,   663,     0,   669,     2,   482,   484,
+     504,     3,   512,   513,     0,     2,   508,     3,     3,     0,
+       0,   556,   222,     0,     0,     0,   222,     0,     0,     3,
+      37,   749,   109,     0,     3,   661,    42,     3,    40,     3,
+      34,     0,     3,   101,   103,     0,     2,   652,   653,     0,
+       0,   294,     0,     0,     0,     3,   638,     0,     2,   624,
+     625,     2,   640,     2,   674,   675,     0,     0,     3,     0,
+       3,     3,     3,     3,   409,   408,   412,     2,     2,   748,
+     747,   112,     0,     0,     0,     0,     3,   462,     3,     0,
+     243,   146,     3,   295,   294,     0,     0,     0,     0,     2,
+     191,     0,   189,     0,     0,     0,     0,     0,     0,     0,
+       0,   111,     0,   547,   151,   148,   294,     0,     0,   267,
+     279,     3,     3,   546,   613,   368,     2,   698,   699,   294,
+     266,   294,     0,   515,   492,   294,     0,     0,   491,   506,
+       0,     0,     0,   216,     0,   225,    58,   109,     0,     0,
+     116,   113,     0,     0,     0,     0,     0,     0,    23,     0,
+     655,   294,   580,   265,   724,   725,   726,     0,   677,   294,
+     294,   294,     3,     3,     0,   685,     0,     0,     0,     0,
+     294,   294,     3,   544,   469,   470,     0,     0,   246,   295,
+       0,     0,     0,     0,   294,   192,   190,     0,   187,   193,
+       0,     0,     0,     0,   197,   200,   198,   194,     0,   195,
+      35,   129,   144,   142,   244,     0,     0,   294,   416,   420,
+     419,     0,   509,     2,   510,     2,   511,   505,   294,   228,
+       0,   226,     0,   228,     3,   661,    31,   114,     2,    45,
+       2,    43,    41,    28,   112,    26,     3,   727,     3,     3,
+       3,     0,     0,   684,   686,   627,   641,   269,     2,   406,
+       3,   405,     0,   472,   469,   129,     0,     0,   129,     3,
+       0,   129,   188,     0,     2,     2,   209,   199,     0,     0,
+       0,     0,   140,   574,   614,     3,     2,     0,     0,     2,
+     229,     0,     0,   217,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   687,   688,   294,     0,   471,   152,     0,
+       0,     2,   165,   129,   154,     0,   182,     0,   129,     0,
+       2,   156,     0,     2,     0,     2,     2,     2,   196,    32,
+       0,   294,   514,   516,   507,     0,     0,     0,     0,   114,
+      38,     3,     3,   656,   628,   642,   678,   410,   129,   158,
+     161,     0,   160,   164,     3,   167,   166,     0,   129,   184,
+     129,     3,     0,   294,     0,   294,     0,     2,     0,     2,
+     139,   701,     2,   230,   231,     0,   227,   218,     0,     0,
+       0,   153,     0,     0,   163,   233,   168,     2,   235,   183,
+       0,   186,   172,   201,     3,   210,   214,   203,     3,     0,
+     294,     0,   294,     0,     0,     0,    39,    46,    44,   159,
+     162,   129,     0,   169,   294,   129,   129,     0,   173,     0,
+       0,   692,   211,   212,   213,     0,   202,     3,   204,     3,
+     294,   219,   232,   149,   170,   155,   129,   236,   185,   180,
+     178,   174,   157,   129,     0,   693,     0,     0,     0,     0,
+     150,   171,   181,   175,   179,   178,   176,     3,     3,     0,
+       0,   493,   177,   205,   207,     3,     3,   206,   208
 };
 
@@ -1556,193 +1559,193 @@
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   839,   474,   301,    45,   131,   132,   302,   303,   304,
-     305,   785,   786,  1146,  1147,   306,   307,   308,   309,   310,
-     311,   312,   313,   314,   315,   316,   317,   318,   319,  1051,
-     525,   996,   321,   997,   554,   973,  1078,  1542,  1080,  1081,
-    1082,  1083,  1543,  1084,  1085,  1459,  1460,  1421,  1422,  1423,
-    1521,  1522,  1526,  1527,  1562,  1563,  1086,  1379,  1087,  1088,
-    1313,  1314,  1315,  1503,  1089,   143,   979,   980,   981,  1400,
-    1484,  1495,  1496,   475,   476,   901,   902,  1059,    48,    49,
-      50,    51,    52,   345,   156,    55,    56,    57,    58,    59,
-     347,    61,    62,   261,    64,    65,   272,   349,   350,    68,
-      69,    70,    71,   116,    73,   202,   352,   117,    76,   118,
-      78,    79,    80,   455,   456,   457,   458,   700,   939,   701,
-      81,    82,   462,   721,   881,   882,   355,   356,   724,   725,
-     726,   357,   358,   359,   360,   472,   339,   133,   134,   529,
-     323,   168,   654,   655,   656,   657,   658,    83,   119,    85,
-     495,   496,   965,   497,   275,   501,   324,    86,   135,   136,
-      87,  1337,  1124,  1125,  1126,  1127,    88,    89,   742,    90,
-     271,    91,    92,   185,  1053,   688,   410,   123,    93,   507,
-     508,   509,   186,   266,   188,   189,   190,   267,    96,    97,
-      98,    99,   100,   101,   102,   193,   194,   195,   196,   197,
-     851,   613,   614,   615,   616,   198,   618,   619,   620,   579,
-     580,   581,   582,   705,   103,   622,   623,   624,   625,   626,
-     627,   938,   707,   708,   709,   603,   363,   364,   365,   366,
-     325,   162,   105,   106,   107,   368,   719,   576
+      -1,   840,   475,   302,    46,   132,   133,   303,   304,   305,
+     306,   786,   787,  1147,  1148,   307,   308,   309,   310,   311,
+     312,   313,   314,   315,   316,   317,   318,   319,   320,  1052,
+     526,   997,   322,   998,   555,   974,  1079,  1543,  1081,  1082,
+    1083,  1084,  1544,  1085,  1086,  1460,  1461,  1422,  1423,  1424,
+    1522,  1523,  1527,  1528,  1563,  1564,  1087,  1380,  1088,  1089,
+    1314,  1315,  1316,  1504,  1090,   144,   980,   981,   982,  1401,
+    1485,  1496,  1497,   476,   477,   902,   903,  1060,    49,    50,
+      51,    52,    53,   346,   157,    56,    57,    58,    59,    60,
+     348,    62,    63,   262,    65,    66,   273,   350,   351,    69,
+      70,    71,    72,   117,    74,   203,   353,   118,    77,   119,
+      79,    80,    81,   456,   457,   458,   459,   701,   940,   702,
+      82,    83,   463,   722,   882,   883,   356,   357,   725,   726,
+     727,   358,   359,   360,   361,   473,   340,   134,   135,   530,
+     324,   169,   655,   656,   657,   658,   659,    84,   120,    86,
+     496,   497,   966,   498,   276,   502,   325,    87,   136,   137,
+      88,  1338,  1125,  1126,  1127,  1128,    89,    90,   743,    91,
+     272,    92,    93,   186,  1054,   689,   411,   124,    94,   508,
+     509,   510,   187,   267,   189,   190,   191,   268,    97,    98,
+      99,   100,   101,   102,   103,   194,   195,   196,   197,   198,
+     852,   614,   615,   616,   617,   199,   619,   620,   621,   580,
+     581,   582,   583,   706,   104,   623,   624,   625,   626,   627,
+     628,   939,   708,   709,   710,   604,   364,   365,   366,   367,
+     326,   163,   106,   107,   108,   369,   720,   577
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -1281
+#define YYPACT_NINF -1356
 static const yytype_int16 yypact[] =
 {
-    3705,  8889, -1281,   104, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281,    44, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281, -1281, -1281, -1281,   155,   155,   155,  1205,   815,
-     110,  6006,   222, -1281, -1281, -1281, -1281, -1281,   130, -1281,
-   -1281, -1281,  1267,   189,  3199, -1281, -1281, -1281, -1281, -1281,
-   -1281,    31,   144, -1281,  1338, -1281, -1281, -1281, -1281,   153,
-    1410,   279,    82,  7674, -1281, -1281,  8086,  1234, -1281, -1281,
-   -1281,   981,   359,  7231,   925,   669,   981,  1012, -1281, -1281,
-     738,   575, -1281,   981,  1119, -1281,   242, -1281,   416,   419,
-   -1281, -1281, -1281, -1281,   277,   144,   155, -1281,   155, -1281,
-   -1281, -1281, -1281,  9536,  1338, -1281, -1281,  1338, -1281,  9574,
-     321, -1281, -1281, -1281,  2195,  9607, -1281,   565,   565,   565,
-   -1281, -1281, -1281,   155, -1281, -1281, -1281,   280,   366,   418,
-   -1281, -1281, -1281,   425, -1281, -1281, -1281, -1281, -1281,   443,
-     475, -1281, -1281,   120,  8972,  3739,   375,   387,   486,   496,
-     514,   527,   541,  8273,  7081,   550,   568, -1281,  9460, -1281,
-   -1281, -1281, -1281,   602, -1281,   121,  4456,  4456, -1281,   552,
-     298, -1281, -1281, -1281, -1281,   634,   302,   306,   327,   155,
-     590, -1281, -1281,  1410,  2454,   696, -1281,    90, -1281,   155,
-     155,   144, -1281, -1281,   124, -1281,   155,   155, -1281,  2638,
-     658,   667,   565,  6993, -1281, -1281,   678,  3199, -1281, -1281,
-     981, -1281, -1281, -1281,   144, -1281,  1338,    31, -1281,  8010,
-   -1281,   565,   565,   565,   144, -1281,  1205, -1281,  5198, -1281,
-   -1281,   673,   565, -1281,   565, -1281,   130,  8972,  9002,   686,
-   -1281,   815,   694,   565, -1281,  1205,   728,   736, -1281,  6006,
-     544, -1281, -1281, -1281,  9431, -1281, -1281,  3957, -1281,   696,
-      79,  9607,  6464,  2195,  2638, -1281,   157, -1281, -1281,  9574,
-    1338,   717,  7703, -1281, -1281,   699, -1281, 10744,   783,   831,
-    3925,   787,  6306, 10567, -1281,   827, -1281, -1281, -1281, -1281,
-   10625, 10625,   544,  8633,   829,  6306,  9085, -1281, -1281, -1281,
-   -1281, -1281, -1281,   862, -1281,  1121,  2197,  6306, -1281,   599,
-     388,   472,   354,   593,   830,   867,   873,   970,   245, -1281,
-   -1281,   874,   650, -1281,   325, -1281, -1281,  3739, -1281, -1281,
-     585,   901, -1281,   747,   901,   958,   130, -1281, -1281,   962,
-    9536, -1281,   977,  8746, -1281, -1281,   957,   935,  8355,  6993,
-     981, -1281,   981,   565,   565, -1281, -1281, -1281, -1281, -1281,
-   -1281,   565,  9645,  1338, -1281, -1281,  9683,  1067, -1281,  9123,
-   -1281, -1281, -1281, -1281, -1281, -1281, -1281,   990,  5315,  6306,
-   -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281, -1281, -1281,  2195, -1281,   846,   996,   998,  1002,
-     864,  1005,  1008,  1026,  2454, -1281, -1281,  1031,    31,  1033,
-   -1281, -1281,  1061, -1281, -1281, -1281,  9431, -1281, -1281, -1281,
-   -1281, -1281,  2638, -1281,  8972,  8972, -1281,   565,  2195,  7112,
-    1338,  8426, -1281, -1281, -1281, -1281,  9431,    79, -1281, -1281,
-     981,   144, -1281, -1281,  9431, -1281,  6877, -1281, -1281,   565,
-     565,   376,  9716,  1035,  1868,  2111, -1281,   334,   338,   815,
-   -1281,  9002,  1059,  1047,   815,   565, -1281, -1281, -1281, -1281,
-    9940, -1281,   583,  6755, -1281,   144,  1065, -1281,  2195, 10825,
-   10471, -1281, -1281, -1281, -1281,   889,  2638, -1281,  8497,   696,
-    7558, -1281, -1281, -1281,  1286,   636,   874,   815,  7703,   868,
-    9574, -1281,  7703, -1281, -1281, -1281, -1281,   638, -1281,  1073,
-     831,   207,  8633, -1281,  9716, -1281, -1281,  8633, -1281,  8859,
-    8633, -1281, -1281, -1281,  1071, -1281,   681,  1077,   668,  1078,
-   -1281,  4381,  6724, -1281, -1281, -1281,   328, -1281, -1281, 10490,
-   -1281,   385, 10490, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281, -1281,  6464,  6464, -1281,  6306,  6306,  6306,  6306,
-    6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,  6306,
-    6306,  6306,  6306,  6306,  4789,  6464, -1281,   650,  1062, -1281,
-   -1281,   155,   155, -1281, -1281,  8972, -1281, -1281,  1061,   544,
-   -1281,  1061, 10548, -1281, -1281, -1281,  5232,  6724,  1079,  9198,
-    1080, -1281,  9754, -1281, -1281,   602, -1281,  1082,  1185,  1084,
-    1899,   185,   874, -1281,   155,   155,   874,   233, -1281,   155,
-     155,  1061, -1281, -1281,   155,   155, -1281,   901,  9792,  1338,
-   10968,   234,   509,  9792, -1281,  5821, -1281,   874, -1281,  9645,
-   -1281,   293,  5525,  5525,  5525,  1338, -1281,  5054,  1072,   558,
-     990,  1016,  1083,  1086, -1281,  1074,  4456,   592, -1281,  1172,
-    1338,  5525,   544,  2195,   544,   696,   809,   901, -1281, -1281,
-     814,   901, -1281, -1281, -1281,   831, -1281,   901,   144,  9940,
-   -1281,   682,  1095,   691,  1099, -1281,  1098,   144, -1281, -1281,
-    9431,   144,  1103,   362,   407,  9825,  7200,  1999,  6306,  1917,
-   -1281, -1281,  1101,    94,  1101, -1281, -1281, -1281,   155,   155,
-   -1281, -1281,   815, -1281,   155, -1281, -1281,  3122,   815,  1107,
-    6306, -1281,  1059, 10968, -1281, -1281,  1102, -1281, -1281, -1281,
-     544, -1281, 10897,  6306, -1281,  5525,   675,  8355, -1281, -1281,
-     602,  1108,  1109,  1286,  3745, -1281, -1281,  7703, -1281, -1281,
-    1111, -1281, -1281,  1116, -1281,  1111,  1128, 10744,  6464,   146,
-    1113,    53,  1136,  1115,  1137,   829,  1131,  1139, -1281,  1142,
-    1143,  1696,  6843, -1281,  6464, -1281,   668,  1691, -1281,  6022,
-    6464,  1138, -1281, -1281,   990,   708, -1281,  6464, -1281, -1281,
-     727, -1281, -1281, -1281, -1281, -1281,   599,   599,   388,   388,
-     472,   472,   472,   472,   354,   354,   593,   830,   867,   873,
-     970,  6306,   755, -1281,  9940,  1148,  1149,  1152,  1062, -1281,
-   -1281, -1281, -1281, -1281,  9940,   713,  6306,  5525, -1281,  9645,
-   -1281,  7319,  9311,  9236,  7081, -1281, -1281, -1281,  1185,  9940,
-     951,  1160,  1163,  1165,  1166,  1175,  1176,  1182, -1281,  3532,
-    1899, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1061, -1281,
-   -1281, -1281,   874, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281,  1183, -1281,  1187,  1189, -1281, -1281,    31,  1138,  5054,
-   -1281, -1281, -1281,  5315,  1180, -1281, -1281, -1281, -1281, -1281,
-     815,  6243,  1272, -1281, -1281, -1281, -1281,  1188,    31, -1281,
-   -1281,  1061, -1281, -1281,  1061,    70,  1061, -1281, -1281, -1281,
-   -1281, -1281, -1281,  9498, -1281,   144, -1281,  9002, -1281, -1281,
-    1201,   818,  1208,  1212,  1213, -1281, -1281,  1917, -1281, -1281,
-   -1281, -1281, -1281, -1281, -1281,  1868, -1281,  1047, -1281, -1281,
-    1210,  1216,  1211, -1281, -1281,  1218,  1223, -1281,   675,  1777,
-   -1281,   562, -1281,  3745,   874, -1281,  1226,  7703,  9863,  8972,
-    1230, -1281, -1281,  1225,  1235,  1238, -1281,  6306,   252,    40,
-    1231, -1281,  1242,   544,  1242,  6724,  6464, -1281, -1281,  1242,
-   -1281,  1691,  5315, -1281, -1281, -1281, -1281,  1236,  6464,  1245,
-     544,  5054, -1281, 10490, -1281,   544, -1281, -1281,  6464, -1281,
-     850,   901, -1281, -1281, -1281, -1281, -1281, -1281, -1281,   990,
-    8746, -1281, -1281,  7438,  1249, -1281,   856,   901, -1281,   872,
-     904,   901, -1281,   565,  4646, -1281, -1281, -1281,  9940,  9940,
-   -1281,  8426,  8426, -1281,  1252,  1255,  1264,  1271, -1281,  1253,
-     594,   247,  1138, -1281,   544, -1281,  4456, -1281,  6464,   459,
-   -1281,  6603,  1274,  1279, 10343,  1281,  1283,   301,   308,   344,
-    6464,  1285,   144,  6464,  6464,  1284,   498,  1282,  1268, -1281,
-   -1281, -1281,  1289, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281,   815,  1296,  6464, -1281,  9940,  9940,   155,  1301,
-   -1281,  9349,  4935,   934,   901, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281, -1281, -1281,  1305,  1777, -1281, -1281,  1290, -1281,
-    1111, -1281, -1281,  2195,  1309, -1281, -1281, -1281,   734,  1312,
-   -1281,    53,  1317,  6306,  1303,    53,    53,  1327,  1323, -1281,
-    1074,  6464,  1328,  1236,  1036,   113,  1326, -1281,  1323, -1281,
-    1331,  1326, -1281, -1281,  1337, -1281, -1281,  1061,  1340,  1343,
-    6962,  1342,  1344,  1350, -1281, -1281,  1353, -1281, -1281,  1061,
-   -1281, -1281, -1281, -1281,  1061,  6464,  6464,  6306,  1355, -1281,
-   -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281,
-   -1281,  6306,  6306,  1356,  1357,  1326, -1281, -1281,   815, -1281,
-   -1281, -1281,  7939,  9863,  6464,  6464,  1423,  6464, -1281, -1281,
-    1341, -1281,  1345,  6464,  1347,  1358,  6464,  1097,  1360,    74,
-    8776,  1197,   155, -1281, -1281,  6243,  1361,   467, -1281, -1281,
-   -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1061, 10467, -1281,
-    8497,  1362, -1281, -1281,  9863,   482,   494, -1281,  1372,  1383,
-     831,  1394, -1281,    66, -1281, -1281,  6464,  1395,  1393, -1281,
-   -1281,  1399,   430,   657,   544,  1400,  1401, -1281,  1406, -1281,
-    9940, -1281, -1281, -1281, -1281, -1281,  1412, -1281,  9940,  9940,
-    9940, -1281, -1281,  1413, -1281,  1415,  1425,  1427,   623,  8125,
-    8240, -1281, -1281,   278, -1281,  1426,  1429, -1281,  8568,   745,
-     759,  1430,   769,  6445, -1281, -1281,   502, -1281, -1281,   770,
-    1434,  1436,   144,  1487,   911, -1281, -1281,  6464, -1281, 10490,
-   10343, -1281, -1281, -1281,  1442,  1444,  9940, -1281, -1281, -1281,
-    1437, -1281, -1281, -1281, -1281, -1281, -1281,  9863,   831,   269,
-   -1281,  1424,   831,  1236,   373, -1281, -1281, -1281, -1281, -1281,
-   -1281, -1281, -1281,  1443, -1281, -1281, -1281, -1281, -1281, -1281,
-    1452,  1454, -1281, -1281, -1281, -1281, -1281, -1281, -1281,  1458,
-   -1281,  1457, -1281, -1281, 10343,   148,  6464, 10343, -1281,  1462,
-    6464, -1281,   171,  1484,  1486, -1281, -1281,  1465,  1476,  1455,
-     905, -1281, -1281, -1281, -1281, -1281,  1338,  2195,  1471,   862,
-     918,  6306, -1281,   772,  1477,  6464,   544,   544,  1480,  1482,
-    1483,  1485, -1281, -1281,  8426,  1472, -1281,  1555,  6306,  1493,
-   -1281, -1281, 10254, -1281,   790, -1281,  1467, 10343,  1468, -1281,
-   -1281,  1511, -1281,  1513, -1281,  1507,  1529, -1281,  1496,  1519,
-    9863, -1281, -1281, -1281,   831,   544,  1520,  1499,  1515, -1281,
-    1326,  1326, -1281, -1281, -1281, -1281, -1281, 10343,   258, -1281,
-     922, -1281, -1281,  7790, -1281, -1281,  1501,  6464, -1281,  6464,
-    7790,   144,  9716,   144,  9716,  1528, -1281,  1530, -1281, -1281,
-   -1281,  1524,   862, -1281,   794, -1281, -1281,  6464,  1540,  1542,
-   -1281,  6306,  6306, -1281, -1281,  1051,   133, -1281, -1281,  1510,
-   -1281,  1051, -1281, -1281,  2099,   544, -1281, -1281,   144,  9716,
-     144,  9716,  1546,  1525,   544, -1281, -1281, -1281, -1281, -1281,
-   10254,  1541,  1051,  7866,  6464, 10165,  1543,  1051,  1551,  2099,
-    2338, -1281, -1281, -1281,  1552, -1281, -1281, -1281, -1281,  8972,
-   -1281, -1281, -1281, 10072, -1281, 10254, -1281, -1281,  1531,  9979,
-   -1281, -1281, 10165,   144,  2338,   144,  1557,  1559,   795, -1281,
-   10072, -1281, -1281, -1281,  9979, -1281, -1281, -1281,   144,   144,
-   -1281, -1281, -1281, -1281, -1281, -1281, -1281, -1281
+    5863,  4890, -1356,    65, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356,     9, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356, -1356, -1356, -1356,   139,   139,   139,  1216,
+     781,    63,  4761,   238, -1356, -1356, -1356, -1356, -1356,   165,
+   -1356, -1356, -1356,   572,   207,  2350, -1356, -1356, -1356, -1356,
+   -1356, -1356,    59,   217, -1356,  1506, -1356, -1356, -1356, -1356,
+     220,  1734,   341,    66,  7480, -1356, -1356,  9240,  1240, -1356,
+   -1356, -1356,  1320,   351,  3183,  1125,   757,  1320,  1149, -1356,
+   -1356,  1042,   895, -1356,  1320,  1227, -1356,   243, -1356,   378,
+     403, -1356, -1356, -1356, -1356,   303,   217,   139, -1356,   139,
+   -1356, -1356, -1356, -1356,  9019,  1506, -1356, -1356,  1506, -1356,
+    9774,   314, -1356, -1356, -1356,  1811,  9812, -1356,   726,   726,
+     726, -1356, -1356, -1356,   139, -1356, -1356, -1356,   353,   381,
+     400, -1356, -1356, -1356,   417, -1356, -1356, -1356, -1356, -1356,
+     424,   436, -1356, -1356,    28,  8867,  2398,   371,   447,   459,
+     467,   482,   495,   557,  8670,  6999,   468,   584, -1356,  9350,
+   -1356, -1356, -1356, -1356,   594, -1356,   335,  4628,  4628, -1356,
+     575,   352, -1356, -1356, -1356, -1356,   602,   432,   434,   470,
+     139,   624, -1356, -1356,  1734,  1711,   656, -1356,    68, -1356,
+     139,   139,   217, -1356, -1356,    93, -1356,   139,   139, -1356,
+    2093,   670,   699,   726,  6910, -1356, -1356,   654,  2350, -1356,
+   -1356,  1320, -1356, -1356, -1356,   217, -1356,  1506,    59, -1356,
+    7819, -1356,   726,   726,   726,   217, -1356,  1216, -1356,  6673,
+   -1356, -1356,   659,   726, -1356,   726, -1356,   165,  8867,  8784,
+     714, -1356,   781,   740,   726, -1356,  1216,   737,   749, -1356,
+    4761,   791, -1356, -1356, -1356,  4061, -1356, -1356,  7390, -1356,
+     656,    62,  9812, 10718,  1811,  2093, -1356,   152, -1356, -1356,
+    9774,  1506,   770,  7511, -1356, -1356,   269, -1356,  3425,   779,
+     827,  3643,   814, 10872, 10930, -1356,   817, -1356, -1356, -1356,
+   -1356, 10949, 10949,   791,  8525,   818, 10872,  8981, -1356, -1356,
+   -1356, -1356, -1356, -1356,   855, -1356,   889,  2173, 10872, -1356,
+     498,   751,   809,   524,   880,   822,   831,   819,   869,     5,
+   -1356, -1356,   883,    64, -1356,   116, -1356, -1356,  2398, -1356,
+   -1356,   516,   900, -1356,   644,   900,   913,   165, -1356, -1356,
+     915,  9019, -1356,   916,  8639, -1356, -1356,  1004,  1539,  8240,
+    6910,  1320, -1356,  1320,   726,   726, -1356, -1356, -1356, -1356,
+   -1356, -1356,   726,  9885,  1506, -1356, -1356,  9923,  1500, -1356,
+    7969, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   929,  5043,
+   10872, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356, -1356, -1356,  1811, -1356,   876,   936,   938,
+     944,   885,   947,   954,   957,  1711, -1356, -1356,   930,    59,
+     960, -1356, -1356,   970, -1356, -1356, -1356,  4061, -1356, -1356,
+   -1356, -1356, -1356,  2093, -1356,  8867,  8867, -1356,   726,  1811,
+    7030,  1506,  8313, -1356, -1356, -1356, -1356,  4061,    62, -1356,
+   -1356,  1320,   217, -1356, -1356,  4061, -1356,  6793, -1356, -1356,
+     726,   726,   472,  9953,   974,  1092,  5671, -1356,   521,   543,
+     781, -1356,  8784,   976,   959,   781,   726, -1356, -1356, -1356,
+   -1356, 10252, -1356,   560,  6550, -1356,   217,   981, -1356,  1811,
+   11070, 10776, -1356, -1356, -1356, -1356,   921,  2093, -1356,  8386,
+     656,  6061, -1356, -1356, -1356,   820,   612,   883,   781,  7511,
+    1338,  9774, -1356,  7511, -1356, -1356, -1356, -1356,   638, -1356,
+     994,   827,   255,  8525, -1356,  9953, -1356, -1356,  8525, -1356,
+    8753,  8525, -1356, -1356, -1356,   993, -1356,   665,   998,   161,
+    1002, -1356,  9490,  6639, -1356, -1356, -1356,   290, -1356, -1356,
+   10795, -1356,   366, 10795, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356, -1356, 10718, 10718, -1356, 10872, 10872, 10872,
+   10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872, 10872,
+   10872, 10872, 10872, 10872, 10872,  5362, 10718, -1356,    64,  1168,
+   -1356, -1356,   139,   139, -1356, -1356,  8867, -1356, -1356,   970,
+     791, -1356,   970, 10853, -1356, -1356, -1356,  3524,  6639,  1016,
+    9095,  1028, -1356, 10035, -1356, -1356,   594, -1356,  1029,   776,
+    1036,  1922,   164,   883, -1356,   139,   139,   883,   174, -1356,
+     139,   139,   970, -1356, -1356,   139,   139, -1356,   900, 10065,
+    1506, 11215,   233,   347, 10065, -1356, 10214, -1356,   883, -1356,
+    9885, -1356,   125,  7935,  7935,  7935,  1506, -1356,  6115,  1033,
+     414,   929,  1150,  1037,  1038, -1356,  1054,  4628,   555, -1356,
+    1124,  1506,  7935,   791,  1811,   791,   656,   704,   900, -1356,
+   -1356,   729,   900, -1356, -1356, -1356,   827, -1356,   900,   217,
+   10252, -1356,   666,  1061,   679,  1062, -1356,  1065,   217, -1356,
+   -1356,  4061,   217,  1059,   553,   573, 10103,  7119,  1590, 10872,
+    1954, -1356, -1356,  1066,    39,  1066, -1356, -1356, -1356,   139,
+     139, -1356, -1356,   781, -1356,   139, -1356, -1356,  9630,   781,
+    1069, 10872, -1356,   976, 11215, -1356, -1356,  1075, -1356, -1356,
+   -1356,   791, -1356, 11143, 10872, -1356,  7935,   588,  8240, -1356,
+   -1356,   594,  1072,  1077,   820,  2542, -1356, -1356,  7511, -1356,
+   -1356,  1074, -1356, -1356,  1088, -1356,  1074,  1090,  3425, 10718,
+     205,  1073,    47,  1094,  1082,  1100,   818,  1102,  1110, -1356,
+    1113,  1117,  9661,  6759, -1356, 10718, -1356,   161,  1861, -1356,
+    6396, 10718,  1120, -1356, -1356,   929,   689, -1356, 10718, -1356,
+   -1356,   865, -1356, -1356, -1356, -1356, -1356,   498,   498,   751,
+     751,   809,   809,   809,   809,   524,   524,   880,   822,   831,
+     819,   869, 10872,   875, -1356, 10252,  1119,  1140,  1142,  1168,
+   -1356, -1356, -1356, -1356, -1356, 10252,   691, 10872,  7935, -1356,
+    9885, -1356,  7239,  9209,  8905,  6999, -1356, -1356, -1356,   776,
+   10252,   927,  1145,  1152,  1158,  1159,  1162,  1166,  1172, -1356,
+    4275,  1922, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   970,
+   -1356, -1356, -1356,   883, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356,  1176, -1356,  1183,  1185, -1356, -1356,    59,  1120,
+    6115, -1356, -1356, -1356,  5043,  1144, -1356, -1356, -1356, -1356,
+   -1356,   781,  6242,  1231, -1356, -1356, -1356, -1356,  1165,    59,
+   -1356, -1356,   970, -1356, -1356,   970,    29,   970, -1356, -1356,
+   -1356, -1356, -1356, -1356,  9380, -1356,   217, -1356,  8784, -1356,
+   -1356,  1190,   906,  1187,  1193,  1198, -1356, -1356,  1954, -1356,
+   -1356, -1356, -1356, -1356, -1356, -1356,  1092, -1356,   959, -1356,
+   -1356,  1195,  1202,  1201, -1356, -1356,  1206,  1210, -1356,   588,
+    2182, -1356,   533, -1356,  2542,   883, -1356,  1213,  7511, 10176,
+    8867,  1220, -1356, -1356,  1218,  1222,  1224, -1356, 10872,   230,
+      -1,  1219, -1356,  1225,   791,  1225,  6639, 10718, -1356, -1356,
+    1225, -1356,  1861,  5043, -1356, -1356, -1356, -1356,  1236, 10718,
+    1233,   791,  6115, -1356, 10795, -1356,   791, -1356, -1356, 10718,
+   -1356,   782,   900, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
+     929,  8639, -1356, -1356,  7359,  1237, -1356,   807,   900, -1356,
+     825,   836,   900, -1356,   726,  4460, -1356, -1356, -1356, 10252,
+   10252, -1356,  8313,  8313, -1356,  1241,  1248,  1246,  1259, -1356,
+    1262,   672,   244,  1120, -1356,   791, -1356,  4628, -1356, 10718,
+     578, -1356,  6519,  1267,  1271, 10660,  1272,  1277,   122,   304,
+     298, 10718,  1279,   217, 10718, 10718,  1280,   678,  1254,  1261,
+   -1356, -1356, -1356,  1284, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356,   781,  1290, 10718, -1356, 10252, 10252,   139,
+    1292, -1356,  9743,  9520,   847,   900, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356, -1356, -1356,  1293,  2182, -1356, -1356,  1275,
+   -1356,  1074, -1356, -1356,  1811,  1296, -1356, -1356, -1356,   706,
+    1291, -1356,    47,  1305, 10872,  1288,    47,    47,  1314,  1310,
+   -1356,  1054, 10718,  1315,  1236,   711,   214,  1317, -1356,  1310,
+   -1356,  1323,  1317, -1356, -1356,  1328, -1356, -1356,   970,  1329,
+    1330,  6879,  1331,  1339,  1341, -1356, -1356,  1340, -1356, -1356,
+     970, -1356, -1356, -1356, -1356,   970, 10718, 10718, 10872,  1344,
+   -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
+   -1356, -1356, 10872, 10872,  1347,  1349,  1317, -1356, -1356,   781,
+   -1356, -1356, -1356,  7746, 10176, 10718, 10718,  1394, 10718, -1356,
+   -1356,  1333, -1356,  1334, 10718,  1335,  1343, 10718,   992,  1345,
+      36,  8158,  1229,   139, -1356, -1356,  6242,  1348,   585, -1356,
+   -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356,   970, 10478,
+   -1356,  8386,  1360, -1356, -1356, 10176,   592,   598, -1356,  1356,
+    1355,   827,  1366, -1356,   179, -1356, -1356, 10718,  1368,  1363,
+   -1356, -1356,  1369,   484,   663,   791,  1376,  1378, -1356,  1380,
+   -1356, 10252, -1356, -1356, -1356, -1356, -1356,  1382, -1356, 10252,
+   10252, 10252, -1356, -1356,  1386, -1356,  1389,  1392,  1393,   682,
+    8008,  8124, -1356, -1356,   370, -1356,  1396,  1397, -1356,  8459,
+     715,   725,  1395,   760,  6377, -1356, -1356,   641, -1356, -1356,
+     796,  1402,  1403,   217,  1453,   961, -1356, -1356, 10718, -1356,
+   10795, 10660, -1356, -1356, -1356,  1406,  1407, 10252, -1356, -1356,
+   -1356,  1405, -1356, -1356, -1356, -1356, -1356, -1356, 10176,   827,
+     287, -1356,  1388,   827,  1236,   361, -1356, -1356, -1356, -1356,
+   -1356, -1356, -1356, -1356,  1408, -1356, -1356, -1356, -1356, -1356,
+   -1356,  1411,  1412, -1356, -1356, -1356, -1356, -1356, -1356, -1356,
+    1418, -1356,  1417, -1356, -1356, 10660,   272, 10718, 10660, -1356,
+    1422, 10718, -1356,   306,  1438,  1441, -1356, -1356,  1430,  1431,
+    1413,   918, -1356, -1356, -1356, -1356, -1356,  1506,  1811,  1433,
+     855,   946, 10872, -1356,   801,  1439, 10718,   791,   791,  1442,
+    1448,  1449,  1450, -1356, -1356,  8313,  1452, -1356,  1535, 10872,
+    1462, -1356, -1356, 10571, -1356,   803, -1356,  1460, 10660,  1463,
+   -1356, -1356,  1489, -1356,  1493, -1356,  1511,  1512, -1356,  1480,
+    1508, 10176, -1356, -1356, -1356,   827,   791,  1514,  1484,  1509,
+   -1356,  1317,  1317, -1356, -1356, -1356, -1356, -1356, 10660,   301,
+   -1356,   958, -1356, -1356,  7597, -1356, -1356,  1502, 10718, -1356,
+   10718,  7597,   217,  9953,   217,  9953,  1515, -1356,  1522, -1356,
+   -1356, -1356,  1520,   855, -1356,   811, -1356, -1356, 10718,  1526,
+    1527, -1356, 10872, 10872, -1356, -1356,  1055,   154, -1356, -1356,
+    1510, -1356,  1055, -1356, -1356,  1716,   791, -1356, -1356,   217,
+    9953,   217,  9953,  1532,  1517,   791, -1356, -1356, -1356, -1356,
+   -1356, 10571,  1528,  1055,  7673, 10718, 10482,  1531,  1055,  1537,
+    1716,  2045, -1356, -1356, -1356,  1545, -1356, -1356, -1356, -1356,
+    8867, -1356, -1356, -1356, 10349, -1356, 10571, -1356, -1356,  1529,
+   10256, -1356, -1356, 10482,   217,  2045,   217,  1558,  1559,   815,
+   -1356, 10349, -1356, -1356, -1356, 10256, -1356, -1356, -1356,   217,
+     217, -1356, -1356, -1356, -1356, -1356, -1356, -1356, -1356
 };
 
@@ -1750,28 +1753,28 @@
 static const yytype_int16 yypgoto[] =
 {
-   -1281,  4254,  1590, -1281,  1409, -1281,    52,     0,  -229, -1281,
-     596,  -527,  -497,  -931,   -99,  4508, -1281,   358,   609,   563,
-     518,   591,  1104,  1105,  1110,  1117,  1112, -1281,   613,  -339,
-    5346,  -893,  -690,  -919, -1281,   401,  -634,   444, -1281,   753,
-   -1281,   449, -1224, -1281, -1281,   191, -1281, -1265,  -724,   305,
-   -1281, -1281, -1281, -1281,   129, -1170, -1281, -1281, -1281, -1281,
-   -1281, -1281,   382, -1175,    71, -1281,  -381, -1281,   560,   356,
-   -1281,   229, -1281,  -338, -1281, -1281, -1281,   632,  -691, -1281,
-   -1281,    11, -1000,    10,  2865, -1281, -1281, -1281,  -125, -1281,
-     275,   363,  -194,  1416,  4157, -1281, -1281,    24,    25,   374,
-    -202,  1621, -1281,  2138, -1281, -1281,   112,  2165, -1281,  2832,
-     139, -1281, -1281,  -416,  -434,  1276,  1278,   786,  1028,   400,
-   -1281, -1281,  1269,   793,  -513, -1281,  -522,   -57,  -636, -1281,
-   -1281,  -959,  -994,   122,   819,  1153,   135, -1281,  1441,   296,
-    -299,  -212,  -109,   749,   844, -1281,  1087, -1281,  2859,  1478,
-    -462,  1000, -1281, -1281,   778, -1281,  -233, -1281,   -72, -1281,
-   -1281, -1281, -1232,   504, -1281, -1281, -1281,  1259, -1281,    68,
-   -1281, -1281,  -850,   -96, -1280,   -93,  1665, -1281,  2401, -1281,
-     993, -1281,  -164,   689,  -177,  -176,  -170,     2,   -39,   -33,
-     -28,  1052,    48,    75,    93,  -100,  -167,  -166,  -153,  -148,
-    -277,  -569,  -500,  -490,  -543,  -300,  -514, -1281, -1281,  -506,
-    1174,  1177,  1181,  2149,  5126,  -572,  -549,  -544,  -523,  -484,
-   -1281,  -427,  -665,  -663,  -660,  -602,  -320,  -271, -1281, -1281,
-     102,   140,   -84, -1281,  3728,   128,  -603,  -447
+   -1356,  4068,  1513, -1356,  1381, -1356,    41,     0,  -254, -1356,
+     593,  -523,  -482,  -960,  -143,  5028, -1356,  -101,   576,   581,
+     386,   577,  1101,  1105,  1106,  1099,  1107, -1356,  -593,  -585,
+    4966,  -933,  -708,  -942, -1356,  -273,  -719,   379, -1356,  1404,
+   -1356,   457, -1092, -1356, -1356,   195, -1356,  -844, -1059,   308,
+   -1356, -1356, -1356, -1356,   124, -1118, -1356, -1356, -1356, -1356,
+   -1356, -1356,   382, -1355,    53, -1356,  -496, -1356,   558,   349,
+   -1356,   226, -1356,  -307, -1356, -1356, -1356,   610,  -832, -1356,
+   -1356,    13,  -961,   169,  2725, -1356, -1356, -1356,   -79, -1356,
+     189,   845,  -184,  1482,  3902, -1356, -1356,   192,   133,   657,
+    -251,  1620, -1356,  1796, -1356, -1356,   156,  2416, -1356,  2575,
+     798, -1356, -1356,  -404,  -428,  1252,  1253,   761,  1003,   302,
+   -1356, -1356,  1245,   764,  -253, -1356,   -24,  -132,  -469, -1356,
+   -1356,  -983,  -881,     4,   862,  1128,   -43, -1356,   561,  -100,
+    -262,  -193,  -152,   721,   826, -1356,  1071, -1356,  2692,   907,
+    -449,   971, -1356, -1356,   765, -1356,  -227, -1356,   -60, -1356,
+   -1356, -1356, -1248,   485, -1356, -1356, -1356,  1242, -1356,    45,
+   -1356, -1356,  -846,  -109, -1333,  -138,  3289, -1356,  1880, -1356,
+     969, -1356,  -161,   268,  -181,  -177,  -175,     2,   -39,   -35,
+     -33,   769,    30,    31,    69,  -146,  -162,  -151,  -147,  -140,
+    -277,  -521,  -506,  -484,  -575,  -313,  -516, -1356, -1356,  -528,
+    1156,  1157,  1163,  2484,  4688,  -570,  -557,  -534,  -533,  -478,
+   -1356,  -432,  -693,  -685,  -681,  -580,  -201,  -236, -1356, -1356,
+     265,   180,   -86, -1356,  3600,   232,  -625,  -376
 };
 
@@ -1779,2227 +1782,2277 @@
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -522
+#define YYTABLE_NINF -523
 static const yytype_int16 yytable[] =
 {
-      46,   111,    95,   147,   451,   438,   397,   398,   426,   148,
-      53,   113,   112,   399,   149,   790,   400,   401,   265,   258,
-     405,   711,   767,   604,    66,    67,   870,   706,   111,   111,
-     402,    46,   932,    95,   933,   403,   750,   934,   853,   841,
-     755,    53,    46,   918,    46,   717,   159,   617,  1185,   748,
-     511,  1091,   894,   110,    46,    66,    67,   381,   382,   845,
-      46,  1201,   191,    46,   846,   214,    46,   852,   224,   341,
-     612,    47,   819,   208,  1151,   504,   218,   217,   678,  1143,
-     111,   111,  1183,  1184,   406,   847,   397,   398,   210,   994,
-     150,   636,   408,   399,   844,   640,   400,   401,   687,   141,
-     405,   778,    47,   423,    46,  1398,   691,    46,   842,   200,
-     402,   932,    74,   933,    46,   403,   934,   151,   843,   950,
-     883,   883,   883,  1195,   974,   682,   684,   856,    30,   477,
-     885,   886,    30,   863,   289,   152,  1317,   166,  1461,   883,
-     104,   104,   407,    74,   147,    46,   161,   159,   904,  1134,
-     148,   535,   121,    46,   445,   149,  1135,  1465,    46,   201,
-     371,   167,    30,   977,   406,   857,   481,   483,   739,   860,
-     278,   104,   164,   466,   841,  1341,  -234,  -234,  1009,  1098,
-    1218,  1219,  1342,    46,    46,   120,   159,   482,  1014,   175,
-     877,  1418,  1419,    30,   880,    30,   676,  1262,   250,    46,
-     409,   754,   212,  1025,   409,  1318,   104,    46,  1481,   159,
-    1090,   161,  1461,   883,  1418,  1419,    46,   745,   140,    46,
-     769,   441,   957,    30,   147,  1263,   111,   535,   279,   439,
-     148,   150,   417,   142,   409,   149,   375,   164,   144,   259,
-     673,   111,   260,   842,   440,   111,  1185,  -234,  1259,    46,
-     111,    95,   376,   843,   212,  1465,   595,   169,   151,    53,
-    1465,  1420,   975,    46,    46,   487,   159,   409,   179,   841,
-      46,    30,   326,    66,    67,    60,   152,    46,  1037,   604,
-    1465,   759,   199,   711,  1429,   341,   823,  1465,   535,   845,
-     702,   477,   111,   854,   846,   609,  1185,   212,   665,  1507,
-     153,  1549,   471,  1201,   674,   883,    60,  1036,   604,   433,
-     617,   477,  1013,   604,  1016,   847,   760,   469,  1153,   477,
-      47,  1560,   673,   761,  1024,   830,   680,    46,  1564,   371,
-    1183,  1184,   685,   535,  1536,   434,  1538,  1343,   842,   573,
-     459,   861,  1191,   609,   523,   873,    46,    46,   843,   874,
-     535,   437,   925,  1491,   704,  1550,   856,   245,   212,   936,
-    1133,    74,  -290,    46,   114,   326,    74,    46,   879,  1192,
-    1200,   433,   108,   210,   574,  1091,   739,  1401,   652,   108,
-    1192,   949,  1565,    40,    41,   250,   674,   853,   -10,   104,
-      40,    41,  -112,  -112,    46,   530,   212,   434,   161,   108,
-     212,   482,  1180,  1181,    46,   489,   371,   157,  -112,   845,
-      40,    41,   506,   385,   846,   108,   248,   388,   870,  -517,
-    1185,   390,    46,   575,   164,  1040,    40,    41,    46,   386,
-      46,   738,  1209,   389,   584,   847,  1215,   391,   782,  1211,
-     585,   227,   392,   563,   564,   228,   915,   341,   232,   712,
-     234,   262,   739,   714,    46,  1456,   108,   243,   393,   111,
-    1230,  1231,  1213,  1201,   111,   713,   256,    40,    41,   715,
-    1201,   606,   157,   111,  -440,  1450,  1451,   712,    46,   565,
-     566,   175,  -112,   250,   328,   692,    46,   212,   371,  1405,
-      46,   585,    95,   928,    46,   788,   329,   111,   637,   111,
-      53,   108,   641,  -112,   210,  1120,  1149,   322,   559,   560,
-    1106,  1101,    40,    41,    66,    67,   338,  1117,   706,   652,
-     397,   398,   714,  1201,    60,   110,  -441,   399,    74,   478,
-     400,   401,   978,   274,  1090,   405,   111,  1258,   929,   652,
-    1347,   111,   652,  1037,   402,  1171,  1173,   895,    74,   403,
-     617,   276,   326,   326,   459,   504,    74,   459,  1018,   561,
-     562,    47,   830,   459,  1106,   477,   428,   906,   212,   284,
-     432,   766,   908,  1035,  1198,     8,     9,    10,    11,    12,
-      40,    41,  1198,   277,   227,   884,   884,   884,   783,   111,
-    1199,   766,   727,   789,   766,   330,    46,  1332,  1323,   406,
-     322,   454,    74,    30,   884,   331,   520,   954,    46,  1334,
-      46,   341,  1380,  1333,   530,   108,   530,   774,   212,   530,
-     875,   832,   530,   332,   876,  1335,    40,    41,   326,    46,
-     104,    33,   432,  1381,  1355,   494,   333,  -466,  1132,   738,
-     516,   471,  1357,  1358,  1359,    46,   108,   326,   137,   138,
-     334,   111,   830,   533,   534,   440,   528,    40,    41,   157,
-      46,   369,   111,    46,   111,   555,   383,   711,  -466,  1378,
-    -466,   896,  -291,   875,  -466,  1048,   370,  1116,   884,     8,
-       9,    10,    11,    12,   567,   568,  1035,   341,   241,    94,
-    1394,   478,   729,   586,   526,   409,  1095,    46,   730,    46,
-     604,   534,   897,   594,   651,  -105,   601,    30,   898,  -105,
-     374,   478,   111,   326,   905,   738,   907,   556,   111,   478,
-      94,   395,   557,   558,   227,   634,   232,   606,   108,   638,
-     111,   146,   338,    94,  1366,    33,  1128,   534,  1367,    40,
-      41,   212,   387,    46,    46,   746,  1428,   756,   210,   187,
-    1249,   747,    94,   757,  1253,    94,   871,    46,   577,   407,
-     409,   606,   210,   736,   872,    60,   424,  1349,   578,   212,
-     884,  1520,  1497,   673,   212,   425,   776,  1525,   409,  1497,
-     887,   702,   953,   958,  1055,   609,   777,   322,   322,   430,
-     773,   919,  1390,   959,  1251,   903,   774,   774,  1545,   461,
-     921,   727,    74,  1552,   448,   171,   774,   464,   762,   108,
-     763,   137,   236,   764,   227,   454,   770,  1002,   454,   459,
-      40,    41,  1015,  1003,   454,   681,   683,   499,   730,   500,
-     490,   830,  1546,  1499,    94,  1500,   114,   674,    46,  1175,
-     739,  1006,  1003,  1247,    74,   704,   237,    94,   251,   585,
-      46,   238,  1291,  1292,  1374,   589,   210,   409,   832,   467,
-     774,   494,   212,   322,   932,   494,   933,   468,  1375,   934,
-     774,  1008,   396,   187,   774,   528,   212,   528,  1377,  1382,
-     528,  1447,   322,   528,   774,   774,   108,  1444,   137,   138,
-    1547,   510,   506,   652,   338,   514,    94,    40,    41,  1466,
-     111,   652,   978,  1513,  1570,   774,   978,   978,    94,  1514,
-     585,    53,   289,   526,   793,   794,   795,   909,   526,   409,
-     739,   526,   912,    46,   409,    66,    67,   328,   409,     2,
-     204,     4,     5,     6,     7,   519,   727,    46,    94,   108,
-     531,   137,   138,   535,   415,    46,   727,  1196,   322,   569,
-      40,    41,   485,  1077,   250,   328,   409,   534,  1155,   828,
-     409,   727,   601,    46,  1167,   478,   409,   435,  1387,  1388,
-     212,   736,   417,   669,   409,   812,   751,   443,  1122,  1121,
-    1170,   752,   609,   111,  1182,     2,   204,     4,     5,     6,
-       7,   869,   652,    34,   570,    35,   601,   487,   328,   409,
-     111,   571,   878,   652,   575,   111,    36,   478,   181,   182,
-      39,   337,  1172,    74,   609,  -292,    94,    40,    41,  1438,
-    1003,  1339,     8,     9,    10,    11,    12,  1242,    36,   459,
-     172,   173,    39,  1444,  1445,  1137,   611,  1492,  1493,    40,
-      41,   104,  1235,   608,   409,   609,   527,   736,   440,    34,
-      30,    35,  1145,   610,   111,   766,    -3,  1145,   338,   854,
-     328,   609,  1446,   572,   652,   370,  -437,   111,   111,   111,
-     593,    53,     8,     9,    10,    11,    12,  1532,    33,  1458,
-     454,   800,   801,   802,   803,  1203,    67,   108,   596,   137,
-     138,   534,   111,   187,  1418,  1419,   160,   326,    40,    41,
-      30,   646,   940,   738,   940,   666,  1145,   667,   104,  1399,
-     494,   668,   192,  1399,   670,   215,  1077,   671,   225,  1210,
-    1212,  1214,  -293,    46,   798,   799,   890,  1106,    33,     8,
-       9,    10,    11,    12,   338,   672,   341,   993,    36,   675,
-     172,   173,    39,   703,   677,  -112,   695,  -112,   871,    40,
-      41,  -112,  1518,  1458,  1310,  1311,  1312,    30,   804,   805,
-     727,   727,   212,  1348,  1350,  1351,  -112,  -112,   796,   797,
-     577,   255,   409,    74,   718,   374,    60,   720,  -238,    94,
-     578,   758,   771,   611,   534,    33,   775,   779,   -12,   893,
-     833,   835,  1017,   837,   689,   848,   828,   160,   111,   -13,
-     900,   104,   892,   459,   920,   536,   537,   538,   922,   923,
-     372,  -414,   208,   218,   217,  1482,   927,   698,   727,   727,
-      46,   948,  -521,   962,   969,   652,   747,   210,   731,   539,
-     983,   540,  1369,   541,   542,    53,   160,   971,     2,   204,
-       4,     5,     6,     7,   976,   982,   984,   986,   987,    66,
-      67,   988,   989,   998,  1122,  1121,    36,  1010,  1011,   160,
-      39,  1012,   111,   111,   111,   527,   226,    40,    41,  1026,
-     527,   442,  1027,   527,  1028,  1029,   127,  1077,   128,   129,
-     130,   536,   537,   538,  1030,  1031,   828,    40,    41,   728,
-     454,  1032,  1043,   838,  1057,   609,  -402,   840,  -401,   611,
-    1092,  1442,    34,   610,    35,   539,  1558,   540,   439,   541,
-    1319,   935,  1102,    53,  1145,  1145,  1145,  1103,  1094,   652,
-     652,  1104,  1105,   440,  1109,  1110,  1111,  1203,    67,  1112,
-     494,  1123,   322,   935,  1113,  1119,   478,    74,    36,  1129,
-     774,   212,    39,   104,  1130,  1079,  1136,  1122,  1121,    40,
-      41,  1141,   397,   398,  1131,   992,  1144,    36,  1165,   399,
-    1328,    39,   400,   401,  1190,   104,   405,  1186,    40,    41,
-    1187,   766,  1077,  1188,   652,    42,   402,   652,   534,   372,
-    1189,   403,  1204,   869,   104,   145,   931,  1205,   703,  1207,
-     673,  1208,   727,  1216,   743,  1220,    46,    46,  1222,  1223,
-     727,   727,   727,    -3,   744,  1228,   111,   111,  1531,    36,
-    1233,   172,   173,    39,  1239,    74,    63,   115,   499,   516,
-      40,    41,   652,  1243,  1007,  1248,  1077,   652,  1250,  1077,
-     406,   917,   840,   611,  1252,   736,  1255,   212,  1256,  1260,
-     924,  1264,  1267,   104,   926,   111,  1269,    63,   727,  1271,
-    1122,  1121,  1272,  1273,   674,  1274,   372,   652,  1145,  1145,
-     158,  1275,  1277,   174,   454,   828,  1284,  1293,  1294,  1301,
-     139,  1330,  1304,    53,  1077,  1322,  1305,   104,  1307,  1077,
-      53,    36,   219,   181,   182,    39,  1336,  1203,    67,  1308,
-     147,  1316,    40,    41,  1203,    67,   148,  1483,   728,  1338,
-      60,   149,  1050,  1340,    46,   111,  1344,  1345,  1206,  1077,
-    1346,  1352,  1353,   174,   111,   736,   174,  1354,   183,   257,
-     652,   239,   242,  1356,  1362,   652,  1363,   840,   184,    46,
-      46,  1441,   159,    53,  1364,   534,  1365,  1372,  1376,   611,
-    1373,   213,  1383,   652,  1384,   652,  1312,  1203,    67,   652,
-    1395,  1392,   652,  1393,    46,  1402,   371,  1533,   240,  1405,
-     652,   327,   174,  1412,   652,  1413,  1541,  -403,  1416,   257,
-     348,  1427,  1077,  1435,  1505,    74,  1505,  1077,   478,  1431,
-     104,  1433,    74,   338,  1436,  1443,  1437,  1367,  1448,  1452,
-     935,  1453,  1454,   213,  1455,  1077,  1457,  1077,  1467,  1469,
-     404,  1077,  1475,   104,  1077,  1299,  1300,  1123,  1302,  1462,
-     104,  1505,  1077,  1505,  1306,   422,  1077,  1309,   427,   429,
-    1471,  1152,  1473,   158,  1477,   174,   703,  1479,  1480,  1485,
-    1486,  1487,  1498,   728,   703,    74,   213,  1508,  1512,  1510,
-     165,  1524,   170,   728,   446,   176,   177,   178,   449,   180,
-     450,  1516,   611,  1517,  1539,  1544,  1540,  1551,   728,   465,
-    1553,  1555,  1561,   104,   231,    63,  1568,   326,  1569,  1079,
-     479,  1050,  1221,   806,  1321,   807,   246,   247,  1100,   174,
-     486,   808,   463,  1519,   211,   810,   174,  1430,   429,   809,
-     122,   125,   126,  1571,   230,  1386,  1254,   213,  1403,  1501,
-    1123,     8,     9,    10,    11,    12,     8,     9,    10,    11,
+      47,   112,    96,   398,   148,   933,   266,   399,   149,   400,
+     150,   452,   176,   934,   113,   382,   383,   935,   259,   427,
+     791,   527,   401,   707,   406,   439,   512,   505,   712,   112,
+     112,   895,    47,   402,    96,   618,   853,   403,   768,   407,
+     975,   854,   111,    47,   404,    47,  1152,   160,   409,   871,
+     751,   820,   846,    48,   756,    47,  1092,  1144,   718,  1184,
+    1185,    47,   260,   192,    47,   261,   215,    47,   342,   225,
+    1091,   613,   995,   151,   152,   847,   848,   142,    31,   279,
+     218,   112,   112,   398,   933,    48,  1462,   399,   842,   400,
+    1399,   424,   934,   845,   201,  1196,   935,   779,   951,  1318,
+     574,  1202,   401,   843,   406,    47,   936,    31,    47,  1135,
+     679,   536,   153,   402,   937,    47,  1136,   403,   122,   407,
+    1508,   749,   482,   484,   404,   844,   408,   637,   936,   290,
+     688,   641,    31,    68,   857,   575,   950,   280,   692,  1099,
+     864,  1219,  1220,   605,   202,   148,    47,   121,   160,   149,
+     410,   150,   682,   684,    47,  1537,    75,  1539,   978,    47,
+    1462,   372,  1186,   683,   685,    68,   167,   446,  1319,    54,
+     114,   483,   141,   578,   438,   410,   478,   251,    31,   410,
+     105,   105,   517,   579,    47,    47,   467,   160,    75,    61,
+     168,    31,    67,  1482,   109,   534,   535,   211,  -234,  -234,
+      47,    54,   418,    31,   410,    41,    42,   556,    47,  1260,
+     160,   919,   105,    31,   151,   152,   677,    47,   746,  1008,
+      47,    61,   442,   842,    67,   148,   585,   112,   490,   149,
+    1201,   150,   586,   209,   483,   507,   219,   858,   843,   755,
+     527,   861,   112,   535,   674,   527,   112,   105,   527,   143,
+      47,   112,    96,   153,  1210,   596,   576,   760,   770,   675,
+     844,   488,   878,   410,    47,    47,   881,   160,    95,  -234,
+     777,    47,   410,   855,   145,   610,  1037,   165,    47,   535,
+     778,  1038,   846,   862,   342,   610,   666,   536,   740,  1342,
+     712,  1014,   472,   112,   703,   470,  1343,  1051,   618,  1263,
+      95,  1154,   813,    48,   176,   847,   848,  1184,  1185,   705,
+     162,   147,   536,    95,   681,  1344,  1419,  1420,   842,   154,
+     686,   638,   976,  1025,   824,   642,   674,  1264,    47,   188,
+     372,   170,    95,   843,   524,    95,   180,   536,   478,  1134,
+    1192,   675,   165,  1202,   200,   874,  1010,    47,    47,   875,
+    1419,  1420,  1216,   441,  -290,   844,  1015,   739,   478,   246,
+    1186,   831,   109,   857,    47,   761,   478,  1193,    47,   536,
+     109,  1026,   762,    41,    42,   162,   109,   327,   249,   653,
+    1092,    41,    42,    68,   926,   936,  1421,    41,    42,   440,
+     854,   886,   887,  1133,  1091,    47,  1402,  1492,   500,   605,
+     501,   783,   846,  -518,   880,    47,    75,   372,  1551,   905,
+    1186,    75,   251,   763,    95,   764,  1153,  1214,   765,    54,
+    1430,   771,   916,    47,  1193,   847,   848,    95,   605,    47,
+     105,    47,  1457,   605,  1550,  1566,  1212,  1521,   109,    61,
+     435,   871,    67,  1526,   479,   263,   342,  1451,  1452,    41,
+      42,   376,   397,   188,  1561,    47,   794,   795,   796,   876,
+     112,  1565,   -10,   877,  1546,   112,  1051,   377,   386,  1553,
+     327,  -112,  1381,   434,   112,   728,    95,   789,  1406,    47,
+     251,   329,   211,   958,   387,  -112,  -112,    47,    95,   372,
+    -441,    47,  -112,    96,  -467,    47,   740,  1041,   112,   535,
+     112,  -112,   435,  1202,   460,   896,  1107,   505,   979,  -442,
+    1202,   885,   885,   885,   707,   111,  1259,   398,    95,  1121,
+     653,   399,  1150,   400,  1102,  -467,   275,  -467,   909,   165,
+     885,  -467,   486,   277,  1186,   434,   401,   112,   618,   406,
+     653,   936,   112,   653,    48,   278,  1038,   402,   389,  1252,
+     391,   403,  1172,  1174,   407,   907,   109,   330,   404,   531,
+    1107,   767,   162,  1202,   390,   739,   392,    41,    42,   331,
+    1181,  1182,   740,    75,  1036,  1017,   607,   332,   784,  1466,
+     370,   767,   693,   790,   767,  1379,   393,   873,   586,  1118,
+     112,   140,   333,    75,  1019,  1348,    95,    47,   831,   936,
+     936,    75,   394,   888,   885,   334,   479,  1292,  1293,    47,
+     342,    47,   478,   211,   564,   565,   612,   557,   904,   884,
+     884,   884,   558,   559,    68,   587,   479,   410,  1231,  1232,
+      47,   472,  1498,   535,   479,   897,  1250,   713,   884,  1498,
+    1254,   739,   240,   243,    37,   876,    47,    75,    40,  1117,
+     566,   567,   112,   714,   955,    41,    42,   327,   327,   715,
+      54,    47,  1429,   112,    47,   112,   898,   335,   652,   713,
+     730,   105,   899,   188,   712,   716,   731,  1466,   737,   994,
+      61,    43,  1466,    67,   728,   929,   342,  1036,   831,   715,
+     384,   146,  1547,   371,  1199,  1049,   885,   959,    47,   610,
+      47,  1199,  1466,   375,   906,   930,   908,   960,  1333,  1466,
+    1200,   388,   884,   112,  1335,   507,  1096,  1324,   460,   112,
+     408,   460,   747,   704,  1334,   228,   535,   460,   748,   229,
+    1336,   112,   233,   327,   235,   109,     8,     9,    10,    11,
+      12,   244,  1056,  1129,    47,    47,    41,    42,   757,  1500,
+     285,  1501,   327,   590,   758,   410,   396,   775,    47,    95,
+    -291,    41,    42,   612,   441,    31,   431,     8,     9,    10,
+      11,    12,   954,  1382,  1350,   774,   920,   674,   531,   425,
+     531,   775,   775,   531,  -105,   703,   531,   521,  -105,   922,
+     833,   449,   675,    34,  1367,   775,    31,  1391,  1368,  1003,
+     705,  1016,  1356,   464,   884,  1004,  1548,   731,   426,   936,
+    1358,  1359,  1360,   910,   161,   410,  1248,  1447,   327,   728,
+     605,  -112,   586,  -112,    34,  1375,   936,  -112,   462,   728,
+     193,   775,   607,   216,  1459,  1376,   226,   933,   913,    47,
+     410,   775,  -112,  -112,   728,   934,   115,    75,    37,   935,
+    1176,    47,    40,   109,   465,   138,   139,   211,  1395,    41,
+      42,   872,   213,   109,    41,    42,   607,   831,   228,   468,
+    1378,   211,   560,   561,    41,    42,   775,   841,   979,   612,
+     479,   469,   979,   979,   491,   839,   737,   610,   511,    75,
+     158,  1156,    37,   410,   653,   611,    40,   562,   563,   936,
+     936,   112,   653,    41,    42,  1197,  1383,  1519,  1459,   290,
+    1183,  1448,   775,  1467,   213,   161,  1168,  1445,   410,   775,
+     535,  1514,   479,   515,    47,  1571,   520,  1515,   373,   744,
+     532,   586,  1300,  1301,  1171,  1303,   610,   536,    47,   745,
+     654,  1307,   570,  1078,  1310,  1173,    47,   610,   572,   257,
+     801,   802,   803,   804,   161,   158,  1236,   213,   410,   571,
+     740,   517,   737,   573,    47,   211,   932,   109,   704,   138,
+     139,   214,   568,   569,   537,   538,   539,   161,    41,    42,
+    1007,  1004,  1122,   460,   112,   251,   329,   410,   241,   443,
+     323,   775,  1009,   653,   418,   670,   410,  1340,   540,   339,
+     541,   112,   542,   543,   653,   941,   112,   941,   228,   242,
+     233,   338,   841,   612,   576,  1243,   329,   410,   213,  1388,
+    1389,   717,  -438,   214,   594,  1138,   464,   833,   597,   739,
+     488,   329,   410,  1439,  1004,    68,   855,   329,   610,   676,
+     740,   647,  1146,   728,   728,   767,   667,  1146,   668,   429,
+    1311,  1312,  1313,   433,   669,   112,   213,   671,    75,   750,
+     213,   754,  1445,  1446,   672,   653,   214,   673,   112,   112,
+     112,    54,   678,  1533,  1493,  1494,    37,   535,   173,   174,
+      40,   256,   105,   323,   455,  1400,   696,    41,    42,  1400,
+     721,    61,   719,   112,    67,  -238,  1146,   373,   228,  1419,
+    1420,   728,   728,   759,  1425,   772,  1078,   841,   776,  1211,
+    1213,  1215,   780,   371,   109,   433,   138,   237,   495,   612,
+    1349,  1351,  1352,  1107,    47,    41,    42,   214,   834,     2,
+     205,     4,     5,     6,     7,   342,   797,   798,  1123,   529,
+     836,   838,   158,   799,   800,   805,   806,   213,   849,   105,
+     -12,   238,  -292,   901,   -13,   893,   239,   441,  1370,     8,
+       9,    10,    11,    12,    37,   214,   182,   183,    40,   214,
+     894,   921,   923,   928,   373,    41,    42,   924,     8,     9,
+      10,    11,    12,   699,   949,  -415,   595,  -522,    31,   602,
+     748,  1483,   963,   460,    35,    68,    36,   970,   984,   112,
+     972,   698,   327,   410,   983,   977,   704,    31,   635,   699,
+     985,   700,   639,   892,   704,   339,    34,   218,    75,   987,
+     988,    47,   109,   989,   138,   139,   653,   990,   213,  1011,
+    -293,    54,   612,    41,    42,    34,   999,     8,     9,    10,
+      11,    12,   105,  1329,     2,   205,     4,     5,     6,     7,
+    1012,   479,  1013,   872,  1204,  1027,   214,    -3,  1122,  1058,
+    1093,   891,  1028,   112,   112,   112,    31,  1078,  1029,  1030,
+     323,   323,  1031,   227,   945,   728,  1032,   578,   213,   410,
+     948,  1080,  1033,   728,   728,   728,  1044,   579,   128,  1443,
+     129,   130,   131,  -403,    34,  -402,  1095,  1104,   455,    41,
+      42,   455,  1103,  1105,  1146,  1146,  1146,   455,  1106,    35,
+    1110,    36,  1111,  1559,   537,   538,   539,  1112,  1113,   115,
+     653,   653,  1114,  1120,     2,   205,     4,     5,     6,     7,
+    1130,   728,  1131,   729,   775,  1137,   211,   214,   540,   993,
+     541,  1132,   542,  1320,   495,  1145,   323,  1166,   495,   398,
+     737,  1122,  1142,   399,  1442,   400,  1189,  1187,   529,    68,
+     529,   767,  1078,   529,  1188,   323,   529,   460,   401,  1190,
+     406,  1223,   209,   219,  1191,   653,  1205,   339,   653,   402,
+    1206,  1208,    75,   403,   105,   407,  1209,   214,  1217,    35,
+     404,    36,  1221,  1224,   674,    54,  1532,    47,    47,    -3,
+    1229,   213,  1234,  1240,   500,  1249,   105,   112,   112,   675,
+     109,  1244,   138,   139,  1123,    61,  1078,  1251,    67,  1078,
+    1253,    41,    42,   653,  1256,   105,  1257,  1261,   653,   213,
+     737,   323,   441,  1265,   213,  1268,   175,    68,  1270,  1272,
+    1273,  1302,   829,  1274,  1207,   602,   112,   752,  1146,  1146,
+    1278,  1275,   753,  1276,  1122,   654,  1285,   172,   653,  1294,
+      75,  1295,  1061,  1323,  1078,  1305,  1306,  1308,   440,  1078,
+    1331,  1337,  1339,    54,   870,  1309,  1341,  1317,  1346,   602,
+    1345,  1347,    64,   116,   105,   879,   175,  1484,  1353,   175,
+    1354,   148,  1355,   479,  1357,   149,  1204,   150,  1363,  1078,
+     252,  1364,  1365,  1366,  1377,    47,   112,  1123,  1373,  1374,
+     214,  1384,  1385,  1313,    64,   112,  1393,  1394,   105,  1396,
+    1403,   653,   213,  1413,  1414,  1406,   653,   159,  -404,  1417,
+      47,    47,  1428,   160,  1432,   175,   213,  1434,   214,  1436,
+    1437,   339,   729,   214,   653,  1438,   653,  1534,  1444,   220,
+     653,  1449,  1453,   653,   654,    47,  1542,   372,  1454,  1455,
+    1456,   653,  1078,   455,   166,   653,   171,  1078,  1368,   177,
+     178,   179,    37,   181,   173,   174,    40,  1458,    37,  1463,
+     173,   174,    40,    41,    42,  1078,   258,  1078,   232,    41,
+      42,  1078,  1468,   495,  1078,  1470,   416,    68,   175,  1472,
+     247,   248,  1078,  1474,    68,  1080,  1078,  1476,  1478,   375,
+    1123,    37,  1480,   182,   183,    40,  1487,   339,  1481,   436,
+      75,   105,    41,    42,  1486,  1509,  1488,    75,   328,   444,
+     213,   214,  1511,    54,  1499,  1513,   258,   349,  1517,  1518,
+      54,  1540,  1525,  1545,   105,   214,  1552,  1554,   609,  1541,
+     610,   105,   175,   479,  1061,  1556,  1204,    68,   611,   175,
+     479,  1562,    37,  1204,   182,   183,    40,   405,  1569,  1570,
+    1222,   807,   810,    41,    42,  1018,   808,   729,   809,   829,
+      75,   811,   423,  1322,   212,   428,   430,   729,  1520,  1572,
+     159,  1431,  1404,    54,   231,  1255,  1387,  1502,   528,   698,
+    1392,   410,   729,  1228,   105,   694,   695,  1108,   942,   700,
+     723,   447,  1109,   479,  1141,   450,  1204,   451,   826,   965,
+    1057,     8,     9,    10,    11,    12,   466,   973,   175,   900,
+    1332,  1119,    64,   742,   816,   817,   212,   480,  1506,   214,
+    1506,   818,     0,     0,     0,   175,     0,   487,     0,   175,
+      31,     0,     0,     0,  1418,   430,     0,  1426,     0,     0,
+    1298,     0,     0,     0,     0,     0,     0,     0,     0,   829,
+       0,     0,   327,   455,     0,  1506,     0,  1506,    34,   212,
+       0,     0,     0,    37,     0,   182,   183,    40,    37,     0,
+     182,   183,    40,     0,    41,    42,    73,     0,   486,    41,
+      42,     0,  1465,     0,     0,     0,    37,  1469,   182,   183,
+      40,     0,   175,   495,  1124,   323,     0,    41,    42,     0,
+     184,     0,   213,   258,     0,  1530,   603,   410,    73,     0,
+     185,     0,   631,     0,     0,  1531,     0,  1491,     0,     0,
+     212,     0,     0,   184,     0,   636,   690,     0,     0,   636,
+       0,     0,   258,   185,     0,     0,     0,   601,   608,     0,
+       0,     0,     0,   221,     0,     0,   870,     0,     0,   632,
+     633,     8,     9,    10,    11,    12,     0,     0,   212,     0,
+     732,     0,   212,    37,     0,   182,   183,    40,     0,     0,
+       0,     0,     0,     0,    41,    42,     0,     0,   506,   480,
+      31,   729,   729,     0,     0,     0,   125,   125,   125,     0,
+       0,     0,     0,     0,   349,     0,     0,   528,     0,   480,
+     264,     0,   528,  1560,     0,   528,     0,   480,    34,  1560,
+     265,   214,     8,     9,    10,    11,    12,     0,     0,     0,
+    1560,     0,     0,     0,  1560,     0,     0,   455,   829,     0,
+       0,   352,     0,   724,     0,     0,   430,     0,     0,   729,
+     729,    31,     0,     0,     8,     9,    10,    11,    12,   212,
+     777,   738,   410,    64,     0,     0,     0,   125,   175,   125,
+     778,   430,     0,     0,     0,   430,     0,     0,     0,    34,
+       0,     0,     0,    31,    37,     0,   182,   183,    40,     0,
+       0,   213,     0,     0,   274,    41,    42,     0,     0,     0,
+       0,   175,     0,     0,   258,   349,     0,     0,     0,     0,
+       0,    34,     0,     0,     0,   448,    37,   175,   182,   183,
+      40,   609,     0,   610,     0,     0,     0,    41,    42,     0,
+       0,   611,   175,     0,     0,     0,    73,     0,     0,     0,
+     212,    73,     0,     0,     0,     8,     9,    10,    11,    12,
+     125,   819,     0,   698,     0,   410,   339,   212,   125,     0,
+     125,   125,     0,   700,     0,   125,     0,   125,   125,   636,
+     832,     0,   603,   918,    31,     0,     0,     0,     0,     0,
+    1124,     0,   925,   851,     0,     0,   927,   213,     0,     0,
+     212,  1330,     0,     8,     9,    10,    11,    12,     0,     0,
+     214,   603,    34,     0,     0,     0,   603,    37,     0,   182,
+     183,    40,   636,     0,     0,   349,   349,   349,    41,    42,
+       0,     0,    31,   729,     0,     0,     0,     0,     0,   175,
+       0,   729,   729,   729,   349,     0,   221,   125,     0,     0,
+       0,     0,     0,     0,  1530,     0,   410,     0,     0,     0,
+      34,     0,   724,     0,  1531,    37,     0,   182,   183,    40,
+       0,     0,     0,   480,     0,     0,    41,    42,   258,   738,
+       0,     0,   938,  1124,     0,     0,     0,     0,     0,   729,
+       0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
+       0,     0,   264,     0,     0,     0,   214,     0,     0,     0,
+       0,     0,   265,    73,     0,   480,     0,     0,   349,     0,
+       0,    31,     0,   212,     0,     0,     0,   964,   352,     0,
+     430,     0,     0,    73,     0,     0,     0,     0,   952,     0,
+     953,    73,     0,     0,     0,     0,     0,   956,   957,    34,
+       0,   212,   962,     0,   258,   738,   212,     0,     0,     0,
+     992,     0,     0,     0,   967,     0,     0,   352,     0,   971,
+     544,   545,   546,   547,   548,   549,   550,   551,   552,   553,
+       0,     0,     0,     0,     0,   352,  1124,    73,     0,     0,
+       0,   959,     0,   610,     0,  1000,     0,   724,     0,     0,
+       0,   960,     0,     0,   554,   175,     0,   724,     0,     0,
+     349,     0,   636,     0,     0,  1024,   636,   832,  1505,     0,
+    1505,     0,   724,     0,     0,     0,     0,     0,     0,   352,
+    1101,     0,  1035,     0,     0,     0,     0,     0,     0,     0,
+     601,     0,     0,     0,   212,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1505,     0,  1505,   212,     0,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,   506,     0,
+      26,    27,    28,     0,    64,   323,     0,     0,     0,    31,
+       0,     0,     0,     0,   352,     0,     0,  1045,  1046,  1047,
+    1048,     0,  1050,     0,     0,     0,   636,     0,     8,     9,
+      10,    11,    12,     0,     0,     0,    76,    34,  1094,     0,
+       0,     0,    37,     0,    38,    39,    40,     0,     0,     0,
+       0,     0,  1100,    41,    42,     0,     0,    31,     0,   352,
+     352,   352,  1116,     0,     0,     0,     0,     0,    76,     0,
+     430,   116,   212,     0,     0,     0,     0,     0,   352,    43,
+       0,   156,   125,   125,     0,    34,     0,     0,   349,    45,
+      37,  1115,     0,     0,    40,     0,   352,  1218,     0,     0,
+       0,    41,    42,   222,     0,     0,     0,    73,     0,     0,
+       0,     0,   125,   352,     0,   125,   125,     0,   125,     0,
+     125,   125,     0,   603,     0,   125,   125,    43,     0,     0,
+       0,  1143,     0,     0,     0,     0,   428,   146,  1151,     0,
+       0,   724,   724,  1155,   349,   349,     0,     0,  1159,    73,
+    1160,     0,   352,     0,  1162,  1163,  1164,     0,     0,  1167,
+       0,     0,     0,     0,  1203,     0,     0,     0,  1179,     0,
+       0,     0,     8,     9,    10,    11,    12,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,  1194,  1195,     0,   352,
+       0,   354,     0,     0,     0,    78,     0,     0,     0,   724,
+     724,    31,     0,     0,   125,   636,     0,     0,     0,   125,
+     125,     0,     0,  1225,     0,   125,  1227,     0,     0,     0,
+       0,     0,   175,     0,     0,     0,     0,    78,     0,    34,
+       0,   352,     0,     0,    37,     0,     0,     0,    40,     0,
+       0,   352,     0,     0,   352,    41,    42,     0,     0,   221,
+       0,   352,     0,     0,  1242,     0,   352,     0,     0,     0,
+    1246,  1247,   223,   738,   212,     0,     0,     0,     0,     0,
+       0,   744,  1258,     0,     0,     0,     0,  1262,     0,     0,
+    1266,   745,  1267,     0,     0,  1269,    76,     0,     0,     0,
+       0,    76,   412,     0,     0,     0,     0,     0,  1277,   420,
+       0,     0,     0,     0,     0,     0,  1299,     0,     0,     0,
+       0,  1284,    85,  1286,  1287,  1288,  1289,     0,    73,     0,
+       0,     0,     0,   258,     0,     0,     0,     0,    64,  1296,
+       0,  1297,     0,     0,     0,   171,     0,  1386,     0,     0,
+       0,   724,     0,   738,    85,    55,    55,   116,     0,     0,
+     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1325,  1326,     0,     0,     0,     0,
+       0,   412,     0,   724,     0,     0,     0,    55,     0,   224,
+       0,   724,   724,   724,     0,     0,   222,     0,     0,     0,
+       0,     0,   349,   349,     0,     0,     0,     0,   175,     0,
+       0,     0,   352,     0,     0,     0,  1203,     0,     0,    55,
+       0,     0,    55,     0,     0,  1361,  1362,     0,     0,     0,
+       0,     0,     0,     0,     0,  1372,     0,   584,     0,   724,
+       0,     0,     0,     0,     0,   588,     0,     0,   591,     0,
+     116,     0,     0,   212,     0,    78,     0,     0,     0,     0,
+      78,     0,     0,    76,     0,   352,   352,     0,   352,   352,
+       0,     0,     0,     0,     0,     0,     0,   362,   354,     0,
+       0,     0,     0,    76,     0,     0,     0,  1405,    73,     0,
+       0,    76,     0,     0,     0,     0,     0,     0,     0,  1409,
+       0,  1410,  1411,  1412,     0,     0,  1503,     0,  1507,     0,
+     347,   412,     0,  1416,     0,   420,     0,   354,     0,     0,
+       0,     0,  1427,   352,   352,     0,     0,   349,     0,     0,
+       0,     0,     0,     0,     0,   354,     0,    76,  1440,     0,
+       0,     0,     0,  1536,     0,  1538,     0,     0,     0,   212,
+       0,     0,     0,   116,     0,   223,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    85,     0,     0,    55,  1203,    85,     0,   354,
+       0,     0,     0,  1203,     0,     0,     0,   352,  1567,     0,
+    1568,     0,     0,     0,  1489,  1490,     0,     0,     0,     0,
+     412,     0,     0,  1575,  1576,    55,     0,  1495,     0,   125,
+       0,     0,     0,     0,  1495,     0,     0,     0,     0,     0,
+       0,     0,    78,     0,     0,     0,     0,     0,     0,     0,
+     221,     0,     0,     0,     0,     0,  1203,   355,     0,     0,
+       0,     0,    78,  1555,   354,     0,     0,  1529,     0,     0,
+      78,  1535,    73,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   352,     0,   352,     0,     0,
+       0,     0,   224,     0,     0,     0,   355,     0,     0,     0,
+    1557,     0,  1558,     0,     0,     0,     0,     0,     0,   354,
+     354,   354,   584,   584,   355,     0,    78,   352,     0,     0,
+       0,     0,     0,     0,     0,   352,   352,   352,   354,     0,
+    1573,  1574,     0,     0,     0,     0,   352,   352,  1577,  1578,
+       0,     0,     0,     0,     0,     0,   354,     0,     0,     0,
+      73,     0,     0,   125,     0,     0,     0,    76,   355,    85,
+       0,     0,     0,   354,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   352,   362,     0,     0,     0,     0,    85,
+       0,     0,     0,     0,     0,     0,     0,    85,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    76,
+       0,   911,   354,     0,     0,   914,     0,   347,     0,     0,
+       0,     0,     0,   362,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   355,     0,     0,     0,     0,     0,     0,
+       0,   362,     0,    85,     0,     0,     0,     0,   412,   354,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,   352,     0,     0,     0,     0,    55,     0,   355,   355,
+     355,     0,    31,     0,     0,   362,     0,     0,     0,     0,
+       0,   354,     0,     0,     0,     0,     0,   355,     0,     0,
+       0,   354,     0,     0,   354,     0,     0,     0,     0,   222,
+      34,   354,     0,     0,     0,   355,   354,     0,   347,     0,
+      73,     0,     0,     0,     0,     0,    78,    73,     0,     0,
+       0,     0,   355,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   584,     0,     0,     0,     0,    78,     0,
+       0,   355,     0,     0,     0,   123,   126,   127,    76,     0,
+      73,     0,     0,   347,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   362,   362,   362,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   355,     0,
+       0,     0,     0,     0,   362,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   347,   347,
+     347,     0,   362,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    85,     0,     0,   253,   347,   254,   362,
+     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     355,     0,   354,   355,     0,     0,     0,     0,   223,     0,
+     355,     0,     0,     0,     0,   355,   412,     0,     0,     0,
+       0,     0,     0,     0,     0,    85,     0,     0,   362,     2,
+     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,   354,   354,     0,   354,   354,
+       0,   347,     0,     0,    31,   362,     0,     0,     0,   395,
+       0,     0,     0,     0,     0,     0,     0,    78,    76,   414,
+     415,     0,     0,     0,   419,     0,   421,   422,     0,     0,
+       0,     0,    34,     0,    35,  1157,    36,    37,     0,   173,
+     174,    40,     0,     0,     0,     0,     0,   362,    41,    42,
+       0,  1169,     0,   354,   354,     0,     0,   362,     0,     0,
+     362,     0,     0,     0,     0,   224,     0,   362,     0,     0,
+       0,     0,   362,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,  -294,   347,    26,    27,    28,     0,     0,     0,
+     347,   355,     0,    31,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   354,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,  1237,     0,
+       0,    34,     0,     0,    85,     0,    37,     0,   336,   337,
+      40,     0,  -294,     0,     0,     0,     0,    41,    42,     0,
+       0,     0,     0,     0,   355,   355,     0,   355,   355,     0,
+     222,     0,     0,     0,     0,     0,     0,    55,     0,     0,
+       0,     0,     0,   643,     0,   338,     0,    78,     0,     0,
+       0,     0,    76,   634,     0,   164,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   354,     0,   354,     0,     0,
+       0,     0,     0,     0,   217,     0,     0,     0,     0,     0,
+       0,     0,   355,   355,     0,     0,     0,     0,   362,     0,
+     281,   282,     0,   283,     0,     0,     0,   354,     0,     0,
+       0,     0,     0,     0,    55,   354,   354,   354,     0,     0,
+       0,     0,     0,     0,     0,     0,   354,   354,     0,   284,
+     164,   347,     0,     0,     0,   285,   271,     0,     0,   286,
+      76,     0,   287,   288,   289,   290,    41,    42,     0,   291,
+     292,   362,   362,     0,   362,   362,   355,   293,     0,     0,
+       0,     0,     0,   354,     0,   164,     0,     0,     0,     0,
+       0,     0,   513,     0,    85,   368,     0,     0,     0,   374,
+       0,   296,   380,   298,   299,   300,   301,   347,   347,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   223,
+       0,     0,     0,     0,     0,     0,     0,    55,     0,   362,
+     362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    78,     0,     0,     0,     0,     0,     0,   164,     0,
+       0,     0,     0,     0,   355,     0,   355,     0,     0,     0,
+     217,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   354,     0,     0,     0,     0,     0,     0,   164,   461,
+       0,     0,     0,     0,     0,     0,   355,     0,     0,     0,
+       0,     0,     0,   362,   355,   355,   355,     0,     0,     0,
+       0,     0,   374,     0,     0,   355,   355,     0,     0,     0,
+     164,   821,   822,     0,     0,     0,     0,     0,     0,    78,
+      76,     0,     0,     0,     0,     0,     0,    76,     0,     0,
+       0,     0,     0,     0,   461,     0,   224,   164,     0,     0,
+       0,   856,   355,     0,   859,   860,     0,   863,     0,   865,
+     866,     0,     0,     0,   867,   868,     0,     0,    85,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    55,    55,
+       0,   362,     0,   362,     0,     0,     0,     0,     0,     0,
+      76,     0,     0,     0,   606,     0,     0,     0,     0,   630,
+       0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   362,     0,     0,   210,     0,     0,     0,
+      55,   362,   362,   362,     0,     0,   230,     0,   234,     0,
+     236,     0,   362,   362,     0,     0,     0,   245,     0,     0,
+     355,     0,     0,     0,     0,     0,    85,     0,   943,   944,
+       0,     0,     0,     0,   946,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   347,   347,     0,   210,   362,
+     234,   236,   245,     0,    55,   164,   164,     0,     0,    55,
+       0,     0,   368,     0,     0,     0,     0,     0,     0,    78,
+       0,     0,     0,     0,     0,     0,    78,     0,     0,     0,
+       0,     0,     0,   461,     0,     0,   461,     0,     0,     0,
+       0,   210,   461,    55,   474,     2,   205,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,   741,
+       0,    26,    27,    28,     0,     0,     0,     0,     0,    78,
+      31,   164,     0,     0,     0,     0,     0,   362,     0,     0,
+       0,     0,   155,   461,     0,   461,     0,     0,   461,     0,
+     164,   461,   210,     0,   234,   236,   245,     0,    34,     0,
+      35,     0,    36,   368,     0,    38,    39,     0,     0,     0,
+     347,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    85,     0,   250,     0,
+     210,     0,     0,    85,   210,     0,    55,     0,   255,     0,
+       0,     0,     0,     0,     0,    -3,     0,     0,     0,     0,
+     504,     0,     0,     0,     0,     0,   164,     0,     0,    55,
+       0,     0,     0,     0,     0,     0,    55,     0,   368,     0,
+     606,     0,     0,   837,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    85,     0,     0,     0,
+       0,     0,     0,     0,   155,     0,     0,     0,     0,   606,
+     210,     0,     0,     0,   606,     0,     0,     0,   385,     0,
+       0,     0,     0,   368,   368,   368,     0,     0,     0,    55,
+       0,   210,     0,     0,     0,     0,   234,   236,     0,     0,
+       0,   417,   368,     0,   245,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   432,     0,     0,     0,     0,
+       0,     0,  1034,     0,   437,     8,     9,    10,    11,    12,
+       0,     0,     0,     0,   445,     0,     0,   741,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   210,     0,     0,
+       0,     0,   281,   282,    31,   283,     0,     0,   461,   471,
+       0,     0,     0,     0,   481,   210,     0,     0,     0,     0,
+     210,     0,   210,     0,     0,     0,   368,   489,   961,     0,
+       0,   284,    34,   499,     0,   503,     0,   285,     0,   210,
+       0,   286,   210,   210,   287,   288,   289,   290,    41,    42,
+       0,   291,   292,   533,     0,     0,     0,     0,   210,   293,
+       0,     0,     0,   741,     0,     0,     0,     0,     0,     0,
+       0,     0,   210,     0,   294,     0,   378,     0,  1233,   210,
+       0,     0,     0,   296,   827,   298,   299,   300,   301,     0,
+       0,     0,     0,     0,     0,     0,   593,     0,     0,     0,
+       0,   598,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   368,     0,
+       0,     0,   630,     0,     0,   368,     0,     0,     0,   644,
+       0,     0,     0,   645,   646,     0,   648,     0,     0,     0,
+       0,     0,     0,   660,   661,     0,   662,   663,     0,   664,
+       0,   665,     0,     0,     0,     0,     0,  1177,     0,     0,
+       8,     9,    10,    11,    12,     0,     0,     0,   593,     0,
+       0,     0,     0,     0,     0,     0,   680,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   281,   282,    31,
+     283,     0,     0,     0,     0,   210,     0,     0,     0,     0,
+       0,   691,  1321,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   697,     0,     0,     0,   284,    34,   461,     0,
+       0,     0,   285,   210,     0,     0,   286,     0,   210,   287,
+     288,   289,   290,    41,    42,   733,   291,   292,     0,     0,
+       0,   736,     0,     0,   293,     0,   471,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
+     164,   378,     0,     0,     0,     0,     0,     0,   296,  1178,
+     298,   299,   300,   301,     0,     0,   368,     0,     0,     0,
+       0,     0,     0,   773,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   788,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   606,     0,     0,     0,     0,   210,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     210,     0,   368,   368,     0,     0,   815,     0,     0,     0,
+       0,     0,     0,     0,     0,   825,     0,     0,     0,     0,
+     504,     0,   828,     0,     0,   281,   282,   835,   283,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   850,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   284,     0,     0,     0,     0,     0,
+     285,     0,   461,     0,   286,     0,     0,   287,   288,   289,
+     290,    41,    42,     0,   291,   292,     0,     0,     0,   890,
+       0,   210,   293,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   210,     0,     0,   294,     0,   378,
+       0,     0,   379,     0,     0,     0,   296,   380,   298,   299,
+     300,   301,     0,   210,     0,   835,     0,     0,     0,     0,
+       0,   741,     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,     0,
+       0,    26,    27,    28,    29,     0,     0,    30,     0,     0,
+      31,    32,     0,   217,     0,     0,     0,     0,     0,     0,
+     250,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     968,   969,     0,     0,     0,    33,     0,     0,    34,     0,
+      35,     0,    36,    37,   986,    38,    39,    40,     0,     0,
+     210,   741,   341,   363,    41,    42,     0,     0,     0,     0,
+       0,  1001,     0,  1002,     0,     0,     0,  1006,     0,     0,
+       0,     0,     0,     0,     0,     0,   210,     0,     0,     0,
+      43,     0,    44,     0,     0,     0,   413,     0,     0,     0,
+      45,     0,     0,   413,     0,     0,     0,     0,     0,     0,
+     368,   368,     0,     0,   210,     0,     0,     0,     0,   217,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,  1039,     0,     0,   210,     0,     0,    31,
+    1040,     0,     0,     0,     0,     0,     0,   210,     0,     0,
+       0,     0,     0,  1042,     0,  1043,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   413,     0,    34,     0,  1055,
+       0,     0,   109,     0,    38,    39,  1059,     0,     0,     0,
+       0,     0,     0,    41,    42,     0,     0,     0,  1097,     0,
+       0,  1098,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   598,
+       0,    44,     0,     0,     0,     0,     0,     0,     0,   110,
+       0,   413,     0,     0,     0,   368,     0,     0,   210,   413,
+     589,     0,   413,   592,     0,     0,     0,     0,     0,     0,
+       0,     0,   363,     0,     0,     0,   622,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   640,     0,     0,   341,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   461,     0,   461,     0,     0,     0,     0,
+     281,   282,     0,   283,     0,   413,     0,     0,  1161,   413,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   210,     0,     0,     0,   284,
+     461,   321,   461,     0,     0,   649,     0,   138,   139,   286,
+     363,   345,   287,   650,   289,   290,    41,    42,     0,   291,
+     292,     0,     0,   381,   381,     0,     0,   293,     0,     0,
+     164,     0,     0,   413,   533,     0,     0,     0,     0,     0,
+       0,  1226,   294,     0,   651,     0,   652,   379,     0,     0,
+       0,   296,   380,   298,   299,   300,   301,     0,     0,     0,
+       0,     0,     0,     0,   413,     0,     0,   363,     0,     0,
+    1239,     0,     0,     0,     0,  1241,     0,     0,     0,     0,
+       0,     0,     0,  1245,     0,     0,     0,     0,     0,     0,
+       0,   210,     0,     0,   321,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   413,     0,     0,
+     341,   363,     0,     0,  1271,     0,     0,     0,     0,   485,
+       0,     0,     0,     0,     0,     0,  1279,     0,     0,  1280,
+       0,  1281,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,  1290,  1291,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   413,   413,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,  1304,     0,     0,
+       0,     0,     0,     0,     0,   830,   363,     0,   363,     0,
+       0,     0,     0,     0,     0,     0,     0,   622,     0,   622,
+     622,     0,     0,     0,  1327,     0,   622,     0,     0,   514,
+       0,   516,   519,     0,     0,     0,   869,   363,     0,   522,
+     523,     0,   363,     0,   516,   516,     0,     0,     0,     0,
+       0,   363,   363,   363,     0,     0,   516,     0,     0,     0,
+       0,     0,     0,     0,     0,   381,     0,     0,     0,     0,
+     363,     0,     0,     0,     0,   413,   912,     0,     0,   413,
+     915,     0,     0,     0,     0,     0,   917,     0,     0,     0,
+       0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   341,   363,   413,     0,   413,     0,
+       0,     0,   413,     0,     0,     0,     0,     0,     0,   281,
+     282,  1397,   283,  1398,     0,     0,     0,     0,   516,     0,
+       0,     0,     0,     0,     0,     0,  1407,     0,  1408,     0,
+       0,     0,     0,     0,   363,   622,     0,     0,   284,     0,
+       0,     0,     0,     0,   285,     0,  1415,     0,   286,     0,
+       0,   287,   288,   289,   290,    41,    42,   735,   291,   292,
+       0,     0,  1433,  1435,     0,     0,   293,   210,     0,     0,
+     341,   363,     0,     0,  1441,   413,   413,  1245,     0,     0,
+       0,   294,     0,   378,     0,     0,     0,     0,     0,   812,
+     296,   380,   298,   299,   300,   301,   769,     0,     0,  1464,
+       0,     0,     0,     0,     0,     0,     0,     0,  1471,   782,
+       0,  1473,     0,  1475,  1477,  1479,   769,   413,     0,   769,
+       0,     0,     0,     0,     0,     0,   363,     0,     0,     0,
+     792,   793,   830,   363,     0,     0,     0,   622,     0,   622,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   622,
+       0,     0,   814,     0,     0,  1510,     0,  1512,     0,     0,
+    1245,     0,   823,     0,     0,     0,     0,     0,     0,   345,
+       0,     0,     0,     0,   782,  1524,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   516,   516,   516,   516,   516,
+     516,   516,   516,   516,   516,   516,   516,   516,   516,   516,
+     516,   516,   516,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   830,     0,   889,     0,     0,     0,     0,     0,
+     413,     0,     0,   381,     0,     0,   413,     0,   516,     0,
+       0,     0,     0,     0,   413,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   622,   622,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   345,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   363,     0,     0,     0,     0,     0,
+     413,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,   413,
+    1158,    26,    27,    28,     0,     0,     0,     0,     0,   363,
+      31,   453,     0,     0,     0,   413,  1170,     0,   622,   622,
+    1175,     0,     0,     0,     0,     0,     0,   516,     0,     0,
+     363,   363,     0,     0,     0,     0,     0,     0,    34,   782,
+       0,   991,     0,     0,     0,    38,    39,   996,     0,   516,
+       0,     0,     0,     0,  1005,     0,     0,     0,     0,     0,
+       0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   454,     0,     0,     0,   711,     0,     0,     0,
+     110,   830,   413,  1238,     0,     0,     0,     0,  1022,  1023,
+       0,   345,     0,     0,   622,     0,     0,     0,   516,     0,
+       0,     0,     0,     0,     0,     0,   345,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     516,     0,     0,     0,     0,     0,     0,     0,     0,   363,
+       0,     0,     0,     0,     0,   516,  1053,     0,     0,     0,
+     381,     0,     0,  -517,     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,     0,     0,    26,    27,    28,    29,     0,     0,    30,
+       0,     0,    31,    32,     0,     0,     0,     0,     0,   341,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    33,     0,   363,
+      34,     0,    35,     0,    36,    37,   321,    38,    39,    40,
+       0,     0,     0,     0,     0,     0,    41,    42,     0,     0,
+       0,     0,  1139,  1140,     0,     0,     0,     0,     0,   381,
+       0,     0,     0,     0,     0,   996,     0,     0,  1149,     0,
+     769,     0,    43,     0,    44,     0,     0,     0,   363,   363,
+       0,     0,    45,     0,     0,     0,     0,     0,     0,     0,
+    1165,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1180,     0,     0,     0,     0,   516,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   381,     0,  1198,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   516,     0,     0,
+     996,   996,     0,     0,     0,     0,     0,     0,     0,   516,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,  1230,     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,     0,
+     516,    26,    27,    28,    29,     0,     0,    30,     0,     0,
+      31,    32,     0,   363,     0,     0,     0,     0,   996,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    33,     0,   889,    34,     0,
+      35,     0,    36,    37,     0,    38,    39,    40,     0,     0,
+       0,     0,  1282,  1283,    41,    42,     0,     0,     0,     0,
+       0,     0,   281,   282,     0,   283,     0,     0,     0,     0,
+       0,     0,   516,     0,     0,     0,     0,     0,     0,     0,
+      43,     0,    44,     0,     0,     0,  -521,     0,     0,     0,
+      45,   284,     0,     0,     0,     0,     0,   285,     0,     0,
+       0,   286,     0,   413,   287,   288,   289,   290,    41,    42,
+       0,   291,   292,     0,     0,     0,   516,     0,     0,   293,
+       0,     0,     0,     0,     0,     0,     0,     0,   413,   413,
+     516,   516,     0,   996,   294,     0,   378,     0,     0,     0,
+       0,   781,     0,   296,   380,   298,   299,   300,   301,     0,
+       0,     0,     0,   413,     0,     1,     2,   205,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,     0,    26,    27,    28,    29,     0,     0,    30,   281,
+     282,    31,  1062,  1063,  1390,  1064,   769,     0,  1065,  1066,
+    1067,  1068,  1069,  1070,  1071,  1072,     0,     0,     0,  1073,
+       0,     0,     0,  1074,  1075,     0,    33,     0,   284,    34,
+       0,    35,     0,    36,   649,     0,    38,    39,   286,     0,
+       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
+       0,     0,     0,     0,     0,     0,   293,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   294,     0,  1076,     0,     0,   170,     0,     0,     0,
+     296,   297,   298,   299,   300,   301,     0,     0,     0,     0,
+    1077,     0,  1450,     0,  -129,     0,     0,     0,     0,     0,
+       1,     2,   205,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,     0,     0,    26,    27,    28,
+      29,     0,     0,    30,   281,   282,    31,   283,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     516,     0,     0,   281,   282,     0,   283,     0,     0,     0,
+       0,     0,     0,   284,    34,     0,    35,   516,    36,   285,
+       0,    38,    39,   286,  1516,     0,   287,   288,   289,   290,
+      41,    42,   284,   291,   292,     0,     0,     0,   285,     0,
+       0,   293,   286,     0,     0,   287,   288,   289,   290,    41,
+      42,     0,   291,   292,     0,     0,   294,     0,  1076,     0,
+     293,     0,     0,     0,     0,   296,   297,   298,   299,   300,
+     301,     0,     0,     0,     0,   294,   321,   378,     0,  -129,
+     993,     0,     0,     0,   296,   380,   298,   299,   300,   301,
+     516,   516,     1,     2,   205,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,    29,     0,     0,    30,   281,   282,    31,   283,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
+      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
+       0,     0,   109,     0,    38,    39,     0,     0,   294,     0,
+      44,     0,     0,    41,    42,     0,     0,   296,   297,   298,
+     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,  -294,     0,     0,     0,   284,    34,     0,    35,     0,
+      36,   285,    31,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,     0,   294,     0,
+     343,  -294,     0,     0,     0,   781,     0,   296,   344,   298,
+     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,  -295,     0,     0,     0,   284,    34,     0,    35,     0,
+      36,   285,    31,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,     0,   294,     0,
+     931,  -295,     0,     0,     0,   781,     0,   296,   344,   298,
+     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
+      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,    38,    39,     0,     0,   294,     0,
+     931,     0,     0,     0,     0,   781,     0,   296,   600,   298,
+     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
+      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,   206,    39,     0,     0,   294,     0,
+     343,     0,     0,     0,     0,     0,     0,   296,   344,   298,
+     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   284,    34,     0,    35,     0,
+      36,   285,     0,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
+     931,     0,     0,     0,     0,     0,     0,   296,   344,   298,
+     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   284,    34,     0,    35,     0,
+      36,   285,     0,   206,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
+    1020,     0,     0,     0,     0,     0,     0,   296,  1021,   298,
+     299,   300,   301,     2,   205,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,   284,    34,     0,    35,    31,
+      36,   285,     0,   206,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,   206,    39,     0,     0,   294,     0,
+     378,     0,     0,     0,     0,     0,     0,   296,   380,   298,
+     299,   300,   301,   204,     2,   205,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,   270,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
+       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,   492,   493,   494,    34,     0,    35,
+      31,    36,    37,     0,   206,    39,    40,     0,     0,     0,
+       0,     0,     0,    41,    42,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+       0,     0,     0,     0,     0,    38,    39,     0,     0,    43,
+       0,   207,     0,     0,     0,     0,     0,     0,     0,   208,
+       1,     2,   205,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,  -294,     0,    26,    27,    28,
+      29,     0,     0,    30,     0,     0,    31,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,    34,     0,    35,     0,    36,     0,
+       0,    38,    39,     0,     0,  -294,     1,     2,   205,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,    29,     0,    44,    30,
+       0,     0,    31,     0,     0,     0,   110,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,    35,     0,    36,     0,     0,    38,    39,   204,
+       2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,  -294,  1227,    25,    26,    27,   693,    30,
-     694,  1107,   941,   722,    30,   213,   211,  1056,   478,   213,
-    1108,  1140,   825,  1118,   899,   478,   935,   964,  1331,   741,
-     972,   815,     0,     0,   816,   174,   257,    33,   817,   602,
-       0,   252,    33,   253,  1391,   630,     0,     0,     0,    37,
-      38,     0,   174,  -294,     0,     0,   174,  1424,   635,   211,
-       0,     0,   635,     0,     0,   257,     0,     8,     9,    10,
-      11,    12,     0,     0,     0,     0,     0,     0,   478,   776,
-       0,   409,     0,  1123,   935,   935,   337,     0,     0,   777,
-       0,     0,     0,     0,   109,    30,     0,     0,  1417,   653,
-       0,  1425,     0,     0,     0,  1217,   213,     0,     0,     0,
-       0,     0,   479,     0,     0,  1504,     0,  1504,     0,   174,
-     211,     0,     0,    33,   394,     0,     0,   348,     0,     0,
-       0,     0,   479,     0,   413,   414,     0,   728,   728,   418,
-     479,   420,   421,     0,     0,     0,  1464,     0,     0,     0,
-       0,  1468,  1504,     0,  1504,     0,     0,     0,   211,     0,
-       0,     0,   211,     0,     0,   958,   723,   609,     0,   429,
-       0,     0,     0,     0,     0,   959,     0,     0,   505,     0,
-     716,  1490,   322,     0,   737,   463,    63,   213,     0,     8,
-       9,    10,    11,    12,   429,   728,   728,     0,   429,     0,
-       0,     0,     0,     0,     0,     0,     0,     8,     9,    10,
-      11,    12,     0,   600,   607,     0,     0,    30,   749,    36,
-     753,   181,   182,    39,     0,   631,   632,   257,   348,     0,
-      40,    41,     0,     0,     0,    30,     0,   213,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,   211,
-      36,     0,   181,   182,    39,     0,   697,     0,   409,     0,
-       0,    40,    41,    33,   698,     0,   699,  1559,    36,     0,
-     181,   182,    39,  1559,   818,     0,     0,     0,     0,    40,
-      41,     0,     0,     0,  1559,   174,     0,   608,  1559,   609,
-       0,     0,   635,   831,   935,   602,     0,   610,     0,     0,
-       0,     0,     0,     0,     0,   697,   850,   409,     0,     0,
-       0,   935,     0,     0,     0,   699,     0,     0,   174,     0,
-       0,     0,     0,     0,   602,     0,     0,     0,     0,   602,
-     211,     0,     0,     0,   174,   635,     0,  1329,   348,   348,
-     348,     0,     0,     0,     0,  1385,     0,   211,     0,   174,
-      36,     0,   181,   182,    39,     0,     0,   348,     0,     0,
-     213,    40,    41,     0,     0,     0,     0,     0,     0,   728,
-       0,     0,   891,     0,     0,   723,     0,   728,   728,   728,
-     211,     0,     0,     0,   935,   935,   479,   697,   213,   409,
-       0,   257,   737,   213,     0,   937,     0,   699,     0,     0,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    72,     0,
-      25,    26,    27,     0,     0,   728,     0,     0,   479,    30,
-     452,   348,     0,   944,     0,     0,     0,     0,     0,   947,
-     963,     0,     0,   429,     0,    75,   174,     0,     0,    72,
-      36,     0,   181,   182,    39,     0,     0,    33,     0,     0,
-       0,    40,    41,     0,    37,    38,     0,   257,   737,     0,
-       0,     0,     0,   991,     0,     0,    75,     0,     0,     0,
-       0,   213,     0,     0,   220,     0,     0,  1529,     0,   409,
-       0,     0,     0,     0,     0,   213,     0,  1530,   485,     0,
-       0,   453,     0,   211,  1502,   710,  1506,     0,     0,   109,
-     723,   221,     0,     0,     0,     0,     0,     0,     0,     0,
-     723,     0,     0,   348,     0,   635,   820,   821,  1023,   635,
-     831,   211,     0,     0,     0,   723,   211,     0,     0,     0,
-       0,  1535,     0,  1537,     0,  1034,    36,     0,   181,   182,
-      39,     0,     0,     0,     0,     0,   855,    40,    41,   858,
-     859,     0,   862,     0,   864,   865,     0,     0,     0,   866,
-     867,     0,   351,   543,   544,   545,   546,   547,   548,   549,
-     550,   551,   552,   263,     0,     0,  1566,     0,  1567,   213,
-       0,     0,     0,   264,   951,     0,   952,    63,     0,   353,
-       0,  1574,  1575,   955,   956,     0,     0,   553,   961,     0,
-       0,     0,   174,     0,   653,     0,   411,     0,     0,   635,
-     966,  1060,     0,   419,   211,   970,     0,     0,     8,     9,
-      10,    11,    12,     0,     0,     0,     0,     0,   211,     0,
-       0,     0,     0,     0,     0,     0,   447,     0,     0,     0,
-       0,   999,     0,   942,   943,  1115,    30,     0,   505,   945,
-       0,     0,     0,   429,   115,     0,     0,    72,     0,     0,
-       0,     0,    72,     0,     0,     0,     0,     0,     0,     0,
-       0,   348,     0,     0,    33,     0,     0,     0,     0,    36,
-       0,   181,   182,    39,    75,   411,   600,     0,     0,    75,
-      40,    41,     0,     0,     0,     0,   124,   124,   124,     0,
-       0,     0,     0,   653,     0,     0,   602,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1529,     0,   409,   427,
-       0,     0,   211,     0,   723,   723,  1530,   348,   348,     0,
-       0,     0,     0,     0,     8,     9,    10,    11,    12,     0,
-       0,   583,     0,  1044,  1045,  1046,  1047,  1202,  1049,   587,
-       0,     0,   590,     0,     0,     0,     0,   220,     0,     0,
-       0,     0,    30,     0,  1093,     0,     0,   124,     0,   124,
-       0,   213,     0,     0,     0,     0,     0,     0,  1099,     0,
-       0,     0,   723,   723,   221,     0,     0,     0,   635,     0,
-      33,     0,     0,     0,   273,    36,     0,   181,   182,    39,
-       0,     0,     0,  1060,     0,     0,    40,    41,     0,     0,
-       0,     0,     0,     0,     0,   411,     0,  1114,     0,   419,
-       0,     0,     0,     0,    72,     0,     0,     0,     0,     0,
-       0,     0,   183,     0,     0,     0,     0,     0,     0,   351,
-       0,     0,   184,     0,    72,     0,   737,     0,     0,     0,
-     124,    75,    72,     0,     0,     0,     0,  1142,   124,     0,
-     124,   124,     0,     0,  1150,   124,   353,   124,   124,  1154,
-       0,    75,     0,     0,  1158,     0,  1159,     0,   351,    75,
-    1161,  1162,  1163,     0,     0,  1166,     0,     0,     0,  1298,
-       0,     0,     0,     0,  1178,     0,   351,     0,    72,   174,
-       0,     0,     0,     0,   411,   353,   257,     0,     0,  1297,
-       0,    63,  1193,  1194,   211,     0,     0,     0,     8,     9,
-      10,    11,    12,   353,   723,    75,   737,     0,     0,     0,
-     115,     0,     0,     0,     0,     0,     0,   124,     0,  1224,
-     351,     0,  1226,     0,     0,     0,    30,     0,     0,     0,
-     213,     0,     0,     0,     0,     0,   723,     0,     0,     0,
-       0,     0,     0,     0,   723,   723,   723,   353,     0,     0,
-       0,     0,     0,     0,    33,   348,   348,     0,     0,    36,
-    1241,   181,   182,    39,     0,     0,  1245,  1246,     0,  1202,
-      40,    41,     0,     0,     0,     0,   583,   583,  1257,     0,
-       0,     0,     0,  1261,     0,   351,  1265,     0,  1266,     0,
-       0,  1268,   723,     0,     0,     0,   263,     0,     0,     0,
-       0,     0,     0,   115,  1276,     0,   264,     0,     0,     0,
-       0,     0,   353,  1232,     0,     0,     0,  1283,     0,  1285,
-    1286,  1287,  1288,     0,     0,     0,   213,     0,     0,     0,
-     351,   351,   351,     0,     0,  1295,     0,  1296,     0,     0,
-       0,   170,     0,     0,     0,     0,     0,     0,     0,   351,
-       0,     0,     0,     0,     0,   174,     0,   353,   353,   353,
-       0,     0,     0,     0,     0,   910,     0,   351,     0,   913,
-    1324,  1325,     0,   211,     0,     0,   353,     0,    72,     0,
-     348,     0,    77,     0,   351,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
-       0,     0,   411,     0,     0,    75,   115,     0,     0,    84,
-       0,   353,     0,    77,     0,    54,    54,     0,     0,     0,
-      72,  1360,  1361,   351,     0,     0,     0,     0,     0,  1202,
-       0,  1371,     0,     0,     0,     0,  1202,  1320,     0,     0,
-      84,     0,     0,     0,     0,     0,    54,    75,   222,     0,
-     353,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     351,     0,     0,     0,     0,     0,     0,     0,     0,   211,
-       0,     0,     0,     0,     0,   223,     0,     0,    54,     0,
-       0,    54,     0,  1404,     0,     0,     0,   353,     0,  1202,
-       0,     0,     0,     0,     0,  1408,  1554,  1409,  1410,  1411,
-       0,     0,   351,     0,     0,     0,     0,     0,     0,  1415,
-       0,     0,   351,     0,     0,   351,     0,   583,  1426,     0,
-     220,     0,   351,     0,     0,     0,     0,   351,     0,   353,
-       0,     0,   124,   124,  1439,     0,   354,     0,     0,   353,
-       0,     0,   353,     0,     0,     0,     0,   221,     0,   353,
-       0,     0,     0,     0,   353,     0,     0,     0,     0,     0,
-       0,     0,   124,   361,     0,   124,   124,     0,   124,   346,
-     124,   124,     0,     0,     0,   124,   124,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    72,
-    1488,  1489,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,  1494,     0,     0,     0,     0,     0,     0,
-    1494,     0,     0,     0,     0,     0,    75,     0,     0,     0,
+      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
+       0,     0,     0,     0,    44,    31,     0,     0,     0,     0,
+       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     411,    77,     0,     0,    54,     0,    77,     0,     0,     0,
-       0,     0,     0,  1528,     0,     0,     0,  1534,     0,     0,
-       0,     0,     0,     0,   124,     0,     0,     0,    84,   124,
-     124,     0,     0,    84,    54,   124,     0,     0,     0,     0,
-       0,     0,     0,   351,     0,     0,  1556,     0,  1557,     0,
+       0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
+     206,    39,     0,     2,   205,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,     0,   207,    31,     0,
+       0,     0,     0,     0,     0,   270,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
+      36,    37,     0,   206,    39,    40,     0,     0,     0,     0,
+       0,     0,    41,    42,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    43,     0,
+     207,     0,     0,     0,     0,     0,     0,     0,   208,     2,
+     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+       0,     0,     0,     0,    31,     0,     0,     0,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,    34,     0,    35,     0,    36,     0,    31,    38,
+      39,     0,     2,   205,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    34,     0,    26,    27,
+      28,     0,     0,    38,    39,  -400,   687,    31,     0,     0,
+       0,     0,     0,     0,   634,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    34,     0,    35,   643,    36,
+     338,     0,    38,    39,     0,     0,     0,     0,   110,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,  1369,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   687,
+       0,     0,     0,     0,     0,     0,     0,   634,     2,   205,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
+       0,     0,     0,    31,     0,     0,     0,     0,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,  -294,     0,    26,    27,
+      28,    34,     0,    35,     0,    36,     0,    31,    38,    39,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    1371,     0,     0,     0,     0,    34,     0,     0,     0,     0,
+      37,     0,   336,   337,    40,   687,  -294,     0,     0,     0,
+       0,    41,    42,   634,     2,   205,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,   338,
+      26,    27,    28,     0,     0,     0,     0,   110,     0,    31,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
+       0,    36,     0,     0,   206,    39,     0,     2,   205,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+       0,   269,    31,     0,     0,     0,     0,     0,     0,   629,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,    35,     0,    36,     0,     0,    38,    39,     0,
+       2,   205,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
+       0,     0,     0,     0,   687,    31,     0,     0,     0,     0,
+       0,     0,   634,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    34,     0,    35,     0,    36,     0,     0,
+      38,    39,     0,     2,   205,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,     0,   599,    31,     0,
+       0,     0,     0,     0,     0,   634,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    34,     0,    35,     0,
+      36,     0,     0,   206,    39,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+       0,     0,   281,   282,    31,   283,     0,     0,     0,     0,
+     207,     0,     0,     0,     0,     0,     0,     0,   270,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   284,    34,     0,     0,     0,     0,   285,     0,    38,
+      39,   286,     0,     0,   287,   288,   289,   290,    41,    42,
+       0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   294,     0,   525,     0,     0,   170,
+       0,     0,     0,   296,   297,   298,   299,   300,   301,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,   284,    34,     0,     0,    31,
+       0,   285,     0,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
+       0,     0,    37,     0,   336,   337,    40,     0,   294,     0,
+     599,    -3,     0,    41,    42,     0,     0,   296,   600,   298,
+     299,   300,   301,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,   338,     0,    26,    27,    28,     0,     0,     0,   110,
+     281,   282,    31,   283,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,   284,
+      34,     0,     0,    31,   453,   649,     0,    38,    39,   286,
+       0,     0,   287,   288,   289,   290,    41,    42,     0,   291,
+     292,     0,     0,     0,     0,     0,     0,   293,     0,     0,
+       0,    34,     0,     0,     0,     0,     0,     0,    38,    39,
+       0,     0,   294,   -35,   766,     0,     0,     0,     0,     0,
+       0,   296,   297,   298,   299,   300,   301,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,   454,     0,    26,    27,    28,
+       0,     0,     0,   110,   281,   282,    31,   283,     0,     0,
+       0,     0,     0,     0,     0,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,   284,    34,    26,    27,    28,     0,   285,
+       0,    38,    39,   286,    31,     0,   287,   288,   289,   290,
+      41,    42,     0,   291,   292,     0,     0,     0,     0,     0,
+       0,   293,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,     0,     0,   294,     0,   295,    38,
+      39,     0,     0,     0,     0,   296,   297,   298,   299,   300,
+     301,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,     0,
+       0,    26,    27,    28,   643,     0,   338,     0,   281,   282,
+      31,   283,     0,     0,   634,     0,     0,     0,     0,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,   284,    34,    26,
+      27,    28,     0,   285,     0,    38,    39,   286,    31,     0,
+     287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
+       0,     0,     0,     0,     0,   293,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    34,     0,     0,     0,
+     294,     0,   156,    38,    39,     0,     0,     0,     0,   296,
+     297,   298,   299,   300,   301,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+     256,     0,   281,   282,    31,   283,     0,     0,   110,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   284,    34,     0,     0,     0,     0,   285,     0,    38,
+      39,   286,     0,     0,   287,   288,   289,   290,    41,    42,
+       0,   291,   292,     0,     0,     0,     0,     0,     0,   293,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   294,     0,   599,     0,     0,     0,
+       0,     0,     0,   296,   600,   298,   299,   300,   301,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,     0,     0,    26,
+      27,    28,     0,     0,     0,     0,   281,   282,    31,   283,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,   284,    34,     0,     0,    31,
+       0,   285,     0,    38,    39,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,    34,     0,     0,
+       0,     0,    37,     0,    38,    39,    40,     0,   294,     0,
+     378,     0,     0,    41,    42,     0,     0,   296,   380,   298,
+     299,   300,   301,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    43,
+       0,    44,     0,     0,     0,     0,     0,     0,     0,    45,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,    34,     0,    31,
+       0,     0,    37,     0,   206,    39,    40,     0,     0,     0,
+       0,     0,     0,    41,    42,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
+       0,     0,    37,     0,   336,   337,    40,     0,     0,    43,
+       0,   269,     0,    41,    42,     0,     0,     0,     0,   208,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   643,
+       0,   338,     0,     0,     0,     0,     0,     0,     0,   634,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,  -294,     0,
+      26,    27,    28,     0,     0,     0,     0,    34,     0,    31,
+       0,     0,     0,     0,    38,    39,     0,     0,  -294,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    34,     0,     0,
+       0,     0,     0,     0,    38,    39,     0,     0,  -294,   643,
+       0,   338,     0,     0,     0,     0,     0,     0,     0,   110,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   643,
+       0,   338,     0,     0,     0,     0,     0,     0,     0,   634,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
+     453,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,  -294,
+       0,    26,    27,    28,     0,     0,     0,    34,     0,     0,
+      31,     0,     0,     0,    38,    39,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    34,     0,
+       0,     0,     0,     0,     0,    38,    39,     0,     0,  -294,
+       0,   454,     0,     0,     0,   947,     0,     0,     0,   110,
+       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,   338,    26,    27,    28,     0,     0,     0,     0,
+     110,     0,    31,   453,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,     0,    26,    27,    28,     0,     0,     0,
+      34,     0,     0,    31,     0,     0,     0,    38,    39,     0,
        0,     0,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-     353,    25,    26,    27,     0,     0,  1572,  1573,     0,  1156,
-      30,   452,     0,     0,  1576,  1577,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1168,   351,   351,     0,   351,
-     351,   222,     0,     0,     0,     0,     0,     0,    33,     0,
-       0,     0,     0,     0,     0,    37,    38,     0,     0,    72,
-       0,     0,     0,   353,   353,     0,   353,   353,   223,     8,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,    34,    26,    27,    28,     0,     0,     0,    38,    39,
+       0,    31,     0,     0,   454,     0,     0,     0,  1235,     0,
+       0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    34,
+       0,     0,     0,     0,     0,   156,   206,    39,     0,     0,
+       0,     0,     0,   110,     0,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+       0,     0,     0,   269,    31,     0,     0,     0,     0,     0,
+       0,   270,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,    34,    26,    27,    28,     0,     0,     0,    38,
+      39,     0,    31,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+      34,     0,    31,     0,     0,     0,   256,    38,    39,     0,
+       0,     0,     0,     0,   634,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,     0,    38,    39,     0,
+       0,     0,     0,     0,   338,     0,     0,     0,     0,     0,
+       0,     0,   634,     0,     0,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,   454,    26,    27,    28,     0,     0,
+       0,     0,   110,     0,    31,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+       0,     0,    34,     0,    31,     0,     0,     0,     0,   206,
+      39,     0,     0,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,    34,    26,    27,    28,     0,     0,     0,    38,
+      39,     0,    31,     0,     0,     0,   269,     0,     0,     0,
+       0,     0,     0,     0,   629,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,     0,     0,     0,     0,   599,    38,    39,     0,
+       0,     0,     0,     0,   634,     0,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,     0,     0,    26,    27,    28,     0,
+       0,     0,     0,     0,   338,    31,     0,     0,     0,     0,
+       0,     0,   110,     0,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,     0,    34,    26,    27,    28,     0,     0,     0,
+      38,    39,     0,    31,     0,     0,     2,   205,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+       0,    34,    26,    27,    28,     0,     0,    44,   206,    39,
+       0,    31,     0,   281,   282,   110,   283,  1063,     0,  1064,
+       0,     0,  1065,  1066,  1067,  1068,  1069,  1070,  1071,  1072,
+       0,     0,  1549,  1073,     0,     0,     0,  1074,  1075,    34,
+      33,    35,   284,    36,     0,     0,    38,    39,   649,     0,
+       0,     0,   286,   629,     0,   287,   288,   289,   290,    41,
+      42,     0,   291,   292,     0,     0,     0,     0,     0,     0,
+     293,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,  -413,     0,     0,   294,     0,   378,     0,     0,
+     170,     0,     0,     0,   296,   380,   298,   299,   300,   301,
+       0,     0,     0,     0,  1077,     0,   281,   282,  -129,   283,
+    1063,     0,  1064,     0,     0,  1065,  1066,  1067,  1068,  1069,
+    1070,  1071,  1072,     0,     0,     0,  1073,     0,     0,     0,
+    1074,  1075,     0,    33,     0,   284,     0,     0,     0,     0,
+       0,   649,     0,     0,     0,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,     0,
+       0,     0,     0,   293,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   294,     0,
+     378,     0,     0,   170,     0,     0,     0,   296,   380,   298,
+     299,   300,   301,     0,     0,     0,     0,  1077,     0,     0,
+       0,  -129,     2,   205,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,     0,     0,    26,    27,
+      28,     0,     0,     0,     0,     0,     0,    31,     0,   281,
+     282,     0,   283,  1063,     0,  1064,  1419,  1420,  1065,  1066,
+    1067,  1068,  1069,  1070,  1071,  1072,     0,     0,  1549,  1073,
+       0,     0,     0,  1074,  1075,    34,    33,    35,   284,    36,
+       0,     0,    38,    39,   649,     0,     0,     0,   286,     0,
+       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
+       0,     0,     0,     0,  1328,     0,   293,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   294,     0,   378,     0,     0,   170,     0,     0,     0,
+     296,   380,   298,   299,   300,   301,     0,     0,   281,   282,
+    1077,   283,  1063,     0,  1064,  1419,  1420,  1065,  1066,  1067,
+    1068,  1069,  1070,  1071,  1072,     0,     0,     0,  1073,     0,
+       0,     0,  1074,  1075,     0,    33,     0,   284,     0,     0,
+       0,     0,     0,   649,     0,     0,     0,   286,     0,     0,
+     287,   288,   289,   290,    41,    42,     0,   291,   292,     0,
+       0,     0,     0,     0,     0,   293,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     294,     0,   378,     0,     0,   170,     0,     0,     0,   296,
+     380,   298,   299,   300,   301,     0,     0,   281,   282,  1077,
+     283,  1063,     0,  1064,     0,     0,  1065,  1066,  1067,  1068,
+    1069,  1070,  1071,  1072,     0,     0,     0,  1073,     0,     0,
+       0,  1074,  1075,     0,    33,     0,   284,     0,     0,     0,
+       0,     0,   649,     0,     0,     0,   286,     0,     0,   287,
+     288,   289,   290,    41,    42,     0,   291,   292,     0,     0,
+       0,     0,     0,     0,   293,   281,   282,     0,   283,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   294,
+       0,   378,     0,     0,   170,     0,     0,     0,   296,   380,
+     298,   299,   300,   301,   284,     0,     0,     0,  1077,     0,
+     285,     0,     0,     0,   286,     0,     0,   287,   288,   289,
+     290,    41,    42,     0,   291,   292,     0,     0,     0,     0,
+       0,     0,   293,   281,   282,     0,   283,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   294,     0,   378,
+       0,     0,   281,   282,     0,   283,   296,   380,   298,   299,
+     300,   301,   284,     0,     0,     0,     0,     0,   285,     0,
+       0,     0,   286,     0,     0,   287,   288,   289,   290,    41,
+      42,   284,   291,   292,     0,     0,     0,   649,     0,     0,
+     293,   286,     0,     0,   287,   288,   289,   290,    41,    42,
+       0,   291,   292,     0,     0,   294,     0,   378,     0,   293,
+     281,   282,     0,   283,   296,   734,   298,   299,   300,   301,
+       0,     0,     0,     0,   294,     0,   785,     0,     0,   281,
+     282,     0,   283,   296,   380,   298,   299,   300,   301,   284,
+       0,     0,     0,     0,     0,   285,     0,     0,     0,   286,
+       0,     0,   287,   288,   289,   290,    41,    42,   284,   291,
+     292,     0,     0,     0,   285,     0,     0,   293,   286,     0,
+       0,   287,   288,   289,   290,    41,    42,     0,   291,   292,
+       0,     0,   294,     0,   378,     0,   293,   281,   282,     0,
+     283,   296,   827,   298,   299,   300,   301,     0,     0,     0,
+       0,   294,     0,     0,     0,     0,   281,   282,     0,   283,
+     296,   380,   298,   299,   300,   301,   284,     0,     0,     0,
+       0,     0,   285,     0,     0,     0,   286,     0,     0,   287,
+     288,   289,   290,    41,    42,   284,   291,   292,     0,     0,
+       0,   285,     0,     0,   293,   286,     0,     0,   287,   288,
+     289,   290,    41,    42,     0,   291,   292,     0,     0,   518,
+       0,     0,     0,   293,     0,     0,     0,     0,   296,   380,
+     298,   299,   300,   301,     0,     0,     0,     0,   521,     0,
+       0,     0,     0,     0,     0,     0,     0,   296,   380,   298,
+     299,   300,   301,   204,     2,   205,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,     0,     0,
+      26,    27,    28,     0,     0,     0,     0,     0,     0,    31,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    34,     0,    35,
+       0,    36,     0,     0,   206,    39,   474,     2,   205,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,     0,     0,    26,    27,    28,     0,     0,     0,     0,
+       0,     0,    31,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      34,     0,    35,     0,    36,     0,     0,    38,    39,     2,
+     205,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,     0,     0,    26,    27,    28,     0,     0,
+       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    34,     0,    35,     0,    36,     0,     0,   206,
+      39
+};
+
+#define yypact_value_is_default(yystate) \
+  ((yystate) == (-1356))
+
+#define yytable_value_is_error(yytable_value) \
+  YYID (0)
+
+static const yytype_int16 yycheck[] =
+{
+       0,     1,     0,   184,    43,   698,   115,   184,    43,   184,
+      43,   238,    55,   698,     1,   167,   168,   698,   104,   203,
+     543,   294,   184,   455,   185,   218,   280,   278,   456,    29,
+      30,   656,    32,   184,    32,   348,   611,   184,   520,   185,
+     759,   611,     1,    43,   184,    45,  1006,    45,   186,   629,
+     499,   579,   609,     0,   503,    55,   902,   999,   462,  1042,
+    1043,    61,   105,    61,    64,   108,    64,    67,   154,    67,
+     902,   348,   780,    43,    43,   609,   609,    32,    39,    51,
+      67,    81,    82,   264,   777,    32,  1419,   264,   609,   264,
+    1338,   200,   777,   609,    28,  1055,   777,   529,   723,    63,
+      95,  1062,   264,   609,   265,   105,   699,    39,   108,   110,
+     417,    82,    43,   264,   699,   115,   117,   264,   109,   265,
+    1475,   497,   260,   261,   264,   609,    64,   363,   721,    82,
+     437,   367,    39,     0,   612,   130,   721,   109,   445,   110,
+     618,  1074,  1075,   344,    78,   184,   146,    82,   146,   184,
+     111,   184,   425,   426,   154,  1510,     0,  1512,   111,   159,
+    1493,   159,  1043,   425,   426,    32,   107,   227,   132,     0,
+       1,   109,   109,   109,   217,   111,   255,   109,    39,   111,
+       0,     1,   283,   119,   184,   185,   246,   185,    32,     0,
+     131,    39,     0,  1441,    72,   296,   297,    64,    44,    45,
+     200,    32,   109,    39,   111,    83,    84,   308,   208,  1142,
+     208,   680,    32,    39,   184,   184,   409,   217,   495,   812,
+     220,    32,   220,   744,    32,   264,   110,   227,   271,   264,
+    1062,   264,   116,    64,   109,   278,    67,   613,   744,   501,
+     513,   617,   242,   344,   405,   518,   246,    67,   521,    11,
+     250,   251,   250,   184,   132,   341,   131,   511,   520,   405,
+     744,   109,   638,   111,   264,   265,   642,   265,     0,   115,
+     109,   271,   111,   109,   109,   111,   851,    45,   278,   380,
+     119,   851,   839,   109,   370,   111,   395,    82,   489,   110,
+     718,   819,   251,   293,   455,   250,   117,   890,   611,    85,
+      32,  1009,   575,   250,   347,   839,   839,  1290,  1291,   455,
+      45,    43,    82,    45,   423,  1257,    44,    45,   839,   112,
+     429,   364,   117,   839,   586,   368,   487,   113,   328,    61,
+     328,   114,    64,   839,   293,    67,   116,    82,   417,   109,
+      96,   487,   110,  1304,     3,   112,   815,   347,   348,   116,
+      44,    45,  1071,   220,     3,   839,   825,   489,   437,   116,
+    1241,   597,    72,   841,   364,   110,   445,   123,   368,    82,
+      72,   840,   117,    83,    84,   110,    72,   145,     0,   379,
+    1226,    83,    84,   250,   691,   978,   114,    83,    84,   220,
+     960,   644,   645,   978,  1226,   395,   109,    96,   129,   600,
+     131,   111,   959,     0,   640,   405,   250,   405,  1526,   662,
+    1291,   255,   109,   513,   146,   515,  1009,   119,   518,   250,
+     114,   521,   676,   423,   123,   959,   959,   159,   629,   429,
+     250,   431,  1415,   634,  1526,  1553,   132,  1496,    72,   250,
+     208,  1021,   250,  1502,   255,   131,   532,  1407,  1408,    83,
+      84,   116,   184,   185,  1546,   455,   557,   558,   559,   112,
+     460,  1553,   109,   116,  1523,   465,  1059,   132,   116,  1528,
+     238,   110,  1304,   208,   474,   471,   208,   111,   117,   479,
+     109,   110,   349,   736,   132,   115,   116,   487,   220,   487,
+     109,   491,   131,   491,    80,   495,   697,   873,   498,   600,
+     500,   131,   270,  1464,   239,   657,   938,   758,   762,   109,
+    1471,   643,   644,   645,   946,   474,  1141,   698,   250,   968,
+     520,   698,  1004,   698,   928,   111,   109,   113,   666,   297,
+     662,   117,   264,   109,  1415,   270,   698,   537,   851,   700,
+     540,  1134,   542,   543,   491,   109,  1116,   698,   116,  1134,
+     116,   698,  1030,  1031,   700,   664,    72,   110,   698,   294,
+     992,   520,   297,  1524,   132,   697,   132,    83,    84,   110,
+    1039,  1040,   773,   417,   851,   828,   344,   110,   537,  1423,
+     112,   540,   110,   542,   543,  1304,   116,   630,   116,   965,
+     590,    30,   110,   437,   830,   111,   328,   597,   834,  1192,
+    1193,   445,   132,   646,   736,   110,   417,  1192,  1193,   609,
+     696,   611,   691,   480,    90,    91,   348,   119,   661,   643,
+     644,   645,   124,   125,   491,   109,   437,   111,  1097,  1098,
+     630,   590,  1464,   734,   445,    80,  1132,   116,   662,  1471,
+    1136,   773,    81,    82,    72,   112,   646,   491,    76,   116,
+     126,   127,   652,   132,   733,    83,    84,   425,   426,   116,
+     491,   661,  1381,   663,   664,   665,   111,   110,   113,   116,
+     110,   491,   117,   405,  1102,   132,   116,  1521,   489,   780,
+     491,   109,  1526,   491,   680,   132,   772,   964,   924,   116,
+     115,   119,  1524,   109,   116,   888,   828,   109,   698,   111,
+     700,   116,  1546,   109,   663,   132,   665,   119,   116,  1553,
+     132,   109,   736,   713,   116,   758,   909,   132,   453,   719,
+      64,   456,   110,   455,   132,    68,   827,   462,   116,    72,
+     132,   731,    75,   501,    77,    72,    10,    11,    12,    13,
+      14,    84,   894,   970,   744,   745,    83,    84,   110,  1468,
+      72,  1470,   520,   109,   116,   111,   132,   116,   758,   491,
+       3,    83,    84,   495,   631,    39,   112,    10,    11,    12,
+      13,    14,   731,   132,   111,   110,   110,   938,   513,   109,
+     515,   116,   116,   518,   112,   946,   521,   109,   116,   110,
+     598,   132,   938,    67,   112,   116,    39,  1320,   116,   110,
+     946,   110,  1271,   242,   828,   116,  1525,   116,   109,  1402,
+    1279,  1280,  1281,   109,    45,   111,   110,  1402,   586,   815,
+    1021,   110,   116,   112,    67,   110,  1419,   116,   114,   825,
+      61,   116,   600,    64,  1419,   110,    67,  1530,   109,   839,
+     111,   116,   131,   132,   840,  1530,     1,   691,    72,  1530,
+    1034,   851,    76,    72,   114,    74,    75,   724,  1327,    83,
+      84,   629,    64,    72,    83,    84,   634,  1103,   211,   132,
+     110,   738,   121,   122,    83,    84,   116,   609,  1132,   611,
+     691,   132,  1136,  1137,   114,   109,   697,   111,   109,   733,
+      45,   109,    72,   111,   894,   119,    76,    88,    89,  1492,
+    1493,   901,   902,    83,    84,  1057,   110,  1492,  1493,    82,
+    1042,   110,   116,   110,   116,   146,   109,   116,   111,   116,
+    1021,   110,   733,   109,   924,   110,   109,   116,   159,   109,
+     112,   116,  1205,  1206,   109,  1208,   111,    82,   938,   119,
+     379,  1214,   120,   902,  1217,   109,   946,   111,   129,   104,
+     564,   565,   566,   567,   185,   110,   109,   159,   111,   128,
+    1161,  1062,   773,    94,   964,   832,   698,    72,   700,    74,
+      75,    64,    92,    93,    85,    86,    87,   208,    83,    84,
+     115,   116,   969,   718,   984,   109,   110,   111,    81,   220,
+     145,   116,   117,   993,   109,   110,   111,  1251,   109,   154,
+     111,  1001,   113,   114,  1004,   703,  1006,   705,   351,   114,
+     353,   111,   744,   745,   131,  1124,   110,   111,   220,    58,
+      59,   460,   109,   116,   109,   984,   465,   835,   112,  1161,
+     109,   110,   111,   115,   116,   902,   109,   110,   111,   109,
+    1241,   112,  1001,  1039,  1040,  1004,   110,  1006,   110,   204,
+      58,    59,    60,   208,   110,  1055,   258,   110,   902,   498,
+     262,   500,   116,   117,   110,  1065,   159,   110,  1068,  1069,
+    1070,   902,   112,  1505,   116,   117,    72,  1178,    74,    75,
+      76,   111,   902,   238,   239,  1339,   112,    83,    84,  1343,
+     131,   902,   116,  1093,   902,   114,  1055,   328,   441,    44,
+      45,  1097,  1098,   109,  1377,   112,  1065,   839,   110,  1068,
+    1069,  1070,   110,   109,    72,   270,    74,    75,   273,   851,
+    1263,  1264,  1265,  1555,  1124,    83,    84,   220,   112,     4,
+       5,     6,     7,     8,     9,  1221,   560,   561,   969,   294,
+     112,   112,   297,   562,   563,   568,   569,   349,   112,   969,
+     117,   109,     3,    29,   117,   117,   114,  1024,  1290,    10,
+      11,    12,    13,    14,    72,   258,    74,    75,    76,   262,
+     116,   110,   110,   114,   405,    83,    84,   112,    10,    11,
+      12,    13,    14,   117,   115,   110,   341,   115,    39,   344,
+     116,  1445,   115,   928,    69,  1062,    71,   109,   116,  1199,
+     110,   109,   970,   111,   110,   132,   938,    39,   363,   117,
+     110,   119,   367,   652,   946,   370,    67,  1204,  1062,   117,
+     110,  1221,    72,   110,    74,    75,  1226,   110,   430,   110,
+       3,  1062,   964,    83,    84,    67,   116,    10,    11,    12,
+      13,    14,  1062,  1239,     4,     5,     6,     7,     8,     9,
+     110,  1062,   110,  1021,  1062,   110,   349,   132,  1245,   115,
+      29,   111,   110,  1263,  1264,  1265,    39,  1226,   110,   110,
+     425,   426,   110,    33,   713,  1271,   110,   109,   480,   111,
+     719,   902,   110,  1279,  1280,  1281,   110,   119,    72,  1398,
+      74,    75,    76,   110,    67,   110,   131,   110,   453,    83,
+      84,   456,   112,   110,  1263,  1264,  1265,   462,   110,    69,
+     115,    71,   110,  1540,    85,    86,    87,   116,   112,   474,
+    1320,  1321,   112,   110,     4,     5,     6,     7,     8,     9,
+     110,  1327,   110,   471,   116,   116,  1203,   430,   109,   114,
+     111,   117,   113,   114,   499,   112,   501,   110,   503,  1530,
+    1161,  1338,   116,  1530,  1397,  1530,   110,   116,   513,  1226,
+     515,  1320,  1321,   518,   116,   520,   521,  1102,  1530,   110,
+    1531,   117,  1203,  1204,   112,  1375,   109,   532,  1378,  1530,
+     109,   109,  1226,  1530,  1204,  1531,   109,   480,   109,    69,
+    1530,    71,   112,   132,  1555,  1226,  1505,  1397,  1398,   115,
+     110,   603,   110,   110,   129,   114,  1226,  1407,  1408,  1555,
+      72,   115,    74,    75,  1245,  1226,  1375,   112,  1226,  1378,
+     132,    83,    84,  1423,   110,  1245,   116,   112,  1428,   631,
+    1241,   586,  1299,   116,   636,   112,    55,  1304,   110,   110,
+     110,    47,   597,   112,  1065,   600,  1446,   109,  1407,  1408,
+     110,   112,   114,   112,  1441,   894,   112,    53,  1458,   112,
+    1304,   112,   901,   115,  1423,   132,   132,   132,  1299,  1428,
+     110,   115,   117,  1304,   629,   132,   110,   132,   115,   634,
+     112,   112,     0,     1,  1304,   640,   105,  1446,   112,   108,
+     112,  1530,   112,  1304,   112,  1530,  1304,  1530,   112,  1458,
+      96,   112,   110,   110,   109,  1505,  1506,  1338,   112,   112,
+     603,   109,   109,    60,    32,  1515,   110,   110,  1338,   114,
+     132,  1521,   724,   112,   112,   117,  1526,    45,   110,   112,
+    1530,  1531,   110,  1531,    96,   154,   738,    96,   631,   109,
+     109,   696,   680,   636,  1544,   132,  1546,  1506,   115,    67,
+    1550,   112,   110,  1553,   993,  1555,  1515,  1555,   110,   110,
+     110,  1561,  1521,   718,    51,  1565,    53,  1526,   116,    56,
+      57,    58,    72,    60,    74,    75,    76,    42,    72,   117,
+      74,    75,    76,    83,    84,  1544,   104,  1546,    75,    83,
+      84,  1550,   132,   748,  1553,   132,   192,  1464,   217,   110,
+      87,    88,  1561,   110,  1471,  1226,  1565,    96,    96,   109,
+    1441,    72,   132,    74,    75,    76,   132,   772,   110,   215,
+    1464,  1441,    83,    84,   110,   110,   117,  1471,   146,   225,
+     832,   724,   110,  1464,   132,   115,   154,   155,   112,   112,
+    1471,   109,   132,   115,  1464,   738,   115,   110,   109,   132,
+     111,  1471,   271,  1464,  1093,   110,  1464,  1524,   119,   278,
+    1471,   132,    72,  1471,    74,    75,    76,   185,   110,   110,
+    1077,   570,   573,    83,    84,   830,   571,   815,   572,   834,
+    1524,   574,   200,  1226,    64,   203,   204,   825,  1493,  1565,
+     208,  1383,  1343,  1524,    74,  1137,  1314,  1471,   294,   109,
+    1321,   111,   840,  1093,  1524,   453,   453,   946,   705,   119,
+     465,   229,   948,  1524,   993,   233,  1524,   235,   590,   748,
+     894,    10,    11,    12,    13,    14,   244,   758,   347,   658,
+    1245,   966,   250,   491,   578,   578,   116,   255,  1473,   832,
+    1475,   578,    -1,    -1,    -1,   364,    -1,   265,    -1,   368,
+      39,    -1,    -1,    -1,  1375,   273,    -1,  1378,    -1,    -1,
+    1199,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   924,
+      -1,    -1,  1540,   928,    -1,  1510,    -1,  1512,    67,   159,
+      -1,    -1,    -1,    72,    -1,    74,    75,    76,    72,    -1,
+      74,    75,    76,    -1,    83,    84,     0,    -1,  1530,    83,
+      84,    -1,  1423,    -1,    -1,    -1,    72,  1428,    74,    75,
+      76,    -1,   431,   968,   969,   970,    -1,    83,    84,    -1,
+     109,    -1,  1024,   341,    -1,   109,   344,   111,    32,    -1,
+     119,    -1,   350,    -1,    -1,   119,    -1,  1458,    -1,    -1,
+     220,    -1,    -1,   109,    -1,   363,   442,    -1,    -1,   367,
+      -1,    -1,   370,   119,    -1,    -1,    -1,   344,   345,    -1,
+      -1,    -1,    -1,    67,    -1,    -1,  1021,    -1,    -1,   356,
+     357,    10,    11,    12,    13,    14,    -1,    -1,   258,    -1,
+     476,    -1,   262,    72,    -1,    74,    75,    76,    -1,    -1,
+      -1,    -1,    -1,    -1,    83,    84,    -1,    -1,   278,   417,
+      39,  1039,  1040,    -1,    -1,    -1,    26,    27,    28,    -1,
+      -1,    -1,    -1,    -1,   432,    -1,    -1,   513,    -1,   437,
+     109,    -1,   518,  1544,    -1,   521,    -1,   445,    67,  1550,
+     119,  1024,    10,    11,    12,    13,    14,    -1,    -1,    -1,
+    1561,    -1,    -1,    -1,  1565,    -1,    -1,  1102,  1103,    -1,
+      -1,   155,    -1,   471,    -1,    -1,   474,    -1,    -1,  1097,
+    1098,    39,    -1,    -1,    10,    11,    12,    13,    14,   349,
+     109,   489,   111,   491,    -1,    -1,    -1,    97,   597,    99,
+     119,   499,    -1,    -1,    -1,   503,    -1,    -1,    -1,    67,
+      -1,    -1,    -1,    39,    72,    -1,    74,    75,    76,    -1,
+      -1,  1203,    -1,    -1,   124,    83,    84,    -1,    -1,    -1,
+      -1,   630,    -1,    -1,   532,   533,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    -1,    -1,   229,    72,   646,    74,    75,
+      76,   109,    -1,   111,    -1,    -1,    -1,    83,    84,    -1,
+      -1,   119,   661,    -1,    -1,    -1,   250,    -1,    -1,    -1,
+     430,   255,    -1,    -1,    -1,    10,    11,    12,    13,    14,
+     180,   579,    -1,   109,    -1,   111,  1221,   447,   188,    -1,
+     190,   191,    -1,   119,    -1,   195,    -1,   197,   198,   597,
+     598,    -1,   600,   679,    39,    -1,    -1,    -1,    -1,    -1,
+    1245,    -1,   688,   611,    -1,    -1,   692,  1299,    -1,    -1,
+     480,  1239,    -1,    10,    11,    12,    13,    14,    -1,    -1,
+    1203,   629,    67,    -1,    -1,    -1,   634,    72,    -1,    74,
+      75,    76,   640,    -1,    -1,   643,   644,   645,    83,    84,
+      -1,    -1,    39,  1271,    -1,    -1,    -1,    -1,    -1,   758,
+      -1,  1279,  1280,  1281,   662,    -1,   350,   267,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
+      67,    -1,   680,    -1,   119,    72,    -1,    74,    75,    76,
+      -1,    -1,    -1,   691,    -1,    -1,    83,    84,   696,   697,
+      -1,    -1,   700,  1338,    -1,    -1,    -1,    -1,    -1,  1327,
+      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,    -1,    -1,  1299,    -1,    -1,    -1,
+      -1,    -1,   119,   417,    -1,   733,    -1,    -1,   736,    -1,
+      -1,    39,    -1,   603,    -1,    -1,    -1,   745,   432,    -1,
+     748,    -1,    -1,   437,    -1,    -1,    -1,    -1,   725,    -1,
+     727,   445,    -1,    -1,    -1,    -1,    -1,   734,   735,    67,
+      -1,   631,   739,    -1,   772,   773,   636,    -1,    -1,    -1,
+     778,    -1,    -1,    -1,   751,    -1,    -1,   471,    -1,   756,
+      97,    98,    99,   100,   101,   102,   103,   104,   105,   106,
+      -1,    -1,    -1,    -1,    -1,   489,  1441,   491,    -1,    -1,
+      -1,   109,    -1,   111,    -1,   782,    -1,   815,    -1,    -1,
+      -1,   119,    -1,    -1,   131,   924,    -1,   825,    -1,    -1,
+     828,    -1,   830,    -1,    -1,   833,   834,   835,  1473,    -1,
+    1475,    -1,   840,    -1,    -1,    -1,    -1,    -1,    -1,   533,
+     926,    -1,   850,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     827,    -1,    -1,    -1,   724,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1510,    -1,  1512,   738,    -1,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,   758,    -1,
+      30,    31,    32,    -1,   902,  1540,    -1,    -1,    -1,    39,
+      -1,    -1,    -1,    -1,   598,    -1,    -1,   884,   885,   886,
+     887,    -1,   889,    -1,    -1,    -1,   924,    -1,    10,    11,
+      12,    13,    14,    -1,    -1,    -1,     0,    67,   905,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
+      -1,    -1,   919,    83,    84,    -1,    -1,    39,    -1,   643,
+     644,   645,   960,    -1,    -1,    -1,    -1,    -1,    32,    -1,
+     968,   969,   832,    -1,    -1,    -1,    -1,    -1,   662,   109,
+      -1,   111,   582,   583,    -1,    67,    -1,    -1,   986,   119,
+      72,   958,    -1,    -1,    76,    -1,   680,  1073,    -1,    -1,
+      -1,    83,    84,    67,    -1,    -1,    -1,   691,    -1,    -1,
+      -1,    -1,   612,   697,    -1,   615,   616,    -1,   618,    -1,
+     620,   621,    -1,  1021,    -1,   625,   626,   109,    -1,    -1,
+      -1,   998,    -1,    -1,    -1,    -1,  1034,   119,  1005,    -1,
+      -1,  1039,  1040,  1010,  1042,  1043,    -1,    -1,  1015,   733,
+    1017,    -1,   736,    -1,  1021,  1022,  1023,    -1,    -1,  1026,
+      -1,    -1,    -1,    -1,  1062,    -1,    -1,    -1,  1035,    -1,
+      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1053,  1054,    -1,   773,
+      -1,   155,    -1,    -1,    -1,     0,    -1,    -1,    -1,  1097,
+    1098,    39,    -1,    -1,   704,  1103,    -1,    -1,    -1,   709,
+     710,    -1,    -1,  1080,    -1,   715,  1083,    -1,    -1,    -1,
+      -1,    -1,  1221,    -1,    -1,    -1,    -1,    32,    -1,    67,
+      -1,   815,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,
+      -1,   825,    -1,    -1,   828,    83,    84,    -1,    -1,   833,
+      -1,   835,    -1,    -1,  1121,    -1,   840,    -1,    -1,    -1,
+    1127,  1128,    67,  1161,  1024,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,  1139,    -1,    -1,    -1,    -1,  1144,    -1,    -1,
+    1147,   119,  1149,    -1,    -1,  1152,   250,    -1,    -1,    -1,
+      -1,   255,   188,    -1,    -1,    -1,    -1,    -1,  1165,   195,
+      -1,    -1,    -1,    -1,    -1,    -1,  1204,    -1,    -1,    -1,
+      -1,  1178,     0,  1180,  1181,  1182,  1183,    -1,   902,    -1,
+      -1,    -1,    -1,  1221,    -1,    -1,    -1,    -1,  1226,  1196,
+      -1,  1198,    -1,    -1,    -1,  1202,    -1,  1313,    -1,    -1,
+      -1,  1239,    -1,  1241,    32,     0,     1,  1245,    -1,    -1,
+     155,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,  1231,  1232,    -1,    -1,    -1,    -1,
+      -1,   267,    -1,  1271,    -1,    -1,    -1,    32,    -1,    67,
+      -1,  1279,  1280,  1281,    -1,    -1,   350,    -1,    -1,    -1,
+      -1,    -1,  1290,  1291,    -1,    -1,    -1,    -1,  1397,    -1,
+      -1,    -1,   986,    -1,    -1,    -1,  1304,    -1,    -1,    64,
+      -1,    -1,    67,    -1,    -1,  1282,  1283,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1292,    -1,   323,    -1,  1327,
+      -1,    -1,    -1,    -1,    -1,   331,    -1,    -1,   334,    -1,
+    1338,    -1,    -1,  1203,    -1,   250,    -1,    -1,    -1,    -1,
+     255,    -1,    -1,   417,    -1,  1039,  1040,    -1,  1042,  1043,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   155,   432,    -1,
+      -1,    -1,    -1,   437,    -1,    -1,    -1,  1344,  1062,    -1,
+      -1,   445,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1356,
+      -1,  1358,  1359,  1360,    -1,    -1,  1472,    -1,  1474,    -1,
+     155,   397,    -1,  1370,    -1,   401,    -1,   471,    -1,    -1,
+      -1,    -1,  1379,  1097,  1098,    -1,    -1,  1415,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   489,    -1,   491,  1395,    -1,
+      -1,    -1,    -1,  1509,    -1,  1511,    -1,    -1,    -1,  1299,
+      -1,    -1,    -1,  1441,    -1,   350,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   250,    -1,    -1,   220,  1464,   255,    -1,   533,
+      -1,    -1,    -1,  1471,    -1,    -1,    -1,  1161,  1554,    -1,
+    1556,    -1,    -1,    -1,  1451,  1452,    -1,    -1,    -1,    -1,
+     486,    -1,    -1,  1569,  1570,   250,    -1,  1464,    -1,  1099,
+      -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1204,    -1,    -1,    -1,    -1,    -1,  1524,   432,    -1,    -1,
+      -1,    -1,   437,  1531,   598,    -1,    -1,  1504,    -1,    -1,
+     445,  1508,  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,
+      -1,    -1,   350,    -1,    -1,    -1,   471,    -1,    -1,    -1,
+    1537,    -1,  1539,    -1,    -1,    -1,    -1,    -1,    -1,   643,
+     644,   645,   578,   579,   489,    -1,   491,  1271,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1279,  1280,  1281,   662,    -1,
+    1567,  1568,    -1,    -1,    -1,    -1,  1290,  1291,  1575,  1576,
+      -1,    -1,    -1,    -1,    -1,    -1,   680,    -1,    -1,    -1,
+    1304,    -1,    -1,  1223,    -1,    -1,    -1,   691,   533,   417,
+      -1,    -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1327,   432,    -1,    -1,    -1,    -1,   437,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   445,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   733,
+      -1,   667,   736,    -1,    -1,   671,    -1,   432,    -1,    -1,
+      -1,    -1,    -1,   471,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   598,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   489,    -1,   491,    -1,    -1,    -1,    -1,   704,   773,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,  1415,    -1,    -1,    -1,    -1,   491,    -1,   643,   644,
+     645,    -1,    39,    -1,    -1,   533,    -1,    -1,    -1,    -1,
+      -1,   815,    -1,    -1,    -1,    -1,    -1,   662,    -1,    -1,
+      -1,   825,    -1,    -1,   828,    -1,    -1,    -1,    -1,   833,
+      67,   835,    -1,    -1,    -1,   680,   840,    -1,   533,    -1,
+    1464,    -1,    -1,    -1,    -1,    -1,   691,  1471,    -1,    -1,
+      -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     598,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   819,    -1,    -1,    -1,    -1,   733,    -1,
+      -1,   736,    -1,    -1,    -1,    26,    27,    28,   902,    -1,
+    1524,    -1,    -1,   598,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   643,   644,   645,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   773,    -1,
+      -1,    -1,    -1,    -1,   662,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   643,   644,
+     645,    -1,   680,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   691,    -1,    -1,    97,   662,    99,   697,
+     815,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     825,    -1,   986,   828,    -1,    -1,    -1,    -1,   833,    -1,
+     835,    -1,    -1,    -1,    -1,   840,   932,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   733,    -1,    -1,   736,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,  1039,  1040,    -1,  1042,  1043,
+      -1,   736,    -1,    -1,    39,   773,    -1,    -1,    -1,   180,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   902,  1062,   190,
+     191,    -1,    -1,    -1,   195,    -1,   197,   198,    -1,    -1,
+      -1,    -1,    67,    -1,    69,  1011,    71,    72,    -1,    74,
+      75,    76,    -1,    -1,    -1,    -1,    -1,   815,    83,    84,
+      -1,  1027,    -1,  1097,  1098,    -1,    -1,   825,    -1,    -1,
+     828,    -1,    -1,    -1,    -1,   833,    -1,   835,    -1,    -1,
+      -1,    -1,   840,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,   828,    30,    31,    32,    -1,    -1,    -1,
+     835,   986,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1161,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1104,    -1,
+      -1,    67,    -1,    -1,   902,    -1,    72,    -1,    74,    75,
+      76,    -1,    78,    -1,    -1,    -1,    -1,    83,    84,    -1,
+      -1,    -1,    -1,    -1,  1039,  1040,    -1,  1042,  1043,    -1,
+    1204,    -1,    -1,    -1,    -1,    -1,    -1,   902,    -1,    -1,
+      -1,    -1,    -1,   109,    -1,   111,    -1,  1062,    -1,    -1,
+      -1,    -1,  1226,   119,    -1,    45,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,
+      -1,    -1,    -1,    -1,    64,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,  1097,  1098,    -1,    -1,    -1,    -1,   986,    -1,
+      37,    38,    -1,    40,    -1,    -1,    -1,  1271,    -1,    -1,
+      -1,    -1,    -1,    -1,   969,  1279,  1280,  1281,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1290,  1291,    -1,    66,
+     110,   986,    -1,    -1,    -1,    72,   116,    -1,    -1,    76,
+    1304,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,  1039,  1040,    -1,  1042,  1043,  1161,    94,    -1,    -1,
+      -1,    -1,    -1,  1327,    -1,   145,    -1,    -1,    -1,    -1,
+      -1,    -1,   109,    -1,  1062,   155,    -1,    -1,    -1,   159,
+      -1,   118,   119,   120,   121,   122,   123,  1042,  1043,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1204,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1062,    -1,  1097,
+    1098,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1226,    -1,    -1,    -1,    -1,    -1,    -1,   208,    -1,
+      -1,    -1,    -1,    -1,  1239,    -1,  1241,    -1,    -1,    -1,
+     220,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1415,    -1,    -1,    -1,    -1,    -1,    -1,   238,   239,
+      -1,    -1,    -1,    -1,    -1,    -1,  1271,    -1,    -1,    -1,
+      -1,    -1,    -1,  1161,  1279,  1280,  1281,    -1,    -1,    -1,
+      -1,    -1,   262,    -1,    -1,  1290,  1291,    -1,    -1,    -1,
+     270,   582,   583,    -1,    -1,    -1,    -1,    -1,    -1,  1304,
+    1464,    -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,    -1,
+      -1,    -1,    -1,    -1,   294,    -1,  1204,   297,    -1,    -1,
+      -1,   612,  1327,    -1,   615,   616,    -1,   618,    -1,   620,
+     621,    -1,    -1,    -1,   625,   626,    -1,    -1,  1226,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1203,  1204,
+      -1,  1239,    -1,  1241,    -1,    -1,    -1,    -1,    -1,    -1,
+    1524,    -1,    -1,    -1,   344,    -1,    -1,    -1,    -1,   349,
+      -1,  1226,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1271,    -1,    -1,    64,    -1,    -1,    -1,
+    1245,  1279,  1280,  1281,    -1,    -1,    74,    -1,    76,    -1,
+      78,    -1,  1290,  1291,    -1,    -1,    -1,    85,    -1,    -1,
+    1415,    -1,    -1,    -1,    -1,    -1,  1304,    -1,   709,   710,
+      -1,    -1,    -1,    -1,   715,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1290,  1291,    -1,   116,  1327,
+     118,   119,   120,    -1,  1299,   425,   426,    -1,    -1,  1304,
+      -1,    -1,   432,    -1,    -1,    -1,    -1,    -1,    -1,  1464,
+      -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,    -1,    -1,
+      -1,    -1,    -1,   453,    -1,    -1,   456,    -1,    -1,    -1,
+      -1,   159,   462,  1338,     3,     4,     5,     6,     7,     8,
        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    75,     0,    25,    26,
-      27,     0,   453,     0,   351,   351,   946,    30,     0,     0,
-     109,     0,     0,     0,     0,     0,     0,     0,    77,     0,
-       0,     0,  1236,     0,     0,     0,     0,     0,     0,     0,
-       0,   353,   353,   354,     0,    33,     0,     0,    77,     0,
-      36,     0,    37,    38,    39,    84,    77,     0,     0,     0,
-       0,    40,    41,     0,     0,     0,     0,     0,     0,     0,
-     361,     0,     0,     0,     0,    84,   346,     0,   351,     0,
-       0,     0,   354,    84,     0,     0,     0,    42,     0,   155,
-       0,     0,     0,     0,     0,     0,     0,    44,     0,     0,
-     354,     0,    77,     0,     0,   353,     0,     0,     0,   361,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   220,     0,     0,     0,     0,     0,   361,     0,    84,
-       0,     0,     0,     0,     0,    54,     0,     0,     0,     0,
-       0,     0,     0,    72,   354,     0,     0,     0,   221,     0,
-       0,     0,     0,     0,     0,     0,   351,     0,   351,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      75,   361,     0,     0,     0,     0,     0,   346,     0,     0,
-       0,     0,     0,   353,     0,   353,     0,     0,   351,     0,
-       0,     0,     0,     0,     0,     0,   351,   351,   351,     0,
-       0,     0,     0,     0,     0,     0,     0,   351,   351,   354,
-       0,     0,     0,     0,     0,   353,     0,     0,     0,     0,
-       0,    72,     0,   353,   353,   353,     0,     0,     0,     0,
-       0,     0,     0,     0,   353,   353,   361,     0,     0,     0,
-       0,     0,   346,     0,   351,     0,     0,     0,    75,     0,
-       0,     0,     0,     0,   354,   354,   354,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   353,     0,   354,     0,     0,     0,     0,     0,   124,
-       0,   361,   361,   361,     0,     0,     0,   346,   346,   346,
-       0,   354,     0,     0,     0,     0,     0,     0,     0,     0,
-     361,     0,    77,     0,     0,     0,   346,     0,   354,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   361,  1033,
-       0,     0,     8,     9,    10,    11,    12,     0,     0,    84,
-       0,     0,   351,     0,     0,   361,     0,     0,     0,     0,
-       0,     0,     0,     0,    77,     0,     0,   354,   280,   281,
-      30,   282,     0,     0,     0,     0,     0,     0,     0,   353,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    84,     0,     0,   361,     0,     0,   283,    33,     0,
-     346,    72,     0,   284,   354,     0,     0,   285,    72,     0,
-     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
-       0,     0,     0,   124,     0,   292,     0,     0,    75,     0,
-       0,   361,     0,     0,     0,    75,     0,     0,     0,     0,
-     293,     0,   377,     0,     0,     0,   354,     0,     0,   295,
-     826,   297,   298,   299,   300,     0,   354,     0,     0,   354,
-       0,    72,     0,     0,   222,     0,   354,     0,     0,     0,
-       0,   354,     0,   361,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   361,     0,     0,   361,     0,    75,     0,
-       0,   223,   346,   361,     0,     0,     0,     0,   361,   346,
-       0,     0,     0,     0,     0,  -516,     0,     0,     1,     2,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,   489,
+      -1,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,  1524,
+      39,   501,    -1,    -1,    -1,    -1,    -1,  1415,    -1,    -1,
+      -1,    -1,    44,   513,    -1,   515,    -1,    -1,   518,    -1,
+     520,   521,   220,    -1,   222,   223,   224,    -1,    67,    -1,
+      69,    -1,    71,   533,    -1,    74,    75,    -1,    -1,    -1,
+    1415,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1464,    -1,    90,    -1,
+     258,    -1,    -1,  1471,   262,    -1,  1441,    -1,   100,    -1,
+      -1,    -1,    -1,    -1,    -1,   114,    -1,    -1,    -1,    -1,
+     278,    -1,    -1,    -1,    -1,    -1,   586,    -1,    -1,  1464,
+      -1,    -1,    -1,    -1,    -1,    -1,  1471,    -1,   598,    -1,
+     600,    -1,    -1,   603,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1524,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   156,    -1,    -1,    -1,    -1,   629,
+     328,    -1,    -1,    -1,   634,    -1,    -1,    -1,   170,    -1,
+      -1,    -1,    -1,   643,   644,   645,    -1,    -1,    -1,  1524,
+      -1,   349,    -1,    -1,    -1,    -1,   354,   355,    -1,    -1,
+      -1,   193,   662,    -1,   362,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   207,    -1,    -1,    -1,    -1,
+      -1,    -1,     7,    -1,   216,    10,    11,    12,    13,    14,
+      -1,    -1,    -1,    -1,   226,    -1,    -1,   697,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   405,    -1,    -1,
+      -1,    -1,    37,    38,    39,    40,    -1,    -1,   718,   251,
+      -1,    -1,    -1,    -1,   256,   423,    -1,    -1,    -1,    -1,
+     428,    -1,   430,    -1,    -1,    -1,   736,   269,   738,    -1,
+      -1,    66,    67,   275,    -1,   277,    -1,    72,    -1,   447,
+      -1,    76,   450,   451,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,   295,    -1,    -1,    -1,    -1,   466,    94,
+      -1,    -1,    -1,   773,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   480,    -1,   109,    -1,   111,    -1,  1099,   487,
+      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   338,    -1,    -1,    -1,
+      -1,   343,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   828,    -1,
+      -1,    -1,   832,    -1,    -1,   835,    -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,     7,    -1,    -1,
+      10,    11,    12,    13,    14,    -1,    -1,    -1,   410,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   418,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    39,
+      40,    -1,    -1,    -1,    -1,   603,    -1,    -1,    -1,    -1,
+      -1,   443,  1223,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   454,    -1,    -1,    -1,    66,    67,   928,    -1,
+      -1,    -1,    72,   631,    -1,    -1,    76,    -1,   636,    79,
+      80,    81,    82,    83,    84,   477,    86,    87,    -1,    -1,
+      -1,   483,    -1,    -1,    94,    -1,   488,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+     970,   111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,
+     120,   121,   122,   123,    -1,    -1,   986,    -1,    -1,    -1,
+      -1,    -1,    -1,   525,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   541,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1021,    -1,    -1,    -1,    -1,   724,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     738,    -1,  1042,  1043,    -1,    -1,   578,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   587,    -1,    -1,    -1,    -1,
+     758,    -1,   594,    -1,    -1,    37,    38,   599,    40,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   610,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,
+      72,    -1,  1102,    -1,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,   651,
+      -1,   819,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   832,    -1,    -1,   109,    -1,   111,
+      -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,   121,
+     122,   123,    -1,   851,    -1,   687,    -1,    -1,    -1,    -1,
+      -1,  1161,    -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,    -1,
+      -1,    30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,
+      39,    40,    -1,  1203,    -1,    -1,    -1,    -1,    -1,    -1,
+     742,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     752,   753,    -1,    -1,    -1,    64,    -1,    -1,    67,    -1,
+      69,    -1,    71,    72,   766,    74,    75,    76,    -1,    -1,
+     938,  1241,   154,   155,    83,    84,    -1,    -1,    -1,    -1,
+      -1,   783,    -1,   785,    -1,    -1,    -1,   789,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   964,    -1,    -1,    -1,
+     109,    -1,   111,    -1,    -1,    -1,   188,    -1,    -1,    -1,
+     119,    -1,    -1,   195,    -1,    -1,    -1,    -1,    -1,    -1,
+    1290,  1291,    -1,    -1,   992,    -1,    -1,    -1,    -1,  1299,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,   855,    -1,    -1,  1024,    -1,    -1,    39,
+     862,    -1,    -1,    -1,    -1,    -1,    -1,  1035,    -1,    -1,
+      -1,    -1,    -1,   875,    -1,   877,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   267,    -1,    67,    -1,   891,
+      -1,    -1,    72,    -1,    74,    75,   898,    -1,    -1,    -1,
+      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,   910,    -1,
+      -1,   913,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   931,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+      -1,   323,    -1,    -1,    -1,  1415,    -1,    -1,  1116,   331,
+     332,    -1,   334,   335,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   344,    -1,    -1,    -1,   348,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   367,    -1,    -1,   370,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1473,    -1,  1475,    -1,    -1,    -1,    -1,
+      37,    38,    -1,    40,    -1,   397,    -1,    -1,  1020,   401,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1203,    -1,    -1,    -1,    66,
+    1510,   145,  1512,    -1,    -1,    72,    -1,    74,    75,    76,
+     432,   155,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,   167,   168,    -1,    -1,    94,    -1,    -1,
+    1540,    -1,    -1,   455,  1076,    -1,    -1,    -1,    -1,    -1,
+      -1,  1083,   109,    -1,   111,    -1,   113,   114,    -1,    -1,
+      -1,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   486,    -1,    -1,   489,    -1,    -1,
+    1112,    -1,    -1,    -1,    -1,  1117,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1125,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1299,    -1,    -1,   238,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   529,    -1,    -1,
+     532,   533,    -1,    -1,  1156,    -1,    -1,    -1,    -1,   263,
+      -1,    -1,    -1,    -1,    -1,    -1,  1168,    -1,    -1,  1171,
+      -1,  1173,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,  1187,  1188,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   578,   579,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1209,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   597,   598,    -1,   600,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   609,    -1,   611,
+     612,    -1,    -1,    -1,  1236,    -1,   618,    -1,    -1,   281,
+      -1,   283,   284,    -1,    -1,    -1,   628,   629,    -1,   291,
+     292,    -1,   634,    -1,   296,   297,    -1,    -1,    -1,    -1,
+      -1,   643,   644,   645,    -1,    -1,   308,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   379,    -1,    -1,    -1,    -1,
+     662,    -1,    -1,    -1,    -1,   667,   668,    -1,    -1,   671,
+     672,    -1,    -1,    -1,    -1,    -1,   678,    -1,    -1,    -1,
+      -1,    -1,   344,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   696,   697,   698,    -1,   700,    -1,
+      -1,    -1,   704,    -1,    -1,    -1,    -1,    -1,    -1,    37,
+      38,  1333,    40,  1335,    -1,    -1,    -1,    -1,   380,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,  1348,    -1,  1350,    -1,
+      -1,    -1,    -1,    -1,   736,   737,    -1,    -1,    66,    -1,
+      -1,    -1,    -1,    -1,    72,    -1,  1368,    -1,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,   481,    86,    87,
+      -1,    -1,  1384,  1385,    -1,    -1,    94,  1555,    -1,    -1,
+     772,   773,    -1,    -1,  1396,   777,   778,  1399,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,   117,
+     118,   119,   120,   121,   122,   123,   520,    -1,    -1,  1421,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1430,   533,
+      -1,  1433,    -1,  1435,  1436,  1437,   540,   819,    -1,   543,
+      -1,    -1,    -1,    -1,    -1,    -1,   828,    -1,    -1,    -1,
+     554,   555,   834,   835,    -1,    -1,    -1,   839,    -1,   841,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   851,
+      -1,    -1,   576,    -1,    -1,  1477,    -1,  1479,    -1,    -1,
+    1482,    -1,   586,    -1,    -1,    -1,    -1,    -1,    -1,   593,
+      -1,    -1,    -1,    -1,   598,  1497,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   557,   558,   559,   560,   561,
+     562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
+     572,   573,   574,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   924,    -1,   648,    -1,    -1,    -1,    -1,    -1,
+     932,    -1,    -1,   657,    -1,    -1,   938,    -1,   600,    -1,
+      -1,    -1,    -1,    -1,   946,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   959,   960,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   697,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   986,    -1,    -1,    -1,    -1,    -1,
+     992,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,  1011,
+    1012,    30,    31,    32,    -1,    -1,    -1,    -1,    -1,  1021,
+      39,    40,    -1,    -1,    -1,  1027,  1028,    -1,  1030,  1031,
+    1032,    -1,    -1,    -1,    -1,    -1,    -1,   699,    -1,    -1,
+    1042,  1043,    -1,    -1,    -1,    -1,    -1,    -1,    67,   773,
+      -1,   775,    -1,    -1,    -1,    74,    75,   781,    -1,   721,
+      -1,    -1,    -1,    -1,   788,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   734,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,
+     119,  1103,  1104,  1105,    -1,    -1,    -1,    -1,   832,   833,
+      -1,   835,    -1,    -1,  1116,    -1,    -1,    -1,   780,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     812,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1161,
+      -1,    -1,    -1,    -1,    -1,   827,   890,    -1,    -1,    -1,
+     894,    -1,    -1,     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,    -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,
+      -1,    -1,    39,    40,    -1,    -1,    -1,    -1,    -1,  1221,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    64,    -1,  1241,
+      67,    -1,    69,    -1,    71,    72,   970,    74,    75,    76,
+      -1,    -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
+      -1,    -1,   986,   987,    -1,    -1,    -1,    -1,    -1,   993,
+      -1,    -1,    -1,    -1,    -1,   999,    -1,    -1,  1002,    -1,
+    1004,    -1,   109,    -1,   111,    -1,    -1,    -1,  1290,  1291,
+      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1024,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1035,    -1,    -1,    -1,    -1,   978,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,  1057,    -1,  1059,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1009,    -1,    -1,
+    1074,  1075,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1021,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,  1095,    -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,    -1,
+    1062,    30,    31,    32,    33,    -1,    -1,    36,    -1,    -1,
+      39,    40,    -1,  1415,    -1,    -1,    -1,    -1,  1142,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    64,    -1,  1161,    67,    -1,
+      69,    -1,    71,    72,    -1,    74,    75,    76,    -1,    -1,
+      -1,    -1,  1176,  1177,    83,    84,    -1,    -1,    -1,    -1,
+      -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,  1134,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,
+     119,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+      -1,    76,    -1,  1505,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,  1178,    -1,    -1,    94,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1530,  1531,
+    1192,  1193,    -1,  1257,   109,    -1,   111,    -1,    -1,    -1,
+      -1,   116,    -1,   118,   119,   120,   121,   122,   123,    -1,
+      -1,    -1,    -1,  1555,    -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,
+      -1,    -1,    30,    31,    32,    33,    -1,    -1,    36,    37,
+      38,    39,    40,    41,  1318,    43,  1320,    -1,    46,    47,
+      48,    49,    50,    51,    52,    53,    -1,    -1,    -1,    57,
+      -1,    -1,    -1,    61,    62,    -1,    64,    -1,    66,    67,
+      -1,    69,    -1,    71,    72,    -1,    74,    75,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
+     118,   119,   120,   121,   122,   123,    -1,    -1,    -1,    -1,
+     128,    -1,  1406,    -1,   132,    -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,     0,    77,    25,    26,    27,    28,     0,     0,
-      29,     0,     0,    30,    31,     0,     0,     0,     0,     8,
-       9,    10,    11,    12,     0,     8,     9,    10,    11,    12,
-      84,     0,     0,     0,     0,     0,    54,     0,    32,     0,
-       0,    33,   163,    34,     0,    35,    36,    30,    37,    38,
-      39,     0,     0,    30,     0,     0,     0,    40,    41,     0,
-       0,   216,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-      36,    33,     0,    42,    39,    43,    36,   354,     0,     0,
-      39,    40,    41,    44,     0,     0,     0,    40,    41,     0,
-       0,     0,     0,    54,     0,     0,     0,   163,     0,     0,
-       0,     0,     0,   270,   361,     0,     0,    42,     0,     0,
-     346,     0,     0,   743,     0,     0,     0,   145,     0,     0,
-       0,     0,     0,   744,     0,     0,     0,     0,     0,     0,
-     354,   354,   163,   354,   354,     0,     0,     0,     0,     0,
-       0,     0,   367,     0,     0,     0,   373,     0,     0,     0,
-       0,     0,     0,    77,     0,     0,     0,   361,   361,     0,
-     361,   361,     0,     0,     0,     0,   346,   346,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      84,     0,     0,     0,     0,     0,    54,     0,   354,   354,
-       0,     0,     0,     0,     0,   163,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   216,     0,     0,
-       0,     0,     0,     0,     0,   361,   361,     0,     0,     0,
-       0,   280,   281,     0,   282,   163,   460,     8,     9,    10,
+      23,    24,    25,    26,    27,    -1,    -1,    30,    31,    32,
+      33,    -1,    -1,    36,    37,    38,    39,    40,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    1402,    -1,    -1,    37,    38,    -1,    40,    -1,    -1,    -1,
+      -1,    -1,    -1,    66,    67,    -1,    69,  1419,    71,    72,
+      -1,    74,    75,    76,  1488,    -1,    79,    80,    81,    82,
+      83,    84,    66,    86,    87,    -1,    -1,    -1,    72,    -1,
+      -1,    94,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,   109,    -1,   111,    -1,
+      94,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
+     123,    -1,    -1,    -1,    -1,   109,  1540,   111,    -1,   132,
+     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
+    1492,  1493,     3,     4,     5,     6,     7,     8,     9,    10,
       11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,   373,
-     283,     0,   354,     0,     0,    30,   284,   163,     0,     0,
-     285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
-     290,   291,     0,     0,     0,     0,     0,     0,   292,   361,
-       0,   460,     0,    33,   163,     0,     0,     0,     0,     0,
-     205,    38,     0,   512,     0,   222,     0,     0,     0,     0,
-       0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    77,     0,     0,
-       0,     0,   223,     0,     0,     0,     0,    54,    54,     0,
-     354,   605,   354,     0,     0,   269,   629,     0,     0,     0,
-       0,     0,     0,     0,    84,     0,     0,     0,     0,     0,
-      54,     0,     0,     0,     0,     0,     0,   361,     0,   361,
-       0,     0,   354,     0,     0,     0,     0,     0,     0,    54,
-     354,   354,   354,     0,     0,     0,     0,     0,     0,     0,
-       0,   354,   354,     0,     0,     0,     0,     0,     0,   361,
-       0,     0,     0,     0,     0,    77,     0,   361,   361,   361,
-       0,     0,     0,     0,     0,     0,     0,     0,   361,   361,
-       0,     0,   163,   163,   346,   346,     0,     0,   354,   367,
-       0,     0,    84,    54,     0,     0,     0,     0,    54,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     460,     0,     0,   460,     0,   361,     0,     0,     0,   460,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    54,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   740,     0,     0,     0,
-     209,     0,     0,     0,     0,     0,     0,     0,   163,     0,
-     229,     0,   233,     0,   235,     0,     0,     0,     0,     0,
-     460,   244,   460,     0,     0,   460,   354,   163,   460,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     367,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   209,   361,   233,   235,   244,     0,     0,   346,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    77,     0,   154,     0,     0,
-       0,     0,    77,     0,     0,    54,     0,     0,     0,     0,
-       0,     0,     0,   163,     0,   209,     0,     0,     0,     0,
-       0,     0,    84,     0,     0,   367,     0,   605,    54,    84,
-     836,     0,     0,     0,     0,    54,     0,     0,     0,     0,
-       0,     0,     0,   249,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   254,     0,    77,   605,     0,     0,     0,
-       0,   605,     0,     0,     0,     0,     0,     0,     0,     0,
-     367,   367,   367,     0,     0,     0,   209,     0,   233,   235,
-     244,     0,    84,     0,     0,     0,     0,     0,    54,   367,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,  -294,   154,
-      25,    26,    27,     0,   209,     0,     0,     0,   209,    30,
-       0,     0,     0,   384,   740,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   503,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   460,   416,    33,     0,     0,
-       0,     0,     0,     0,    37,    38,     0,     0,  -294,     0,
-     431,     0,     0,   367,     0,   960,     0,     0,     0,   436,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   444,
-       0,     0,     0,     0,   209,     0,     0,     0,     0,   642,
-       0,   337,   280,   281,     0,   282,     0,     0,     0,   109,
-     740,     0,     0,     0,   470,   209,     0,     0,     0,   480,
-     233,   235,     0,     0,     0,     0,     0,     0,   244,     0,
-       0,   283,   488,     0,     0,     0,     0,   284,   498,     0,
-     502,   285,     0,     0,   286,   287,   288,   289,    40,    41,
-       0,   290,   291,     0,     0,     0,     0,     0,   532,   292,
-       0,     0,     0,     0,     0,   367,     0,     0,     0,   629,
-       0,   209,   367,     0,   293,     0,   377,     0,     0,   378,
-       0,     0,     0,   295,   379,   297,   298,   299,   300,   209,
-       0,     0,     0,     0,   209,     0,   209,     0,     0,     0,
-       0,   592,     0,     0,     0,     0,   597,     0,     0,     0,
-       0,     0,     0,   209,     0,     0,   209,   209,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   209,     0,   643,     0,     0,     0,   644,   645,
-       0,   647,     0,     0,     0,     0,   209,     0,   659,   660,
-       0,   661,   662,   209,   663,     0,   664,     0,     0,     0,
-       0,     0,     0,  1176,     0,   460,     8,     9,    10,    11,
-      12,     0,     0,   592,     0,     0,     0,     0,     0,     0,
-       0,   679,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   280,   281,    30,   282,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   690,   163,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   696,     0,     0,
-       0,   283,    33,   367,     0,     0,     0,   284,     0,     0,
-       0,   285,     0,     0,   286,   287,   288,   289,    40,    41,
-     732,   290,   291,     0,     0,     0,   735,     0,     0,   292,
-       0,   470,     0,     0,     0,     0,     0,     0,   605,     0,
-       0,     0,     0,     0,   293,     0,   377,     0,     0,   209,
-       0,     0,     0,   295,  1177,   297,   298,   299,   300,   367,
-     367,     0,     0,     0,     0,     0,     0,     0,   772,     0,
-       0,     0,     0,     0,     0,     0,     0,   209,   513,     0,
-     515,   518,   209,     0,   787,     0,     0,     0,   521,   522,
-       0,     0,     0,   515,   515,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   515,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   280,   281,     0,   282,   460,
-       0,   814,     0,     0,     0,     0,     0,     0,     0,     0,
-     824,     0,     0,     0,     0,     0,     0,   827,     0,     0,
-       0,   515,   834,     0,   283,     0,     0,     0,     0,     0,
-     284,     0,     0,   849,   285,     0,     0,   286,   287,   288,
-     289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
-     209,     0,   292,     0,     0,     0,     0,   515,   740,     0,
-       0,     0,     0,     0,   209,     0,     0,   293,     0,   377,
-       0,     0,     0,     0,   889,   811,   295,   379,   297,   298,
-     299,   300,     0,     0,   503,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     216,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     834,     0,     0,     0,     0,     8,     9,    10,    11,    12,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    33,    -1,    -1,    36,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    83,    84,    -1,    -1,   118,   119,   120,
+     121,   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,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
+      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    78,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
+     121,   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,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
+      71,    72,    39,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    78,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
+     121,   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,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,   116,    -1,   118,   119,   120,
+     121,   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,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
+     121,   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,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
+     121,   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,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
+     121,   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,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    69,    39,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
+     121,   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,    -1,   119,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,    33,    34,    35,    67,    -1,    69,
+      39,    71,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
+      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,   109,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,  -294,     0,    25,    26,    27,     0,   740,     0,
-       0,     0,     0,    30,     0,   209,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   209,     0,
-       0,     0,     0,     0,     0,   249,     0,     0,     0,     0,
-       0,    33,     0,     0,     0,   967,   968,   209,    37,    38,
-       0,     0,  -294,     0,     0,     0,     0,   367,   367,   985,
-       0,     0,     0,     0,     0,     0,   216,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  1000,     0,  1001,     0,
-       0,     0,  1005,   642,     0,   337,     0,     0,     0,     0,
-       0,     0,     0,   633,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   515,   515,   515,   515,   515,   515,
-     515,   515,   515,   515,   515,   515,   515,   515,   515,   515,
-     515,   515,     0,     0,     0,     0,     0,     0,     0,     0,
-     280,   281,     0,   282,   209,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   515,  1038,     0,
-       0,     0,     0,     0,     0,  1039,     0,     0,     0,   283,
-     209,     0,     0,     0,     0,   284,     0,     0,  1041,   285,
-    1042,     0,   286,   287,   288,   289,    40,    41,     0,   290,
-     291,     0,   367,     0,  1054,     0,     0,   292,   209,     0,
-       0,  1058,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   293,  1096,   377,     0,  1097,     0,     0,   780,
-       0,   295,   379,   297,   298,   299,   300,     0,     0,     0,
-     209,     0,     0,     0,   597,     0,     0,     0,     0,     0,
-       0,   209,     0,     0,     0,     0,     0,     0,     0,     0,
-     460,     0,   460,     0,     0,     0,   515,     0,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,  -294,     0,     0,   515,     0,
-       0,     0,     0,     0,     0,     0,    30,   460,     0,   460,
-       0,   515,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,  -294,
-       0,    25,    26,    27,    33,     0,     0,   163,     0,     0,
-      30,     0,   209,  1160,     0,  -294,     0,     0,     0,   340,
-     362,     0,     0,     0,     0,     0,     0,   515,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    33,     0,
-       0,     0,     0,    36,     0,   335,   336,    39,     0,  -294,
-       0,     0,     0,   412,    40,    41,     0,     0,     0,   515,
-     412,     0,     0,     0,     0,     0,     0,     0,     0,   532,
-       0,     0,     0,     0,   515,     0,  1225,     0,     0,     0,
-     642,     0,   337,     0,     0,     0,     0,     0,     0,     0,
-     633,   280,   281,     0,   282,     0,     0,     0,     0,   209,
-       0,     0,     0,     0,     0,  1238,     0,     0,     0,     0,
-    1240,     0,     0,     0,     0,     0,     0,     0,  1244,     0,
-     283,     0,     0,     0,     0,     0,   648,     0,   137,   138,
-     285,     0,   412,   286,   649,   288,   289,    40,    41,     0,
-     290,   291,     0,     0,     0,     0,     0,     0,   292,  1270,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,  1278,     0,   293,  1279,   650,  1280,   651,   378,     0,
-       0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
-    1289,  1290,     0,     0,     0,     0,     0,     0,   412,     0,
-       0,     0,     0,     0,     0,   209,   412,   588,     0,   412,
-     591,     0,  1303,     0,     0,     0,     0,     0,     0,   362,
-       0,     0,     0,   621,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   515,     0,     0,     0,  1326,
-     320,     0,   639,     0,     0,   340,     0,     0,     0,     0,
-     344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   380,   380,     0,     0,   515,     0,     0,     0,
-       0,     0,   412,     0,     0,     0,   412,     0,   515,     2,
-     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,   362,     0,     0,
-       0,     0,     0,    30,     0,     0,     0,     0,     0,   515,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     412,     0,     0,   320,     0,     0,  1396,     0,  1397,     0,
-       0,    33,     0,    34,     0,    35,     0,     0,    37,    38,
-       0,  1406,     0,  1407,     0,     0,     0,     0,   484,     0,
-       0,   412,     0,     0,   362,     0,     0,     0,     0,     0,
-       0,  1414,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  -399,   686,     0,  1432,  1434,     0,
-       0,   515,     0,   633,     0,     0,     0,     0,     0,  1440,
-       0,     0,  1244,     0,   412,     0,     0,   340,   362,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,  1463,     0,     0,     0,     0,     0,
-       0,     0,     0,  1470,     0,   515,  1472,     0,  1474,  1476,
-    1478,     0,     0,     0,     0,     0,     0,     0,     0,   515,
-     515,     0,     0,   412,   412,     0,     0,     0,     0,     0,
-       0,   209,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   829,   362,   380,   362,     0,     0,     0,     0,
-    1509,     0,  1511,     0,   621,  1244,   621,   621,     0,     0,
-       0,     0,     0,   621,     0,     0,     0,     0,     0,     0,
-    1523,     0,     0,   868,   362,     0,     0,     0,     0,   362,
-       0,     0,     0,     0,     0,     0,     0,     0,   362,   362,
-     362,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   362,     0,     0,
-       0,     0,   412,   911,     0,     0,   412,   914,     0,     0,
-       0,     0,     0,   916,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   340,   362,   412,     0,   412,   734,     0,     0,   412,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,     0,     0,     0,     0,     0,    30,
-       0,   362,   621,     0,     0,   768,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   781,     0,
-       0,     0,     0,     0,     0,   768,     0,    33,   768,     0,
-       0,     0,     0,     0,   205,    38,     0,   340,   362,   791,
-     792,     0,   412,   412,     0,     0,     0,     0,     0,   515,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   813,     0,     0,     0,     0,   515,     0,     0,     0,
-       0,   822,     0,     0,     0,     0,     0,     0,   344,   628,
-       0,     0,     0,   781,   412,     0,     0,     0,     0,     0,
-       0,     0,     0,   362,     0,     0,     0,     0,     0,   829,
-     362,     0,     0,     0,   621,     0,   621,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   621,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   888,     0,     0,     0,     0,     0,   515,
-     515,     0,   380,     0,     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,     0,     0,    25,    26,    27,    28,     0,
-       0,    29,   344,     0,    30,    31,     0,     0,     0,   829,
-       0,     0,     0,     0,     0,     0,     0,   412,   280,   281,
-       0,   282,     0,   412,     0,     0,     0,     0,     0,    32,
-       0,   412,    33,     0,    34,     0,    35,    36,     0,    37,
-      38,    39,     0,     0,   621,   621,     0,   283,    40,    41,
-       0,     0,     0,   284,     0,     0,     0,   285,     0,     0,
-     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
-       0,   362,     0,     0,    42,   292,    43,   412,   781,     0,
-     990,     0,     0,     0,    44,     0,   995,     0,     0,     0,
-     293,     0,   377,  1004,     0,   992,   412,  1157,     0,   295,
-     379,   297,   298,   299,   300,     0,   362,     0,     0,     0,
-       0,     0,   412,  1169,     0,   621,   621,  1174,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   362,   362,     0,
-       0,     0,     0,     0,     0,     0,     0,  1021,  1022,     0,
-     344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   344,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   829,   412,
-    1237,     0,     0,     0,     0,  1052,     0,     0,     0,   380,
-       0,   621,     0,     0,     0,     0,     1,     2,   204,     4,
+      23,    24,    25,    26,    27,    28,    -1,    30,    31,    32,
+      33,    -1,    -1,    36,    -1,    -1,    39,    -1,    -1,    -1,
+      -1,    -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,    69,    -1,    71,    -1,
+      -1,    74,    75,    -1,    -1,    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,    -1,    -1,    30,    31,    32,    33,    -1,   111,    36,
+      -1,    -1,    39,    -1,    -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,
+      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,     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,    -1,    -1,    30,    31,    32,    -1,
+      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
+      74,    75,    -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,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
+      71,    72,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,
+      -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,    28,     0,     0,    29,   280,
-     281,    30,  1061,  1062,     0,  1063,   362,     0,  1064,  1065,
-    1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,
-       0,     0,     0,  1073,  1074,     0,    32,     0,   283,    33,
-       0,    34,     0,    35,   648,   320,    37,    38,   285,     0,
-       0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
-       0,  1138,  1139,     0,     0,     0,   292,     0,   380,     0,
-       0,     0,   280,   281,   995,   282,   340,  1148,     0,   768,
-       0,   293,     0,  1075,     0,     0,   169,     0,     0,     0,
-     295,   296,   297,   298,   299,   300,   362,     0,     0,  1164,
-    1076,   283,     0,     0,  -129,     0,     0,   284,     0,     0,
-    1179,   285,     0,     0,   286,   287,   288,   289,    40,    41,
-       0,   290,   291,     0,     0,     0,     0,     0,     0,   292,
-       0,     0,   380,     0,  1197,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   293,   362,   362,     0,     0,   995,
-     995,     0,     0,   295,   379,   297,   298,   299,   300,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1229,     0,     0,     0,     0,     0,     0,     0,     1,     2,
-     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    67,    -1,    69,    -1,    71,    -1,    39,    74,
+      75,    -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,    67,    -1,    30,    31,
+      32,    -1,    -1,    74,    75,   110,   111,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    67,    -1,    69,   109,    71,
+     111,    -1,    74,    75,    -1,    -1,    -1,    -1,   119,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    96,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   111,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
+      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    -1,    30,    31,
+      32,    67,    -1,    69,    -1,    71,    -1,    39,    74,    75,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      96,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,    -1,
+      72,    -1,    74,    75,    76,   111,    78,    -1,    -1,    -1,
+      -1,    83,    84,   119,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,   111,
+      30,    31,    32,    -1,    -1,    -1,    -1,   119,    -1,    39,
+      -1,    -1,    -1,    -1,    -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,    69,
+      -1,    71,    -1,    -1,    74,    75,    -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,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      -1,   111,    39,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    69,    -1,    71,    -1,    -1,    74,    75,    -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,    -1,    -1,    30,    31,    32,    -1,
+      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,
+      74,    75,    -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,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    -1,   111,    39,    -1,
+      -1,    -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    69,    -1,
+      71,    -1,    -1,    74,    75,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    37,    38,    39,    40,    -1,    -1,    -1,    -1,
+     111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
+      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,   114,
+      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,    39,
+      -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,   109,    -1,
+     111,   112,    -1,    83,    84,    -1,    -1,   118,   119,   120,
+     121,   122,   123,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,   111,    -1,    30,    31,    32,    -1,    -1,    -1,   119,
+      37,    38,    39,    40,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    66,
+      67,    -1,    -1,    39,    40,    72,    -1,    74,    75,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,
+      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
+      -1,    -1,   109,   110,   111,    -1,    -1,    -1,    -1,    -1,
+      -1,   118,   119,   120,   121,   122,   123,    10,    11,    12,
       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,    28,     0,     0,
-      29,   280,   281,    30,   282,     0,     0,   995,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     280,   281,     0,   282,     0,     0,   888,     0,     0,     0,
-     283,    33,     0,    34,     0,    35,   284,     0,    37,    38,
-     285,  1281,  1282,   286,   287,   288,   289,    40,    41,   283,
-     290,   291,     0,     0,     0,   284,     0,     0,   292,   285,
-     362,     0,   286,   287,   288,   289,    40,    41,     0,   290,
-     291,     0,     0,   293,     0,  1075,     0,   292,     0,     0,
-       0,     0,   295,   296,   297,   298,   299,   300,     0,     0,
-       0,     0,   293,     0,   377,     0,  -129,     0,     0,     0,
-       0,   295,   379,   297,   298,   299,   300,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   995,     0,     0,     0,     1,     2,   204,     4,
+      23,    24,    25,    26,    27,   111,    -1,    30,    31,    32,
+      -1,    -1,    -1,   119,    37,    38,    39,    40,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    66,    67,    30,    31,    32,    -1,    72,
+      -1,    74,    75,    76,    39,    -1,    79,    80,    81,    82,
+      83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,
+      -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    67,    -1,    -1,    -1,   109,    -1,   111,    74,
+      75,    -1,    -1,    -1,    -1,   118,   119,   120,   121,   122,
+     123,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    -1,
+      -1,    30,    31,    32,   109,    -1,   111,    -1,    37,    38,
+      39,    40,    -1,    -1,   119,    -1,    -1,    -1,    -1,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    66,    67,    30,
+      31,    32,    -1,    72,    -1,    74,    75,    76,    39,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    -1,
+     109,    -1,   111,    74,    75,    -1,    -1,    -1,    -1,   118,
+     119,   120,   121,   122,   123,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+     111,    -1,    37,    38,    39,    40,    -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,    66,    67,    -1,    -1,    -1,    -1,    72,    -1,    74,
+      75,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,    94,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    -1,
+      -1,    -1,    -1,   118,   119,   120,   121,   122,   123,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    -1,    -1,    30,
+      31,    32,    -1,    -1,    -1,    -1,    37,    38,    39,    40,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    66,    67,    -1,    -1,    39,
+      -1,    72,    -1,    74,    75,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,   109,    -1,
+     111,    -1,    -1,    83,    84,    -1,    -1,   118,   119,   120,
+     121,   122,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    67,    -1,    39,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,    -1,
+      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    72,    -1,    74,    75,    76,    -1,    -1,   109,
+      -1,   111,    -1,    83,    84,    -1,    -1,    -1,    -1,   119,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    67,    -1,    39,
+      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,   109,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      40,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      -1,    30,    31,    32,    -1,    -1,    -1,    67,    -1,    -1,
+      39,    -1,    -1,    -1,    74,    75,    -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,    -1,    -1,    -1,    -1,    74,    75,    -1,    -1,    78,
+      -1,   111,    -1,    -1,    -1,   115,    -1,    -1,    -1,   119,
+      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,   111,    30,    31,    32,    -1,    -1,    -1,    -1,
+     119,    -1,    39,    40,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,
+      67,    -1,    -1,    39,    -1,    -1,    -1,    74,    75,    -1,
+      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,    75,
+      -1,    39,    -1,    -1,   111,    -1,    -1,    -1,   115,    -1,
+      -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
+      -1,    -1,    -1,    -1,    -1,   111,    74,    75,    -1,    -1,
+      -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,   119,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,
+      75,    -1,    39,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      67,    -1,    39,    -1,    -1,    -1,   111,    74,    75,    -1,
+      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    -1,
+      -1,    -1,    -1,    -1,   111,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   119,    -1,    -1,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,   111,    30,    31,    32,    -1,    -1,
+      -1,    -1,   119,    -1,    39,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    67,    -1,    39,    -1,    -1,    -1,    -1,    74,
+      75,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,    74,
+      75,    -1,    39,    -1,    -1,    -1,   111,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,   111,    74,    75,    -1,
+      -1,    -1,    -1,    -1,   119,    -1,    10,    11,    12,    13,
+      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    -1,    -1,    30,    31,    32,    -1,
+      -1,    -1,    -1,    -1,   111,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,   119,    -1,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    -1,    67,    30,    31,    32,    -1,    -1,    -1,
+      74,    75,    -1,    39,    -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,
+      -1,    67,    30,    31,    32,    -1,    -1,   111,    74,    75,
+      -1,    39,    -1,    37,    38,   119,    40,    41,    -1,    43,
+      -1,    -1,    46,    47,    48,    49,    50,    51,    52,    53,
+      -1,    -1,    56,    57,    -1,    -1,    -1,    61,    62,    67,
+      64,    69,    66,    71,    -1,    -1,    74,    75,    72,    -1,
+      -1,    -1,    76,   119,    -1,    79,    80,    81,    82,    83,
+      84,    -1,    86,    87,    -1,    -1,    -1,    -1,    -1,    -1,
+      94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   110,    -1,    -1,   109,    -1,   111,    -1,    -1,
+     114,    -1,    -1,    -1,   118,   119,   120,   121,   122,   123,
+      -1,    -1,    -1,    -1,   128,    -1,    37,    38,   132,    40,
+      41,    -1,    43,    -1,    -1,    46,    47,    48,    49,    50,
+      51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,    -1,
+      61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,    -1,
+      -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,
+     111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,   120,
+     121,   122,   123,    -1,    -1,    -1,    -1,   128,    -1,    -1,
+      -1,   132,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    -1,    -1,    30,    31,
+      32,    -1,    -1,    -1,    -1,    -1,    -1,    39,    -1,    37,
+      38,    -1,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    -1,    -1,    56,    57,
+      -1,    -1,    -1,    61,    62,    67,    64,    69,    66,    71,
+      -1,    -1,    74,    75,    72,    -1,    -1,    -1,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,    -1,    -1,    96,    -1,    94,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,
+     118,   119,   120,   121,   122,   123,    -1,    -1,    37,    38,
+     128,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,
+      -1,    -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,
+      -1,    -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,
+      79,    80,    81,    82,    83,    84,    -1,    86,    87,    -1,
+      -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     109,    -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,
+     119,   120,   121,   122,   123,    -1,    -1,    37,    38,   128,
+      40,    41,    -1,    43,    -1,    -1,    46,    47,    48,    49,
+      50,    51,    52,    53,    -1,    -1,    -1,    57,    -1,    -1,
+      -1,    61,    62,    -1,    64,    -1,    66,    -1,    -1,    -1,
+      -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    -1,    86,    87,    -1,    -1,
+      -1,    -1,    -1,    -1,    94,    37,    38,    -1,    40,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
+      -1,   111,    -1,    -1,   114,    -1,    -1,    -1,   118,   119,
+     120,   121,   122,   123,    66,    -1,    -1,    -1,   128,    -1,
+      72,    -1,    -1,    -1,    76,    -1,    -1,    79,    80,    81,
+      82,    83,    84,    -1,    86,    87,    -1,    -1,    -1,    -1,
+      -1,    -1,    94,    37,    38,    -1,    40,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   111,
+      -1,    -1,    37,    38,    -1,    40,   118,   119,   120,   121,
+     122,   123,    66,    -1,    -1,    -1,    -1,    -1,    72,    -1,
+      -1,    -1,    76,    -1,    -1,    79,    80,    81,    82,    83,
+      84,    66,    86,    87,    -1,    -1,    -1,    72,    -1,    -1,
+      94,    76,    -1,    -1,    79,    80,    81,    82,    83,    84,
+      -1,    86,    87,    -1,    -1,   109,    -1,   111,    -1,    94,
+      37,    38,    -1,    40,   118,   119,   120,   121,   122,   123,
+      -1,    -1,    -1,    -1,   109,    -1,   111,    -1,    -1,    37,
+      38,    -1,    40,   118,   119,   120,   121,   122,   123,    66,
+      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    76,
+      -1,    -1,    79,    80,    81,    82,    83,    84,    66,    86,
+      87,    -1,    -1,    -1,    72,    -1,    -1,    94,    76,    -1,
+      -1,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
+      -1,    -1,   109,    -1,   111,    -1,    94,    37,    38,    -1,
+      40,   118,   119,   120,   121,   122,   123,    -1,    -1,    -1,
+      -1,   109,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
+     118,   119,   120,   121,   122,   123,    66,    -1,    -1,    -1,
+      -1,    -1,    72,    -1,    -1,    -1,    76,    -1,    -1,    79,
+      80,    81,    82,    83,    84,    66,    86,    87,    -1,    -1,
+      -1,    72,    -1,    -1,    94,    76,    -1,    -1,    79,    80,
+      81,    82,    83,    84,    -1,    86,    87,    -1,    -1,   109,
+      -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,   118,   119,
+     120,   121,   122,   123,    -1,    -1,    -1,    -1,   109,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,   119,   120,
+     121,   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,    -1,    -1,
+      30,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,    39,
+      -1,    -1,    -1,    -1,    -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,    69,
+      -1,    71,    -1,    -1,    74,    75,     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,    -1,    -1,    30,    31,    32,    -1,    -1,    -1,    -1,
+      -1,    -1,    39,    -1,    -1,    -1,    -1,    -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,    69,    -1,    71,    -1,    -1,    74,    75,     4,
        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-     412,     0,    25,    26,    27,    28,     0,     0,    29,   280,
-     281,    30,   282,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   412,   412,     0,     0,     0,
-       0,     0,     0,  1389,     0,   768,     0,     0,   283,    33,
-       0,    34,     0,    35,   284,     0,    37,    38,   285,     0,
-     412,   286,   287,   288,   289,    40,    41,     0,   290,   291,
-       0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   293,     0,    43,     0,     0,     0,     0,     0,     0,
-     295,   296,   297,   298,   299,   300,     0,     0,     2,   204,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,  1449,     0,    25,    26,    27,     0,     0,     0,     0,
-     280,   281,    30,   282,     0,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,     0,     0,   283,
-      33,     0,    34,    30,    35,   284,     0,    37,    38,   285,
-       0,     0,   286,   287,   288,   289,    40,    41,     0,   290,
-     291,     0,     0,     0,     0,     0,     0,   292,     0,     0,
-       0,    33,     0,     0,     0,     0,   108,     0,    37,    38,
-       0,     0,   293,  1515,   342,     0,     0,    40,    41,   780,
-       0,   295,   343,   297,   298,   299,   300,     2,   204,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,     0,     0,     0,   280,
-     281,    30,   282,     0,     0,   320,     0,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,  -295,     0,     0,     0,   283,    33,
-       0,    34,     0,    35,   284,    30,    37,    38,   285,     0,
-       0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
-       0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
-       0,     0,     0,    33,     0,     0,     0,     0,     0,     0,
-       0,   293,     0,   930,  -295,     0,     0,     0,   780,     0,
-     295,   343,   297,   298,   299,   300,     2,   204,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-       0,    25,    26,    27,     0,     0,     0,     0,   280,   281,
-      30,   282,     0,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,     0,   283,    33,     0,
-      34,    30,    35,   284,     0,    37,    38,   285,     0,     0,
-     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
-       0,     0,     0,     0,     0,   292,     0,     0,     0,    33,
-       0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
-     293,     0,   930,     0,     0,     0,     0,   780,     0,   295,
-     599,   297,   298,   299,   300,     2,   204,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,     0,     0,     0,   280,   281,    30,
-     282,     0,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-       0,    25,    26,    27,     0,     0,   283,    33,     0,    34,
-      30,    35,   284,     0,    37,    38,   285,     0,     0,   286,
-     287,   288,   289,    40,    41,     0,   290,   291,     0,     0,
-       0,     0,     0,     0,   292,     0,     0,     0,    33,     0,
-       0,     0,     0,     0,     0,   205,    38,     0,     0,   293,
-       0,   342,     0,     0,     0,     0,     0,     0,   295,   343,
-     297,   298,   299,   300,     2,   204,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
-      26,    27,     0,     0,     0,     0,   280,   281,    30,   282,
-       0,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-       0,     0,     0,     0,     0,   283,    33,     0,    34,    30,
-      35,   284,     0,    37,    38,   285,     0,     0,   286,   287,
-     288,   289,    40,    41,     0,   290,   291,     0,     0,     0,
-       0,     0,     0,   292,     0,     0,     0,    33,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   293,     0,
-     930,     0,     0,     0,     0,     0,     0,   295,   343,   297,
-     298,   299,   300,     2,   204,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,     0,     0,     0,     0,   280,   281,    30,   282,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   283,    33,     0,    34,     0,    35,
-     284,     0,   205,    38,   285,     0,     0,   286,   287,   288,
-     289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
-       0,     0,   292,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   293,     0,  1019,
-       0,     0,     0,     0,     0,     0,   295,  1020,   297,   298,
-     299,   300,     2,   204,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
-       0,     0,     0,     0,   280,   281,    30,   282,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   283,    33,     0,    34,     0,    35,   284,
-       0,   205,    38,   285,     0,     0,   286,   287,   288,   289,
-      40,    41,     0,   290,   291,     0,     0,     0,     0,     0,
-       0,   292,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   293,     0,   377,     0,
-       0,     0,     0,     0,     0,   295,   379,   297,   298,   299,
-     300,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
-      28,     0,     0,    29,     0,     0,    30,    31,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    32,     0,     0,    33,     0,    34,     0,    35,    36,
-       0,    37,    38,    39,     0,     0,     0,     0,     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,     0,    42,     0,    43,     0,
-       0,     0,  -520,     0,     0,     0,    44,   203,     2,   204,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,     0,    25,    26,    27,     0,     0,     0,     0,
-       0,     0,    30,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,   491,   492,   493,     0,     0,
-      33,    30,    34,     0,    35,    36,     0,   205,    38,    39,
-       0,     0,     0,     0,     0,     0,    40,    41,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,     0,     0,     0,     0,     0,    37,    38,     0,     0,
-       0,     0,    42,     0,   206,     0,     0,     0,     0,     0,
-       0,     0,   207,     1,     2,   204,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,  -294,     0,    25,
-      26,    27,    28,     0,     0,    29,     0,     0,    30,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
-      35,     0,     0,    37,    38,     0,     0,  -294,     0,     1,
-       2,   204,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,    28,     0,
-      43,    29,     0,     0,    30,     0,     0,     0,   109,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    33,     0,    34,     0,    35,     0,     0,    37,
-      38,     0,   203,     2,   204,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,     0,     0,     0,     0,     0,    43,    30,     0,     0,
-       0,     0,     0,     0,   109,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,    34,     0,    35,
-       0,     0,   205,    38,     2,   204,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
-      26,    27,     0,     0,     0,     0,     0,     0,    30,   206,
-       0,     0,     0,     0,     0,     0,     0,   269,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
-      35,    36,     0,   205,    38,    39,     0,     0,     0,     0,
-       0,     0,    40,    41,     0,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,    42,     0,
-     206,     0,     0,     0,    30,     0,     0,     0,   207,     2,
-     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    33,     0,    25,    26,    27,    36,     0,    37,
-      38,    39,     0,    30,     0,     0,     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,    33,     0,    34,    42,    35,    43,     0,    37,    38,
-       0,     0,     0,     0,    44,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    1368,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   686,     0,     0,     0,     0,
-       0,     0,     0,   633,     2,   204,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
-      26,    27,     0,     0,     0,     0,     0,     0,    30,     0,
-       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,    33,     0,    34,     0,
-      35,    30,     0,    37,    38,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,  1370,     0,     0,     0,    33,
-       0,     0,     0,     0,    36,     0,   335,   336,    39,     0,
-     686,     0,     0,     0,     0,    40,    41,     0,   633,     2,
-     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,   337,    25,    26,    27,     0,     0,     0,
-       0,   109,     0,    30,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,    34,     0,    35,     0,     0,   205,    38,
-       2,   204,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
-       0,     0,     0,     0,    30,   268,     0,     0,     0,     0,
-       0,     0,     0,   628,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    33,     0,    34,     0,    35,     0,     0,    37,
-      38,     2,   204,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-       0,     0,     0,     0,     0,    30,   686,     0,     0,     0,
-       0,     0,     0,     0,   633,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,    34,     0,    35,     0,     0,
-      37,    38,     2,   204,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
-       0,     0,     0,     0,     0,     0,    30,   598,     0,     0,
-       0,     0,     0,     0,     0,   633,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    33,     0,    34,     0,    35,     0,
-       0,   205,    38,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,     0,    25,    26,    27,     0,     0,     0,     0,   280,
-     281,    30,   282,     0,     0,     0,     0,     0,   206,     0,
-       0,     0,     0,     0,     0,     0,   269,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   283,    33,
-       0,     0,     0,     0,   284,     0,    37,    38,   285,     0,
-       0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
-       0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   293,     0,   524,     0,     0,   169,     0,     0,     0,
-     295,   296,   297,   298,   299,   300,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,     0,     0,
-       0,     0,   280,   281,    30,   282,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,  -294,     0,    25,    26,    27,     0,     0,
-       0,   283,    33,     0,    30,     0,     0,   284,     0,    37,
-      38,   285,     0,     0,   286,   287,   288,   289,    40,    41,
-       0,   290,   291,     0,     0,     0,     0,     0,     0,   292,
-       0,     0,    33,     0,     0,     0,     0,    36,     0,   335,
-     336,    39,     0,  -294,   293,     0,   598,    -3,    40,    41,
-       0,     0,     0,   295,   599,   297,   298,   299,   300,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,   337,     0,    25,    26,
-      27,     0,     0,     0,   109,   280,   281,    30,   282,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,     0,     0,    25,    26,
-      27,     0,     0,     0,   283,    33,     0,    30,     0,     0,
-     648,     0,    37,    38,   285,     0,     0,   286,   287,   288,
-     289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
-       0,     0,   292,     0,     0,    33,     0,     0,     0,     0,
-     108,     0,    37,    38,     0,     0,     0,   293,   -35,   765,
-       0,    40,    41,     0,     0,     0,   295,   296,   297,   298,
-     299,   300,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    43,
-       0,    25,    26,    27,     0,     0,     0,   109,   280,   281,
-      30,   282,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-       0,    25,    26,    27,     0,     0,     0,   283,    33,     0,
-      30,   452,     0,   284,     0,    37,    38,   285,     0,     0,
-     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
-       0,     0,     0,     0,     0,   292,     0,     0,    33,     0,
-       0,     0,     0,     0,     0,    37,    38,     0,     0,     0,
-     293,     0,   294,     0,     0,     0,     0,     0,     0,   295,
-     296,   297,   298,   299,   300,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,   453,     0,    25,    26,    27,     0,     0,     0,
-     109,   280,   281,    30,   282,     0,     0,     0,     0,     0,
-       0,     0,     0,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-     283,    33,    25,    26,    27,     0,   284,     0,    37,    38,
-     285,    30,     0,   286,   287,   288,   289,    40,    41,     0,
-     290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,     0,     0,   293,     0,   155,    37,    38,     0,     0,
-       0,     0,   295,   296,   297,   298,   299,   300,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
-       0,   642,     0,   337,   280,   281,    30,   282,     0,     0,
-       0,   109,     0,     0,     0,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,   283,    33,    25,    26,    27,     0,   284,
-       0,    37,    38,   285,    30,     0,   286,   287,   288,   289,
-      40,    41,     0,   290,   291,     0,     0,     0,     0,     0,
-       0,   292,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    33,     0,     0,     0,   293,     0,   598,    37,
-      38,     0,     0,     0,     0,   295,   599,   297,   298,   299,
-     300,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,     0,
-      25,    26,    27,     0,   642,     0,   337,   280,   281,    30,
-     282,     0,     0,     0,   633,     0,     0,     0,     0,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,   283,    33,    25,    26,
-      27,     0,   284,     0,    37,    38,   285,    30,   452,   286,
-     287,   288,   289,    40,    41,     0,   290,   291,     0,     0,
-       0,     0,     0,     0,   292,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    33,     0,     0,     0,   293,
-       0,   377,    37,    38,     0,     0,     0,     0,   295,   379,
-     297,   298,   299,   300,   473,     2,   204,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,     0,   453,
-      25,    26,    27,  1234,     0,     0,     0,   109,     0,    30,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
-      26,    27,     0,     0,     0,     0,     0,    33,    30,    34,
-       0,    35,     0,     0,    37,    38,     0,     0,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,    33,    25,    26,    27,
-       0,    36,     0,   205,    38,    39,    30,     0,     0,     0,
-       0,     0,    40,    41,    -3,     0,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,    33,    25,    26,    27,    42,    36,
-     268,   335,   336,    39,    30,     0,     0,     0,   207,     0,
-      40,    41,     0,     0,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,    33,    25,    26,    27,   642,     0,   337,    37,
-      38,     0,    30,     0,     0,     0,   633,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-      33,     0,     0,     0,     0,    30,   255,    37,    38,     0,
-       0,     0,     0,     0,   109,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,    33,    25,    26,    27,     0,     0,     0,
-     205,    38,     0,    30,   155,     0,     0,     0,     0,     0,
-       0,     0,   109,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,    33,    25,    26,    27,     0,     0,   268,    37,    38,
-       0,    30,     0,     0,     0,   269,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,     0,     0,    25,    26,    27,     0,    33,
-       0,     0,     0,     0,    30,   255,    37,    38,     0,     0,
-       0,     0,     0,   633,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,    33,    25,    26,    27,     0,     0,     0,    37,
-      38,     0,    30,   337,     0,     0,     0,     0,     0,     0,
-       0,   633,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,     0,
-      33,    25,    26,    27,     0,     0,   453,   205,    38,     0,
-      30,     0,     0,     0,   109,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,     0,    33,     0,
-       0,     0,     0,    30,   268,    37,    38,     0,     0,     0,
-       0,     0,   628,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-       0,    33,    25,    26,    27,     0,     0,     0,    37,    38,
-       0,    30,   598,     0,     0,     0,     0,     0,     0,     0,
-     633,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    33,
-       0,     0,     0,     0,     0,   337,    37,    38,     0,     0,
-       0,     0,     0,   109,     2,   204,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,     0,     0,    25,
-      26,    27,     0,    43,     0,     0,     0,     0,    30,     0,
-       0,   109,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    33,     0,    34,     0,
-      35,     0,     0,    37,    38,   280,   281,     0,   282,  1062,
-       0,  1063,     0,     0,  1064,  1065,  1066,  1067,  1068,  1069,
-    1070,  1071,     0,     0,  1548,  1072,     0,     0,     0,  1073,
-    1074,     0,    32,     0,   283,     0,     0,     0,     0,  -412,
-     648,     0,     0,     0,   285,     0,     0,   286,   287,   288,
-     289,    40,    41,     0,   290,   291,     0,     0,     0,     0,
-       0,     0,   292,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   293,     0,   377,
-       0,     0,   169,     0,     0,     0,   295,   379,   297,   298,
-     299,   300,     0,     0,     0,     0,  1076,     0,   280,   281,
-    -129,   282,  1062,     0,  1063,     0,     0,  1064,  1065,  1066,
-    1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,     0,
-       0,     0,  1073,  1074,     0,    32,     0,   283,     0,     0,
-       0,     0,     0,   648,     0,     0,     0,   285,     0,     0,
-     286,   287,   288,   289,    40,    41,     0,   290,   291,     0,
-       0,     0,     0,     0,     0,   292,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     293,     0,   377,     0,     0,   169,     0,     0,     0,   295,
-     379,   297,   298,   299,   300,     0,     0,     0,     0,  1076,
-       0,   280,   281,  -129,   282,  1062,     0,  1063,  1418,  1419,
-    1064,  1065,  1066,  1067,  1068,  1069,  1070,  1071,     0,     0,
-    1548,  1072,     0,     0,     0,  1073,  1074,     0,    32,     0,
-     283,     0,     0,     0,     0,     0,   648,     0,     0,     0,
-     285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
-     290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   293,     0,   377,     0,     0,   169,     0,
-       0,     0,   295,   379,   297,   298,   299,   300,     0,     0,
-     280,   281,  1076,   282,  1062,     0,  1063,  1418,  1419,  1064,
-    1065,  1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,
-    1072,     0,     0,     0,  1073,  1074,     0,    32,     0,   283,
-       0,     0,     0,     0,     0,   648,     0,     0,     0,   285,
-       0,     0,   286,   287,   288,   289,    40,    41,     0,   290,
-     291,     0,     0,     0,     0,     0,     0,   292,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   293,     0,   377,     0,     0,   169,     0,     0,
-       0,   295,   379,   297,   298,   299,   300,     0,     0,   280,
-     281,  1076,   282,  1062,     0,  1063,     0,     0,  1064,  1065,
-    1066,  1067,  1068,  1069,  1070,  1071,     0,     0,     0,  1072,
-       0,     0,     0,  1073,  1074,     0,    32,     0,   283,     0,
-       0,     0,     0,     0,   648,     0,     0,     0,   285,     0,
-       0,   286,   287,   288,   289,    40,    41,     0,   290,   291,
-       0,     0,     0,     0,     0,     0,   292,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   293,     0,   377,     0,     0,   169,     0,     0,     0,
-     295,   379,   297,   298,   299,   300,     0,     0,     0,     0,
-    1076,     2,   204,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-       0,     0,     0,     0,     0,    30,     0,   280,   281,     0,
-     282,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   280,   281,     0,   282,
-       0,     0,     0,    33,     0,    34,   283,    35,     0,     0,
-      37,    38,   284,     0,     0,     0,   285,     0,     0,   286,
-     287,   288,   289,    40,    41,   283,   290,   291,     0,     0,
-       0,   648,  1327,     0,   292,   285,     0,     0,   286,   287,
-     288,   289,    40,    41,     0,   290,   291,     0,     0,   293,
-       0,   377,     0,   292,   280,   281,     0,   282,   295,   733,
-     297,   298,   299,   300,     0,     0,     0,     0,   293,     0,
-     784,     0,     0,   280,   281,     0,   282,   295,   379,   297,
-     298,   299,   300,   283,     0,     0,     0,     0,     0,   284,
-       0,     0,     0,   285,     0,     0,   286,   287,   288,   289,
-      40,    41,   283,   290,   291,     0,     0,     0,   284,     0,
-       0,   292,   285,     0,     0,   286,   287,   288,   289,    40,
-      41,     0,   290,   291,     0,     0,   293,     0,   377,     0,
-     292,   280,   281,     0,   282,   295,   826,   297,   298,   299,
-     300,     0,     0,     0,     0,   517,     0,     0,     0,     0,
-       0,     0,     0,     0,   295,   379,   297,   298,   299,   300,
-     283,     0,     0,     0,     0,     0,   284,     0,     0,     0,
-     285,     0,     0,   286,   287,   288,   289,    40,    41,     0,
-     290,   291,     0,     0,     0,     0,     0,     0,   292,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   520,     0,     0,     0,     0,     0,     0,
-       0,     0,   295,   379,   297,   298,   299,   300,     2,   204,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    30,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      33,     0,    34,     0,    35,    36,     0,   172,   173,    39,
-       0,     0,     0,     0,     0,     0,    40,    41,   203,     2,
-     204,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,     0,     0,    25,    26,    27,     0,     0,     0,
-       0,     0,     0,    30,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    33,     0,    34,     0,    35,     0,     0,   205,    38,
-     473,     2,   204,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,     0,     0,    25,    26,    27,     0,
-       0,     0,     0,     0,     0,    30,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    33,     0,    34,     0,    35,     0,     0,
-      37,    38,     2,   204,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,     0,     0,    25,    26,    27,
-       0,     0,     0,     0,     0,     0,    30,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    33,     0,    34,     0,    35,     0,
-       0,   205,    38
-};
-
-#define yypact_value_is_default(yystate) \
-  ((yystate) == (-1281))
-
-#define yytable_value_is_error(yytable_value) \
-  YYID (0)
-
-static const yytype_int16 yycheck[] =
-{
-       0,     1,     0,    42,   237,   217,   183,   183,   202,    42,
-       0,     1,     1,   183,    42,   542,   183,   183,   114,   103,
-     184,   455,   519,   343,     0,     0,   628,   454,    28,    29,
-     183,    31,   697,    31,   697,   183,   498,   697,   610,   608,
-     502,    31,    42,   679,    44,   461,    44,   347,  1042,   496,
-     279,   901,   655,     1,    54,    31,    31,   166,   167,   608,
-      60,  1061,    60,    63,   608,    63,    66,   610,    66,   153,
-     347,     0,   578,    63,  1005,   277,    66,    66,   416,   998,
-      80,    81,  1041,  1042,   184,   608,   263,   263,    63,   779,
-      42,   362,   185,   263,   608,   366,   263,   263,   436,    31,
-     264,   528,    31,   199,   104,  1337,   444,   107,   608,    27,
-     263,   776,     0,   776,   114,   263,   776,    42,   608,   722,
-     642,   643,   644,  1054,   758,   424,   425,   611,    38,   254,
-     643,   644,    38,   617,    81,    42,    62,   106,  1418,   661,
-       0,     1,    63,    31,   183,   145,    44,   145,   661,   109,
-     183,    81,   108,   153,   226,   183,   116,  1422,   158,    77,
-     158,   130,    38,   110,   264,   612,   259,   260,   488,   616,
-      50,    31,    44,   245,   743,   109,    43,    44,   814,   109,
-    1073,  1074,   116,   183,   184,    81,   184,   108,   824,    54,
-     637,    43,    44,    38,   641,    38,   408,    84,   108,   199,
-     110,   500,    63,   839,   110,   131,    66,   207,  1440,   207,
-     901,   109,  1492,   735,    43,    44,   216,   494,   108,   219,
-     519,   219,   735,    38,   263,   112,   226,    81,   108,   219,
-     263,   183,   108,    11,   110,   263,   115,   109,   108,   104,
-     404,   241,   107,   743,   219,   245,  1240,   114,  1141,   249,
-     250,   249,   131,   743,   115,  1520,   340,   113,   183,   249,
-    1525,   113,   116,   263,   264,   108,   264,   110,   115,   838,
-     270,    38,   144,   249,   249,     0,   183,   277,   850,   599,
-    1545,   510,     3,   717,   113,   369,   585,  1552,    81,   838,
-     454,   416,   292,   108,   838,   110,  1290,   158,   394,  1474,
-     111,  1525,   250,  1303,   404,   827,    31,   850,   628,   207,
-     610,   436,   818,   633,   827,   838,   109,   249,  1008,   444,
-     249,  1545,   486,   116,   838,   596,   422,   327,  1552,   327,
-    1289,  1290,   428,    81,  1509,   207,  1511,  1256,   838,    94,
-     238,   108,    95,   110,   292,   111,   346,   347,   838,   115,
-      81,   216,   690,    95,   454,  1525,   840,   115,   219,   698,
-     108,   249,     3,   363,     1,   237,   254,   367,   639,   122,
-    1061,   269,    71,   348,   129,  1225,   696,   108,   378,    71,
-     122,   720,  1552,    82,    83,   108,   486,   959,   108,   249,
-      82,    83,   114,   115,   394,   293,   257,   269,   296,    71,
-     261,   108,  1038,  1039,   404,   270,   404,    44,   130,   958,
-      82,    83,   277,   115,   958,    71,     0,   115,  1020,     0,
-    1414,   115,   422,   130,   296,   872,    82,    83,   428,   131,
-     430,   488,   131,   131,   109,   958,  1070,   131,   110,   131,
-     115,    67,   115,    89,    90,    71,   675,   531,    74,   115,
-      76,   130,   772,   115,   454,  1414,    71,    83,   131,   459,
-    1096,  1097,   118,  1463,   464,   131,   103,    82,    83,   131,
-    1470,   343,   109,   473,   108,  1406,  1407,   115,   478,   125,
-     126,   346,   109,   108,   109,   109,   486,   348,   486,   116,
-     490,   115,   490,   131,   494,   110,   109,   497,   363,   499,
-     490,    71,   367,   130,   479,   967,  1003,   144,   120,   121,
-     937,   927,    82,    83,   490,   490,   153,   964,   945,   519,
-     697,   697,   115,  1523,   249,   473,   108,   697,   416,   254,
-     697,   697,   761,   108,  1225,   699,   536,  1140,   131,   539,
-     110,   541,   542,  1115,   697,  1029,  1030,   656,   436,   697,
-     850,   108,   424,   425,   452,   757,   444,   455,   829,    87,
-      88,   490,   833,   461,   991,   690,   203,   663,   429,    71,
-     207,   519,   665,   850,   115,    10,    11,    12,    13,    14,
-      82,    83,   115,   108,   210,   642,   643,   644,   536,   589,
-     131,   539,   470,   541,   542,   109,   596,   115,   131,   699,
-     237,   238,   490,    38,   661,   109,   108,   732,   608,   115,
-     610,   695,  1303,   131,   512,    71,   514,   115,   479,   517,
-     111,   597,   520,   109,   115,   131,    82,    83,   500,   629,
-     490,    66,   269,   131,  1270,   272,   109,    79,   977,   696,
-     282,   589,  1278,  1279,  1280,   645,    71,   519,    73,    74,
-     109,   651,   923,   295,   296,   630,   293,    82,    83,   296,
-     660,   111,   662,   663,   664,   307,   114,  1101,   110,  1303,
-     112,    79,     3,   111,   116,   887,   108,   115,   735,    10,
-      11,    12,    13,    14,    91,    92,   963,   771,   113,     0,
-    1326,   416,   109,   108,   293,   110,   908,   697,   115,   699,
-    1020,   343,   110,   340,   112,   111,   343,    38,   116,   115,
-     108,   436,   712,   585,   662,   772,   664,   118,   718,   444,
-      31,   131,   123,   124,   350,   362,   352,   599,    71,   366,
-     730,    42,   369,    44,   111,    66,   969,   379,   115,    82,
-      83,   602,   108,   743,   744,   109,  1380,   109,   723,    60,
-    1131,   115,    63,   115,  1135,    66,   628,   757,   108,    63,
-     110,   633,   737,   488,   629,   490,   108,   110,   118,   630,
-     827,  1495,  1463,   937,   635,   108,   108,  1501,   110,  1470,
-     645,   945,   730,   108,   893,   110,   118,   424,   425,   111,
-     109,   109,  1319,   118,  1133,   660,   115,   115,  1522,   113,
-     109,   679,   690,  1527,   131,    52,   115,   113,   512,    71,
-     514,    73,    74,   517,   440,   452,   520,   109,   455,   717,
-      82,    83,   109,   115,   461,   424,   425,   128,   115,   130,
-     113,  1102,  1523,  1467,   145,  1469,   473,   937,   838,  1033,
-    1160,   114,   115,   109,   732,   945,   108,   158,    95,   115,
-     850,   113,  1191,  1192,   109,   108,   831,   110,   834,   131,
-     115,   498,   723,   500,  1529,   502,  1529,   131,   109,  1529,
-     115,   116,   183,   184,   115,   512,   737,   514,   109,   109,
-     517,   109,   519,   520,   115,   115,    71,   115,    73,    74,
-    1524,   108,   757,   893,   531,   108,   207,    82,    83,   109,
-     900,   901,  1131,   109,   109,   115,  1135,  1136,   219,   115,
-     115,   901,    81,   512,   556,   557,   558,   108,   517,   110,
-    1240,   520,   108,   923,   110,   901,   901,   109,   110,     4,
-       5,     6,     7,     8,     9,   108,   814,   937,   249,    71,
-     111,    73,    74,    81,   191,   945,   824,  1056,   585,   119,
-      82,    83,   263,   901,   108,   109,   110,   599,   108,   596,
-     110,   839,   599,   963,   108,   690,   110,   214,    57,    58,
-     831,   696,   108,   109,   110,   574,   108,   224,   968,   968,
-     108,   113,   110,   983,  1041,     4,     5,     6,     7,     8,
-       9,   628,   992,    68,   127,    70,   633,   108,   109,   110,
-    1000,   128,   639,  1003,   130,  1005,    71,   732,    73,    74,
-      75,   110,   108,   901,   110,     3,   327,    82,    83,   114,
-     115,  1250,    10,    11,    12,    13,    14,  1123,    71,   927,
-      73,    74,    75,   115,   116,   983,   347,   115,   116,    82,
-      83,   901,   108,   108,   110,   110,   293,   772,  1023,    68,
-      38,    70,  1000,   118,  1054,  1003,   131,  1005,   695,   108,
-     109,   110,  1401,    93,  1064,   108,   108,  1067,  1068,  1069,
-     108,  1061,    10,    11,    12,    13,    14,  1504,    66,  1418,
-     717,   563,   564,   565,   566,  1061,  1061,    71,   111,    73,
-      74,   733,  1092,   404,    43,    44,    44,   969,    82,    83,
-      38,   111,   702,  1160,   704,   109,  1054,   109,   968,  1338,
-     747,   109,    60,  1342,   109,    63,  1064,   109,    66,  1067,
-    1068,  1069,     3,  1123,   561,   562,   110,  1554,    66,    10,
-      11,    12,    13,    14,   771,   109,  1220,   779,    71,   108,
-      73,    74,    75,   454,   111,   109,   111,   111,  1020,    82,
-      83,   115,  1491,  1492,    57,    58,    59,    38,   567,   568,
-    1038,  1039,  1023,  1262,  1263,  1264,   130,   131,   559,   560,
-     108,   110,   110,  1061,   115,   108,   901,   130,   113,   490,
-     118,   108,   111,   494,   826,    66,   109,   109,   116,   115,
-     111,   111,   829,   111,   441,   111,   833,   145,  1198,   116,
-      28,  1061,   116,  1101,   109,    84,    85,    86,   109,   111,
-     158,   109,  1202,  1203,  1203,  1444,   113,   116,  1096,  1097,
-    1220,   114,   114,   114,   108,  1225,   115,  1202,   475,   108,
-     115,   110,  1289,   112,   113,  1225,   184,   109,     4,     5,
-       6,     7,     8,     9,   131,   109,   109,   116,   109,  1225,
-    1225,   109,   109,   115,  1244,  1244,    71,   109,   109,   207,
-      75,   109,  1262,  1263,  1264,   512,    32,    82,    83,   109,
-     517,   219,   109,   520,   109,   109,    71,  1225,    73,    74,
-      75,    84,    85,    86,   109,   109,   923,    82,    83,   470,
-     927,   109,   109,   108,   114,   110,   109,   608,   109,   610,
-      28,  1397,    68,   118,    70,   108,  1539,   110,  1298,   112,
-     113,   698,   111,  1303,  1262,  1263,  1264,   109,   130,  1319,
-    1320,   109,   109,  1298,   114,   109,   115,  1303,  1303,   111,
-     967,   968,   969,   720,   111,   109,  1061,  1225,    71,   109,
-     115,  1202,    75,  1203,   109,   901,   115,  1337,  1337,    82,
-      83,   115,  1529,  1529,   116,   113,   111,    71,   109,  1529,
-    1238,    75,  1529,  1529,   111,  1225,  1530,   115,    82,    83,
-     115,  1319,  1320,   109,  1374,   108,  1529,  1377,  1020,   327,
-     109,  1529,   108,  1020,  1244,   118,   697,   108,   699,   108,
-    1554,   108,  1270,   108,   108,   111,  1396,  1397,   116,   131,
-    1278,  1279,  1280,   114,   118,   109,  1406,  1407,  1504,    71,
-     109,    73,    74,    75,   109,  1303,     0,     1,   128,  1061,
-      82,    83,  1422,   114,   811,   113,  1374,  1427,   111,  1377,
-    1530,   678,   743,   744,   131,  1160,   109,  1298,   115,   111,
-     687,   115,   111,  1303,   691,  1445,   109,    31,  1326,   109,
-    1440,  1440,   109,   111,  1554,   111,   404,  1457,  1406,  1407,
-      44,   111,   109,    54,  1101,  1102,   111,   111,   111,    46,
-      29,   109,   131,  1463,  1422,   114,   131,  1337,   131,  1427,
-    1470,    71,    66,    73,    74,    75,   114,  1463,  1463,   131,
-    1529,   131,    82,    83,  1470,  1470,  1529,  1445,   679,   116,
-    1225,  1529,   889,   109,  1504,  1505,   111,   114,  1064,  1457,
-     111,   111,   111,   104,  1514,  1240,   107,   111,   108,   103,
-    1520,    80,    81,   111,   111,  1525,   111,   838,   118,  1529,
-    1530,  1396,  1530,  1523,   109,  1177,   109,   111,   108,   850,
-     111,    63,   108,  1543,   108,  1545,    59,  1523,  1523,  1549,
-     113,   109,  1552,   109,  1554,   131,  1554,  1505,    80,   116,
-    1560,   145,   153,   111,  1564,   111,  1514,   109,   111,   153,
-     154,   109,  1520,   108,  1472,  1463,  1474,  1525,  1303,    95,
-    1440,    95,  1470,  1220,   108,   114,   131,   115,   111,   109,
-     977,   109,   109,   115,   109,  1543,    41,  1545,   131,   131,
-     184,  1549,    95,  1463,  1552,  1204,  1205,  1244,  1207,   116,
-    1470,  1509,  1560,  1511,  1213,   199,  1564,  1216,   202,   203,
-     109,  1008,   109,   207,    95,   216,   937,   131,   109,   109,
-     131,   116,   131,   814,   945,  1523,   158,   109,   114,   109,
-      50,   131,    52,   824,   228,    55,    56,    57,   232,    59,
-     234,   111,   963,   111,   108,   114,   131,   114,   839,   243,
-     109,   109,   131,  1523,    74,   249,   109,  1539,   109,  1225,
-     254,  1058,  1076,   569,  1225,   570,    86,    87,   925,   270,
-     264,   571,   241,  1492,    63,   573,   277,  1382,   272,   572,
-      25,    26,    27,  1564,    73,  1313,  1136,   219,  1342,  1470,
-    1337,    10,    11,    12,    13,    14,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,  1092,    29,    30,    31,   452,    38,
-     452,   945,   704,   464,    38,   257,   115,   893,  1463,   261,
-     947,   992,   589,   965,   657,  1470,  1133,   747,  1244,   490,
-     757,   577,    -1,    -1,   577,   346,   340,    66,   577,   343,
-      -1,    96,    66,    98,  1320,   349,    -1,    -1,    -1,    73,
-      74,    -1,   363,    77,    -1,    -1,   367,  1376,   362,   158,
-      -1,    -1,   366,    -1,    -1,   369,    -1,    10,    11,    12,
-      13,    14,    -1,    -1,    -1,    -1,    -1,    -1,  1523,   108,
-      -1,   110,    -1,  1440,  1191,  1192,   110,    -1,    -1,   118,
-      -1,    -1,    -1,    -1,   118,    38,    -1,    -1,  1374,   378,
-      -1,  1377,    -1,    -1,    -1,  1072,   348,    -1,    -1,    -1,
-      -1,    -1,   416,    -1,    -1,  1472,    -1,  1474,    -1,   430,
-     219,    -1,    -1,    66,   179,    -1,    -1,   431,    -1,    -1,
-      -1,    -1,   436,    -1,   189,   190,    -1,  1038,  1039,   194,
-     444,   196,   197,    -1,    -1,    -1,  1422,    -1,    -1,    -1,
-      -1,  1427,  1509,    -1,  1511,    -1,    -1,    -1,   257,    -1,
-      -1,    -1,   261,    -1,    -1,   108,   470,   110,    -1,   473,
-      -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,   277,    -1,
-     459,  1457,  1539,    -1,   488,   464,   490,   429,    -1,    10,
-      11,    12,    13,    14,   498,  1096,  1097,    -1,   502,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    10,    11,    12,
-      13,    14,    -1,   343,   344,    -1,    -1,    38,   497,    71,
-     499,    73,    74,    75,    -1,   355,   356,   531,   532,    -1,
-      82,    83,    -1,    -1,    -1,    38,    -1,   479,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,   348,
-      71,    -1,    73,    74,    75,    -1,   108,    -1,   110,    -1,
-      -1,    82,    83,    66,   116,    -1,   118,  1543,    71,    -1,
-      73,    74,    75,  1549,   578,    -1,    -1,    -1,    -1,    82,
-      83,    -1,    -1,    -1,  1560,   596,    -1,   108,  1564,   110,
-      -1,    -1,   596,   597,  1401,   599,    -1,   118,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   108,   610,   110,    -1,    -1,
-      -1,  1418,    -1,    -1,    -1,   118,    -1,    -1,   629,    -1,
-      -1,    -1,    -1,    -1,   628,    -1,    -1,    -1,    -1,   633,
-     429,    -1,    -1,    -1,   645,   639,    -1,  1238,   642,   643,
-     644,    -1,    -1,    -1,    -1,  1312,    -1,   446,    -1,   660,
-      71,    -1,    73,    74,    75,    -1,    -1,   661,    -1,    -1,
-     602,    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,  1270,
-      -1,    -1,   651,    -1,    -1,   679,    -1,  1278,  1279,  1280,
-     479,    -1,    -1,    -1,  1491,  1492,   690,   108,   630,   110,
-      -1,   695,   696,   635,    -1,   699,    -1,   118,    -1,    -1,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,     0,    -1,
-      29,    30,    31,    -1,    -1,  1326,    -1,    -1,   732,    38,
-      39,   735,    -1,   712,    -1,    -1,    -1,    -1,    -1,   718,
-     744,    -1,    -1,   747,    -1,     0,   757,    -1,    -1,    31,
-      71,    -1,    73,    74,    75,    -1,    -1,    66,    -1,    -1,
-      -1,    82,    83,    -1,    73,    74,    -1,   771,   772,    -1,
-      -1,    -1,    -1,   777,    -1,    -1,    31,    -1,    -1,    -1,
-      -1,   723,    -1,    -1,    66,    -1,    -1,   108,    -1,   110,
-      -1,    -1,    -1,    -1,    -1,   737,    -1,   118,  1529,    -1,
-      -1,   110,    -1,   602,  1471,   114,  1473,    -1,    -1,   118,
-     814,    66,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     824,    -1,    -1,   827,    -1,   829,   581,   582,   832,   833,
-     834,   630,    -1,    -1,    -1,   839,   635,    -1,    -1,    -1,
-      -1,  1508,    -1,  1510,    -1,   849,    71,    -1,    73,    74,
-      75,    -1,    -1,    -1,    -1,    -1,   611,    82,    83,   614,
-     615,    -1,   617,    -1,   619,   620,    -1,    -1,    -1,   624,
-     625,    -1,   154,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   108,    -1,    -1,  1553,    -1,  1555,   831,
-      -1,    -1,    -1,   118,   724,    -1,   726,   901,    -1,   154,
-      -1,  1568,  1569,   733,   734,    -1,    -1,   130,   738,    -1,
-      -1,    -1,   923,    -1,   893,    -1,   187,    -1,    -1,   923,
-     750,   900,    -1,   194,   723,   755,    -1,    -1,    10,    11,
-      12,    13,    14,    -1,    -1,    -1,    -1,    -1,   737,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   228,    -1,    -1,    -1,
-      -1,   781,    -1,   708,   709,   959,    38,    -1,   757,   714,
-      -1,    -1,    -1,   967,   968,    -1,    -1,   249,    -1,    -1,
-      -1,    -1,   254,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   985,    -1,    -1,    66,    -1,    -1,    -1,    -1,    71,
-      -1,    73,    74,    75,   249,   266,   826,    -1,    -1,   254,
-      82,    83,    -1,    -1,    -1,    -1,    25,    26,    27,    -1,
-      -1,    -1,    -1,   992,    -1,    -1,  1020,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,  1033,
-      -1,    -1,   831,    -1,  1038,  1039,   118,  1041,  1042,    -1,
-      -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,    -1,
-      -1,   322,    -1,   883,   884,   885,   886,  1061,   888,   330,
-      -1,    -1,   333,    -1,    -1,    -1,    -1,   349,    -1,    -1,
-      -1,    -1,    38,    -1,   904,    -1,    -1,    96,    -1,    98,
-      -1,  1023,    -1,    -1,    -1,    -1,    -1,    -1,   918,    -1,
-      -1,    -1,  1096,  1097,   349,    -1,    -1,    -1,  1102,    -1,
-      66,    -1,    -1,    -1,   123,    71,    -1,    73,    74,    75,
-      -1,    -1,    -1,  1092,    -1,    -1,    82,    83,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   396,    -1,   957,    -1,   400,
-      -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,   431,
-      -1,    -1,   118,    -1,   436,    -1,  1160,    -1,    -1,    -1,
-     179,   416,   444,    -1,    -1,    -1,    -1,   997,   187,    -1,
-     189,   190,    -1,    -1,  1004,   194,   431,   196,   197,  1009,
-      -1,   436,    -1,    -1,  1014,    -1,  1016,    -1,   470,   444,
-    1020,  1021,  1022,    -1,    -1,  1025,    -1,    -1,    -1,  1203,
-      -1,    -1,    -1,    -1,  1034,    -1,   488,    -1,   490,  1220,
-      -1,    -1,    -1,    -1,   485,   470,  1220,    -1,    -1,  1198,
-      -1,  1225,  1052,  1053,  1023,    -1,    -1,    -1,    10,    11,
-      12,    13,    14,   488,  1238,   490,  1240,    -1,    -1,    -1,
-    1244,    -1,    -1,    -1,    -1,    -1,    -1,   266,    -1,  1079,
-     532,    -1,  1082,    -1,    -1,    -1,    38,    -1,    -1,    -1,
-    1202,    -1,    -1,    -1,    -1,    -1,  1270,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1278,  1279,  1280,   532,    -1,    -1,
-      -1,    -1,    -1,    -1,    66,  1289,  1290,    -1,    -1,    71,
-    1120,    73,    74,    75,    -1,    -1,  1126,  1127,    -1,  1303,
-      82,    83,    -1,    -1,    -1,    -1,   577,   578,  1138,    -1,
-      -1,    -1,    -1,  1143,    -1,   597,  1146,    -1,  1148,    -1,
-      -1,  1151,  1326,    -1,    -1,    -1,   108,    -1,    -1,    -1,
-      -1,    -1,    -1,  1337,  1164,    -1,   118,    -1,    -1,    -1,
-      -1,    -1,   597,  1098,    -1,    -1,    -1,  1177,    -1,  1179,
-    1180,  1181,  1182,    -1,    -1,    -1,  1298,    -1,    -1,    -1,
-     642,   643,   644,    -1,    -1,  1195,    -1,  1197,    -1,    -1,
-      -1,  1201,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   661,
-      -1,    -1,    -1,    -1,    -1,  1396,    -1,   642,   643,   644,
-      -1,    -1,    -1,    -1,    -1,   666,    -1,   679,    -1,   670,
-    1230,  1231,    -1,  1202,    -1,    -1,   661,    -1,   690,    -1,
-    1414,    -1,     0,    -1,   696,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   679,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   703,    -1,    -1,   690,  1440,    -1,    -1,     0,
-      -1,   696,    -1,    31,    -1,     0,     1,    -1,    -1,    -1,
-     732,  1281,  1282,   735,    -1,    -1,    -1,    -1,    -1,  1463,
-      -1,  1291,    -1,    -1,    -1,    -1,  1470,  1222,    -1,    -1,
-      31,    -1,    -1,    -1,    -1,    -1,    31,   732,    66,    -1,
-     735,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     772,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1298,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    63,    -1,
-      -1,    66,    -1,  1343,    -1,    -1,    -1,   772,    -1,  1523,
-      -1,    -1,    -1,    -1,    -1,  1355,  1530,  1357,  1358,  1359,
-      -1,    -1,   814,    -1,    -1,    -1,    -1,    -1,    -1,  1369,
-      -1,    -1,   824,    -1,    -1,   827,    -1,   818,  1378,    -1,
-     832,    -1,   834,    -1,    -1,    -1,    -1,   839,    -1,   814,
-      -1,    -1,   581,   582,  1394,    -1,   154,    -1,    -1,   824,
-      -1,    -1,   827,    -1,    -1,    -1,    -1,   832,    -1,   834,
-      -1,    -1,    -1,    -1,   839,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   611,   154,    -1,   614,   615,    -1,   617,   154,
-     619,   620,    -1,    -1,    -1,   624,   625,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   901,
-    1450,  1451,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1463,    -1,    -1,    -1,    -1,    -1,    -1,
-    1470,    -1,    -1,    -1,    -1,    -1,   901,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     931,   249,    -1,    -1,   219,    -1,   254,    -1,    -1,    -1,
-      -1,    -1,    -1,  1503,    -1,    -1,    -1,  1507,    -1,    -1,
-      -1,    -1,    -1,    -1,   703,    -1,    -1,    -1,   249,   708,
-     709,    -1,    -1,   254,   249,   714,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   985,    -1,    -1,  1536,    -1,  1538,    -1,
-      -1,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-     985,    29,    30,    31,    -1,    -1,  1566,  1567,    -1,  1010,
-      38,    39,    -1,    -1,  1574,  1575,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1026,  1038,  1039,    -1,  1041,
-    1042,   349,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
-      -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,  1061,
-      -1,    -1,    -1,  1038,  1039,    -1,  1041,  1042,   349,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,  1061,    -1,    29,    30,
-      31,    -1,   110,    -1,  1096,  1097,   114,    38,    -1,    -1,
-     118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   416,    -1,
-      -1,    -1,  1103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1096,  1097,   431,    -1,    66,    -1,    -1,   436,    -1,
-      71,    -1,    73,    74,    75,   416,   444,    -1,    -1,    -1,
-      -1,    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     431,    -1,    -1,    -1,    -1,   436,   431,    -1,  1160,    -1,
-      -1,    -1,   470,   444,    -1,    -1,    -1,   108,    -1,   110,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,
-     488,    -1,   490,    -1,    -1,  1160,    -1,    -1,    -1,   470,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1203,    -1,    -1,    -1,    -1,    -1,   488,    -1,   490,
-      -1,    -1,    -1,    -1,    -1,   490,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1225,   532,    -1,    -1,    -1,  1203,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1238,    -1,  1240,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1225,   532,    -1,    -1,    -1,    -1,    -1,   532,    -1,    -1,
-      -1,    -1,    -1,  1238,    -1,  1240,    -1,    -1,  1270,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,  1278,  1279,  1280,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1289,  1290,   597,
-      -1,    -1,    -1,    -1,    -1,  1270,    -1,    -1,    -1,    -1,
-      -1,  1303,    -1,  1278,  1279,  1280,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1289,  1290,   597,    -1,    -1,    -1,
-      -1,    -1,   597,    -1,  1326,    -1,    -1,    -1,  1303,    -1,
-      -1,    -1,    -1,    -1,   642,   643,   644,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1326,    -1,   661,    -1,    -1,    -1,    -1,    -1,  1098,
-      -1,   642,   643,   644,    -1,    -1,    -1,   642,   643,   644,
-      -1,   679,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     661,    -1,   690,    -1,    -1,    -1,   661,    -1,   696,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   679,     7,
-      -1,    -1,    10,    11,    12,    13,    14,    -1,    -1,   690,
-      -1,    -1,  1414,    -1,    -1,   696,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   732,    -1,    -1,   735,    36,    37,
-      38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1414,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   732,    -1,    -1,   735,    -1,    -1,    65,    66,    -1,
-     735,  1463,    -1,    71,   772,    -1,    -1,    75,  1470,    -1,
-      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
-      -1,    -1,    -1,  1222,    -1,    93,    -1,    -1,  1463,    -1,
-      -1,   772,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,
-     108,    -1,   110,    -1,    -1,    -1,   814,    -1,    -1,   117,
-     118,   119,   120,   121,   122,    -1,   824,    -1,    -1,   827,
-      -1,  1523,    -1,    -1,   832,    -1,   834,    -1,    -1,    -1,
-      -1,   839,    -1,   814,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   824,    -1,    -1,   827,    -1,  1523,    -1,
-      -1,   832,   827,   834,    -1,    -1,    -1,    -1,   839,   834,
-      -1,    -1,    -1,    -1,    -1,     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,    -1,   901,    29,    30,    31,    32,    -1,    -1,
-      35,    -1,    -1,    38,    39,    -1,    -1,    -1,    -1,    10,
-      11,    12,    13,    14,    -1,    10,    11,    12,    13,    14,
-     901,    -1,    -1,    -1,    -1,    -1,   901,    -1,    63,    -1,
-      -1,    66,    44,    68,    -1,    70,    71,    38,    73,    74,
-      75,    -1,    -1,    38,    -1,    -1,    -1,    82,    83,    -1,
-      -1,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,
-      71,    66,    -1,   108,    75,   110,    71,   985,    -1,    -1,
-      75,    82,    83,   118,    -1,    -1,    -1,    82,    83,    -1,
-      -1,    -1,    -1,   968,    -1,    -1,    -1,   109,    -1,    -1,
-      -1,    -1,    -1,   115,   985,    -1,    -1,   108,    -1,    -1,
-     985,    -1,    -1,   108,    -1,    -1,    -1,   118,    -1,    -1,
-      -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
-    1038,  1039,   144,  1041,  1042,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   154,    -1,    -1,    -1,   158,    -1,    -1,    -1,
-      -1,    -1,    -1,  1061,    -1,    -1,    -1,  1038,  1039,    -1,
-    1041,  1042,    -1,    -1,    -1,    -1,  1041,  1042,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1061,    -1,    -1,    -1,    -1,    -1,  1061,    -1,  1096,  1097,
-      -1,    -1,    -1,    -1,    -1,   207,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   219,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1096,  1097,    -1,    -1,    -1,
-      -1,    36,    37,    -1,    39,   237,   238,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,   261,
-      65,    -1,  1160,    -1,    -1,    38,    71,   269,    -1,    -1,
-      75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,  1160,
-      -1,   293,    -1,    66,   296,    -1,    -1,    -1,    -1,    -1,
-      73,    74,    -1,   108,    -1,  1203,    -1,    -1,    -1,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1225,    -1,    -1,
-      -1,    -1,  1203,    -1,    -1,    -1,    -1,  1202,  1203,    -1,
-    1238,   343,  1240,    -1,    -1,   118,   348,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1225,    -1,    -1,    -1,    -1,    -1,
-    1225,    -1,    -1,    -1,    -1,    -1,    -1,  1238,    -1,  1240,
-      -1,    -1,  1270,    -1,    -1,    -1,    -1,    -1,    -1,  1244,
-    1278,  1279,  1280,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1289,  1290,    -1,    -1,    -1,    -1,    -1,    -1,  1270,
-      -1,    -1,    -1,    -1,    -1,  1303,    -1,  1278,  1279,  1280,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1289,  1290,
-      -1,    -1,   424,   425,  1289,  1290,    -1,    -1,  1326,   431,
-      -1,    -1,  1303,  1298,    -1,    -1,    -1,    -1,  1303,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     452,    -1,    -1,   455,    -1,  1326,    -1,    -1,    -1,   461,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   488,    -1,    -1,    -1,
-      63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   500,    -1,
-      73,    -1,    75,    -1,    77,    -1,    -1,    -1,    -1,    -1,
-     512,    84,   514,    -1,    -1,   517,  1414,   519,   520,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     532,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   115,  1414,   117,   118,   119,    -1,    -1,  1414,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1463,    -1,    43,    -1,    -1,
-      -1,    -1,  1470,    -1,    -1,  1440,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   585,    -1,   158,    -1,    -1,    -1,    -1,
-      -1,    -1,  1463,    -1,    -1,   597,    -1,   599,  1463,  1470,
-     602,    -1,    -1,    -1,    -1,  1470,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    99,    -1,  1523,   628,    -1,    -1,    -1,
-      -1,   633,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     642,   643,   644,    -1,    -1,    -1,   219,    -1,   221,   222,
-     223,    -1,  1523,    -1,    -1,    -1,    -1,    -1,  1523,   661,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,   155,
-      29,    30,    31,    -1,   257,    -1,    -1,    -1,   261,    38,
-      -1,    -1,    -1,   169,   696,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   277,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   717,   192,    66,    -1,    -1,
-      -1,    -1,    -1,    -1,    73,    74,    -1,    -1,    77,    -1,
-     206,    -1,    -1,   735,    -1,   737,    -1,    -1,    -1,   215,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   225,
-      -1,    -1,    -1,    -1,   327,    -1,    -1,    -1,    -1,   108,
-      -1,   110,    36,    37,    -1,    39,    -1,    -1,    -1,   118,
-     772,    -1,    -1,    -1,   250,   348,    -1,    -1,    -1,   255,
-     353,   354,    -1,    -1,    -1,    -1,    -1,    -1,   361,    -1,
-      -1,    65,   268,    -1,    -1,    -1,    -1,    71,   274,    -1,
-     276,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,   294,    93,
-      -1,    -1,    -1,    -1,    -1,   827,    -1,    -1,    -1,   831,
-      -1,   404,   834,    -1,   108,    -1,   110,    -1,    -1,   113,
-      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,   422,
-      -1,    -1,    -1,    -1,   427,    -1,   429,    -1,    -1,    -1,
-      -1,   337,    -1,    -1,    -1,    -1,   342,    -1,    -1,    -1,
-      -1,    -1,    -1,   446,    -1,    -1,   449,   450,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   465,    -1,   370,    -1,    -1,    -1,   374,   375,
-      -1,   377,    -1,    -1,    -1,    -1,   479,    -1,   384,   385,
-      -1,   387,   388,   486,   390,    -1,   392,    -1,    -1,    -1,
-      -1,    -1,    -1,     7,    -1,   927,    10,    11,    12,    13,
-      14,    -1,    -1,   409,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   417,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   442,   969,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   453,    -1,    -1,
-      -1,    65,    66,   985,    -1,    -1,    -1,    71,    -1,    -1,
-      -1,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
-     476,    85,    86,    -1,    -1,    -1,   482,    -1,    -1,    93,
-      -1,   487,    -1,    -1,    -1,    -1,    -1,    -1,  1020,    -1,
-      -1,    -1,    -1,    -1,   108,    -1,   110,    -1,    -1,   602,
-      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,  1041,
-    1042,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   524,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   630,   280,    -1,
-     282,   283,   635,    -1,   540,    -1,    -1,    -1,   290,   291,
-      -1,    -1,    -1,   295,   296,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   307,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,  1101,
-      -1,   577,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     586,    -1,    -1,    -1,    -1,    -1,    -1,   593,    -1,    -1,
-      -1,   343,   598,    -1,    65,    -1,    -1,    -1,    -1,    -1,
-      71,    -1,    -1,   609,    75,    -1,    -1,    78,    79,    80,
-      81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
-     723,    -1,    93,    -1,    -1,    -1,    -1,   379,  1160,    -1,
-      -1,    -1,    -1,    -1,   737,    -1,    -1,   108,    -1,   110,
-      -1,    -1,    -1,    -1,   650,   116,   117,   118,   119,   120,
-     121,   122,    -1,    -1,   757,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1202,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     686,    -1,    -1,    -1,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    -1,  1240,    -1,
-      -1,    -1,    -1,    38,    -1,   818,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   831,    -1,
-      -1,    -1,    -1,    -1,    -1,   741,    -1,    -1,    -1,    -1,
-      -1,    66,    -1,    -1,    -1,   751,   752,   850,    73,    74,
-      -1,    -1,    77,    -1,    -1,    -1,    -1,  1289,  1290,   765,
-      -1,    -1,    -1,    -1,    -1,    -1,  1298,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   782,    -1,   784,    -1,
-      -1,    -1,   788,   108,    -1,   110,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   556,   557,   558,   559,   560,   561,
-     562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
-     572,   573,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      36,    37,    -1,    39,   937,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   599,   854,    -1,
-      -1,    -1,    -1,    -1,    -1,   861,    -1,    -1,    -1,    65,
-     963,    -1,    -1,    -1,    -1,    71,    -1,    -1,   874,    75,
-     876,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
-      86,    -1,  1414,    -1,   890,    -1,    -1,    93,   991,    -1,
-      -1,   897,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   108,   909,   110,    -1,   912,    -1,    -1,   115,
-      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
-    1023,    -1,    -1,    -1,   930,    -1,    -1,    -1,    -1,    -1,
-      -1,  1034,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1472,    -1,  1474,    -1,    -1,    -1,   698,    -1,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    -1,    -1,   720,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    38,  1509,    -1,  1511,
-      -1,   733,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      -1,    29,    30,    31,    66,    -1,    -1,  1539,    -1,    -1,
-      38,    -1,  1115,  1019,    -1,    77,    -1,    -1,    -1,   153,
-     154,    -1,    -1,    -1,    -1,    -1,    -1,   779,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,
-      -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,    77,
-      -1,    -1,    -1,   187,    82,    83,    -1,    -1,    -1,   811,
-     194,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1075,
-      -1,    -1,    -1,    -1,   826,    -1,  1082,    -1,    -1,    -1,
-     108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     118,    36,    37,    -1,    39,    -1,    -1,    -1,    -1,  1202,
-      -1,    -1,    -1,    -1,    -1,  1111,    -1,    -1,    -1,    -1,
-    1116,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1124,    -1,
-      65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,
-      75,    -1,   266,    78,    79,    80,    81,    82,    83,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,  1155,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,  1167,    -1,   108,  1170,   110,  1172,   112,   113,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
-    1186,  1187,    -1,    -1,    -1,    -1,    -1,    -1,   322,    -1,
-      -1,    -1,    -1,    -1,    -1,  1298,   330,   331,    -1,   333,
-     334,    -1,  1208,    -1,    -1,    -1,    -1,    -1,    -1,   343,
-      -1,    -1,    -1,   347,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   977,    -1,    -1,    -1,  1235,
-     144,    -1,   366,    -1,    -1,   369,    -1,    -1,    -1,    -1,
-     154,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   166,   167,    -1,    -1,  1008,    -1,    -1,    -1,
-      -1,    -1,   396,    -1,    -1,    -1,   400,    -1,  1020,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,   431,    -1,    -1,
-      -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,    -1,  1061,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     454,    -1,    -1,   237,    -1,    -1,  1332,    -1,  1334,    -1,
-      -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,    74,
-      -1,  1347,    -1,  1349,    -1,    -1,    -1,    -1,   262,    -1,
-      -1,   485,    -1,    -1,   488,    -1,    -1,    -1,    -1,    -1,
-      -1,  1367,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,   110,    -1,  1383,  1384,    -1,
-      -1,  1133,    -1,   118,    -1,    -1,    -1,    -1,    -1,  1395,
-      -1,    -1,  1398,    -1,   528,    -1,    -1,   531,   532,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,  1420,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,  1429,    -1,  1177,  1432,    -1,  1434,  1435,
-    1436,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1191,
-    1192,    -1,    -1,   577,   578,    -1,    -1,    -1,    -1,    -1,
-      -1,  1554,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   596,   597,   378,   599,    -1,    -1,    -1,    -1,
-    1476,    -1,  1478,    -1,   608,  1481,   610,   611,    -1,    -1,
-      -1,    -1,    -1,   617,    -1,    -1,    -1,    -1,    -1,    -1,
-    1496,    -1,    -1,   627,   628,    -1,    -1,    -1,    -1,   633,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   642,   643,
-     644,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   661,    -1,    -1,
-      -1,    -1,   666,   667,    -1,    -1,   670,   671,    -1,    -1,
-      -1,    -1,    -1,   677,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   695,   696,   697,    -1,   699,   480,    -1,    -1,   703,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      29,    30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,
-      -1,   735,   736,    -1,    -1,   519,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   532,    -1,
-      -1,    -1,    -1,    -1,    -1,   539,    -1,    66,   542,    -1,
-      -1,    -1,    -1,    -1,    73,    74,    -1,   771,   772,   553,
-     554,    -1,   776,   777,    -1,    -1,    -1,    -1,    -1,  1401,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   575,    -1,    -1,    -1,    -1,  1418,    -1,    -1,    -1,
-      -1,   585,    -1,    -1,    -1,    -1,    -1,    -1,   592,   118,
-      -1,    -1,    -1,   597,   818,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   827,    -1,    -1,    -1,    -1,    -1,   833,
-     834,    -1,    -1,    -1,   838,    -1,   840,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   850,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   647,    -1,    -1,    -1,    -1,    -1,  1491,
-    1492,    -1,   656,    -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,    -1,    -1,    29,    30,    31,    32,    -1,
-      -1,    35,   696,    -1,    38,    39,    -1,    -1,    -1,   923,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   931,    36,    37,
-      -1,    39,    -1,   937,    -1,    -1,    -1,    -1,    -1,    63,
-      -1,   945,    66,    -1,    68,    -1,    70,    71,    -1,    73,
-      74,    75,    -1,    -1,   958,   959,    -1,    65,    82,    83,
-      -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
-      -1,   985,    -1,    -1,   108,    93,   110,   991,   772,    -1,
-     774,    -1,    -1,    -1,   118,    -1,   780,    -1,    -1,    -1,
-     108,    -1,   110,   787,    -1,   113,  1010,  1011,    -1,   117,
-     118,   119,   120,   121,   122,    -1,  1020,    -1,    -1,    -1,
-      -1,    -1,  1026,  1027,    -1,  1029,  1030,  1031,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,  1041,  1042,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   831,   832,    -1,
-     834,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   849,    -1,    -1,    -1,    -1,
+      25,    26,    27,    -1,    -1,    30,    31,    32,    -1,    -1,
+      -1,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1102,  1103,
-    1104,    -1,    -1,    -1,    -1,   889,    -1,    -1,    -1,   893,
-      -1,  1115,    -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,
-      -1,    -1,    29,    30,    31,    32,    -1,    -1,    35,    36,
-      37,    38,    39,    40,    -1,    42,  1160,    -1,    45,    46,
-      47,    48,    49,    50,    51,    52,    -1,    -1,    -1,    56,
-      -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    66,
-      -1,    68,    -1,    70,    71,   969,    73,    74,    75,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
-      -1,   985,   986,    -1,    -1,    -1,    93,    -1,   992,    -1,
-      -1,    -1,    36,    37,   998,    39,  1220,  1001,    -1,  1003,
-      -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
-     117,   118,   119,   120,   121,   122,  1240,    -1,    -1,  1023,
-     127,    65,    -1,    -1,   131,    -1,    -1,    71,    -1,    -1,
-    1034,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
-      -1,    -1,  1056,    -1,  1058,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   108,  1289,  1290,    -1,    -1,  1073,
-    1074,    -1,    -1,   117,   118,   119,   120,   121,   122,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    1094,    -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,    -1,    -1,    29,    30,    31,    32,    -1,    -1,
-      35,    36,    37,    38,    39,    -1,    -1,  1141,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      36,    37,    -1,    39,    -1,    -1,  1160,    -1,    -1,    -1,
-      65,    66,    -1,    68,    -1,    70,    71,    -1,    73,    74,
-      75,  1175,  1176,    78,    79,    80,    81,    82,    83,    65,
-      85,    86,    -1,    -1,    -1,    71,    -1,    -1,    93,    75,
-    1414,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
-      86,    -1,    -1,   108,    -1,   110,    -1,    93,    -1,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
-      -1,    -1,   108,    -1,   110,    -1,   131,    -1,    -1,    -1,
-      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,  1256,    -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,
-    1504,    -1,    29,    30,    31,    32,    -1,    -1,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,  1529,  1530,    -1,    -1,    -1,
-      -1,    -1,    -1,  1317,    -1,  1319,    -1,    -1,    65,    66,
-      -1,    68,    -1,    70,    71,    -1,    73,    74,    75,    -1,
-    1554,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
-      -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,
-     117,   118,   119,   120,   121,   122,    -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,  1405,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
-      36,    37,    38,    39,    -1,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    65,
-      66,    -1,    68,    38,    70,    71,    -1,    73,    74,    75,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
-      86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
-      -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    73,    74,
-      -1,    -1,   108,  1487,   110,    -1,    -1,    82,    83,   115,
-      -1,   117,   118,   119,   120,   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,
-      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
-      37,    38,    39,    -1,    -1,  1539,    -1,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    -1,    -1,    -1,    65,    66,
-      -1,    68,    -1,    70,    71,    38,    73,    74,    75,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
-      -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
-      -1,    -1,    -1,    66,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   108,    -1,   110,    77,    -1,    -1,    -1,   115,    -1,
-     117,   118,   119,   120,   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,    -1,
-      -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,
-      38,    39,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    -1,    -1,    65,    66,    -1,
-      68,    38,    70,    71,    -1,    73,    74,    75,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
-      -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    66,
-      -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,
-     108,    -1,   110,    -1,    -1,    -1,    -1,   115,    -1,   117,
-     118,   119,   120,   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,    -1,    -1,
-      29,    30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,
-      39,    -1,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-      -1,    29,    30,    31,    -1,    -1,    65,    66,    -1,    68,
-      38,    70,    71,    -1,    73,    74,    75,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    -1,    85,    86,    -1,    -1,
-      -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    66,    -1,
-      -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,   108,
-      -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,
-     119,   120,   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,    -1,    -1,    29,
-      30,    31,    -1,    -1,    -1,    -1,    36,    37,    38,    39,
-      -1,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    65,    66,    -1,    68,    38,
-      70,    71,    -1,    73,    74,    75,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,
-      -1,    -1,    -1,    93,    -1,    -1,    -1,    66,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,
-     110,    -1,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,
-     120,   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,    -1,    -1,    29,    30,
-      31,    -1,    -1,    -1,    -1,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    65,    66,    -1,    68,    -1,    70,
-      71,    -1,    73,    74,    75,    -1,    -1,    78,    79,    80,
-      81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
-      -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,
-      -1,    -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,
-     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,    -1,    -1,    29,    30,    31,
-      -1,    -1,    -1,    -1,    36,    37,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    65,    66,    -1,    68,    -1,    70,    71,
-      -1,    73,    74,    75,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
-      -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,    -1,
-      -1,    -1,    -1,    -1,    -1,   117,   118,   119,   120,   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,    -1,    -1,    29,    30,    31,
-      32,    -1,    -1,    35,    -1,    -1,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    63,    -1,    -1,    66,    -1,    68,    -1,    70,    71,
-      -1,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,
-      82,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,    -1,
-      -1,    -1,   114,    -1,    -1,    -1,   118,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,
-      -1,    -1,    38,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    32,    33,    34,    -1,    -1,
-      66,    38,    68,    -1,    70,    71,    -1,    73,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
-      -1,    -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,
-      -1,    -1,   108,    -1,   110,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,     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,    -1,    29,
-      30,    31,    32,    -1,    -1,    35,    -1,    -1,    38,    -1,
-      -1,    -1,    -1,    -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,    68,    -1,
-      70,    -1,    -1,    73,    74,    -1,    -1,    77,    -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,    -1,    -1,    29,    30,    31,    32,    -1,
-     110,    35,    -1,    -1,    38,    -1,    -1,    -1,   118,    -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,    68,    -1,    70,    -1,    -1,    73,
-      74,    -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,    -1,    -1,    29,    30,
-      31,    -1,    -1,    -1,    -1,    -1,   110,    38,    -1,    -1,
-      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,
-      -1,    -1,    73,    74,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
-      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,   110,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    66,    -1,    68,    -1,
-      70,    71,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    83,    -1,    -1,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    29,    30,    31,   108,    -1,
-     110,    -1,    -1,    -1,    38,    -1,    -1,    -1,   118,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    66,    -1,    29,    30,    31,    71,    -1,    73,
-      74,    75,    -1,    38,    -1,    -1,    -1,    -1,    82,    83,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    66,    -1,    68,   108,    70,   110,    -1,    73,    74,
-      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
-      30,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,
-      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    -1,    66,    -1,    68,    -1,
-      70,    38,    -1,    73,    74,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    66,
-      -1,    -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,
-     110,    -1,    -1,    -1,    -1,    82,    83,    -1,   118,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,   110,    29,    30,    31,    -1,    -1,    -1,
-      -1,   118,    -1,    38,    -1,    -1,    -1,    -1,    -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,    68,    -1,    70,    -1,    -1,    73,    74,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
-      -1,    -1,    -1,    -1,    38,   110,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,    73,
-      74,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    -1,    38,   110,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,    -1,
-      73,    74,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
-      -1,    -1,    -1,    -1,    -1,    -1,    38,   110,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    66,    -1,    68,    -1,    70,    -1,
-      -1,    73,    74,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    -1,    29,    30,    31,    -1,    -1,    -1,    -1,    36,
-      37,    38,    39,    -1,    -1,    -1,    -1,    -1,   110,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    66,
-      -1,    -1,    -1,    -1,    71,    -1,    73,    74,    75,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
-      -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
-     117,   118,   119,   120,   121,   122,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,
-      -1,    -1,    36,    37,    38,    39,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    -1,    29,    30,    31,    -1,    -1,
-      -1,    65,    66,    -1,    38,    -1,    -1,    71,    -1,    73,
-      74,    75,    -1,    -1,    78,    79,    80,    81,    82,    83,
-      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,
-      -1,    -1,    66,    -1,    -1,    -1,    -1,    71,    -1,    73,
-      74,    75,    -1,    77,   108,    -1,   110,   111,    82,    83,
-      -1,    -1,    -1,   117,   118,   119,   120,   121,   122,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,   110,    -1,    29,    30,
-      31,    -1,    -1,    -1,   118,    36,    37,    38,    39,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    -1,    -1,    29,    30,
-      31,    -1,    -1,    -1,    65,    66,    -1,    38,    -1,    -1,
-      71,    -1,    73,    74,    75,    -1,    -1,    78,    79,    80,
-      81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
-      -1,    -1,    93,    -1,    -1,    66,    -1,    -1,    -1,    -1,
-      71,    -1,    73,    74,    -1,    -1,    -1,   108,   109,   110,
-      -1,    82,    83,    -1,    -1,    -1,   117,   118,   119,   120,
-     121,   122,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,   110,
-      -1,    29,    30,    31,    -1,    -1,    -1,   118,    36,    37,
-      38,    39,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-      -1,    29,    30,    31,    -1,    -1,    -1,    65,    66,    -1,
-      38,    39,    -1,    71,    -1,    73,    74,    75,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
-      -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    66,    -1,
-      -1,    -1,    -1,    -1,    -1,    73,    74,    -1,    -1,    -1,
-     108,    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,   117,
-     118,   119,   120,   121,   122,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,   110,    -1,    29,    30,    31,    -1,    -1,    -1,
-     118,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      65,    66,    29,    30,    31,    -1,    71,    -1,    73,    74,
-      75,    38,    -1,    78,    79,    80,    81,    82,    83,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
-      -1,    -1,    -1,   108,    -1,   110,    73,    74,    -1,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
-      -1,   108,    -1,   110,    36,    37,    38,    39,    -1,    -1,
-      -1,   118,    -1,    -1,    -1,    -1,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    65,    66,    29,    30,    31,    -1,    71,
-      -1,    73,    74,    75,    38,    -1,    78,    79,    80,    81,
-      82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
-      -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    66,    -1,    -1,    -1,   108,    -1,   110,    73,
-      74,    -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,
-     122,    10,    11,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
-      29,    30,    31,    -1,   108,    -1,   110,    36,    37,    38,
-      39,    -1,    -1,    -1,   118,    -1,    -1,    -1,    -1,    10,
-      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    65,    66,    29,    30,
-      31,    -1,    71,    -1,    73,    74,    75,    38,    39,    78,
-      79,    80,    81,    82,    83,    -1,    85,    86,    -1,    -1,
-      -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    66,    -1,    -1,    -1,   108,
-      -1,   110,    73,    74,    -1,    -1,    -1,    -1,   117,   118,
-     119,   120,   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,    -1,   110,
-      29,    30,    31,   114,    -1,    -1,    -1,   118,    -1,    38,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
-      30,    31,    -1,    -1,    -1,    -1,    -1,    66,    38,    68,
-      -1,    70,    -1,    -1,    73,    74,    -1,    -1,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    -1,    66,    29,    30,    31,
-      -1,    71,    -1,    73,    74,    75,    38,    -1,    -1,    -1,
-      -1,    -1,    82,    83,   113,    -1,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    66,    29,    30,    31,   108,    71,
-     110,    73,    74,    75,    38,    -1,    -1,    -1,   118,    -1,
-      82,    83,    -1,    -1,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    -1,    66,    29,    30,    31,   108,    -1,   110,    73,
-      74,    -1,    38,    -1,    -1,    -1,   118,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      66,    -1,    -1,    -1,    -1,    38,   110,    73,    74,    -1,
-      -1,    -1,    -1,    -1,   118,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    66,    29,    30,    31,    -1,    -1,    -1,
-      73,    74,    -1,    38,   110,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   118,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    66,    29,    30,    31,    -1,    -1,   110,    73,    74,
-      -1,    38,    -1,    -1,    -1,   118,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    -1,    -1,    29,    30,    31,    -1,    66,
-      -1,    -1,    -1,    -1,    38,   110,    73,    74,    -1,    -1,
-      -1,    -1,    -1,   118,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    -1,    66,    29,    30,    31,    -1,    -1,    -1,    73,
-      74,    -1,    38,   110,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   118,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
-      66,    29,    30,    31,    -1,    -1,   110,    73,    74,    -1,
-      38,    -1,    -1,    -1,   118,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,    -1,    66,    -1,
-      -1,    -1,    -1,    38,   110,    73,    74,    -1,    -1,    -1,
-      -1,    -1,   118,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      -1,    66,    29,    30,    31,    -1,    -1,    -1,    73,    74,
-      -1,    38,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     118,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
-      -1,    -1,    -1,    -1,    -1,   110,    73,    74,    -1,    -1,
-      -1,    -1,    -1,   118,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    -1,    -1,    29,
-      30,    31,    -1,   110,    -1,    -1,    -1,    -1,    38,    -1,
-      -1,   118,    -1,    -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,    68,    -1,
-      70,    -1,    -1,    73,    74,    36,    37,    -1,    39,    40,
-      -1,    42,    -1,    -1,    45,    46,    47,    48,    49,    50,
-      51,    52,    -1,    -1,    55,    56,    -1,    -1,    -1,    60,
-      61,    -1,    63,    -1,    65,    -1,    -1,    -1,    -1,   109,
-      71,    -1,    -1,    -1,    75,    -1,    -1,    78,    79,    80,
-      81,    82,    83,    -1,    85,    86,    -1,    -1,    -1,    -1,
-      -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,   110,
-      -1,    -1,   113,    -1,    -1,    -1,   117,   118,   119,   120,
-     121,   122,    -1,    -1,    -1,    -1,   127,    -1,    36,    37,
-     131,    39,    40,    -1,    42,    -1,    -1,    45,    46,    47,
-      48,    49,    50,    51,    52,    -1,    -1,    -1,    56,    -1,
-      -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,    -1,
-      -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,    -1,
-      78,    79,    80,    81,    82,    83,    -1,    85,    86,    -1,
-      -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,   117,
-     118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,   127,
-      -1,    36,    37,   131,    39,    40,    -1,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    -1,    -1,
-      55,    56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,
-      65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
-      75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   108,    -1,   110,    -1,    -1,   113,    -1,
-      -1,    -1,   117,   118,   119,   120,   121,   122,    -1,    -1,
-      36,    37,   127,    39,    40,    -1,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    -1,    -1,    -1,
-      56,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,
-      -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,
-      -1,    -1,    78,    79,    80,    81,    82,    83,    -1,    85,
-      86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,
-      -1,   117,   118,   119,   120,   121,   122,    -1,    -1,    36,
-      37,   127,    39,    40,    -1,    42,    -1,    -1,    45,    46,
-      47,    48,    49,    50,    51,    52,    -1,    -1,    -1,    56,
-      -1,    -1,    -1,    60,    61,    -1,    63,    -1,    65,    -1,
-      -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    75,    -1,
-      -1,    78,    79,    80,    81,    82,    83,    -1,    85,    86,
-      -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   108,    -1,   110,    -1,    -1,   113,    -1,    -1,    -1,
-     117,   118,   119,   120,   121,   122,    -1,    -1,    -1,    -1,
-     127,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    -1,    38,    -1,    36,    37,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    36,    37,    -1,    39,
-      -1,    -1,    -1,    66,    -1,    68,    65,    70,    -1,    -1,
-      73,    74,    71,    -1,    -1,    -1,    75,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    65,    85,    86,    -1,    -1,
-      -1,    71,    95,    -1,    93,    75,    -1,    -1,    78,    79,
-      80,    81,    82,    83,    -1,    85,    86,    -1,    -1,   108,
-      -1,   110,    -1,    93,    36,    37,    -1,    39,   117,   118,
-     119,   120,   121,   122,    -1,    -1,    -1,    -1,   108,    -1,
-     110,    -1,    -1,    36,    37,    -1,    39,   117,   118,   119,
-     120,   121,   122,    65,    -1,    -1,    -1,    -1,    -1,    71,
-      -1,    -1,    -1,    75,    -1,    -1,    78,    79,    80,    81,
-      82,    83,    65,    85,    86,    -1,    -1,    -1,    71,    -1,
-      -1,    93,    75,    -1,    -1,    78,    79,    80,    81,    82,
-      83,    -1,    85,    86,    -1,    -1,   108,    -1,   110,    -1,
-      93,    36,    37,    -1,    39,   117,   118,   119,   120,   121,
-     122,    -1,    -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   117,   118,   119,   120,   121,   122,
-      65,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
-      75,    -1,    -1,    78,    79,    80,    81,    82,    83,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    93,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   117,   118,   119,   120,   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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    38,    -1,    -1,    -1,    -1,    -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,    68,    -1,    70,    71,    -1,    73,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    -1,    82,    83,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    -1,    -1,    29,    30,    31,    -1,    -1,    -1,
-      -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,    -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,    68,    -1,    70,    -1,    -1,    73,    74,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    -1,    -1,    29,    30,    31,    -1,
-      -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,    -1,
-      -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,    68,    -1,    70,    -1,    -1,
-      73,    74,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    -1,    -1,    29,    30,    31,
-      -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,
-      -1,    -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,    68,    -1,    70,    -1,
-      -1,    73,    74
+      -1,    -1,    67,    -1,    69,    -1,    71,    -1,    -1,    74,
+      75
 };
 
@@ -4010,160 +4063,160 @@
        0,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    29,    30,    31,    32,    35,
-      38,    39,    63,    66,    68,    70,    71,    73,    74,    75,
-      82,    83,   108,   110,   118,   136,   139,   196,   210,   211,
+      22,    23,    24,    25,    26,    27,    30,    31,    32,    33,
+      36,    39,    40,    64,    67,    69,    71,    72,    74,    75,
+      76,    83,    84,   109,   111,   119,   137,   140,   197,   211,
      212,   213,   214,   215,   216,   217,   218,   219,   220,   221,
-     222,   223,   224,   225,   226,   227,   229,   230,   231,   232,
-     233,   234,   235,   236,   238,   239,   240,   241,   242,   243,
-     244,   252,   253,   279,   280,   281,   289,   292,   298,   299,
-     301,   303,   304,   310,   315,   319,   320,   321,   322,   323,
-     324,   325,   326,   346,   363,   364,   365,   366,    71,   118,
-     138,   139,   213,   215,   223,   225,   235,   239,   241,   280,
-      81,   108,   308,   309,   310,   308,   308,    71,    73,    74,
-      75,   137,   138,   269,   270,   290,   291,    73,    74,   270,
-     108,   301,    11,   197,   108,   118,   315,   320,   321,   322,
-     324,   325,   326,   111,   133,   110,   216,   223,   225,   319,
-     323,   362,   363,   366,   367,   134,   106,   130,   273,   113,
-     134,   171,    73,    74,   136,   268,   134,   134,   134,   115,
-     134,    73,    74,   108,   118,   305,   314,   315,   316,   317,
-     318,   319,   323,   327,   328,   329,   330,   331,   337,     3,
-      27,    77,   237,     3,     5,    73,   110,   118,   215,   226,
-     230,   233,   242,   281,   319,   323,   366,   213,   215,   225,
-     235,   239,   241,   280,   319,   323,    32,   231,   231,   226,
-     233,   134,   231,   226,   231,   226,    74,   108,   113,   270,
-     281,   113,   270,   231,   226,   115,   134,   134,     0,   133,
-     108,   171,   308,   308,   133,   110,   223,   225,   364,   268,
-     268,   225,   130,   108,   118,   305,   315,   319,   110,   118,
-     366,   302,   228,   310,   108,   286,   108,   108,    50,   108,
-      36,    37,    39,    65,    71,    75,    78,    79,    80,    81,
-      85,    86,    93,   108,   110,   117,   118,   119,   120,   121,
-     122,   135,   139,   140,   141,   142,   147,   148,   149,   150,
+     222,   223,   224,   225,   226,   227,   228,   230,   231,   232,
+     233,   234,   235,   236,   237,   239,   240,   241,   242,   243,
+     244,   245,   253,   254,   280,   281,   282,   290,   293,   299,
+     300,   302,   304,   305,   311,   316,   320,   321,   322,   323,
+     324,   325,   326,   327,   347,   364,   365,   366,   367,    72,
+     119,   139,   140,   214,   216,   224,   226,   236,   240,   242,
+     281,    82,   109,   309,   310,   311,   309,   309,    72,    74,
+      75,    76,   138,   139,   270,   271,   291,   292,    74,    75,
+     271,   109,   302,    11,   198,   109,   119,   316,   321,   322,
+     323,   325,   326,   327,   112,   134,   111,   217,   224,   226,
+     320,   324,   363,   364,   367,   368,   135,   107,   131,   274,
+     114,   135,   172,    74,    75,   137,   269,   135,   135,   135,
+     116,   135,    74,    75,   109,   119,   306,   315,   316,   317,
+     318,   319,   320,   324,   328,   329,   330,   331,   332,   338,
+       3,    28,    78,   238,     3,     5,    74,   111,   119,   216,
+     227,   231,   234,   243,   282,   320,   324,   367,   214,   216,
+     226,   236,   240,   242,   281,   320,   324,    33,   232,   232,
+     227,   234,   135,   232,   227,   232,   227,    75,   109,   114,
+     271,   282,   114,   271,   232,   227,   116,   135,   135,     0,
+     134,   109,   172,   309,   309,   134,   111,   224,   226,   365,
+     269,   269,   226,   131,   109,   119,   306,   316,   320,   111,
+     119,   367,   303,   229,   311,   109,   287,   109,   109,    51,
+     109,    37,    38,    40,    66,    72,    76,    79,    80,    81,
+      82,    86,    87,    94,   109,   111,   118,   119,   120,   121,
+     122,   123,   136,   140,   141,   142,   143,   148,   149,   150,
      151,   152,   153,   154,   155,   156,   157,   158,   159,   160,
-     162,   164,   223,   272,   288,   362,   367,   225,   109,   109,
-     109,   109,   109,   109,   109,    73,    74,   110,   223,   268,
-     346,   364,   110,   118,   162,   215,   216,   222,   225,   229,
-     230,   235,   238,   239,   241,   258,   259,   263,   264,   265,
-     266,   280,   346,   358,   359,   360,   361,   366,   367,   111,
-     108,   319,   323,   366,   108,   115,   131,   110,   113,   118,
-     162,   274,   274,   114,   133,   115,   131,   108,   115,   131,
-     115,   131,   115,   131,   308,   131,   315,   316,   317,   318,
-     328,   329,   330,   331,   225,   314,   327,    63,   307,   110,
-     308,   345,   346,   308,   308,   171,   133,   108,   308,   345,
-     308,   308,   225,   305,   108,   108,   224,   225,   223,   225,
-     111,   133,   223,   362,   367,   171,   133,   268,   273,   215,
-     230,   319,   323,   171,   133,   290,   225,   235,   131,   225,
-     225,   288,    39,   110,   223,   245,   246,   247,   248,   362,
-     366,   113,   254,   270,   113,   225,   290,   131,   131,   301,
-     133,   138,   267,     3,   134,   205,   206,   220,   222,   225,
-     133,   307,   108,   307,   162,   315,   225,   108,   133,   268,
-     113,    32,    33,    34,   223,   282,   283,   285,   133,   128,
-     130,   287,   133,   226,   232,   233,   268,   311,   312,   313,
-     108,   140,   108,   147,   108,   147,   149,   108,   147,   108,
-     108,   147,   147,   138,   110,   162,   167,   171,   223,   271,
-     362,   111,   133,   149,   149,    81,    84,    85,    86,   108,
-     110,   112,   113,    96,    97,    98,    99,   100,   101,   102,
-     103,   104,   105,   130,   166,   149,   118,   123,   124,   120,
-     121,    87,    88,    89,    90,   125,   126,    91,    92,   119,
-     127,   128,    93,    94,   129,   130,   369,   108,   118,   341,
-     342,   343,   344,   345,   109,   115,   108,   345,   346,   108,
-     345,   346,   133,   108,   223,   364,   111,   133,   110,   118,
-     134,   223,   225,   357,   358,   366,   367,   134,   108,   110,
-     118,   315,   332,   333,   334,   335,   336,   337,   338,   339,
-     340,   346,   347,   348,   349,   350,   351,   352,   118,   366,
-     225,   134,   134,   118,   223,   225,   359,   268,   223,   346,
-     359,   268,   108,   133,   133,   133,   111,   133,    71,    79,
-     110,   112,   139,   270,   274,   275,   276,   277,   278,   133,
-     133,   133,   133,   133,   133,   305,   109,   109,   109,   109,
-     109,   109,   109,   314,   327,   108,   273,   111,   205,   133,
-     305,   167,   272,   167,   272,   305,   110,   205,   307,   171,
-     133,   205,   109,   247,   248,   111,   133,   108,   116,   118,
-     249,   251,   314,   315,   327,   345,   353,   354,   355,   356,
-     114,   246,   115,   131,   115,   131,   270,   245,   115,   368,
-     130,   255,   254,   225,   260,   261,   262,   265,   266,   109,
-     115,   171,   133,   118,   162,   133,   222,   225,   259,   358,
-     366,   299,   300,   108,   118,   332,   109,   115,   369,   270,
-     282,   108,   113,   270,   272,   282,   109,   115,   108,   140,
-     109,   116,   271,   271,   271,   110,   138,   144,   162,   272,
-     271,   111,   133,   109,   115,   109,   108,   118,   353,   109,
-     115,   162,   110,   138,   110,   143,   144,   133,   110,   138,
-     143,   162,   162,   149,   149,   149,   150,   150,   151,   151,
-     152,   152,   152,   152,   153,   153,   154,   155,   156,   157,
-     158,   116,   167,   162,   133,   342,   343,   344,   225,   341,
-     308,   308,   162,   272,   133,   267,   118,   133,   223,   346,
-     359,   225,   229,   111,   133,   111,   366,   111,   108,   133,
-     315,   333,   334,   335,   338,   348,   349,   350,   111,   133,
-     225,   332,   336,   347,   108,   308,   351,   369,   308,   308,
-     369,   108,   308,   351,   308,   308,   308,   308,   346,   223,
-     357,   367,   268,   111,   115,   111,   115,   369,   223,   359,
-     369,   256,   257,   258,   259,   256,   256,   268,   162,   133,
-     110,   270,   116,   115,   368,   274,    79,   110,   116,   278,
-      28,   207,   208,   268,   256,   138,   305,   138,   307,   108,
-     345,   346,   108,   345,   346,   140,   346,   171,   260,   109,
-     109,   109,   109,   111,   171,   205,   171,   113,   131,   131,
-     110,   315,   354,   355,   356,   160,   161,   225,   353,   250,
-     251,   250,   308,   308,   270,   308,   114,   270,   114,   161,
-     368,   134,   134,   138,   220,   134,   134,   256,   108,   118,
-     366,   134,   114,   225,   283,   284,   134,   133,   133,   108,
-     134,   109,   312,   167,   168,   116,   131,   110,   140,   198,
-     199,   200,   109,   115,   109,   133,   116,   109,   109,   109,
-     162,   225,   113,   149,   164,   162,   163,   165,   115,   134,
-     133,   133,   109,   115,   162,   133,   114,   160,   116,   260,
-     109,   109,   109,   341,   260,   109,   256,   223,   359,   110,
-     118,   162,   162,   225,   338,   260,   109,   109,   109,   109,
-     109,   109,   109,     7,   225,   332,   336,   347,   133,   133,
-     369,   133,   133,   109,   134,   134,   134,   134,   273,   134,
-     160,   161,   162,   306,   133,   274,   276,   114,   133,   209,
-     270,    39,    40,    42,    45,    46,    47,    48,    49,    50,
-      51,    52,    56,    60,    61,   110,   127,   138,   168,   169,
-     170,   171,   172,   173,   175,   176,   188,   190,   191,   196,
-     210,   304,    28,   134,   130,   273,   133,   133,   109,   134,
-     171,   245,   111,   109,   109,   109,   353,   249,   255,   114,
-     109,   115,   111,   111,   134,   225,   115,   369,   286,   109,
-     282,   213,   215,   223,   294,   295,   296,   297,   288,   109,
-     109,   116,   161,   108,   109,   116,   115,   138,   162,   162,
-     275,   115,   134,   165,   111,   138,   145,   146,   162,   144,
-     134,   145,   160,   164,   134,   108,   345,   346,   134,   134,
-     133,   134,   134,   134,   162,   109,   134,   108,   345,   346,
-     108,   351,   108,   351,   346,   224,     7,   118,   134,   162,
-     260,   260,   259,   263,   263,   264,   115,   115,   109,   109,
-     111,    95,   122,   134,   134,   145,   274,   162,   115,   131,
-     210,   214,   225,   229,   108,   108,   169,   108,   108,   131,
-     138,   131,   138,   118,   138,   168,   108,   171,   163,   163,
-     111,   142,   116,   131,   134,   133,   134,   209,   109,   162,
-     260,   260,   308,   109,   114,   108,   345,   346,   133,   109,
-     133,   134,   305,   114,   133,   134,   134,   109,   113,   198,
-     111,   161,   131,   198,   200,   109,   115,   134,   368,   163,
-     111,   134,    84,   112,   115,   134,   134,   111,   134,   109,
-     133,   109,   109,   111,   111,   111,   134,   109,   133,   133,
-     133,   162,   162,   134,   111,   134,   134,   134,   134,   133,
-     133,   161,   161,   111,   111,   134,   134,   270,   225,   167,
-     167,    46,   167,   133,   131,   131,   167,   131,   131,   167,
-      57,    58,    59,   192,   193,   194,   131,    62,   131,   113,
-     308,   173,   114,   131,   134,   134,   133,    95,   265,   266,
-     109,   295,   115,   131,   115,   131,   114,   293,   116,   140,
-     109,   109,   116,   165,   111,   114,   111,   110,   146,   110,
-     146,   146,   111,   111,   111,   260,   111,   260,   260,   260,
-     134,   134,   111,   111,   109,   109,   111,   115,    95,   259,
-      95,   134,   111,   111,   109,   109,   108,   109,   168,   189,
-     210,   131,   109,   108,   108,   171,   194,    57,    58,   162,
-     143,   169,   109,   109,   260,   113,   133,   133,   294,   140,
-     201,   108,   131,   201,   134,   116,   133,   133,   134,   134,
-     134,   134,   111,   111,   133,   134,   111,   169,    43,    44,
-     113,   179,   180,   181,   167,   169,   134,   109,   168,   113,
-     181,    95,   133,    95,   133,   108,   108,   131,   114,   134,
-     133,   268,   305,   114,   115,   116,   161,   109,   111,   162,
-     145,   145,   109,   109,   109,   109,   263,    41,   161,   177,
-     178,   306,   116,   133,   169,   179,   109,   131,   169,   131,
-     133,   109,   133,   109,   133,    95,   133,    95,   133,   131,
-     109,   294,   140,   138,   202,   109,   131,   116,   134,   134,
-     169,    95,   115,   116,   134,   203,   204,   210,   131,   168,
-     168,   203,   171,   195,   223,   362,   171,   195,   109,   133,
-     109,   133,   114,   109,   115,   162,   111,   111,   161,   177,
-     180,   182,   183,   133,   131,   180,   184,   185,   134,   108,
-     118,   305,   353,   138,   134,   171,   195,   171,   195,   108,
-     131,   138,   169,   174,   114,   180,   210,   168,    55,   174,
-     187,   114,   180,   109,   225,   109,   134,   134,   288,   169,
-     174,   131,   186,   187,   174,   187,   171,   171,   109,   109,
-     109,   186,   134,   134,   171,   171,   134,   134
+     161,   163,   165,   224,   273,   289,   363,   368,   226,   110,
+     110,   110,   110,   110,   110,   110,    74,    75,   111,   224,
+     269,   347,   365,   111,   119,   163,   216,   217,   223,   226,
+     230,   231,   236,   239,   240,   242,   259,   260,   264,   265,
+     266,   267,   281,   347,   359,   360,   361,   362,   367,   368,
+     112,   109,   320,   324,   367,   109,   116,   132,   111,   114,
+     119,   163,   275,   275,   115,   134,   116,   132,   109,   116,
+     132,   116,   132,   116,   132,   309,   132,   316,   317,   318,
+     319,   329,   330,   331,   332,   226,   315,   328,    64,   308,
+     111,   309,   346,   347,   309,   309,   172,   134,   109,   309,
+     346,   309,   309,   226,   306,   109,   109,   225,   226,   224,
+     226,   112,   134,   224,   363,   368,   172,   134,   269,   274,
+     216,   231,   320,   324,   172,   134,   291,   226,   236,   132,
+     226,   226,   289,    40,   111,   224,   246,   247,   248,   249,
+     363,   367,   114,   255,   271,   114,   226,   291,   132,   132,
+     302,   134,   139,   268,     3,   135,   206,   207,   221,   223,
+     226,   134,   308,   109,   308,   163,   316,   226,   109,   134,
+     269,   114,    33,    34,    35,   224,   283,   284,   286,   134,
+     129,   131,   288,   134,   227,   233,   234,   269,   312,   313,
+     314,   109,   141,   109,   148,   109,   148,   150,   109,   148,
+     109,   109,   148,   148,   139,   111,   163,   168,   172,   224,
+     272,   363,   112,   134,   150,   150,    82,    85,    86,    87,
+     109,   111,   113,   114,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   131,   167,   150,   119,   124,   125,
+     121,   122,    88,    89,    90,    91,   126,   127,    92,    93,
+     120,   128,   129,    94,    95,   130,   131,   370,   109,   119,
+     342,   343,   344,   345,   346,   110,   116,   109,   346,   347,
+     109,   346,   347,   134,   109,   224,   365,   112,   134,   111,
+     119,   135,   224,   226,   358,   359,   367,   368,   135,   109,
+     111,   119,   316,   333,   334,   335,   336,   337,   338,   339,
+     340,   341,   347,   348,   349,   350,   351,   352,   353,   119,
+     367,   226,   135,   135,   119,   224,   226,   360,   269,   224,
+     347,   360,   269,   109,   134,   134,   134,   112,   134,    72,
+      80,   111,   113,   140,   271,   275,   276,   277,   278,   279,
+     134,   134,   134,   134,   134,   134,   306,   110,   110,   110,
+     110,   110,   110,   110,   315,   328,   109,   274,   112,   206,
+     134,   306,   168,   273,   168,   273,   306,   111,   206,   308,
+     172,   134,   206,   110,   248,   249,   112,   134,   109,   117,
+     119,   250,   252,   315,   316,   328,   346,   354,   355,   356,
+     357,   115,   247,   116,   132,   116,   132,   271,   246,   116,
+     369,   131,   256,   255,   226,   261,   262,   263,   266,   267,
+     110,   116,   172,   134,   119,   163,   134,   223,   226,   260,
+     359,   367,   300,   301,   109,   119,   333,   110,   116,   370,
+     271,   283,   109,   114,   271,   273,   283,   110,   116,   109,
+     141,   110,   117,   272,   272,   272,   111,   139,   145,   163,
+     273,   272,   112,   134,   110,   116,   110,   109,   119,   354,
+     110,   116,   163,   111,   139,   111,   144,   145,   134,   111,
+     139,   144,   163,   163,   150,   150,   150,   151,   151,   152,
+     152,   153,   153,   153,   153,   154,   154,   155,   156,   157,
+     158,   159,   117,   168,   163,   134,   343,   344,   345,   226,
+     342,   309,   309,   163,   273,   134,   268,   119,   134,   224,
+     347,   360,   226,   230,   112,   134,   112,   367,   112,   109,
+     134,   316,   334,   335,   336,   339,   349,   350,   351,   112,
+     134,   226,   333,   337,   348,   109,   309,   352,   370,   309,
+     309,   370,   109,   309,   352,   309,   309,   309,   309,   347,
+     224,   358,   368,   269,   112,   116,   112,   116,   370,   224,
+     360,   370,   257,   258,   259,   260,   257,   257,   269,   163,
+     134,   111,   271,   117,   116,   369,   275,    80,   111,   117,
+     279,    29,   208,   209,   269,   257,   139,   306,   139,   308,
+     109,   346,   347,   109,   346,   347,   141,   347,   172,   261,
+     110,   110,   110,   110,   112,   172,   206,   172,   114,   132,
+     132,   111,   316,   355,   356,   357,   161,   162,   226,   354,
+     251,   252,   251,   309,   309,   271,   309,   115,   271,   115,
+     162,   369,   135,   135,   139,   221,   135,   135,   257,   109,
+     119,   367,   135,   115,   226,   284,   285,   135,   134,   134,
+     109,   135,   110,   313,   168,   169,   117,   132,   111,   141,
+     199,   200,   201,   110,   116,   110,   134,   117,   110,   110,
+     110,   163,   226,   114,   150,   165,   163,   164,   166,   116,
+     135,   134,   134,   110,   116,   163,   134,   115,   161,   117,
+     261,   110,   110,   110,   342,   261,   110,   257,   224,   360,
+     111,   119,   163,   163,   226,   339,   261,   110,   110,   110,
+     110,   110,   110,   110,     7,   226,   333,   337,   348,   134,
+     134,   370,   134,   134,   110,   135,   135,   135,   135,   274,
+     135,   161,   162,   163,   307,   134,   275,   277,   115,   134,
+     210,   271,    40,    41,    43,    46,    47,    48,    49,    50,
+      51,    52,    53,    57,    61,    62,   111,   128,   139,   169,
+     170,   171,   172,   173,   174,   176,   177,   189,   191,   192,
+     197,   211,   305,    29,   135,   131,   274,   134,   134,   110,
+     135,   172,   246,   112,   110,   110,   110,   354,   250,   256,
+     115,   110,   116,   112,   112,   135,   226,   116,   370,   287,
+     110,   283,   214,   216,   224,   295,   296,   297,   298,   289,
+     110,   110,   117,   162,   109,   110,   117,   116,   139,   163,
+     163,   276,   116,   135,   166,   112,   139,   146,   147,   163,
+     145,   135,   146,   161,   165,   135,   109,   346,   347,   135,
+     135,   134,   135,   135,   135,   163,   110,   135,   109,   346,
+     347,   109,   352,   109,   352,   347,   225,     7,   119,   135,
+     163,   261,   261,   260,   264,   264,   265,   116,   116,   110,
+     110,   112,    96,   123,   135,   135,   146,   275,   163,   116,
+     132,   211,   215,   226,   230,   109,   109,   170,   109,   109,
+     132,   139,   132,   139,   119,   139,   169,   109,   172,   164,
+     164,   112,   143,   117,   132,   135,   134,   135,   210,   110,
+     163,   261,   261,   309,   110,   115,   109,   346,   347,   134,
+     110,   134,   135,   306,   115,   134,   135,   135,   110,   114,
+     199,   112,   162,   132,   199,   201,   110,   116,   135,   369,
+     164,   112,   135,    85,   113,   116,   135,   135,   112,   135,
+     110,   134,   110,   110,   112,   112,   112,   135,   110,   134,
+     134,   134,   163,   163,   135,   112,   135,   135,   135,   135,
+     134,   134,   162,   162,   112,   112,   135,   135,   271,   226,
+     168,   168,    47,   168,   134,   132,   132,   168,   132,   132,
+     168,    58,    59,    60,   193,   194,   195,   132,    63,   132,
+     114,   309,   174,   115,   132,   135,   135,   134,    96,   266,
+     267,   110,   296,   116,   132,   116,   132,   115,   294,   117,
+     141,   110,   110,   117,   166,   112,   115,   112,   111,   147,
+     111,   147,   147,   112,   112,   112,   261,   112,   261,   261,
+     261,   135,   135,   112,   112,   110,   110,   112,   116,    96,
+     260,    96,   135,   112,   112,   110,   110,   109,   110,   169,
+     190,   211,   132,   110,   109,   109,   172,   195,    58,    59,
+     163,   144,   170,   110,   110,   261,   114,   134,   134,   295,
+     141,   202,   109,   132,   202,   135,   117,   134,   134,   135,
+     135,   135,   135,   112,   112,   134,   135,   112,   170,    44,
+      45,   114,   180,   181,   182,   168,   170,   135,   110,   169,
+     114,   182,    96,   134,    96,   134,   109,   109,   132,   115,
+     135,   134,   269,   306,   115,   116,   117,   162,   110,   112,
+     163,   146,   146,   110,   110,   110,   110,   264,    42,   162,
+     178,   179,   307,   117,   134,   170,   180,   110,   132,   170,
+     132,   134,   110,   134,   110,   134,    96,   134,    96,   134,
+     132,   110,   295,   141,   139,   203,   110,   132,   117,   135,
+     135,   170,    96,   116,   117,   135,   204,   205,   211,   132,
+     169,   169,   204,   172,   196,   224,   363,   172,   196,   110,
+     134,   110,   134,   115,   110,   116,   163,   112,   112,   162,
+     178,   181,   183,   184,   134,   132,   181,   185,   186,   135,
+     109,   119,   306,   354,   139,   135,   172,   196,   172,   196,
+     109,   132,   139,   170,   175,   115,   181,   211,   169,    56,
+     175,   188,   115,   181,   110,   226,   110,   135,   135,   289,
+     170,   175,   132,   187,   188,   175,   188,   172,   172,   110,
+     110,   110,   187,   135,   135,   172,   172,   135,   135
 };
 
@@ -5002,5 +5055,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 290 "parser.yy"
+#line 291 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -5011,5 +5064,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 296 "parser.yy"
+#line 297 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -5020,5 +5073,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 305 "parser.yy"
+#line 306 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::Integer, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5027,5 +5080,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 306 "parser.yy"
+#line 307 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::Float, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5034,5 +5087,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 307 "parser.yy"
+#line 308 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::Character, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5041,5 +5094,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 332 "parser.yy"
+#line 333 "parser.yy"
     { (yyval.constant) = new ConstantNode( ConstantNode::String, (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5048,5 +5101,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 333 "parser.yy"
+#line 334 "parser.yy"
     { (yyval.constant) = (yyvsp[(1) - (2)].constant)->appendstr( (yyvsp[(2) - (2)].tok) ); }
     break;
@@ -5055,5 +5108,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 340 "parser.yy"
+#line 341 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5062,5 +5115,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 342 "parser.yy"
+#line 343 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5069,5 +5122,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 344 "parser.yy"
+#line 345 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (3)].en); }
     break;
@@ -5076,5 +5129,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 346 "parser.yy"
+#line 347 "parser.yy"
     { (yyval.en) = new ValofExprNode( (yyvsp[(2) - (3)].sn) ); }
     break;
@@ -5083,5 +5136,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 356 "parser.yy"
+#line 357 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Index ), (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en) ); }
     break;
@@ -5090,5 +5143,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 358 "parser.yy"
+#line 359 "parser.yy"
     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (4)].en), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5097,5 +5150,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 362 "parser.yy"
+#line 363 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     break;
@@ -5104,5 +5157,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 365 "parser.yy"
+#line 366 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), (yyvsp[(1) - (3)].en), new VarRefNode( (yyvsp[(3) - (3)].tok) )); }
     break;
@@ -5111,5 +5164,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 368 "parser.yy"
+#line 369 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::IncrPost ), (yyvsp[(1) - (2)].en) ); }
     break;
@@ -5118,5 +5171,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 370 "parser.yy"
+#line 371 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::DecrPost ), (yyvsp[(1) - (2)].en) ); }
     break;
@@ -5125,5 +5178,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 372 "parser.yy"
+#line 373 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5132,5 +5185,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 374 "parser.yy"
+#line 375 "parser.yy"
     {
 			Token fn; fn.str = new std::string( "?{}" ); // location undefined
@@ -5142,5 +5195,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 383 "parser.yy"
+#line 384 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
@@ -5149,5 +5202,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 388 "parser.yy"
+#line 389 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5156,5 +5209,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 391 "parser.yy"
+#line 392 "parser.yy"
     { (yyval.en) = (yyvsp[(3) - (3)].en)->set_argName( (yyvsp[(1) - (3)].tok) ); }
     break;
@@ -5163,5 +5216,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 396 "parser.yy"
+#line 397 "parser.yy"
     { (yyval.en) = (yyvsp[(7) - (7)].en)->set_argName( (yyvsp[(3) - (7)].en) ); }
     break;
@@ -5170,5 +5223,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 398 "parser.yy"
+#line 399 "parser.yy"
     { (yyval.en) = (yyvsp[(9) - (9)].en)->set_argName( new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (9)].en)->set_link( flattenCommas( (yyvsp[(5) - (9)].en) )))); }
     break;
@@ -5177,5 +5230,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 403 "parser.yy"
+#line 404 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5184,5 +5237,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 408 "parser.yy"
+#line 409 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -5191,5 +5244,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 412 "parser.yy"
+#line 413 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5198,5 +5251,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 414 "parser.yy"
+#line 415 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::FieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     break;
@@ -5205,5 +5258,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 416 "parser.yy"
+#line 417 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (3)].tok) ), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5212,5 +5265,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 418 "parser.yy"
+#line 419 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PFieldSel ), new VarRefNode( (yyvsp[(1) - (7)].tok) ), (yyvsp[(5) - (7)].en) ); }
     break;
@@ -5219,5 +5272,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 426 "parser.yy"
+#line 427 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -5226,5 +5279,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 428 "parser.yy"
+#line 429 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -5233,5 +5286,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 430 "parser.yy"
+#line 431 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Incr ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5240,5 +5293,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 432 "parser.yy"
+#line 433 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Decr ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5247,5 +5300,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 434 "parser.yy"
+#line 435 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -5254,5 +5307,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 436 "parser.yy"
+#line 437 "parser.yy"
     { (yyval.en) = new CompositeExprNode( (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5261,5 +5314,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 438 "parser.yy"
+#line 439 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neg ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5268,5 +5321,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 440 "parser.yy"
+#line 441 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::PointTo ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5275,5 +5328,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 446 "parser.yy"
+#line 447 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5282,5 +5335,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 448 "parser.yy"
+#line 449 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     break;
@@ -5289,5 +5342,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 450 "parser.yy"
+#line 451 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( (yyvsp[(3) - (6)].decl) ), new VarRefNode( (yyvsp[(5) - (6)].tok) )); }
     break;
@@ -5296,5 +5349,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 452 "parser.yy"
+#line 453 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (1)].tok) )); }
     break;
@@ -5303,5 +5356,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 454 "parser.yy"
+#line 455 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), new TypeValueNode( (yyvsp[(3) - (4)].decl) )); }
     break;
@@ -5310,5 +5363,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 456 "parser.yy"
+#line 457 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( (yyvsp[(1) - (4)].tok) ), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5317,5 +5370,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 458 "parser.yy"
+#line 459 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5324,5 +5377,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 460 "parser.yy"
+#line 461 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::AlignOf ), new TypeValueNode( (yyvsp[(3) - (4)].decl) ) ); }
     break;
@@ -5331,5 +5384,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 462 "parser.yy"
+#line 463 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LabelAddress ), new VarRefNode( (yyvsp[(2) - (2)].tok), true ) ); }
     break;
@@ -5338,5 +5391,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 466 "parser.yy"
+#line 467 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::AddressOf ); }
     break;
@@ -5345,5 +5398,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 467 "parser.yy"
+#line 468 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::UnPlus ); }
     break;
@@ -5352,5 +5405,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 468 "parser.yy"
+#line 469 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::UnMinus ); }
     break;
@@ -5359,5 +5412,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 469 "parser.yy"
+#line 470 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::BitNeg ); }
     break;
@@ -5366,5 +5419,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 475 "parser.yy"
+#line 476 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5373,5 +5426,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 477 "parser.yy"
+#line 478 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cast ), new TypeValueNode( (yyvsp[(2) - (4)].decl) ), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5380,5 +5433,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 483 "parser.yy"
+#line 484 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mul ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5387,5 +5440,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 485 "parser.yy"
+#line 486 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Div ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5394,5 +5447,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 487 "parser.yy"
+#line 488 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Mod ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5401,5 +5454,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 493 "parser.yy"
+#line 494 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Plus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5408,5 +5461,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 495 "parser.yy"
+#line 496 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Minus ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5415,5 +5468,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 501 "parser.yy"
+#line 502 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5422,5 +5475,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 503 "parser.yy"
+#line 504 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::RShift ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5429,5 +5482,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 509 "parser.yy"
+#line 510 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5436,5 +5489,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 511 "parser.yy"
+#line 512 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5443,5 +5496,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 513 "parser.yy"
+#line 514 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::LEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5450,5 +5503,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 515 "parser.yy"
+#line 516 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::GEThan ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5457,5 +5510,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 521 "parser.yy"
+#line 522 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Eq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5464,5 +5517,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 523 "parser.yy"
+#line 524 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Neq ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5471,5 +5524,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 529 "parser.yy"
+#line 530 "parser.yy"
     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::BitAnd ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5478,5 +5531,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 535 "parser.yy"
+#line 536 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Xor ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5485,5 +5538,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 541 "parser.yy"
+#line 542 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::BitOr ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5492,5 +5545,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 547 "parser.yy"
+#line 548 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::And ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5499,5 +5552,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 553 "parser.yy"
+#line 554 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Or ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5506,5 +5559,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 559 "parser.yy"
+#line 560 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     break;
@@ -5513,5 +5566,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 561 "parser.yy"
+#line 562 "parser.yy"
     { (yyval.en)=new CompositeExprNode( new OperatorNode( OperatorNode::NCond ), (yyvsp[(1) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5520,5 +5573,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 563 "parser.yy"
+#line 564 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Cond ), (ExpressionNode *)mkList( (*(yyvsp[(1) - (5)].en), *(yyvsp[(3) - (5)].en), *(yyvsp[(5) - (5)].en) ) ) ); }
     break;
@@ -5527,5 +5580,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 574 "parser.yy"
+#line 575 "parser.yy"
     { (yyval.en) =new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5534,5 +5587,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 576 "parser.yy"
+#line 577 "parser.yy"
     { (yyval.en) =new CompositeExprNode( (yyvsp[(2) - (3)].en), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5541,5 +5594,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 578 "parser.yy"
+#line 579 "parser.yy"
     { (yyval.en) = ( (yyvsp[(2) - (2)].en) == 0 ) ? (yyvsp[(1) - (2)].en) : new CompositeExprNode( new OperatorNode( OperatorNode::Assign ), (yyvsp[(1) - (2)].en), (yyvsp[(2) - (2)].en) ); }
     break;
@@ -5548,5 +5601,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 583 "parser.yy"
+#line 584 "parser.yy"
     { (yyval.en) = new NullExprNode; }
     break;
@@ -5555,5 +5608,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 591 "parser.yy"
+#line 592 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ) ); }
     break;
@@ -5562,5 +5615,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 593 "parser.yy"
+#line 594 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (yyvsp[(3) - (5)].en) ); }
     break;
@@ -5569,5 +5622,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 595 "parser.yy"
+#line 596 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(new NullExprNode)->set_link( (yyvsp[(4) - (6)].en) ) ); }
     break;
@@ -5576,5 +5629,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 597 "parser.yy"
+#line 598 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(yyvsp[(3) - (7)].en)->set_link( flattenCommas( (yyvsp[(5) - (7)].en) ) ) ); }
     break;
@@ -5583,5 +5636,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 603 "parser.yy"
+#line 604 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5590,5 +5643,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 607 "parser.yy"
+#line 608 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::MulAssn ); }
     break;
@@ -5597,5 +5650,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 608 "parser.yy"
+#line 609 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::DivAssn ); }
     break;
@@ -5604,5 +5657,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 609 "parser.yy"
+#line 610 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::ModAssn ); }
     break;
@@ -5611,5 +5664,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 610 "parser.yy"
+#line 611 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::PlusAssn ); }
     break;
@@ -5618,5 +5671,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 611 "parser.yy"
+#line 612 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::MinusAssn ); }
     break;
@@ -5625,5 +5678,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 612 "parser.yy"
+#line 613 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::LSAssn ); }
     break;
@@ -5632,5 +5685,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 613 "parser.yy"
+#line 614 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::RSAssn ); }
     break;
@@ -5639,5 +5692,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 614 "parser.yy"
+#line 615 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::AndAssn ); }
     break;
@@ -5646,5 +5699,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 615 "parser.yy"
+#line 616 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::ERAssn ); }
     break;
@@ -5653,5 +5706,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 616 "parser.yy"
+#line 617 "parser.yy"
     { (yyval.en) = new OperatorNode( OperatorNode::OrAssn ); }
     break;
@@ -5660,5 +5713,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 622 "parser.yy"
+#line 623 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Comma ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5667,5 +5720,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 627 "parser.yy"
+#line 628 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -5674,5 +5727,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 636 "parser.yy"
+#line 637 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (1)].sn); }
     break;
@@ -5681,5 +5734,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 643 "parser.yy"
+#line 644 "parser.yy"
     {
 			Token fn; fn.str = new std::string( "^?{}" ); // location undefined
@@ -5692,5 +5745,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 652 "parser.yy"
+#line 653 "parser.yy"
     {
 			(yyval.sn) = (yyvsp[(4) - (4)].sn)->add_label( (yyvsp[(1) - (4)].tok) );
@@ -5701,5 +5754,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 659 "parser.yy"
+#line 660 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (StatementNode *)0 ); }
     break;
@@ -5708,5 +5761,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 666 "parser.yy"
+#line 667 "parser.yy"
     { (yyval.sn) = new CompoundStmtNode( (yyvsp[(5) - (7)].sn) ); }
     break;
@@ -5715,5 +5768,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 672 "parser.yy"
+#line 673 "parser.yy"
     { if ( (yyvsp[(1) - (3)].sn) != 0 ) { (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(3) - (3)].sn) ); (yyval.sn) = (yyvsp[(1) - (3)].sn); } }
     break;
@@ -5722,5 +5775,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 677 "parser.yy"
+#line 678 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5729,5 +5782,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 679 "parser.yy"
+#line 680 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -5736,5 +5789,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 681 "parser.yy"
+#line 682 "parser.yy"
     { (yyval.sn) = new StatementNode( (yyvsp[(1) - (1)].decl) ); }
     break;
@@ -5743,5 +5796,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 688 "parser.yy"
+#line 689 "parser.yy"
     { if ( (yyvsp[(1) - (2)].sn) != 0 ) { (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) ); (yyval.sn) = (yyvsp[(1) - (2)].sn); } }
     break;
@@ -5750,5 +5803,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 693 "parser.yy"
+#line 694 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Exp, (yyvsp[(1) - (2)].en), 0 ); }
     break;
@@ -5757,5 +5810,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 699 "parser.yy"
+#line 700 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5764,5 +5817,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 701 "parser.yy"
+#line 702 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::If, (yyvsp[(3) - (7)].en), (StatementNode *)mkList((*(yyvsp[(5) - (7)].sn), *(yyvsp[(7) - (7)].sn) )) ); }
     break;
@@ -5771,5 +5824,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 703 "parser.yy"
+#line 704 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5778,5 +5831,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 705 "parser.yy"
+#line 706 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Switch, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); /* xxx */ }
     break;
@@ -5785,5 +5838,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 710 "parser.yy"
+#line 711 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5792,5 +5845,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 712 "parser.yy"
+#line 713 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Choose, (yyvsp[(3) - (9)].en), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -5799,5 +5852,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 719 "parser.yy"
+#line 720 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
@@ -5806,5 +5859,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 721 "parser.yy"
+#line 722 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
@@ -5813,5 +5866,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 728 "parser.yy"
+#line 729 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::TupleC ), (ExpressionNode *)(tupleContents( (yyvsp[(1) - (3)].en) ))->set_link( (yyvsp[(3) - (3)].en) ) ); }
     break;
@@ -5820,5 +5873,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 732 "parser.yy"
+#line 733 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Case, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -5827,5 +5880,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 733 "parser.yy"
+#line 734 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Default ); }
     break;
@@ -5834,5 +5887,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 739 "parser.yy"
+#line 740 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (2)].sn)->set_link( (yyvsp[(2) - (2)].sn) )); }
     break;
@@ -5841,5 +5894,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 743 "parser.yy"
+#line 744 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5848,5 +5901,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 748 "parser.yy"
+#line 749 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5855,5 +5908,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 754 "parser.yy"
+#line 755 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5862,5 +5915,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 756 "parser.yy"
+#line 757 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5869,5 +5922,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 761 "parser.yy"
+#line 762 "parser.yy"
     { (yyval.sn) = 0; }
     break;
@@ -5876,5 +5929,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 767 "parser.yy"
+#line 768 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (2)].sn)->append_last_case( (yyvsp[(2) - (2)].sn) ); }
     break;
@@ -5883,5 +5936,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 769 "parser.yy"
+#line 770 "parser.yy"
     { (yyval.sn) = (yyvsp[(1) - (3)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5890,5 +5943,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 771 "parser.yy"
+#line 772 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (3)].sn)->set_link( (yyvsp[(2) - (3)].sn)->append_last_case( (yyvsp[(3) - (3)].sn) ))); }
     break;
@@ -5897,5 +5950,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 773 "parser.yy"
+#line 774 "parser.yy"
     { (yyval.sn) = (StatementNode *)( (yyvsp[(1) - (4)].sn)->set_link( (yyvsp[(2) - (4)].sn)->append_last_case((StatementNode *)mkList((*(yyvsp[(3) - (4)].sn),*(yyvsp[(4) - (4)].sn) ))))); }
     break;
@@ -5904,16 +5957,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 778 "parser.yy"
+#line 779 "parser.yy"
     { (yyval.sn) = 0; }
     break;
 
   case 180:
-
-/* Line 1806 of yacc.c  */
-#line 783 "parser.yy"
-    { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
-    break;
-
-  case 181:
 
 /* Line 1806 of yacc.c  */
@@ -5922,8 +5968,15 @@
     break;
 
+  case 181:
+
+/* Line 1806 of yacc.c  */
+#line 785 "parser.yy"
+    { (yyval.sn) = new StatementNode( StatementNode::Fallthru ); }
+    break;
+
   case 182:
 
 /* Line 1806 of yacc.c  */
-#line 789 "parser.yy"
+#line 790 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::While, (yyvsp[(3) - (5)].en), (yyvsp[(5) - (5)].sn) ); }
     break;
@@ -5932,5 +5985,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 791 "parser.yy"
+#line 792 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Do, (yyvsp[(5) - (7)].en), (yyvsp[(2) - (7)].sn) ); }
     break;
@@ -5939,5 +5992,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 793 "parser.yy"
+#line 794 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::For, (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].sn) ); }
     break;
@@ -5946,5 +5999,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 798 "parser.yy"
+#line 799 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (6)].en), (yyvsp[(4) - (6)].en), (yyvsp[(6) - (6)].en) ); }
     break;
@@ -5953,5 +6006,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 800 "parser.yy"
+#line 801 "parser.yy"
     { (yyval.en) = new ForCtlExprNode( (yyvsp[(1) - (4)].decl), (yyvsp[(2) - (4)].en), (yyvsp[(4) - (4)].en) ); }
     break;
@@ -5960,5 +6013,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 805 "parser.yy"
+#line 806 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -5967,5 +6020,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 809 "parser.yy"
+#line 810 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Goto, (yyvsp[(3) - (4)].en) ); }
     break;
@@ -5974,5 +6027,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 812 "parser.yy"
+#line 813 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue ); }
     break;
@@ -5981,5 +6034,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 816 "parser.yy"
+#line 817 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Continue, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -5988,5 +6041,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 819 "parser.yy"
+#line 820 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break ); }
     break;
@@ -5995,5 +6048,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 823 "parser.yy"
+#line 824 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Break, (yyvsp[(2) - (3)].tok) ); }
     break;
@@ -6002,5 +6055,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 825 "parser.yy"
+#line 826 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Return, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6009,5 +6062,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 827 "parser.yy"
+#line 828 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6016,5 +6069,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 831 "parser.yy"
+#line 832 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (3)].en), 0 ); }
     break;
@@ -6023,5 +6076,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 833 "parser.yy"
+#line 834 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Throw, (yyvsp[(2) - (5)].en), 0 ); }
     break;
@@ -6030,5 +6083,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 840 "parser.yy"
+#line 841 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6037,5 +6090,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 842 "parser.yy"
+#line 843 "parser.yy"
     { (yyval.sn) = new StatementNode( StatementNode::Try, 0,(StatementNode *)(mkList((*(yyvsp[(2) - (3)].sn),*(yyvsp[(3) - (3)].pn) )))); }
     break;
@@ -6044,5 +6097,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 844 "parser.yy"
+#line 845 "parser.yy"
     {
 			(yyvsp[(3) - (4)].pn)->set_link( (yyvsp[(4) - (4)].pn) );
@@ -6054,5 +6107,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 855 "parser.yy"
+#line 856 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6061,5 +6114,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 857 "parser.yy"
+#line 858 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6068,5 +6121,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 859 "parser.yy"
+#line 860 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( 0, (yyvsp[(5) - (5)].sn), true ); }
     break;
@@ -6075,5 +6128,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 861 "parser.yy"
+#line 862 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (6)].pn)->set_link( StatementNode::newCatchStmt( 0, (yyvsp[(6) - (6)].sn), true ) ); }
     break;
@@ -6082,5 +6135,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 866 "parser.yy"
+#line 867 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6089,5 +6142,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 868 "parser.yy"
+#line 869 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6096,5 +6149,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 870 "parser.yy"
+#line 871 "parser.yy"
     { (yyval.pn) = StatementNode::newCatchStmt( (yyvsp[(5) - (9)].decl), (yyvsp[(8) - (9)].sn) ); }
     break;
@@ -6103,5 +6156,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 872 "parser.yy"
+#line 873 "parser.yy"
     { (yyval.pn) = (yyvsp[(1) - (10)].pn)->set_link( StatementNode::newCatchStmt( (yyvsp[(6) - (10)].decl), (yyvsp[(9) - (10)].sn) ) ); }
     break;
@@ -6110,5 +6163,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 877 "parser.yy"
+#line 878 "parser.yy"
     {
 			(yyval.pn) = new StatementNode( StatementNode::Finally, 0, (yyvsp[(2) - (2)].sn) );
@@ -6120,5 +6173,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 891 "parser.yy"
+#line 892 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6130,5 +6183,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 896 "parser.yy"
+#line 897 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
@@ -6137,5 +6190,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 898 "parser.yy"
+#line 899 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6147,5 +6200,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 907 "parser.yy"
+#line 908 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (6)].flag), (yyvsp[(4) - (6)].constant), 0 ); }
     break;
@@ -6154,5 +6207,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 909 "parser.yy"
+#line 910 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (8)].flag), (yyvsp[(4) - (8)].constant), (yyvsp[(6) - (8)].en) ); }
     break;
@@ -6161,5 +6214,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 911 "parser.yy"
+#line 912 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (10)].flag), (yyvsp[(4) - (10)].constant), (yyvsp[(6) - (10)].en), (yyvsp[(8) - (10)].en) ); }
     break;
@@ -6168,5 +6221,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 913 "parser.yy"
+#line 914 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (12)].flag), (yyvsp[(4) - (12)].constant), (yyvsp[(6) - (12)].en), (yyvsp[(8) - (12)].en), (yyvsp[(10) - (12)].constant) ); }
     break;
@@ -6175,5 +6228,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 915 "parser.yy"
+#line 916 "parser.yy"
     { (yyval.sn) = new AsmStmtNode( StatementNode::Asm, (yyvsp[(2) - (14)].flag), (yyvsp[(5) - (14)].constant), 0, (yyvsp[(8) - (14)].en), (yyvsp[(10) - (14)].constant), (yyvsp[(12) - (14)].label) ); }
     break;
@@ -6182,5 +6235,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 920 "parser.yy"
+#line 921 "parser.yy"
     { (yyval.flag) = false; }
     break;
@@ -6189,5 +6242,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 922 "parser.yy"
+#line 923 "parser.yy"
     { (yyval.flag) = true; }
     break;
@@ -6196,5 +6249,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 927 "parser.yy"
+#line 928 "parser.yy"
     { (yyval.en) = 0; }
     break;
@@ -6203,5 +6256,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 934 "parser.yy"
+#line 935 "parser.yy"
     { (yyval.en) = (ExpressionNode *)(yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) ); }
     break;
@@ -6210,5 +6263,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 939 "parser.yy"
+#line 940 "parser.yy"
     { (yyval.en) = new AsmExprNode( 0, (yyvsp[(1) - (4)].constant), (yyvsp[(3) - (4)].en) ); }
     break;
@@ -6217,5 +6270,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 941 "parser.yy"
+#line 942 "parser.yy"
     { (yyval.en) = new AsmExprNode( (yyvsp[(2) - (7)].en), (yyvsp[(4) - (7)].constant), (yyvsp[(6) - (7)].en) ); }
     break;
@@ -6224,5 +6277,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 946 "parser.yy"
+#line 947 "parser.yy"
     { (yyval.constant) = 0; }
     break;
@@ -6231,5 +6284,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 948 "parser.yy"
+#line 949 "parser.yy"
     { (yyval.constant) = (yyvsp[(1) - (1)].constant); }
     break;
@@ -6238,5 +6291,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 950 "parser.yy"
+#line 951 "parser.yy"
     { (yyval.constant) = (ConstantNode *)(yyvsp[(1) - (3)].constant)->set_link( (yyvsp[(3) - (3)].constant) ); }
     break;
@@ -6245,5 +6298,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 955 "parser.yy"
+#line 956 "parser.yy"
     { (yyval.label) = new LabelNode(); (yyval.label)->append_label( (yyvsp[(1) - (1)].tok) ); }
     break;
@@ -6252,5 +6305,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 957 "parser.yy"
+#line 958 "parser.yy"
     { (yyval.label) = (yyvsp[(1) - (3)].label); (yyvsp[(1) - (3)].label)->append_label( (yyvsp[(3) - (3)].tok) ); }
     break;
@@ -6259,5 +6312,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 964 "parser.yy"
+#line 965 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6266,5 +6319,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 971 "parser.yy"
+#line 972 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6273,5 +6326,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 976 "parser.yy"
+#line 977 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6280,16 +6333,9 @@
 
 /* Line 1806 of yacc.c  */
-#line 983 "parser.yy"
+#line 984 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
   case 245:
-
-/* Line 1806 of yacc.c  */
-#line 997 "parser.yy"
-    {}
-    break;
-
-  case 246:
 
 /* Line 1806 of yacc.c  */
@@ -6298,8 +6344,15 @@
     break;
 
+  case 246:
+
+/* Line 1806 of yacc.c  */
+#line 999 "parser.yy"
+    {}
+    break;
+
   case 254:
 
 /* Line 1806 of yacc.c  */
-#line 1027 "parser.yy"
+#line 1028 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6311,5 +6364,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1034 "parser.yy"
+#line 1035 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6321,5 +6374,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1039 "parser.yy"
+#line 1040 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (6)].tok), TypedefTable::ID );
@@ -6331,5 +6384,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1049 "parser.yy"
+#line 1050 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6341,5 +6394,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1054 "parser.yy"
+#line 1055 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(2) - (3)].tok) );
@@ -6351,5 +6404,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1059 "parser.yy"
+#line 1060 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(3) - (4)].tok) );
@@ -6361,5 +6414,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1067 "parser.yy"
+#line 1068 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6371,5 +6424,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1072 "parser.yy"
+#line 1073 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6381,5 +6434,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1077 "parser.yy"
+#line 1078 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6391,5 +6444,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1082 "parser.yy"
+#line 1083 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6401,5 +6454,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1087 "parser.yy"
+#line 1088 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -6411,5 +6464,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1095 "parser.yy"
+#line 1096 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(3) - (8)].tok), DeclarationNode::newTuple( 0 ), (yyvsp[(6) - (8)].decl), 0, true );
@@ -6420,5 +6473,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1118 "parser.yy"
+#line 1119 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6429,5 +6482,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1122 "parser.yy"
+#line 1123 "parser.yy"
     {
 			(yyval.decl) = DeclarationNode::newFunction( (yyvsp[(2) - (7)].tok), (yyvsp[(1) - (7)].decl), (yyvsp[(5) - (7)].decl), 0, true );
@@ -6438,5 +6491,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1129 "parser.yy"
+#line 1130 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
@@ -6445,5 +6498,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1133 "parser.yy"
+#line 1134 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (9)].decl)->appendList( (yyvsp[(7) - (9)].decl) ) ); }
     break;
@@ -6452,5 +6505,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1138 "parser.yy"
+#line 1139 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6462,5 +6515,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1143 "parser.yy"
+#line 1144 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6472,5 +6525,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1148 "parser.yy"
+#line 1149 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (5)].tok), TypedefTable::TD );
@@ -6482,5 +6535,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1159 "parser.yy"
+#line 1160 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6492,5 +6545,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1164 "parser.yy"
+#line 1165 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6502,5 +6555,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1169 "parser.yy"
+#line 1170 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6512,5 +6565,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1174 "parser.yy"
+#line 1175 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6522,5 +6575,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1179 "parser.yy"
+#line 1180 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::TD );
@@ -6532,5 +6585,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1188 "parser.yy"
+#line 1189 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (4)].tok), TypedefTable::TD );
@@ -6542,5 +6595,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1193 "parser.yy"
+#line 1194 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(5) - (7)].tok), TypedefTable::TD );
@@ -6552,5 +6605,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1210 "parser.yy"
+#line 1211 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6562,5 +6615,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1215 "parser.yy"
+#line 1216 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -6572,5 +6625,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1237 "parser.yy"
+#line 1238 "parser.yy"
     { (yyval.decl) = 0; }
     break;
@@ -6579,5 +6632,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1249 "parser.yy"
+#line 1250 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6586,5 +6639,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1260 "parser.yy"
+#line 1261 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Const ); }
     break;
@@ -6593,5 +6646,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1262 "parser.yy"
+#line 1263 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Restrict ); }
     break;
@@ -6600,5 +6653,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1264 "parser.yy"
+#line 1265 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Volatile ); }
     break;
@@ -6607,5 +6660,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1266 "parser.yy"
+#line 1267 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Lvalue ); }
     break;
@@ -6614,5 +6667,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1268 "parser.yy"
+#line 1269 "parser.yy"
     { (yyval.decl) = DeclarationNode::newQualifier( DeclarationNode::Atomic ); }
     break;
@@ -6621,5 +6674,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1270 "parser.yy"
+#line 1271 "parser.yy"
     {
 			typedefTable.enterScope();
@@ -6630,5 +6683,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1274 "parser.yy"
+#line 1275 "parser.yy"
     {
 			typedefTable.leaveScope();
@@ -6640,5 +6693,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1283 "parser.yy"
+#line 1284 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6647,5 +6700,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1285 "parser.yy"
+#line 1286 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
@@ -6654,5 +6707,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1296 "parser.yy"
+#line 1297 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -6661,5 +6714,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1305 "parser.yy"
+#line 1306 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Extern ); }
     break;
@@ -6668,5 +6721,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1307 "parser.yy"
+#line 1308 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Static ); }
     break;
@@ -6675,5 +6728,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1309 "parser.yy"
+#line 1310 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Auto ); }
     break;
@@ -6682,5 +6735,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1311 "parser.yy"
+#line 1312 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Register ); }
     break;
@@ -6689,5 +6742,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1313 "parser.yy"
+#line 1314 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Inline ); }
     break;
@@ -6696,5 +6749,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1315 "parser.yy"
+#line 1316 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Fortran ); }
     break;
@@ -6703,5 +6756,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1317 "parser.yy"
+#line 1318 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Noreturn ); }
     break;
@@ -6710,5 +6763,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1319 "parser.yy"
+#line 1320 "parser.yy"
     { (yyval.decl) = DeclarationNode::newStorageClass( DeclarationNode::Threadlocal ); }
     break;
@@ -6717,5 +6770,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1324 "parser.yy"
+#line 1325 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Char ); }
     break;
@@ -6724,5 +6777,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1326 "parser.yy"
+#line 1327 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Double ); }
     break;
@@ -6731,5 +6784,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1328 "parser.yy"
+#line 1329 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Float ); }
     break;
@@ -6738,5 +6791,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1330 "parser.yy"
+#line 1331 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Int ); }
     break;
@@ -6745,5 +6798,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1332 "parser.yy"
+#line 1333 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Long ); }
     break;
@@ -6752,5 +6805,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1334 "parser.yy"
+#line 1335 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Short ); }
     break;
@@ -6759,5 +6812,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1336 "parser.yy"
+#line 1337 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Signed ); }
     break;
@@ -6766,5 +6819,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1338 "parser.yy"
+#line 1339 "parser.yy"
     { (yyval.decl) = DeclarationNode::newModifier( DeclarationNode::Unsigned ); }
     break;
@@ -6773,5 +6826,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1340 "parser.yy"
+#line 1341 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Void ); }
     break;
@@ -6780,5 +6833,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1342 "parser.yy"
+#line 1343 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Bool ); }
     break;
@@ -6787,5 +6840,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 1344 "parser.yy"
+#line 1345 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Complex ); }
     break;
@@ -6794,240 +6847,240 @@
 
 /* Line 1806 of yacc.c  */
-#line 1346 "parser.yy"
+#line 1347 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
     break;
 
-  case 334:
-
-/* Line 1806 of yacc.c  */
-#line 1353 "parser.yy"
+  case 333:
+
+/* Line 1806 of yacc.c  */
+#line 1349 "parser.yy"
+    { (yyval.decl) = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
+    break;
+
+  case 335:
+
+/* Line 1806 of yacc.c  */
+#line 1356 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 335:
-
-/* Line 1806 of yacc.c  */
-#line 1355 "parser.yy"
+  case 336:
+
+/* Line 1806 of yacc.c  */
+#line 1358 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 336:
-
-/* Line 1806 of yacc.c  */
-#line 1357 "parser.yy"
+  case 337:
+
+/* Line 1806 of yacc.c  */
+#line 1360 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 337:
-
-/* Line 1806 of yacc.c  */
-#line 1359 "parser.yy"
+  case 338:
+
+/* Line 1806 of yacc.c  */
+#line 1362 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addType( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 339:
-
-/* Line 1806 of yacc.c  */
-#line 1365 "parser.yy"
+  case 340:
+
+/* Line 1806 of yacc.c  */
+#line 1368 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 341:
-
-/* Line 1806 of yacc.c  */
-#line 1372 "parser.yy"
+  case 342:
+
+/* Line 1806 of yacc.c  */
+#line 1375 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 342:
-
-/* Line 1806 of yacc.c  */
-#line 1374 "parser.yy"
+  case 343:
+
+/* Line 1806 of yacc.c  */
+#line 1377 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 343:
-
-/* Line 1806 of yacc.c  */
-#line 1376 "parser.yy"
+  case 344:
+
+/* Line 1806 of yacc.c  */
+#line 1379 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addType( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 344:
-
-/* Line 1806 of yacc.c  */
-#line 1381 "parser.yy"
+  case 345:
+
+/* Line 1806 of yacc.c  */
+#line 1384 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (4)].decl); }
     break;
 
-  case 345:
-
-/* Line 1806 of yacc.c  */
-#line 1383 "parser.yy"
+  case 346:
+
+/* Line 1806 of yacc.c  */
+#line 1386 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeof( (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 346:
-
-/* Line 1806 of yacc.c  */
-#line 1385 "parser.yy"
+  case 347:
+
+/* Line 1806 of yacc.c  */
+#line 1388 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 347:
-
-/* Line 1806 of yacc.c  */
-#line 1387 "parser.yy"
+  case 348:
+
+/* Line 1806 of yacc.c  */
+#line 1390 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAttr( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 349:
-
-/* Line 1806 of yacc.c  */
-#line 1393 "parser.yy"
+  case 350:
+
+/* Line 1806 of yacc.c  */
+#line 1396 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 350:
-
-/* Line 1806 of yacc.c  */
-#line 1395 "parser.yy"
+  case 351:
+
+/* Line 1806 of yacc.c  */
+#line 1398 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 351:
-
-/* Line 1806 of yacc.c  */
-#line 1397 "parser.yy"
+  case 352:
+
+/* Line 1806 of yacc.c  */
+#line 1400 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 353:
-
-/* Line 1806 of yacc.c  */
-#line 1403 "parser.yy"
+  case 354:
+
+/* Line 1806 of yacc.c  */
+#line 1406 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 354:
-
-/* Line 1806 of yacc.c  */
-#line 1405 "parser.yy"
+  case 355:
+
+/* Line 1806 of yacc.c  */
+#line 1408 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 356:
-
-/* Line 1806 of yacc.c  */
-#line 1411 "parser.yy"
+  case 357:
+
+/* Line 1806 of yacc.c  */
+#line 1414 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 357:
-
-/* Line 1806 of yacc.c  */
-#line 1413 "parser.yy"
+  case 358:
+
+/* Line 1806 of yacc.c  */
+#line 1416 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 358:
-
-/* Line 1806 of yacc.c  */
-#line 1415 "parser.yy"
+  case 359:
+
+/* Line 1806 of yacc.c  */
+#line 1418 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 359:
-
-/* Line 1806 of yacc.c  */
-#line 1420 "parser.yy"
+  case 360:
+
+/* Line 1806 of yacc.c  */
+#line 1423 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 360:
-
-/* Line 1806 of yacc.c  */
-#line 1422 "parser.yy"
+  case 361:
+
+/* Line 1806 of yacc.c  */
+#line 1425 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypedef( (yyvsp[(2) - (2)].tok) )->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 361:
-
-/* Line 1806 of yacc.c  */
-#line 1424 "parser.yy"
+  case 362:
+
+/* Line 1806 of yacc.c  */
+#line 1427 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 364:
-
-/* Line 1806 of yacc.c  */
-#line 1434 "parser.yy"
+  case 365:
+
+/* Line 1806 of yacc.c  */
+#line 1437 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (4)].aggKey), 0, 0, (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 365:
-
-/* Line 1806 of yacc.c  */
-#line 1436 "parser.yy"
+  case 366:
+
+/* Line 1806 of yacc.c  */
+#line 1439 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (2)].aggKey), (yyvsp[(2) - (2)].tok), 0, 0 ); }
     break;
 
-  case 366:
-
-/* Line 1806 of yacc.c  */
-#line 1438 "parser.yy"
+  case 367:
+
+/* Line 1806 of yacc.c  */
+#line 1441 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (5)].aggKey), (yyvsp[(2) - (5)].tok), 0, (yyvsp[(4) - (5)].decl) ); }
     break;
 
-  case 367:
-
-/* Line 1806 of yacc.c  */
-#line 1440 "parser.yy"
+  case 368:
+
+/* Line 1806 of yacc.c  */
+#line 1443 "parser.yy"
     { (yyval.decl) = DeclarationNode::newAggregate( (yyvsp[(1) - (7)].aggKey), 0, (yyvsp[(3) - (7)].en), (yyvsp[(6) - (7)].decl) ); }
     break;
 
-  case 368:
-
-/* Line 1806 of yacc.c  */
-#line 1442 "parser.yy"
+  case 369:
+
+/* Line 1806 of yacc.c  */
+#line 1445 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 369:
-
-/* Line 1806 of yacc.c  */
-#line 1447 "parser.yy"
+  case 370:
+
+/* Line 1806 of yacc.c  */
+#line 1450 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Struct; }
     break;
 
-  case 370:
-
-/* Line 1806 of yacc.c  */
-#line 1449 "parser.yy"
+  case 371:
+
+/* Line 1806 of yacc.c  */
+#line 1452 "parser.yy"
     { (yyval.aggKey) = DeclarationNode::Union; }
     break;
 
-  case 371:
-
-/* Line 1806 of yacc.c  */
-#line 1454 "parser.yy"
+  case 372:
+
+/* Line 1806 of yacc.c  */
+#line 1457 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (1)].decl); }
     break;
 
-  case 372:
-
-/* Line 1806 of yacc.c  */
-#line 1456 "parser.yy"
+  case 373:
+
+/* Line 1806 of yacc.c  */
+#line 1459 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 374:
-
-/* Line 1806 of yacc.c  */
-#line 1462 "parser.yy"
-    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
-    break;
-
-  case 376:
+  case 375:
 
 /* Line 1806 of yacc.c  */
@@ -7036,58 +7089,58 @@
     break;
 
-  case 378:
-
-/* Line 1806 of yacc.c  */
-#line 1471 "parser.yy"
+  case 377:
+
+/* Line 1806 of yacc.c  */
+#line 1468 "parser.yy"
+    { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
+    break;
+
+  case 379:
+
+/* Line 1806 of yacc.c  */
+#line 1474 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addName( (yyvsp[(2) - (2)].tok) ); }
     break;
 
-  case 379:
-
-/* Line 1806 of yacc.c  */
-#line 1473 "parser.yy"
+  case 380:
+
+/* Line 1806 of yacc.c  */
+#line 1476 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(1) - (3)].decl)->cloneType( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
-  case 380:
-
-/* Line 1806 of yacc.c  */
-#line 1475 "parser.yy"
+  case 381:
+
+/* Line 1806 of yacc.c  */
+#line 1478 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(1) - (2)].decl)->cloneType( 0 ) ); }
     break;
 
-  case 381:
-
-/* Line 1806 of yacc.c  */
-#line 1480 "parser.yy"
+  case 382:
+
+/* Line 1806 of yacc.c  */
+#line 1483 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 382:
-
-/* Line 1806 of yacc.c  */
-#line 1482 "parser.yy"
+  case 383:
+
+/* Line 1806 of yacc.c  */
+#line 1485 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(1) - (4)].decl)->cloneBaseType( (yyvsp[(4) - (4)].decl) ) ); }
     break;
 
-  case 383:
-
-/* Line 1806 of yacc.c  */
-#line 1487 "parser.yy"
+  case 384:
+
+/* Line 1806 of yacc.c  */
+#line 1490 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( 0 ); /* XXX */ }
     break;
 
-  case 384:
-
-/* Line 1806 of yacc.c  */
-#line 1489 "parser.yy"
+  case 385:
+
+/* Line 1806 of yacc.c  */
+#line 1492 "parser.yy"
     { (yyval.decl) = DeclarationNode::newBitfield( (yyvsp[(1) - (1)].en) ); }
-    break;
-
-  case 385:
-
-/* Line 1806 of yacc.c  */
-#line 1492 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
     break;
 
@@ -7099,163 +7152,163 @@
     break;
 
-  case 388:
-
-/* Line 1806 of yacc.c  */
-#line 1501 "parser.yy"
+  case 387:
+
+/* Line 1806 of yacc.c  */
+#line 1498 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addBitfield( (yyvsp[(2) - (2)].en) ); }
+    break;
+
+  case 389:
+
+/* Line 1806 of yacc.c  */
+#line 1504 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 389:
-
-/* Line 1806 of yacc.c  */
-#line 1503 "parser.yy"
+  case 390:
+
+/* Line 1806 of yacc.c  */
+#line 1506 "parser.yy"
     { (yyval.en) = (yyvsp[(1) - (1)].en); }
     break;
 
-  case 390:
-
-/* Line 1806 of yacc.c  */
-#line 1508 "parser.yy"
+  case 391:
+
+/* Line 1806 of yacc.c  */
+#line 1511 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
-  case 392:
-
-/* Line 1806 of yacc.c  */
-#line 1517 "parser.yy"
+  case 393:
+
+/* Line 1806 of yacc.c  */
+#line 1520 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( 0, (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 393:
-
-/* Line 1806 of yacc.c  */
-#line 1519 "parser.yy"
+  case 394:
+
+/* Line 1806 of yacc.c  */
+#line 1522 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (6)].tok), (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 394:
-
-/* Line 1806 of yacc.c  */
-#line 1521 "parser.yy"
+  case 395:
+
+/* Line 1806 of yacc.c  */
+#line 1524 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(2) - (2)].tok), 0 ); }
     break;
 
-  case 395:
-
-/* Line 1806 of yacc.c  */
-#line 1526 "parser.yy"
+  case 396:
+
+/* Line 1806 of yacc.c  */
+#line 1529 "parser.yy"
     { (yyval.decl) = DeclarationNode::newEnumConstant( (yyvsp[(1) - (2)].tok), (yyvsp[(2) - (2)].en) ); }
     break;
 
-  case 396:
-
-/* Line 1806 of yacc.c  */
-#line 1528 "parser.yy"
+  case 397:
+
+/* Line 1806 of yacc.c  */
+#line 1531 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( DeclarationNode::newEnumConstant( (yyvsp[(3) - (4)].tok), (yyvsp[(4) - (4)].en) ) ); }
     break;
 
-  case 397:
-
-/* Line 1806 of yacc.c  */
-#line 1533 "parser.yy"
+  case 398:
+
+/* Line 1806 of yacc.c  */
+#line 1536 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 398:
-
-/* Line 1806 of yacc.c  */
-#line 1535 "parser.yy"
+  case 399:
+
+/* Line 1806 of yacc.c  */
+#line 1538 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
 
-  case 399:
-
-/* Line 1806 of yacc.c  */
-#line 1542 "parser.yy"
+  case 400:
+
+/* Line 1806 of yacc.c  */
+#line 1545 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 403:
-
-/* Line 1806 of yacc.c  */
-#line 1550 "parser.yy"
+  case 404:
+
+/* Line 1806 of yacc.c  */
+#line 1553 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 404:
-
-/* Line 1806 of yacc.c  */
-#line 1552 "parser.yy"
+  case 405:
+
+/* Line 1806 of yacc.c  */
+#line 1555 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 405:
-
-/* Line 1806 of yacc.c  */
-#line 1554 "parser.yy"
+  case 406:
+
+/* Line 1806 of yacc.c  */
+#line 1557 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 407:
-
-/* Line 1806 of yacc.c  */
-#line 1562 "parser.yy"
+  case 408:
+
+/* Line 1806 of yacc.c  */
+#line 1565 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 408:
-
-/* Line 1806 of yacc.c  */
-#line 1564 "parser.yy"
+  case 409:
+
+/* Line 1806 of yacc.c  */
+#line 1567 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 409:
-
-/* Line 1806 of yacc.c  */
-#line 1566 "parser.yy"
+  case 410:
+
+/* Line 1806 of yacc.c  */
+#line 1569 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (9)].decl)->appendList( (yyvsp[(5) - (9)].decl) )->appendList( (yyvsp[(9) - (9)].decl) ); }
     break;
 
-  case 411:
-
-/* Line 1806 of yacc.c  */
-#line 1572 "parser.yy"
+  case 412:
+
+/* Line 1806 of yacc.c  */
+#line 1575 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 412:
-
-/* Line 1806 of yacc.c  */
-#line 1577 "parser.yy"
+  case 413:
+
+/* Line 1806 of yacc.c  */
+#line 1580 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 415:
-
-/* Line 1806 of yacc.c  */
-#line 1584 "parser.yy"
+  case 416:
+
+/* Line 1806 of yacc.c  */
+#line 1587 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->addVarArgs(); }
     break;
 
-  case 418:
-
-/* Line 1806 of yacc.c  */
-#line 1591 "parser.yy"
+  case 419:
+
+/* Line 1806 of yacc.c  */
+#line 1594 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
     break;
 
-  case 419:
-
-/* Line 1806 of yacc.c  */
-#line 1593 "parser.yy"
+  case 420:
+
+/* Line 1806 of yacc.c  */
+#line 1596 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (5)].decl)->appendList( (yyvsp[(5) - (5)].decl) ); }
-    break;
-
-  case 421:
-
-/* Line 1806 of yacc.c  */
-#line 1602 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
     break;
 
@@ -7270,19 +7323,26 @@
 
 /* Line 1806 of yacc.c  */
-#line 1607 "parser.yy"
+#line 1608 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addName( (yyvsp[(2) - (3)].tok) ); }
+    break;
+
+  case 424:
+
+/* Line 1806 of yacc.c  */
+#line 1610 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addName( (yyvsp[(3) - (4)].tok) )->addQualifiers( (yyvsp[(1) - (4)].decl) ); }
     break;
 
-  case 428:
-
-/* Line 1806 of yacc.c  */
-#line 1617 "parser.yy"
+  case 429:
+
+/* Line 1806 of yacc.c  */
+#line 1620 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 430:
-
-/* Line 1806 of yacc.c  */
-#line 1623 "parser.yy"
+  case 431:
+
+/* Line 1806 of yacc.c  */
+#line 1626 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7291,8 +7351,8 @@
     break;
 
-  case 431:
-
-/* Line 1806 of yacc.c  */
-#line 1628 "parser.yy"
+  case 432:
+
+/* Line 1806 of yacc.c  */
+#line 1631 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7301,340 +7361,340 @@
     break;
 
-  case 433:
-
-/* Line 1806 of yacc.c  */
-#line 1637 "parser.yy"
+  case 434:
+
+/* Line 1806 of yacc.c  */
+#line 1640 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 434:
-
-/* Line 1806 of yacc.c  */
-#line 1646 "parser.yy"
+  case 435:
+
+/* Line 1806 of yacc.c  */
+#line 1649 "parser.yy"
     { (yyval.decl) = DeclarationNode::newName( (yyvsp[(1) - (1)].tok) ); }
     break;
 
-  case 435:
-
-/* Line 1806 of yacc.c  */
-#line 1648 "parser.yy"
+  case 436:
+
+/* Line 1806 of yacc.c  */
+#line 1651 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( DeclarationNode::newName( (yyvsp[(3) - (3)].tok) ) ); }
     break;
 
-  case 447:
-
-/* Line 1806 of yacc.c  */
-#line 1673 "parser.yy"
+  case 448:
+
+/* Line 1806 of yacc.c  */
+#line 1676 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 451:
-
-/* Line 1806 of yacc.c  */
-#line 1681 "parser.yy"
+  case 452:
+
+/* Line 1806 of yacc.c  */
+#line 1684 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addType( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 452:
-
-/* Line 1806 of yacc.c  */
-#line 1686 "parser.yy"
+  case 453:
+
+/* Line 1806 of yacc.c  */
+#line 1689 "parser.yy"
     { (yyval.in) = 0; }
     break;
 
-  case 453:
-
-/* Line 1806 of yacc.c  */
-#line 1688 "parser.yy"
+  case 454:
+
+/* Line 1806 of yacc.c  */
+#line 1691 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
 
-  case 454:
-
-/* Line 1806 of yacc.c  */
-#line 1690 "parser.yy"
+  case 455:
+
+/* Line 1806 of yacc.c  */
+#line 1693 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in); }
     break;
 
-  case 455:
-
-/* Line 1806 of yacc.c  */
-#line 1694 "parser.yy"
+  case 456:
+
+/* Line 1806 of yacc.c  */
+#line 1697 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(1) - (1)].en) ); }
     break;
 
-  case 456:
-
-/* Line 1806 of yacc.c  */
-#line 1695 "parser.yy"
+  case 457:
+
+/* Line 1806 of yacc.c  */
+#line 1698 "parser.yy"
     { (yyval.in) = new InitializerNode( (yyvsp[(2) - (4)].in), true ); }
     break;
 
-  case 457:
-
-/* Line 1806 of yacc.c  */
-#line 1700 "parser.yy"
+  case 458:
+
+/* Line 1806 of yacc.c  */
+#line 1703 "parser.yy"
     { (yyval.in) = 0; }
     break;
 
-  case 459:
-
-/* Line 1806 of yacc.c  */
-#line 1702 "parser.yy"
+  case 460:
+
+/* Line 1806 of yacc.c  */
+#line 1705 "parser.yy"
     { (yyval.in) = (yyvsp[(2) - (2)].in)->set_designators( (yyvsp[(1) - (2)].en) ); }
     break;
 
-  case 460:
-
-/* Line 1806 of yacc.c  */
-#line 1703 "parser.yy"
+  case 461:
+
+/* Line 1806 of yacc.c  */
+#line 1706 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (3)].in)->set_link( (yyvsp[(3) - (3)].in) ) ); }
     break;
 
-  case 461:
-
-/* Line 1806 of yacc.c  */
-#line 1705 "parser.yy"
+  case 462:
+
+/* Line 1806 of yacc.c  */
+#line 1708 "parser.yy"
     { (yyval.in) = (InitializerNode *)( (yyvsp[(1) - (4)].in)->set_link( (yyvsp[(4) - (4)].in)->set_designators( (yyvsp[(3) - (4)].en) ) ) ); }
     break;
 
-  case 463:
-
-/* Line 1806 of yacc.c  */
-#line 1721 "parser.yy"
+  case 464:
+
+/* Line 1806 of yacc.c  */
+#line 1724 "parser.yy"
     { (yyval.en) = new VarRefNode( (yyvsp[(1) - (2)].tok) ); }
     break;
 
-  case 465:
-
-/* Line 1806 of yacc.c  */
-#line 1727 "parser.yy"
+  case 466:
+
+/* Line 1806 of yacc.c  */
+#line 1730 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (2)].en)->set_link( (yyvsp[(2) - (2)].en) )); }
     break;
 
-  case 466:
-
-/* Line 1806 of yacc.c  */
-#line 1735 "parser.yy"
+  case 467:
+
+/* Line 1806 of yacc.c  */
+#line 1738 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(1) - (1)].tok) ) ); }
     break;
 
-  case 467:
-
-/* Line 1806 of yacc.c  */
-#line 1737 "parser.yy"
+  case 468:
+
+/* Line 1806 of yacc.c  */
+#line 1740 "parser.yy"
     { (yyval.en) = new DesignatorNode( new VarRefNode( (yyvsp[(2) - (2)].tok) ) ); }
     break;
 
-  case 468:
-
-/* Line 1806 of yacc.c  */
-#line 1740 "parser.yy"
+  case 469:
+
+/* Line 1806 of yacc.c  */
+#line 1743 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
 
-  case 469:
-
-/* Line 1806 of yacc.c  */
-#line 1742 "parser.yy"
+  case 470:
+
+/* Line 1806 of yacc.c  */
+#line 1745 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(3) - (5)].en), true ); }
     break;
 
-  case 470:
-
-/* Line 1806 of yacc.c  */
-#line 1744 "parser.yy"
+  case 471:
+
+/* Line 1806 of yacc.c  */
+#line 1747 "parser.yy"
     { (yyval.en) = new DesignatorNode( new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(3) - (7)].en), (yyvsp[(5) - (7)].en) ), true ); }
     break;
 
-  case 471:
-
-/* Line 1806 of yacc.c  */
-#line 1746 "parser.yy"
+  case 472:
+
+/* Line 1806 of yacc.c  */
+#line 1749 "parser.yy"
     { (yyval.en) = new DesignatorNode( (yyvsp[(4) - (6)].en) ); }
     break;
 
-  case 473:
-
-/* Line 1806 of yacc.c  */
-#line 1770 "parser.yy"
+  case 474:
+
+/* Line 1806 of yacc.c  */
+#line 1773 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 474:
-
-/* Line 1806 of yacc.c  */
-#line 1772 "parser.yy"
+  case 475:
+
+/* Line 1806 of yacc.c  */
+#line 1775 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 475:
-
-/* Line 1806 of yacc.c  */
-#line 1774 "parser.yy"
+  case 476:
+
+/* Line 1806 of yacc.c  */
+#line 1777 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->addQualifiers( (yyvsp[(2) - (3)].decl) )->addQualifiers( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 477:
-
-/* Line 1806 of yacc.c  */
-#line 1780 "parser.yy"
+  case 478:
+
+/* Line 1806 of yacc.c  */
+#line 1783 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 478:
-
-/* Line 1806 of yacc.c  */
-#line 1782 "parser.yy"
+  case 479:
+
+/* Line 1806 of yacc.c  */
+#line 1785 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 479:
-
-/* Line 1806 of yacc.c  */
-#line 1787 "parser.yy"
+  case 480:
+
+/* Line 1806 of yacc.c  */
+#line 1790 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFromTypeGen( (yyvsp[(1) - (4)].tok), (yyvsp[(3) - (4)].en) ); }
     break;
 
-  case 481:
-
-/* Line 1806 of yacc.c  */
-#line 1793 "parser.yy"
+  case 482:
+
+/* Line 1806 of yacc.c  */
+#line 1796 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->appendList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 482:
-
-/* Line 1806 of yacc.c  */
-#line 1798 "parser.yy"
+  case 483:
+
+/* Line 1806 of yacc.c  */
+#line 1801 "parser.yy"
     { typedefTable.addToEnclosingScope( *(yyvsp[(2) - (2)].tok), TypedefTable::TD ); }
     break;
 
-  case 483:
-
-/* Line 1806 of yacc.c  */
-#line 1800 "parser.yy"
+  case 484:
+
+/* Line 1806 of yacc.c  */
+#line 1803 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTypeParam( (yyvsp[(1) - (4)].tclass), (yyvsp[(2) - (4)].tok) )->addAssertions( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 485:
-
-/* Line 1806 of yacc.c  */
-#line 1806 "parser.yy"
+  case 486:
+
+/* Line 1806 of yacc.c  */
+#line 1809 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Type; }
     break;
 
-  case 486:
-
-/* Line 1806 of yacc.c  */
-#line 1808 "parser.yy"
+  case 487:
+
+/* Line 1806 of yacc.c  */
+#line 1811 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Ftype; }
     break;
 
-  case 487:
-
-/* Line 1806 of yacc.c  */
-#line 1810 "parser.yy"
+  case 488:
+
+/* Line 1806 of yacc.c  */
+#line 1813 "parser.yy"
     { (yyval.tclass) = DeclarationNode::Dtype; }
     break;
 
-  case 488:
-
-/* Line 1806 of yacc.c  */
-#line 1815 "parser.yy"
+  case 489:
+
+/* Line 1806 of yacc.c  */
+#line 1818 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 489:
-
-/* Line 1806 of yacc.c  */
-#line 1817 "parser.yy"
+  case 490:
+
+/* Line 1806 of yacc.c  */
+#line 1820 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl) == 0 ? (yyvsp[(2) - (2)].decl) : (yyvsp[(1) - (2)].decl)->appendList( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 490:
-
-/* Line 1806 of yacc.c  */
-#line 1822 "parser.yy"
+  case 491:
+
+/* Line 1806 of yacc.c  */
+#line 1825 "parser.yy"
     {
-			typedefTable.openContext( *(yyvsp[(2) - (5)].tok) );
-			(yyval.decl) = DeclarationNode::newContextUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) );
+			typedefTable.openTrait( *(yyvsp[(2) - (5)].tok) );
+			(yyval.decl) = DeclarationNode::newTraitUse( (yyvsp[(2) - (5)].tok), (yyvsp[(4) - (5)].en) );
 		}
     break;
 
-  case 491:
-
-/* Line 1806 of yacc.c  */
-#line 1827 "parser.yy"
+  case 492:
+
+/* Line 1806 of yacc.c  */
+#line 1830 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (5)].decl); }
     break;
 
-  case 492:
-
-/* Line 1806 of yacc.c  */
-#line 1829 "parser.yy"
+  case 493:
+
+/* Line 1806 of yacc.c  */
+#line 1832 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 493:
-
-/* Line 1806 of yacc.c  */
-#line 1834 "parser.yy"
+  case 494:
+
+/* Line 1806 of yacc.c  */
+#line 1837 "parser.yy"
     { (yyval.en) = new TypeValueNode( (yyvsp[(1) - (1)].decl) ); }
     break;
 
-  case 495:
-
-/* Line 1806 of yacc.c  */
-#line 1837 "parser.yy"
+  case 496:
+
+/* Line 1806 of yacc.c  */
+#line 1840 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( new TypeValueNode( (yyvsp[(3) - (3)].decl) ))); }
     break;
 
-  case 496:
-
-/* Line 1806 of yacc.c  */
-#line 1839 "parser.yy"
+  case 497:
+
+/* Line 1806 of yacc.c  */
+#line 1842 "parser.yy"
     { (yyval.en) = (ExpressionNode *)( (yyvsp[(1) - (3)].en)->set_link( (yyvsp[(3) - (3)].en) )); }
     break;
 
-  case 497:
-
-/* Line 1806 of yacc.c  */
-#line 1844 "parser.yy"
+  case 498:
+
+/* Line 1806 of yacc.c  */
+#line 1847 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 498:
-
-/* Line 1806 of yacc.c  */
-#line 1846 "parser.yy"
+  case 499:
+
+/* Line 1806 of yacc.c  */
+#line 1849 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addQualifiers( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 499:
-
-/* Line 1806 of yacc.c  */
-#line 1848 "parser.yy"
+  case 500:
+
+/* Line 1806 of yacc.c  */
+#line 1851 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl)->copyStorageClasses( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 500:
-
-/* Line 1806 of yacc.c  */
-#line 1853 "parser.yy"
+  case 501:
+
+/* Line 1806 of yacc.c  */
+#line 1856 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addAssertions( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 501:
-
-/* Line 1806 of yacc.c  */
-#line 1855 "parser.yy"
+  case 502:
+
+/* Line 1806 of yacc.c  */
+#line 1858 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addAssertions( (yyvsp[(2) - (4)].decl) )->addType( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 502:
-
-/* Line 1806 of yacc.c  */
-#line 1860 "parser.yy"
+  case 503:
+
+/* Line 1806 of yacc.c  */
+#line 1863 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (1)].tok), TypedefTable::TD );
@@ -7643,8 +7703,8 @@
     break;
 
-  case 503:
-
-/* Line 1806 of yacc.c  */
-#line 1865 "parser.yy"
+  case 504:
+
+/* Line 1806 of yacc.c  */
+#line 1868 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(1) - (6)].tok), TypedefTable::TG );
@@ -7653,46 +7713,46 @@
     break;
 
-  case 504:
-
-/* Line 1806 of yacc.c  */
-#line 1873 "parser.yy"
+  case 505:
+
+/* Line 1806 of yacc.c  */
+#line 1876 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (9)].tok), TypedefTable::ID );
-			(yyval.decl) = DeclarationNode::newContext( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );
+			(yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (9)].tok), (yyvsp[(5) - (9)].decl), 0 );
 		}
     break;
 
-  case 505:
-
-/* Line 1806 of yacc.c  */
-#line 1878 "parser.yy"
+  case 506:
+
+/* Line 1806 of yacc.c  */
+#line 1881 "parser.yy"
     {
-			typedefTable.enterContext( *(yyvsp[(2) - (8)].tok) );
+			typedefTable.enterTrait( *(yyvsp[(2) - (8)].tok) );
 			typedefTable.enterScope();
 		}
     break;
 
-  case 506:
-
-/* Line 1806 of yacc.c  */
-#line 1883 "parser.yy"
+  case 507:
+
+/* Line 1806 of yacc.c  */
+#line 1886 "parser.yy"
     {
-			typedefTable.leaveContext();
+			typedefTable.leaveTrait();
 			typedefTable.addToEnclosingScope( *(yyvsp[(2) - (11)].tok), TypedefTable::ID );
-			(yyval.decl) = DeclarationNode::newContext( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) );
+			(yyval.decl) = DeclarationNode::newTrait( (yyvsp[(2) - (11)].tok), (yyvsp[(5) - (11)].decl), (yyvsp[(10) - (11)].decl) );
 		}
     break;
 
-  case 508:
-
-/* Line 1806 of yacc.c  */
-#line 1893 "parser.yy"
+  case 509:
+
+/* Line 1806 of yacc.c  */
+#line 1896 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 511:
-
-/* Line 1806 of yacc.c  */
-#line 1903 "parser.yy"
+  case 512:
+
+/* Line 1806 of yacc.c  */
+#line 1906 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7701,8 +7761,8 @@
     break;
 
-  case 512:
-
-/* Line 1806 of yacc.c  */
-#line 1908 "parser.yy"
+  case 513:
+
+/* Line 1806 of yacc.c  */
+#line 1911 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7711,8 +7771,8 @@
     break;
 
-  case 513:
-
-/* Line 1806 of yacc.c  */
-#line 1913 "parser.yy"
+  case 514:
+
+/* Line 1806 of yacc.c  */
+#line 1916 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( *(yyvsp[(5) - (5)].tok), TypedefTable::ID );
@@ -7721,8 +7781,8 @@
     break;
 
-  case 514:
-
-/* Line 1806 of yacc.c  */
-#line 1921 "parser.yy"
+  case 515:
+
+/* Line 1806 of yacc.c  */
+#line 1924 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7731,8 +7791,8 @@
     break;
 
-  case 515:
-
-/* Line 1806 of yacc.c  */
-#line 1926 "parser.yy"
+  case 516:
+
+/* Line 1806 of yacc.c  */
+#line 1929 "parser.yy"
     {
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
@@ -7741,15 +7801,15 @@
     break;
 
-  case 516:
-
-/* Line 1806 of yacc.c  */
-#line 1936 "parser.yy"
+  case 517:
+
+/* Line 1806 of yacc.c  */
+#line 1939 "parser.yy"
     {}
     break;
 
-  case 517:
-
-/* Line 1806 of yacc.c  */
-#line 1938 "parser.yy"
+  case 518:
+
+/* Line 1806 of yacc.c  */
+#line 1941 "parser.yy"
     {
 			if ( theTree ) {
@@ -7761,29 +7821,29 @@
     break;
 
-  case 519:
-
-/* Line 1806 of yacc.c  */
-#line 1950 "parser.yy"
+  case 520:
+
+/* Line 1806 of yacc.c  */
+#line 1953 "parser.yy"
     { (yyval.decl) = ( (yyvsp[(1) - (3)].decl) != NULL ) ? (yyvsp[(1) - (3)].decl)->appendList( (yyvsp[(3) - (3)].decl) ) : (yyvsp[(3) - (3)].decl); }
     break;
 
-  case 520:
-
-/* Line 1806 of yacc.c  */
-#line 1955 "parser.yy"
+  case 521:
+
+/* Line 1806 of yacc.c  */
+#line 1958 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 524:
-
-/* Line 1806 of yacc.c  */
-#line 1963 "parser.yy"
+  case 525:
+
+/* Line 1806 of yacc.c  */
+#line 1966 "parser.yy"
     {}
     break;
 
-  case 525:
-
-/* Line 1806 of yacc.c  */
-#line 1965 "parser.yy"
+  case 526:
+
+/* Line 1806 of yacc.c  */
+#line 1968 "parser.yy"
     {
 			linkageStack.push( linkage );
@@ -7792,8 +7852,8 @@
     break;
 
-  case 526:
-
-/* Line 1806 of yacc.c  */
-#line 1970 "parser.yy"
+  case 527:
+
+/* Line 1806 of yacc.c  */
+#line 1973 "parser.yy"
     {
 			linkage = linkageStack.top();
@@ -7803,15 +7863,15 @@
     break;
 
-  case 527:
-
-/* Line 1806 of yacc.c  */
-#line 1976 "parser.yy"
+  case 528:
+
+/* Line 1806 of yacc.c  */
+#line 1979 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl); }
     break;
 
-  case 529:
-
-/* Line 1806 of yacc.c  */
-#line 1986 "parser.yy"
+  case 530:
+
+/* Line 1806 of yacc.c  */
+#line 1989 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7821,8 +7881,8 @@
     break;
 
-  case 530:
-
-/* Line 1806 of yacc.c  */
-#line 1992 "parser.yy"
+  case 531:
+
+/* Line 1806 of yacc.c  */
+#line 1995 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7832,8 +7892,8 @@
     break;
 
-  case 531:
-
-/* Line 1806 of yacc.c  */
-#line 2001 "parser.yy"
+  case 532:
+
+/* Line 1806 of yacc.c  */
+#line 2004 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7843,8 +7903,8 @@
     break;
 
-  case 532:
-
-/* Line 1806 of yacc.c  */
-#line 2007 "parser.yy"
+  case 533:
+
+/* Line 1806 of yacc.c  */
+#line 2010 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7854,8 +7914,8 @@
     break;
 
-  case 533:
-
-/* Line 1806 of yacc.c  */
-#line 2013 "parser.yy"
+  case 534:
+
+/* Line 1806 of yacc.c  */
+#line 2016 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7865,8 +7925,8 @@
     break;
 
-  case 534:
-
-/* Line 1806 of yacc.c  */
-#line 2019 "parser.yy"
+  case 535:
+
+/* Line 1806 of yacc.c  */
+#line 2022 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7876,8 +7936,8 @@
     break;
 
-  case 535:
-
-/* Line 1806 of yacc.c  */
-#line 2025 "parser.yy"
+  case 536:
+
+/* Line 1806 of yacc.c  */
+#line 2028 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7887,8 +7947,8 @@
     break;
 
-  case 536:
-
-/* Line 1806 of yacc.c  */
-#line 2033 "parser.yy"
+  case 537:
+
+/* Line 1806 of yacc.c  */
+#line 2036 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7898,8 +7958,8 @@
     break;
 
-  case 537:
-
-/* Line 1806 of yacc.c  */
-#line 2039 "parser.yy"
+  case 538:
+
+/* Line 1806 of yacc.c  */
+#line 2042 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7909,8 +7969,8 @@
     break;
 
-  case 538:
-
-/* Line 1806 of yacc.c  */
-#line 2047 "parser.yy"
+  case 539:
+
+/* Line 1806 of yacc.c  */
+#line 2050 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7920,8 +7980,8 @@
     break;
 
-  case 539:
-
-/* Line 1806 of yacc.c  */
-#line 2053 "parser.yy"
+  case 540:
+
+/* Line 1806 of yacc.c  */
+#line 2056 "parser.yy"
     {
 			typedefTable.addToEnclosingScope( TypedefTable::ID );
@@ -7931,54 +7991,33 @@
     break;
 
-  case 543:
-
-/* Line 1806 of yacc.c  */
-#line 2068 "parser.yy"
+  case 544:
+
+/* Line 1806 of yacc.c  */
+#line 2071 "parser.yy"
     { (yyval.en) = new CompositeExprNode( new OperatorNode( OperatorNode::Range ), (yyvsp[(1) - (3)].en), (yyvsp[(3) - (3)].en) ); }
     break;
 
-  case 546:
-
-/* Line 1806 of yacc.c  */
-#line 2078 "parser.yy"
+  case 547:
+
+/* Line 1806 of yacc.c  */
+#line 2081 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 549:
-
-/* Line 1806 of yacc.c  */
-#line 2085 "parser.yy"
+  case 550:
+
+/* Line 1806 of yacc.c  */
+#line 2088 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 550:
-
-/* Line 1806 of yacc.c  */
-#line 2091 "parser.yy"
+  case 551:
+
+/* Line 1806 of yacc.c  */
+#line 2094 "parser.yy"
     { (yyval.decl) = 0; }
     break;
 
-  case 556:
-
-/* Line 1806 of yacc.c  */
-#line 2106 "parser.yy"
-    {}
-    break;
-
   case 557:
-
-/* Line 1806 of yacc.c  */
-#line 2107 "parser.yy"
-    {}
-    break;
-
-  case 558:
-
-/* Line 1806 of yacc.c  */
-#line 2108 "parser.yy"
-    {}
-    break;
-
-  case 559:
 
 /* Line 1806 of yacc.c  */
@@ -7987,12 +8026,26 @@
     break;
 
+  case 558:
+
+/* Line 1806 of yacc.c  */
+#line 2110 "parser.yy"
+    {}
+    break;
+
+  case 559:
+
+/* Line 1806 of yacc.c  */
+#line 2111 "parser.yy"
+    {}
+    break;
+
   case 560:
 
 /* Line 1806 of yacc.c  */
-#line 2144 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 562:
+#line 2112 "parser.yy"
+    {}
+    break;
+
+  case 561:
 
 /* Line 1806 of yacc.c  */
@@ -8004,5 +8057,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2149 "parser.yy"
+#line 2150 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8011,5 +8064,12 @@
 
 /* Line 1806 of yacc.c  */
-#line 2154 "parser.yy"
+#line 2152 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 565:
+
+/* Line 1806 of yacc.c  */
+#line 2157 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8018,82 +8078,75 @@
     break;
 
-  case 565:
-
-/* Line 1806 of yacc.c  */
-#line 2159 "parser.yy"
+  case 566:
+
+/* Line 1806 of yacc.c  */
+#line 2162 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 566:
-
-/* Line 1806 of yacc.c  */
-#line 2164 "parser.yy"
+  case 567:
+
+/* Line 1806 of yacc.c  */
+#line 2167 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 567:
-
-/* Line 1806 of yacc.c  */
-#line 2166 "parser.yy"
+  case 568:
+
+/* Line 1806 of yacc.c  */
+#line 2169 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 568:
-
-/* Line 1806 of yacc.c  */
-#line 2168 "parser.yy"
+  case 569:
+
+/* Line 1806 of yacc.c  */
+#line 2171 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 569:
-
-/* Line 1806 of yacc.c  */
-#line 2173 "parser.yy"
+  case 570:
+
+/* Line 1806 of yacc.c  */
+#line 2176 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 570:
-
-/* Line 1806 of yacc.c  */
-#line 2175 "parser.yy"
+  case 571:
+
+/* Line 1806 of yacc.c  */
+#line 2178 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 571:
-
-/* Line 1806 of yacc.c  */
-#line 2177 "parser.yy"
+  case 572:
+
+/* Line 1806 of yacc.c  */
+#line 2180 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 572:
-
-/* Line 1806 of yacc.c  */
-#line 2179 "parser.yy"
+  case 573:
+
+/* Line 1806 of yacc.c  */
+#line 2182 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 573:
-
-/* Line 1806 of yacc.c  */
-#line 2184 "parser.yy"
+  case 574:
+
+/* Line 1806 of yacc.c  */
+#line 2187 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 574:
-
-/* Line 1806 of yacc.c  */
-#line 2186 "parser.yy"
+  case 575:
+
+/* Line 1806 of yacc.c  */
+#line 2189 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 575:
-
-/* Line 1806 of yacc.c  */
-#line 2196 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 577:
+  case 576:
 
 /* Line 1806 of yacc.c  */
@@ -8105,135 +8158,135 @@
 
 /* Line 1806 of yacc.c  */
-#line 2204 "parser.yy"
+#line 2202 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 579:
+
+/* Line 1806 of yacc.c  */
+#line 2207 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 579:
-
-/* Line 1806 of yacc.c  */
-#line 2206 "parser.yy"
+  case 580:
+
+/* Line 1806 of yacc.c  */
+#line 2209 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 580:
-
-/* Line 1806 of yacc.c  */
-#line 2208 "parser.yy"
+  case 581:
+
+/* Line 1806 of yacc.c  */
+#line 2211 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 581:
-
-/* Line 1806 of yacc.c  */
-#line 2213 "parser.yy"
+  case 582:
+
+/* Line 1806 of yacc.c  */
+#line 2216 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 582:
-
-/* Line 1806 of yacc.c  */
-#line 2215 "parser.yy"
+  case 583:
+
+/* Line 1806 of yacc.c  */
+#line 2218 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 583:
-
-/* Line 1806 of yacc.c  */
-#line 2217 "parser.yy"
+  case 584:
+
+/* Line 1806 of yacc.c  */
+#line 2220 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 584:
-
-/* Line 1806 of yacc.c  */
-#line 2222 "parser.yy"
+  case 585:
+
+/* Line 1806 of yacc.c  */
+#line 2225 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 585:
-
-/* Line 1806 of yacc.c  */
-#line 2224 "parser.yy"
+  case 586:
+
+/* Line 1806 of yacc.c  */
+#line 2227 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 586:
-
-/* Line 1806 of yacc.c  */
-#line 2226 "parser.yy"
+  case 587:
+
+/* Line 1806 of yacc.c  */
+#line 2229 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 590:
-
-/* Line 1806 of yacc.c  */
-#line 2241 "parser.yy"
+  case 591:
+
+/* Line 1806 of yacc.c  */
+#line 2244 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (4)].decl)->addIdList( (yyvsp[(3) - (4)].decl) ); }
     break;
 
-  case 591:
-
-/* Line 1806 of yacc.c  */
-#line 2243 "parser.yy"
+  case 592:
+
+/* Line 1806 of yacc.c  */
+#line 2246 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (6)].decl)->addIdList( (yyvsp[(5) - (6)].decl) ); }
     break;
 
-  case 592:
-
-/* Line 1806 of yacc.c  */
-#line 2245 "parser.yy"
+  case 593:
+
+/* Line 1806 of yacc.c  */
+#line 2248 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 593:
-
-/* Line 1806 of yacc.c  */
-#line 2250 "parser.yy"
+  case 594:
+
+/* Line 1806 of yacc.c  */
+#line 2253 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 594:
-
-/* Line 1806 of yacc.c  */
-#line 2252 "parser.yy"
+  case 595:
+
+/* Line 1806 of yacc.c  */
+#line 2255 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 595:
-
-/* Line 1806 of yacc.c  */
-#line 2254 "parser.yy"
+  case 596:
+
+/* Line 1806 of yacc.c  */
+#line 2257 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 596:
-
-/* Line 1806 of yacc.c  */
-#line 2259 "parser.yy"
+  case 597:
+
+/* Line 1806 of yacc.c  */
+#line 2262 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 597:
-
-/* Line 1806 of yacc.c  */
-#line 2261 "parser.yy"
+  case 598:
+
+/* Line 1806 of yacc.c  */
+#line 2264 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 598:
-
-/* Line 1806 of yacc.c  */
-#line 2263 "parser.yy"
+  case 599:
+
+/* Line 1806 of yacc.c  */
+#line 2266 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 599:
-
-/* Line 1806 of yacc.c  */
-#line 2278 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 601:
+  case 600:
 
 /* Line 1806 of yacc.c  */
@@ -8245,93 +8298,93 @@
 
 /* Line 1806 of yacc.c  */
-#line 2283 "parser.yy"
+#line 2284 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 604:
-
-/* Line 1806 of yacc.c  */
-#line 2289 "parser.yy"
+  case 603:
+
+/* Line 1806 of yacc.c  */
+#line 2286 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 605:
+
+/* Line 1806 of yacc.c  */
+#line 2292 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 605:
-
-/* Line 1806 of yacc.c  */
-#line 2294 "parser.yy"
+  case 606:
+
+/* Line 1806 of yacc.c  */
+#line 2297 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 606:
-
-/* Line 1806 of yacc.c  */
-#line 2296 "parser.yy"
+  case 607:
+
+/* Line 1806 of yacc.c  */
+#line 2299 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 607:
-
-/* Line 1806 of yacc.c  */
-#line 2298 "parser.yy"
+  case 608:
+
+/* Line 1806 of yacc.c  */
+#line 2301 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 608:
-
-/* Line 1806 of yacc.c  */
-#line 2303 "parser.yy"
+  case 609:
+
+/* Line 1806 of yacc.c  */
+#line 2306 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 609:
-
-/* Line 1806 of yacc.c  */
-#line 2305 "parser.yy"
+  case 610:
+
+/* Line 1806 of yacc.c  */
+#line 2308 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 610:
-
-/* Line 1806 of yacc.c  */
-#line 2307 "parser.yy"
+  case 611:
+
+/* Line 1806 of yacc.c  */
+#line 2310 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 611:
-
-/* Line 1806 of yacc.c  */
-#line 2309 "parser.yy"
+  case 612:
+
+/* Line 1806 of yacc.c  */
+#line 2312 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 612:
-
-/* Line 1806 of yacc.c  */
-#line 2314 "parser.yy"
+  case 613:
+
+/* Line 1806 of yacc.c  */
+#line 2317 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 613:
-
-/* Line 1806 of yacc.c  */
-#line 2316 "parser.yy"
+  case 614:
+
+/* Line 1806 of yacc.c  */
+#line 2319 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 614:
-
-/* Line 1806 of yacc.c  */
-#line 2318 "parser.yy"
+  case 615:
+
+/* Line 1806 of yacc.c  */
+#line 2321 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 615:
-
-/* Line 1806 of yacc.c  */
-#line 2328 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 617:
+  case 616:
 
 /* Line 1806 of yacc.c  */
@@ -8343,5 +8396,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2333 "parser.yy"
+#line 2334 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8350,79 +8403,79 @@
 
 /* Line 1806 of yacc.c  */
-#line 2338 "parser.yy"
+#line 2336 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 620:
+
+/* Line 1806 of yacc.c  */
+#line 2341 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 620:
-
-/* Line 1806 of yacc.c  */
-#line 2340 "parser.yy"
+  case 621:
+
+/* Line 1806 of yacc.c  */
+#line 2343 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 621:
-
-/* Line 1806 of yacc.c  */
-#line 2342 "parser.yy"
+  case 622:
+
+/* Line 1806 of yacc.c  */
+#line 2345 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 622:
-
-/* Line 1806 of yacc.c  */
-#line 2347 "parser.yy"
+  case 623:
+
+/* Line 1806 of yacc.c  */
+#line 2350 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 623:
-
-/* Line 1806 of yacc.c  */
-#line 2349 "parser.yy"
+  case 624:
+
+/* Line 1806 of yacc.c  */
+#line 2352 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 624:
-
-/* Line 1806 of yacc.c  */
-#line 2351 "parser.yy"
+  case 625:
+
+/* Line 1806 of yacc.c  */
+#line 2354 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 625:
-
-/* Line 1806 of yacc.c  */
-#line 2353 "parser.yy"
+  case 626:
+
+/* Line 1806 of yacc.c  */
+#line 2356 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 626:
-
-/* Line 1806 of yacc.c  */
-#line 2358 "parser.yy"
+  case 627:
+
+/* Line 1806 of yacc.c  */
+#line 2361 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 627:
-
-/* Line 1806 of yacc.c  */
-#line 2360 "parser.yy"
+  case 628:
+
+/* Line 1806 of yacc.c  */
+#line 2363 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 628:
-
-/* Line 1806 of yacc.c  */
-#line 2362 "parser.yy"
+  case 629:
+
+/* Line 1806 of yacc.c  */
+#line 2365 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 629:
-
-/* Line 1806 of yacc.c  */
-#line 2393 "parser.yy"
-    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
-    break;
-
-  case 631:
+  case 630:
 
 /* Line 1806 of yacc.c  */
@@ -8434,5 +8487,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 2398 "parser.yy"
+#line 2399 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
@@ -8441,5 +8494,12 @@
 
 /* Line 1806 of yacc.c  */
-#line 2403 "parser.yy"
+#line 2401 "parser.yy"
+    { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
+    break;
+
+  case 634:
+
+/* Line 1806 of yacc.c  */
+#line 2406 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8448,8 +8508,8 @@
     break;
 
-  case 634:
-
-/* Line 1806 of yacc.c  */
-#line 2408 "parser.yy"
+  case 635:
+
+/* Line 1806 of yacc.c  */
+#line 2411 "parser.yy"
     {
 			typedefTable.setNextIdentifier( *(yyvsp[(1) - (1)].tok) );
@@ -8458,687 +8518,687 @@
     break;
 
-  case 635:
-
-/* Line 1806 of yacc.c  */
-#line 2416 "parser.yy"
+  case 636:
+
+/* Line 1806 of yacc.c  */
+#line 2419 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 636:
-
-/* Line 1806 of yacc.c  */
-#line 2418 "parser.yy"
+  case 637:
+
+/* Line 1806 of yacc.c  */
+#line 2421 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 637:
-
-/* Line 1806 of yacc.c  */
-#line 2420 "parser.yy"
+  case 638:
+
+/* Line 1806 of yacc.c  */
+#line 2423 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 638:
-
-/* Line 1806 of yacc.c  */
-#line 2425 "parser.yy"
+  case 639:
+
+/* Line 1806 of yacc.c  */
+#line 2428 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 639:
-
-/* Line 1806 of yacc.c  */
-#line 2427 "parser.yy"
+  case 640:
+
+/* Line 1806 of yacc.c  */
+#line 2430 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 640:
-
-/* Line 1806 of yacc.c  */
-#line 2432 "parser.yy"
+  case 641:
+
+/* Line 1806 of yacc.c  */
+#line 2435 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addParamList( (yyvsp[(4) - (6)].decl) ); }
     break;
 
-  case 641:
-
-/* Line 1806 of yacc.c  */
-#line 2434 "parser.yy"
+  case 642:
+
+/* Line 1806 of yacc.c  */
+#line 2437 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 643:
-
-/* Line 1806 of yacc.c  */
-#line 2449 "parser.yy"
+  case 644:
+
+/* Line 1806 of yacc.c  */
+#line 2452 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 644:
-
-/* Line 1806 of yacc.c  */
-#line 2451 "parser.yy"
+  case 645:
+
+/* Line 1806 of yacc.c  */
+#line 2454 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 645:
-
-/* Line 1806 of yacc.c  */
-#line 2456 "parser.yy"
+  case 646:
+
+/* Line 1806 of yacc.c  */
+#line 2459 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 646:
-
-/* Line 1806 of yacc.c  */
-#line 2458 "parser.yy"
+  case 647:
+
+/* Line 1806 of yacc.c  */
+#line 2461 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 647:
-
-/* Line 1806 of yacc.c  */
-#line 2460 "parser.yy"
+  case 648:
+
+/* Line 1806 of yacc.c  */
+#line 2463 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 648:
-
-/* Line 1806 of yacc.c  */
-#line 2462 "parser.yy"
+  case 649:
+
+/* Line 1806 of yacc.c  */
+#line 2465 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 649:
-
-/* Line 1806 of yacc.c  */
-#line 2464 "parser.yy"
+  case 650:
+
+/* Line 1806 of yacc.c  */
+#line 2467 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 651:
-
-/* Line 1806 of yacc.c  */
-#line 2470 "parser.yy"
+  case 652:
+
+/* Line 1806 of yacc.c  */
+#line 2473 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 652:
-
-/* Line 1806 of yacc.c  */
-#line 2472 "parser.yy"
+  case 653:
+
+/* Line 1806 of yacc.c  */
+#line 2475 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 653:
-
-/* Line 1806 of yacc.c  */
-#line 2474 "parser.yy"
+  case 654:
+
+/* Line 1806 of yacc.c  */
+#line 2477 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 654:
-
-/* Line 1806 of yacc.c  */
-#line 2479 "parser.yy"
+  case 655:
+
+/* Line 1806 of yacc.c  */
+#line 2482 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
 
-  case 655:
-
-/* Line 1806 of yacc.c  */
-#line 2481 "parser.yy"
+  case 656:
+
+/* Line 1806 of yacc.c  */
+#line 2484 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 656:
-
-/* Line 1806 of yacc.c  */
-#line 2483 "parser.yy"
+  case 657:
+
+/* Line 1806 of yacc.c  */
+#line 2486 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 657:
-
-/* Line 1806 of yacc.c  */
-#line 2489 "parser.yy"
+  case 658:
+
+/* Line 1806 of yacc.c  */
+#line 2492 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 658:
-
-/* Line 1806 of yacc.c  */
-#line 2491 "parser.yy"
+  case 659:
+
+/* Line 1806 of yacc.c  */
+#line 2494 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false )->addArray( (yyvsp[(3) - (3)].decl) ); }
     break;
 
-  case 660:
-
-/* Line 1806 of yacc.c  */
-#line 2497 "parser.yy"
+  case 661:
+
+/* Line 1806 of yacc.c  */
+#line 2500 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(3) - (5)].en), 0, false ); }
     break;
 
-  case 661:
-
-/* Line 1806 of yacc.c  */
-#line 2499 "parser.yy"
+  case 662:
+
+/* Line 1806 of yacc.c  */
+#line 2502 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( 0 ); }
     break;
 
-  case 662:
-
-/* Line 1806 of yacc.c  */
-#line 2501 "parser.yy"
+  case 663:
+
+/* Line 1806 of yacc.c  */
+#line 2504 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newArray( (yyvsp[(4) - (6)].en), 0, false ) ); }
     break;
 
-  case 663:
-
-/* Line 1806 of yacc.c  */
-#line 2503 "parser.yy"
+  case 664:
+
+/* Line 1806 of yacc.c  */
+#line 2506 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (6)].decl)->addArray( DeclarationNode::newVarArray( 0 ) ); }
     break;
 
-  case 665:
-
-/* Line 1806 of yacc.c  */
-#line 2518 "parser.yy"
+  case 666:
+
+/* Line 1806 of yacc.c  */
+#line 2521 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 666:
-
-/* Line 1806 of yacc.c  */
-#line 2520 "parser.yy"
+  case 667:
+
+/* Line 1806 of yacc.c  */
+#line 2523 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 667:
-
-/* Line 1806 of yacc.c  */
-#line 2525 "parser.yy"
+  case 668:
+
+/* Line 1806 of yacc.c  */
+#line 2528 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 668:
-
-/* Line 1806 of yacc.c  */
-#line 2527 "parser.yy"
+  case 669:
+
+/* Line 1806 of yacc.c  */
+#line 2530 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 669:
-
-/* Line 1806 of yacc.c  */
-#line 2529 "parser.yy"
+  case 670:
+
+/* Line 1806 of yacc.c  */
+#line 2532 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 670:
-
-/* Line 1806 of yacc.c  */
-#line 2531 "parser.yy"
+  case 671:
+
+/* Line 1806 of yacc.c  */
+#line 2534 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 671:
-
-/* Line 1806 of yacc.c  */
-#line 2533 "parser.yy"
+  case 672:
+
+/* Line 1806 of yacc.c  */
+#line 2536 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 673:
-
-/* Line 1806 of yacc.c  */
-#line 2539 "parser.yy"
+  case 674:
+
+/* Line 1806 of yacc.c  */
+#line 2542 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 674:
-
-/* Line 1806 of yacc.c  */
-#line 2541 "parser.yy"
+  case 675:
+
+/* Line 1806 of yacc.c  */
+#line 2544 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 675:
-
-/* Line 1806 of yacc.c  */
-#line 2543 "parser.yy"
+  case 676:
+
+/* Line 1806 of yacc.c  */
+#line 2546 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 676:
-
-/* Line 1806 of yacc.c  */
-#line 2548 "parser.yy"
+  case 677:
+
+/* Line 1806 of yacc.c  */
+#line 2551 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, 0, (yyvsp[(3) - (5)].decl), 0 ); }
     break;
 
-  case 677:
-
-/* Line 1806 of yacc.c  */
-#line 2550 "parser.yy"
+  case 678:
+
+/* Line 1806 of yacc.c  */
+#line 2553 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 678:
-
-/* Line 1806 of yacc.c  */
-#line 2552 "parser.yy"
+  case 679:
+
+/* Line 1806 of yacc.c  */
+#line 2555 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 680:
-
-/* Line 1806 of yacc.c  */
-#line 2559 "parser.yy"
+  case 681:
+
+/* Line 1806 of yacc.c  */
+#line 2562 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addArray( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 682:
-
-/* Line 1806 of yacc.c  */
-#line 2570 "parser.yy"
+  case 683:
+
+/* Line 1806 of yacc.c  */
+#line 2573 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, 0, false ); }
     break;
 
-  case 683:
-
-/* Line 1806 of yacc.c  */
-#line 2573 "parser.yy"
+  case 684:
+
+/* Line 1806 of yacc.c  */
+#line 2576 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 684:
-
-/* Line 1806 of yacc.c  */
-#line 2575 "parser.yy"
+  case 685:
+
+/* Line 1806 of yacc.c  */
+#line 2578 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( 0, (yyvsp[(3) - (5)].decl), false ); }
     break;
 
-  case 685:
-
-/* Line 1806 of yacc.c  */
-#line 2578 "parser.yy"
+  case 686:
+
+/* Line 1806 of yacc.c  */
+#line 2581 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 686:
-
-/* Line 1806 of yacc.c  */
-#line 2580 "parser.yy"
+  case 687:
+
+/* Line 1806 of yacc.c  */
+#line 2583 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl), true ); }
     break;
 
-  case 687:
-
-/* Line 1806 of yacc.c  */
-#line 2582 "parser.yy"
+  case 688:
+
+/* Line 1806 of yacc.c  */
+#line 2585 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(3) - (7)].decl), true ); }
     break;
 
-  case 689:
-
-/* Line 1806 of yacc.c  */
-#line 2596 "parser.yy"
+  case 690:
+
+/* Line 1806 of yacc.c  */
+#line 2599 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 690:
-
-/* Line 1806 of yacc.c  */
-#line 2598 "parser.yy"
+  case 691:
+
+/* Line 1806 of yacc.c  */
+#line 2601 "parser.yy"
     { (yyval.decl) = (yyvsp[(1) - (2)].decl)->addQualifiers( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 691:
-
-/* Line 1806 of yacc.c  */
-#line 2603 "parser.yy"
+  case 692:
+
+/* Line 1806 of yacc.c  */
+#line 2606 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( 0 ); }
     break;
 
-  case 692:
-
-/* Line 1806 of yacc.c  */
-#line 2605 "parser.yy"
+  case 693:
+
+/* Line 1806 of yacc.c  */
+#line 2608 "parser.yy"
     { (yyval.decl) = DeclarationNode::newPointer( (yyvsp[(2) - (2)].decl) ); }
     break;
 
-  case 693:
-
-/* Line 1806 of yacc.c  */
-#line 2607 "parser.yy"
+  case 694:
+
+/* Line 1806 of yacc.c  */
+#line 2610 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 694:
-
-/* Line 1806 of yacc.c  */
-#line 2609 "parser.yy"
+  case 695:
+
+/* Line 1806 of yacc.c  */
+#line 2612 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addPointer( DeclarationNode::newPointer( (yyvsp[(2) - (3)].decl) ) ); }
     break;
 
-  case 695:
-
-/* Line 1806 of yacc.c  */
-#line 2611 "parser.yy"
+  case 696:
+
+/* Line 1806 of yacc.c  */
+#line 2614 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 697:
-
-/* Line 1806 of yacc.c  */
-#line 2617 "parser.yy"
+  case 698:
+
+/* Line 1806 of yacc.c  */
+#line 2620 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 698:
-
-/* Line 1806 of yacc.c  */
-#line 2619 "parser.yy"
+  case 699:
+
+/* Line 1806 of yacc.c  */
+#line 2622 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (4)].decl)->addArray( (yyvsp[(4) - (4)].decl) ); }
     break;
 
-  case 699:
-
-/* Line 1806 of yacc.c  */
-#line 2621 "parser.yy"
+  case 700:
+
+/* Line 1806 of yacc.c  */
+#line 2624 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 700:
-
-/* Line 1806 of yacc.c  */
-#line 2626 "parser.yy"
+  case 701:
+
+/* Line 1806 of yacc.c  */
+#line 2629 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (8)].decl)->addParamList( (yyvsp[(6) - (8)].decl) ); }
     break;
 
-  case 701:
-
-/* Line 1806 of yacc.c  */
-#line 2628 "parser.yy"
+  case 702:
+
+/* Line 1806 of yacc.c  */
+#line 2631 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (3)].decl); }
     break;
 
-  case 704:
-
-/* Line 1806 of yacc.c  */
-#line 2638 "parser.yy"
+  case 705:
+
+/* Line 1806 of yacc.c  */
+#line 2641 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 707:
-
-/* Line 1806 of yacc.c  */
-#line 2648 "parser.yy"
+  case 708:
+
+/* Line 1806 of yacc.c  */
+#line 2651 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 708:
-
-/* Line 1806 of yacc.c  */
-#line 2650 "parser.yy"
+  case 709:
+
+/* Line 1806 of yacc.c  */
+#line 2653 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 709:
-
-/* Line 1806 of yacc.c  */
-#line 2652 "parser.yy"
+  case 710:
+
+/* Line 1806 of yacc.c  */
+#line 2655 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 710:
-
-/* Line 1806 of yacc.c  */
-#line 2654 "parser.yy"
+  case 711:
+
+/* Line 1806 of yacc.c  */
+#line 2657 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 711:
-
-/* Line 1806 of yacc.c  */
-#line 2656 "parser.yy"
+  case 712:
+
+/* Line 1806 of yacc.c  */
+#line 2659 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 712:
-
-/* Line 1806 of yacc.c  */
-#line 2658 "parser.yy"
+  case 713:
+
+/* Line 1806 of yacc.c  */
+#line 2661 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 713:
-
-/* Line 1806 of yacc.c  */
-#line 2665 "parser.yy"
+  case 714:
+
+/* Line 1806 of yacc.c  */
+#line 2668 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 714:
-
-/* Line 1806 of yacc.c  */
-#line 2667 "parser.yy"
+  case 715:
+
+/* Line 1806 of yacc.c  */
+#line 2670 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 715:
-
-/* Line 1806 of yacc.c  */
-#line 2669 "parser.yy"
+  case 716:
+
+/* Line 1806 of yacc.c  */
+#line 2672 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 716:
-
-/* Line 1806 of yacc.c  */
-#line 2671 "parser.yy"
+  case 717:
+
+/* Line 1806 of yacc.c  */
+#line 2674 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 717:
-
-/* Line 1806 of yacc.c  */
-#line 2673 "parser.yy"
+  case 718:
+
+/* Line 1806 of yacc.c  */
+#line 2676 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 718:
-
-/* Line 1806 of yacc.c  */
-#line 2675 "parser.yy"
+  case 719:
+
+/* Line 1806 of yacc.c  */
+#line 2678 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 719:
-
-/* Line 1806 of yacc.c  */
-#line 2677 "parser.yy"
+  case 720:
+
+/* Line 1806 of yacc.c  */
+#line 2680 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 720:
-
-/* Line 1806 of yacc.c  */
-#line 2679 "parser.yy"
+  case 721:
+
+/* Line 1806 of yacc.c  */
+#line 2682 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 721:
-
-/* Line 1806 of yacc.c  */
-#line 2681 "parser.yy"
+  case 722:
+
+/* Line 1806 of yacc.c  */
+#line 2684 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( (yyvsp[(2) - (3)].decl) )->addNewArray( (yyvsp[(1) - (3)].decl) ); }
     break;
 
-  case 722:
-
-/* Line 1806 of yacc.c  */
-#line 2683 "parser.yy"
+  case 723:
+
+/* Line 1806 of yacc.c  */
+#line 2686 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 723:
-
-/* Line 1806 of yacc.c  */
-#line 2688 "parser.yy"
+  case 724:
+
+/* Line 1806 of yacc.c  */
+#line 2691 "parser.yy"
     { (yyval.decl) = DeclarationNode::newVarArray( (yyvsp[(3) - (6)].decl) ); }
     break;
 
-  case 724:
-
-/* Line 1806 of yacc.c  */
-#line 2690 "parser.yy"
+  case 725:
+
+/* Line 1806 of yacc.c  */
+#line 2693 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), false ); }
     break;
 
-  case 725:
-
-/* Line 1806 of yacc.c  */
-#line 2695 "parser.yy"
+  case 726:
+
+/* Line 1806 of yacc.c  */
+#line 2698 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(4) - (6)].en), (yyvsp[(3) - (6)].decl), true ); }
     break;
 
-  case 726:
-
-/* Line 1806 of yacc.c  */
-#line 2697 "parser.yy"
+  case 727:
+
+/* Line 1806 of yacc.c  */
+#line 2700 "parser.yy"
     { (yyval.decl) = DeclarationNode::newArray( (yyvsp[(5) - (7)].en), (yyvsp[(4) - (7)].decl)->addQualifiers( (yyvsp[(3) - (7)].decl) ), true ); }
     break;
 
-  case 728:
-
-/* Line 1806 of yacc.c  */
-#line 2724 "parser.yy"
+  case 729:
+
+/* Line 1806 of yacc.c  */
+#line 2727 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addQualifiers( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 732:
-
-/* Line 1806 of yacc.c  */
-#line 2735 "parser.yy"
+  case 733:
+
+/* Line 1806 of yacc.c  */
+#line 2738 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 733:
-
-/* Line 1806 of yacc.c  */
-#line 2737 "parser.yy"
+  case 734:
+
+/* Line 1806 of yacc.c  */
+#line 2740 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 734:
-
-/* Line 1806 of yacc.c  */
-#line 2739 "parser.yy"
+  case 735:
+
+/* Line 1806 of yacc.c  */
+#line 2742 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 735:
-
-/* Line 1806 of yacc.c  */
-#line 2741 "parser.yy"
+  case 736:
+
+/* Line 1806 of yacc.c  */
+#line 2744 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 736:
-
-/* Line 1806 of yacc.c  */
-#line 2743 "parser.yy"
+  case 737:
+
+/* Line 1806 of yacc.c  */
+#line 2746 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewPointer( DeclarationNode::newPointer( 0 ) ); }
     break;
 
-  case 737:
-
-/* Line 1806 of yacc.c  */
-#line 2745 "parser.yy"
+  case 738:
+
+/* Line 1806 of yacc.c  */
+#line 2748 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewPointer( DeclarationNode::newPointer( (yyvsp[(1) - (3)].decl) ) ); }
     break;
 
-  case 738:
-
-/* Line 1806 of yacc.c  */
-#line 2752 "parser.yy"
+  case 739:
+
+/* Line 1806 of yacc.c  */
+#line 2755 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 739:
-
-/* Line 1806 of yacc.c  */
-#line 2754 "parser.yy"
+  case 740:
+
+/* Line 1806 of yacc.c  */
+#line 2757 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 740:
-
-/* Line 1806 of yacc.c  */
-#line 2756 "parser.yy"
+  case 741:
+
+/* Line 1806 of yacc.c  */
+#line 2759 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 741:
-
-/* Line 1806 of yacc.c  */
-#line 2758 "parser.yy"
+  case 742:
+
+/* Line 1806 of yacc.c  */
+#line 2761 "parser.yy"
     { (yyval.decl) = (yyvsp[(3) - (3)].decl)->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 742:
-
-/* Line 1806 of yacc.c  */
-#line 2760 "parser.yy"
+  case 743:
+
+/* Line 1806 of yacc.c  */
+#line 2763 "parser.yy"
     { (yyval.decl) = (yyvsp[(4) - (4)].decl)->addNewArray( (yyvsp[(3) - (4)].decl) )->addNewArray( DeclarationNode::newArray( 0, 0, false ) ); }
     break;
 
-  case 743:
-
-/* Line 1806 of yacc.c  */
-#line 2762 "parser.yy"
+  case 744:
+
+/* Line 1806 of yacc.c  */
+#line 2765 "parser.yy"
     { (yyval.decl) = (yyvsp[(2) - (2)].decl)->addNewArray( (yyvsp[(1) - (2)].decl) ); }
     break;
 
-  case 744:
-
-/* Line 1806 of yacc.c  */
-#line 2767 "parser.yy"
+  case 745:
+
+/* Line 1806 of yacc.c  */
+#line 2770 "parser.yy"
     { (yyval.decl) = DeclarationNode::newTuple( (yyvsp[(3) - (5)].decl) ); }
     break;
 
-  case 745:
-
-/* Line 1806 of yacc.c  */
-#line 2772 "parser.yy"
+  case 746:
+
+/* Line 1806 of yacc.c  */
+#line 2775 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, DeclarationNode::newTuple( 0 ), (yyvsp[(4) - (5)].decl), 0 ); }
     break;
 
-  case 746:
-
-/* Line 1806 of yacc.c  */
-#line 2774 "parser.yy"
+  case 747:
+
+/* Line 1806 of yacc.c  */
+#line 2777 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
-  case 747:
-
-/* Line 1806 of yacc.c  */
-#line 2776 "parser.yy"
+  case 748:
+
+/* Line 1806 of yacc.c  */
+#line 2779 "parser.yy"
     { (yyval.decl) = DeclarationNode::newFunction( 0, (yyvsp[(1) - (6)].decl), (yyvsp[(4) - (6)].decl), 0 ); }
     break;
 
-  case 750:
-
-/* Line 1806 of yacc.c  */
-#line 2800 "parser.yy"
+  case 751:
+
+/* Line 1806 of yacc.c  */
+#line 2803 "parser.yy"
     { (yyval.en) = 0; }
     break;
 
-  case 751:
-
-/* Line 1806 of yacc.c  */
-#line 2802 "parser.yy"
+  case 752:
+
+/* Line 1806 of yacc.c  */
+#line 2805 "parser.yy"
     { (yyval.en) = (yyvsp[(2) - (2)].en); }
     break;
@@ -9147,5 +9207,5 @@
 
 /* Line 1806 of yacc.c  */
-#line 9150 "Parser/parser.cc"
+#line 9210 "Parser/parser.cc"
       default: break;
     }
@@ -9378,5 +9438,5 @@
 
 /* Line 2067 of yacc.c  */
-#line 2805 "parser.yy"
+#line 2808 "parser.yy"
 
 // ----end of grammar----
Index: src/Parser/parser.h
===================================================================
--- src/Parser/parser.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/parser.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -59,88 +59,89 @@
      SIGNED = 277,
      UNSIGNED = 278,
-     BOOL = 279,
-     COMPLEX = 280,
-     IMAGINARY = 281,
-     TYPEOF = 282,
-     LABEL = 283,
-     ENUM = 284,
-     STRUCT = 285,
-     UNION = 286,
-     TYPE = 287,
-     FTYPE = 288,
-     DTYPE = 289,
-     CONTEXT = 290,
-     SIZEOF = 291,
-     OFFSETOF = 292,
-     ATTRIBUTE = 293,
-     EXTENSION = 294,
-     IF = 295,
-     ELSE = 296,
-     SWITCH = 297,
-     CASE = 298,
-     DEFAULT = 299,
-     DO = 300,
-     WHILE = 301,
-     FOR = 302,
-     BREAK = 303,
-     CONTINUE = 304,
-     GOTO = 305,
-     RETURN = 306,
-     CHOOSE = 307,
-     DISABLE = 308,
-     ENABLE = 309,
-     FALLTHRU = 310,
-     TRY = 311,
-     CATCH = 312,
-     CATCHRESUME = 313,
-     FINALLY = 314,
-     THROW = 315,
-     THROWRESUME = 316,
-     AT = 317,
-     ASM = 318,
-     ALIGNAS = 319,
-     ALIGNOF = 320,
-     ATOMIC = 321,
-     GENERIC = 322,
-     NORETURN = 323,
-     STATICASSERT = 324,
-     THREADLOCAL = 325,
-     IDENTIFIER = 326,
-     QUOTED_IDENTIFIER = 327,
-     TYPEDEFname = 328,
-     TYPEGENname = 329,
-     ATTR_IDENTIFIER = 330,
-     ATTR_TYPEDEFname = 331,
-     ATTR_TYPEGENname = 332,
-     INTEGERconstant = 333,
-     FLOATINGconstant = 334,
-     CHARACTERconstant = 335,
-     STRINGliteral = 336,
-     ZERO = 337,
-     ONE = 338,
-     ARROW = 339,
-     ICR = 340,
-     DECR = 341,
-     LS = 342,
-     RS = 343,
-     LE = 344,
-     GE = 345,
-     EQ = 346,
-     NE = 347,
-     ANDAND = 348,
-     OROR = 349,
-     ELLIPSIS = 350,
-     MULTassign = 351,
-     DIVassign = 352,
-     MODassign = 353,
-     PLUSassign = 354,
-     MINUSassign = 355,
-     LSassign = 356,
-     RSassign = 357,
-     ANDassign = 358,
-     ERassign = 359,
-     ORassign = 360,
-     ATassign = 361,
-     THEN = 362
+     VALIST = 279,
+     BOOL = 280,
+     COMPLEX = 281,
+     IMAGINARY = 282,
+     TYPEOF = 283,
+     LABEL = 284,
+     ENUM = 285,
+     STRUCT = 286,
+     UNION = 287,
+     OTYPE = 288,
+     FTYPE = 289,
+     DTYPE = 290,
+     TRAIT = 291,
+     SIZEOF = 292,
+     OFFSETOF = 293,
+     ATTRIBUTE = 294,
+     EXTENSION = 295,
+     IF = 296,
+     ELSE = 297,
+     SWITCH = 298,
+     CASE = 299,
+     DEFAULT = 300,
+     DO = 301,
+     WHILE = 302,
+     FOR = 303,
+     BREAK = 304,
+     CONTINUE = 305,
+     GOTO = 306,
+     RETURN = 307,
+     CHOOSE = 308,
+     DISABLE = 309,
+     ENABLE = 310,
+     FALLTHRU = 311,
+     TRY = 312,
+     CATCH = 313,
+     CATCHRESUME = 314,
+     FINALLY = 315,
+     THROW = 316,
+     THROWRESUME = 317,
+     AT = 318,
+     ASM = 319,
+     ALIGNAS = 320,
+     ALIGNOF = 321,
+     ATOMIC = 322,
+     GENERIC = 323,
+     NORETURN = 324,
+     STATICASSERT = 325,
+     THREADLOCAL = 326,
+     IDENTIFIER = 327,
+     QUOTED_IDENTIFIER = 328,
+     TYPEDEFname = 329,
+     TYPEGENname = 330,
+     ATTR_IDENTIFIER = 331,
+     ATTR_TYPEDEFname = 332,
+     ATTR_TYPEGENname = 333,
+     INTEGERconstant = 334,
+     FLOATINGconstant = 335,
+     CHARACTERconstant = 336,
+     STRINGliteral = 337,
+     ZERO = 338,
+     ONE = 339,
+     ARROW = 340,
+     ICR = 341,
+     DECR = 342,
+     LS = 343,
+     RS = 344,
+     LE = 345,
+     GE = 346,
+     EQ = 347,
+     NE = 348,
+     ANDAND = 349,
+     OROR = 350,
+     ELLIPSIS = 351,
+     MULTassign = 352,
+     DIVassign = 353,
+     MODassign = 354,
+     PLUSassign = 355,
+     MINUSassign = 356,
+     LSassign = 357,
+     RSassign = 358,
+     ANDassign = 359,
+     ERassign = 360,
+     ORassign = 361,
+     ATassign = 362,
+     THEN = 363
    };
 #endif
@@ -167,88 +168,89 @@
 #define SIGNED 277
 #define UNSIGNED 278
-#define BOOL 279
-#define COMPLEX 280
-#define IMAGINARY 281
-#define TYPEOF 282
-#define LABEL 283
-#define ENUM 284
-#define STRUCT 285
-#define UNION 286
-#define TYPE 287
-#define FTYPE 288
-#define DTYPE 289
-#define CONTEXT 290
-#define SIZEOF 291
-#define OFFSETOF 292
-#define ATTRIBUTE 293
-#define EXTENSION 294
-#define IF 295
-#define ELSE 296
-#define SWITCH 297
-#define CASE 298
-#define DEFAULT 299
-#define DO 300
-#define WHILE 301
-#define FOR 302
-#define BREAK 303
-#define CONTINUE 304
-#define GOTO 305
-#define RETURN 306
-#define CHOOSE 307
-#define DISABLE 308
-#define ENABLE 309
-#define FALLTHRU 310
-#define TRY 311
-#define CATCH 312
-#define CATCHRESUME 313
-#define FINALLY 314
-#define THROW 315
-#define THROWRESUME 316
-#define AT 317
-#define ASM 318
-#define ALIGNAS 319
-#define ALIGNOF 320
-#define ATOMIC 321
-#define GENERIC 322
-#define NORETURN 323
-#define STATICASSERT 324
-#define THREADLOCAL 325
-#define IDENTIFIER 326
-#define QUOTED_IDENTIFIER 327
-#define TYPEDEFname 328
-#define TYPEGENname 329
-#define ATTR_IDENTIFIER 330
-#define ATTR_TYPEDEFname 331
-#define ATTR_TYPEGENname 332
-#define INTEGERconstant 333
-#define FLOATINGconstant 334
-#define CHARACTERconstant 335
-#define STRINGliteral 336
-#define ZERO 337
-#define ONE 338
-#define ARROW 339
-#define ICR 340
-#define DECR 341
-#define LS 342
-#define RS 343
-#define LE 344
-#define GE 345
-#define EQ 346
-#define NE 347
-#define ANDAND 348
-#define OROR 349
-#define ELLIPSIS 350
-#define MULTassign 351
-#define DIVassign 352
-#define MODassign 353
-#define PLUSassign 354
-#define MINUSassign 355
-#define LSassign 356
-#define RSassign 357
-#define ANDassign 358
-#define ERassign 359
-#define ORassign 360
-#define ATassign 361
-#define THEN 362
+#define VALIST 279
+#define BOOL 280
+#define COMPLEX 281
+#define IMAGINARY 282
+#define TYPEOF 283
+#define LABEL 284
+#define ENUM 285
+#define STRUCT 286
+#define UNION 287
+#define OTYPE 288
+#define FTYPE 289
+#define DTYPE 290
+#define TRAIT 291
+#define SIZEOF 292
+#define OFFSETOF 293
+#define ATTRIBUTE 294
+#define EXTENSION 295
+#define IF 296
+#define ELSE 297
+#define SWITCH 298
+#define CASE 299
+#define DEFAULT 300
+#define DO 301
+#define WHILE 302
+#define FOR 303
+#define BREAK 304
+#define CONTINUE 305
+#define GOTO 306
+#define RETURN 307
+#define CHOOSE 308
+#define DISABLE 309
+#define ENABLE 310
+#define FALLTHRU 311
+#define TRY 312
+#define CATCH 313
+#define CATCHRESUME 314
+#define FINALLY 315
+#define THROW 316
+#define THROWRESUME 317
+#define AT 318
+#define ASM 319
+#define ALIGNAS 320
+#define ALIGNOF 321
+#define ATOMIC 322
+#define GENERIC 323
+#define NORETURN 324
+#define STATICASSERT 325
+#define THREADLOCAL 326
+#define IDENTIFIER 327
+#define QUOTED_IDENTIFIER 328
+#define TYPEDEFname 329
+#define TYPEGENname 330
+#define ATTR_IDENTIFIER 331
+#define ATTR_TYPEDEFname 332
+#define ATTR_TYPEGENname 333
+#define INTEGERconstant 334
+#define FLOATINGconstant 335
+#define CHARACTERconstant 336
+#define STRINGliteral 337
+#define ZERO 338
+#define ONE 339
+#define ARROW 340
+#define ICR 341
+#define DECR 342
+#define LS 343
+#define RS 344
+#define LE 345
+#define GE 346
+#define EQ 347
+#define NE 348
+#define ANDAND 349
+#define OROR 350
+#define ELLIPSIS 351
+#define MULTassign 352
+#define DIVassign 353
+#define MODassign 354
+#define PLUSassign 355
+#define MINUSassign 356
+#define LSassign 357
+#define RSassign 358
+#define ANDassign 359
+#define ERassign 360
+#define ORassign 361
+#define ATassign 362
+#define THEN 363
 
 
@@ -260,5 +262,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 110 "parser.yy"
+#line 111 "parser.yy"
 
 	Token tok;
@@ -277,5 +279,5 @@
 
 /* Line 2068 of yacc.c  */
-#line 280 "Parser/parser.h"
+#line 282 "Parser/parser.h"
 } YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
Index: src/Parser/parser.yy
===================================================================
--- src/Parser/parser.yy	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/Parser/parser.yy	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat Sep  1 20:22:55 2001
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Feb  1 18:22:42 2016
-// Update Count     : 1483
+// Last Modified On : Wed Mar  2 17:24:45 2016
+// Update Count     : 1495
 // 
 
@@ -74,8 +74,9 @@
 %token FORALL LVALUE									// CFA
 %token VOID CHAR SHORT INT LONG FLOAT DOUBLE SIGNED UNSIGNED
+%token VALIST											// GCC
 %token BOOL COMPLEX IMAGINARY							// C99
 %token TYPEOF LABEL										// GCC
 %token ENUM STRUCT UNION
-%token TYPE FTYPE DTYPE CONTEXT							// CFA
+%token OTYPE FTYPE DTYPE TRAIT						// CFA
 %token SIZEOF OFFSETOF
 %token ATTRIBUTE EXTENSION								// GCC
@@ -171,5 +172,5 @@
 %type<decl> basic_declaration_specifier basic_type_name basic_type_specifier direct_type_name indirect_type_name
 
-%type<decl> context_declaration context_declaration_list context_declaring_list context_specifier
+%type<decl> trait_declaration trait_declaration_list trait_declaring_list trait_specifier
 
 %type<decl> declaration declaration_list declaration_list_opt declaration_qualifier_list
@@ -197,5 +198,5 @@
 %type<decl> new_array_parameter_1st_dimension
 
-%type<decl> new_context_declaring_list new_declaration new_field_declaring_list
+%type<decl> new_trait_declaring_list new_declaration new_field_declaring_list
 %type<decl> new_function_declaration new_function_return new_function_specifier
 
@@ -448,5 +449,5 @@
 		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::SizeOf ), new TypeValueNode( $3 )); }
 	| OFFSETOF '(' type_name_no_function ',' no_attr_identifier ')'
-	{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
+		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::OffsetOf ), new TypeValueNode( $3 ), new VarRefNode( $5 )); }
 	| ATTR_IDENTIFIER
 		{ $$ = new CompositeExprNode( new OperatorNode( OperatorNode::Attr ), new VarRefNode( $1 )); }
@@ -1020,5 +1021,5 @@
 	| new_function_declaration pop ';'
 	| type_declaring_list pop ';'
-	| context_specifier pop ';'
+	| trait_specifier pop ';'
 	;
 
@@ -1345,4 +1346,6 @@
 	| IMAGINARY											// C99
 		{ $$ = DeclarationNode::newBasicType( DeclarationNode::Imaginary ); }
+	| VALIST											// GCC, __builtin_va_list
+		{ $$ = DeclarationNode::newBuiltinType( DeclarationNode::Valist ); }
 	;
 
@@ -1803,5 +1806,5 @@
 
 type_class:												// CFA
-	TYPE
+	OTYPE
 		{ $$ = DeclarationNode::Type; }
 	| DTYPE
@@ -1821,10 +1824,10 @@
 	'|' no_attr_identifier_or_type_name '(' type_name_list ')'
 		{
-			typedefTable.openContext( *$2 );
-			$$ = DeclarationNode::newContextUse( $2, $4 );
-		}
-	| '|' '{' push context_declaration_list '}'
+			typedefTable.openTrait( *$2 );
+			$$ = DeclarationNode::newTraitUse( $2, $4 );
+		}
+	| '|' '{' push trait_declaration_list '}'
 		{ $$ = $4; }
-	| '|' '(' push type_parameter_list pop ')' '{' push context_declaration_list '}' '(' type_name_list ')'
+	| '|' '(' push type_parameter_list pop ')' '{' push trait_declaration_list '}' '(' type_name_list ')'
 		{ $$ = 0; }
 	;
@@ -1841,7 +1844,7 @@
 
 type_declaring_list:									// CFA
-	TYPE type_declarator
-		{ $$ = $2; }
-	| storage_class_list TYPE type_declarator
+	OTYPE type_declarator
+		{ $$ = $2; }
+	| storage_class_list OTYPE type_declarator
 		{ $$ = $3->addQualifiers( $1 ); }
 	| type_declaring_list ',' type_declarator
@@ -1869,35 +1872,35 @@
 	;
 
-context_specifier:										// CFA
-	CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
+trait_specifier:										// CFA
+	TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{' '}'
 		{
 			typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
-			$$ = DeclarationNode::newContext( $2, $5, 0 );
-		}
-	| CONTEXT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'
-		{
-			typedefTable.enterContext( *$2 );
+			$$ = DeclarationNode::newTrait( $2, $5, 0 );
+		}
+	| TRAIT no_attr_identifier_or_type_name '(' push type_parameter_list pop ')' '{'
+		{
+			typedefTable.enterTrait( *$2 );
 			typedefTable.enterScope();
 		}
-	  context_declaration_list '}'
-		{
-			typedefTable.leaveContext();
+	  trait_declaration_list '}'
+		{
+			typedefTable.leaveTrait();
 			typedefTable.addToEnclosingScope( *$2, TypedefTable::ID );
-			$$ = DeclarationNode::newContext( $2, $5, $10 );
-		}
-	;
-
-context_declaration_list:								// CFA
-	context_declaration
-	| context_declaration_list push context_declaration
+			$$ = DeclarationNode::newTrait( $2, $5, $10 );
+		}
+	;
+
+trait_declaration_list:								// CFA
+	trait_declaration
+	| trait_declaration_list push trait_declaration
 		{ $$ = $1->appendList( $3 ); }
 	;
 
-context_declaration:									// CFA
-	new_context_declaring_list pop ';'
-	| context_declaring_list pop ';'
-	;
-
-new_context_declaring_list:								// CFA
+trait_declaration:									// CFA
+	new_trait_declaring_list pop ';'
+	| trait_declaring_list pop ';'
+	;
+
+new_trait_declaring_list:								// CFA
 	new_variable_specifier
 		{
@@ -1910,5 +1913,5 @@
 			$$ = $1;
 		}
-	| new_context_declaring_list pop ',' push identifier_or_type_name
+	| new_trait_declaring_list pop ',' push identifier_or_type_name
 		{
 			typedefTable.addToEnclosingScope2( *$5, TypedefTable::ID );
@@ -1917,5 +1920,5 @@
 	;
 
-context_declaring_list:									// CFA
+trait_declaring_list:									// CFA
 	type_specifier declarator
 		{
@@ -1923,5 +1926,5 @@
 			$$ = $2->addType( $1 );
 		}
-	| context_declaring_list pop ',' push declarator
+	| trait_declaring_list pop ',' push declarator
 		{
 			typedefTable.addToEnclosingScope2( TypedefTable::ID );
Index: src/ResolvExpr/AdjustExprType.cc
===================================================================
--- src/ResolvExpr/AdjustExprType.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/AdjustExprType.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sat May 16 23:41:42 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat May 16 23:54:02 2015
-// Update Count     : 3
+// Last Modified On : Wed Mar  2 17:34:53 2016
+// Update Count     : 4
 // 
 
@@ -33,5 +33,5 @@
 		virtual Type* mutate( UnionInstType *aggregateUseType );
 		virtual Type* mutate( EnumInstType *aggregateUseType );
-		virtual Type* mutate( ContextInstType *aggregateUseType );
+		virtual Type* mutate( TraitInstType *aggregateUseType );
 		virtual Type* mutate( TypeInstType *aggregateUseType );
 		virtual Type* mutate( TupleType *tupleType );
@@ -87,5 +87,5 @@
 	}
 
-	Type *AdjustExprType::mutate( ContextInstType *aggregateUseType ) {
+	Type *AdjustExprType::mutate( TraitInstType *aggregateUseType ) {
 		return aggregateUseType;
 	}
Index: src/ResolvExpr/CommonType.cc
===================================================================
--- src/ResolvExpr/CommonType.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/CommonType.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 06:59:27 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 07:04:50 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:35:34 2016
+// Update Count     : 3
 //
 
@@ -35,5 +35,5 @@
 		virtual void visit( UnionInstType *aggregateUseType );
 		virtual void visit( EnumInstType *aggregateUseType );
-		virtual void visit( ContextInstType *aggregateUseType );
+		virtual void visit( TraitInstType *aggregateUseType );
 		virtual void visit( TypeInstType *aggregateUseType );
 		virtual void visit( TupleType *tupleType );
@@ -186,5 +186,5 @@
 	}
 
-	void CommonType::visit( ContextInstType *aggregateUseType ) {
+	void CommonType::visit( TraitInstType *aggregateUseType ) {
 	}
 
Index: src/ResolvExpr/ConversionCost.cc
===================================================================
--- src/ResolvExpr/ConversionCost.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/ConversionCost.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 07:06:19 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 07:22:19 2015
-// Update Count     : 4
+// Last Modified On : Wed Mar  2 17:35:46 2016
+// Update Count     : 6
 //
 
@@ -206,5 +206,5 @@
 	}
 
-	void ConversionCost::visit(ContextInstType *inst) {
+	void ConversionCost::visit(TraitInstType *inst) {
 	}
 
@@ -249,5 +249,5 @@
 
 	void ConversionCost::visit(VarArgsType *varArgsType) {
-		if ( VarArgsType *destAsVarArgs = dynamic_cast< VarArgsType* >( dest ) ) {
+		if ( dynamic_cast< VarArgsType* >( dest ) ) {
 			cost = Cost::zero;
 		}
Index: src/ResolvExpr/ConversionCost.h
===================================================================
--- src/ResolvExpr/ConversionCost.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/ConversionCost.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 09:37:28 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 09:39:23 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:35:56 2016
+// Update Count     : 3
 //
 
@@ -37,5 +37,5 @@
 		virtual void visit(UnionInstType *aggregateUseType);
 		virtual void visit(EnumInstType *aggregateUseType);
-		virtual void visit(ContextInstType *aggregateUseType);
+		virtual void visit(TraitInstType *aggregateUseType);
 		virtual void visit(TypeInstType *aggregateUseType);
 		virtual void visit(TupleType *tupleType);
Index: src/ResolvExpr/PtrsAssignable.cc
===================================================================
--- src/ResolvExpr/PtrsAssignable.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/PtrsAssignable.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 11:44:11 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Mon Sep 21 14:34:58 2015
-// Update Count     : 7
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:36:05 2016
+// Update Count     : 8
 //
 
@@ -35,5 +35,5 @@
 		virtual void visit( UnionInstType *inst );
 		virtual void visit( EnumInstType *inst );
-		virtual void visit( ContextInstType *inst );
+		virtual void visit( TraitInstType *inst );
 		virtual void visit( TypeInstType *inst );
 		virtual void visit( TupleType *tupleType );
@@ -101,5 +101,5 @@
 	}
 
-	void PtrsAssignable::visit( ContextInstType *inst ) {
+	void PtrsAssignable::visit( TraitInstType *inst ) {
 		// I definitely don't think we should be doing anything here
 	}
Index: src/ResolvExpr/PtrsCastable.cc
===================================================================
--- src/ResolvExpr/PtrsCastable.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/PtrsCastable.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 11:48:00 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Mon Oct 05 14:49:12 2015
-// Update Count     : 7
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:36:18 2016
+// Update Count     : 8
 //
 
@@ -36,5 +36,5 @@
 		virtual void visit(UnionInstType *inst);
 		virtual void visit(EnumInstType *inst);
-		virtual void visit(ContextInstType *inst);
+		virtual void visit(TraitInstType *inst);
 		virtual void visit(TypeInstType *inst);
 		virtual void visit(TupleType *tupleType);
@@ -129,5 +129,5 @@
 	}
 
-	void PtrsCastable::visit(ContextInstType *inst) {
+	void PtrsCastable::visit(TraitInstType *inst) {
 		// I definitely don't think we should be doing anything here
 	}
Index: src/ResolvExpr/RenameVars.cc
===================================================================
--- src/ResolvExpr/RenameVars.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/RenameVars.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 12:05:18 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun  8 14:51:35 2015
-// Update Count     : 4
+// Last Modified On : Wed Mar  2 17:36:32 2016
+// Update Count     : 5
 //
 
@@ -86,5 +86,5 @@
 	}
 
-	void RenameVars::visit( ContextInstType *aggregateUseType ) {
+	void RenameVars::visit( TraitInstType *aggregateUseType ) {
 		typeBefore( aggregateUseType );
 		acceptAll( aggregateUseType->get_parameters(), *this );
Index: src/ResolvExpr/RenameVars.h
===================================================================
--- src/ResolvExpr/RenameVars.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/RenameVars.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 12:10:28 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 12:11:53 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:36:39 2016
+// Update Count     : 3
 //
 
@@ -40,5 +40,5 @@
 		virtual void visit( UnionInstType *aggregateUseType );
 		virtual void visit( EnumInstType *aggregateUseType );
-		virtual void visit( ContextInstType *aggregateUseType );
+		virtual void visit( TraitInstType *aggregateUseType );
 		virtual void visit( TypeInstType *aggregateUseType );
 		virtual void visit( TupleType *tupleType );
Index: src/ResolvExpr/Unify.cc
===================================================================
--- src/ResolvExpr/Unify.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/ResolvExpr/Unify.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 12:27:10 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Sep 02 14:43:22 2015
-// Update Count     : 36
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:37:05 2016
+// Update Count     : 37
 //
 
@@ -56,5 +56,5 @@
 		virtual void visit(UnionInstType *aggregateUseType);
 		virtual void visit(EnumInstType *aggregateUseType);
-		virtual void visit(ContextInstType *aggregateUseType);
+		virtual void visit(TraitInstType *aggregateUseType);
 		virtual void visit(TypeInstType *aggregateUseType);
 		virtual void visit(TupleType *tupleType);
@@ -541,5 +541,5 @@
 	}
 
-	void Unify::visit(ContextInstType *contextInst) {
+	void Unify::visit(TraitInstType *contextInst) {
 		handleRefType( contextInst, type2 );
 	}
Index: src/SymTab/AggregateTable.h
===================================================================
--- src/SymTab/AggregateTable.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/AggregateTable.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 16:17:26 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 16:19:29 2015
-// Update Count     : 4
+// Last Modified On : Wed Mar  2 17:31:00 2016
+// Update Count     : 5
 //
 
@@ -42,5 +42,5 @@
 	typedef StackTable< EnumDecl, AggregateTableConflictFunction< EnumDecl > > EnumTable;
 	typedef StackTable< UnionDecl, AggregateTableConflictFunction< UnionDecl > > UnionTable;
-	typedef StackTable< ContextDecl, AggregateTableConflictFunction< ContextDecl > > ContextTable;
+	typedef StackTable< TraitDecl, AggregateTableConflictFunction< TraitDecl > > TraitTable;
 } // namespace SymTab
 
Index: src/SymTab/FixFunction.cc
===================================================================
--- src/SymTab/FixFunction.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/FixFunction.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 16:19:49 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 16:22:54 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:31:10 2016
+// Update Count     : 3
 //
 
@@ -61,5 +61,5 @@
 	}
 
-	Type * FixFunction::mutate(ContextInstType *aggregateUseType) {
+	Type * FixFunction::mutate(TraitInstType *aggregateUseType) {
 		return aggregateUseType;
 	}
Index: src/SymTab/FixFunction.h
===================================================================
--- src/SymTab/FixFunction.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/FixFunction.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 17:02:08 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 17:03:43 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:34:06 2016
+// Update Count     : 3
 //
 
@@ -38,5 +38,5 @@
 		virtual Type* mutate(UnionInstType *aggregateUseType);
 		virtual Type* mutate(EnumInstType *aggregateUseType);
-		virtual Type* mutate(ContextInstType *aggregateUseType);
+		virtual Type* mutate(TraitInstType *aggregateUseType);
 		virtual Type* mutate(TypeInstType *aggregateUseType);
 		virtual Type* mutate(TupleType *tupleType);
Index: src/SymTab/ImplementationType.cc
===================================================================
--- src/SymTab/ImplementationType.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/ImplementationType.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 21:32:01 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun May 17 21:34:40 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:31:20 2016
+// Update Count     : 3
 //
 
@@ -37,5 +37,5 @@
 		virtual void visit(UnionInstType *aggregateUseType);
 		virtual void visit(EnumInstType *aggregateUseType);
-		virtual void visit(ContextInstType *aggregateUseType);
+		virtual void visit(TraitInstType *aggregateUseType);
 		virtual void visit(TypeInstType *aggregateUseType);
 		virtual void visit(TupleType *tupleType);
@@ -96,5 +96,5 @@
 	}
 
-	void ImplementationType::visit(ContextInstType *aggregateUseType) {
+	void ImplementationType::visit(TraitInstType *aggregateUseType) {
 	}
 
Index: src/SymTab/Indexer.cc
===================================================================
--- src/SymTab/Indexer.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/Indexer.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 21:37:33 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Aug 05 13:52:42 2015
-// Update Count     : 10
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:31:29 2016
+// Update Count     : 11
 //
 
@@ -143,5 +143,5 @@
 	}
 
-	void Indexer::visit( ContextDecl *aggregateDecl ) {
+	void Indexer::visit( TraitDecl *aggregateDecl ) {
 		enterScope();
 		acceptAll( aggregateDecl->get_parameters(), *this );
@@ -293,5 +293,5 @@
 
 
-	void Indexer::visit( ContextInstType *contextInst ) {
+	void Indexer::visit( TraitInstType *contextInst ) {
 		acceptAll( contextInst->get_parameters(), *this );
 		acceptAll( contextInst->get_members(), *this );
@@ -350,5 +350,5 @@
 	}
 
-	ContextDecl  * Indexer::lookupContext( const std::string &id ) const {
+	TraitDecl  * Indexer::lookupTrait( const std::string &id ) const {
 		return contextTable.lookup( id );
 	}
Index: src/SymTab/Indexer.h
===================================================================
--- src/SymTab/Indexer.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/Indexer.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Sun May 17 21:38:55 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Thu Sep 17 16:05:38 2015
-// Update Count     : 5
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:34:14 2016
+// Update Count     : 6
 //
 
@@ -39,5 +39,5 @@
 		virtual void visit( UnionDecl *aggregateDecl );
 		virtual void visit( EnumDecl *aggregateDecl );
-		virtual void visit( ContextDecl *aggregateDecl );
+		virtual void visit( TraitDecl *aggregateDecl );
 
 		virtual void visit( CompoundStmt *compoundStmt );
@@ -67,5 +67,5 @@
 		virtual void visit( UntypedValofExpr *valofExpr );
 
-		virtual void visit( ContextInstType *contextInst );
+		virtual void visit( TraitInstType *contextInst );
 		virtual void visit( StructInstType *contextInst );
 		virtual void visit( UnionInstType *contextInst );
@@ -84,5 +84,5 @@
 		EnumDecl *lookupEnum( const std::string &id ) const;
 		UnionDecl *lookupUnion( const std::string &id ) const;
-		ContextDecl *lookupContext( const std::string &id ) const;
+		TraitDecl *lookupTrait( const std::string &id ) const;
   
 		void print( std::ostream &os, int indent = 0 ) const;
@@ -93,5 +93,5 @@
 		EnumTable enumTable;
 		UnionTable unionTable;
-		ContextTable contextTable;
+		TraitTable contextTable;
   
 		bool doDebug;					// display debugging trace
Index: src/SymTab/Validate.cc
===================================================================
--- src/SymTab/Validate.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SymTab/Validate.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 21:50:04 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jan 27 22:03:12 2016
-// Update Count     : 225
+// Last Modified On : Wed Mar  2 17:31:39 2016
+// Update Count     : 226
 //
 
@@ -101,5 +101,5 @@
 		virtual void visit( StructInstType *structInst );
 		virtual void visit( UnionInstType *unionInst );
-		virtual void visit( ContextInstType *contextInst );
+		virtual void visit( TraitInstType *contextInst );
 		virtual void visit( StructDecl *structDecl );
 		virtual void visit( UnionDecl *unionDecl );
@@ -137,5 +137,5 @@
 		virtual void visit( UnionDecl *structDecl );
 		virtual void visit( TypeDecl *typeDecl );
-		virtual void visit( ContextDecl *ctxDecl );
+		virtual void visit( TraitDecl *ctxDecl );
 		virtual void visit( FunctionDecl *functionDecl );
 
@@ -192,5 +192,5 @@
 		virtual Declaration *mutate( UnionDecl * unionDecl );
 		virtual Declaration *mutate( EnumDecl * enumDecl );
-		virtual Declaration *mutate( ContextDecl * contextDecl );
+		virtual Declaration *mutate( TraitDecl * contextDecl );
 
 		template<typename AggDecl>
@@ -404,7 +404,7 @@
 	}
 
-	void Pass2::visit( ContextInstType *contextInst ) {
+	void Pass2::visit( TraitInstType *contextInst ) {
 		Parent::visit( contextInst );
-		ContextDecl *ctx = indexer->lookupContext( contextInst->get_name() );
+		TraitDecl *ctx = indexer->lookupTrait( contextInst->get_name() );
 		if ( ! ctx ) {
 			throw SemanticError( "use of undeclared context " + contextInst->get_name() );
@@ -412,5 +412,5 @@
 		for ( std::list< TypeDecl * >::const_iterator i = ctx->get_parameters().begin(); i != ctx->get_parameters().end(); ++i ) {
 			for ( std::list< DeclarationWithType * >::const_iterator assert = (*i )->get_assertions().begin(); assert != (*i )->get_assertions().end(); ++assert ) {
-				if ( ContextInstType *otherCtx = dynamic_cast< ContextInstType * >(*assert ) ) {
+				if ( TraitInstType *otherCtx = dynamic_cast< TraitInstType * >(*assert ) ) {
 					cloneAll( otherCtx->get_members(), contextInst->get_members() );
 				} else {
@@ -476,5 +476,5 @@
 			while ( ! toBeDone.empty() ) {
 				for ( std::list< DeclarationWithType * >::iterator assertion = toBeDone.begin(); assertion != toBeDone.end(); ++assertion ) {
-					if ( ContextInstType *ctx = dynamic_cast< ContextInstType * >( (*assertion )->get_type() ) ) {
+					if ( TraitInstType *ctx = dynamic_cast< TraitInstType * >( (*assertion )->get_type() ) ) {
 						for ( std::list< Declaration * >::const_iterator i = ctx->get_members().begin(); i != ctx->get_members().end(); ++i ) {
 							DeclarationWithType *dwt = dynamic_cast< DeclarationWithType * >( *i );
@@ -851,5 +851,5 @@
 	}
 
-	void AutogenerateRoutines::visit( ContextDecl *) {
+	void AutogenerateRoutines::visit( TraitDecl *) {
 		// ensure that we don't add assignment ops for types defined as part of the context
 	}
@@ -1075,5 +1075,5 @@
 	}
 
-		Declaration *EliminateTypedef::mutate( ContextDecl * contextDecl ) {
+		Declaration *EliminateTypedef::mutate( TraitDecl * contextDecl ) {
 		Mutator::mutate( contextDecl );
 		return handleAggregate( contextDecl );
Index: src/SynTree/AggregateDecl.cc
===================================================================
--- src/SynTree/AggregateDecl.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/AggregateDecl.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Sun May 17 23:56:39 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jun 13 08:12:49 2015
-// Update Count     : 6
+// Last Modified On : Wed Mar  2 17:28:00 2016
+// Update Count     : 7
 //
 
@@ -64,5 +64,5 @@
 std::string EnumDecl::typeString() const { return "enum"; }
 
-std::string ContextDecl::typeString() const { return "context"; }
+std::string TraitDecl::typeString() const { return "context"; }
 
 // Local Variables: //
Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/Declaration.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Wed Dec 09 14:08:22 2015
-// Update Count     : 32
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:28:11 2016
+// Update Count     : 33
 //
 
@@ -246,11 +246,11 @@
 };
 
-class ContextDecl : public AggregateDecl {
-	typedef AggregateDecl Parent;
-  public:
-	ContextDecl( const std::string &name ) : Parent( name ) {}
-	ContextDecl( const ContextDecl &other ) : Parent( other ) {}
-
-	virtual ContextDecl *clone() const { return new ContextDecl( *this ); }
+class TraitDecl : public AggregateDecl {
+	typedef AggregateDecl Parent;
+  public:
+	TraitDecl( const std::string &name ) : Parent( name ) {}
+	TraitDecl( const TraitDecl &other ) : Parent( other ) {}
+
+	virtual TraitDecl *clone() const { return new TraitDecl( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Declaration *acceptMutator( Mutator &m ) { return m.mutate( this ); }
Index: src/SynTree/Mutator.cc
===================================================================
--- src/SynTree/Mutator.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/Mutator.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sat Jul 25 19:21:33 2015
-// Update Count     : 11
+// Last Modified On : Wed Mar  2 17:28:20 2016
+// Update Count     : 12
 //
 
@@ -63,5 +63,5 @@
 }
 
-Declaration *Mutator::mutate( ContextDecl *aggregateDecl ) {
+Declaration *Mutator::mutate( TraitDecl *aggregateDecl ) {
 	handleAggregateDecl( aggregateDecl );
 	return aggregateDecl;
@@ -387,5 +387,5 @@
 }
 
-Type *Mutator::mutate( ContextInstType *aggregateUseType ) {
+Type *Mutator::mutate( TraitInstType *aggregateUseType ) {
 	handleReferenceToType( aggregateUseType );
 	mutateAll( aggregateUseType->get_members(), *this );
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/Mutator.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Nov 19 22:26:16 2015
-// Update Count     : 8
+// Last Modified On : Wed Mar  2 17:33:11 2016
+// Update Count     : 9
 //
 #include <cassert>
@@ -31,5 +31,5 @@
 	virtual Declaration* mutate( UnionDecl *aggregateDecl );
 	virtual Declaration* mutate( EnumDecl *aggregateDecl );
-	virtual Declaration* mutate( ContextDecl *aggregateDecl );
+	virtual Declaration* mutate( TraitDecl *aggregateDecl );
 	virtual TypeDecl* mutate( TypeDecl *typeDecl );
 	virtual Declaration* mutate( TypedefDecl *typeDecl );
@@ -85,5 +85,5 @@
 	virtual Type* mutate( UnionInstType *aggregateUseType );
 	virtual Type* mutate( EnumInstType *aggregateUseType );
-	virtual Type* mutate( ContextInstType *aggregateUseType );
+	virtual Type* mutate( TraitInstType *aggregateUseType );
 	virtual Type* mutate( TypeInstType *aggregateUseType );
 	virtual Type* mutate( TupleType *tupleType );
Index: src/SynTree/ReferenceToType.cc
===================================================================
--- src/SynTree/ReferenceToType.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/ReferenceToType.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Sun Jun  7 08:31:48 2015
-// Update Count     : 4
+// Last Modified On : Wed Mar  2 17:28:51 2016
+// Update Count     : 5
 //
 
@@ -83,11 +83,11 @@
 std::string EnumInstType::typeString() const { return "enum"; }
 
-std::string ContextInstType::typeString() const { return "context"; }
+std::string TraitInstType::typeString() const { return "context"; }
 
-ContextInstType::ContextInstType( const ContextInstType &other ) : Parent( other ) {
+TraitInstType::TraitInstType( const TraitInstType &other ) : Parent( other ) {
 	cloneAll( other.members, members );
 }
 
-ContextInstType::~ContextInstType() {
+TraitInstType::~TraitInstType() {
 	deleteAll( members );
 }
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/SynTree.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Thu Jul 23 23:25:04 2015
-// Update Count     : 3
+// Last Modified On : Wed Mar  2 17:29:00 2016
+// Update Count     : 4
 //
 
@@ -30,5 +30,5 @@
 class UnionDecl;
 class EnumDecl;
-class ContextDecl;
+class TraitDecl;
 class NamedTypeDecl;
 class TypeDecl;
@@ -92,5 +92,5 @@
 class UnionInstType;
 class EnumInstType;
-class ContextInstType;
+class TraitInstType;
 class TypeInstType;
 class TupleType;
Index: src/SynTree/Type.h
===================================================================
--- src/SynTree/Type.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/Type.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Richard C. Bilson
 // Created On       : Mon May 18 07:44:20 2015
-// Last Modified By : Rob Schluntz
-// Last Modified On : Fri Dec 18 14:46:18 2015
-// Update Count     : 18
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:29:08 2016
+// Update Count     : 21
 //
 
@@ -296,14 +296,14 @@
 };
 
-class ContextInstType : public ReferenceToType {
+class TraitInstType : public ReferenceToType {
 	typedef ReferenceToType Parent;
   public:
-	ContextInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {}
-	ContextInstType( const ContextInstType &other );
-	~ContextInstType();
+	TraitInstType( const Type::Qualifiers &tq, const std::string &name ) : Parent( tq, name ) {}
+	TraitInstType( const TraitInstType &other );
+	~TraitInstType();
 
 	std::list< Declaration* >& get_members() { return members; }
 
-	virtual ContextInstType *clone() const { return new ContextInstType( *this ); }
+	virtual TraitInstType *clone() const { return new TraitInstType( *this ); }
 	virtual void accept( Visitor &v ) { v.visit( this ); }
 	virtual Type *acceptMutator( Mutator &m ) { return m.mutate( this ); }
@@ -402,6 +402,7 @@
 /// Represents the GCC built-in varargs type
 class VarArgsType : public Type {
+  public:
 	VarArgsType();
-	VarArgsType( Type::Qualifiers &tq );
+	VarArgsType( Type::Qualifiers tq );
 
 	virtual VarArgsType *clone() const { return new VarArgsType( *this ); }
Index: src/SynTree/TypeSubstitution.cc
===================================================================
--- src/SynTree/TypeSubstitution.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/TypeSubstitution.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 18 11:10:04 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 17:29:15 2016
+// Update Count     : 3
 //
 
@@ -190,5 +190,5 @@
 }
 
-Type * TypeSubstitution::mutate( ContextInstType *aggregateUseType ) {
+Type * TypeSubstitution::mutate( TraitInstType *aggregateUseType ) {
 	return handleType( aggregateUseType );
 }
Index: src/SynTree/TypeSubstitution.h
===================================================================
--- src/SynTree/TypeSubstitution.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/TypeSubstitution.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon May 18 11:12:30 2015
-// Update Count     : 1
+// Last Modified On : Wed Mar  2 17:33:19 2016
+// Update Count     : 2
 //
 
@@ -72,5 +72,5 @@
 	virtual Type* mutate(UnionInstType *aggregateUseType);
 	virtual Type* mutate(EnumInstType *aggregateUseType);
-	virtual Type* mutate(ContextInstType *aggregateUseType);
+	virtual Type* mutate(TraitInstType *aggregateUseType);
 	virtual Type* mutate(TupleType *tupleType);
 	virtual Type* mutate(VarArgsType *varArgsType);
Index: src/SynTree/VarArgsType.cc
===================================================================
--- src/SynTree/VarArgsType.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/VarArgsType.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -9,7 +9,7 @@
 // Author           : Aaron B. Moss
 // Created On       : Thu Feb 25 16:34:00 2016
-// Last Modified By : Aaron B. Moss
-// Last Modified On : Thu Feb 25 16:34:00 2016
-// Update Count     : 1
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 17:10:40 2016
+// Update Count     : 2
 //
 
@@ -18,5 +18,5 @@
 VarArgsType::VarArgsType() : Type( Type::Qualifiers() ) {}
 
-VarArgsType::VarArgsType( Type::Qualifiers &tq ) : Type( tq ) {}
+VarArgsType::VarArgsType( Type::Qualifiers tq ) : Type( tq ) {}
 
 void VarArgsType::print( std::ostream &os, int indent ) const {
Index: src/SynTree/Visitor.cc
===================================================================
--- src/SynTree/Visitor.cc	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/Visitor.cc	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Jul 24 16:11:05 2015
-// Update Count     : 15
+// Last Modified On : Wed Mar  2 17:29:23 2016
+// Update Count     : 16
 //
 
@@ -56,5 +56,5 @@
 }
 
-void Visitor::visit( ContextDecl *aggregateDecl ) {
+void Visitor::visit( TraitDecl *aggregateDecl ) {
 	visit( static_cast< AggregateDecl* >( aggregateDecl ) );
 }
@@ -326,5 +326,5 @@
 }
 
-void Visitor::visit( ContextInstType *aggregateUseType ) {
+void Visitor::visit( TraitInstType *aggregateUseType ) {
 	visit( static_cast< ReferenceToType * >( aggregateUseType ) );
 	acceptAll( aggregateUseType->get_members(), *this );
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/SynTree/Visitor.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jan 25 21:20:44 2016
-// Update Count     : 5
+// Last Modified On : Wed Mar  2 17:33:35 2016
+// Update Count     : 6
 //
 
@@ -31,5 +31,5 @@
 	virtual void visit( UnionDecl *aggregateDecl );
 	virtual void visit( EnumDecl *aggregateDecl );
-	virtual void visit( ContextDecl *aggregateDecl );
+	virtual void visit( TraitDecl *aggregateDecl );
 	virtual void visit( TypeDecl *typeDecl );
 	virtual void visit( TypedefDecl *typeDecl );
@@ -85,5 +85,5 @@
 	virtual void visit( UnionInstType *aggregateUseType );
 	virtual void visit( EnumInstType *aggregateUseType );
-	virtual void visit( ContextInstType *aggregateUseType );
+	virtual void visit( TraitInstType *aggregateUseType );
 	virtual void visit( TypeInstType *aggregateUseType );
 	virtual void visit( TupleType *tupleType );
Index: src/driver/Makefile.in
===================================================================
--- src/driver/Makefile.in	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/driver/Makefile.in	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -196,7 +196,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/driver/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/driver/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/driver/Makefile
+	  $(AUTOMAKE) --foreign src/driver/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: src/examples/Makefile.in
===================================================================
--- src/examples/Makefile.in	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/Makefile.in	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -189,7 +189,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/examples/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/examples/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/examples/Makefile
+	  $(AUTOMAKE) --foreign src/examples/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: src/examples/abs.c
===================================================================
--- src/examples/abs.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/abs.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 18:26:16 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 09:32:04 2016
-// Update Count     : 44
+// Last Modified On : Wed Mar  2 15:07:26 2016
+// Update Count     : 51
 //
 
@@ -20,13 +20,13 @@
 	char ch = -65;
 	sout | "char\t\t\t"					| ch     | "\tabs " | abs( ch ) | endl;
-	sout | "signed int\t\t"				| -65    | "\tabs " | abs( -65 ) | endl;
-	sout | "signed long int\t\t" 		| -65l   | "\tabs " | abs( -65l ) | endl;
-	sout | "signed long long int\t"		| -65ll  | "\tabs " | abs( -65ll ) | endl;
-	sout | "float\t\t\t" 				| -65.0f | "\tabs " | abs( -65.0f ) | endl;
-	sout | "double\t\t\t"				| -65.0  | "\tabs " | abs( -65.0 ) | endl;
-	sout | "long double\t\t"			| -65.0l | "\tabs " | abs( -65.0l ) | endl;
-	sout | "float _Complex\t\t"			| -65.0F-2.0iF | "\tabs " | abs( -65.0F-2.0iF ) | endl;
-	sout | "double _Complex\t\t"		| -65.0D-2.0iD | "\tabs " | abs( -65.0D-2.0iD ) | endl;
-	sout | "long double _Complex\t"		| -65.0L-2.0iL | "\tabs " | abs( -65.0L-2.0iL ) | endl;
+	sout | "signed int\t\t"				| -65    | "\tabs" | abs( -65 ) | endl;
+	sout | "signed long int\t\t" 		| -65l   | "\tabs" | abs( -65l ) | endl;
+	sout | "signed long long int\t"		| -65ll  | "\tabs" | abs( -65ll ) | endl;
+	sout | "float\t\t\t" 				| -65.0f | "\tabs" | abs( -65.0f ) | endl;
+	sout | "double\t\t\t"				| -65.0  | "\tabs" | abs( -65.0 ) | endl;
+	sout | "long double\t\t"			| -65.0l | "\tabs" | abs( -65.0l ) | endl;
+	sout | "float _Complex\t\t"			| -65.0F-2.0iF | "\tabs" | abs( -65.0F-2.0iF ) | endl;
+	sout | "double _Complex\t\t"		| -65.0D-2.0iD | "\tabs" | abs( -65.0D-2.0iD ) | endl;
+	sout | "long double _Complex\t"		| -65.0L-2.0iL | "\tabs" | abs( -65.0L-2.0iL ) | endl;
 } // main
 
Index: src/examples/array.c
===================================================================
--- src/examples/array.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/array.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,11 +10,11 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:10:13 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 18:13:52 2016
+// Update Count     : 3
 //
 
 #include "array.h"
 
-/// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )
+/// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )
 /// [ array_iterator begin, array_iterator end ]
 /// get_iterators( array_type array )
@@ -25,5 +25,5 @@
 
 // The first element is always at index 0.
-forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
+forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
 elt_type * begin( array_type array ) {
 	return &array[ 0 ];
@@ -31,5 +31,5 @@
 
 // The end iterator should point one past the last element.
-forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
+forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
 elt_type * end( array_type array ) {
 	return &array[ last( array ) ] + 1;
Index: src/examples/array.h
===================================================================
--- src/examples/array.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/array.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jan 26 17:09:29 2016
-// Update Count     : 3
+// Last Modified On : Wed Mar  2 18:13:35 2016
+// Update Count     : 5
 //
 
@@ -21,10 +21,10 @@
 // An array has contiguous elements accessible in any order using integer indicies. The first
 // element has index 0.
-context array( type array_type, type elt_type ) {
+trait array( otype array_type, otype elt_type ) {
 	lvalue elt_type ?[?]( array_type, int );
 };
 
 // A bounded array is an array that carries its maximum index with it.
-context bounded_array( type array_type, type elt_type | array( array_type, elt_type ) ) {
+trait bounded_array( otype array_type, otype elt_type | array( array_type, elt_type ) ) {
 	int last( array_type );
 };
@@ -34,5 +34,5 @@
 typedef int array_iterator;
 
-/// forall( type array_type, elt_type | bounded_array( array_type, elt_type ) )
+/// forall( otype array_type, elt_type | bounded_array( array_type, elt_type ) )
 /// [ array_iterator begin, array_iterator end ] get_iterators( array_type );
 
@@ -40,8 +40,8 @@
 // A bounded array can be iterated over by using a pointer to the element type. These functions
 // return iterators corresponding to the first element and the one-past-the-end element, STL-style.
-forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
+forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
 elt_type *begin( array_type );
 
-forall( type array_type, type elt_type | bounded_array( array_type, elt_type ) )
+forall( otype array_type, otype elt_type | bounded_array( array_type, elt_type ) )
 elt_type *end( array_type );
 
Index: src/examples/ato.c
===================================================================
--- src/examples/ato.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/ato.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -11,6 +11,6 @@
 // Created On       : Thu Feb  4 08:10:57 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 11:44:03 2016
-// Update Count     : 42
+// Last Modified On : Mon Feb 29 17:57:35 2016
+// Update Count     : 44
 // 
 
@@ -24,29 +24,29 @@
 int main( void ) {
 	int i = ato( "-123" );
-	sout | i | ' ' | "-123" | endl;
+	sout | i | "-123" | endl;
 	unsigned int ui = ato( "123" );
-	sout | ui | ' ' | "123" | endl;
+	sout | ui | "123" | endl;
 	long int li = ato( "-123" );
-	sout | li | ' ' | "-123" | endl;
+	sout | li | "-123" | endl;
 	unsigned long int uli = ato( "123" );
-	sout | uli | ' ' | "123" | endl;
+	sout | uli | "123" | endl;
 	long long int lli = ato( "-123" );
-	sout | lli | ' ' | "-123" | endl;
+	sout | lli | "-123" | endl;
 	unsigned long long int ulli = ato( "123" );
-	sout | ulli | ' ' | "123" | endl;
+	sout | ulli | "123" | endl;
 	float f = ato( "-123.456" );
-	sout | f | ' ' | "-123.456" | endl;
+	sout | f | "-123.456" | endl;
 	double d = ato( "-123.4567890123456" );
-	sout | d | ' ' | "-123.4567890123456" | endl;
+	sout | d | "-123.4567890123456" | endl;
 	long double ld = ato( "-123.45678901234567890123456789" );
-	sout | ld | ' ' | "-123.45678901234567890123456789" | endl;
+	sout | ld | "-123.45678901234567890123456789" | endl;
 	float _Complex fc = ato( "-123.456-123.456i" );
-	sout | fc | ' ' | "-123.456-123.456i" | endl;
+	sout | fc | "-123.456-123.456i" | endl;
 	double _Complex dc = ato( "-123.4567890123456+123.4567890123456i" );
-	sout | dc | ' ' | "-123.4567890123456+123.4567890123456i" | endl;
+	sout | dc | "-123.4567890123456+123.4567890123456i" | endl;
 	long double _Complex ldc = ato( "123.45678901234567890123456789-123.45678901234567890123456789i" );
-	sout | ldc | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
+	sout | ldc | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
 	long double _Complex ldc2 = ato( "123.45678901234-123.4567890i" );
-	sout | ldc2 | ' ' | "123.45678901234567890123456789-123.45678901234567890123456789i" | endl;
+	sout | ldc2 | "123.45678901234-123.4567890i" | endl;
 } // main
 
Index: src/examples/ctxts.c
===================================================================
--- src/examples/ctxts.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/ctxts.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,13 +10,13 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:11:19 2015
-// Update Count     : 2
+// Last Modified On : Wed Mar  2 18:10:21 2016
+// Update Count     : 3
 //
 
-context has_f( type T ) {
+trait has_f( type T ) {
 	T f( T );
 };
 
-context has_g( type U | has_f( U ) ) {
+trait has_g( type U | has_f( U ) ) {
 	U g( U );
 };
Index: src/examples/fstream_test.c
===================================================================
--- src/examples/fstream_test.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/fstream_test.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 11:45:43 2016
-// Update Count     : 43
+// Last Modified On : Wed Mar  2 15:12:21 2016
+// Update Count     : 51
 //
 
@@ -18,18 +18,15 @@
 int main( void ) {
 	int nombre;
-	sout | "Entrez un nombre, s'il vous plaît:\n";
+	sout | "Entrez un nombre, s'il vous plaît:" | endl;
 	sin  | &nombre;
-	sout | "Vous avez entré " | nombre | " stocké à l'adresse " | &nombre | endl;
-	sout | "nombre " | nombre | " est "
-		 | (nombre > 0 ? "plus grand que" :
-		   nombre == 0 ? "égal à" : "moins de")
-		 | " zéro" | endl;
+	sout | "Vous avez entré" | nombre | "stocké à l'adresse" | &nombre | endl;
+	sout | "nombre" | nombre | "est"
+		 | (nombre > 0 ? "plus grand que" : nombre == 0 ? "égal à" : "moins de")
+		 | "zéro" | endl;
 
-	sout | "Entrez trois nombres, s'il vous plaît:\n";
+	sout | "Entrez trois nombres, s'il vous plaît: " | endl;
 	int i, j, k;
 	sin  | &i | &j | &k;
-	sout | "Vous avez entré " | "i:" | i | " j:" | j | " k:" | k | endl;
-
-	sout | 3 | ' ' | 3.5 | ' ' | 'a' | ' ' | "abc" | endl;
+	sout | "Vous avez entré" | "i:" | i | "j:" | j | "k:" | k | endl;
 }
 
Index: src/examples/hello.c
===================================================================
--- src/examples/hello.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/hello.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:11:45 2016
-// Update Count     : 8
+// Last Modified On : Mon Feb 29 18:06:17 2016
+// Update Count     : 10
 //
 
@@ -17,5 +17,5 @@
 
 int main() {
-	sout | "Bonjour au monde!\n";
+	sout | "Bonjour au monde!" | endl;
 }
 
Index: src/examples/identity.c
===================================================================
--- src/examples/identity.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/identity.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:17:32 2016
-// Update Count     : 10
+// Last Modified On : Mon Feb 29 23:40:45 2016
+// Update Count     : 12
 //
 
Index: src/examples/index.h
===================================================================
--- src/examples/index.h	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/index.h	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,9 +10,9 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:17:31 2015
-// Update Count     : 1
+// Last Modified On : Wed Mar  2 18:10:46 2016
+// Update Count     : 2
 //
 
-context index( type T ) {
+trait index( type T ) {
 	T ?+?( T, T );
 	T ?-?( T, T );
Index: src/examples/it_out.c
===================================================================
--- src/examples/it_out.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/it_out.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,16 +10,16 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:41:23 2015
-// Update Count     : 4
+// Last Modified On : Wed Mar  2 18:11:00 2016
+// Update Count     : 5
 //
 
 typedef unsigned long streamsize_type;
 
-context ostream( dtype os_type ) {
+trait ostream( dtype os_type ) {
 	os_type *write( os_type *, const char *, streamsize_type );
 	int fail( os_type * );
 };
 
-context writeable( type T ) {
+trait writeable( type T ) {
 	forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, T );
 };
@@ -29,5 +29,5 @@
 forall( dtype os_type | ostream( os_type ) ) os_type * ?<<?( os_type *, const char * );
 
-context istream( dtype is_type ) {
+trait istream( dtype is_type ) {
 	is_type *read( is_type *, char *, streamsize_type );
 	is_type *unread( is_type *, char );
@@ -36,5 +36,5 @@
 };
 
-context readable( type T ) {
+trait readable( type T ) {
 	forall( dtype is_type | istream( is_type ) ) is_type * ?<<?( is_type *, T );
 };
@@ -43,5 +43,5 @@
 forall( dtype is_type | istream( is_type ) ) is_type * ?>>?( is_type *, int* );
 
-context iterator( type iterator_type, type elt_type ) {
+trait iterator( type iterator_type, type elt_type ) {
 	iterator_type ?++( iterator_type* );
 	iterator_type ++?( iterator_type* );
Index: src/examples/minmax.c
===================================================================
--- src/examples/minmax.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/minmax.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:17:53 2016
-// Update Count     : 47
+// Last Modified On : Mon Feb 29 23:45:16 2016
+// Update Count     : 49
 //
 
@@ -23,26 +23,26 @@
 
 	sout | "char\t\t\t"					| 'z' | ' ' | 'a' | "\tmin " | min( 'z', 'a' ) | endl;
-	sout | "signed int\t\t"				| 4 | ' ' | 3 | "\tmin " | min( 4, 3 ) | endl;
-	sout | "unsigned int\t\t"			| 4u | ' ' | 3u | "\tmin " | min( 4u, 3u ) | endl;
-	sout | "signed long int\t\t" 		| 4l | ' ' | 3l | "\tmin " | min( 4l, 3l ) | endl;
-	sout | "unsigned long int\t" 		| 4ul | ' ' | 3ul | "\tmin " | min( 4ul, 3ul ) | endl;
-	sout | "signed long long int\t"		| 4ll | ' ' | 3ll | "\tmin " | min( 4ll, 3ll ) | endl;
-	sout | "unsigned long long int\t"	| 4ull | ' ' | 3ull | "\tmin " | min( 4ull, 3ull ) | endl;
-	sout | "float\t\t\t" 				| 4.0f | ' ' | 3.1f | "\tmin " | min( 4.0f, 3.1f ) | endl;
-	sout | "double\t\t\t"				| 4.0 | ' ' | 3.1 | "\tmin " | min( 4.0, 3.1 ) | endl;
-	sout | "long double\t\t"			| 4.0l | ' ' | 3.1l | "\tmin " | min( 4.0l, 3.1l ) | endl;
+	sout | "signed int\t\t"				| 4 | 3 | "\tmin" | min( 4, 3 ) | endl;
+	sout | "unsigned int\t\t"			| 4u | 3u | "\tmin" | min( 4u, 3u ) | endl;
+	sout | "signed long int\t\t" 		| 4l | 3l | "\tmin" | min( 4l, 3l ) | endl;
+	sout | "unsigned long int\t" 		| 4ul | 3ul | "\tmin" | min( 4ul, 3ul ) | endl;
+	sout | "signed long long int\t"		| 4ll | 3ll | "\tmin" | min( 4ll, 3ll ) | endl;
+	sout | "unsigned long long int\t"	| 4ull | 3ull | "\tmin" | min( 4ull, 3ull ) | endl;
+	sout | "float\t\t\t" 				| 4.0f | 3.1f | "\tmin" | min( 4.0f, 3.1f ) | endl;
+	sout | "double\t\t\t"				| 4.0 | 3.1 | "\tmin" | min( 4.0, 3.1 ) | endl;
+	sout | "long double\t\t"			| 4.0l | 3.1l | "\tmin" | min( 4.0l, 3.1l ) | endl;
 
 	sout | endl;
 
 	sout | "char\t\t\t"					| 'z' | ' ' | 'a' | "\tmax " | max( 'z', 'a' ) | endl;
-	sout | "signed int\t\t"				| 4 | ' ' | 3 | "\tmax " | max( 4, 3 ) | endl;
-	sout | "unsigned int\t\t"			| 4u | ' ' | 3u | "\tmax " | max( 4u, 3u ) | endl;
-	sout | "signed long int\t\t" 		| 4l | ' ' | 3l | "\tmax " | max( 4l, 3l ) | endl;
-	sout | "unsigned long int\t" 		| 4ul | ' ' | 3ul | "\tmax " | max( 4ul, 3ul ) | endl;
-	sout | "signed long long int\t"		| 4ll | ' ' | 3ll | "\tmax " | max( 4ll, 3ll ) | endl;
-	sout | "unsigned long long int\t"	| 4ull | ' ' | 3ull | "\tmax " | max( 4ull, 3ull ) | endl;
-	sout | "float\t\t\t" 				| 4.0f | ' ' | 3.1f | "\tmax " | max( 4.0f, 3.1f ) | endl;
-	sout | "double\t\t\t"				| 4.0 | ' ' | 3.1 | "\tmax " | max( 4.0, 3.1 ) | endl;
-	sout | "long double\t\t"			| 4.0l | ' ' | 3.1l | "\tmax " | max( 4.0l, 3.1l ) | endl;
+	sout | "signed int\t\t"				| 4 | 3 | "\tmax" | max( 4, 3 ) | endl;
+	sout | "unsigned int\t\t"			| 4u | 3u | "\tmax" | max( 4u, 3u ) | endl;
+	sout | "signed long int\t\t" 		| 4l | 3l | "\tmax" | max( 4l, 3l ) | endl;
+	sout | "unsigned long int\t" 		| 4ul | 3ul | "\tmax" | max( 4ul, 3ul ) | endl;
+	sout | "signed long long int\t"		| 4ll | 3ll | "\tmax" | max( 4ll, 3ll ) | endl;
+	sout | "unsigned long long int\t"	| 4ull | 3ull | "\tmax" | max( 4ull, 3ull ) | endl;
+	sout | "float\t\t\t" 				| 4.0f | 3.1f | "\tmax" | max( 4.0f, 3.1f ) | endl;
+	sout | "double\t\t\t"				| 4.0 | 3.1 | "\tmax" | max( 4.0, 3.1 ) | endl;
+	sout | "long double\t\t"			| 4.0l | 3.1l | "\tmax" | max( 4.0l, 3.1l ) | endl;
 } // main
 
Index: src/examples/prolog.c
===================================================================
--- src/examples/prolog.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/prolog.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed May 27 18:25:52 2015
-// Update Count     : 1
+// Last Modified On : Wed Mar  2 18:11:18 2016
+// Update Count     : 2
 //
 
@@ -25,9 +25,9 @@
 void is_integer( int x ) {}
 
-context ArithmeticType( type T ) {
+trait ArithmeticType( type T ) {
 	void is_arithmetic( T );
 };
 
-context IntegralType( type T | ArithmeticType( T ) ) {
+trait IntegralType( type T | ArithmeticType( T ) ) {
 	void is_integer( T );
 };
Index: src/examples/quad.c
===================================================================
--- src/examples/quad.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/quad.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:19:24 2016
-// Update Count     : 6
+// Last Modified On : Tue Mar  1 08:24:56 2016
+// Update Count     : 7
 //
 
@@ -28,5 +28,5 @@
 int main() {
 	int N = 2;
-	sout | "result of quad of " | N | " is " | quad( N ) | endl;
+	sout | "result of quad of" | N | "is" | quad( N ) | endl;
 }
 
Index: src/examples/read.c
===================================================================
--- src/examples/read.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
+++ src/examples/read.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -0,0 +1,60 @@
+//                               -*- Mode: C -*- 
+// 
+// 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.
+// 
+// read.c -- 
+// 
+// Author           : Peter A. Buhr
+// Created On       : Wed Mar  2 16:56:02 2016
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Wed Mar  2 16:56:44 2016
+// Update Count     : 2
+// 
+
+#include <fstream>
+
+int main() {
+    char c;
+    short int si;
+    unsigned short int usi;
+    int i;
+    unsigned int ui;
+    long int li;
+    unsigned long int uli;
+    long long int lli;
+    unsigned long long int ulli;
+    float f;
+    double d;
+    long double ld;
+    float _Complex fc;
+    double _Complex dc;
+    long double _Complex ldc;
+    char s1[10], s2[10];
+
+    ifstream in;
+    open( &in, "read.data", "r" );
+
+    &in | &c
+	| &si | &usi | &i | &ui | &li | &uli | &lli | &ulli
+	| &f | &d | &ld
+	| &fc | &dc | &ldc
+	| str( s1 ) | str( s2, 10 );
+
+    sout | c | ' ' | endl
+	 | si | usi | i | ui | li | uli | lli | ulli | endl
+	 | f | d | ld | endl
+	 | f | "" | d | "" | ld | endl;
+
+    sepSet( sout, ", $" );
+    sout | fc | dc | ldc | endl
+	 | sepOn | s1 | sepOff | s2 | endl
+	 | s1 | "" | s2 | endl;
+}
+
+// Local Variables: //
+// tab-width: 4 //
+// compile-command: "cfa read.c" //
+// End: //
Index: src/examples/read.data
===================================================================
--- src/examples/read.data	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
+++ src/examples/read.data	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -0,0 +1,1 @@
+A 1 2 3 4 5 6 7 8 1.1 1.2 1.3 1.1+2.3 1.1-2.3 1.1-2.3 abc xyz
Index: src/examples/sum.c
===================================================================
--- src/examples/sum.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/sum.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,11 +10,11 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Feb 16 23:49:31 2016
-// Update Count     : 189
+// Last Modified On : Wed Mar  2 18:12:01 2016
+// Update Count     : 194
 //
 
 #include <fstream>
 
-context sumable( type T ) {
+trait sumable( type T ) {
 	const T 0;
 	T ?+?( T, T );
@@ -47,6 +47,6 @@
 		a[i] = v;
 	} // for
-	sout | "sum from " | low | " to " | High | " is "
-		 | (int)sum( size, a ) | ", check " | (int)s | endl;
+	sout | "sum from" | low | "to" | High | "is"
+		 | (int)sum( size, a ) | "" | ", check" | (int)s | endl;
 
 	int s = 0, a[size], v = low;
@@ -55,6 +55,6 @@
 		a[i] = (int)v;
 	} // for
-	sout | "sum from " | low | " to " | High | " is "
-		 | sum( size, (int *)a ) | ", check " | (int)s | endl;
+	sout | "sum from" | low | "to" | High | "is"
+		 | sum( size, (int *)a ) | "" | ", check" | (int)s | endl;
 
 	float s = 0.0, a[size], v = low / 10.0;
@@ -63,6 +63,6 @@
 		a[i] = (float)v;
 	} // for
-	sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is "
-		 | sum( size, (float *)a ) | ", check " | (float)s | endl;
+	sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
+		 | sum( size, (float *)a ) | "" | ", check" | (float)s | endl;
 
 	double s = 0, a[size], v = low / 10.0;
@@ -71,6 +71,6 @@
 		a[i] = (double)v;
 	} // for
-	sout | "sum from " | low / 10.0 | " to " | High / 10.0 | " is "
-		 | sum( size, (double *)a ) | ", check " | (double)s | endl;
+	sout | "sum from" | low / 10.0 | "to" | High / 10.0 | "is"
+		 | sum( size, (double *)a ) | "" | ", check" | (double)s | endl;
 
 	struct S { int i, j; } 0 = { 0, 0 }, 1 = { 1, 1 };
@@ -79,5 +79,5 @@
 	S ++?( S *t ) { *t += 1; return *t; }
 	S ?++( S *t ) { S temp = *t; *t += 1; return temp; }
-	ofstream * ?|?( ofstream * os, S v ) { return os | v.i | ' ' | v.j; }
+	ofstream * ?|?( ofstream * os, S v ) { return os | v.i | v.j; }
 
 	S s = 0, a[size], v = { low, low };
@@ -86,6 +86,6 @@
 		a[i] = (S)v;
 	} // for
-	sout | "sum from " | low | " to " | High | " is "
-		 | sum( size, (S *)a ) | ", check " | (S)s | endl;
+	sout | "sum from" | low | "to" | High | "is"
+		 | sum( size, (S *)a ) | "" | ", check" | (S)s | endl;
 } // main
 
Index: src/examples/swap.c
===================================================================
--- src/examples/swap.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/swap.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 12:22:12 2016
-// Update Count     : 64
+// Last Modified On : Wed Mar  2 16:15:11 2016
+// Update Count     : 65
 //
 
@@ -54,15 +54,15 @@
 
 	float f1 = 1.5, f2 = 2.5;
-	sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\t\tswap ";
+	sout | "float\t\t\t" | f1 | ' ' | f2 | "\t\tswap ";
 	swap( &f1, &f2 );
 	sout | '\t' | f1 | ' ' | f2 | endl;
 
 	double d1 = 1.5, d2 = 2.5;
-	sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\t\tswap ";
+	sout | "double\t\t\t" | d1 | ' ' | d2 | "\t\tswap ";
 	swap( &d1, &d2 );
 	sout | '\t' | d1 | ' ' | d2 | endl;
 
 	long double ld1 = 1.5, ld2 = 2.5;
-	sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\t\tswap ";
+	sout | "long double\t\t" | ld1 | ' ' | ld2 | "\t\tswap ";
 	swap( &ld1, &ld2 );
 	sout | '\t' | ld1 | ' ' | ld2 | endl;
Index: src/examples/tests/vector_test.out.txt
===================================================================
--- src/examples/tests/vector_test.out.txt	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/examples/tests/vector_test.out.txt	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -1,5 +1,5 @@
 enter N elements and C-d on a separate line:
 Array elements:
-1 2 3 4 5 
+1 2 3 4 5
 Array elements reversed:
-5 4 3 2 1 
+5 4 3 2 1
Index: src/libcfa/Makefile.in
===================================================================
--- src/libcfa/Makefile.in	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/Makefile.in	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -231,7 +231,7 @@
 	  esac; \
 	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libcfa/Makefile'; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/libcfa/Makefile'; \
 	$(am__cd) $(top_srcdir) && \
-	  $(AUTOMAKE) --gnu src/libcfa/Makefile
+	  $(AUTOMAKE) --foreign src/libcfa/Makefile
 .PRECIOUS: Makefile
 Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
Index: src/libcfa/builtins.cf
===================================================================
--- src/libcfa/builtins.cf	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/builtins.cf	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -390,11 +390,11 @@
 int __builtin_sprintf(char *, const char *, ...);
 int __builtin_sscanf(const char *, const char *, ...);
-int __builtin_vfprintf(struct _IO_FILE *, const char *, void **);
-int __builtin_vfscanf(struct _IO_FILE *, const char *, void **);
-int __builtin_vprintf(const char *, void **);
-int __builtin_vscanf(const char *, void **);
-int __builtin_vsnprintf(char *, unsigned long, const char *, void **);
-int __builtin_vsprintf(char *, const char *, void **);
-int __builtin_vsscanf(const char *, const char *, void **);
+int __builtin_vfprintf(struct _IO_FILE *, const char *, __builtin_va_list);
+int __builtin_vfscanf(struct _IO_FILE *, const char *, __builtin_va_list);
+int __builtin_vprintf(const char *, __builtin_va_list);
+int __builtin_vscanf(const char *, __builtin_va_list);
+int __builtin_vsnprintf(char *, unsigned long, const char *, __builtin_va_list);
+int __builtin_vsprintf(char *, const char *, __builtin_va_list);
+int __builtin_vsscanf(const char *, const char *, __builtin_va_list);
 int __builtin_isalnum(int);
 int __builtin_isalpha(int);
@@ -534,7 +534,7 @@
 void __builtin_unwind_init();
 void __builtin_update_setjmp_buf(void *, int);
-void __builtin_va_copy(void **, void **);
-void __builtin_va_end(void **);
-void __builtin_va_start(void **, ...);
+void __builtin_va_copy(__builtin_va_list, __builtin_va_list);
+void __builtin_va_end(__builtin_va_list);
+void __builtin_va_start(__builtin_va_list, ...);
 int __builtin_va_arg_pack();
 int __builtin_va_arg_pack_len();
@@ -563,10 +563,10 @@
 int __builtin___snprintf_chk(char *, unsigned long, int, unsigned long, const char *, ...);
 int __builtin___sprintf_chk(char *, int, unsigned long, const char *, ...);
-int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, void **);
-int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, void **);
+int __builtin___vsnprintf_chk(char *, unsigned long, int, unsigned long, const char *, __builtin_va_list);
+int __builtin___vsprintf_chk(char *, int, unsigned long, const char *, __builtin_va_list);
 int __builtin___fprintf_chk(struct _IO_FILE *, int, const char *, ...);
 int __builtin___printf_chk(int, const char *, ...);
-int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, void **);
-int __builtin___vprintf_chk(int, const char *, void **);
+int __builtin___vfprintf_chk(struct _IO_FILE *, int, const char *, __builtin_va_list);
+int __builtin___vprintf_chk(int, const char *, __builtin_va_list);
 void __cyg_profile_func_enter(void *, void *);
 void __cyg_profile_func_exit(void *, void *);
@@ -583,5 +583,4 @@
 const char * __builtin_FUNCTION();
 int __builtin_LINE();
-typedef void ** __builtin_va_list;
 extern const char *__PRETTY_FUNCTION__;
 typedef int wchar_t;
Index: src/libcfa/fstream
===================================================================
--- src/libcfa/fstream	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/fstream	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -7,9 +7,9 @@
 // fstream -- 
 //
-// Author           : Richard C. Bilson
+// Author           : Peter A. Buhr
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 14:02:01 2016
-// Update Count     : 22
+// Last Modified On : Wed Mar  2 15:08:14 2016
+// Update Count     : 78
 //
 
@@ -19,25 +19,33 @@
 #include "iostream"
 
-// implement context ostream
-struct ofstream;
+enum { separateSize = 16 };
+struct ofstream { void *file; int separate; char separator[separateSize]; };
 
-int fail( ofstream * os );
-int flush( ofstream * os );
-void open( ofstream ** os, const char * name, const char * mode );
-void close( ofstream * os );
-ofstream * write( ofstream * os, const char * data, streamsize_type size );
+_Bool sepPrt( ofstream * );
+void sepOn( ofstream * );
+void sepOff( ofstream * );
+void sepSet( ofstream *, const char * );
+const char * sepGet( ofstream * );
+void sepDisable( ofstream * );
+void sepEnable( ofstream * );
+int fail( ofstream * );
+int flush( ofstream * );
+void open( ofstream *, const char * name, const char * mode );
+void close( ofstream * );
+ofstream * write( ofstream *, const char * data, unsigned long int size );
+int prtfmt( ofstream *, const char fmt[], ... );
 
 extern ofstream * sout, * serr;
 
 // implement context istream
-struct ifstream;
+struct ifstream { void *file; };
 
 int fail( ifstream * is );
 int eof( ifstream * is );
-void open( ifstream ** is, const char * name, const char * mode );
+void open( ifstream * is, const char * name, const char * mode );
 void close( ifstream * is );
-ifstream * get( ifstream * is, int * data );
-ifstream * read( ifstream * is, char * data, streamsize_type size );
+ifstream * read( ifstream * is, char * data, unsigned long int size );
 ifstream * ungetc( ifstream * is, char c );
+int scanfmt( ifstream *, const char fmt[], ... );
 
 extern ifstream *sin;
@@ -49,2 +57,3 @@
 // tab-width: 4 //
 // End: //
+
Index: src/libcfa/fstream.c
===================================================================
--- src/libcfa/fstream.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/fstream.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -7,9 +7,9 @@
 // fstream.c -- 
 //
-// Author           : Richard C. Bilson
+// Author           : Peter A. Buhr
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 14:03:05 2016
-// Update Count     : 76
+// Last Modified On : Mon Feb 29 18:41:10 2016
+// Update Count     : 162
 //
 
@@ -17,40 +17,53 @@
 
 extern "C" {
-#include <stdio.h>
-#include <stdlib.h>
+#include <stdio.h>										// vfprintf, vfscanf
+#include <stdlib.h>										// exit
+#include <stdarg.h>										// varargs
+#include <string.h>										// strlen
+#include <float.h>										// DBL_DIG, LDBL_DIG
+#include <complex.h>									// creal, cimag
 }
-
-struct ofstream {
-	FILE *file;
-};
 
 #define IO_MSG "I/O error "
 
+_Bool sepPrt( ofstream * os ) { return os->separate == 1; }
+void sepOn( ofstream * os ) { if ( os->separate != 2 ) os->separate = 1; }
+void sepOff( ofstream * os ) { if ( os->separate != 2 ) os->separate = 0; }
+void sepSet( ofstream * os, const char * s ) {
+	strncpy( &(os->separator[0]), s, separateSize - 1 );
+	os->separator[separateSize - 1] = '\0';
+} // sepSet
+const char * sepGet( ofstream * os ) { return &(os->separator[0]); }
+void sepDisable( ofstream *os ) { os->separate = 2; }
+void sepEnable( ofstream *os ) { os->separate = 0; }
+
 int fail( ofstream * os ) {
-	return ferror( os->file );
+	return ferror( (FILE *)(os->file) );
 } // fail
 
 int flush( ofstream * os ) {
-	return fflush( os->file );
+	return fflush( (FILE *)(os->file) );
 } // flush
 
-void open( ofstream ** os, const char * name, const char * mode ) {
-	FILE *t = fopen( name, mode );
-	if ( t == 0 ) {										// do not change unless successful
+void open( ofstream * os, const char * name, const char * mode ) {
+	FILE *file = fopen( name, mode );
+	if ( file == 0 ) {									// do not change unless successful
 		perror( IO_MSG "open output" );
 		exit( EXIT_FAILURE );
 	} // if
-	(*os)->file = t;
+	os->file = file;
+	sepOff( os );
+	sepSet( os, " " );
 } // open
 
 void close( ofstream * os ) {
-	if ( os->file == stdout || os->file == stderr ) return;
+	if ( (FILE *)(os->file) == stdout || (FILE *)(os->file) == stderr ) return;
 
-	if ( fclose( os->file ) == EOF ) {
+	if ( fclose( (FILE *)(os->file) ) == EOF ) {
 		perror( IO_MSG "close output" );
 	} // if 
 } // close
 
-ofstream * write( ofstream * os, const char * data, streamsize_type size ) {
+ofstream * write( ofstream * os, const char * data, unsigned long int size ) {
 	if ( fail( os ) ) {
 		fprintf( stderr, "attempt write I/O on failed stream\n" );
@@ -58,5 +71,5 @@
 	} // if
 
-	if ( fwrite( data, 1, size, os->file ) != size ) {
+	if ( fwrite( data, 1, size, (FILE *)(os->file) ) != size ) {
 		perror( IO_MSG "write" );
 		exit( EXIT_FAILURE );
@@ -65,34 +78,55 @@
 } // write
 
-static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_) };
+int prtfmt( ofstream * os, const char fmt[], ... ) {
+    va_list args;
+
+    va_start( args, fmt );
+    int len = vfprintf( (FILE *)(os->file), fmt, args );
+	if ( len == EOF ) {
+		if ( ferror( (FILE *)(os->file) ) ) {
+			fprintf( stderr, "invalid write\n" );
+			exit( EXIT_FAILURE );
+		} // if
+	} // if
+    va_end( args );
+	return len;
+} // prtfmt
+
+
+static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_), 0, { ' ', '\0' } };
 ofstream *sout = &soutFile;
-static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_) };
+static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_), 0, { ' ', '\0' } };
 ofstream *serr = &serrFile;
+
 
 //---------------------------------------
 
-struct ifstream {
-	FILE *file;
-};
 
 int fail( ifstream * is ) {
-	return ferror( is->file );
+	return ferror( (FILE *)(is->file) );
 } // fail
 
 int eof( ifstream * is ) {
-	return feof( is->file );
+	return feof( (FILE *)(is->file) );
 } // eof
 
-ifstream * get( ifstream * is, int * data ) {
-	if ( fscanf( is->file, "%d", data ) == EOF ) {
-		if ( ferror( is->file ) ) {
-			fprintf( stderr, "invalid int read\n" );
-			exit( EXIT_FAILURE );
-		} // if
+void open( ifstream * is, const char * name, const char * mode ) {
+	FILE *t = fopen( name, mode );
+	if ( t == 0 ) {										// do not change unless successful
+		perror( IO_MSG "open input" );
+		exit( EXIT_FAILURE );
 	} // if
-	return is;
-} // read
+	is->file = t;
+} // open
 
-ifstream * read( ifstream * is, char * data, streamsize_type size ) {
+void close( ifstream * is ) {
+	if ( (FILE *)(is->file) == stdin ) return;
+
+	if ( fclose( (FILE *)(is->file) ) == EOF ) {
+		perror( IO_MSG "close input" );
+	} // if 
+} // close
+
+ifstream * read( ifstream * is, char * data, unsigned long int size ) {
 	if ( fail( is ) ) {
 		fprintf( stderr, "attempt read I/O on failed stream\n" );
@@ -100,5 +134,5 @@
 	} // if
 
-	if ( fread( data, size, 1, is->file ) == 0 ) {
+	if ( fread( data, size, 1, (FILE *)(is->file) ) == 0 ) {
 		perror( IO_MSG "read" );
 		exit( EXIT_FAILURE );
@@ -113,5 +147,5 @@
 	} // if
 
-	if ( ungetc( c, is->file ) == EOF ) {
+	if ( ungetc( c, (FILE *)(is->file) ) == EOF ) {
 		perror( IO_MSG "ungetc" );
 		exit( EXIT_FAILURE );
@@ -120,20 +154,19 @@
 } // ungetc
 
-void open( ifstream ** is, const char * name, const char * mode ) {
-	FILE *t = fopen( name, mode );
-	if ( t == 0 ) {										// do not change unless successful
-		perror( IO_MSG "open input" );
-		exit( EXIT_FAILURE );
+int scanfmt( ifstream * is, const char fmt[], ... ) {
+    va_list args;
+
+    va_start( args, fmt );
+    int len = vfscanf( (FILE *)(is->file), fmt, args );
+	if ( len == EOF ) {
+		if ( ferror( (FILE *)(is->file) ) ) {
+			fprintf( stderr, "invalid read\n" );
+			exit( EXIT_FAILURE );
+		} // if
 	} // if
-	(*is)->file = t;
-} // open
+    va_end( args );
+	return len;
+} // prtfmt
 
-void close( ifstream * is ) {
-	if ( is->file == stdin ) return;
-
-	if ( fclose( is->file ) == EOF ) {
-		perror( IO_MSG "close input" );
-	} // if 
-} // close
 
 static ifstream sinFile = { (FILE *)(&_IO_2_1_stdin_) };
Index: src/libcfa/iostream
===================================================================
--- src/libcfa/iostream	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/iostream	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -7,24 +7,33 @@
 // iostream -- 
 //
-// Author           : Richard C. Bilson
+// Author           : Peter A. Buhr
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 14:04:24 2016
-// Update Count     : 32
+// Last Modified On : Wed Mar  2 18:05:27 2016
+// Update Count     : 85
 //
 
-#ifndef IOSTREAM_H
-#define IOSTREAM_H
+#ifndef __IOSTREAM_H__
+#define __IOSTREAM_H__
 
 #include "iterator"
 
-typedef unsigned long streamsize_type;
-
-context ostream( dtype ostype ) {
+trait ostream( dtype ostype ) {
+	_Bool sepPrt( ostype * );
+	void sepOn( ostype * );
+	void sepOff( ostype * );
+	void sepSet( ostype *, const char * );
+	const char * sepGet( ostype * );
+	void sepDisable( ostype * );
+	void sepEnable( ostype * );
 	int fail( ostype * );
 	int flush( ostype * );
-	ostype * write( ostype *, const char *, streamsize_type );
+	void open( ostype * os, const char * name, const char * mode );
+	void close( ostype * os );
+	ostype * write( ostype *, const char *, unsigned long int );
+	int prtfmt( ostype *, const char fmt[], ... );
 };
-context writeable( type T ) {
+
+trait writeable( otype T ) {
 	forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T );
 };
@@ -33,4 +42,7 @@
 
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, char );
+
+forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, short int );
+forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned short int );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, int );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned int );
@@ -39,44 +51,72 @@
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long int );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, unsigned long long int );
+
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float ); // FIX ME: should not be required
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double );
+
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, float _Complex );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, double _Complex );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, long double _Complex );
+
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const char * );
 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, const void * );
 
-forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) retostype * ?|?( ostype *os, retostype * (* manip)(ostype*) );
+forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, ostype * (*)( ostype * ) );
 forall( dtype ostype | ostream( ostype ) ) ostype * endl( ostype * );
+forall( dtype ostype | ostream( ostype ) ) ostype * sepOn( ostype * );
+forall( dtype ostype | ostream( ostype ) ) ostype * sepOff( ostype * );
 
 // writes the range [begin, end) to the given stream
-forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
+forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
 void write( iterator_type begin, iterator_type end, os_type *os );
 
-forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
+forall( otype elt_type | writeable( elt_type ), otype iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) )
 void write_reverse( iterator_type begin, iterator_type end, os_type *os );
 
 //---------------------------------------
 
-context istream( dtype istype ) {
+trait istream( dtype istype ) {
 	int fail( istype * );
 	int eof( istype * );
-	istype * get( istype *, int * );
-	istype * read( istype *, char *, streamsize_type );
+	void open( istype * is, const char * name, const char * mode );
+	void close( istype * is );
+	istype * read( istype *, char *, unsigned long int );
 	istype * ungetc( istype *, char );
+	int scanfmt( istype *, const char fmt[], ... );
 };
 
-context readable( type T ) {
+trait readable( otype T ) {
 	forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, T );
 };
 
-forall( dtype istype | istream( istype ) )
-istype * ?|?( istype *, char * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, char * );
 
-forall( dtype istype | istream( istype ) )
-istype * ?|?( istype *, int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, short int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned short int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long long int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long int * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, unsigned long long int * );
 
-#endif // IOSTREAM_H
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double * );
+
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, float _Complex * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, double _Complex * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, long double _Complex * );
+
+struct _Istream_str1 { char * s; };
+_Istream_str1 str( char * );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str1 );
+
+struct _Istream_str2 { char * s; int size; };
+_Istream_str2 str( char *, int size );
+forall( dtype istype | istream( istype ) ) istype * ?|?( istype *, _Istream_str2 );
+
+#endif // __IOSTREAM_H__
 
 // Local Variables: //
Index: src/libcfa/iostream.c
===================================================================
--- src/libcfa/iostream.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/iostream.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -7,9 +7,9 @@
 // iostream.c -- 
 //
-// Author           : Richard C. Bilson
+// Author           : Peter A. Buhr
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 17 14:19:56 2016
-// Update Count     : 76
+// Last Modified On : Wed Mar  2 18:06:35 2016
+// Update Count     : 208
 //
 
@@ -21,117 +21,177 @@
 #include <float.h>										// DBL_DIG, LDBL_DIG
 #include <complex.h>									// creal, cimag
+#include <ctype.h>										// isspace, ispunct
 }
 
 forall( dtype ostype | ostream( ostype ) )
 ostype * ?|?( ostype *os, char c ) {
-	return write( os, &c, 1 );
+	prtfmt( os, "%c", c );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, short int si ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%hd", si );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, unsigned short int usi ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%hu", usi );
+	return os;
 } // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
 ostype * ?|?( ostype *os, int i ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%d", i ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, unsigned int i ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%u", i ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, long int i ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%ld", i ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, long long int i ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%lld", i ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, unsigned long int i ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%lu", i ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, unsigned long long int i ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%llu", i ) );
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%d", i );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, unsigned int ui ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%u", ui );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, long int li ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%ld", li );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, unsigned long int uli ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%lu", uli );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, long long int lli ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%lld", lli );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, unsigned long long int ulli ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%llu", ulli );
+	return os;
 } // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
 ostype * ?|?( ostype *os, float f ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%g", f ) );
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%g", f );
+	return os;
 } // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
 ostype * ?|?( ostype *os, double d ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%.*lg", DBL_DIG, d ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, long double d ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%.*Lg", LDBL_DIG, d ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, float _Complex c ) {
-	return os | crealf( c ) | (cimagf( c ) < 0 ? "" : "+") | cimagf( c ) | 'i';
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, double _Complex c ) {
-	return os | creal( c ) | (cimag( c ) < 0 ? "" : "+") | cimag( c ) | 'i';
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, long double _Complex c ) {
-	return os | creall( c ) | (cimagl( c ) < 0 ? "" : "+") | cimagl( c ) | 'i';
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%.*lg", DBL_DIG, d );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, long double ld ) {
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%.*Lg", LDBL_DIG, ld );
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, float _Complex fc ) {
+	os | crealf( fc );
+	if ( cimagf( fc ) >= 0 ) os | '+';
+	os | "" | cimagf( fc ) | 'i';
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, double _Complex dc ) {
+	os | creal( dc );
+	if ( cimag( dc ) >= 0 ) os | '+';
+	os | "" | cimag( dc ) | 'i';
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, long double _Complex ldc ) {
+	os | creall( ldc );
+	if ( cimagl( ldc ) >= 0 ) os | '+';
+	os | "" | cimagl( ldc ) | 'i';
+	return os;
+} // ?|?
+
+forall( dtype ostype | ostream( ostype ) )
+ostype * ?|?( ostype *os, const char *cp ) {
+	int len = strlen( cp );
+	// null string => no separator
+  if ( len == 0 ) { sepOff( os ); return os; }
+	// first character NOT spacing or special punctuation => add left separator
+	if ( sepPrt( os ) && isspace( cp[0] ) == 0 && cp[0] != '.' && cp[0] != ',' ) {
+		prtfmt( os, "%s", sepGet( os ) );
+	} // if
+	// last character is spacing or special punctuation => turn off separator for next item
+	unsigned int posn = len - 1;
+	if ( isspace( cp[posn] ) || cp[posn] == ':' || cp[posn] == '$' ) {
+		sepOff( os );
+	} else {
+		sepOn( os );
+	} // if
+	return write( os, cp, len );
 } // ?|?
 
 forall( dtype ostype | ostream( ostype ) )
 ostype * ?|?( ostype *os, const void *p ) {
-	char buffer[32];
-	return write( os, buffer, sprintf( buffer, "%p", p ) );
-} // ?|?
-
-forall( dtype ostype | ostream( ostype ) )
-ostype * ?|?( ostype *os, const char *cp ) {
-	return write( os, cp, strlen( cp ) );
-} // ?|?
-
-
-forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) 
-retostype * ?|?( ostype *os, retostype * (*manip)(ostype*) ) {
-  return manip( os );
-}
+	if ( sepPrt( os ) ) prtfmt( os, "%s", sepGet( os ) ); else sepOn( os );
+	prtfmt( os, "%p", p );
+	return os;
+} // ?|?
+
+
+forall( dtype ostype | ostream( ostype ) ) 
+ostype * ?|?( ostype *os, ostype * (* manip)( ostype * ) ) {
+	return manip( os );
+} // ?|?
 
 forall( dtype ostype | ostream( ostype ) ) 
 ostype * endl( ostype * os ) {
-	os | "\n";
+	os | '\n';
 	flush( os );
+	sepOff( os );
 	return os;
 } // endl
 
+forall( dtype ostype | ostream( ostype ) ) 
+ostype * sepOn( ostype * os ) {
+	sepOn( os );
+	return os;
+} // sepOn
+
+forall( dtype ostype | ostream( ostype ) ) 
+ostype * sepOff( ostype * os ) {
+	sepOff( os );
+	return os;
+} // sepOff
+
 //---------------------------------------
 
-forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ),
-		dtype os_type | ostream( os_type ) )
-void write( iterator_type begin, iterator_type end, os_type *os ) {
-	void print( elt_type i ) { os | i | ' '; }
+forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
+void write( iteratortype begin, iteratortype end, ostype *os ) {
+	void print( elttype i ) { os | i; }
 	for_each( begin, end, print );
 } // ?|?
 
-forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ),
-		dtype os_type | ostream( os_type ) )
-void write_reverse( iterator_type begin, iterator_type end, os_type *os ) {
-	void print( elt_type i ) { os | i | ' '; }
+forall( otype elttype | writeable( elttype ), otype iteratortype | iterator( iteratortype, elttype ), dtype ostype | ostream( ostype ) )
+void write_reverse( iteratortype begin, iteratortype end, ostype *os ) {
+	void print( elttype i ) { os | i; }
 	for_each_reverse( begin, end, print );
 } // ?|?
@@ -140,12 +200,116 @@
 
 forall( dtype istype | istream( istype ) )
-istype * ?|?( istype *is, char *cp ) {
-	return read( is, cp, 1 );
-} // ?|?
-
-forall( dtype istype | istream( istype ) )
-istype * ?|?( istype *is, int *ip ) {
-	return get( is, ip );
-} // ?|?
+istype * ?|?( istype * is, char * c ) {
+	scanfmt( is, "%c", c );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, short int * si ) {
+	scanfmt( is, "%hd", si );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, unsigned short int * usi ) {
+	scanfmt( is, "%hu", usi );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, int * i ) {
+	scanfmt( is, "%d", i );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, unsigned int * ui ) {
+	scanfmt( is, "%u", ui );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, long int * li ) {
+	scanfmt( is, "%ld", li );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, unsigned long int * ulli ) {
+	scanfmt( is, "%lu", ulli );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, long long int * lli ) {
+	scanfmt( is, "%lld", lli );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, unsigned long long int * ulli ) {
+	scanfmt( is, "%llu", ulli );
+	return is;
+} // ?|?
+
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, float * f ) {
+	scanfmt( is, "%f", f );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, double * d ) {
+	scanfmt( is, "%lf", d );
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, long double * ld ) {
+	scanfmt( is, "%Lf", ld );
+	return is;
+} // ?|?
+
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, float _Complex * fc ) {
+	float re, im;
+	scanfmt( is, "%g%gi", &re, &im );
+	*fc = re + im * _Complex_I;
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, double _Complex * dc ) {
+	double re, im;
+	scanfmt( is, "%lf%lfi", &re, &im );
+	*dc = re + im * _Complex_I;
+	return is;
+} // ?|?
+
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, long double _Complex * ldc ) {
+	long double re, im;
+	scanfmt( is, "%Lf%Lfi", &re, &im );
+	*ldc = re + im * _Complex_I;
+	return is;
+} // ?|?
+
+_Istream_str1 str( char * s ) { _Istream_str1 s = { s }; return s; }
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, _Istream_str1 str ) {
+	scanfmt( is, "%s", str.s );
+	return is;
+} // str
+
+_Istream_str2 str( char * s, int size ) { _Istream_str2 s = { s, size }; return s; }
+forall( dtype istype | istream( istype ) )
+istype * ?|?( istype * is, _Istream_str2 str ) {
+	char buf[16];
+	sprintf( buf, "%%%ds", str.size );
+	scanfmt( is, buf, str.s );
+	return is;
+} // str
 
 // Local Variables: //
Index: src/libcfa/iterator
===================================================================
--- src/libcfa/iterator	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/iterator	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Jan 27 23:49:13 2016
-// Update Count     : 7
+// Last Modified On : Wed Mar  2 18:06:05 2016
+// Update Count     : 9
 //
 
@@ -18,5 +18,5 @@
 
 // An iterator can be used to traverse a data structure.
-context iterator( type iterator_type, type elt_type ) {
+trait iterator( otype iterator_type, otype elt_type ) {
 	// point to the next element
 //	iterator_type ?++( iterator_type * );
@@ -32,5 +32,5 @@
 };
 
-context iterator_for( type iterator_type, type collection_type, type elt_type | iterator( iterator_type, elt_type ) ) {
+trait iterator_for( otype iterator_type, otype collection_type, otype elt_type | iterator( iterator_type, elt_type ) ) {
 //	[ iterator_type begin, iterator_type end ] get_iterators( collection_type );
 	iterator_type begin( collection_type );
@@ -38,8 +38,8 @@
 };
 
-forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
+forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
 void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
 
-forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
+forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
 void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) );
 
Index: src/libcfa/iterator.c
===================================================================
--- src/libcfa/iterator.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/iterator.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,11 +10,11 @@
 // Created On       : Wed May 27 17:56:53 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Tue Jan 26 17:16:07 2016
-// Update Count     : 26
+// Last Modified On : Wed Mar  2 18:08:11 2016
+// Update Count     : 27
 //
 
 #include "iterator"
 
-forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
+forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
 void for_each( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
 	for ( iterator_type i = begin; i != end; ++i ) {
@@ -23,5 +23,5 @@
 }
 
-forall( type iterator_type, type elt_type | iterator( iterator_type, elt_type ) )
+forall( otype iterator_type, otype elt_type | iterator( iterator_type, elt_type ) )
 void for_each_reverse( iterator_type begin, iterator_type end, void (*func)( elt_type ) ) {
 	for ( iterator_type i = end; i != begin; ) {
Index: src/libcfa/prelude.cf
===================================================================
--- src/libcfa/prelude.cf	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/prelude.cf	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -1,2 +1,3 @@
+# 2 "prelude.cf"  // needed for error messages from this file
 //                               -*- Mode: C -*- 
 // 
@@ -8,6 +9,6 @@
 // Created On       : Sat Nov 29 07:23:41 2014
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jan  4 11:13:26 2016
-// Update Count     : 81
+// Last Modified On : Wed Mar  2 18:03:41 2016
+// Update Count     : 89
 //
 
@@ -63,21 +64,21 @@
 long double _Complex	?--( long double _Complex * ),		?--( volatile long double _Complex * );
 
-forall( type T ) T *			 ?++(		     T ** );
-forall( type T ) const T *		 ?++( const	     T ** );
-forall( type T ) volatile T *		 ?++(	    volatile T ** );
-forall( type T ) const volatile T *	 ?++( const volatile T ** );
-forall( type T ) T *			 ?--(		     T ** );
-forall( type T ) const T *		 ?--( const	     T ** );
-forall( type T ) volatile T *		 ?--(	    volatile T ** );
-forall( type T ) const volatile T *	 ?--( const volatile T ** );
-
-forall( type T ) lvalue T		 ?[?](		      T *,	    ptrdiff_t );
-forall( type T ) const lvalue T		 ?[?]( const	      T *,	    ptrdiff_t );
-forall( type T ) volatile lvalue T	 ?[?](       volatile T *,	    ptrdiff_t );
-forall( type T ) const volatile lvalue T ?[?]( const volatile T *,	    ptrdiff_t );
-forall( type T ) lvalue T		 ?[?](		ptrdiff_t,		  T * );
-forall( type T ) const lvalue T		 ?[?](		ptrdiff_t, const	  T * );
-forall( type T ) volatile lvalue T	 ?[?](		ptrdiff_t,	 volatile T * );
-forall( type T ) const volatile lvalue T ?[?](		ptrdiff_t, const volatile T * );
+forall( otype T ) T *			 ?++(		     T ** );
+forall( otype T ) const T *		 ?++( const	     T ** );
+forall( otype T ) volatile T *		 ?++(	    volatile T ** );
+forall( otype T ) const volatile T *	 ?++( const volatile T ** );
+forall( otype T ) T *			 ?--(		     T ** );
+forall( otype T ) const T *		 ?--( const	     T ** );
+forall( otype T ) volatile T *		 ?--(	    volatile T ** );
+forall( otype T ) const volatile T *	 ?--( const volatile T ** );
+
+forall( otype T ) lvalue T		 ?[?](		      T *,	    ptrdiff_t );
+forall( otype T ) const lvalue T	 ?[?]( const	      T *,	    ptrdiff_t );
+forall( otype T ) volatile lvalue T	 ?[?](       volatile T *,	    ptrdiff_t );
+forall( otype T ) const volatile lvalue T ?[?]( const volatile T *,	    ptrdiff_t );
+forall( otype T ) lvalue T		 ?[?](		ptrdiff_t,		  T * );
+forall( otype T ) const lvalue T	 ?[?](		ptrdiff_t, const	  T * );
+forall( otype T ) volatile lvalue T	 ?[?](		ptrdiff_t,	 volatile T * );
+forall( otype T ) const volatile lvalue T ?[?](		ptrdiff_t, const volatile T * );
 
 // ------------------------------------------------------------
@@ -101,17 +102,17 @@
 long double _Complex	++?( long double _Complex * ),		--?( long double _Complex * );
 
-forall( type T ) T *			 ++?(		     T ** );
-forall( type T ) const T *		 ++?( const	     T ** );
-forall( type T ) volatile T *		 ++?(	    volatile T ** );
-forall( type T ) const volatile T *	 ++?( const volatile T ** );
-forall( type T ) T *			 --?(		     T ** );
-forall( type T ) const T *		 --?( const	     T ** );
-forall( type T ) volatile T *		 --?(	    volatile T ** );
-forall( type T ) const volatile T *	 --?( const volatile T ** );
-
-forall( type T ) lvalue T		 *?(		     T * );
-forall( type T ) const lvalue T		 *?( const	     T * );
-forall( type T ) volatile lvalue T	 *?(       volatile  T * );
-forall( type T ) const volatile lvalue T *?( const volatile  T * );
+forall( otype T ) T *			 ++?(		     T ** );
+forall( otype T ) const T *		 ++?( const	     T ** );
+forall( otype T ) volatile T *		 ++?(	    volatile T ** );
+forall( otype T ) const volatile T *	 ++?( const volatile T ** );
+forall( otype T ) T *			 --?(		     T ** );
+forall( otype T ) const T *		 --?( const	     T ** );
+forall( otype T ) volatile T *		 --?(	    volatile T ** );
+forall( otype T ) const volatile T *	 --?( const volatile T ** );
+
+forall( otype T ) lvalue T		 *?(		     T * );
+forall( otype T ) const lvalue T		 *?( const	     T * );
+forall( otype T ) volatile lvalue T	 *?(       volatile  T * );
+forall( otype T ) const volatile lvalue T *?( const volatile  T * );
 forall( ftype FT ) lvalue FT		 *?( FT * );
 
@@ -183,17 +184,17 @@
 long double _Complex	?+?( long double _Complex, long double _Complex ),	?-?( long double _Complex, long double _Complex );
 
-forall( type T ) T *			?+?(		    T *,	  ptrdiff_t );
-forall( type T ) T *			?+?(	      ptrdiff_t,		T * );
-forall( type T ) const T *		?+?( const	    T *,	  ptrdiff_t );
-forall( type T ) const T *		?+?(	      ptrdiff_t, const		T * );
-forall( type T ) volatile T *		?+?(	   volatile T *,	  ptrdiff_t );
-forall( type T ) volatile T *		?+?(	      ptrdiff_t,       volatile T * );
-forall( type T ) const volatile T *	?+?( const volatile T *,	  ptrdiff_t );
-forall( type T ) const volatile T *	?+?(	      ptrdiff_t, const volatile T * );
-forall( type T ) T *			?-?(		    T *,	  ptrdiff_t );
-forall( type T ) const T *		?-?( const	    T *,	  ptrdiff_t );
-forall( type T ) volatile T *		?-?(	   volatile T *,	  ptrdiff_t );
-forall( type T ) const volatile T *	?-?( const volatile T *,	  ptrdiff_t );
-forall( type T ) ptrdiff_t		?-?( const volatile T *, const volatile T * );
+forall( otype T ) T *			?+?(		    T *,	  ptrdiff_t );
+forall( otype T ) T *			?+?(	      ptrdiff_t,		T * );
+forall( otype T ) const T *		?+?( const	    T *,	  ptrdiff_t );
+forall( otype T ) const T *		?+?(	      ptrdiff_t, const		T * );
+forall( otype T ) volatile T *		?+?(	   volatile T *,	  ptrdiff_t );
+forall( otype T ) volatile T *		?+?(	      ptrdiff_t,       volatile T * );
+forall( otype T ) const volatile T *	?+?( const volatile T *,	  ptrdiff_t );
+forall( otype T ) const volatile T *	?+?(	      ptrdiff_t, const volatile T * );
+forall( otype T ) T *			?-?(		    T *,	  ptrdiff_t );
+forall( otype T ) const T *		?-?( const	    T *,	  ptrdiff_t );
+forall( otype T ) volatile T *		?-?(	   volatile T *,	  ptrdiff_t );
+forall( otype T ) const volatile T *	?-?( const volatile T *,	  ptrdiff_t );
+forall( otype T ) ptrdiff_t		?-?( const volatile T *, const volatile T * );
 
 // ------------------------------------------------------------
@@ -431,20 +432,20 @@
 forall( ftype FT ) FT *			?=?( FT * volatile *, forall( ftype FT2 ) FT2 * );
 
-forall( type T ) T *			?+=?(		     T *	  *, ptrdiff_t );
-forall( type T ) T *			?+=?(		     T * volatile *, ptrdiff_t );
-forall( type T ) const T *		?+=?( const	     T *	  *, ptrdiff_t );
-forall( type T ) const T *		?+=?( const	     T * volatile *, ptrdiff_t );
-forall( type T ) volatile T *		?+=?(	    volatile T *	  *, ptrdiff_t );
-forall( type T ) volatile T *		?+=?(	    volatile T * volatile *, ptrdiff_t );
-forall( type T ) const volatile T *	?+=?( const volatile T *	  *, ptrdiff_t );
-forall( type T ) const volatile T *	?+=?( const volatile T * volatile *, ptrdiff_t );
-forall( type T ) T *			?-=?(		     T *	  *, ptrdiff_t );
-forall( type T ) T *			?-=?(		     T * volatile *, ptrdiff_t );
-forall( type T ) const T *		?-=?( const	     T *	  *, ptrdiff_t );
-forall( type T ) const T *		?-=?( const	     T * volatile *, ptrdiff_t );
-forall( type T ) volatile T *		?-=?(	    volatile T *	  *, ptrdiff_t );
-forall( type T ) volatile T *		?-=?(	    volatile T * volatile *, ptrdiff_t );
-forall( type T ) const volatile T *	?-=?( const volatile T *	  *, ptrdiff_t );
-forall( type T ) const volatile T *	?-=?( const volatile T * volatile *, ptrdiff_t );
+forall( otype T ) T *			?+=?(		     T *	  *, ptrdiff_t );
+forall( otype T ) T *			?+=?(		     T * volatile *, ptrdiff_t );
+forall( otype T ) const T *		?+=?( const	     T *	  *, ptrdiff_t );
+forall( otype T ) const T *		?+=?( const	     T * volatile *, ptrdiff_t );
+forall( otype T ) volatile T *		?+=?(	    volatile T *	  *, ptrdiff_t );
+forall( otype T ) volatile T *		?+=?(	    volatile T * volatile *, ptrdiff_t );
+forall( otype T ) const volatile T *	?+=?( const volatile T *	  *, ptrdiff_t );
+forall( otype T ) const volatile T *	?+=?( const volatile T * volatile *, ptrdiff_t );
+forall( otype T ) T *			?-=?(		     T *	  *, ptrdiff_t );
+forall( otype T ) T *			?-=?(		     T * volatile *, ptrdiff_t );
+forall( otype T ) const T *		?-=?( const	     T *	  *, ptrdiff_t );
+forall( otype T ) const T *		?-=?( const	     T * volatile *, ptrdiff_t );
+forall( otype T ) volatile T *		?-=?(	    volatile T *	  *, ptrdiff_t );
+forall( otype T ) volatile T *		?-=?(	    volatile T * volatile *, ptrdiff_t );
+forall( otype T ) const volatile T *	?-=?( const volatile T *	  *, ptrdiff_t );
+forall( otype T ) const volatile T *	?-=?( const volatile T * volatile *, ptrdiff_t );
 
 _Bool			?=?( _Bool *, _Bool ),					?=?( volatile _Bool *, _Bool );
Index: src/libcfa/stdlib
===================================================================
--- src/libcfa/stdlib	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/stdlib	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:12:35 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Feb  5 15:21:18 2016
-// Update Count     : 61
+// Last Modified On : Wed Mar  2 17:38:21 2016
+// Update Count     : 64
 //
 
@@ -20,19 +20,18 @@
 } // extern "C"
 
-forall( type T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
-forall( type T ) T * memset( T * ptr );					// remove when default value available
+forall( otype T ) T * memset( T * ptr, unsigned char fill ); // use default value '\0' for fill
+forall( otype T ) T * memset( T * ptr );					// remove when default value available
 
-forall( type T ) T * malloc( void );
-forall( type T ) T * malloc( char fill );
-forall( type T ) T * malloc( size_t size );
-forall( type T ) T * malloc( T * ptr, size_t size );
-forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill );
-forall( type T ) T * calloc( size_t size );
-forall( type T ) T * realloc( T * ptr, size_t size );
-forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill );
+forall( otype T ) T * malloc( void );
+forall( otype T ) T * malloc( char fill );
+forall( otype T ) T * malloc( T * ptr, size_t size );
+forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill );
+forall( otype T ) T * calloc( size_t size );
+forall( otype T ) T * realloc( T * ptr, size_t size );
+forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill );
 
-forall( type T ) T * aligned_alloc( size_t alignment );
-forall( type T ) T * memalign( size_t alignment );		// deprecated
-forall( type T ) int posix_memalign( T ** ptr, size_t alignment );
+forall( otype T ) T * aligned_alloc( size_t alignment );
+forall( otype T ) T * memalign( size_t alignment );		// deprecated
+forall( otype T ) int posix_memalign( T ** ptr, size_t alignment );
 
 //---------------------------------------
@@ -66,13 +65,13 @@
 //---------------------------------------
 
-forall( type T | { int ?<?( T, T ); } )
+forall( otype T | { int ?<?( T, T ); } )
 T * bsearch( const T key, const T * arr, size_t dimension );
 
-forall( type T | { int ?<?( T, T ); } )
+forall( otype T | { int ?<?( T, T ); } )
 void qsort( const T * arr, size_t dimension );
 
 //---------------------------------------
 
-forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )
+forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
 [ T, T ] div( T t1, T t2 );
 
@@ -108,11 +107,11 @@
 //---------------------------------------
 
-forall( type T | { int ?<?( T, T ); } )
+forall( otype T | { int ?<?( T, T ); } )
 T min( const T t1, const T t2 );
 
-forall( type T | { int ?>?( T, T ); } )
+forall( otype T | { int ?>?( T, T ); } )
 T max( const T t1, const T t2 );
 
-forall( type T )
+forall( otype T )
 void swap( T * t1, T * t2 );
 
Index: src/libcfa/stdlib.c
===================================================================
--- src/libcfa/stdlib.c	(revision 9d7b3ea1ccb5d1eccef1e7382c27f22177146c1a)
+++ src/libcfa/stdlib.c	(revision 36ebd0388f8605c4fa18c69839c9a014c84e8fa2)
@@ -10,6 +10,6 @@
 // Created On       : Thu Jan 28 17:10:29 2016
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Feb 10 15:45:56 2016
-// Update Count     : 140
+// Last Modified On : Wed Mar  2 17:38:47 2016
+// Update Count     : 143
 //
 
@@ -27,22 +27,22 @@
 } // extern "C"
 
-forall( type T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill
+forall( otype T ) T * memset( T * ptr, unsigned char fill ) { // use default value '\0' for fill
 	printf( "memset1\n" );
     return (T *)memset( ptr, (int)fill, malloc_usable_size( ptr ) );
 } // memset
-forall( type T ) T * memset( T * ptr ) {				// remove when default value available
+forall( otype T ) T * memset( T * ptr ) {				// remove when default value available
 	printf( "memset2\n" );
     return (T *)memset( ptr, 0, malloc_usable_size( ptr ) );
 } // memset
 
-forall( type T ) T * malloc( void ) {
+forall( otype T ) T * malloc( void ) {
 	printf( "malloc1\n" );
     return (T *)malloc( sizeof(T) );
 } // malloc
-forall( type T ) T * malloc( size_t size ) {
+forall( otype T ) T * malloc( size_t size ) {
 	printf( "malloc2\n" );
     return (T *)(void *)malloc( size );
 } // malloc
-forall( type T ) T * malloc( char fill ) {
+forall( otype T ) T * malloc( char fill ) {
 	printf( "malloc3\n" );
 	T * ptr = (T *)malloc( sizeof(T) );
@@ -50,14 +50,14 @@
 } // malloc
 
-forall( type T ) T * calloc( size_t size ) {
+forall( otype T ) T * calloc( size_t size ) {
 	printf( "calloc\n" );
     return (T *)calloc( size, sizeof(T) );
 } // calloc
 
-forall( type T ) T * realloc( T * ptr, size_t size ) {
+forall( otype T ) T * realloc( T * ptr, size_t size ) {
 	printf( "realloc1\n" );
     return (T *)(void *)realloc( (void *)ptr, size );
 } // realloc
-forall( type T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
+forall( otype T ) T * realloc( T * ptr, size_t size, unsigned char fill ) {
 	printf( "realloc2\n" );
     char * nptr = (T *)(void *)realloc( (void *)ptr, size );
@@ -67,24 +67,24 @@
 } // realloc
 
-forall( type T ) T * malloc( T * ptr, size_t size ) {
+forall( otype T ) T * malloc( T * ptr, size_t size ) {
 	printf( "malloc4\n" );
     return (T *)realloc( ptr, size );
 } // malloc
-forall( type T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
+forall( otype T ) T * malloc( T * ptr, size_t size, unsigned char fill ) {
 	printf( "malloc5\n" );
     return (T *)realloc( ptr, size, fill );
 } // malloc
 
-forall( type T ) T * aligned_alloc( size_t alignment ) {
+forall( otype T ) T * aligned_alloc( size_t alignment ) {
 	printf( "aligned_alloc\n" );
     return (T *)memalign( alignment, sizeof(T) );
 } // aligned_alloc
 
-forall( type T ) T * memalign( size_t alignment ) {
+forall( otype T ) T * memalign( size_t alignment ) {
 	printf( "memalign\n" );
     return (T *)memalign( alignment, sizeof(T) );
 } // memalign
 
-forall( type T ) int posix_memalign( T ** ptr, size_t alignment ) {
+forall( otype T ) int posix_memalign( T ** ptr, size_t alignment ) {
 	printf( "posix_memalign\n" );
     return posix_memalign( (void **)ptr, alignment, sizeof(T) );
@@ -123,4 +123,5 @@
 	return ulli;
 }
+
 float ato( const char * ptr ) {
 	float f;
@@ -138,4 +139,5 @@
 	return ld;
 }
+
 float _Complex ato( const char * ptr ) {
 	float re, im;
@@ -172,4 +174,5 @@
 	return strtoull( sptr, eptr, base );
 }
+
 float strto( const char * sptr, char ** eptr ) {
 	return strtof( sptr, eptr );
@@ -181,4 +184,5 @@
 	return strtold( sptr, eptr );
 }
+
 float _Complex strto( const char * sptr, char ** eptr ) {
 	float re, im;
@@ -208,5 +212,5 @@
 //---------------------------------------
 
-forall( type T | { int ?<?( T, T ); } )
+forall( otype T | { int ?<?( T, T ); } )
 T * bsearch( const T key, const T * arr, size_t dimension ) {
 	int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; }
@@ -214,5 +218,5 @@
 } // bsearch
 
-forall( type T | { int ?<?( T, T ); } )
+forall( otype T | { int ?<?( T, T ); } )
 void qsort( const T * arr, size_t dimension ) {
 	int comp( const void * t1, const void * t2 ) { return *(T *)t1 < *(T *)t2 ? -1 : *(T *)t2 < *(T *)t1 ? 1 : 0; }
@@ -222,5 +226,5 @@
 //---------------------------------------
 
-forall( type T | { T ?/?( T, T ); T ?%?( T, T ); } )
+forall( otype T | { T ?/?( T, T ); T ?%?( T, T ); } )
 [ T, T ] div( T t1, T t2 ) { /* return [ t1 / t2, t1 % t2 ]; */ }
 
@@ -253,15 +257,15 @@
 //---------------------------------------
 
-forall( type T | { int ?<?( T, T ); } )
+forall( otype T | { int ?<?( T, T ); } )
 T min( const T t1, const T t2 ) {
 	return t1 < t2 ? t1 : t2;
 } // min
 
-forall( type T | { int ?>?( T, T ); } )
+forall( otype T | { int ?>?( T, T ); } )
 T max( const T t1, const T t2 ) {
 	return t1 > t2 ? t1 : t2;
 } // max
 
-forall( type T )
+forall( otype T )
 void swap( T * t1, T * t2 ) {
 	T temp = *t1;
