cp-tree.def (PTRMEM_CST): New tree node.
authorMark Mitchell <mark@markmitchell.com>
Tue, 6 Oct 1998 14:20:30 +0000 (14:20 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Tue, 6 Oct 1998 14:20:30 +0000 (14:20 +0000)
* cp-tree.def (PTRMEM_CST): New tree node.
* cp-tree.h (ptrmem_cst): New type.
(lang_type): Remove local_typedecls.
(dummy): Increase to 12 bits from 11.
(CLASSTYPE_LOCAL_TYPEDECLS): Remove.
(PTRMEM_CST_CLASS): New macro.
(PTRMEM_CST_MEMBER): Likewise.
(current_access_specifier): New variable.
(current_class_type): Remove duplicate declaration.
(finish_struct): Change prototype.
(unreverse_member_declarations): New function.
(pushdecl_class_level): Change prototype.
(grok_enum_decls): Remove.
(fixup_anonymous_union): New function.
(grok_x_components): Change prototype.
(tsubst_chain): Remove.
(finish_member_template_decl): Likewise.
(check_explicit_specialization): Fix indentation.
(finish_class_definition): Change prototype.
(finish_member_class_template): Likewise.
(finish_member_declaration): New function.
(check_multiple_declarators): Likewise.
* class.c (class_stack_node_t): New type.
(current_class_base): Remove.
(current_class_stack): Change type.
(current_access_specifier): New variable.
(grow_method): Remove.
(check_member_decl_is_same_in_complete_scope): Break out from
finish_struct.
(make_method_vec): New function.
(free_method_vec): Likewise.
(add_implicitly_declared_members): Break out from finish_struct_1.
(free_method_vecs): New variable.
(add_method): Rework for direct use from parser.
(handle_using_decl): Watch for NULL_TREE while iterating through
CLASSTYPE_METHOD_VEC.
(finish_struct_methods): Don't build CLASSTYPE_METHOD_VEC here;
just do some error-checking.
(warn_hidden): Change iteration through CLASSTYPE_METHOD_VEC.
(finish_struct_1): Simplify.  Use add_implicitly_declared_members.
(finish_struct): Change prototype.  Simplify; fields and methods
are already set up at this point.
(init_class_processing): Set up current_class_stack.
(pushclass): Save current_access_specifier.
(popclass): Restore it.
(currently_open_class): Simplify.
(build_self_reference): Remove use of CLASSTYPE_LOCAL_TYPEDECLS.
* decl.c (saved_scope): Add access_specifier.
(maybe_push_to_top_level): Save it.
(pop_from_top_level): Restore it.
(maybe_process_template_type_declaration): Use
finish_member_declaration.
(pushtag): Likewise.
(pushdecl_class_level): Don't return a value.
(fixup_anonymous_union): Break out from grok_x_components.
(shadow_tag): Use it.
(xref_tag): Complain about using an elaborated type specifier to
reference a template type parameter or typedef name.
(xref_basetypes): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
(current_local_enum): Remove.
(build_enumerator): Call finish_member_declaration.
(grok_enum_decls): Remove.
* decl2.c (grok_x_components): Simplify.
(check_classfn): Change iteration through CLASSTYPE_METHOD_VEC.
(grokfield): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
(merge_functions): Add to comment.
(arg_assoc_type): Prototype.
(arg_assoc): Pass as many arguments as there are parameters.
* error.c (dump_expr): Handle PTRMEM_CST.  Improve handling of
OFFSET_REF.
* expr.c (cpls_expand_expr): Remove dead code.  Handle
PTRMEM_CST.
* friend.c (do_friend): Lookup friends when in nested classes.
Change comments.
* init.c (build_offset_ref): Do lookup even for classes that are
only partially defined.
(decl_constant_value): Remove dead code.
* method.c (build_overload_value): Remove hack where by TYPE was
not a TYPE.  Handle PTRMEM_CST.
(build_template_parm_names): Don't pass a PARM_DECL where a TYPE
should go.
* parse.y (components, notype_components, component_decl,
component_decl_1, component_declarator, component_declarator0):
Now all are itype rather than ttype.  Rework to add members to
classes on the fly.
(typesqpecqual_reserved): Use check_multiple_declarators.
(structsp): Update class to finish_class_definition.
(do_xref_defn): Unsplit into named_class_head.
(access_specifier): Set current_access_specifier.
* pt.c (set_current_access_from_decl): New function.
(finish_member_template_decl): Don't take the parameters.
(comp_template_args): Make more robust.
(lookup_template_class): Don't use current_local_enum.
(for_each_template_parm): Handle PTRMEM_CST.
(instantiate_class_template): Use set_current_access_from_decl,
finish_member_declaration and unreverse_member_declarations.  Set
lineno/input_filename before generating implicit member functions.
(type_unification_real): Don't assume back-unification happens
only for the last argument.
(regenerate_decl_from_template): Call pushclass a bit earlier.
(tsubst_chain): Remove.
(tsubst_enum): Use set_current_access_from_decl.
(set_mangled_name_for_template_decl): Fix indentation.
* search.c (lookup_fnfields_1): Change iteration through
CLASSTYPE_METHOD_VEC.
(dfs_pushdecls): Likewise.
(dfs_compress_decls): Likewise.
(add_conversions): Likewise.
* semantics.c (finish_class_definition): Don't take components.
Change call to finish_struct.
(finish_member_declaration): New function.
(finish_member_class_template): Don't take template parameters.
Change call to grok_x_components.  Call finish_member_template_decl.
(check_multiple_declarators): New function.
* sig.c (append_signature_fields): Work from the TYPE_METHODS, not
a passed in fieldlist.
* tree.c (search_tree): Handle PTRMEM_CST.
(mapcar): Likewise.
* typeck.c (unary_complex_lvalue): Build PTRMEM_CSTs, not
INTEGER_CSTs, for pointer-to-data members.

From-SVN: r22869

27 files changed:
gcc/cp/ChangeLog
gcc/cp/class.c
gcc/cp/cp-tree.def
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/cp/error.c
gcc/cp/expr.c
gcc/cp/friend.c
gcc/cp/init.c
gcc/cp/method.c
gcc/cp/parse.c
gcc/cp/parse.y
gcc/cp/pt.c
gcc/cp/search.c
gcc/cp/semantics.c
gcc/cp/sig.c
gcc/cp/tree.c
gcc/cp/typeck.c
gcc/testsuite/g++.old-deja/g++.other/elab1.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.pt/decl1.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.pt/friend35.C
gcc/testsuite/g++.old-deja/g++.pt/memtemp71.C
gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.pt/t05.C
gcc/testsuite/g++.old-deja/g++.robertl/eb109.C
gcc/testsuite/g++.old-deja/g++.robertl/eb49.C

index ff3901d385519439a3b2583c0c88e5207563c5b4..1588d2d3da8c92191c3da5d40971f215189bb887 100644 (file)
@@ -1,5 +1,126 @@
 1998-10-06  Mark Mitchell  <mark@markmitchell.com>
 
+       * cp-tree.def (PTRMEM_CST): New tree node.
+       * cp-tree.h (ptrmem_cst): New type.
+       (lang_type): Remove local_typedecls.
+       (dummy): Increase to 12 bits from 11.
+       (CLASSTYPE_LOCAL_TYPEDECLS): Remove.
+       (PTRMEM_CST_CLASS): New macro.
+       (PTRMEM_CST_MEMBER): Likewise.
+       (current_access_specifier): New variable.
+       (current_class_type): Remove duplicate declaration.
+       (finish_struct): Change prototype.
+       (unreverse_member_declarations): New function.
+       (pushdecl_class_level): Change prototype.
+       (grok_enum_decls): Remove.
+       (fixup_anonymous_union): New function.
+       (grok_x_components): Change prototype.
+       (tsubst_chain): Remove.
+       (finish_member_template_decl): Likewise.
+       (check_explicit_specialization): Fix indentation.
+       (finish_class_definition): Change prototype.
+       (finish_member_class_template): Likewise.
+       (finish_member_declaration): New function.
+       (check_multiple_declarators): Likewise.
+       * class.c (class_stack_node_t): New type.
+       (current_class_base): Remove.
+       (current_class_stack): Change type.
+       (current_access_specifier): New variable.
+       (grow_method): Remove.
+       (check_member_decl_is_same_in_complete_scope): Break out from
+       finish_struct.
+       (make_method_vec): New function.
+       (free_method_vec): Likewise.
+       (add_implicitly_declared_members): Break out from finish_struct_1.
+       (free_method_vecs): New variable.
+       (add_method): Rework for direct use from parser.
+       (handle_using_decl): Watch for NULL_TREE while iterating through
+       CLASSTYPE_METHOD_VEC.
+       (finish_struct_methods): Don't build CLASSTYPE_METHOD_VEC here;
+       just do some error-checking.
+       (warn_hidden): Change iteration through CLASSTYPE_METHOD_VEC.
+       (finish_struct_1): Simplify.  Use add_implicitly_declared_members.
+       (finish_struct): Change prototype.  Simplify; fields and methods
+       are already set up at this point.
+       (init_class_processing): Set up current_class_stack.
+       (pushclass): Save current_access_specifier.
+       (popclass): Restore it.
+       (currently_open_class): Simplify.
+       (build_self_reference): Remove use of CLASSTYPE_LOCAL_TYPEDECLS.
+       * decl.c (saved_scope): Add access_specifier.
+       (maybe_push_to_top_level): Save it.
+       (pop_from_top_level): Restore it.
+       (maybe_process_template_type_declaration): Use
+       finish_member_declaration. 
+       (pushtag): Likewise.
+       (pushdecl_class_level): Don't return a value.
+       (fixup_anonymous_union): Break out from grok_x_components.
+       (shadow_tag): Use it.
+       (xref_tag): Complain about using an elaborated type specifier to
+       reference a template type parameter or typedef name.
+       (xref_basetypes): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
+       (current_local_enum): Remove.
+       (build_enumerator): Call finish_member_declaration.
+       (grok_enum_decls): Remove.
+       * decl2.c (grok_x_components): Simplify.
+       (check_classfn): Change iteration through CLASSTYPE_METHOD_VEC.
+       (grokfield): Don't set CLASSTYPE_LOCAL_TYPEDECLS.
+       (merge_functions): Add to comment.
+       (arg_assoc_type): Prototype.
+       (arg_assoc): Pass as many arguments as there are parameters.
+       * error.c (dump_expr): Handle PTRMEM_CST.  Improve handling of
+       OFFSET_REF.
+       * expr.c (cpls_expand_expr): Remove dead code.  Handle
+       PTRMEM_CST.
+       * friend.c (do_friend): Lookup friends when in nested classes.
+       Change comments.
+       * init.c (build_offset_ref): Do lookup even for classes that are
+       only partially defined.
+       (decl_constant_value): Remove dead code.
+       * method.c (build_overload_value): Remove hack where by TYPE was
+       not a TYPE.  Handle PTRMEM_CST.
+       (build_template_parm_names): Don't pass a PARM_DECL where a TYPE
+       should go.
+       * parse.y (components, notype_components, component_decl,
+       component_decl_1, component_declarator, component_declarator0):
+       Now all are itype rather than ttype.  Rework to add members to
+       classes on the fly.
+       (typesqpecqual_reserved): Use check_multiple_declarators.
+       (structsp): Update class to finish_class_definition.
+       (do_xref_defn): Unsplit into named_class_head.
+       (access_specifier): Set current_access_specifier.
+       * pt.c (set_current_access_from_decl): New function.
+       (finish_member_template_decl): Don't take the parameters.
+       (comp_template_args): Make more robust.
+       (lookup_template_class): Don't use current_local_enum.
+       (for_each_template_parm): Handle PTRMEM_CST.
+       (instantiate_class_template): Use set_current_access_from_decl,
+       finish_member_declaration and unreverse_member_declarations.  Set
+       lineno/input_filename before generating implicit member functions.  
+       (type_unification_real): Don't assume back-unification happens
+       only for the last argument.
+       (regenerate_decl_from_template): Call pushclass a bit earlier.
+       (tsubst_chain): Remove.
+       (tsubst_enum): Use set_current_access_from_decl.
+       (set_mangled_name_for_template_decl): Fix indentation.
+       * search.c (lookup_fnfields_1): Change iteration through
+       CLASSTYPE_METHOD_VEC.
+       (dfs_pushdecls): Likewise.
+       (dfs_compress_decls): Likewise.
+       (add_conversions): Likewise.
+       * semantics.c (finish_class_definition): Don't take components.
+       Change call to finish_struct.
+       (finish_member_declaration): New function.
+       (finish_member_class_template): Don't take template parameters.
+       Change call to grok_x_components.  Call finish_member_template_decl.
+       (check_multiple_declarators): New function.
+       * sig.c (append_signature_fields): Work from the TYPE_METHODS, not
+       a passed in fieldlist.
+       * tree.c (search_tree): Handle PTRMEM_CST.
+       (mapcar): Likewise.
+       * typeck.c (unary_complex_lvalue): Build PTRMEM_CSTs, not
+       INTEGER_CSTs, for pointer-to-data members.
+       
        * call.c (resolve_args): Resolve template specializations, if
        possible.
 
index b64a91ad9a6cd29cc44828009a4b1ecae9ef40ad..33a443475c2afb440d39366a68adf2c20967f272 100644 (file)
@@ -43,11 +43,32 @@ extern struct obstack permanent_obstack;
 
 extern void set_class_shadows PROTO ((tree));
 
-/* Way of stacking class types.  */
-static tree *current_class_base, *current_class_stack;
-static int current_class_stacksize;
+/* The number of nested classes being processed.  If we are not in the
+   scope of any class, this is zero.  */
+
 int current_class_depth;
 
+/* In order to deal with nested classes, we keep a stack of classes.
+   The topmost entry is the innermost class, and is the entry at index
+   CURRENT_CLASS_DEPTH  */
+
+typedef struct class_stack_node {
+  /* The name of the class.  */
+  tree name;
+
+  /* The _TYPE node for the class.  */
+  tree type;
+
+  /* The access specifier pending for new declarations in the scope of
+     this class.  */
+  tree access;
+}* class_stack_node_t;
+
+/* The stack itself.  This is an dynamically resized array.  The
+   number of elements allocated is CURRENT_CLASS_STACK_SIZE.  */
+static int current_class_stack_size;
+static class_stack_node_t current_class_stack;
+
 /* When we're processing a member function, current_class_ptr is the
    PARM_DECL for the `this' pointer.  The current_class_ref is an
    expression for `*this'.  */
@@ -56,6 +77,7 @@ tree current_class_ptr, current_class_ref;
 /* The following two can be derived from the previous one */
 tree current_class_name;       /* IDENTIFIER_NODE: name of current class */
 tree current_class_type;       /* _TYPE: the type of the current class */
+tree current_access_specifier;
 tree previous_class_type;      /* _TYPE: the previous type that was a class */
 tree previous_class_values;    /* TREE_LIST: copy of the class_shadowed list
                                   when leaving an outermost class scope.  */
@@ -74,7 +96,6 @@ static tree build_vtable PROTO((tree, tree));
 static void prepare_fresh_vtable PROTO((tree, tree));
 static void fixup_vtable_deltas1 PROTO((tree, tree));
 static void fixup_vtable_deltas PROTO((tree, int, tree));
-static void grow_method PROTO((tree, tree *));
 static void finish_vtbls PROTO((tree, int, tree));
 static void modify_vtable_entry PROTO((tree, tree, tree));
 static tree get_vtable_entry_n PROTO((tree, unsigned HOST_WIDE_INT));
@@ -103,6 +124,10 @@ static void build_class_init_list PROTO((tree));
 static int finish_base_struct PROTO((tree, struct base_info *));
 static void finish_struct_methods PROTO((tree));
 static void maybe_warn_about_overly_private_class PROTO ((tree));
+static void check_member_decl_is_same_in_complete_scope PROTO((tree, tree));
+static tree make_method_vec PROTO((int));
+static void free_method_vec PROTO((tree));
+static tree add_implicitly_declared_members PROTO((tree, int, int, int));
 
 /* Way of stacking language names.  */
 tree *current_lang_base, *current_lang_stack;
@@ -1046,6 +1071,46 @@ add_virtual_function (pv, phv, has_virtual, fndecl, t)
 struct obstack class_obstack;
 extern struct obstack *current_obstack;
 
+/* These are method vectors that were too small for the number of
+   methods in some class, and so were abandoned.  */
+static tree free_method_vecs;
+
+/* Returns a method vector with enough room for N methods.  N should
+   be a power of two.  */
+
+static tree
+make_method_vec (n)
+     int n;
+{
+  tree new_vec;
+  tree* t;
+  
+  for (t = &free_method_vecs; *t; t = &(TREE_CHAIN (*t)))
+    /* Note that we don't use >= n here because we don't want to
+       allocate a very large vector where it isn't needed.  */
+    if (TREE_VEC_LENGTH (*t) == n)
+      {
+       new_vec = *t;
+       *t = TREE_CHAIN (new_vec);
+       TREE_CHAIN (new_vec) = NULL_TREE;
+       bzero (&TREE_VEC_ELT (new_vec, 0), n * sizeof (tree));
+       return new_vec;
+      }
+
+  new_vec = make_tree_vec (n);
+  return new_vec;
+}
+
+/* Free the method vector VEC.  */
+
+static void
+free_method_vec (vec)
+     tree vec;
+{
+  TREE_CHAIN (vec) = free_method_vecs;
+  free_method_vecs = vec;
+}
+
 /* Add method METHOD to class TYPE.  This is used when a method
    has been defined which did not initially appear in the class definition,
    and helps cut down on spurious error messages.
@@ -1059,109 +1124,127 @@ add_method (type, fields, method)
 {
   push_obstacks (&permanent_obstack, &permanent_obstack);
 
+  /* Setting the DECL_CONTEXT and DECL_CLASS_CONTEXT here is probably
+     redundant.  */
+  DECL_CONTEXT (method) = type;
+  DECL_CLASS_CONTEXT (method) = type;
+  
   if (fields && *fields)
-      *fields = build_overload (method, *fields);
-  else if (CLASSTYPE_METHOD_VEC (type) == 0)
-    {
-      tree method_vec = make_node (TREE_VEC);
-      if (TYPE_IDENTIFIER (type) == DECL_NAME (method))
-       {
-         /* ??? Is it possible for there to have been enough room in the
-            current chunk for the tree_vec structure but not a tree_vec
-            plus a tree*?  Will this work in that case?  */
-         obstack_free (current_obstack, method_vec);
-         obstack_blank (current_obstack, sizeof (struct tree_vec) + sizeof (tree *));
-         if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (method)))
-           TREE_VEC_ELT (method_vec, 1) = method;
-         else
-           TREE_VEC_ELT (method_vec, 0) = method;
-         TREE_VEC_LENGTH (method_vec) = 2;
-       }
-      else
+    *fields = build_overload (method, *fields);
+  else 
+    {
+      int len;
+      tree method_vec;
+
+      if (!CLASSTYPE_METHOD_VEC (type))
+       /* Make a new method vector.  We start with 8 entries.  We must
+          allocate at least two (for constructors and destructors), and
+          we're going to end up with an assignment operator at some
+          point as well.  
+
+          We could use a TREE_LIST for now, and convert it to a
+          TREE_VEC in finish_struct, but we would probably waste more
+          memory making the links in the list than we would by
+          over-allocating the size of the vector here.  Furthermore,
+          we would complicate all the code that expects this to be a
+          vector.  We keep a free list of vectors that we outgrew so
+          that we don't really waste any memory.  */
+       CLASSTYPE_METHOD_VEC (type) = make_method_vec (8);
+
+      method_vec = CLASSTYPE_METHOD_VEC (type);
+      len = TREE_VEC_LENGTH (method_vec);
+
+      if (DECL_NAME (method) == constructor_name (type))
        {
-         /* ??? Is it possible for there to have been enough room in the
-            current chunk for the tree_vec structure but not a tree_vec
-            plus a tree*?  Will this work in that case?  */
-         obstack_free (current_obstack, method_vec);
-         obstack_blank (current_obstack, sizeof (struct tree_vec) + 2*sizeof (tree *));
-         TREE_VEC_ELT (method_vec, 2) = method;
-         TREE_VEC_LENGTH (method_vec) = 3;
-         obstack_finish (current_obstack);
-       }
-      CLASSTYPE_METHOD_VEC (type) = method_vec;
-    }
-  else
-    {
-      tree method_vec = CLASSTYPE_METHOD_VEC (type);
-      int len = TREE_VEC_LENGTH (method_vec);
+         /* A new constructor or destructor.  Constructors go in 
+            slot 0; destructors go in slot 1.  */
+         int slot 
+           = DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (method)) ? 1 : 0;
 
-      /* Adding a new ctor or dtor.  This is easy because our
-         METHOD_VEC always has a slot for such entries.  */
-      if (TYPE_IDENTIFIER (type) == DECL_NAME (method))
-       {
-         int idx = !!DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (method));
-         /* TREE_VEC_ELT (method_vec, idx) = method; */
-         if (method != TREE_VEC_ELT (method_vec, idx))
-           TREE_VEC_ELT (method_vec, idx) =
-             build_overload (method, TREE_VEC_ELT (method_vec, idx));
+         TREE_VEC_ELT (method_vec, slot)
+           = build_overload (method, TREE_VEC_ELT (method_vec, slot));
        }
       else
        {
-         /* This is trickier.  We try to extend the TREE_VEC in-place,
-            but if that does not work, we copy all its data to a new
-            TREE_VEC that's large enough.  */
-         struct obstack *ob = &class_obstack;
-         tree *end = (tree *)obstack_next_free (ob);
+         int i;
 
-         if (end != TREE_VEC_END (method_vec))
+         /* See if we already have an entry with this name.  */
+         for (i = 2; i < len; ++i)
+           if (!TREE_VEC_ELT (method_vec, i)
+               || (DECL_NAME (OVL_CURRENT (TREE_VEC_ELT (method_vec, i))) 
+                   == DECL_NAME (method)))
+             break;
+               
+         if (i == len)
            {
-             ob = current_obstack;
-             TREE_VEC_LENGTH (method_vec) += 1;
-             TREE_VEC_ELT (method_vec, len) = NULL_TREE;
-             method_vec = copy_node (method_vec);
-             TREE_VEC_LENGTH (method_vec) -= 1;
+             /* We need a bigger method vector.  */
+             tree new_vec = make_method_vec (2 * len);
+             bcopy (&TREE_VEC_ELT (method_vec, 0),
+                    &TREE_VEC_ELT (new_vec, 0),
+                    len * sizeof (tree));
+             free_method_vec (method_vec);
+             len = 2 * len;
+             method_vec = CLASSTYPE_METHOD_VEC (type) = new_vec;
            }
-         else
+
+         if (IDENTIFIER_TYPENAME_P (DECL_NAME (method)))
            {
-             tree tmp_vec = (tree) obstack_base (ob);
-             if (obstack_room (ob) < sizeof (tree))
+             /* Type conversion operators have to come before
+                ordinary methods; add_conversions depends on this to
+                speed up looking for conversion operators.  So, if
+                necessary, we slide some of the vector elements up.
+                In theory, this makes this algorithm O(N^2) but we
+                don't expect many conversion operators.  */
+             for (i = 2; i < len; ++i)
                {
-                 obstack_blank (ob, sizeof (struct tree_common)
-                                + tree_code_length[(int) TREE_VEC]
-                                  * sizeof (char *)
-                                + len * sizeof (tree));
-                 tmp_vec = (tree) obstack_base (ob);
-                 bcopy ((char *) method_vec, (char *) tmp_vec,
-                        (sizeof (struct tree_common)
-                         + tree_code_length[(int) TREE_VEC] * sizeof (char *)
-                         + (len-1) * sizeof (tree)));
-                 method_vec = tmp_vec;
+                 tree fn = TREE_VEC_ELT (method_vec, i);
+                 tree name;
+
+                 if (!fn)
+                   /* There are no more entries in the vector, so we
+                      can insert the new conversion operator here.  */
+                   break;
+                 
+                 name = DECL_NAME (OVL_CURRENT (fn));
+                 if (!IDENTIFIER_TYPENAME_P (name))
+                   /* We can insert the new function right at the Ith
+                      position.  */
+                   break;
                }
+
+             if (!TREE_VEC_ELT (method_vec, i))
+               /* There is nothing in the Ith slot, so we can avoid
+                  moving anything.  */
+               ; 
              else
-               obstack_blank (ob, sizeof (tree));
+               {
+                 /* We know the last slot in the vector is empty
+                    because we know that at this point there's room for
+                    a new function.  */
+                 bcopy (&TREE_VEC_ELT (method_vec, i),
+                        &TREE_VEC_ELT (method_vec, i + 1),
+                        (len - i - 1) * sizeof (tree));
+                 TREE_VEC_ELT (method_vec, i) = NULL_TREE;
+               }
            }
 
-         obstack_finish (ob);
-         TREE_VEC_ELT (method_vec, len) = method;
-         TREE_VEC_LENGTH (method_vec) = len + 1;
-         CLASSTYPE_METHOD_VEC (type) = method_vec;
-
-         if (TYPE_BINFO_BASETYPES (type) && CLASSTYPE_BASELINK_VEC (type))
-           {
-             /* ??? May be better to know whether these can be extended?  */
-             tree baselink_vec = CLASSTYPE_BASELINK_VEC (type);
-
-             TREE_VEC_LENGTH (baselink_vec) += 1;
-             CLASSTYPE_BASELINK_VEC (type) = copy_node (baselink_vec);
-             TREE_VEC_LENGTH (baselink_vec) -= 1;
-
-             TREE_VEC_ELT (CLASSTYPE_BASELINK_VEC (type), len) = 0;
-           }
+         /* Actually insert the new method.  */
+         TREE_VEC_ELT (method_vec, i) 
+           = build_overload (method, TREE_VEC_ELT (method_vec, i));
+       }
+      
+      if (TYPE_BINFO_BASETYPES (type) && CLASSTYPE_BASELINK_VEC (type))
+       {
+         /* ??? May be better to know whether these can be extended?  */
+         tree baselink_vec = CLASSTYPE_BASELINK_VEC (type);
+         
+         TREE_VEC_LENGTH (baselink_vec) += 1;
+         CLASSTYPE_BASELINK_VEC (type) = copy_node (baselink_vec);
+         TREE_VEC_LENGTH (baselink_vec) -= 1;
+         
+         TREE_VEC_ELT (CLASSTYPE_BASELINK_VEC (type), len) = 0;
        }
     }
-  DECL_CONTEXT (method) = type;
-  DECL_CLASS_CONTEXT (method) = type;
-
   pop_obstacks ();
 }
 
@@ -1360,7 +1443,7 @@ handle_using_decl (using_decl, t, method_vec, fields)
   
   name = DECL_NAME (fdecl);
   n_methods = method_vec ? TREE_VEC_LENGTH (method_vec) : 0;
-  for (i = 2; i < n_methods; i++)
+  for (i = 2; i < n_methods && TREE_VEC_ELT (method_vec, i); i++)
     if (DECL_NAME (OVL_CURRENT (TREE_VEC_ELT (method_vec, i)))
        == name)
       {
@@ -1872,33 +1955,6 @@ finish_struct_bits (t, max_has_virtual)
     }
 }
 
-/* Add FNDECL to the method_vec growing on the class_obstack.  Used by
-   finish_struct_methods.  Note, FNDECL cannot be a constructor or
-   destructor, those cases are handled by the caller.  */
-
-static void
-grow_method (fndecl, method_vec_ptr)
-     tree fndecl;
-     tree *method_vec_ptr;
-{
-  tree method_vec = (tree)obstack_base (&class_obstack);
-
-  /* Start off past the constructors and destructor.  */
-  tree *testp = &TREE_VEC_ELT (method_vec, 2);
-
-  while (testp < (tree *) obstack_next_free (&class_obstack)
-        && (*testp == NULL_TREE || DECL_NAME (OVL_CURRENT (*testp)) != DECL_NAME (fndecl)))
-    testp++;
-
-  if (testp < (tree *) obstack_next_free (&class_obstack))
-    *testp = build_overload (fndecl, *testp);
-  else
-    {
-      obstack_ptr_grow (&class_obstack, fndecl);
-      *method_vec_ptr = (tree)obstack_base (&class_obstack);
-    }
-}
-
 /* Issue warnings about T having private constructors, but no friends,
    and so forth.  
 
@@ -2044,9 +2100,6 @@ maybe_warn_about_overly_private_class (t)
 /* Warn about duplicate methods in fn_fields.  Also compact method
    lists so that lookup can be made faster.
 
-   Algorithm: Outer loop builds lists by method name.  Inner loop
-   checks for redundant method names within a list.
-
    Data Structure: List of method lists.  The outer list is a
    TREE_LIST, whose TREE_PURPOSE field is the field name and the
    TREE_VALUE is the DECL_CHAIN of the FUNCTION_DECLs.  TREE_CHAIN
@@ -2069,22 +2122,10 @@ finish_struct_methods (t)
      tree t;
 {
   tree fn_fields;
-  tree method_vec;
+  tree method_vec = CLASSTYPE_METHOD_VEC (t);
   tree ctor_name = constructor_name (t);
   int i, n_baseclasses = CLASSTYPE_N_BASECLASSES (t);
 
-  /* Now prepare to gather fn_fields into vector.  */
-  struct obstack *ambient_obstack = current_obstack;
-  current_obstack = &class_obstack;
-  method_vec = make_tree_vec (2);
-  current_obstack = ambient_obstack;
-
-  /* Now make this a live vector.  */
-  obstack_free (&class_obstack, method_vec);
-
-  /* Save room for constructors and destructors.  */
-  obstack_blank (&class_obstack, sizeof (struct tree_vec) + sizeof (struct tree *));
-
   /* First fill in entry 0 with the constructors, entry 1 with destructors,
      and the next few with type conversion operators (if any).  */
   for (fn_fields = TYPE_METHODS (t); fn_fields; 
@@ -2119,32 +2160,8 @@ finish_struct_methods (t)
                    TYPE_HAS_NONPUBLIC_CTOR (t) = 2;
                }
            }
-         if (DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (fn_fields)))
-           {       
-             /* Destructors go in slot 1.  */
-             TREE_VEC_ELT (method_vec, 1) = 
-               build_overload (fn_fields, TREE_VEC_ELT (method_vec, 1));
-           }
-         else
-           {
-             /* Constructors go in slot 0.  */
-             TREE_VEC_ELT (method_vec, 0) = 
-               build_overload (fn_fields, TREE_VEC_ELT (method_vec, 0));
-           }
-       }
-      else if (IDENTIFIER_TYPENAME_P (fn_name))
-       grow_method (fn_fields, &method_vec);
-    }
-
-  for (fn_fields = TYPE_METHODS (t); fn_fields; 
-       fn_fields = TREE_CHAIN (fn_fields))
-    {
-      tree fn_name = DECL_NAME (fn_fields);
-
-      if (fn_name == ctor_name || IDENTIFIER_TYPENAME_P (fn_name))
-       continue;
-
-      if (fn_name == ansi_opname[(int) MODIFY_EXPR])
+       }
+      else if (fn_name == ansi_opname[(int) MODIFY_EXPR])
        {
          tree parmtype = TREE_VALUE (FUNCTION_ARG_CHAIN (fn_fields));
 
@@ -2156,15 +2173,8 @@ finish_struct_methods (t)
                TYPE_HAS_NONPUBLIC_ASSIGN_REF (t) = 2;
            }
        }
-
-      grow_method (fn_fields, &method_vec);
     }
 
-  TREE_VEC_LENGTH (method_vec) = (tree *)obstack_next_free (&class_obstack)
-    - (&TREE_VEC_ELT (method_vec, 0));
-  obstack_finish (&class_obstack);
-  CLASSTYPE_METHOD_VEC (t) = method_vec;
-
   if (TYPE_HAS_DESTRUCTOR (t) && !TREE_VEC_ELT (method_vec, 1))
     /* We thought there was a destructor, but there wasn't.  Some
        parse errors cause this anomalous situation.  */
@@ -2178,6 +2188,7 @@ finish_struct_methods (t)
      destructors), compute where member functions of the same
      name reside in base classes.  */
   if (n_baseclasses != 0
+      && method_vec
       && TREE_VEC_LENGTH (method_vec) > 2)
     {
       int len = TREE_VEC_LENGTH (method_vec);
@@ -2185,11 +2196,13 @@ finish_struct_methods (t)
       int any_links = 0;
       tree baselink_binfo = build_tree_list (NULL_TREE, TYPE_BINFO (t));
 
-      for (i = 2; i < len; i++)
+      for (i = 2; i < len && TREE_VEC_ELT (method_vec, i); i++)
        {
+         tree ovl = TREE_VEC_ELT (method_vec, i);
+
          TREE_VEC_ELT (baselink_vec, i)
            = get_baselinks (baselink_binfo, t, 
-                            DECL_NAME (OVL_CURRENT (TREE_VEC_ELT (method_vec, i))));
+                            DECL_NAME (OVL_CURRENT (ovl)));
          if (TREE_VEC_ELT (baselink_vec, i) != 0)
            any_links = 1;
        }
@@ -2995,7 +3008,7 @@ warn_hidden (t)
   int i;
 
   /* We go through each separately named virtual function.  */
-  for (i = 2; i < n_methods; ++i)
+  for (i = 2; i < n_methods && TREE_VEC_ELT (method_vec, i); ++i)
     {
       tree fns = TREE_VEC_ELT (method_vec, i);
       tree fndecl;
@@ -3096,6 +3109,90 @@ finish_struct_anon (t)
 
 extern int interface_only, interface_unknown;
 
+/* Create default constructors, assignment operators, and so forth for
+   the type indicated by T, if they are needed.
+   CANT_HAVE_DEFAULT_CTOR, CANT_HAVE_CONST_CTOR, and
+   CANT_HAVE_ASSIGNMENT are nonzero if, for whatever reason, the class
+   cannot have a default constructor, copy constructor taking a const
+   reference argument, or an assignment operator, respectively.  If a
+   virtual destructor is created, its DECL is returned; otherwise the
+   return value is NULL_TREE.  */
+
+static tree
+add_implicitly_declared_members (t, cant_have_default_ctor,
+                                cant_have_const_cctor,
+                                cant_have_assignment)
+     tree t;
+     int cant_have_default_ctor;
+     int cant_have_const_cctor;
+     int cant_have_assignment;
+{
+  tree default_fn;
+  tree implicit_fns = NULL_TREE;
+  tree name = TYPE_IDENTIFIER (t);
+  tree virtual_dtor = NULL_TREE;
+  tree *f;
+
+  /* Destructor.  */
+  if (TYPE_NEEDS_DESTRUCTOR (t) && !TYPE_HAS_DESTRUCTOR (t)
+      && !IS_SIGNATURE (t))
+    {
+      default_fn = cons_up_default_function (t, name, 0);
+      check_for_override (default_fn, t);
+
+      /* If we couldn't make it work, then pretend we didn't need it.  */
+      if (default_fn == void_type_node)
+       TYPE_NEEDS_DESTRUCTOR (t) = 0;
+      else
+       {
+         TREE_CHAIN (default_fn) = implicit_fns;
+         implicit_fns = default_fn;
+
+         if (DECL_VINDEX (default_fn))
+           virtual_dtor = default_fn;
+       }
+    }
+  TYPE_NEEDS_DESTRUCTOR (t) |= TYPE_HAS_DESTRUCTOR (t);
+
+  /* Default constructor.  */
+  if (! TYPE_HAS_CONSTRUCTOR (t) && ! cant_have_default_ctor
+      && ! IS_SIGNATURE (t))
+    {
+      default_fn = cons_up_default_function (t, name, 2);
+      TREE_CHAIN (default_fn) = implicit_fns;
+      implicit_fns = default_fn;
+    }
+
+  /* Copy constructor.  */
+  if (! TYPE_HAS_INIT_REF (t) && ! IS_SIGNATURE (t) && ! TYPE_FOR_JAVA (t))
+    {
+      /* ARM 12.18: You get either X(X&) or X(const X&), but
+        not both.  --Chip  */
+      default_fn = cons_up_default_function (t, name,
+                                            3 + cant_have_const_cctor);
+      TREE_CHAIN (default_fn) = implicit_fns;
+      implicit_fns = default_fn;
+    }
+
+  /* Assignment operator.  */
+  if (! TYPE_HAS_ASSIGN_REF (t) && ! IS_SIGNATURE (t) && ! TYPE_FOR_JAVA (t))
+    {
+      default_fn = cons_up_default_function (t, name,
+                                            5 + cant_have_assignment);
+      TREE_CHAIN (default_fn) = implicit_fns;
+      implicit_fns = default_fn;
+    }
+
+  /* Now, hook all of the new functions on to TYPE_METHODS,
+     and add them to the CLASSTYPE_METHOD_VEC.  */
+  for (f = &implicit_fns; *f; f = &TREE_CHAIN (*f))
+    add_method (t, 0, *f);
+  *f = TYPE_METHODS (t);
+  TYPE_METHODS (t) = implicit_fns;
+
+  return virtual_dtor;
+}
+
 /* Create a RECORD_TYPE or UNION_TYPE node for a C struct or union declaration
    (or C++ class declaration).
 
@@ -3121,10 +3218,6 @@ extern int interface_only, interface_unknown;
    inheritance.  Additional virtual function tables have different
    DELTAs, which tell how to adjust `this' to point to the right thing.
 
-   LIST_OF_FIELDLISTS is just that.  The elements of the list are
-   TREE_LIST elements, whose TREE_PURPOSE field tells what access
-   the list has, and the TREE_VALUE slot gives the actual fields.
-
    ATTRIBUTES is the set of decl attributes to be applied, if any.  */
 
 tree
@@ -3133,10 +3226,8 @@ finish_struct_1 (t, warn_anon)
      int warn_anon;
 {
   int old;
-  tree name = TYPE_IDENTIFIER (t);
   enum tree_code code = TREE_CODE (t);
   tree fields = TYPE_FIELDS (t);
-  tree fn_fields = TYPE_METHODS (t);
   tree x, last_x, method_vec;
   int has_virtual;
   int max_has_virtual;
@@ -3145,6 +3236,7 @@ finish_struct_1 (t, warn_anon)
   tree abstract_virtuals = NULL_TREE;
   tree vfield;
   tree vfields;
+  tree virtual_dtor;
   int cant_have_default_ctor;
   int cant_have_const_ctor;
   int no_const_asn_ref;
@@ -3262,8 +3354,6 @@ finish_struct_1 (t, warn_anon)
       if (IDENTIFIER_ERROR_LOCUS (DECL_ASSEMBLER_NAME (x)))
        continue;
 
-      DECL_CLASS_CONTEXT (x) = t;
-
       /* Do both of these, even though they're in the same union;
         if the insn `r' member and the size `i' member are
         different sizes, as on the alpha, the larger of the two
@@ -3626,32 +3716,6 @@ finish_struct_1 (t, warn_anon)
   CLASSTYPE_REF_FIELDS_NEED_INIT (t) = ref_sans_init;
   CLASSTYPE_ABSTRACT_VIRTUALS (t) = abstract_virtuals;
 
-  /* Synthesize any needed methods.  Note that methods will be synthesized
-     for anonymous unions; grok_x_components undoes that.  */
-
-  if (TYPE_NEEDS_DESTRUCTOR (t) && !TYPE_HAS_DESTRUCTOR (t)
-      && !IS_SIGNATURE (t))
-    {
-      /* Here we must cons up a destructor on the fly.  */
-      tree dtor = cons_up_default_function (t, name, 0);
-      check_for_override (dtor, t);
-
-      /* If we couldn't make it work, then pretend we didn't need it.  */
-      if (dtor == void_type_node)
-       TYPE_NEEDS_DESTRUCTOR (t) = 0;
-      else
-       {
-         /* Link dtor onto end of fn_fields.  */
-
-         TREE_CHAIN (dtor) = fn_fields;
-         fn_fields = dtor;
-
-         if (DECL_VINDEX (dtor))
-           add_virtual_function (&pending_virtuals, &pending_hard_virtuals,
-                                 &has_virtual, dtor, t);
-       }
-    }
-
   /* Effective C++ rule 11.  */
   if (has_pointers && warn_ecpp && TYPE_HAS_CONSTRUCTOR (t)
       && ! (TYPE_HAS_INIT_REF (t) && TYPE_HAS_ASSIGN_REF (t)))
@@ -3667,9 +3731,9 @@ finish_struct_1 (t, warn_anon)
       else if (! TYPE_HAS_ASSIGN_REF (t))
        cp_warning ("  but does not override `operator=(const %T&)'", t);
     }
-
-  TYPE_NEEDS_DESTRUCTOR (t) |= TYPE_HAS_DESTRUCTOR (t);
-
+  
+  /* Do some bookkeeping that will guide the generation of implicitly
+     declared member functions.  */
   TYPE_HAS_COMPLEX_INIT_REF (t)
     |= (TYPE_HAS_INIT_REF (t) || TYPE_USES_VIRTUAL_BASECLASSES (t)
        || has_virtual || any_default_members);
@@ -3679,46 +3743,23 @@ finish_struct_1 (t, warn_anon)
   if (! IS_SIGNATURE (t))
     CLASSTYPE_NON_AGGREGATE (t)
       = ! aggregate || has_virtual || TYPE_HAS_CONSTRUCTOR (t);
-
-  /* ARM $12.1: A default constructor will be generated for a class X
-     only if no constructor has been declared for class X.  So we
-     check TYPE_HAS_CONSTRUCTOR also, to make sure we don't generate
-     one if they declared a constructor in this class.  */
-  if (! TYPE_HAS_CONSTRUCTOR (t) && ! cant_have_default_ctor
-      && ! IS_SIGNATURE (t))
-    {
-      tree default_fn = cons_up_default_function (t, name, 2);
-      TREE_CHAIN (default_fn) = fn_fields;
-      fn_fields = default_fn;
-    }
-
-  /* Create default copy constructor, if needed.  */
-  if (! TYPE_HAS_INIT_REF (t) && ! IS_SIGNATURE (t) && ! TYPE_FOR_JAVA (t))
-    {
-      /* ARM 12.18: You get either X(X&) or X(const X&), but
-        not both.  --Chip  */
-      tree default_fn = cons_up_default_function (t, name,
-                                                 3 + cant_have_const_ctor);
-      TREE_CHAIN (default_fn) = fn_fields;
-      fn_fields = default_fn;
-    }
-
   TYPE_HAS_REAL_ASSIGNMENT (t) |= TYPE_HAS_ASSIGNMENT (t);
   TYPE_HAS_REAL_ASSIGN_REF (t) |= TYPE_HAS_ASSIGN_REF (t);
   TYPE_HAS_COMPLEX_ASSIGN_REF (t)
     |= TYPE_HAS_ASSIGN_REF (t) || TYPE_USES_VIRTUAL_BASECLASSES (t);
 
-  if (! TYPE_HAS_ASSIGN_REF (t) && ! IS_SIGNATURE (t) && ! TYPE_FOR_JAVA (t))
-    {
-      tree default_fn = cons_up_default_function (t, name,
-                                                 5 + no_const_asn_ref);
-      TREE_CHAIN (default_fn) = fn_fields;
-      fn_fields = default_fn;
-    }
+  /* Synthesize any needed methods.  Note that methods will be synthesized
+     for anonymous unions; grok_x_components undoes that.  */
+  virtual_dtor 
+    = add_implicitly_declared_members (t, cant_have_default_ctor,
+                                      cant_have_const_ctor,
+                                      no_const_asn_ref);
+  if (virtual_dtor)
+    add_virtual_function (&pending_virtuals, &pending_hard_virtuals,
+                         &has_virtual, virtual_dtor, t);
 
-  if (fn_fields)
+  if (TYPE_METHODS (t))
     {
-      TYPE_METHODS (t) = fn_fields;
       finish_struct_methods (t);
       method_vec = CLASSTYPE_METHOD_VEC (t);
     }
@@ -3806,12 +3847,12 @@ finish_struct_1 (t, warn_anon)
       for (x = fields; x; x = TREE_CHAIN (x))
        {
          tree name = DECL_NAME (x);
-         int i = 2;
+         int i;
 
          if (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x))
            continue;
 
-         for (; i < n_methods; ++i)
+         for (i = 2; i < n_methods && TREE_VEC_ELT (method_vec, i); ++i)
            if (DECL_NAME (OVL_CURRENT (TREE_VEC_ELT (method_vec, i)))
                == name)
              {
@@ -4229,18 +4270,94 @@ finish_struct_1 (t, warn_anon)
   return t;
 }
 
+/* In [basic.scope.class] we have:
+
+     A name N used in a class S shall refer to the same declaration in
+     its context and when re-evaluated in the completed scope of S.
+     
+   This function checks this condition for X, which is a member of
+   T.  */
+
+static void
+check_member_decl_is_same_in_complete_scope (t, x)
+     tree t;
+     tree x;
+{
+  /* A name N used in a class S shall refer to the same declaration in
+     its context and when re-evaluated in the completed scope of S.
+     
+     Enums, types and static vars have already been checked.  */
+  if (TREE_CODE (x) != USING_DECL 
+      && TREE_CODE (x) != TYPE_DECL && !DECL_CLASS_TEMPLATE_P (x)
+      && TREE_CODE (x) != CONST_DECL && TREE_CODE (x) != VAR_DECL)
+    {
+      tree name = DECL_NAME (x);
+      tree icv;
+
+      /* Don't get confused by access decls.  */
+      if (name && TREE_CODE (name) == IDENTIFIER_NODE)
+       icv = IDENTIFIER_CLASS_VALUE (name);
+      else
+       icv = NULL_TREE;
+
+      if (icv
+         /* Don't complain about constructors.  */
+         && name != constructor_name (current_class_type)
+         /* Or inherited names.  */
+         && id_in_current_class (name)
+         /* Or shadowed tags.  */
+         && !(TREE_CODE (icv) == TYPE_DECL && DECL_CONTEXT (icv) == t))
+       {
+         cp_pedwarn_at ("declaration of identifier `%D' as `%+#D'",
+                        name, x);
+         cp_pedwarn_at ("conflicts with other use in class as `%#D'",
+                        icv);
+       }
+    }
+}
+
+/* When T was built up, the member declarations were added in reverse
+   order.  Rearrange them to declaration order.  */
+
+void
+unreverse_member_declarations (t)
+     tree t;
+{
+  tree next;
+  tree prev;
+  tree x;
+
+  /* The TYPE_FIELDS, TYPE_METHODS, and CLASSTYPE_TAGS are all in
+     reverse order.  Put them in declaration order now.  */
+  TYPE_METHODS (t) = nreverse (TYPE_METHODS (t));
+  CLASSTYPE_TAGS (t) = nreverse (CLASSTYPE_TAGS (t));
+
+  /* Actually, for the TYPE_FIELDS, only the non TYPE_DECLs are in
+     reverse order, so we can't just use nreverse.  */
+  prev = NULL_TREE;
+  for (x = TYPE_FIELDS (t); 
+       x && TREE_CODE (x) != TYPE_DECL; 
+       x = next)
+    {
+      next = TREE_CHAIN (x);
+      TREE_CHAIN (x) = prev;
+      prev = x;
+    }
+  if (prev)
+    {
+      TREE_CHAIN (TYPE_FIELDS (t)) = x;
+      if (prev)
+       TYPE_FIELDS (t) = prev;
+    }
+}
+
 tree
-finish_struct (t, list_of_fieldlists, attributes, warn_anon)
-     tree t, list_of_fieldlists, attributes;
+finish_struct (t, attributes, warn_anon)
+     tree t, attributes;
      int warn_anon;
 {
-  tree fields = NULL_TREE;
-  tree *tail = &TYPE_METHODS (t);
   tree name = TYPE_NAME (t);
-  tree x, last_x = NULL_TREE;
-  tree access;
-  tree dummy = NULL_TREE;
-  tree next_x = NULL_TREE;
+  tree x;
 
   if (TREE_CODE (name) == TYPE_DECL)
     {
@@ -4260,147 +4377,23 @@ finish_struct (t, list_of_fieldlists, attributes, warn_anon)
 
   /* Append the fields we need for constructing signature tables.  */
   if (IS_SIGNATURE (t))
-    append_signature_fields (list_of_fieldlists);
-
-  /* Move our self-reference declaration to the end of the field list so
-     any real field with the same name takes precedence.  */
-  if (list_of_fieldlists
-      && TREE_VALUE (list_of_fieldlists)
-      && DECL_ARTIFICIAL (TREE_VALUE (list_of_fieldlists)))
-    {
-      dummy = TREE_VALUE (list_of_fieldlists);
-      list_of_fieldlists = TREE_CHAIN (list_of_fieldlists);
-    }
-
-  if (last_x && list_of_fieldlists)
-    TREE_CHAIN (last_x) = TREE_VALUE (list_of_fieldlists);
-
-  while (list_of_fieldlists)
-    {
-      access = TREE_PURPOSE (list_of_fieldlists);
-
-      /* For signatures, we made all methods `public' in the parser and
-        reported an error if a access specifier was used.  */
-      if (access == access_default_node)
-       {
-         if (CLASSTYPE_DECLARED_CLASS (t) == 0)
-           access = access_public_node;
-         else
-           access = access_private_node;
-       }
-
-      for (x = TREE_VALUE (list_of_fieldlists); x; x = next_x)
-       {
-         next_x = TREE_CHAIN (x);
-
-         TREE_PRIVATE (x) = access == access_private_node;
-         TREE_PROTECTED (x) = access == access_protected_node;
-
-         if (TREE_CODE (x) == TEMPLATE_DECL)
-           {
-             TREE_PRIVATE (DECL_RESULT (x)) = TREE_PRIVATE (x);
-             TREE_PROTECTED (DECL_RESULT (x)) = TREE_PROTECTED (x);
-           }
+    append_signature_fields (t);
 
-         /* A name N used in a class S shall refer to the same declaration
-            in its context and when re-evaluated in the completed scope of S.
+  /* Now that we've got all the field declarations, reverse everything
+     as necessary.  */
+  unreverse_member_declarations (t);
 
-             Enums, types and static vars have already been checked.  */
-         if (TREE_CODE (x) != TYPE_DECL && TREE_CODE (x) != USING_DECL
-             && ! (TREE_CODE (x) == TEMPLATE_DECL
-                   && TREE_CODE (DECL_RESULT (x)) == TYPE_DECL)
-             && TREE_CODE (x) != CONST_DECL && TREE_CODE (x) != VAR_DECL)
-           {
-             tree name = DECL_NAME (x);
-             tree icv;
-
-             /* Don't get confused by access decls.  */
-             if (name && TREE_CODE (name) == IDENTIFIER_NODE)
-               icv = IDENTIFIER_CLASS_VALUE (name);
-             else
-               icv = NULL_TREE;
-
-             if (icv
-                 && flag_optional_diags
-                 /* Don't complain about constructors.  */
-                 && name != constructor_name (current_class_type)
-                 /* Or inherited names.  */
-                 && id_in_current_class (name)
-                 /* Or shadowed tags.  */
-                 && !(TREE_CODE (icv) == TYPE_DECL
-                      && DECL_CONTEXT (icv) == t))
-               {
-                 cp_pedwarn_at ("declaration of identifier `%D' as `%+#D'",
-                                name, x);
-                 cp_pedwarn_at ("conflicts with other use in class as `%#D'",
-                                icv);
-               }
-           }
-
-         if (TREE_CODE (x) == FUNCTION_DECL 
-             || DECL_FUNCTION_TEMPLATE_P (x))
-           {
-             DECL_CLASS_CONTEXT (x) = t;
-
-             if (last_x)
-               TREE_CHAIN (last_x) = next_x;
-
-             /* Link x onto end of TYPE_METHODS.  */
-             *tail = x;
-             tail = &TREE_CHAIN (x);
-             continue;
-           }
-
-         if (TREE_CODE (x) != TYPE_DECL)
-           DECL_FIELD_CONTEXT (x) = t;
-
-         if (! fields)
-           fields = x;
-         last_x = x;
-       }
-      list_of_fieldlists = TREE_CHAIN (list_of_fieldlists);
-      /* link the tail while we have it! */
-      if (last_x)
-       {
-         TREE_CHAIN (last_x) = NULL_TREE;
-
-         if (list_of_fieldlists
-             && TREE_VALUE (list_of_fieldlists)
-             && TREE_CODE (TREE_VALUE (list_of_fieldlists)) != FUNCTION_DECL)
-           TREE_CHAIN (last_x) = TREE_VALUE (list_of_fieldlists);
-       }
-    }
-
-  /* Now add the tags, if any, to the list of TYPE_DECLs
-     defined for this type.  */
-  if (CLASSTYPE_TAGS (t) || dummy)
+  if (flag_optional_diags) 
     {
-      /* The list of tags was built up in pushtag in reverse order; we need
-        to fix that so that enumerators will be processed in forward order
-        in template instantiation.  */
-      CLASSTYPE_TAGS (t) = x = nreverse (CLASSTYPE_TAGS (t));
-      while (x)
-       {
-         tree tag_type = TREE_VALUE (x);
-         tree tag = TYPE_MAIN_DECL (TREE_VALUE (x));
-
-         if (IS_AGGR_TYPE_CODE (TREE_CODE (tag_type))
-             && CLASSTYPE_IS_TEMPLATE (tag_type))
-           tag = CLASSTYPE_TI_TEMPLATE (tag_type);
-
-         TREE_NONLOCAL_FLAG (tag_type) = 0;
-         x = TREE_CHAIN (x);
-         last_x = chainon (last_x, tag);
-       }
-      if (dummy)
-       last_x = chainon (last_x, dummy);
-      if (fields == NULL_TREE)
-       fields = last_x;
-      CLASSTYPE_LOCAL_TYPEDECLS (t) = 1;
+      for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
+       check_member_decl_is_same_in_complete_scope (t, x);
+      for (x = TYPE_FIELDS (t); x; x = TREE_CHAIN (x))
+       check_member_decl_is_same_in_complete_scope (t, x);
     }
 
-  *tail = NULL_TREE;
-  TYPE_FIELDS (t) = fields;
+  /* Mark all the tags in the class as class-local.  */
+  for (x = CLASSTYPE_TAGS (t); x; x = TREE_CHAIN (x))
+    TREE_NONLOCAL_FLAG (TREE_VALUE (x)) = 0;
 
   cplus_decl_attributes (t, attributes, NULL_TREE);
 
@@ -4574,9 +4567,10 @@ void
 init_class_processing ()
 {
   current_class_depth = 0;
-  current_class_stacksize = 10;
-  current_class_base = (tree *)xmalloc(current_class_stacksize * sizeof (tree));
-  current_class_stack = current_class_base;
+  current_class_stack_size = 10;
+  current_class_stack 
+    = (class_stack_node_t) xmalloc (current_class_stack_size 
+                                   * sizeof (struct class_stack_node));
 
   current_lang_stacksize = 10;
   current_lang_base = (tree *)xmalloc(current_lang_stacksize * sizeof (tree));
@@ -4639,23 +4633,34 @@ pushclass (type, modify)
 {
   type = TYPE_MAIN_VARIANT (type);
 
-  current_class_depth++;
-  *current_class_stack++ = current_class_name;
-  *current_class_stack++ = current_class_type;
-  if (current_class_stack >= current_class_base + current_class_stacksize)
-    {
-      current_class_base
-       = (tree *)xrealloc (current_class_base,
-                           sizeof (tree) * (current_class_stacksize + 10));
-      current_class_stack = current_class_base + current_class_stacksize;
-      current_class_stacksize += 10;
+  /* Make sure there is enough room for the new entry on the stack.  */
+  if (current_class_depth + 1 >= current_class_stack_size) 
+    {
+      current_class_stack_size *= 2;
+      current_class_stack
+       = (class_stack_node_t) xrealloc (current_class_stack,
+                                        current_class_stack_size
+                                        * sizeof (struct class_stack_node));
     }
 
+  /* Insert a new entry on the class stack.  */
+  current_class_stack[current_class_depth].name = current_class_name;
+  current_class_stack[current_class_depth].type = current_class_type;
+  current_class_stack[current_class_depth].access = current_access_specifier;
+  current_class_depth++;
+
+  /* Now set up the new type.  */
   current_class_name = TYPE_NAME (type);
   if (TREE_CODE (current_class_name) == TYPE_DECL)
     current_class_name = DECL_NAME (current_class_name);
   current_class_type = type;
 
+  /* By default, things in classes are private, while things in
+     structures or unions are public.  */
+  current_access_specifier = (CLASSTYPE_DECLARED_CLASS (type) 
+                             ? access_private_node 
+                             : access_public_node);
+
   if (previous_class_type != NULL_TREE
       && (type != previous_class_type || TYPE_SIZE (previous_class_type) == NULL_TREE)
       && current_class_depth == 1)
@@ -4783,8 +4788,9 @@ popclass (modify)
     pop_class_decls ();
 
   current_class_depth--;
-  current_class_type = *--current_class_stack;
-  current_class_name = *--current_class_stack;
+  current_class_name = current_class_stack[current_class_depth].name;
+  current_class_type = current_class_stack[current_class_depth].type;
+  current_access_specifier = current_class_stack[current_class_depth].access;
 
  ret:
   ;
@@ -4800,7 +4806,7 @@ currently_open_class (t)
   if (t == current_class_type)
     return 1;
   for (i = 0; i < current_class_depth; ++i)
-    if (current_class_stack [-i*2 - 1] == t)
+    if (current_class_stack [i].type == t)
       return 1;
   return 0;
 }
@@ -5505,7 +5511,6 @@ build_self_reference ()
   DECL_NONLOCAL (value) = 1;
   DECL_CONTEXT (value) = current_class_type;
   DECL_CLASS_CONTEXT (value) = current_class_type;
-  CLASSTYPE_LOCAL_TYPEDECLS (current_class_type) = 1;
   DECL_ARTIFICIAL (value) = 1;
 
   pushdecl_class_level (value);
index b610737cc2326e7e76eeb5a6563286281b39d26c..20a0117c160121d730d573757219556b80eec34b 100644 (file)
@@ -29,6 +29,11 @@ Boston, MA 02111-1307, USA.  */
    just won't work for us.  */
 DEFTREECODE (OFFSET_REF, "offset_ref", 'r', 2)
 
+/* A pointer-to-member constant.  For a pointer-to-member constant
+   `X::Y' The PTRMEM_CST_CLASS is the RECORD_TYPE for `X' and the
+   PTRMEM_CST_MEMBER is the _DECL for `Y'.  */
+DEFTREECODE (PTRMEM_CST, "ptrmem_cst", 'c', 1)
+
 /* For NEW_EXPR, operand 0 is the placement list.
    Operand 1 is the new-declarator.
    Operand 2 is the initializer.  */
index 68655c155c0c419722cfede2e07f82000b967352..bef5e0e8bbdb24ba45fa68ec303cd65744d81e88 100644 (file)
@@ -109,6 +109,12 @@ typedef struct
   tree decl;
 } template_parm_index;
 
+typedef struct ptrmem_cst
+{
+  char common[sizeof (struct tree_common)];
+  tree member;
+}* ptrmem_cst_t;
+
 /* For a binding between a name and an entity, defines the scope
    where the binding is declared. Currently always points to a
    namespace declaration.  */
@@ -586,7 +592,6 @@ struct lang_type
       unsigned has_call_overloaded : 1;
       unsigned has_array_ref_overloaded : 1;
       unsigned has_arrow_overloaded : 1;
-      unsigned local_typedecls : 1;
       unsigned interface_only : 1;
       unsigned interface_unknown : 1;
 
@@ -625,7 +630,7 @@ struct lang_type
       /* The MIPS compiler gets it wrong if this struct also
         does not fill out to a multiple of 4 bytes.  Add a
         member `dummy' with new bits if you go over the edge.  */
-      unsigned dummy : 11;
+      unsigned dummy : 12;
     } type_flags;
 
   int n_ancestors;
@@ -786,7 +791,12 @@ struct lang_type
    hierarchy, then we can use more efficient search techniques.  */
 #define TYPE_USES_VIRTUAL_BASECLASSES(NODE) (TREE_LANG_FLAG_3(NODE))
 
-/* List of lists of member functions defined in this class.  */
+/* Vector member functions defined in this class.  Each element is
+   either a FUNCTION_DECL, a TEMPLATE_DECL, or an OVERLOAD.  The first
+   two elements are for constructors, and destructors, respectively.
+   Any user-defined conversion operators follow these.  These are
+   followed by ordinary member functions.  There may be empty entries
+   at the end of the vector.  */
 #define CLASSTYPE_METHOD_VEC(NODE) (TYPE_LANG_SPECIFIC(NODE)->methods)
 
 /* The first type conversion operator in the class (the others can be
@@ -900,9 +910,6 @@ struct lang_type
    the virtual function table will be written out.  */
 #define CLASSTYPE_VTABLE_NEEDS_WRITING(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.vtable_needs_writing)
 
-/* Nonzero means that this type defines its own local type declarations.  */
-#define CLASSTYPE_LOCAL_TYPEDECLS(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.local_typedecls)
-
 /* Nonzero means that this type has an X() constructor.  */
 #define TYPE_HAS_DEFAULT_CONSTRUCTOR(NODE) (TYPE_LANG_SPECIFIC(NODE)->type_flags.has_default_ctor)
 
@@ -1508,6 +1515,17 @@ extern int flag_new_for_scope;
 #define DELTA2_FROM_PTRMEMFUNC(NODE) (build_component_ref (build_component_ref ((NODE), pfn_or_delta2_identifier, NULL_TREE, 0), delta2_identifier, NULL_TREE, 0))
 #define PFN_FROM_PTRMEMFUNC(NODE) (build_component_ref (build_component_ref ((NODE), pfn_or_delta2_identifier, NULL_TREE, 0), pfn_identifier, NULL_TREE, 0))
 
+/* For a pointer-to-member constant `X::Y' this is the RECORD_TYPE for
+   `X'.  */
+#define PTRMEM_CST_CLASS(NODE)                         \
+   (TYPE_PTRMEM_P (TREE_TYPE (NODE))                   \
+    ? TYPE_OFFSET_BASETYPE (TREE_TYPE (NODE))          \
+    : TYPE_PTRMEMFUNC_OBJECT_TYPE (TREE_TYPE (NODE)))
+
+/* For a pointer-to-member constant `X::Y' this is the _DECL for 
+   `Y'.  */
+#define PTRMEM_CST_MEMBER(NODE) (((ptrmem_cst_t) NODE)->member)
+
 /* Nonzero for VAR_DECL and FUNCTION_DECL node means that `extern' was
    specified in its declaration.  */
 #define DECL_THIS_EXTERN(NODE) (DECL_LANG_FLAG_2(NODE))
@@ -1853,6 +1871,7 @@ extern void constant_expression_warning         PROTO((tree));
 extern tree convert_and_check                  PROTO((tree, tree));
 extern void overflow_warning                   PROTO((tree));
 extern void unsigned_conversion_warning                PROTO((tree, tree));
+
 /* Read the rest of the current #-directive line.  */
 #if USE_CPPLIB
 extern char *get_directive_line                 PROTO((void));
@@ -1957,6 +1976,13 @@ extern int minimal_parse_mode;
 extern void maybe_print_template_context       PROTO ((void));
 
 /* in class.c */
+
+/* When parsing a class definition, the access specifier most recently
+   given by the user, or, if no access specifier was given, the
+   default value appropriate for the kind of class (i.e., struct,
+   class, or union).  */
+extern tree current_access_specifier;
+
 extern tree current_class_name;
 extern tree current_class_type;
 extern tree current_class_ptr;
@@ -2257,7 +2283,6 @@ enum overload_flags { NO_SPECIAL = 0, DTOR_FLAG, OP_FLAG, TYPENAME_FLAG };
 
 /* The following two can be derived from the previous one */
 extern tree current_class_name;        /* IDENTIFIER_NODE: name of current class */
-extern tree current_class_type;        /* _TYPE: the type of the current class */
 
 /* Some macros for char-based bitfields.  */
 #define B_SET(a,x) (a[x>>3] |= (1 << (x&7)))
@@ -2414,7 +2439,7 @@ extern void add_method                            PROTO((tree, tree *, tree));
 extern int currently_open_class                        PROTO((tree));
 extern tree get_vfield_offset                  PROTO((tree));
 extern void duplicate_tag_error                        PROTO((tree));
-extern tree finish_struct                      PROTO((tree, tree, tree, int));
+extern tree finish_struct                      PROTO((tree, tree, int));
 extern tree finish_struct_1                    PROTO((tree, int));
 extern int resolves_to_fixed_type_p            PROTO((tree, int *));
 extern void init_class_processing              PROTO((void));
@@ -2433,6 +2458,7 @@ extern tree build_self_reference          PROTO((void));
 extern void warn_hidden                                PROTO((tree));
 extern tree get_enclosing_class                        PROTO((tree));
 int is_base_of_enclosing_class                 PROTO((tree, tree));
+extern void unreverse_member_declarations       PROTO((tree));
 
 /* in cvt.c */
 extern tree convert_to_reference               PROTO((tree, tree, int, int, tree));
@@ -2488,7 +2514,7 @@ extern int decls_match                            PROTO((tree, tree));
 extern int duplicate_decls                     PROTO((tree, tree));
 extern tree pushdecl                           PROTO((tree));
 extern tree pushdecl_top_level                 PROTO((tree));
-extern tree pushdecl_class_level               PROTO((tree));
+extern void pushdecl_class_level               PROTO((tree));
 #if 0
 extern void pushdecl_nonclass_level            PROTO((tree));
 #endif
@@ -2551,7 +2577,6 @@ extern void xref_basetypes                        PROTO((tree, tree, tree, tree));
 extern tree start_enum                         PROTO((tree));
 extern tree finish_enum                                PROTO((tree));
 extern tree build_enumerator                   PROTO((tree, tree, tree));
-extern tree grok_enum_decls                    PROTO((tree));
 extern int start_function                      PROTO((tree, tree, tree, int));
 extern void expand_start_early_try_stmts       PROTO((void));
 extern void store_parm_decls                   PROTO((void));
@@ -2572,13 +2597,14 @@ extern void replace_defarg                      PROTO((tree, tree));
 extern void print_other_binding_stack          PROTO((struct binding_level *));
 extern void revert_static_member_fn             PROTO((tree*, tree*, tree*));
 extern void cat_namespace_levels                PROTO((void));
+extern void fixup_anonymous_union               PROTO((tree));
 
 /* in decl2.c */
 extern int check_java_method                   PROTO((tree));
 extern int lang_decode_option                  PROTO((int, char **));
 extern tree grok_method_quals                  PROTO((tree, tree, tree));
 extern void warn_if_unknown_interface          PROTO((tree));
-extern tree grok_x_components                  PROTO((tree, tree));
+extern void grok_x_components                  PROTO((tree));
 extern void maybe_retrofit_in_chrg             PROTO((tree));
 extern void maybe_make_one_only                        PROTO((tree));
 extern void grokclassfn                                PROTO((tree, tree, enum overload_flags, tree));
@@ -2787,10 +2813,9 @@ extern tree innermost_args                       PROTO ((tree));
 extern tree tsubst                             PROTO ((tree, tree, tree));
 extern tree tsubst_expr                                PROTO ((tree, tree, tree));
 extern tree tsubst_copy                                PROTO ((tree, tree, tree));
-extern tree tsubst_chain                       PROTO((tree, tree));
 extern void maybe_begin_member_template_processing PROTO((tree));
 extern void maybe_end_member_template_processing PROTO((void));
-extern tree finish_member_template_decl         PROTO((tree, tree));
+extern tree finish_member_template_decl         PROTO((tree));
 extern void begin_template_parm_list           PROTO((void));
 extern void begin_specialization                PROTO((void));
 extern void reset_specialization                PROTO((void));
@@ -2798,7 +2823,7 @@ extern void end_specialization                  PROTO((void));
 extern void begin_explicit_instantiation        PROTO((void));
 extern void end_explicit_instantiation          PROTO((void));
 extern tree determine_specialization            PROTO((tree, tree, tree *, int, int));
-extern tree check_explicit_specialization        PROTO((tree, tree, int, int));
+extern tree check_explicit_specialization       PROTO((tree, tree, int, int));
 extern tree process_template_parm              PROTO((tree, tree));
 extern tree end_template_parm_list             PROTO((tree));
 extern void end_template_decl                  PROTO((void));
@@ -2950,14 +2975,16 @@ extern tree finish_template_type_parm           PROTO((tree, tree));
 extern tree finish_template_template_parm       PROTO((tree, tree));
 extern tree finish_parmlist                     PROTO((tree, int));
 extern tree begin_class_definition              PROTO((tree));
-extern tree finish_class_definition             PROTO((tree, tree, tree, int));
+extern tree finish_class_definition             PROTO((tree, tree, int));
 extern void finish_default_args                 PROTO((void));
 extern void begin_inline_definitions            PROTO((void));
-extern tree finish_member_class_template        PROTO((tree, tree));
+extern tree finish_member_class_template        PROTO((tree));
 extern void finish_template_decl                PROTO((tree));
 extern tree finish_template_type                PROTO((tree, tree, int));
 extern void enter_scope_of                      PROTO((tree));
 extern tree finish_base_specifier               PROTO((tree, tree, int));
+extern void finish_member_declaration           PROTO((tree));
+extern void check_multiple_declarators          PROTO((void));
 
 /* in sig.c */
 extern tree build_signature_pointer_type       PROTO((tree));
index cae72561e0cafcd3a56305415f168d3176351c0e..19cbcf529c2ec978772a14f7c224e91457bb8453 100644 (file)
@@ -1896,7 +1896,9 @@ struct saved_scope {
   tree old_bindings;
   tree old_namespace;
   struct saved_scope *prev;
-  tree class_name, class_type, function_decl;
+  tree class_name, class_type;
+  tree access_specifier;
+  tree function_decl;
   struct binding_level *class_bindings;
   tree *lang_base, *lang_stack, lang_name;
   int lang_stacksize;
@@ -2010,6 +2012,7 @@ maybe_push_to_top_level (pseudo)
   s->old_namespace = current_namespace;
   s->class_name = current_class_name;
   s->class_type = current_class_type;
+  s->access_specifier = current_access_specifier;
   s->function_decl = current_function_decl;
   s->class_bindings = class_binding_level;
   s->lang_stack = current_lang_stack;
@@ -2091,6 +2094,7 @@ pop_from_top_level ()
   current_namespace = s->old_namespace;
   current_class_name = s->class_name;
   current_class_type = s->class_type;
+  current_access_specifier = s->access_specifier;
   current_function_decl = s->function_decl;
   class_binding_level = s->class_bindings;
   free (current_lang_base);
@@ -2297,6 +2301,7 @@ maybe_process_template_type_declaration (type, globalize, b)
            {
              pushdecl_with_scope (CLASSTYPE_TI_TEMPLATE (type),
                                   b->level_chain);
+             finish_member_declaration (CLASSTYPE_TI_TEMPLATE (type));
              /* Put this tag on the list of tags for the class, since
                 that won't happen below because B is not the class
                 binding level, but is instead the pseudo-global level.  */
@@ -2391,7 +2396,15 @@ pushtag (name, type, globalize)
                                                       globalize, b);
 
          if (b->parm_flag == 2)
-           d = pushdecl_class_level (d);
+           {
+             pushdecl_class_level (d);
+             if (newdecl && !PROCESSING_REAL_TEMPLATE_DECL_P ())
+               /* Put this TYPE_DECL on the TYPE_FIELDS list for the
+                  class.  But if it's a member template class, we
+                  want the TEMPLATE_DECL, not the TYPE_DECL, so this
+                  is done later.  */
+               finish_member_declaration (d);
+           }
          else
            d = pushdecl_with_scope (d, b);
 
@@ -3788,7 +3801,7 @@ pushdecl_top_level (x)
 
 /* Make the declaration of X appear in CLASS scope.  */
 
-tree
+void
 pushdecl_class_level (x)
      tree x;
 {
@@ -3839,7 +3852,6 @@ pushdecl_class_level (x)
          set_identifier_type_value (name, TREE_TYPE (x));
        }
     }
-  return x;
 }
 
 #if 0
@@ -6291,6 +6303,48 @@ define_function (name, type, function_code, pfn, library_name)
   return decl;
 }
 \f
+/* When we call finish_struct for an anonymous union, we create
+   default copy constructors and such.  But, an anonymous union
+   shouldn't have such things; this function undoes the damage to the
+   anonymous union type T.
+
+   (The reason that we create the synthesized methods is that we don't
+   distinguish `union { int i; }' from `typedef union { int i; } U'.
+   The first is an anonymous union; the second is just an ordinary
+   union type.)  */
+
+void
+fixup_anonymous_union (t)
+     tree t;
+{
+  tree *q;
+
+  /* Wipe out memory of synthesized methods */
+  TYPE_HAS_CONSTRUCTOR (t) = 0;
+  TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
+  TYPE_HAS_INIT_REF (t) = 0;
+  TYPE_HAS_CONST_INIT_REF (t) = 0;
+  TYPE_HAS_ASSIGN_REF (t) = 0;
+  TYPE_HAS_ASSIGNMENT (t) = 0;
+  TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
+
+  /* Splice the implicitly generated functions out of the TYPE_METHODS
+     list.  */
+  q = &TYPE_METHODS (t);
+  while (*q)
+    {
+      if (DECL_ARTIFICIAL (*q))
+       *q = TREE_CHAIN (*q);
+      else
+       q = &TREE_CHAIN (*q);
+    }
+
+  /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
+     function members.  */
+  if (TYPE_METHODS (t))
+    error ("an anonymous union cannot have function members");
+}
+
 /* Called when a declaration is seen that contains no names to declare.
    If its type is a reference to a structure, union or enum inherited
    from a containing scope, shadow that tag name for the current scope
@@ -6349,31 +6403,7 @@ shadow_tag (declspecs)
          || (TREE_CODE (TYPE_NAME (t)) == TYPE_DECL
              && ANON_AGGRNAME_P (TYPE_IDENTIFIER (t)))))
     {
-      /* See also grok_x_components.  */
-      tree *q;
-
-      /* Wipe out memory of synthesized methods */
-      TYPE_HAS_CONSTRUCTOR (t) = 0;
-      TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
-      TYPE_HAS_INIT_REF (t) = 0;
-      TYPE_HAS_CONST_INIT_REF (t) = 0;
-      TYPE_HAS_ASSIGN_REF (t) = 0;
-      TYPE_HAS_ASSIGNMENT (t) = 0;
-      TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
-
-      q = &TYPE_METHODS (t);
-      while (*q)
-       {
-         if (DECL_ARTIFICIAL (*q))
-           *q = TREE_CHAIN (*q);
-         else
-           q = &TREE_CHAIN (*q);
-       }
-
-      /* ANSI C++ June 5 1992 WP 9.5.3.  Anonymous unions may not have
-        function members.  */
-      if (TYPE_METHODS (t))
-       error ("an anonymous union cannot have function members");
+      fixup_anonymous_union (t);
 
       if (TYPE_FIELDS (t))
        {
@@ -9714,6 +9744,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
              type = TREE_TYPE (type);
            }
 
+         /* Merge any constancy or volatility into the target type
+            for the pointer.  */
+
          /* We now know that constp and volatilep don't apply to the
             decl, but to the target of the pointer.  */
          constp = volatilep = 0;
@@ -10040,6 +10073,9 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
          && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
          && ANON_AGGRNAME_P (TYPE_IDENTIFIER (type)))
        {
+         /* FIXME: This is bogus; we should not be doing this for
+                   cv-qualified types.  */
+
          /* For anonymous structs that are cv-qualified, need to use
              TYPE_MAIN_VARIANT so that name will mangle correctly. As
              type not referenced after this block, don't bother
@@ -10094,9 +10130,7 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
        C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
 
       if (RIDBIT_SETP (RID_MUTABLE, specbits))
-       {
-         error ("non-object member `%s' cannot be declared mutable", name);
-       }
+       error ("non-object member `%s' cannot be declared mutable", name);
 
       bad_specifiers (decl, "type", virtualp, quals != NULL_TREE,
                      inlinep, friendp, raises != NULL_TREE);
@@ -11477,6 +11511,7 @@ xref_tag (code_type_node, name, globalize)
     }
   else
     t = IDENTIFIER_TYPE_VALUE (name);
+
   if (t && TREE_CODE (t) != code && TREE_CODE (t) != TEMPLATE_TYPE_PARM
       && TREE_CODE (t) != TEMPLATE_TEMPLATE_PARM)
     t = NULL_TREE;
@@ -11651,6 +11686,19 @@ xref_tag (code_type_node, name, globalize)
 
   TREE_TYPE (ref) = attributes;
 
+  if (ref && TYPE_P (ref))
+    {
+      /* [dcl.type.elab]
+            
+        If the identifier resolves to a typedef-name or a template
+        type-parameter, the elaborated-type-specifier is
+        ill-formed.  */
+      if (TYPE_LANG_SPECIFIC (ref) && TYPE_WAS_ANONYMOUS (ref))
+       cp_error ("`%T' is a typedef name", ref);
+      else if (TREE_CODE (ref) == TEMPLATE_TYPE_PARM)
+       cp_error ("`%T' is a template type paramter", ref);
+    }
+
   return ref;
 }
 
@@ -11791,7 +11839,6 @@ xref_basetypes (code_type_node, name, ref, binfo)
 
          TYPE_GETS_NEW (ref) |= TYPE_GETS_NEW (basetype);
          TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
-         CLASSTYPE_LOCAL_TYPEDECLS (ref) |= CLASSTYPE_LOCAL_TYPEDECLS (basetype);
          i += 1;
        }
     }
@@ -11817,8 +11864,6 @@ xref_basetypes (code_type_node, name, ref, binfo)
 }
   
 \f
-tree current_local_enum = NULL_TREE;
-
 /* Begin compiling the definition of an enumeration type.
    NAME is its name (or null if anonymous).
    Returns the type object, as yet incomplete.
@@ -11858,8 +11903,6 @@ start_enum (name)
   if (current_class_type)
     TREE_ADDRESSABLE (b->tags) = 1;
 
-  current_local_enum = NULL_TREE;
-
   /* We don't copy this value because build_enumerator needs to do it.  */
   enum_next_value = integer_zero_node;
   enum_overflow = 0;
@@ -12079,8 +12122,10 @@ build_enumerator (name, value, type)
  if (context && context == current_class_type)
    {
      pushdecl_class_level (decl);
-     TREE_CHAIN (decl) = current_local_enum;
-     current_local_enum = decl;
+     /* In something like `struct S { enum E { i = 7 }; };' we put `i'
+       on the TYPE_FIELDS list for `S'.  (That's so that you can say
+       things like `S::i' later.)  */
+     finish_member_declaration (decl);
    }
  else
    {
@@ -12100,47 +12145,6 @@ build_enumerator (name, value, type)
   return result;
 }
 
-/* Called after we have finished the declaration of an enumeration
-   type, and, perhaps, some objects whose type involves the
-   enumeration type.  DECL, if non-NULL, is the declaration of the
-   first such object.  
-
-   If CURRENT_LOCAL_ENUM is NULL, the DECL is returned. 
-
-   If CURRENT_LOCAL_ENUM is non-NULL, it should be the CONST_DECL for
-   the last enumeration constant of an enumeration type that is a
-   member of a class.  The enumeration constants are already chained
-   together through their TREE_CHAIN fields.  This function sets the
-   TREE_CHAIN of the last enumeration constant to DECL.  The
-   CONST_DECL for the last enumeration constant is returned.  
-
-   CURRENT_LOCAL_ENUM will always be NULL when this function 
-   returns.  */
-
-tree
-grok_enum_decls (decl)
-     tree decl;
-{
-  tree d = current_local_enum;
-  
-  if (d == NULL_TREE)
-    return decl;
-  
-  while (1)
-    {
-      if (TREE_CHAIN (d) == NULL_TREE)
-       {
-         TREE_CHAIN (d) = decl;
-         break;
-       }
-      d = TREE_CHAIN (d);
-    }
-
-  decl = current_local_enum;
-  current_local_enum = NULL_TREE;
-  
-  return decl;
-}
 \f
 static int function_depth;
 
index 492688b6c963b0a0521c301b97fae19d28de6ed4..f70867a9e5a12e0560f9d41adb7e103a6ce3c8af 100644 (file)
@@ -860,123 +860,37 @@ warn_if_unknown_interface (decl)
 
 /* A subroutine of the parser, to handle a component list.  */
 
-tree
-grok_x_components (specs, components)
-     tree specs, components;
+void
+grok_x_components (specs)
+     tree specs;
 {
-  register tree t, x, tcode;
-
-  /* We just got some friends.  They have been recorded elsewhere.  */
-  if (components == void_type_node)
-    return NULL_TREE;
+  struct pending_inline **p;
+  tree t;
 
-  if (components == NULL_TREE)
+  t = groktypename (build_decl_list (strip_attrs (specs), NULL_TREE)); 
+  
+  if (t == NULL_TREE)
     {
-      t = groktypename (build_decl_list (strip_attrs (specs),
-                                        NULL_TREE)); 
-
-      if (t == NULL_TREE)
-       {
-         error ("error in component specification");
-         return NULL_TREE;
-       }
-
-      switch (TREE_CODE (t))
-       {
-       case VAR_DECL:
-         /* Static anonymous unions come out as VAR_DECLs.  */
-         if (ANON_UNION_TYPE_P (TREE_TYPE (t)))
-           return t;
-
-         /* We return SPECS here, because in the parser it was ending
-            up with not doing anything to $$, which is what SPECS
-            represents.  */
-         return specs;
-         break;
-
-       case RECORD_TYPE:
-       case UNION_TYPE:
-         if (TREE_CODE (t) == UNION_TYPE)
-           tcode = union_type_node;
-         else
-           tcode = record_type_node;
-         if (CLASSTYPE_DECLARED_CLASS (t))
-           tcode = class_type_node;
-         else if (IS_SIGNATURE (t))
-           tcode = signature_type_node;
-         
-         if (TYPE_LANG_SPECIFIC (t) 
-             && CLASSTYPE_USE_TEMPLATE (t))
-           /* We have already looked up this type.  */
-           ;
-         else
-           {
-             if (CLASSTYPE_IS_TEMPLATE (t))
-               x = DECL_NAME (CLASSTYPE_TI_TEMPLATE (t));
-             else
-               x = TYPE_IDENTIFIER (t);
-             t = xref_tag (tcode, x, 0);
-           }
-
-         if (ANON_UNION_TYPE_P (t))
-           {
-             /* See also shadow_tag.  */
-
-             struct pending_inline **p;
-             tree *q;
-             x = build_lang_field_decl (FIELD_DECL, NULL_TREE, t);
-
-             /* Wipe out memory of synthesized methods */
-             TYPE_HAS_CONSTRUCTOR (t) = 0;
-             TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
-             TYPE_HAS_INIT_REF (t) = 0;
-             TYPE_HAS_CONST_INIT_REF (t) = 0;
-             TYPE_HAS_ASSIGN_REF (t) = 0;
-             TYPE_HAS_ASSIGNMENT (t) = 0;
-             TYPE_HAS_CONST_ASSIGN_REF (t) = 0;
-
-             q = &TYPE_METHODS (t);
-             while (*q)
-               {
-                 if (DECL_ARTIFICIAL (*q))
-                   *q = TREE_CHAIN (*q);
-                 else
-                   q = &TREE_CHAIN (*q);
-               }
-             if (TYPE_METHODS (t))
-               error ("an anonymous union cannot have function members");
-
-             p = &pending_inlines;
-             for (; *p; *p = (*p)->next)
-               if (DECL_CONTEXT ((*p)->fndecl) != t)
-                 break;
-
-             return x;
-           }
-
-         return NULL_TREE;
-         break;
+      cp_error ("invalid member declaration");
+      return;
+    }
 
-       case ENUMERAL_TYPE:
-         tcode = enum_type_node;
-         t = xref_tag (tcode, TYPE_IDENTIFIER (t), 0);
-         x = grok_enum_decls (NULL_TREE);
-         return x;
-         break;
+  /* The only case where we need to do anything additional here is an
+     anonymous union field, e.g.: `struct S { union { int i; }; };'.  */
+  if (!ANON_UNION_TYPE_P (t))
+    return;
 
-       default:
-         if (t != void_type_node)
-           error ("empty component declaration");
-         return NULL_TREE;
-       }
-    }
-  else
-    /* There may or may not be any enum decls to grok, but
-       grok_enum_decls will just return components, if there aren't
-       any.  We used to try to figure out whether or not there were
-       any enum decls based on the type of components, but that's too
-       hard; it might be something like `enum { a } *p;'.  */
-    return grok_enum_decls (components);
+  fixup_anonymous_union (t);
+  finish_member_declaration (build_lang_field_decl (FIELD_DECL,
+                                                   NULL_TREE,
+                                                   t)); 
+
+  /* Ignore any inline function definitions in the anonymous union
+     since an anonymous union may not have function members.  */
+  p = &pending_inlines;
+  for (; *p; *p = (*p)->next)
+    if (DECL_CONTEXT ((*p)->fndecl) != t)
+      break;
 }
 
 /* Constructors for types with virtual baseclasses need an "in-charge" flag
@@ -1459,7 +1373,7 @@ check_classfn (ctype, function)
          && DESTRUCTOR_NAME_P (DECL_ASSEMBLER_NAME (function)))
        goto got_it;
 
-      while (++methods != end)
+      while (++methods != end && *methods)
        {
          fndecl = *methods;
          if (fn_name == DECL_NAME (OVL_CURRENT (*methods)))
@@ -1530,14 +1444,12 @@ check_classfn (ctype, function)
 
   if (templates)
     /* This function might be an instantiation or a specialization.
-       We should verify that this is possible.  If it is, we must
-       somehow add the new declaration to the method vector for the
-       class.  Perhaps we should use add_method?  For now, we simply
-       return NULL_TREE, which lets the caller know that this
-       function is new, but we don't print an error message.  */
+       We should verify that this is possible.  For now, we simply
+       return NULL_TREE, which lets the caller know that this function
+       is new, but we don't print an error message.  */
     return NULL_TREE;
 
-  if (methods != end)
+  if (methods != end && *methods)
     {
       tree fndecl = *methods;
       cp_error ("prototype for `%#D' does not match any in class `%T'",
@@ -1640,7 +1552,6 @@ grokfield (declarator, declspecs, init, asmspec_tree, attrlist)
       DECL_NONLOCAL (value) = 1;
       DECL_CONTEXT (value) = current_class_type;
       DECL_CLASS_CONTEXT (value) = current_class_type;
-      CLASSTYPE_LOCAL_TYPEDECLS (current_class_type) = 1;
 
       /* Now that we've updated the context, we need to remangle the
         name for this TYPE_DECL.  */
@@ -4129,7 +4040,9 @@ add_using_namespace (user, used, indirect)
 /* Combines two sets of overloaded functions into an OVERLOAD chain, removing
    duplicates.  The first list becomes the tail of the result.
 
-   The algorithm is O(n^2).  */
+   The algorithm is O(n^2).  We could get this down to O(n log n) by
+   doing a sort on the addresses of the functions, if that becomes
+   necessary.  */
 
 static tree
 merge_functions (s1, s2)
@@ -4414,6 +4327,7 @@ struct arg_lookup
 
 static int arg_assoc         PROTO((struct arg_lookup*, tree));
 static int arg_assoc_args    PROTO((struct arg_lookup*, tree));
+static int arg_assoc_type    PROTO((struct arg_lookup*, tree));
 
 /* Add a function to the lookup structure.
    Returns 1 on error.  */
@@ -4662,7 +4576,7 @@ arg_assoc (k, n)
                return 1;
            }
          else if (TREE_CODE_CLASS (TREE_CODE (t)) == 't'
-                  && arg_assoc_type (t) == 1)
+                  && arg_assoc_type (k, t) == 1)
            return 1;
        }
     }
index fb6995fe49fbf3674cbacdd11a2d58f778fbbadc..52c519d692a13cad2e3012d471bc5abf76899c3a 100644 (file)
@@ -1265,6 +1265,13 @@ dump_expr (t, nop)
       OB_PUTCP (digit_buffer);
       break;
 
+    case PTRMEM_CST:
+      OB_PUTC ('&');
+      dump_type (PTRMEM_CST_CLASS (t), 0);
+      OB_PUTS ("::");
+      OB_PUTID (DECL_NAME (PTRMEM_CST_MEMBER (t)));
+      break;
+
     case STRING_CST:
       {
        char *p = TREE_STRING_POINTER (t);
@@ -1571,10 +1578,14 @@ dump_expr (t, nop)
       {
        tree ob = TREE_OPERAND (t, 0);
        if (TREE_CODE (ob) == NOP_EXPR
-           && TREE_OPERAND (ob, 0) == error_mark_node
-           && TREE_CODE (TREE_OPERAND (t, 1)) == FUNCTION_DECL)
-           /* A::f */
-         dump_expr (TREE_OPERAND (t, 1), 0);
+           && TREE_OPERAND (ob, 0) == error_mark_node)
+         {
+           if (TREE_CODE (TREE_OPERAND (t, 1)) == FUNCTION_DECL)
+             /* A::f */
+             dump_expr (TREE_OPERAND (t, 1), 0);
+           else
+             dump_decl (TREE_OPERAND (t, 1), 0);
+         }
        else
          {
            dump_expr (TREE_OPERAND (t, 0), 0);
index ae8a374f86a0a2ba9af1f76b1a425482322fb28d..056f4d1f16a869c9f7e3efb9ef2bc1109225d77c 100644 (file)
@@ -162,19 +162,43 @@ cplus_expand_expr (exp, target, tmode, modifier)
        return DECL_RTL (slot);
       }
 
+    case PTRMEM_CST:
+      {
+       tree member;
+       tree offset;
+       
+       /* Find the member.  */
+       member = PTRMEM_CST_MEMBER (exp);
+
+       if (TREE_CODE (member) == FIELD_DECL) 
+         {
+           /* Find the offset for the field.  */
+           offset = convert (sizetype,
+                             size_binop (EASY_DIV_EXPR,
+                                         DECL_FIELD_BITPOS (member),
+                                         size_int (BITS_PER_UNIT)));
+
+           /* We offset all pointer to data members by 1 so that we
+              can distinguish between a null pointer to data member
+              and the first data member of a structure.  */
+           offset = size_binop (PLUS_EXPR, offset, size_int (1));
+       
+           return expand_expr (cp_convert (type, offset), target, tmode,
+                               modifier);
+         }
+       else
+         {
+           /* We don't yet handle pointer-to-member functions this
+              way.  */
+           my_friendly_abort (0);
+           return 0;
+         }
+      }
+
     case OFFSET_REF:
       {
-#if 1
        return expand_expr (default_conversion (resolve_offset_ref (exp)),
                            target, tmode, EXPAND_NORMAL);
-#else
-       /* This is old crusty code, and does not handle all that the
-          resolve_offset_ref function does.  (mrs) */
-       tree base = build_unary_op (ADDR_EXPR, TREE_OPERAND (exp, 0), 0);
-       tree offset = build_unary_op (ADDR_EXPR, TREE_OPERAND (exp, 1), 0);
-       return expand_expr (build (PLUS_EXPR, TREE_TYPE (exp), base, offset),
-                           target, tmode, EXPAND_NORMAL);
-#endif
       }
 
     case THUNK_DECL:
index 91c3d34acc50038226471d895544f5c4e7f633b1..acb9657d666f89c3b642a1e7a06cbf96ded9f81d 100644 (file)
@@ -372,21 +372,22 @@ do_friend (ctype, declarator, decl, parmdecls, flags, quals, funcdef_flag)
          if (is_friend_template)
            decl = DECL_TI_TEMPLATE (push_template_decl (decl));
 
-         if (TYPE_SIZE (ctype) != 0 && template_class_depth (ctype) == 0)
-           decl = check_classfn (ctype, decl);
-
-         /* TYPE_BEING_DEFINED is a hack for nested classes having
-             member functions of the enclosing class as friends. Will
-             go away as parsing of classes gets rewritten. */
-         if (TREE_TYPE (decl) != error_mark_node)
+         /* A nested class may declare a member of an enclosing class
+            to be a friend, so we do lookup here even if CTYPE is in
+            the process of being defined.  */
+         if (TYPE_SIZE (ctype) != 0 || TYPE_BEING_DEFINED (ctype))
            {
-             if (TYPE_BEING_DEFINED (ctype) ||
-                 TYPE_SIZE (ctype) || template_class_depth (ctype) > 0)
+             /* But, we defer looup in template specializations until
+                they are fully specialized.  */
+             if (template_class_depth (ctype) == 0)
+               decl = check_classfn (ctype, decl);
+
+             if (decl)
                add_friend (current_class_type, decl);
-             else
-               cp_error ("member `%D' declared as friend before type `%T' defined",
-                         decl, ctype);
            }
+         else
+           cp_error ("member `%D' declared as friend before type `%T' defined",
+                     decl, ctype);
        }
       else
        {
index b6a20ba8687162693b06b1fa589874f2d481facb..2386215ba4fc30866c432c509154e3115a1f1974 100644 (file)
@@ -1561,30 +1561,11 @@ build_offset_ref (type, name)
     name = ctor_identifier;
 #endif
 
-  if (TYPE_SIZE (complete_type (type)) == 0)
+  if (TYPE_SIZE (complete_type (type)) == 0
+      && !TYPE_BEING_DEFINED (type))
     {
-      if (type == current_class_type)
-       t = IDENTIFIER_CLASS_VALUE (name);
-      else
-       t = NULL_TREE;
-      if (t == 0)
-       {
-         cp_error ("incomplete type `%T' does not have member `%D'", type,
-                     name);
-         return error_mark_node;
-       }
-      if (TREE_CODE (t) == TYPE_DECL || TREE_CODE (t) == VAR_DECL
-         || TREE_CODE (t) == CONST_DECL)
-       {
-         mark_used (t);
-         return t;
-       }
-      if (TREE_CODE (t) == FIELD_DECL)
-       sorry ("use of member in incomplete aggregate type");
-      else if (TREE_CODE (t) == FUNCTION_DECL)
-       sorry ("use of member function in incomplete aggregate type");
-      else
-       my_friendly_abort (52);
+      cp_error ("incomplete type `%T' does not have member `%D'", type,
+               name);
       return error_mark_node;
     }
 
@@ -1883,28 +1864,14 @@ decl_constant_value (decl)
      tree decl;
 {
   if (! TREE_THIS_VOLATILE (decl)
-#if 0
-      /* These may be necessary for C, but they break C++.  */
-      ! TREE_PUBLIC (decl)
-      /* Don't change a variable array bound or initial value to a constant
-        in a place where a variable is invalid.  */
-      && ! pedantic
-#endif /* 0 */
-      && DECL_INITIAL (decl) != 0
+      && DECL_INITIAL (decl)
       && DECL_INITIAL (decl) != error_mark_node
       /* This is invalid if initial value is not constant.
         If it has either a function call, a memory reference,
         or a variable, then re-evaluating it could give different results.  */
       && TREE_CONSTANT (DECL_INITIAL (decl))
       /* Check for cases where this is sub-optimal, even though valid.  */
-      && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR
-#if 0
-      /* We must allow this to work outside of functions so that
-        static constants can be used for array sizes.  */
-      && current_function_decl != 0
-      && DECL_MODE (decl) != BLKmode
-#endif
-      )
+      && TREE_CODE (DECL_INITIAL (decl)) != CONSTRUCTOR)
     return DECL_INITIAL (decl);
   return decl;
 }
index 819fb51b821aad64ee984a0bfebcae2098cb1621..82a886c2377774b07ff98edce92a1bd2a6810dff 100644 (file)
@@ -628,15 +628,12 @@ build_overload_value (type, value, in_template)
      tree type, value;
      int in_template;
 {
+  my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (type)) == 't', 0);
+
   while (TREE_CODE (value) == NON_LVALUE_EXPR
         || TREE_CODE (value) == NOP_EXPR)
     value = TREE_OPERAND (value, 0);
 
-  if (TREE_CODE (type) == PARM_DECL)
-    type = TREE_TYPE (type);
-
-  my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (type)) == 't', 0);
-
   if (numeric_output_need_bar)
     {
       OB_PUTC ('_');
@@ -649,17 +646,20 @@ build_overload_value (type, value, in_template)
       return;
     }
 
-  if (TREE_CODE (type) == POINTER_TYPE
-      && TREE_CODE (TREE_TYPE (type)) == OFFSET_TYPE)
+  if (TYPE_PTRMEM_P (type))
     {
-      /* Handle a pointer to data member as a template instantiation
-        parameter, boy, what fun!  */
-      type = integer_type_node;
-      if (TREE_CODE (value) != INTEGER_CST)
-       {
-         sorry ("unknown pointer to member constant");
-         return;
-       }
+      if (TREE_CODE (value) != PTRMEM_CST)
+       /* We should have already rejected this pointer to member,
+          since it is not a constant.  */
+       my_friendly_abort (0);
+
+      /* Get the actual FIELD_DECL.  */
+      value = PTRMEM_CST_MEMBER (value);
+      my_friendly_assert (TREE_CODE (value) == FIELD_DECL, 0);
+
+      /* Output the name of the field.  */
+      build_overload_identifier (DECL_NAME (value));
+      return;
     }
 
   if (TYPE_PTRMEMFUNC_P (type))
@@ -898,7 +898,8 @@ build_template_parm_names (parmlist, arglist)
          parm = tsubst (parm, arglist, NULL_TREE);
          /* It's a PARM_DECL.  */
          build_mangled_name_for_type (TREE_TYPE (parm));
-         build_overload_value (parm, arg, uses_template_parms (arglist));
+         build_overload_value (TREE_TYPE (parm), arg, 
+                               uses_template_parms (arglist));
        }
     }
  }
index e4c7df3eb4a5dcc6b058d3fe6e27d5bf973a1a71..9ac44964ab008730b139a49a94f565a4c72d1dc5 100644 (file)
@@ -154,7 +154,7 @@ empty_parms ()
 
 #line 92 "parse.y"
 typedef union {long itype; tree ttype; char *strtype; enum tree_code code; flagged_type_tree ftype; } YYSTYPE;
-#line 282 "parse.y"
+#line 281 "parse.y"
 
 /* List of types and structure classes of the current declaration.  */
 static tree current_declspecs;
@@ -215,11 +215,11 @@ parse_decl(declarator, specs_attrs, attributes, initialized, decl)
 
 
 
-#define        YYFINAL         1608
+#define        YYFINAL         1609
 #define        YYFLAG          -32768
 #define        YYNTBASE        112
 
-#define YYTRANSLATE(x) ((unsigned)(x) <= 342 ? yytranslate[x] : 395)
+#define YYTRANSLATE(x) ((unsigned)(x) <= 342 ? yytranslate[x] : 396)
 
 static const char yytranslate[] = {     0,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -310,44 +310,45 @@ static const short yyprhs[] = {     0,
   1537,  1541,  1542,  1545,  1548,  1549,  1557,  1562,  1563,  1570,
   1574,  1577,  1580,  1583,  1584,  1585,  1595,  1597,  1598,  1600,
   1601,  1603,  1605,  1608,  1611,  1614,  1617,  1620,  1623,  1626,
-  1629,  1632,  1636,  1641,  1645,  1648,  1652,  1653,  1655,  1659,
+  1629,  1632,  1636,  1641,  1645,  1648,  1652,  1654,  1655,  1659,
   1662,  1665,  1667,  1669,  1670,  1673,  1677,  1679,  1684,  1686,
   1690,  1692,  1694,  1699,  1704,  1707,  1710,  1714,  1718,  1720,
-  1721,  1723,  1726,  1731,  1735,  1737,  1740,  1743,  1746,  1749,
-  1752,  1755,  1758,  1760,  1763,  1766,  1770,  1773,  1776,  1781,
-  1786,  1789,  1791,  1797,  1802,  1804,  1805,  1807,  1811,  1812,
-  1814,  1818,  1820,  1822,  1824,  1826,  1831,  1836,  1841,  1846,
-  1851,  1855,  1860,  1865,  1870,  1875,  1879,  1881,  1885,  1887,
-  1891,  1894,  1896,  1904,  1905,  1908,  1910,  1913,  1914,  1917,
-  1922,  1927,  1930,  1935,  1939,  1943,  1946,  1949,  1953,  1955,
-  1957,  1960,  1962,  1964,  1967,  1970,  1975,  1980,  1984,  1988,
-  1991,  1993,  1997,  2001,  2004,  2007,  2011,  2013,  2017,  2021,
-  2024,  2027,  2031,  2033,  2038,  2042,  2047,  2051,  2053,  2056,
-  2059,  2062,  2065,  2068,  2070,  2073,  2078,  2083,  2086,  2088,
-  2090,  2092,  2094,  2097,  2102,  2105,  2108,  2111,  2114,  2116,
-  2119,  2122,  2125,  2128,  2132,  2134,  2137,  2141,  2146,  2149,
-  2152,  2155,  2158,  2161,  2164,  2169,  2172,  2174,  2177,  2180,
-  2184,  2186,  2190,  2193,  2197,  2200,  2203,  2207,  2209,  2213,
-  2218,  2222,  2225,  2228,  2230,  2234,  2237,  2240,  2242,  2245,
-  2249,  2251,  2255,  2257,  2264,  2269,  2274,  2278,  2284,  2288,
-  2292,  2296,  2299,  2301,  2303,  2306,  2309,  2312,  2313,  2315,
-  2317,  2320,  2324,  2326,  2329,  2330,  2334,  2335,  2336,  2342,
-  2344,  2345,  2348,  2350,  2352,  2354,  2357,  2358,  2363,  2365,
-  2366,  2367,  2373,  2374,  2375,  2383,  2384,  2385,  2386,  2387,
-  2400,  2401,  2402,  2410,  2411,  2417,  2418,  2426,  2427,  2432,
-  2435,  2438,  2441,  2445,  2452,  2461,  2472,  2485,  2490,  2494,
-  2497,  2500,  2502,  2504,  2506,  2508,  2510,  2511,  2512,  2519,
-  2520,  2521,  2527,  2529,  2532,  2533,  2534,  2540,  2542,  2544,
-  2548,  2552,  2555,  2558,  2561,  2564,  2567,  2569,  2572,  2573,
-  2575,  2576,  2578,  2580,  2581,  2583,  2585,  2589,  2594,  2596,
-  2600,  2601,  2603,  2605,  2607,  2610,  2613,  2616,  2618,  2621,
-  2624,  2625,  2629,  2631,  2633,  2635,  2638,  2641,  2644,  2649,
-  2652,  2655,  2658,  2661,  2664,  2667,  2669,  2672,  2674,  2677,
-  2679,  2681,  2682,  2683,  2685,  2686,  2691,  2694,  2696,  2698,
-  2702,  2703,  2707,  2711,  2715,  2717,  2720,  2723,  2726,  2729,
-  2732,  2735,  2738,  2741,  2744,  2747,  2750,  2753,  2756,  2759,
-  2762,  2765,  2768,  2771,  2774,  2777,  2780,  2783,  2786,  2790,
-  2793,  2796,  2799,  2802,  2806,  2809,  2812,  2817,  2822,  2826
+  1721,  1723,  1726,  1730,  1733,  1736,  1738,  1741,  1744,  1747,
+  1750,  1753,  1756,  1759,  1761,  1764,  1767,  1771,  1774,  1777,
+  1782,  1787,  1790,  1792,  1798,  1803,  1805,  1806,  1808,  1812,
+  1813,  1815,  1819,  1821,  1823,  1825,  1827,  1832,  1837,  1842,
+  1847,  1852,  1856,  1861,  1866,  1871,  1876,  1880,  1882,  1886,
+  1888,  1892,  1895,  1897,  1905,  1906,  1909,  1911,  1914,  1915,
+  1918,  1923,  1928,  1931,  1936,  1940,  1944,  1947,  1950,  1954,
+  1956,  1958,  1961,  1963,  1965,  1968,  1971,  1976,  1981,  1985,
+  1989,  1992,  1994,  1998,  2002,  2005,  2008,  2012,  2014,  2018,
+  2022,  2025,  2028,  2032,  2034,  2039,  2043,  2048,  2052,  2054,
+  2057,  2060,  2063,  2066,  2069,  2071,  2074,  2079,  2084,  2087,
+  2089,  2091,  2093,  2095,  2098,  2103,  2106,  2109,  2112,  2115,
+  2117,  2120,  2123,  2126,  2129,  2133,  2135,  2138,  2142,  2147,
+  2150,  2153,  2156,  2159,  2162,  2165,  2170,  2173,  2175,  2178,
+  2181,  2185,  2187,  2191,  2194,  2198,  2201,  2204,  2208,  2210,
+  2214,  2219,  2223,  2226,  2229,  2231,  2235,  2238,  2241,  2243,
+  2246,  2250,  2252,  2256,  2258,  2265,  2270,  2275,  2279,  2285,
+  2289,  2293,  2297,  2300,  2302,  2304,  2307,  2310,  2313,  2314,
+  2316,  2318,  2321,  2325,  2327,  2330,  2331,  2335,  2336,  2337,
+  2343,  2345,  2346,  2349,  2351,  2353,  2355,  2358,  2359,  2364,
+  2366,  2367,  2368,  2374,  2375,  2376,  2384,  2385,  2386,  2387,
+  2388,  2401,  2402,  2403,  2411,  2412,  2418,  2419,  2427,  2428,
+  2433,  2436,  2439,  2442,  2446,  2453,  2462,  2473,  2486,  2491,
+  2495,  2498,  2501,  2503,  2505,  2507,  2509,  2511,  2512,  2513,
+  2520,  2521,  2522,  2528,  2530,  2533,  2534,  2535,  2541,  2543,
+  2545,  2549,  2553,  2556,  2559,  2562,  2565,  2568,  2570,  2573,
+  2574,  2576,  2577,  2579,  2581,  2582,  2584,  2586,  2590,  2595,
+  2597,  2601,  2602,  2604,  2606,  2608,  2611,  2614,  2617,  2619,
+  2622,  2625,  2626,  2630,  2632,  2634,  2636,  2639,  2642,  2645,
+  2650,  2653,  2656,  2659,  2662,  2665,  2668,  2670,  2673,  2675,
+  2678,  2680,  2682,  2683,  2684,  2686,  2687,  2692,  2695,  2697,
+  2699,  2703,  2704,  2708,  2712,  2716,  2718,  2721,  2724,  2727,
+  2730,  2733,  2736,  2739,  2742,  2745,  2748,  2751,  2754,  2757,
+  2760,  2763,  2766,  2769,  2772,  2775,  2778,  2781,  2784,  2787,
+  2791,  2794,  2797,  2800,  2803,  2807,  2810,  2813,  2818,  2823,
+  2827
 };
 
 static const short yyrhs[] = {    -1,
@@ -359,16 +360,16 @@ static const short yyrhs[] = {    -1,
      0,     0,    44,   163,    58,   123,   115,   109,     0,     0,
     44,    58,   124,   115,   109,     0,   125,     0,   127,    60,
      0,   129,     0,   118,   122,     0,     0,    44,   163,    64,
-   126,   132,    60,     0,    46,   309,     0,    46,   323,   309,
-     0,    46,   323,   208,     0,    46,   131,   163,     0,    46,
-   323,   163,     0,    46,   323,   131,   163,     0,     0,    46,
+   126,   132,    60,     0,    46,   310,     0,    46,   324,   310,
+     0,    46,   324,   208,     0,    46,   131,   163,     0,    46,
+   324,   163,     0,    46,   324,   131,   163,     0,     0,    46,
     44,   130,   132,    60,     0,    57,    54,     0,   131,    57,
-    54,     0,   208,     0,   309,     0,   323,   309,     0,   323,
+    54,     0,   208,     0,   310,     0,   324,   310,     0,   324,
    208,     0,    98,     0,   133,    98,     0,     0,    48,    74,
    135,   136,    75,     0,    48,    74,    75,     0,   140,     0,
    136,    59,   140,     0,   163,     0,     0,   266,   137,     0,
     45,   137,     0,   134,   266,   137,     0,   138,     0,   138,
-    64,   223,     0,   386,     0,   386,    64,   203,     0,   139,
+    64,   223,     0,   387,     0,   387,    64,   203,     0,   139,
      0,   139,    64,   183,     0,   134,   142,     0,   134,     1,
      0,   148,   147,     0,   143,     0,   141,     0,   133,   116,
    148,   117,   147,     0,   133,   116,   143,   117,     0,   118,
@@ -378,33 +379,33 @@ static const short yyrhs[] = {    -1,
    166,    60,     0,   224,    60,     0,     1,    60,     0,     1,
    109,     0,    60,     0,   218,     0,   159,     0,     0,   158,
      0,   158,    60,     0,     0,   107,     0,   154,   146,   145,
-   333,     0,   154,   146,   357,     0,   154,   146,     1,     0,
-     0,   314,     5,    93,   150,   377,   108,   296,   389,     0,
-   314,     5,    47,   296,   389,     0,     0,   323,   314,     5,
-    93,   151,   377,   108,   296,   389,     0,   323,   314,     5,
-    47,   296,   389,     0,     0,   314,   178,    93,   152,   377,
-   108,   296,   389,     0,   314,   178,    47,   296,   389,     0,
-     0,   323,   314,   178,    93,   153,   377,   108,   296,   389,
-     0,   323,   314,   178,    47,   296,   389,     0,   224,   221,
-     0,   227,   306,     0,   306,     0,   227,   149,     0,   149,
-     0,     5,    93,   377,   108,   296,   389,     0,     5,    47,
-   296,   389,     0,   178,    93,   377,   108,   296,   389,     0,
-   178,    47,   296,   389,     0,   227,   155,     0,   155,     0,
-   224,   221,     0,   227,   306,     0,   306,     0,   227,   149,
+   334,     0,   154,   146,   358,     0,   154,   146,     1,     0,
+     0,   315,     5,    93,   150,   378,   108,   297,   390,     0,
+   315,     5,    47,   297,   390,     0,     0,   324,   315,     5,
+    93,   151,   378,   108,   297,   390,     0,   324,   315,     5,
+    47,   297,   390,     0,     0,   315,   178,    93,   152,   378,
+   108,   297,   390,     0,   315,   178,    47,   297,   390,     0,
+     0,   324,   315,   178,    93,   153,   378,   108,   297,   390,
+     0,   324,   315,   178,    47,   297,   390,     0,   224,   221,
+     0,   227,   307,     0,   307,     0,   227,   149,     0,   149,
+     0,     5,    93,   378,   108,   297,   390,     0,     5,    47,
+   297,   390,     0,   178,    93,   378,   108,   297,   390,     0,
+   178,    47,   297,   390,     0,   227,   155,     0,   155,     0,
+   224,   221,     0,   227,   307,     0,   307,     0,   227,   149,
      0,   149,     0,    25,     3,     0,   157,   251,     0,   157,
     93,   195,   108,     0,   157,    47,     0,    62,   160,   161,
      0,     0,     0,   162,     0,   161,    59,   162,     0,   161,
      1,     0,    93,   195,   108,     0,    47,     0,   164,    93,
-   195,   108,     0,   164,    47,     0,   302,    93,   195,   108,
-     0,   302,    47,     0,   316,    93,   195,   108,     0,   316,
+   195,   108,     0,   164,    47,     0,   303,    93,   195,   108,
+     0,   303,    47,     0,   317,    93,   195,   108,     0,   317,
     47,     0,     3,     0,     4,     0,     5,     0,    56,     0,
     57,     0,     3,     0,    56,     0,    57,     0,   104,     0,
    103,     0,   105,     0,     0,    48,   175,   230,    60,   167,
    176,     0,     0,    48,   175,   224,   221,   168,   176,     0,
-     0,    48,   175,   306,   169,   176,     0,     0,    48,   175,
+     0,    48,   175,   307,   169,   176,     0,     0,    48,   175,
    149,   170,   176,     0,     0,     7,    48,   175,   230,    60,
    171,   176,     0,     0,     7,    48,   175,   224,   221,   172,
-   176,     0,     0,     7,    48,   175,   306,   173,   176,     0,
+   176,     0,     0,     7,    48,   175,   307,   173,   176,     0,
      0,     7,    48,   175,   149,   174,   176,     0,     0,     0,
     56,    74,   181,   180,   179,     0,     4,    74,   181,   180,
    179,     0,   178,     0,     5,    74,   181,   180,   179,     0,
@@ -413,17 +414,17 @@ static const short yyrhs[] = {    -1,
     79,     0,    78,     0,    86,     0,    87,     0,   110,     0,
    194,     0,   203,     0,    47,     0,    93,   185,   108,     0,
     47,     0,    93,   189,   108,     0,     0,   189,     0,     1,
-     0,     0,   367,   221,   235,   244,    64,   190,   252,     0,
-   185,     0,   109,     0,   330,   328,   109,     0,   330,   328,
-     1,   109,     0,   330,     1,   109,     0,     0,    58,   193,
-   191,     0,   342,     0,   203,    59,   203,     0,   203,    59,
+     0,     0,   368,   221,   235,   244,    64,   190,   252,     0,
+   185,     0,   109,     0,   331,   329,   109,     0,   331,   329,
+     1,   109,     0,   331,     1,   109,     0,     0,    58,   193,
+   191,     0,   343,     0,   203,    59,   203,     0,   203,    59,
      1,     0,   194,    59,   203,     0,   194,    59,     1,     0,
    203,     0,   194,     0,   212,     0,   118,   202,     0,    80,
    202,     0,    70,   202,     0,    88,   202,     0,   184,   202,
      0,    67,   163,     0,    13,   196,     0,    13,    93,   223,
    108,     0,    29,   196,     0,    29,    93,   223,   108,     0,
-   214,   295,     0,   214,   295,   200,     0,   214,   199,   295,
-     0,   214,   199,   295,   200,     0,   214,    93,   198,   223,
+   214,   296,     0,   214,   296,   200,     0,   214,   199,   296,
+     0,   214,   199,   296,   200,     0,   214,    93,   198,   223,
    197,     0,   214,    93,   198,   223,   197,   200,     0,   214,
    199,    93,   198,   223,   197,     0,   214,   199,    93,   198,
    223,   197,   200,     0,   215,   202,     0,   215,    94,   111,
@@ -441,49 +442,49 @@ static const short yyrhs[] = {    -1,
    203,    72,   203,     0,   203,    71,   203,     0,   203,    70,
    203,     0,   203,    68,   203,     0,   203,    69,   203,     0,
    203,    67,   203,     0,   203,    66,   203,     0,   203,    65,
-   372,    62,   203,     0,   203,    64,   203,     0,   203,    63,
-   203,     0,    61,     0,    61,   203,     0,    88,   387,   163,
-     0,    88,   387,   177,     0,   206,     0,   394,     0,     3,
+   373,    62,   203,     0,   203,    64,   203,     0,   203,    63,
+   203,     0,    61,     0,    61,   203,     0,    88,   388,   163,
+     0,    88,   388,   177,     0,   206,     0,   395,     0,     3,
      0,    56,     0,    57,     0,     0,     6,    74,   205,   181,
-   180,     0,   394,    74,   205,   181,   180,     0,    48,   163,
+   180,     0,   395,    74,   205,   181,   180,     0,    48,   163,
     74,   181,   180,     0,    48,     6,    74,   181,   180,     0,
-    48,   394,    74,   181,   180,     0,   204,     0,     4,     0,
+    48,   395,    74,   181,   180,     0,   204,     0,     4,     0,
      5,     0,   204,     0,    80,   209,     0,    70,   209,     0,
     93,   209,   108,     0,     3,    74,   181,   180,     0,    57,
-    74,   182,   180,     0,   308,     0,   204,     0,   210,     0,
+    74,   182,   180,     0,   309,     0,   204,     0,   210,     0,
     93,   209,   108,     0,   204,     0,    10,     0,   216,     0,
    217,     0,    93,   185,   108,     0,    93,   209,   108,     0,
-    93,     1,   108,     0,     0,    93,   213,   334,   108,     0,
+    93,     1,   108,     0,     0,    93,   213,   335,   108,     0,
    204,    93,   195,   108,     0,   204,    47,     0,   212,    93,
    195,   108,     0,   212,    47,     0,   212,    94,   185,   111,
      0,   212,    86,     0,   212,    87,     0,    40,     0,     9,
-    93,   195,   108,     0,   312,     0,    50,    74,   223,    75,
+    93,   195,   108,     0,   313,     0,    50,    74,   223,    75,
     93,   185,   108,     0,    51,    74,   223,    75,    93,   185,
    108,     0,    52,    74,   223,    75,    93,   185,   108,     0,
     53,    74,   223,    75,    93,   185,   108,     0,    49,    93,
-   185,   108,     0,    49,    93,   223,   108,     0,   323,     3,
-     0,   323,   206,     0,   323,   394,     0,   311,     0,   311,
-    93,   195,   108,     0,   311,    47,     0,   219,   207,     0,
+   185,   108,     0,    49,    93,   223,   108,     0,   324,     3,
+     0,   324,   206,     0,   324,   395,     0,   312,     0,   312,
+    93,   195,   108,     0,   312,    47,     0,   219,   207,     0,
    219,   207,    93,   195,   108,     0,   219,   207,    47,     0,
-   219,   208,     0,   219,   311,     0,   219,   208,    93,   195,
-   108,     0,   219,   208,    47,     0,   219,   311,    93,   195,
-   108,     0,   219,   311,    47,     0,   219,    88,     8,    47,
+   219,   208,     0,   219,   312,     0,   219,   208,    93,   195,
+   108,     0,   219,   208,    47,     0,   219,   312,    93,   195,
+   108,     0,   219,   312,    47,     0,   219,    88,     8,    47,
      0,   219,     8,    54,    88,     8,    47,     0,   219,     1,
-     0,    39,     0,   323,    39,     0,    38,     0,   323,   215,
+     0,    39,     0,   324,    39,     0,    38,     0,   324,   215,
      0,    42,     0,    43,     0,    11,     0,   217,    11,     0,
      0,   212,    92,     0,   212,    91,     0,   230,   232,    60,
      0,   224,   232,    60,     0,   227,   233,    60,     0,   224,
-    60,     0,   227,    60,     0,   118,   220,     0,   301,     0,
-   306,     0,    47,     0,   222,    47,     0,   228,   326,     0,
-   297,   326,     0,   230,   326,     0,   228,     0,   297,     0,
+    60,     0,   227,    60,     0,   118,   220,     0,   302,     0,
+   307,     0,    47,     0,   222,    47,     0,   228,   327,     0,
+   298,   327,     0,   230,   327,     0,   228,     0,   298,     0,
    228,     0,   225,     0,   227,   230,     0,   230,   226,     0,
    230,   229,   226,     0,   227,   230,   226,     0,   227,   230,
    229,     0,   227,   230,   229,   226,     0,     7,     0,   226,
    231,     0,   226,     7,     0,   226,   245,     0,   245,     0,
-   297,     0,     7,     0,   227,     9,     0,   227,     7,     0,
-   227,   245,     0,   245,     0,   230,     0,   297,   230,     0,
-   230,   229,     0,   297,   230,   229,     0,   231,     0,   229,
-   231,     0,   259,     0,     8,     0,   303,     0,    28,    93,
+   298,     0,     7,     0,   227,     9,     0,   227,     7,     0,
+   227,   245,     0,   245,     0,   230,     0,   298,   230,     0,
+   230,   229,     0,   298,   230,   229,     0,   231,     0,   229,
+   231,     0,   259,     0,     8,     0,   304,     0,    28,    93,
    185,   108,     0,    28,    93,   223,   108,     0,    30,    93,
    185,   108,     0,    30,    93,   223,   108,     0,     8,     0,
      9,     0,   259,     0,   240,     0,   232,    59,   236,     0,
@@ -491,7 +492,7 @@ static const short yyrhs[] = {    -1,
    236,     0,     0,   119,    93,   217,   108,     0,     0,   221,
    235,   244,    64,   237,   252,     0,   221,   235,   244,     0,
      0,   244,    64,   239,   252,     0,   244,     0,   221,   235,
-   238,     0,   306,   235,   238,     0,     0,   306,   235,   243,
+   238,     0,   307,   235,   238,     0,     0,   307,   235,   243,
    238,     0,   149,   235,   244,     0,     0,   245,     0,   246,
      0,   245,   246,     0,    31,    93,    93,   247,   108,   108,
      0,   248,     0,   247,    59,   248,     0,     0,   249,     0,
@@ -502,231 +503,232 @@ static const short yyrhs[] = {    -1,
     58,   253,   109,     0,    58,   253,    59,   109,     0,     1,
      0,   252,     0,   253,    59,   252,     0,    94,   203,   111,
    252,     0,   163,    62,   252,     0,   253,    59,   163,    62,
-   252,     0,    97,     0,   254,   146,   145,   333,     0,   254,
-   146,   357,     0,   254,   146,     1,     0,     0,   256,   255,
+   252,     0,    97,     0,   254,   146,   145,   334,     0,   254,
+   146,   358,     0,   254,   146,     1,     0,     0,   256,   255,
    147,     0,   102,   203,   107,     0,   102,     1,   107,     0,
      0,   258,   257,     0,   258,     1,     0,     0,    14,   163,
-    58,   260,   293,   265,   109,     0,    14,   163,    58,   109,
-     0,     0,    14,    58,   261,   293,   265,   109,     0,    14,
-    58,   109,     0,    14,   163,     0,    14,   321,     0,    45,
-   316,     0,     0,     0,   273,   279,   281,   109,   244,   262,
+    58,   260,   294,   265,   109,     0,    14,   163,    58,   109,
+     0,     0,    14,    58,   261,   294,   265,   109,     0,    14,
+    58,   109,     0,    14,   163,     0,    14,   322,     0,    45,
+   317,     0,     0,     0,   273,   279,   281,   109,   244,   262,
    258,   263,   256,     0,   273,     0,     0,    59,     0,     0,
     59,     0,    36,     0,   266,     7,     0,   266,     8,     0,
    266,     9,     0,   266,    36,     0,   266,   245,     0,   266,
    163,     0,   266,   165,     0,   267,    58,     0,   267,    62,
-     0,   266,   314,   163,     0,   266,   323,   314,   163,     0,
-   266,   323,   163,     0,   266,   177,     0,   266,   314,   177,
-     0,     0,   267,     0,   268,   270,   274,     0,   269,   274,
-     0,   266,    58,     0,   272,     0,   271,     0,     0,    62,
-   387,     0,    62,   387,   275,     0,   276,     0,   275,    59,
-   387,   276,     0,   277,     0,   278,   387,   277,     0,   316,
-     0,   302,     0,    30,    93,   185,   108,     0,    30,    93,
-   223,   108,     0,    37,   387,     0,     7,   387,     0,   278,
-    37,   387,     0,   278,     7,   387,     0,    58,     0,     0,
-   280,     0,   280,   282,     0,   281,    37,    62,   282,     0,
-   281,    37,    62,     0,   283,     0,   282,   283,     0,   284,
-    60,     0,   284,   109,     0,   156,    62,     0,   156,    95,
-     0,   156,    25,     0,   156,    58,     0,    60,     0,   118,
-   283,     0,   134,   283,     0,   134,   224,    60,     0,   224,
-   285,     0,   227,   286,     0,   306,   235,   244,   251,     0,
-   149,   235,   244,   251,     0,    62,   203,     0,     1,     0,
-   227,   155,   235,   244,   251,     0,   155,   235,   244,   251,
-     0,   127,     0,     0,   287,     0,   285,    59,   288,     0,
-     0,   290,     0,   286,    59,   292,     0,   289,     0,   290,
-     0,   291,     0,   292,     0,   301,   235,   244,   251,     0,
-     4,    62,   203,   244,     0,   306,   235,   244,   251,     0,
-   149,   235,   244,   251,     0,     3,    62,   203,   244,     0,
-    62,   203,   244,     0,   301,   235,   244,   251,     0,     4,
-    62,   203,   244,     0,   306,   235,   244,   251,     0,     3,
-    62,   203,   244,     0,    62,   203,   244,     0,   294,     0,
-   293,    59,   294,     0,   163,     0,   163,    64,   203,     0,
-   367,   324,     0,   367,     0,    93,   198,   223,   197,    94,
-   185,   111,     0,     0,   296,     9,     0,     9,     0,   297,
-     9,     0,     0,   298,   185,     0,   298,    93,   195,   108,
-     0,   298,    93,   377,   108,     0,   298,    47,     0,   298,
-    93,     1,   108,     0,    80,   297,   301,     0,    70,   297,
-   301,     0,    80,   301,     0,    70,   301,     0,   322,   296,
-   301,     0,   305,     0,   313,     0,   323,   313,     0,   302,
-     0,   304,     0,   323,   304,     0,   314,   313,     0,   305,
-   300,   296,   389,     0,   305,    94,   299,   111,     0,   305,
-    94,   111,     0,    93,   301,   108,     0,   314,   313,     0,
-   313,     0,    80,   297,   306,     0,    70,   297,   306,     0,
-    80,   306,     0,    70,   306,     0,   322,   296,   306,     0,
-   211,     0,    80,   297,   306,     0,    70,   297,   306,     0,
-    80,   307,     0,    70,   307,     0,   322,   296,   306,     0,
-   308,     0,   211,   300,   296,   389,     0,    93,   307,   108,
-     0,   211,    94,   299,   111,     0,   211,    94,   111,     0,
-   310,     0,   314,   210,     0,   314,   208,     0,   314,   207,
-     0,   314,   204,     0,   314,   207,     0,   310,     0,   323,
-   310,     0,   230,    93,   195,   108,     0,   230,    93,   209,
-   108,     0,   230,   222,     0,     4,     0,     5,     0,   177,
-     0,   315,     0,   314,   315,     0,   314,    48,   320,    54,
-     0,     4,    54,     0,     5,    54,     0,    57,    54,     0,
-   177,    54,     0,   317,     0,   323,   317,     0,   318,   163,
-     0,   318,   177,     0,   318,   320,     0,   318,    48,   320,
-     0,   319,     0,   318,   319,     0,   318,   320,    54,     0,
-   318,    48,   320,    54,     0,     4,    54,     0,     5,    54,
-     0,   177,    54,     0,    56,    54,     0,     3,    54,     0,
-    57,    54,     0,   163,    74,   181,   180,     0,   323,   313,
-     0,   304,     0,   323,   304,     0,   314,    80,     0,   323,
-   314,    80,     0,    54,     0,    80,   296,   324,     0,    80,
-   296,     0,    70,   296,   324,     0,    70,   296,     0,   322,
-   296,     0,   322,   296,   324,     0,   325,     0,    94,   185,
-   111,     0,   325,    94,   299,   111,     0,    80,   297,   326,
-     0,    80,   326,     0,    80,   297,     0,    80,     0,    70,
-   297,   326,     0,    70,   326,     0,    70,   297,     0,    70,
-     0,   322,   296,     0,   322,   296,   326,     0,   327,     0,
-    93,   326,   108,     0,    90,     0,   327,    93,   377,   108,
-   296,   389,     0,   327,    47,   296,   389,     0,   327,    94,
-   299,   111,     0,   327,    94,   111,     0,    93,   378,   108,
-   296,   389,     0,   201,   296,   389,     0,   222,   296,   389,
-     0,    94,   299,   111,     0,    94,   111,     0,   341,     0,
-   329,     0,   328,   341,     0,   328,   329,     0,     1,    60,
-     0,     0,   331,     0,   332,     0,   331,   332,     0,    33,
-   250,    60,     0,   334,     0,     1,   334,     0,     0,    58,
-   335,   191,     0,     0,     0,    15,   337,   187,   338,   339,
-     0,   334,     0,     0,   340,   342,     0,   334,     0,   342,
-     0,   220,     0,   185,    60,     0,     0,   336,    16,   343,
-   339,     0,   336,     0,     0,     0,    17,   344,   187,   345,
-   192,     0,     0,     0,    18,   346,   339,    17,   347,   186,
-    60,     0,     0,     0,     0,     0,    19,   348,    93,   370,
-   349,   188,    60,   350,   372,   108,   351,   192,     0,     0,
-     0,    20,   352,    93,   189,   108,   353,   339,     0,     0,
-    21,   203,    62,   354,   341,     0,     0,    21,   203,    12,
-   203,    62,   355,   341,     0,     0,    22,    62,   356,   341,
-     0,    23,    60,     0,    24,    60,     0,    25,    60,     0,
-    25,   185,    60,     0,   119,   371,    93,   217,   108,    60,
-     0,   119,   371,    93,   217,    62,   373,   108,    60,     0,
-   119,   371,    93,   217,    62,   373,    62,   373,   108,    60,
-     0,   119,   371,    93,   217,    62,   373,    62,   373,    62,
-   376,   108,    60,     0,    26,    80,   185,    60,     0,    26,
-   163,    60,     0,   369,   341,     0,   369,   109,     0,    60,
-     0,   360,     0,   129,     0,   128,     0,   125,     0,     0,
-     0,    95,   358,   145,   334,   359,   363,     0,     0,     0,
-    95,   361,   334,   362,   363,     0,   364,     0,   363,   364,
-     0,     0,     0,    96,   365,   368,   366,   334,     0,   228,
-     0,   297,     0,    93,    12,   108,     0,    93,   386,   108,
-     0,     3,    62,     0,    56,    62,     0,     4,    62,     0,
-     5,    62,     0,   372,    60,     0,   220,     0,    58,   191,
-     0,     0,     9,     0,     0,   185,     0,     1,     0,     0,
-   374,     0,   375,     0,   374,    59,   375,     0,    11,    93,
-   185,   108,     0,    11,     0,   376,    59,    11,     0,     0,
-   378,     0,   223,     0,   382,     0,   383,    12,     0,   382,
-    12,     0,   223,    12,     0,    12,     0,   382,    62,     0,
-   223,    62,     0,     0,    64,   380,   381,     0,   101,     0,
-   252,     0,   384,     0,   386,   379,     0,   383,   385,     0,
-   383,   388,     0,   383,   388,    64,   252,     0,   382,    59,
-     0,   223,    59,     0,   225,   221,     0,   228,   221,     0,
-   230,   221,     0,   225,   326,     0,   225,     0,   227,   306,
-     0,   386,     0,   386,   379,     0,   384,     0,   223,     0,
-     0,     0,   306,     0,     0,    61,    93,   391,   108,     0,
-    61,    47,     0,   223,     0,   390,     0,   391,    59,   390,
-     0,     0,    80,   296,   392,     0,    70,   296,   392,     0,
-   322,   296,   392,     0,    41,     0,   393,    80,     0,   393,
-    81,     0,   393,    82,     0,   393,    78,     0,   393,    79,
-     0,   393,    70,     0,   393,    68,     0,   393,    69,     0,
-   393,    88,     0,   393,    59,     0,   393,    73,     0,   393,
-    74,     0,   393,    75,     0,   393,    72,     0,   393,    63,
-     0,   393,    64,     0,   393,    76,     0,   393,    77,     0,
-   393,    86,     0,   393,    87,     0,   393,    67,     0,   393,
-    66,     0,   393,   110,     0,   393,    65,    62,     0,   393,
-    71,     0,   393,    91,     0,   393,    83,     0,   393,    47,
-     0,   393,    94,   111,     0,   393,    39,     0,   393,    38,
-     0,   393,    39,    94,   111,     0,   393,    38,    94,   111,
-     0,   393,   367,   392,     0,   393,     1,     0
+     0,   266,   315,   163,     0,   266,   324,   315,   163,     0,
+   266,   324,   163,     0,   266,   177,     0,   266,   315,   177,
+     0,   267,     0,     0,   268,   271,   274,     0,   269,   274,
+     0,   266,    58,     0,   272,     0,   270,     0,     0,    62,
+   388,     0,    62,   388,   275,     0,   276,     0,   275,    59,
+   388,   276,     0,   277,     0,   278,   388,   277,     0,   317,
+     0,   303,     0,    30,    93,   185,   108,     0,    30,    93,
+   223,   108,     0,    37,   388,     0,     7,   388,     0,   278,
+    37,   388,     0,   278,     7,   388,     0,    58,     0,     0,
+   280,     0,   280,   283,     0,   281,   282,   283,     0,   281,
+   282,     0,    37,    62,     0,   284,     0,   283,   284,     0,
+   285,    60,     0,   285,   109,     0,   156,    62,     0,   156,
+    95,     0,   156,    25,     0,   156,    58,     0,    60,     0,
+   118,   284,     0,   134,   284,     0,   134,   224,    60,     0,
+   224,   286,     0,   227,   287,     0,   307,   235,   244,   251,
+     0,   149,   235,   244,   251,     0,    62,   203,     0,     1,
+     0,   227,   155,   235,   244,   251,     0,   155,   235,   244,
+   251,     0,   127,     0,     0,   288,     0,   286,    59,   289,
+     0,     0,   291,     0,   287,    59,   293,     0,   290,     0,
+   291,     0,   292,     0,   293,     0,   302,   235,   244,   251,
+     0,     4,    62,   203,   244,     0,   307,   235,   244,   251,
+     0,   149,   235,   244,   251,     0,     3,    62,   203,   244,
+     0,    62,   203,   244,     0,   302,   235,   244,   251,     0,
+     4,    62,   203,   244,     0,   307,   235,   244,   251,     0,
+     3,    62,   203,   244,     0,    62,   203,   244,     0,   295,
+     0,   294,    59,   295,     0,   163,     0,   163,    64,   203,
+     0,   368,   325,     0,   368,     0,    93,   198,   223,   197,
+    94,   185,   111,     0,     0,   297,     9,     0,     9,     0,
+   298,     9,     0,     0,   299,   185,     0,   299,    93,   195,
+   108,     0,   299,    93,   378,   108,     0,   299,    47,     0,
+   299,    93,     1,   108,     0,    80,   298,   302,     0,    70,
+   298,   302,     0,    80,   302,     0,    70,   302,     0,   323,
+   297,   302,     0,   306,     0,   314,     0,   324,   314,     0,
+   303,     0,   305,     0,   324,   305,     0,   315,   314,     0,
+   306,   301,   297,   390,     0,   306,    94,   300,   111,     0,
+   306,    94,   111,     0,    93,   302,   108,     0,   315,   314,
+     0,   314,     0,    80,   298,   307,     0,    70,   298,   307,
+     0,    80,   307,     0,    70,   307,     0,   323,   297,   307,
+     0,   211,     0,    80,   298,   307,     0,    70,   298,   307,
+     0,    80,   308,     0,    70,   308,     0,   323,   297,   307,
+     0,   309,     0,   211,   301,   297,   390,     0,    93,   308,
+   108,     0,   211,    94,   300,   111,     0,   211,    94,   111,
+     0,   311,     0,   315,   210,     0,   315,   208,     0,   315,
+   207,     0,   315,   204,     0,   315,   207,     0,   311,     0,
+   324,   311,     0,   230,    93,   195,   108,     0,   230,    93,
+   209,   108,     0,   230,   222,     0,     4,     0,     5,     0,
+   177,     0,   316,     0,   315,   316,     0,   315,    48,   321,
+    54,     0,     4,    54,     0,     5,    54,     0,    57,    54,
+     0,   177,    54,     0,   318,     0,   324,   318,     0,   319,
+   163,     0,   319,   177,     0,   319,   321,     0,   319,    48,
+   321,     0,   320,     0,   319,   320,     0,   319,   321,    54,
+     0,   319,    48,   321,    54,     0,     4,    54,     0,     5,
+    54,     0,   177,    54,     0,    56,    54,     0,     3,    54,
+     0,    57,    54,     0,   163,    74,   181,   180,     0,   324,
+   314,     0,   305,     0,   324,   305,     0,   315,    80,     0,
+   324,   315,    80,     0,    54,     0,    80,   297,   325,     0,
+    80,   297,     0,    70,   297,   325,     0,    70,   297,     0,
+   323,   297,     0,   323,   297,   325,     0,   326,     0,    94,
+   185,   111,     0,   326,    94,   300,   111,     0,    80,   298,
+   327,     0,    80,   327,     0,    80,   298,     0,    80,     0,
+    70,   298,   327,     0,    70,   327,     0,    70,   298,     0,
+    70,     0,   323,   297,     0,   323,   297,   327,     0,   328,
+     0,    93,   327,   108,     0,    90,     0,   328,    93,   378,
+   108,   297,   390,     0,   328,    47,   297,   390,     0,   328,
+    94,   300,   111,     0,   328,    94,   111,     0,    93,   379,
+   108,   297,   390,     0,   201,   297,   390,     0,   222,   297,
+   390,     0,    94,   300,   111,     0,    94,   111,     0,   342,
+     0,   330,     0,   329,   342,     0,   329,   330,     0,     1,
+    60,     0,     0,   332,     0,   333,     0,   332,   333,     0,
+    33,   250,    60,     0,   335,     0,     1,   335,     0,     0,
+    58,   336,   191,     0,     0,     0,    15,   338,   187,   339,
+   340,     0,   335,     0,     0,   341,   343,     0,   335,     0,
+   343,     0,   220,     0,   185,    60,     0,     0,   337,    16,
+   344,   340,     0,   337,     0,     0,     0,    17,   345,   187,
+   346,   192,     0,     0,     0,    18,   347,   340,    17,   348,
+   186,    60,     0,     0,     0,     0,     0,    19,   349,    93,
+   371,   350,   188,    60,   351,   373,   108,   352,   192,     0,
+     0,     0,    20,   353,    93,   189,   108,   354,   340,     0,
+     0,    21,   203,    62,   355,   342,     0,     0,    21,   203,
+    12,   203,    62,   356,   342,     0,     0,    22,    62,   357,
+   342,     0,    23,    60,     0,    24,    60,     0,    25,    60,
+     0,    25,   185,    60,     0,   119,   372,    93,   217,   108,
+    60,     0,   119,   372,    93,   217,    62,   374,   108,    60,
+     0,   119,   372,    93,   217,    62,   374,    62,   374,   108,
+    60,     0,   119,   372,    93,   217,    62,   374,    62,   374,
+    62,   377,   108,    60,     0,    26,    80,   185,    60,     0,
+    26,   163,    60,     0,   370,   342,     0,   370,   109,     0,
+    60,     0,   361,     0,   129,     0,   128,     0,   125,     0,
+     0,     0,    95,   359,   145,   335,   360,   364,     0,     0,
+     0,    95,   362,   335,   363,   364,     0,   365,     0,   364,
+   365,     0,     0,     0,    96,   366,   369,   367,   335,     0,
+   228,     0,   298,     0,    93,    12,   108,     0,    93,   387,
+   108,     0,     3,    62,     0,    56,    62,     0,     4,    62,
+     0,     5,    62,     0,   373,    60,     0,   220,     0,    58,
+   191,     0,     0,     9,     0,     0,   185,     0,     1,     0,
+     0,   375,     0,   376,     0,   375,    59,   376,     0,    11,
+    93,   185,   108,     0,    11,     0,   377,    59,    11,     0,
+     0,   379,     0,   223,     0,   383,     0,   384,    12,     0,
+   383,    12,     0,   223,    12,     0,    12,     0,   383,    62,
+     0,   223,    62,     0,     0,    64,   381,   382,     0,   101,
+     0,   252,     0,   385,     0,   387,   380,     0,   384,   386,
+     0,   384,   389,     0,   384,   389,    64,   252,     0,   383,
+    59,     0,   223,    59,     0,   225,   221,     0,   228,   221,
+     0,   230,   221,     0,   225,   327,     0,   225,     0,   227,
+   307,     0,   387,     0,   387,   380,     0,   385,     0,   223,
+     0,     0,     0,   307,     0,     0,    61,    93,   392,   108,
+     0,    61,    47,     0,   223,     0,   391,     0,   392,    59,
+   391,     0,     0,    80,   297,   393,     0,    70,   297,   393,
+     0,   323,   297,   393,     0,    41,     0,   394,    80,     0,
+   394,    81,     0,   394,    82,     0,   394,    78,     0,   394,
+    79,     0,   394,    70,     0,   394,    68,     0,   394,    69,
+     0,   394,    88,     0,   394,    59,     0,   394,    73,     0,
+   394,    74,     0,   394,    75,     0,   394,    72,     0,   394,
+    63,     0,   394,    64,     0,   394,    76,     0,   394,    77,
+     0,   394,    86,     0,   394,    87,     0,   394,    67,     0,
+   394,    66,     0,   394,   110,     0,   394,    65,    62,     0,
+   394,    71,     0,   394,    91,     0,   394,    83,     0,   394,
+    47,     0,   394,    94,   111,     0,   394,    39,     0,   394,
+    38,     0,   394,    39,    94,   111,     0,   394,    38,    94,
+   111,     0,   394,   368,   393,     0,   394,     1,     0
 };
 
 #endif
 
 #if YYDEBUG != 0
 static const short yyrline[] = { 0,
-   335,   337,   345,   348,   349,   353,   355,   358,   363,   367,
-   373,   377,   380,   384,   387,   389,   391,   394,   396,   399,
-   402,   404,   406,   408,   410,   411,   413,   414,   418,   421,
-   430,   433,   435,   439,   442,   444,   448,   451,   463,   470,
-   478,   480,   481,   483,   487,   490,   496,   499,   501,   506,
-   509,   513,   516,   519,   522,   526,   531,   541,   543,   545,
-   547,   549,   562,   565,   569,   572,   574,   576,   579,   582,
-   586,   588,   590,   592,   597,   599,   601,   603,   605,   606,
-   613,   614,   615,   618,   621,   625,   627,   628,   631,   633,
-   636,   639,   641,   645,   648,   650,   654,   656,   658,   662,
-   664,   666,   670,   672,   674,   680,   684,   687,   690,   693,
-   698,   701,   703,   705,   711,   721,   723,   726,   729,   731,
-   734,   738,   747,   750,   752,   756,   769,   789,   792,   794,
-   795,   798,   805,   811,   813,   815,   817,   819,   822,   827,
-   829,   830,   831,   832,   835,   837,   838,   841,   843,   844,
-   847,   852,   852,   856,   856,   859,   859,   862,   862,   866,
-   866,   871,   871,   874,   874,   877,   879,   882,   889,   893,
-   896,   899,   905,   914,   916,   924,   927,   930,   933,   937,
-   940,   942,   945,   948,   950,   952,   954,   958,   961,   964,
-   969,   973,   978,   982,   985,   986,   990,  1009,  1016,  1019,
-  1021,  1022,  1023,  1026,  1030,  1031,  1035,  1039,  1042,  1044,
-  1048,  1051,  1054,  1058,  1061,  1063,  1065,  1067,  1070,  1074,
-  1076,  1078,  1080,  1086,  1089,  1092,  1095,  1107,  1112,  1116,
-  1120,  1125,  1127,  1131,  1135,  1137,  1146,  1150,  1153,  1156,
-  1161,  1164,  1166,  1174,  1187,  1192,  1198,  1200,  1202,  1215,
-  1218,  1220,  1222,  1224,  1226,  1228,  1230,  1232,  1234,  1236,
-  1238,  1240,  1242,  1244,  1246,  1248,  1250,  1252,  1254,  1256,
-  1258,  1262,  1264,  1266,  1283,  1286,  1288,  1289,  1290,  1291,
-  1292,  1295,  1298,  1301,  1305,  1308,  1310,  1315,  1317,  1318,
-  1321,  1323,  1325,  1327,  1331,  1334,  1338,  1342,  1343,  1344,
-  1348,  1356,  1357,  1358,  1372,  1374,  1377,  1379,  1390,  1395,
-  1397,  1399,  1401,  1403,  1405,  1407,  1410,  1412,  1456,  1457,
-  1461,  1465,  1469,  1473,  1475,  1479,  1481,  1483,  1491,  1493,
-  1495,  1497,  1501,  1503,  1505,  1507,  1512,  1514,  1516,  1518,
-  1521,  1523,  1525,  1569,  1572,  1576,  1579,  1583,  1586,  1591,
-  1593,  1597,  1610,  1613,  1620,  1627,  1632,  1634,  1639,  1641,
-  1648,  1650,  1654,  1658,  1664,  1668,  1671,  1674,  1677,  1687,
-  1689,  1692,  1696,  1699,  1702,  1705,  1708,  1714,  1720,  1722,
-  1727,  1729,  1738,  1741,  1743,  1746,  1752,  1754,  1764,  1768,
-  1771,  1774,  1779,  1782,  1790,  1792,  1794,  1796,  1799,  1802,
-  1817,  1836,  1839,  1841,  1844,  1846,  1849,  1851,  1854,  1856,
-  1859,  1862,  1866,  1872,  1873,  1885,  1892,  1895,  1901,  1905,
-  1910,  1916,  1917,  1925,  1928,  1932,  1935,  1939,  1944,  1947,
-  1951,  1954,  1956,  1958,  1960,  1967,  1969,  1970,  1971,  1975,
-  1978,  1982,  1985,  1991,  1993,  1996,  1999,  2002,  2008,  2011,
-  2014,  2016,  2018,  2022,  2028,  2036,  2038,  2042,  2044,  2049,
-  2052,  2055,  2057,  2059,  2063,  2068,  2075,  2079,  2083,  2090,
-  2094,  2097,  2100,  2106,  2118,  2120,  2123,  2143,  2145,  2148,
-  2150,  2155,  2157,  2159,  2161,  2163,  2165,  2169,  2174,  2177,
-  2179,  2183,  2189,  2194,  2199,  2201,  2205,  2210,  2213,  2220,
-  2237,  2243,  2245,  2248,  2251,  2253,  2257,  2259,  2263,  2268,
-  2274,  2277,  2278,  2299,  2322,  2324,  2328,  2339,  2353,  2358,
-  2365,  2368,  2376,  2387,  2396,  2400,  2416,  2419,  2424,  2426,
-  2428,  2430,  2432,  2434,  2437,  2439,  2443,  2449,  2451,  2454,
-  2457,  2459,  2470,  2475,  2478,  2483,  2486,  2487,  2498,  2501,
-  2502,  2513,  2515,  2518,  2520,  2523,  2530,  2538,  2545,  2551,
-  2557,  2565,  2569,  2574,  2578,  2581,  2590,  2592,  2596,  2599,
-  2604,  2608,  2614,  2625,  2628,  2632,  2636,  2644,  2649,  2655,
-  2658,  2660,  2662,  2668,  2671,  2673,  2675,  2677,  2681,  2684,
-  2702,  2712,  2714,  2715,  2719,  2724,  2727,  2729,  2731,  2733,
-  2737,  2743,  2746,  2748,  2750,  2752,  2756,  2759,  2762,  2764,
-  2766,  2768,  2772,  2775,  2778,  2780,  2782,  2784,  2786,  2793,
-  2797,  2802,  2806,  2811,  2813,  2817,  2820,  2822,  2825,  2827,
-  2828,  2831,  2833,  2835,  2841,  2856,  2862,  2868,  2882,  2884,
-  2888,  2902,  2904,  2906,  2910,  2916,  2929,  2931,  2935,  2948,
-  2954,  2956,  2957,  2958,  2966,  2971,  2980,  2981,  2985,  2988,
-  2994,  3000,  3003,  3005,  3007,  3009,  3013,  3017,  3021,  3024,
-  3029,  3032,  3034,  3036,  3038,  3040,  3042,  3044,  3046,  3050,
-  3054,  3058,  3062,  3063,  3065,  3067,  3069,  3071,  3073,  3075,
-  3077,  3079,  3087,  3089,  3090,  3091,  3094,  3100,  3102,  3107,
-  3109,  3112,  3126,  3129,  3132,  3136,  3139,  3146,  3148,  3151,
-  3153,  3155,  3158,  3161,  3164,  3167,  3169,  3172,  3176,  3178,
-  3184,  3186,  3187,  3189,  3194,  3196,  3198,  3200,  3202,  3205,
-  3206,  3208,  3211,  3212,  3215,  3215,  3218,  3218,  3221,  3221,
-  3223,  3225,  3227,  3229,  3235,  3241,  3244,  3247,  3253,  3255,
-  3257,  3261,  3263,  3264,  3265,  3267,  3270,  3277,  3282,  3290,
-  3294,  3296,  3299,  3301,  3304,  3308,  3310,  3313,  3315,  3318,
-  3335,  3341,  3349,  3351,  3353,  3357,  3360,  3361,  3369,  3373,
-  3377,  3380,  3381,  3387,  3390,  3393,  3395,  3399,  3404,  3407,
-  3417,  3422,  3423,  3430,  3433,  3436,  3438,  3441,  3443,  3453,
-  3467,  3471,  3474,  3476,  3480,  3484,  3487,  3490,  3492,  3496,
-  3498,  3505,  3512,  3515,  3518,  3522,  3526,  3532,  3536,  3541,
-  3543,  3546,  3551,  3557,  3568,  3571,  3573,  3577,  3582,  3584,
-  3591,  3594,  3596,  3598,  3604,  3609,  3612,  3614,  3616,  3618,
-  3620,  3622,  3624,  3626,  3628,  3630,  3632,  3634,  3636,  3638,
-  3640,  3642,  3644,  3646,  3648,  3650,  3652,  3654,  3656,  3658,
-  3660,  3662,  3664,  3666,  3668,  3670,  3672,  3674,  3677,  3679
+   334,   336,   344,   347,   348,   352,   354,   357,   362,   366,
+   372,   376,   379,   383,   386,   388,   390,   393,   395,   398,
+   401,   403,   405,   407,   409,   410,   412,   413,   417,   420,
+   429,   432,   434,   438,   441,   443,   447,   450,   462,   469,
+   477,   479,   480,   482,   486,   489,   495,   498,   500,   505,
+   508,   512,   515,   518,   521,   525,   530,   540,   542,   544,
+   546,   548,   561,   564,   568,   571,   573,   575,   578,   581,
+   585,   587,   589,   591,   596,   598,   600,   602,   604,   605,
+   612,   613,   614,   617,   620,   624,   626,   627,   630,   632,
+   635,   638,   640,   644,   647,   649,   653,   655,   657,   661,
+   663,   665,   669,   671,   673,   679,   683,   686,   689,   692,
+   697,   700,   702,   704,   710,   720,   722,   725,   728,   730,
+   733,   737,   746,   749,   751,   755,   768,   788,   791,   793,
+   794,   797,   804,   810,   812,   814,   816,   818,   821,   826,
+   828,   829,   830,   831,   834,   836,   837,   840,   842,   843,
+   846,   851,   851,   855,   855,   858,   858,   861,   861,   865,
+   865,   870,   870,   873,   873,   876,   878,   881,   888,   892,
+   895,   898,   904,   913,   915,   923,   926,   929,   932,   936,
+   939,   941,   944,   947,   949,   951,   953,   957,   960,   963,
+   968,   972,   977,   981,   984,   985,   989,  1008,  1015,  1018,
+  1020,  1021,  1022,  1025,  1029,  1030,  1034,  1038,  1041,  1043,
+  1047,  1050,  1053,  1057,  1060,  1062,  1064,  1066,  1069,  1073,
+  1075,  1077,  1079,  1085,  1088,  1091,  1094,  1106,  1111,  1115,
+  1119,  1124,  1126,  1130,  1134,  1136,  1145,  1149,  1152,  1155,
+  1160,  1163,  1165,  1173,  1186,  1191,  1197,  1199,  1201,  1214,
+  1217,  1219,  1221,  1223,  1225,  1227,  1229,  1231,  1233,  1235,
+  1237,  1239,  1241,  1243,  1245,  1247,  1249,  1251,  1253,  1255,
+  1257,  1261,  1263,  1265,  1282,  1285,  1287,  1288,  1289,  1290,
+  1291,  1294,  1297,  1300,  1304,  1307,  1309,  1314,  1316,  1317,
+  1320,  1322,  1324,  1326,  1330,  1333,  1337,  1341,  1342,  1343,
+  1347,  1355,  1356,  1357,  1371,  1373,  1376,  1378,  1389,  1394,
+  1396,  1398,  1400,  1402,  1404,  1406,  1409,  1411,  1455,  1456,
+  1460,  1464,  1468,  1472,  1474,  1478,  1480,  1482,  1490,  1492,
+  1494,  1496,  1500,  1502,  1504,  1506,  1511,  1513,  1515,  1517,
+  1520,  1522,  1524,  1568,  1571,  1575,  1578,  1582,  1585,  1590,
+  1592,  1596,  1609,  1612,  1619,  1626,  1631,  1633,  1638,  1640,
+  1647,  1649,  1653,  1657,  1663,  1667,  1670,  1673,  1676,  1686,
+  1688,  1691,  1695,  1698,  1701,  1704,  1707,  1713,  1719,  1721,
+  1726,  1728,  1737,  1740,  1742,  1745,  1751,  1753,  1763,  1767,
+  1770,  1773,  1778,  1781,  1789,  1791,  1793,  1795,  1798,  1801,
+  1816,  1835,  1838,  1840,  1843,  1845,  1849,  1851,  1855,  1857,
+  1861,  1864,  1868,  1874,  1875,  1887,  1894,  1897,  1903,  1907,
+  1912,  1918,  1919,  1927,  1930,  1934,  1937,  1941,  1946,  1949,
+  1953,  1956,  1958,  1960,  1962,  1969,  1971,  1972,  1973,  1977,
+  1980,  1984,  1987,  1993,  1995,  1998,  2001,  2004,  2010,  2013,
+  2016,  2018,  2020,  2024,  2030,  2038,  2040,  2044,  2046,  2051,
+  2054,  2057,  2059,  2061,  2065,  2070,  2077,  2081,  2085,  2092,
+  2096,  2099,  2102,  2108,  2120,  2122,  2125,  2145,  2147,  2150,
+  2152,  2157,  2159,  2161,  2163,  2165,  2167,  2171,  2179,  2182,
+  2184,  2188,  2194,  2199,  2204,  2206,  2210,  2213,  2215,  2221,
+  2238,  2244,  2246,  2249,  2252,  2254,  2258,  2260,  2264,  2269,
+  2275,  2278,  2279,  2300,  2323,  2325,  2329,  2340,  2354,  2359,
+  2366,  2368,  2369,  2370,  2373,  2388,  2393,  2399,  2401,  2406,
+  2408,  2410,  2412,  2414,  2416,  2419,  2429,  2436,  2461,  2467,
+  2470,  2473,  2475,  2486,  2491,  2494,  2499,  2502,  2509,  2519,
+  2522,  2529,  2539,  2541,  2544,  2546,  2549,  2556,  2564,  2571,
+  2577,  2583,  2591,  2595,  2600,  2604,  2607,  2616,  2618,  2622,
+  2625,  2630,  2634,  2640,  2651,  2654,  2658,  2662,  2670,  2675,
+  2681,  2684,  2686,  2688,  2694,  2697,  2699,  2701,  2703,  2707,
+  2710,  2728,  2738,  2740,  2741,  2745,  2750,  2753,  2755,  2757,
+  2759,  2763,  2769,  2772,  2774,  2776,  2778,  2782,  2785,  2788,
+  2790,  2792,  2794,  2798,  2801,  2804,  2806,  2808,  2810,  2812,
+  2819,  2823,  2828,  2832,  2837,  2839,  2843,  2846,  2848,  2851,
+  2853,  2854,  2857,  2859,  2861,  2867,  2882,  2888,  2894,  2908,
+  2910,  2914,  2928,  2930,  2932,  2936,  2942,  2955,  2957,  2961,
+  2974,  2980,  2982,  2983,  2984,  2992,  2997,  3006,  3007,  3011,
+  3014,  3020,  3026,  3029,  3031,  3033,  3035,  3039,  3043,  3047,
+  3050,  3055,  3058,  3060,  3062,  3064,  3066,  3068,  3070,  3072,
+  3076,  3080,  3084,  3088,  3089,  3091,  3093,  3095,  3097,  3099,
+  3101,  3103,  3105,  3113,  3115,  3116,  3117,  3120,  3126,  3128,
+  3133,  3135,  3138,  3152,  3155,  3158,  3162,  3165,  3172,  3174,
+  3177,  3179,  3181,  3184,  3187,  3190,  3193,  3195,  3198,  3202,
+  3204,  3210,  3212,  3213,  3215,  3220,  3222,  3224,  3226,  3228,
+  3231,  3232,  3234,  3237,  3238,  3241,  3241,  3244,  3244,  3247,
+  3247,  3249,  3251,  3253,  3255,  3261,  3267,  3270,  3273,  3279,
+  3281,  3283,  3287,  3289,  3290,  3291,  3293,  3296,  3303,  3308,
+  3316,  3320,  3322,  3325,  3327,  3330,  3334,  3336,  3339,  3341,
+  3344,  3361,  3367,  3375,  3377,  3379,  3383,  3386,  3387,  3395,
+  3399,  3403,  3406,  3407,  3413,  3416,  3419,  3421,  3425,  3430,
+  3433,  3443,  3448,  3449,  3456,  3459,  3462,  3464,  3467,  3469,
+  3479,  3493,  3497,  3500,  3502,  3506,  3510,  3513,  3516,  3518,
+  3522,  3524,  3531,  3538,  3541,  3544,  3548,  3552,  3558,  3562,
+  3567,  3569,  3572,  3577,  3583,  3594,  3597,  3599,  3603,  3608,
+  3610,  3617,  3620,  3622,  3624,  3630,  3635,  3638,  3640,  3642,
+  3644,  3646,  3648,  3650,  3652,  3654,  3656,  3658,  3660,  3662,
+  3664,  3666,  3668,  3670,  3672,  3674,  3676,  3678,  3680,  3682,
+  3684,  3686,  3688,  3690,  3692,  3694,  3696,  3698,  3700,  3703,
+  3705
 };
 #endif
 
@@ -775,10 +777,10 @@ static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER"
 "pending_inlines","defarg_again","pending_defargs","structsp","@26","@27","@28",
 "@29","maybecomma","maybecomma_warn","aggr","named_class_head_sans_basetype",
 "named_class_head_sans_basetype_defn","named_complex_class_head_sans_basetype",
-"do_xref_defn","named_class_head","unnamed_class_head","class_head","maybe_base_class_list",
+"named_class_head","@30","unnamed_class_head","class_head","maybe_base_class_list",
 "base_class_list","base_class","base_class.1","base_class_access_list","left_curly",
-"self_reference","opt.component_decl_list","component_decl_list","component_decl",
-"component_decl_1","components","notype_components","component_declarator0",
+"self_reference","opt.component_decl_list","access_specifier","component_decl_list",
+"component_decl","component_decl_1","components","notype_components","component_declarator0",
 "component_declarator","after_type_component_declarator0","notype_component_declarator0",
 "after_type_component_declarator","notype_component_declarator","enumlist","enumerator",
 "new_type_id","cv_qualifiers","nonempty_cv_qualifiers","suspend_mom","nonmomentary_expr",
@@ -789,13 +791,13 @@ static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER"
 "typename_sub","typename_sub0","typename_sub1","typename_sub2","explicit_template_type",
 "complex_type_name","ptr_to_mem","global_scope","new_declarator","direct_new_declarator",
 "absdcl","direct_abstract_declarator","stmts","errstmt","maybe_label_decls",
-"label_decls","label_decl","compstmt_or_error","compstmt","@30","simple_if",
-"@31","@32","implicitly_scoped_stmt","@33","stmt","simple_stmt","@34","@35",
-"@36","@37","@38","@39","@40","@41","@42","@43","@44","@45","@46","@47","function_try_block",
-"@48","@49","try_block","@50","@51","handler_seq","handler","@52","@53","type_specifier_seq",
+"label_decls","label_decl","compstmt_or_error","compstmt","@31","simple_if",
+"@32","@33","implicitly_scoped_stmt","@34","stmt","simple_stmt","@35","@36",
+"@37","@38","@39","@40","@41","@42","@43","@44","@45","@46","@47","@48","function_try_block",
+"@49","@50","try_block","@51","@52","handler_seq","handler","@53","@54","type_specifier_seq",
 "handler_args","label_colon","for.init.statement","maybe_cv_qualifier","xexpr",
 "asm_operands","nonnull_asm_operands","asm_operand","asm_clobbers","parmlist",
-"complex_parmlist","defarg","@54","defarg1","parms","parms_comma","named_parm",
+"complex_parmlist","defarg","@55","defarg1","parms","parms_comma","named_parm",
 "full_parm","parm","see_typename","bad_parm","exception_specification_opt","ansi_raise_identifier",
 "ansi_raise_identifiers","conversion_declarator","operator","operator_name", NULL
 };
@@ -851,44 +853,45 @@ static const short yyr1[] = {     0,
    257,   258,   258,   258,   260,   259,   259,   261,   259,   259,
    259,   259,   259,   262,   263,   259,   259,   264,   264,   265,
    265,   266,   266,   266,   266,   266,   266,   267,   268,   268,
-   268,   269,   269,   269,   269,   269,   270,   271,   271,   271,
+   268,   269,   269,   269,   269,   269,   270,   271,   270,   270,
    272,   273,   273,   274,   274,   274,   275,   275,   276,   276,
    277,   277,   277,   277,   278,   278,   278,   278,   279,   280,
-   281,   281,   281,   281,   282,   282,   283,   283,   283,   283,
-   283,   283,   283,   283,   283,   283,   284,   284,   284,   284,
-   284,   284,   284,   284,   284,   285,   285,   285,   286,   286,
-   286,   287,   287,   288,   288,   289,   289,   290,   290,   290,
-   290,   291,   291,   292,   292,   292,   293,   293,   294,   294,
-   295,   295,   295,   296,   296,   297,   297,   298,   299,   300,
-   300,   300,   300,   301,   301,   301,   301,   301,   301,   302,
-   302,   303,   303,   303,   304,   305,   305,   305,   305,   305,
-   305,   306,   306,   306,   306,   306,   306,   307,   307,   307,
-   307,   307,   307,   308,   308,   308,   308,   308,   308,   309,
-   309,   310,   310,   311,   311,   312,   312,   312,   313,   313,
-   313,   314,   314,   314,   315,   315,   315,   315,   316,   316,
-   317,   317,   317,   317,   318,   318,   318,   318,   319,   319,
-   319,   319,   319,   319,   320,   321,   321,   321,   322,   322,
-   323,   324,   324,   324,   324,   324,   324,   324,   325,   325,
-   326,   326,   326,   326,   326,   326,   326,   326,   326,   326,
+   281,   281,   281,   281,   282,   283,   283,   284,   284,   284,
+   284,   284,   284,   284,   284,   284,   284,   285,   285,   285,
+   285,   285,   285,   285,   285,   285,   286,   286,   286,   287,
+   287,   287,   288,   288,   289,   289,   290,   290,   291,   291,
+   291,   291,   292,   292,   293,   293,   293,   294,   294,   295,
+   295,   296,   296,   296,   297,   297,   298,   298,   299,   300,
+   301,   301,   301,   301,   302,   302,   302,   302,   302,   302,
+   303,   303,   304,   304,   304,   305,   306,   306,   306,   306,
+   306,   306,   307,   307,   307,   307,   307,   307,   308,   308,
+   308,   308,   308,   308,   309,   309,   309,   309,   309,   309,
+   310,   310,   311,   311,   312,   312,   313,   313,   313,   314,
+   314,   314,   315,   315,   315,   316,   316,   316,   316,   317,
+   317,   318,   318,   318,   318,   319,   319,   319,   319,   320,
+   320,   320,   320,   320,   320,   321,   322,   322,   322,   323,
+   323,   324,   325,   325,   325,   325,   325,   325,   325,   326,
    326,   327,   327,   327,   327,   327,   327,   327,   327,   327,
-   327,   327,   328,   328,   328,   328,   329,   330,   330,   331,
-   331,   332,   333,   333,   335,   334,   337,   338,   336,   339,
-   340,   339,   341,   341,   342,   342,   343,   342,   342,   344,
-   345,   342,   346,   347,   342,   348,   349,   350,   351,   342,
-   352,   353,   342,   354,   342,   355,   342,   356,   342,   342,
-   342,   342,   342,   342,   342,   342,   342,   342,   342,   342,
-   342,   342,   342,   342,   342,   342,   358,   359,   357,   361,
-   362,   360,   363,   363,   365,   366,   364,   367,   367,   368,
-   368,   369,   369,   369,   369,   370,   370,   370,   371,   371,
-   372,   372,   372,   373,   373,   374,   374,   375,   376,   376,
-   377,   377,   377,   378,   378,   378,   378,   378,   378,   378,
-   380,   379,   381,   381,   382,   382,   382,   382,   382,   383,
-   383,   384,   384,   384,   384,   384,   384,   385,   385,   386,
-   386,   387,   388,   388,   389,   389,   389,   390,   391,   391,
-   392,   392,   392,   392,   393,   394,   394,   394,   394,   394,
-   394,   394,   394,   394,   394,   394,   394,   394,   394,   394,
-   394,   394,   394,   394,   394,   394,   394,   394,   394,   394,
-   394,   394,   394,   394,   394,   394,   394,   394,   394,   394
+   327,   327,   328,   328,   328,   328,   328,   328,   328,   328,
+   328,   328,   328,   329,   329,   329,   329,   330,   331,   331,
+   332,   332,   333,   334,   334,   336,   335,   338,   339,   337,
+   340,   341,   340,   342,   342,   343,   343,   344,   343,   343,
+   345,   346,   343,   347,   348,   343,   349,   350,   351,   352,
+   343,   353,   354,   343,   355,   343,   356,   343,   357,   343,
+   343,   343,   343,   343,   343,   343,   343,   343,   343,   343,
+   343,   343,   343,   343,   343,   343,   343,   359,   360,   358,
+   362,   363,   361,   364,   364,   366,   367,   365,   368,   368,
+   369,   369,   370,   370,   370,   370,   371,   371,   371,   372,
+   372,   373,   373,   373,   374,   374,   375,   375,   376,   377,
+   377,   378,   378,   378,   379,   379,   379,   379,   379,   379,
+   379,   381,   380,   382,   382,   383,   383,   383,   383,   383,
+   384,   384,   385,   385,   385,   385,   385,   385,   386,   386,
+   387,   387,   388,   389,   389,   390,   390,   390,   391,   392,
+   392,   393,   393,   393,   393,   394,   395,   395,   395,   395,
+   395,   395,   395,   395,   395,   395,   395,   395,   395,   395,
+   395,   395,   395,   395,   395,   395,   395,   395,   395,   395,
+   395,   395,   395,   395,   395,   395,   395,   395,   395,   395,
+   395
 };
 
 static const short yyr2[] = {     0,
@@ -941,99 +944,100 @@ static const short yyr2[] = {     0,
      3,     0,     2,     2,     0,     7,     4,     0,     6,     3,
      2,     2,     2,     0,     0,     9,     1,     0,     1,     0,
      1,     1,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     3,     4,     3,     2,     3,     0,     1,     3,     2,
+     2,     3,     4,     3,     2,     3,     1,     0,     3,     2,
      2,     1,     1,     0,     2,     3,     1,     4,     1,     3,
      1,     1,     4,     4,     2,     2,     3,     3,     1,     0,
-     1,     2,     4,     3,     1,     2,     2,     2,     2,     2,
-     2,     2,     1,     2,     2,     3,     2,     2,     4,     4,
-     2,     1,     5,     4,     1,     0,     1,     3,     0,     1,
-     3,     1,     1,     1,     1,     4,     4,     4,     4,     4,
-     3,     4,     4,     4,     4,     3,     1,     3,     1,     3,
-     2,     1,     7,     0,     2,     1,     2,     0,     2,     4,
-     4,     2,     4,     3,     3,     2,     2,     3,     1,     1,
-     2,     1,     1,     2,     2,     4,     4,     3,     3,     2,
-     1,     3,     3,     2,     2,     3,     1,     3,     3,     2,
-     2,     3,     1,     4,     3,     4,     3,     1,     2,     2,
-     2,     2,     2,     1,     2,     4,     4,     2,     1,     1,
-     1,     1,     2,     4,     2,     2,     2,     2,     1,     2,
-     2,     2,     2,     3,     1,     2,     3,     4,     2,     2,
-     2,     2,     2,     2,     4,     2,     1,     2,     2,     3,
-     1,     3,     2,     3,     2,     2,     3,     1,     3,     4,
-     3,     2,     2,     1,     3,     2,     2,     1,     2,     3,
-     1,     3,     1,     6,     4,     4,     3,     5,     3,     3,
-     3,     2,     1,     1,     2,     2,     2,     0,     1,     1,
-     2,     3,     1,     2,     0,     3,     0,     0,     5,     1,
-     0,     2,     1,     1,     1,     2,     0,     4,     1,     0,
-     0,     5,     0,     0,     7,     0,     0,     0,     0,    12,
-     0,     0,     7,     0,     5,     0,     7,     0,     4,     2,
-     2,     2,     3,     6,     8,    10,    12,     4,     3,     2,
-     2,     1,     1,     1,     1,     1,     0,     0,     6,     0,
-     0,     5,     1,     2,     0,     0,     5,     1,     1,     3,
-     3,     2,     2,     2,     2,     2,     1,     2,     0,     1,
-     0,     1,     1,     0,     1,     1,     3,     4,     1,     3,
-     0,     1,     1,     1,     2,     2,     2,     1,     2,     2,
-     0,     3,     1,     1,     1,     2,     2,     2,     4,     2,
-     2,     2,     2,     2,     2,     1,     2,     1,     2,     1,
-     1,     0,     0,     1,     0,     4,     2,     1,     1,     3,
-     0,     3,     3,     3,     1,     2,     2,     2,     2,     2,
+     1,     2,     3,     2,     2,     1,     2,     2,     2,     2,
+     2,     2,     2,     1,     2,     2,     3,     2,     2,     4,
+     4,     2,     1,     5,     4,     1,     0,     1,     3,     0,
+     1,     3,     1,     1,     1,     1,     4,     4,     4,     4,
+     4,     3,     4,     4,     4,     4,     3,     1,     3,     1,
+     3,     2,     1,     7,     0,     2,     1,     2,     0,     2,
+     4,     4,     2,     4,     3,     3,     2,     2,     3,     1,
+     1,     2,     1,     1,     2,     2,     4,     4,     3,     3,
+     2,     1,     3,     3,     2,     2,     3,     1,     3,     3,
+     2,     2,     3,     1,     4,     3,     4,     3,     1,     2,
+     2,     2,     2,     2,     1,     2,     4,     4,     2,     1,
+     1,     1,     1,     2,     4,     2,     2,     2,     2,     1,
+     2,     2,     2,     2,     3,     1,     2,     3,     4,     2,
+     2,     2,     2,     2,     2,     4,     2,     1,     2,     2,
+     3,     1,     3,     2,     3,     2,     2,     3,     1,     3,
+     4,     3,     2,     2,     1,     3,     2,     2,     1,     2,
+     3,     1,     3,     1,     6,     4,     4,     3,     5,     3,
+     3,     3,     2,     1,     1,     2,     2,     2,     0,     1,
+     1,     2,     3,     1,     2,     0,     3,     0,     0,     5,
+     1,     0,     2,     1,     1,     1,     2,     0,     4,     1,
+     0,     0,     5,     0,     0,     7,     0,     0,     0,     0,
+    12,     0,     0,     7,     0,     5,     0,     7,     0,     4,
+     2,     2,     2,     3,     6,     8,    10,    12,     4,     3,
+     2,     2,     1,     1,     1,     1,     1,     0,     0,     6,
+     0,     0,     5,     1,     2,     0,     0,     5,     1,     1,
+     3,     3,     2,     2,     2,     2,     2,     1,     2,     0,
+     1,     0,     1,     1,     0,     1,     1,     3,     4,     1,
+     3,     0,     1,     1,     1,     2,     2,     2,     1,     2,
+     2,     0,     3,     1,     1,     1,     2,     2,     2,     4,
+     2,     2,     2,     2,     2,     2,     1,     2,     1,     2,
+     1,     1,     0,     0,     1,     0,     4,     2,     1,     1,
+     3,     0,     3,     3,     3,     1,     2,     2,     2,     2,
      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     2,     2,     2,     2,     2,     2,     2,     2,     3,     2,
-     2,     2,     2,     3,     2,     2,     4,     4,     3,     2
+     2,     2,     2,     2,     2,     2,     2,     2,     2,     3,
+     2,     2,     2,     2,     3,     2,     2,     4,     4,     3,
+     2
 };
 
 static const short yydefact[] = {     3,
-    12,    12,     5,     0,     4,     0,   279,   629,   630,     0,
-   384,   396,   576,     0,    11,     0,     0,     0,    10,   482,
-   835,     0,     0,     0,   167,   661,   280,   281,    83,     0,
-     0,   822,     0,    45,     0,     0,    13,    25,     0,    27,
-     8,     0,    16,    15,    89,   110,    86,     0,   631,   171,
-   298,   277,   299,   607,     0,   371,     0,   370,   389,     0,
-   409,   388,   426,   395,     0,   498,   497,   504,   503,   502,
-   477,   383,   592,   397,   593,   108,   297,   618,   590,     0,
-   632,   574,     0,     0,   278,    81,    82,   176,   635,   176,
-   636,   176,   282,   167,   140,   141,   142,   143,   144,   468,
-   471,     0,   657,     0,   472,     0,     0,     0,     0,   141,
+    12,    12,     5,     0,     4,     0,   279,   630,   631,     0,
+   384,   396,   577,     0,    11,     0,     0,     0,    10,   482,
+   836,     0,     0,     0,   167,   662,   280,   281,    83,     0,
+     0,   823,     0,    45,     0,     0,    13,    25,     0,    27,
+     8,     0,    16,    15,    89,   110,    86,     0,   632,   171,
+   298,   277,   299,   608,     0,   371,     0,   370,   389,     0,
+   409,   388,   426,   395,     0,   497,   498,   504,   503,   502,
+   477,   383,   593,   397,   594,   108,   297,   619,   591,     0,
+   633,   575,     0,     0,   278,    81,    82,   176,   636,   176,
+   637,   176,   282,   167,   140,   141,   142,   143,   144,   468,
+   471,     0,   658,     0,   472,     0,     0,     0,     0,   141,
    142,   143,   144,    23,     0,     0,     0,     0,     0,     0,
-     0,   473,   639,     0,   645,     0,     0,     0,    37,     0,
-     0,    31,     0,     0,    47,     0,   176,   637,     0,     0,
-   605,     0,     0,     0,   604,     0,     0,     0,     0,   298,
-     0,   578,     0,   297,   574,    28,     0,    26,     3,    46,
+     0,   473,   640,     0,   646,     0,     0,     0,    37,     0,
+     0,    31,     0,     0,    47,     0,   176,   638,     0,     0,
+   606,     0,     0,     0,   605,     0,     0,     0,     0,   298,
+     0,   579,     0,   297,   575,    28,     0,    26,     3,    46,
      0,    64,   384,     0,     0,     8,    67,    63,    66,    89,
      0,     0,     0,   395,    90,    14,     0,   424,     0,     0,
-   442,    87,    79,   638,   578,     0,   574,    80,     0,     0,
-     0,   106,     0,   405,   361,   589,   362,   601,     0,   574,
+   442,    87,    79,   639,   579,     0,   575,    80,     0,     0,
+     0,   106,     0,   405,   361,   590,   362,   602,     0,   575,
    386,   385,    78,   109,   372,     0,   407,   387,   107,   378,
    402,   403,   373,   391,   393,   382,   404,     0,    75,   427,
    483,   484,   485,   486,   501,   149,   148,   150,   488,   489,
-   495,   487,     0,     0,   490,   491,   504,   822,   500,   519,
-   520,   577,   390,     0,   421,   630,     0,   659,   171,   622,
-   623,   619,   595,   633,     0,   594,   591,     0,   870,   866,
-   865,   863,   845,   850,   851,     0,   857,   856,   842,   843,
-   841,   860,   849,   846,   847,   848,   852,   853,   839,   840,
-   836,   837,   838,   862,   854,   855,   844,   861,     0,   858,
-   768,   389,   769,   831,   282,   279,   576,   302,   350,     0,
+   495,   487,     0,     0,   490,   491,   504,   823,   500,   519,
+   520,   578,   390,     0,   421,   631,     0,   660,   171,   623,
+   624,   620,   596,   634,     0,   595,   592,     0,   871,   867,
+   866,   864,   846,   851,   852,     0,   858,   857,   843,   844,
+   842,   861,   850,   847,   848,   849,   853,   854,   840,   841,
+   837,   838,   839,   863,   855,   856,   845,   862,     0,   859,
+   769,   389,   770,   832,   282,   279,   577,   302,   350,     0,
      0,     0,     0,   346,   344,   317,   348,   349,     0,     0,
      0,     0,     0,   280,   281,   273,     0,     0,   184,   183,
      0,   185,   186,     0,     0,   187,     0,     0,   177,   178,
      0,   247,     0,   250,   182,   301,   213,     0,     0,   303,
-   304,     0,   180,   368,   389,   369,   624,   329,   319,     0,
-     0,     0,     0,   176,     0,   470,     0,   465,     0,   658,
-   656,     0,   188,   189,     0,     0,     0,   431,     3,    21,
-    29,   653,   649,   650,   652,   654,   651,   140,   141,   142,
-     0,   143,   144,   641,   642,   646,   643,   640,     0,   289,
-   290,   288,   621,   620,    33,    32,    49,     0,   157,     0,
-     0,   389,   155,     0,     0,   603,     0,   602,   141,   142,
-   275,   276,   293,     0,   611,   292,     0,   610,     0,   300,
-   615,     0,     0,    12,     0,   167,     9,     9,    70,     0,
+   304,     0,   180,   368,   389,   369,   625,   329,   319,     0,
+     0,     0,     0,   176,     0,   470,     0,   465,     0,   659,
+   657,     0,   188,   189,     0,     0,     0,   431,     3,    21,
+    29,   654,   650,   651,   653,   655,   652,   140,   141,   142,
+     0,   143,   144,   642,   643,   647,   644,   641,     0,   289,
+   290,   288,   622,   621,    33,    32,    49,     0,   157,     0,
+     0,   389,   155,     0,     0,   604,     0,   603,   141,   142,
+   275,   276,   293,     0,   612,   292,     0,   611,     0,   300,
+   616,     0,     0,    12,     0,   167,     9,     9,    70,     0,
     65,     0,     0,    71,    74,     0,   423,   425,   122,    93,
-   127,   757,     0,    85,    84,    92,   125,     0,     0,   123,
-    88,   617,     0,     0,   582,     0,   825,     0,   587,     0,
-   586,     0,     0,     0,     0,   574,   424,     0,    77,   578,
-   574,   600,     0,   375,   376,     0,    76,   424,   380,   379,
+   127,   758,     0,    85,    84,    92,   125,     0,     0,   123,
+    88,   618,     0,     0,   583,     0,   826,     0,   588,     0,
+   587,     0,     0,     0,     0,   575,   424,     0,    77,   579,
+   575,   601,     0,   375,   376,     0,    76,   424,   380,   379,
    381,   374,   394,   411,   410,   492,   496,   494,     0,   499,
-   505,     0,     0,   392,   424,   574,    94,     0,     0,     0,
-     0,   574,   100,   575,   606,   630,   660,   171,     0,     0,
-   859,   864,   391,   574,   574,     0,   574,   869,   176,     0,
+   505,     0,     0,   392,   424,   575,    94,     0,     0,     0,
+     0,   575,   100,   576,   607,   631,   661,   171,     0,     0,
+   860,   865,   391,   575,   575,     0,   575,   870,   176,     0,
      0,     0,   220,     0,     0,   222,   235,   236,     0,     0,
      0,     0,     0,   274,   219,   216,   215,   217,     0,     0,
      0,     0,     0,   301,     0,     0,     0,   214,   174,   175,
@@ -1041,1098 +1045,1067 @@ static const short yydefact[] = {     3,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,   311,     0,
    313,   315,   316,   354,   353,     0,     0,   238,   238,     0,
-   224,   572,     0,   232,   351,   343,     0,     0,   822,   332,
-   335,   336,     0,     0,   363,   678,   674,   683,     0,   578,
-   574,   574,   574,   365,   681,     0,   628,   367,     0,     0,
-   366,   331,     0,   326,   345,   327,   347,   625,     0,   328,
-   173,   173,     0,   165,     0,   389,   163,   569,   480,   567,
+   224,   573,     0,   232,   351,   343,     0,     0,   823,   332,
+   335,   336,     0,     0,   363,   679,   675,   684,     0,   579,
+   575,   575,   575,   365,   682,     0,   629,   367,     0,     0,
+   366,   331,     0,   326,   345,   327,   347,   626,     0,   328,
+   173,   173,     0,   165,     0,   389,   163,   570,   480,   568,
    467,     0,     0,   398,     0,     0,   399,   400,   401,   437,
-   438,   439,   436,     0,   429,   432,     0,     3,     0,   644,
-   176,   647,     0,    41,    42,     0,    53,     0,     0,    57,
-    61,    50,   821,   816,     0,   368,   389,    53,   369,   820,
-    59,   168,   153,   151,   168,   173,   296,   609,   608,   300,
-   612,     0,    18,    20,    89,     9,     9,    73,    72,     0,
-   128,   352,     0,   705,    91,   703,   448,     0,   444,   443,
-   212,     0,   211,   579,   616,     0,   798,     0,   793,   389,
-     0,   792,   794,   823,   805,     0,     0,   614,   585,   584,
-     0,     0,   599,     0,   419,   418,   406,   598,     0,   825,
-   588,   377,   408,   420,   424,   493,   629,   630,   822,     0,
-   822,   631,   506,   507,   509,   822,   512,   511,     0,   542,
-   630,     0,   533,     0,     0,   545,     0,   121,   116,     0,
-   171,   546,   549,     0,   525,     0,   119,     0,   424,   422,
-   825,   791,   176,   176,   634,   176,   825,   791,   574,    97,
-   574,   103,   868,   867,   831,   831,   831,     0,     0,     0,
-     0,   628,     0,     0,     0,     0,   389,     0,     0,     0,
-   307,     0,   305,   306,     0,   245,   179,   279,   629,   630,
-   280,   281,     0,     0,   449,   478,     0,   272,   271,   783,
-   782,     0,   269,   268,   266,   267,   265,   264,   263,   260,
-   261,   262,   258,   259,   253,   254,   255,   256,   257,   251,
-   252,     0,     0,     0,     0,     0,   238,   226,   242,     0,
-     0,   225,   574,   574,     0,   574,   571,   668,     0,     0,
-     0,     0,     0,   334,     0,   338,     0,   340,     0,   677,
-   676,   673,   672,   821,     0,     0,   692,     0,     0,   825,
-   364,   825,   679,   574,   791,   578,   678,   674,     0,     0,
-   574,     0,     0,     0,     0,     0,   170,   172,   283,   168,
-   161,   159,   168,     0,   481,     0,   480,   210,   209,   208,
-   207,   431,     0,     0,    24,     0,     0,   648,     0,    38,
-    44,    43,    55,    52,    53,     0,    48,     0,     0,   678,
-   674,     0,   812,   574,   815,   817,     0,   813,   814,    54,
-   488,     0,   158,   168,   168,   156,   169,    17,    19,    69,
-    89,   412,   145,   133,   146,   147,     0,   126,   129,     0,
-     0,     0,     0,   704,   698,   445,     0,   124,   583,   580,
-   797,   811,   800,     0,   581,   796,   810,   799,   795,   824,
-   807,   818,   808,   801,   806,   827,     0,   416,   597,   596,
-   415,   516,     0,   515,   822,   822,   822,     0,   574,   791,
-   541,   534,   546,   535,   424,   424,   531,   532,   529,   530,
-   574,   791,   279,   629,     0,   411,   117,   537,   547,   552,
-   553,   411,   411,     0,     0,   411,   115,   538,   550,   411,
-   526,   527,   528,   424,     0,   474,    96,     0,     0,     0,
-     0,   102,     0,   825,   791,   825,   791,   833,   832,   834,
-   284,   318,   221,   223,   324,   325,     0,     0,     0,     0,
-   306,   309,     0,     0,     0,     0,   246,     0,   310,   312,
-   314,     0,     0,     0,     0,   227,   244,     0,     0,   665,
-   663,     0,   666,   578,   233,     0,     0,   176,   341,     0,
-     0,     0,   675,   671,   682,   574,   691,   689,   690,   680,
-   825,     0,   687,     0,   626,   627,     0,   330,   166,   168,
-   168,   164,   570,   568,   469,     0,   430,   428,   279,     0,
-    22,    30,   655,    56,    51,    58,    62,   677,   673,   678,
-   674,     0,   590,     0,   574,   679,    60,   154,   152,    68,
-     0,   131,     0,   135,     0,   137,     0,   139,     0,   758,
-     0,   200,   706,     0,   699,   700,     0,   446,   678,   674,
-     0,   301,     0,   624,   819,     0,     0,   828,   829,     0,
-     0,   413,     0,     0,     0,   518,   517,   510,   825,     0,
-   536,   442,   442,   825,     0,     0,     0,   424,   424,     0,
-   424,   424,     0,   424,     0,   442,     0,   462,   574,   286,
-   285,   287,   574,    99,     0,   105,     0,     0,     0,     0,
-     0,     0,   452,     0,   450,   249,   270,   240,   239,   237,
-   228,     0,   241,   243,   664,   662,   669,   667,     0,   234,
-     0,     0,   333,   337,   339,   825,   685,   574,   686,   162,
-   160,   466,     0,   433,   435,   677,   673,   595,   679,   132,
-   130,     0,     0,     0,     0,   440,     0,     0,   279,   629,
-   630,   707,   720,   723,   726,   731,     0,     0,     0,     0,
-     0,     0,     0,     0,   280,   752,   760,     0,   779,   756,
-   755,   754,     0,   715,     0,     0,   389,     0,   694,   713,
-   719,   693,   714,   753,     0,   701,   447,     0,   627,   809,
-   803,   804,   802,     0,   826,   417,     0,   513,   514,   508,
-   112,   574,   540,   544,   114,   574,   424,   424,   561,   442,
-   279,   629,     0,   548,   554,   555,   411,   411,   442,   442,
-     0,   442,   551,   539,     0,   825,   825,   574,   574,     0,
-     0,     0,     0,   451,     0,     0,   229,   230,   670,   342,
-   285,   688,   825,     0,   134,   136,   138,   765,   759,   763,
-     0,   702,   697,   203,   772,   774,   775,     0,     0,   711,
-     0,     0,     0,   738,   740,   741,   742,     0,     0,     0,
-     0,     0,     0,     0,   773,     0,   360,   780,     0,   716,
-   358,   411,     0,   359,     0,   411,     0,     0,     0,   201,
-   696,   695,   717,   751,   750,   306,   830,   414,   825,   825,
-   560,   557,   559,     0,     0,   424,   424,   424,   556,   558,
-   543,   464,     0,   463,   458,    95,   101,   825,   825,   320,
-   321,   322,   323,   453,     0,   231,   684,   434,     0,   764,
-   441,   192,     0,   708,   721,   710,     0,     0,     0,     0,
-     0,   734,     0,   743,     0,   749,    39,   144,    34,   144,
-     0,    35,   761,     0,   356,   357,     0,     0,     0,   355,
-   202,   711,   111,   113,   424,   424,   566,   442,   442,     0,
-     0,   476,    98,   104,   573,     0,   766,   199,     0,   389,
-     0,   711,     0,   724,   712,   698,   777,   727,     0,     0,
-     0,     0,   739,   748,    40,    36,     0,     0,   718,   565,
-   563,   562,   564,   461,   460,   454,    86,    89,     0,     0,
-     0,   193,   411,   709,   204,   722,   206,     0,   778,     0,
-   776,   732,   736,   735,   762,   784,     0,     0,   459,   770,
-   771,   767,   424,   698,   190,     0,     0,   196,     0,   195,
-   711,     0,     0,     0,   785,   786,   744,   457,     0,   456,
-     0,   205,     0,   725,   728,   733,   737,     0,   784,     0,
-     0,   455,   197,   191,     0,     0,     0,   745,   787,     0,
-     0,   788,     0,     0,   198,   729,   789,     0,   746,     0,
-     0,     0,   730,   790,   747,     0,     0,     0
+   438,   439,   436,     0,   429,   432,     0,     3,     0,   645,
+   176,   648,     0,    41,    42,     0,    53,     0,     0,    57,
+    61,    50,   822,   817,     0,   368,   389,    53,   369,   821,
+    59,   168,   153,   151,   168,   173,   296,   610,   609,   300,
+   613,     0,    18,    20,    89,     9,     9,    73,    72,     0,
+   128,   352,     0,   706,    91,   704,   448,     0,   444,   443,
+   212,     0,   211,   580,   617,     0,   799,     0,   794,   389,
+     0,   793,   795,   824,   806,     0,     0,   615,   586,   585,
+     0,     0,   600,     0,   419,   418,   406,   599,     0,   826,
+   589,   377,   408,   420,   424,   493,   630,   631,   823,     0,
+   823,   632,   506,   507,   509,   823,   512,   511,     0,   543,
+   631,     0,   534,     0,     0,   546,     0,   121,   116,     0,
+   171,   547,   550,     0,   526,     0,   119,     0,   424,     0,
+   422,   826,   792,   176,   176,   635,   176,   826,   792,   575,
+    97,   575,   103,   869,   868,   832,   832,   832,     0,     0,
+     0,     0,   629,     0,     0,     0,     0,   389,     0,     0,
+     0,   307,     0,   305,   306,     0,   245,   179,   279,   630,
+   631,   280,   281,     0,     0,   449,   478,     0,   272,   271,
+   784,   783,     0,   269,   268,   266,   267,   265,   264,   263,
+   260,   261,   262,   258,   259,   253,   254,   255,   256,   257,
+   251,   252,     0,     0,     0,     0,     0,   238,   226,   242,
+     0,     0,   225,   575,   575,     0,   575,   572,   669,     0,
+     0,     0,     0,     0,   334,     0,   338,     0,   340,     0,
+   678,   677,   674,   673,   822,     0,     0,   693,     0,     0,
+   826,   364,   826,   680,   575,   792,   579,   679,   675,     0,
+     0,   575,     0,     0,     0,     0,     0,   170,   172,   283,
+   168,   161,   159,   168,     0,   481,     0,   480,   210,   209,
+   208,   207,   431,     0,     0,    24,     0,     0,   649,     0,
+    38,    44,    43,    55,    52,    53,     0,    48,     0,     0,
+   679,   675,     0,   813,   575,   816,   818,     0,   814,   815,
+    54,   488,     0,   158,   168,   168,   156,   169,    17,    19,
+    69,    89,   412,   145,   133,   146,   147,     0,   126,   129,
+     0,     0,     0,     0,   705,   699,   445,     0,   124,   584,
+   581,   798,   812,   801,     0,   582,   797,   811,   800,   796,
+   825,   808,   819,   809,   802,   807,   828,     0,   416,   598,
+   597,   415,   516,     0,   515,   823,   823,   823,     0,   575,
+   792,   542,   535,   547,   536,   424,   424,   532,   533,   530,
+   531,   575,   792,   279,   630,     0,   411,   117,   538,   548,
+   553,   554,   411,   411,     0,     0,   411,   115,   539,   551,
+   411,   527,   528,   529,   424,   525,   474,     0,    96,     0,
+     0,     0,     0,   102,     0,   826,   792,   826,   792,   834,
+   833,   835,   284,   318,   221,   223,   324,   325,     0,     0,
+     0,     0,   306,   309,     0,     0,     0,     0,   246,     0,
+   310,   312,   314,     0,     0,     0,     0,   227,   244,     0,
+     0,   666,   664,     0,   667,   579,   233,     0,     0,   176,
+   341,     0,     0,     0,   676,   672,   683,   575,   692,   690,
+   691,   681,   826,     0,   688,     0,   627,   628,     0,   330,
+   166,   168,   168,   164,   571,   569,   469,     0,   430,   428,
+   279,     0,    22,    30,   656,    56,    51,    58,    62,   678,
+   674,   679,   675,     0,   591,     0,   575,   680,    60,   154,
+   152,    68,     0,   131,     0,   135,     0,   137,     0,   139,
+     0,   759,     0,   200,   707,     0,   700,   701,     0,   446,
+   679,   675,     0,   301,     0,   625,   820,     0,     0,   829,
+   830,     0,     0,   413,     0,     0,     0,   518,   517,   510,
+   826,     0,   537,   442,   442,   826,     0,     0,     0,   424,
+   424,     0,   424,   424,     0,   424,     0,   442,   462,   575,
+   286,   285,   287,   575,    99,     0,   105,     0,     0,     0,
+     0,     0,     0,   452,     0,   450,   249,   270,   240,   239,
+   237,   228,     0,   241,   243,   665,   663,   670,   668,     0,
+   234,     0,     0,   333,   337,   339,   826,   686,   575,   687,
+   162,   160,   466,     0,   433,   435,   678,   674,   596,   680,
+   132,   130,     0,     0,     0,     0,   440,     0,     0,   279,
+   630,   631,   708,   721,   724,   727,   732,     0,     0,     0,
+     0,     0,     0,     0,     0,   280,   753,   761,     0,   780,
+   757,   756,   755,     0,   716,     0,     0,   389,     0,   695,
+   714,   720,   694,   715,   754,     0,   702,   447,     0,   628,
+   810,   804,   805,   803,     0,   827,   417,     0,   513,   514,
+   508,   112,   575,   541,   545,   114,   575,   424,   424,   562,
+   442,   279,   630,     0,   549,   555,   556,   411,   411,   442,
+   442,     0,   442,   552,   540,     0,   826,   826,   575,   575,
+     0,     0,     0,     0,   451,     0,     0,   229,   230,   671,
+   342,   285,   689,   826,     0,   134,   136,   138,   766,   760,
+   764,     0,   703,   698,   203,   773,   775,   776,     0,     0,
+   712,     0,     0,     0,   739,   741,   742,   743,     0,     0,
+     0,     0,     0,     0,     0,   774,     0,   360,   781,     0,
+   717,   358,   411,     0,   359,     0,   411,     0,     0,     0,
+   201,   697,   696,   718,   752,   751,   306,   831,   414,   826,
+   826,   561,   558,   560,     0,     0,   424,   424,   424,   557,
+   559,   544,   464,     0,   463,   458,    95,   101,   826,   826,
+   320,   321,   322,   323,   453,     0,   231,   685,   434,     0,
+   765,   441,   192,     0,   709,   722,   711,     0,     0,     0,
+     0,     0,   735,     0,   744,     0,   750,    39,   144,    34,
+   144,     0,    35,   762,     0,   356,   357,     0,     0,     0,
+   355,   202,   712,   111,   113,   424,   424,   567,   442,   442,
+     0,     0,   476,    98,   104,   574,     0,   767,   199,     0,
+   389,     0,   712,     0,   725,   713,   699,   778,   728,     0,
+     0,     0,     0,   740,   749,    40,    36,     0,     0,   719,
+   566,   564,   563,   565,   461,   460,   454,    86,    89,     0,
+     0,     0,   193,   411,   710,   204,   723,   206,     0,   779,
+     0,   777,   733,   737,   736,   763,   785,     0,     0,   459,
+   771,   772,   768,   424,   699,   190,     0,     0,   196,     0,
+   195,   712,     0,     0,     0,   786,   787,   745,   457,     0,
+   456,     0,   205,     0,   726,   729,   734,   738,     0,   785,
+     0,     0,   455,   197,   191,     0,     0,     0,   746,   788,
+     0,     0,   789,     0,     0,   198,   730,   790,     0,   747,
+     0,     0,     0,   731,   791,   748,     0,     0,     0
 };
 
-static const short yydefgoto[] = {  1606,
+static const short yydefgoto[] = {  1607,
    424,     2,   425,   161,   694,   327,   177,     3,     4,    37,
-   658,   369,  1290,   659,   766,  1291,  1292,   389,  1393,   663,
-    41,   767,   398,   669,   933,   670,   671,   672,    43,   168,
-   169,    44,   443,   180,   176,    45,    46,   782,  1055,   788,
-  1057,    47,   769,   770,   181,   182,   444,   701,   968,   969,
-   638,   970,   230,    48,   955,   954,   685,   682,  1121,  1120,
-   913,   910,   136,   953,    49,    50,   907,   551,   328,   329,
-   330,   331,  1293,  1557,  1454,  1559,  1499,  1590,  1163,  1536,
-  1554,   363,   900,   332,  1231,   855,   590,   862,   333,   334,
+   658,   369,  1291,   659,   766,  1292,  1293,   389,  1394,   663,
+    41,   767,   398,   669,   934,   670,   671,   672,    43,   168,
+   169,    44,   443,   180,   176,    45,    46,   783,  1057,   789,
+  1059,    47,   769,   770,   181,   182,   444,   701,   969,   970,
+   638,   971,   230,    48,   956,   955,   685,   682,  1123,  1122,
+   914,   911,   136,   954,    49,    50,   908,   551,   328,   329,
+   330,   331,  1294,  1558,  1455,  1560,  1500,  1591,  1165,  1537,
+  1555,   363,   901,   332,  1232,   856,   590,   863,   333,   334,
    364,   336,   354,    52,   251,   664,   413,    53,    54,   337,
-   546,   338,   339,   340,   341,   445,   342,  1294,   484,   612,
-   343,  1295,    56,   213,   675,   344,   214,   524,   215,   193,
-   206,    60,   467,   485,  1317,   735,  1181,   194,   207,    61,
-   495,   736,    62,    63,   654,   655,   656,  1267,   450,   825,
-   826,  1527,  1528,  1492,  1434,  1345,    64,   642,   357,  1208,
-  1435,  1076,   916,    65,    66,    67,    68,   237,    69,    70,
-    71,   239,   753,   754,   755,   756,   241,   492,   493,   774,
-   775,   776,  1028,  1038,  1029,  1334,  1030,  1031,  1335,  1336,
-   639,   640,   591,   890,   346,   453,   454,   187,   195,    73,
-    74,    75,   196,   197,   153,    77,   132,   347,   348,   349,
-    79,   350,    81,   758,   123,   124,   125,   500,   105,    82,
-   351,   867,   868,   885,   615,  1298,  1299,  1164,  1165,  1166,
-   705,  1300,   975,  1301,  1378,  1502,  1457,  1458,  1302,  1303,
-  1482,  1379,  1503,  1380,  1538,  1381,  1540,  1585,  1600,  1382,
-  1561,  1512,  1562,  1463,   446,   702,  1265,  1304,  1396,  1517,
-  1369,  1370,  1449,  1531,  1501,  1497,  1305,  1508,  1399,   832,
-  1564,  1565,  1566,  1598,   721,   722,   995,  1177,  1313,   723,
-   724,   725,   991,   726,   146,   993,   728,  1179,  1180,   518,
-    84,    85
+   546,   338,   339,   340,   341,   445,   342,  1295,   484,   612,
+   343,  1296,    56,   213,   675,   344,   214,   524,   215,   193,
+   206,    60,   467,   485,  1318,   735,  1183,   194,   207,    61,
+   495,   736,    62,    63,   654,   655,   656,  1268,   450,   826,
+   827,  1528,  1529,  1493,  1435,  1346,    64,   642,   357,  1209,
+  1436,  1078,   917,    65,    66,    67,    68,    69,   237,    70,
+    71,   239,   753,   754,   755,   756,   241,   492,   493,   780,
+   774,   775,   776,  1029,  1039,  1030,  1335,  1031,  1032,  1336,
+  1337,   639,   640,   591,   891,   346,   453,   454,   187,   195,
+    73,    74,    75,   196,   197,   153,    77,   132,   347,   348,
+   349,    79,   350,    81,   758,   123,   124,   125,   500,   105,
+    82,   351,   868,   869,   886,   615,  1299,  1300,  1166,  1167,
+  1168,   705,  1301,   976,  1302,  1379,  1503,  1458,  1459,  1303,
+  1304,  1483,  1380,  1504,  1381,  1539,  1382,  1541,  1586,  1601,
+  1383,  1562,  1513,  1563,  1464,   446,   702,  1266,  1305,  1397,
+  1518,  1370,  1371,  1450,  1532,  1502,  1498,  1306,  1509,  1400,
+   833,  1565,  1566,  1567,  1599,   721,   722,   996,  1179,  1314,
+   723,   724,   725,   992,   726,   146,   994,   728,  1181,  1182,
+   518,    84,    85
 };
 
-static const short yypact[] = {   116,
-   144,-32768,-32768,  3219,-32768,   156,   153,   205,   332,   176,
-   170,-32768,-32768,  1325,-32768,   160,   185,   227,-32768,-32768,
--32768,   532,   752,  1021,   259,-32768,   308,   426,-32768,   684,
-   684,-32768,  5043,-32768,  3219,   323,-32768,-32768,   404,-32768,
-    62,  2851,-32768,-32768,   350,  1007,   453,   415,   437,-32768,
--32768,-32768,-32768,   530,  1892,-32768,  4895,-32768,   885,   379,
--32768,   471,-32768,-32768,  1233,    93,-32768,   479,-32768,-32768,
-   491,  2947,-32768,-32768,-32768,  1248,-32768,-32768,-32768,  1551,
--32768,-32768,   612,  8144,   524,-32768,-32768,  9669,-32768,  9669,
--32768,  9669,-32768,-32768,-32768,   205,   332,   308,   517,   476,
-   543,   437,-32768,   451,-32768,   612,  9755,  9755,   516,-32768,
--32768,-32768,-32768,-32768,   425,   579,   519,   546,   591,   598,
-   605,-32768,-32768,  1440,-32768,  1568,   205,   332,-32768,   308,
-   517,-32768,   562,   343,   599,  5841,  9669,-32768,  9669,  3212,
--32768,  1951,   692,  3212,-32768,  1726,  3405,  3405,  5043,   570,
-   586,   609,   602,   610,-32768,-32768,   732,-32768,   590,-32768,
-  4344,-32768,-32768,   259,  3053,   646,-32768,-32768,-32768,   350,
-  5462, 10843,   576,   698,-32768,-32768,   659,   471,   757,   209,
-   251,   734,-32768,-32768,   685,   267,-32768,-32768,  3412,  3412,
-  5669,  1248,   768,-32768,-32768,   615,-32768,-32768,  2065,-32768,
--32768,-32768,-32768,-32768,   885,   774,-32768,   471,  1248,-32768,
--32768,-32768,  2313,   885,-32768,   471,-32768,  5462,-32768,-32768,
+static const short yypact[] = {   129,
+   148,-32768,-32768, 10535,-32768,    92,   171,   272,   418,   199,
+   124,-32768,-32768,   917,-32768,   270,   355,   360,-32768,-32768,
+-32768,  1076,  1285,  1017,   216,-32768,   409,   499,-32768,  1618,
+  1618,-32768,  4295,-32768, 10535,   415,-32768,-32768,   457,-32768,
+    56,  4736,-32768,-32768,   412,   903,   509,   492,   505,-32768,
+-32768,-32768,-32768,   404,  1979,-32768,  4015,-32768,  2281,   329,
+-32768,   560,-32768,-32768,   798,   328,-32768,   548,-32768,-32768,
+   567,  3285,-32768,-32768,-32768,   580,-32768,-32768,-32768,  1021,
+-32768,-32768,   274,  7834,   555,-32768,-32768,  9429,-32768,  9429,
+-32768,  9429,-32768,-32768,-32768,   272,   418,   409,   578,   563,
+   600,   505,-32768,   760,-32768,   274,  9515,  9515,   607,-32768,
+-32768,-32768,-32768,-32768,   601,   648,   549,   665,   680,   663,
+   670,-32768,-32768,  1357,-32768,  1247,   272,   418,-32768,   409,
+   578,-32768,   690,  1972,   657,  5887,  9429,-32768,  9429,  2223,
+-32768,  2434,   402,  2223,-32768,  1599,  2316,  2316,  4295,   641,
+   654,   649,   658,   679,-32768,-32768,   781,-32768,   685,-32768,
+  3410,-32768,-32768,   216,  3278,   722,-32768,-32768,-32768,   412,
+  4520, 10740,   737,   749,-32768,-32768,   735,   560,   843,    98,
+   689,   791,-32768,-32768,   736,    66,-32768,-32768,  2840,  2840,
+  4591,   580,   855,-32768,-32768,   540,-32768,-32768,  2691,-32768,
+-32768,-32768,-32768,-32768,  2281,   878,-32768,   560,   580,-32768,
+-32768,-32768,  2369,  2281,-32768,   560,-32768,  4520,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   437,   471,  1887,  1830,-32768,-32768,   479,-32768,-32768,-32768,
--32768,-32768,  1160,   612,-32768,   537,  1463,-32768,   342,-32768,
--32768,-32768,-32768,-32768,  4337,-32768,-32768,   229,-32768,   707,
-   717,-32768,-32768,-32768,-32768,   751,-32768,-32768,-32768,-32768,
+   505,   560,  1485,  1636,-32768,-32768,   548,-32768,-32768,-32768,
+-32768,-32768,  1027,   274,-32768,   217,  1224,-32768,    94,-32768,
+-32768,-32768,-32768,-32768,  2883,-32768,-32768,   229,-32768,   765,
+   769,-32768,-32768,-32768,-32768,   811,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   704,-32768,
--32768,  1160,  2947,  1101,-32768,-32768,   725,-32768,-32768, 10363,
- 10449, 10535, 10535,-32768,-32768,-32768,-32768,-32768,   727,   769,
-   792,   795,   801,   874,   517,  9841,  1937, 10535,-32768,-32768,
- 10535,-32768,-32768, 10535,  7622,-32768, 10535,   442,   772,-32768,
- 10535,-32768,  9927,-32768, 10838,   376,  1310,  2889, 10013,-32768,
-   893,  1805,-32768,  2496,  3971,  3697,-32768,   440,-32768,  1965,
-  1825,   442,   442,  9669,  5841,-32768,  1937,   804,  1937,-32768,
--32768,   810,   861, 10919,   815,   828,   839,  1668,   590,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,   579,   519,   546,
-  1937,   591,   598,   876,   605,-32768,   904,-32768,   457,   205,
-   332,-32768,-32768,-32768,-32768,-32768,-32768,  4481,-32768,  5462,
-  5736,  2489,-32768,   442,    63,-32768,   363,-32768,   892,   899,
--32768,-32768,-32768,  3212,-32768,-32768,  3212,-32768,   867,-32768,
--32768,  4337,    88,   850,   883,-32768,-32768,-32768,-32768,  5841,
--32768,   812,   823,-32768,-32768,   732,-32768,   471,-32768,-32768,
--32768,-32768,   111,-32768,-32768,-32768,-32768,  7713,  9841,-32768,
--32768,-32768,  9841,   896,-32768,  6976,   226,  5116,-32768,  5116,
--32768,  5186,  5186,  5669,   888,-32768,   471,  5462,-32768,   900,
--32768,-32768,  5405,  2313,   885,  5462,-32768,   471,-32768,-32768,
-   471,  2313,-32768,   986,-32768,-32768,   437,-32768,  1887,-32768,
-  1226,  3343,    81,  1160,   471,-32768,-32768,   941,   943,   965,
-   953,-32768,-32768,-32768,-32768,   593,-32768,   450,   918,   919,
--32768,-32768,  1160,-32768,-32768,   964,-32768,-32768,  9669,  9841,
-   725,  7622,-32768,   509,  7622,-32768,-32768,-32768,  9755,  5650,
-  5650,  5650,  5650, 10964,-32768,-32768,-32768,-32768,   924, 10621,
- 10621,  7622,   927,   107,   928,   979,   934,-32768,-32768,-32768,
--32768,  9669,-32768,  7252,  7622,-32768,  9841,  9841,  7804,  9841,
-  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,
-  9841,  9841,  9841,  9841,  9841,  9841,  9841,  9841,-32768,  9841,
--32768,-32768,-32768,-32768,-32768,  9841,  9841,-32768,-32768,  1313,
-   315,   906,  8504,-32768,-32768,-32768,   989,  1463,  1037,   511,
-   528,   638,  2333,   692,-32768,  1576,  1576,-32768,  2501,   937,
-   956,  1003,-32768,-32768,   634,  9124,  1116,-32768,   999,   612,
--32768,-32768,  9841,-32768,-32768,-32768,-32768,-32768,   303,   524,
--32768,-32768,   442,-32768,  5462,  2982,-32768,   990,  1000,-32768,
--32768,  1937,   876,-32768,  8236,  8327,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,   193,-32768,   969,   949,   590,   457,  1010,
-  9669,-32768,  1008,-32768,-32768,   343,  1095,  1044,   299,  1018,
-  1023,-32768,-32768,  2225, 10843,  2225,  4136,  1233,  3794,-32768,
-  1026,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   985,
--32768,  1035,-32768,-32768,   350,-32768,-32768,-32768,-32768,    95,
-   783,  1039,   979,-32768,-32768,-32768,-32768,  7158, 10964,-32768,
-   861,  1012, 10919,-32768,-32768,  1014,-32768,  1019,   406,  4599,
-  1022,-32768,   103,  5361,  1047,  1052,   654,-32768,-32768,-32768,
-  5116,  5116,-32768,  5405,-32768,  1054,-32768,-32768,  1015,   226,
--32768,  2313,-32768,-32768,   471,-32768,   519,   546,-32768,  1036,
--32768,   605,  1074,-32768,-32768,   233,-32768,-32768,  1962,-32768,
-   791,  1141,-32768,  9841,  6374,-32768,  6374,    83,    83,   301,
-   658,  4251, 10775,  5963,-32768,   194,    83,  1073,   471,-32768,
-   226,  3153,  9669,  9669,-32768,  9669,   226,  3153,-32768,-32768,
--32768,-32768,-32768,-32768,  1067,  1067,  1067,   442,  1046,  1048,
10105,  1003,  1057,  1058,  1068,  1104,  4764,  1107,  1108,  1109,
--32768,  1078,-32768,-32768,  1082,-32768,-32768,  1132,   432,   762,
-   182,    80,  9841,  1137,-32768,  1142,  1092, 10964, 10964,-32768,
--32768,  1140,  4489,  6071,  6114,  3259,  5876,  4207,  3574,  2596,
-  2596,  2596,  2581,  2581,  1305,  1305,   478,   478,   478,-32768,
--32768,  1096,  1099,  1102,  9841,  9755,-32768,   315,-32768,  7713,
-  9841,-32768,-32768,-32768,  9841,-32768,-32768,  1125, 10535,  1110,
-  1138,  1146,  1185,-32768,  9841,-32768,  9841,-32768,  9841,  2601,
--32768,  2601,-32768,    97,  1126,  1131,-32768,  1134,  5650,   226,
--32768,   226,  2752,-32768,  3153,  1144,  9308,  9308,  6471,  1143,
-  9927,  1150,  2158,  1825,  1004,  1152,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,  9841,  1937,  1139,  1000,-32768, 10964,-32768,
- 10964,  1668,  1153, 10191,-32768,  1157,  1186,-32768,   442,-32768,
--32768,-32768,-32768,-32768,  1416,  4481,-32768,  5650,  9669,  1795,
-  1795,  3508,-32768,-32768,-32768,-32768,  2065,-32768,-32768,-32768,
-   417,  9841,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   350,-32768,   579,-32768,   591,   598,  9841,  1208,-32768,   666,
-   674,   683,   979,-32768,    72,-32768,   183,-32768,-32768,-32768,
--32768,-32768,-32768,  9216,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1052,  1204,-32768,-32768,-32768,  5650,-32768,-32768,-32768,
-  1206,-32768,  9755,-32768,-32768,-32768,-32768,   851,-32768,  3153,
10964,-32768,  1679,-32768,   471,   471,-32768,-32768,-32768,-32768,
--32768,  3153,   502,   787,  9841,   986,-32768,  1212,-32768,-32768,
--32768,   235,   497,  1551,   692,   569,    83,  1214,-32768,   621,
--32768,-32768,-32768,   471,  8572,-32768,-32768,  1168,   442,   442,
-   442,-32768,  1169,   226,  3153,   226,  3153,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,  1192,  1193,  1195,  1202,
-   985,-32768,  6766,  7713,  7346,  1188,-32768,  9841,-32768,-32768,
--32768,  1190,  1170,  1196,  5650,-32768,-32768,  1198,   173,   334,
-   334,  1200,   334,-32768,-32768, 10535,  1301,  9669,-32768,  1216,
-  1217,  1231,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-   226,  1234,-32768,  1223,-32768,-32768,  2735,-32768,-32768,-32768,
--32768,-32768, 10964,-32768,-32768,  1235,-32768,-32768,   199,  1240,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,  2393,  2393,  2680,
-  2680,  3508,-32768,  2065,-32768,  3520, 10838,-32768,-32768,-32768,
-  1242,-32768,   783,-32768,  9841,-32768,  9841,-32768,  9841,-32768,
-  1937,-32768,-32768,  6711,  1318,-32768,  7437,-32768,  9400,  9400,
-  6861,   135,  1245,   261,-32768,  7713,  7528,-32768,-32768,   210,
-  7713,-32768,  1246,  1247,  1226,-32768,-32768,-32768,   226,  1251,
--32768,  1297,  1297,   226,  1257,  9841,  9841,  4003,   471,  4760,
-   471,   471,  1105,   471,  5244,  1297,  8642,-32768,-32768,-32768,
-  1314,-32768,-32768,-32768,  1267,-32768,  1269,  9841,  9841,  9841,
-  9841,  7713,-32768,  1316,-32768,-32768, 10964,-32768,-32768,-32768,
-   380,  1196,-32768,-32768,-32768,-32768,-32768,-32768,  1279,-32768,
-  1345,   442,-32768,-32768,-32768,   226,-32768,-32768,-32768,-32768,
--32768,-32768,  9841,-32768,-32768,  2393,  2393,-32768,  3520,-32768,
--32768,  1285,  1286,  1290,  1309,-32768,   829,   214,  1347,   805,
-   816,-32768,-32768,-32768,-32768,-32768,  9841,  1348,  1352,  1353,
-  9492,   175,  1937,   616,   655,-32768,-32768,  9583,  1398,-32768,
--32768,-32768,  1354,-32768,  5089,  5564,  4654,  6601,-32768,-32768,
-  1400,-32768,-32768,-32768,  8735,-32768,-32768,  1321,  1368,-32768,
--32768,-32768,-32768,  5650,-32768,-32768,  7713,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,  4003,  4003,-32768,  1297,
-   691,   863,  9841,-32768,-32768,-32768,   986,   986,  1297,  1297,
-   593,  1297,-32768,-32768,  6263,   226,   226,-32768,-32768,  1323,
-  1329,  1334,  1340,-32768,  7713,  9841,-32768,   380,-32768,-32768,
--32768,-32768,   226,  1342,-32768,-32768,-32768,-32768,  1309,-32768,
-  1937,-32768,-32768,-32768,-32768,-32768,-32768,   688,   688,   979,
-  1324,  1333,  6168,-32768,-32768,-32768,-32768,  1362,  9841,  1373,
-  1393,  1406,  1973,  2131,-32768,   979,-32768,-32768,  1372,-32768,
--32768,   986,   841,-32768,   881,   986, 10277,   894,   252,-32768,
--32768,-32768,-32768,-32768,-32768,   340,-32768,-32768,   226,   226,
--32768,-32768,-32768,  9841,  9841,  4003,   471,   471,-32768,-32768,
--32768,-32768,  8418,-32768,-32768,-32768,-32768,   226,   226,-32768,
--32768,-32768,-32768,-32768,  1359,-32768,-32768,-32768,  1381,-32768,
--32768,-32768,  9755,-32768,-32768,-32768,  1461,  9031,  7067,  9755,
-  9841,-32768,  8843,-32768,  1420,-32768,-32768,  1428,-32768,  1406,
-  1973,-32768,-32768,   732,-32768,-32768, 10707, 10707,  7895,-32768,
--32768,   979,-32768,-32768,  4003,  4003,-32768,  1297,  1297,  1376,
10874,  1387,-32768,-32768,-32768,  4964,-32768,-32768,  1377,   487,
-  5462,   979,  8937,-32768,-32768,    72,-32768,-32768,  1430,  1385,
10942,  8843,-32768,-32768,-32768,-32768,  1309,    91,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,   453,   350,  1386,  1394,
-   979,-32768,   986,-32768,-32768,-32768,-32768,   690,-32768,  7986,
--32768,-32768,-32768,-32768,  1309,  1490,  1449,   218,-32768,-32768,
--32768,-32768,   471,    72,-32768,  9841,  1451,-32768,  1453,-32768,
-   979,  8843,  1422,    68,  1459,-32768,-32768,-32768,   111,-32768,
-  1458,-32768,  1415,-32768,-32768,-32768,-32768,  9841,  1490,  1466,
-  1490,-32768,-32768,-32768,  8077,  1419,   677,-32768,-32768,  7713,
-  1421,-32768,  1517,  1470,-32768,-32768,-32768,   270,-32768,  8937,
-  1521,  1475,-32768,-32768,-32768,  1537,  1538,-32768
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   764,-32768,
+-32768,  1027,  3285,   814,-32768,-32768,   790,-32768,-32768, 10123,
+ 10209, 10295, 10295,-32768,-32768,-32768,-32768,-32768,   800,   825,
+   834,   853,   870,  1090,   578,  9601,  1697, 10295,-32768,-32768,
+ 10295,-32768,-32768, 10295,  7312,-32768, 10295,   181,   894,-32768,
+ 10295,-32768,  9687,-32768, 10982,   370,  1912,  4227,  9773,-32768,
+   948,  2212,-32768,  1316,  3488,  3177,-32768,   380,-32768,  1589,
+  1575,   181,   181,  9429,  5887,-32768,  1697,   857,  1697,-32768,
+-32768,   871,   934, 10915,   889,   902,   908,  1438,   685,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,   648,   549,   665,
+  1697,   680,   663,   932,   670,-32768,   969,-32768,  3160,   272,
+   418,-32768,-32768,-32768,-32768,-32768,-32768,  4962,-32768,  4520,
+  5717,   557,-32768,   181,   865,-32768,   366,-32768,   977,   985,
+-32768,-32768,-32768,  2223,-32768,-32768,  2223,-32768,   935,-32768,
+-32768,  2883,    96,   951,   957,-32768,-32768,-32768,-32768,  5887,
+-32768,   890,   897,-32768,-32768,   781,-32768,   560,-32768,-32768,
+-32768,-32768,   145,-32768,-32768,-32768,-32768,  7403,  9601,-32768,
+-32768,-32768,  9601,   973,-32768,  6666,   131,  3139,-32768,  3139,
+-32768,  3732,  3732,  4591,   978,-32768,   560,  4520,-32768,   974,
+-32768,-32768,  3884,  2369,  2281,  4520,-32768,   560,-32768,-32768,
+   560,  2369,-32768,  1061,-32768,-32768,   505,-32768,  1485,-32768,
+  1755,  5946,    61,  1027,   560,-32768,-32768,   991,  1015,  1037,
+  1019,-32768,-32768,-32768,-32768,   387,-32768,   392,   983,   986,
+-32768,-32768,  1027,-32768,-32768,   466,-32768,-32768,  9429,  9601,
+   790,  7312,-32768,   400,  7312,-32768,-32768,-32768,  9515,  3739,
+  3739,  3739,  3739, 10960,-32768,-32768,-32768,-32768,   990, 10381,
+ 10381,  7312,   995,    50,   999,  1050,  1003,-32768,-32768,-32768,
+-32768,  9429,-32768,  6942,  7312,-32768,  9601,  9601,  7494,  9601,
+  9601,  9601,  9601,  9601,  9601,  9601,  9601,  9601,  9601,  9601,
+  9601,  9601,  9601,  9601,  9601,  9601,  9601,  9601,-32768,  9601,
+-32768,-32768,-32768,-32768,-32768,  9601,  9601,-32768,-32768,  4867,
+   796,   610,  8194,-32768,-32768,-32768,  1065,  1224,  1112,   448,
+   502,   520,  1832,   402,-32768,  1177,  1177,-32768,  2598,  1012,
+  1031,  1080,-32768,-32768,   575,  8884,   956,-32768,   711,   274,
+-32768,-32768,  9601,-32768,-32768,-32768,-32768,-32768,   562,   555,
+-32768,-32768,   181,-32768,  4520,  2080,-32768,  1067,  1070,-32768,
+-32768,  1697,   932,-32768,  7926,  8017,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   141,-32768,  1049,  1039,   685,  3160,  1093,
+  9429,-32768,  1091,-32768,-32768,  1972,  1328,  1116,   481,  1092,
+  1096,-32768,-32768,  2423, 10740,  2423,  2100,   798,  4579,-32768,
+  1102,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1046,
+-32768,  1097,-32768,-32768,   412,-32768,-32768,-32768,-32768,    97,
+   362,  1106,  1050,-32768,-32768,-32768,-32768,  6848, 10960,-32768,
+   934,  1062, 10915,-32768,-32768,  1063,-32768,  1066,   624,  2989,
+  1072,-32768,   154,  5663,  1109,  1111,   577,-32768,-32768,-32768,
+  3139,  3139,-32768,  3884,-32768,  1119,-32768,-32768,  1073,   131,
+-32768,  2369,-32768,-32768,   560,-32768,   549,   665,-32768,  1095,
+-32768,   670,  1133,-32768,-32768,   376,-32768,-32768,  1770,-32768,
+   635,   785,-32768,  9601, 10613,-32768, 10613,   365,   365,   343,
+   630,  3533,  5783,  8262,-32768,   191,   365,  1131,   560,  8332,
+-32768,   131,  4646,  9429,  9429,-32768,  9429,   131,  4646,-32768,
+-32768,-32768,-32768,-32768,-32768,   526,   526,   526,   181,  1086,
 1089,  9865,  1080,  1098,  1099,  1100,  1125,  3672,  1134,  1142,
+  1146,-32768,  1114,-32768,-32768,  1115,-32768,-32768,  1163,   422,
+   547,   325,    85,  9601,  1164,-32768,  1173,  1127, 10960, 10960,
+-32768,-32768,  1175,  4072,  3326,  5005,  3563,  5041,  4438,  2541,
+  3040,  3040,  3040,  2262,  2262,  1391,  1391,   146,   146,   146,
+-32768,-32768,  1136,  1137,  1130,  9601,  9515,-32768,   796,-32768,
+  7403,  9601,-32768,-32768,-32768,  9601,-32768,-32768,  1148, 10295,
+  1143,  1178,  1198,  1226,-32768,  9601,-32768,  9601,-32768,  9601,
+  1792,-32768,  1792,-32768,   103,  1166,  1168,-32768,  1171,  3739,
+   131,-32768,   131,  2092,-32768,  4646,  1172,  9068,  9068,  6252,
+  1176,  9687,  1183,  2753,  1575,   861,  1186,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,  9601,  1697,  1197,  1070,-32768, 10960,
+-32768, 10960,  1438,  1202,  9951,-32768,  1204,  1255,-32768,   181,
+-32768,-32768,-32768,-32768,-32768,  1207,  4962,-32768,  3739,  9429,
+  1346,  1346,  4301,-32768,-32768,-32768,-32768,  2691,-32768,-32768,
+-32768,   993,  9601,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   412,-32768,   648,-32768,   680,   663,  9601,  1227,-32768,
+   637,   644,   667,  1050,-32768,    93,-32768,   117,-32768,-32768,
+-32768,-32768,-32768,-32768,  8976,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  1111,  1252,-32768,-32768,-32768,  3739,-32768,-32768,
+-32768,  1253,-32768,  9515,-32768,-32768,-32768,-32768,   875,-32768,
 4646, 10960,-32768,  1199,-32768,   560,   560,-32768,-32768,-32768,
+-32768,-32768,  4646,   523,   898,  9601,  1061,-32768,  1263,-32768,
+-32768,-32768,   197,   225,  1021,   402,   333,   365,  1267,-32768,
+   462,-32768,-32768,-32768,   560,-32768,-32768,  8402,-32768,  1222,
+   181,   181,   181,-32768,  1229,   131,  4646,   131,  4646,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1241,  1242,
+  1245,  1250,  1046,-32768, 10848,  7403,  7036,  1231,-32768,  9601,
+-32768,-32768,-32768,  1239,  1246,  1248,  3739,-32768,-32768,  1249,
+   361,   768,   768,  1257,   768,-32768,-32768, 10295,  1350,  9429,
+-32768,  1266,  1280,  1281,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   131,  1282,-32768,  1260,-32768,-32768,  2901,-32768,
+-32768,-32768,-32768,-32768, 10960,-32768,-32768,  1283,-32768,-32768,
+   210,  1286,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1374,
+  1374,  1710,  1710,  4301,-32768,  2691,-32768,  1851, 10982,-32768,
+-32768,-32768,  1287,-32768,   362,-32768,  9601,-32768,  9601,-32768,
+  9601,-32768,  1697,-32768,-32768,  6460,  1342,-32768,  7127,-32768,
+  9160,  9160,  6572,   285,  1289,   373,-32768,  7403,  7218,-32768,
+-32768,   268,  7403,-32768,  1290,  1291,  1755,-32768,-32768,-32768,
+   131,  1296,-32768,  1343,  1343,   131,  1304,  9601,  9601, 10826,
+   560,  3996,   560,   560,   921,   560,  4123,  1343,-32768,-32768,
+-32768,  1365,-32768,-32768,-32768,  1312,-32768,  1317,  9601,  9601,
+  9601,  9601,  7403,-32768,  1367,-32768,-32768, 10960,-32768,-32768,
+-32768,   496,  1248,-32768,-32768,-32768,-32768,-32768,-32768,  1321,
+-32768,  1380,   181,-32768,-32768,-32768,   131,-32768,-32768,-32768,
+-32768,-32768,-32768,  9601,-32768,-32768,  1374,  1374,-32768,  1851,
+-32768,-32768,  1325,  1327,  1330,  1352,-32768,   923,   275,  1387,
+   980,  1038,-32768,-32768,-32768,-32768,-32768,  9601,  1396,  1399,
+  1401,  9252,   237,  1697,   421,   636,-32768,-32768,  9343,  1454,
+-32768,-32768,-32768,  1409,-32768,  4396, 10681, 10795,  6350,-32768,
+-32768,  1461,-32768,-32768,-32768,  8495,-32768,-32768,  1372,   614,
+-32768,-32768,-32768,-32768,  3739,-32768,-32768,  7403,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768, 10826, 10826,-32768,
+  1343,   651,  1048,  9601,-32768,-32768,-32768,  1061,  1061,  1343,
+  1343,   387,  1343,-32768,-32768,  6089,   131,   131,-32768,-32768,
+  1376,  1377,  1379,  1383,-32768,  7403,  9601,-32768,   496,-32768,
+-32768,-32768,-32768,   131,  1388,-32768,-32768,-32768,-32768,  1352,
+-32768,  1697,-32768,-32768,-32768,-32768,-32768,-32768,   682,   682,
+  1050,  1404,  1410,  5995,-32768,-32768,-32768,-32768,  1442,  9601,
+  1444,  1441,  1458,  1840,  1872,-32768,  1050,-32768,-32768,  1422,
+-32768,-32768,  1061,   927,-32768,   954,  1061, 10037,   987,   289,
+-32768,-32768,-32768,-32768,-32768,-32768,   397,-32768,-32768,   131,
+   131,-32768,-32768,-32768,  9601,  9601, 10826,   560,   560,-32768,
+-32768,-32768,-32768,  8108,-32768,-32768,-32768,-32768,   131,   131,
+-32768,-32768,-32768,-32768,-32768,  1405,-32768,-32768,-32768,  1424,
+-32768,-32768,-32768,  9515,-32768,-32768,-32768,  1501,  8791,  6757,
+  9515,  9601,-32768,  8603,-32768,  1460,-32768,-32768,  1467,-32768,
+  1458,  1840,-32768,-32768,   781,-32768,-32768, 10467, 10467,  7585,
+-32768,-32768,  1050,-32768,-32768, 10826, 10826,-32768,  1343,  1343,
 1415, 10870,  1430,-32768,-32768,-32768,  5586,-32768,-32768,  1420,
+   252,  4520,  1050,  8697,-32768,-32768,    93,-32768,-32768,  1471,
 1427, 10938,  8603,-32768,-32768,-32768,-32768,  1352,    89,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,   509,   412,  1431,
+  1432,  1050,-32768,  1061,-32768,-32768,-32768,-32768,   705,-32768,
+  7676,-32768,-32768,-32768,-32768,  1352,  1527,  1486,   170,-32768,
+-32768,-32768,-32768,   560,    93,-32768,  9601,  1487,-32768,  1488,
+-32768,  1050,  8603,  1452,   753,  1493,-32768,-32768,-32768,   145,
+-32768,  1489,-32768,  1446,-32768,-32768,-32768,-32768,  9601,  1527,
+  1495,  1527,-32768,-32768,-32768,  7767,  1457,   787,-32768,-32768,
+  7403,  1459,-32768,  1557,  1511,-32768,-32768,-32768,   295,-32768,
+  8697,  1561,  1513,-32768,-32768,-32768,  1576,  1577,-32768
 };
 
 static const short yypgoto[] = {-32768,
-  1541,-32768,  -322,  1382,  -386,    58,     0,  1540,-32768,  1512,
--32768,-32768,   113,-32768,   253,-32768,   287,-32768,   159,   901,
-    33,    19,-32768,-32768,  -611,-32768,-32768,   627,    59,  1402,
-  1147,  1408,  -690,    51,  -164,    10,     1,-32768,-32768,-32768,
--32768,-32768,   806,-32768,-32768,-32768,-32768,-32768,-32768,   433,
-  1592,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  1494,  -649,  5793,   -67,  -534,  -203,    21,  1455,
-  -507,-32768,   397,-32768,   222,-32768, -1353,-32768, -1343,    -3,
--32768,  1661,   891,  -267,   370,  -520,-32768,  -828,  1473,    74,
-  1135,  3774,  1317,  -325,   -74,   -94,  1462,   -70,   434,-32768,
--32768,-32768,  -330,-32768,  -154,-32768,-32768, -1214,   -48,  -327,
-  3104,    52,   424,  -150,    28,    86,  -200,    -4,   -28,  -163,
-  -157,     7,   -35,  -103,-32768,  -359,-32768,-32768,-32768,-32768,
--32768,  -113,   237,    -2,-32768,   697,-32768,-32768, -1067,  -431,
-   905,-32768,-32768,-32768,-32768,-32768,   167,-32768,-32768,-32768,
--32768,-32768,   705,  -373,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,  1384,-32768,   444,   619,-32768,-32768,-32768,-32768,   589,
-  -717,-32768,-32768,-32768,-32768,-32768,-32768,   864,-32768,   431,
-   996,   726,  1050,  4767,    47,    25,  -443,  1446,  3480,  -462,
--32768,     2,-32768,  5022,  -146,   651,  -106,  4331,  1302,-32768,
-  4962,  2031,  1670,    -9,  -104,-32768,  1519,   -53,-32768,  4406,
-  2964,  -301,-32768,  1578,-32768,-32768,   347,-32768,-32768,   484,
-    82,  -419,-32768,-32768,-32768,-32768, -1336,-32768, -1222, -1362,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,   102,-32768,-32768,-32768,-32768,-32768,
-   142, -1296,-32768,-32768,   -38,-32768,-32768,-32768,-32768, -1378,
   73,-32768,    79,-32768,  -691,  -572,   669,-32768,-32768,-32768,
--32768,  -389,-32768,  -379,  -143,-32768,   988,   348,-32768,   132,
--32768,  -227
+  1586,-32768,  -336,  1421,  -382,    70,     6,  1573,-32768,  1554,
+-32768,-32768,   266,-32768,   277,-32768,   396,-32768,   195,   937,
+    52,    14,-32768,-32768,  -628,-32768,-32768,   661,    53,  1426,
+  1179,  1439,  -685,    77,  -162,    13,   139,-32768,-32768,-32768,
+-32768,-32768,   835,-32768,-32768,-32768,-32768,-32768,-32768,   456,
+  1536,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  1518,  -616,  5440,   -68,  -498,  -295,    26,  1478,
+  -508,-32768,   -43,-32768,   245,-32768, -1359,-32768, -1380,    27,
+-32768,  1476,  1201,  -274,   405,  -542,-32768,  -817,  4764,  1360,
+  1170,  3522,  1349,  -326,   -85,   -94,   105,   -71,   -27,-32768,
+-32768,-32768,  -327,-32768,  -156,-32768,-32768, -1216,    68,  -343,
+  4423,   107,  1101,  -118,    19,   102,  -200,    -4,  -138,  -160,
+  -169,    20,   -42,  -245,-32768,  -342,-32768,-32768,-32768,-32768,
+-32768,    -5,  1809,   -17,-32768,   724,-32768,-32768,  -988,  -428,
+   941,-32768,-32768,-32768,-32768,-32768,   168,-32768,-32768,-32768,
+-32768,-32768,   733,  -362,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  1416,-32768,   465,   645,-32768,-32768,-32768,-32768,-32768,
+   881,  -684,-32768,-32768,-32768,-32768,-32768,-32768,   885,-32768,
+   460,  1022,   752,  1083,  4670,    47,    25,  -441,  1474,  2689,
+  -454,-32768,    18,-32768,  5069,  -134,   156,   -82,  4079,  1334,
+-32768,  4154,  1775,  1562,   -16,  -107,-32768,  1555,   -58,-32768,
+  4257,  2711,  -195,-32768,  2673,-32768,-32768,   381,-32768,-32768,
+   516,   115,  -427,-32768,-32768,-32768,-32768, -1353,-32768, -1239,
+ -1387,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,   137,-32768,-32768,-32768,-32768,
+-32768,   176, -1300,-32768,-32768,   -54,-32768,-32768,-32768,-32768,
-1367,   116,-32768,   123,-32768,  -698,  -581,   704,-32768,-32768,
+-32768,-32768,  -383,-32768,  -376,  -175,-32768,  1675,   393,-32768,
+   232,-32768,  -226
 };
 
 
-#define        YYLAST          11048
+#define        YYLAST          11066
 
 
 static const short yytable[] = {    59,
-   415,   418,   423,    36,   475,   431,   192,   432,   680,   252,
-   178,   973,   249,   122,   433,   103,   710,   617,   681,   501,
-   627,   388,    42,   706,   678,   626,   739,   396,   757,  1086,
-    59,    57,   523,   526,    36,   956,   886,    59,   394,   395,
-   245,   695,   494,   886,   817,   294,   657,  1012,   173,  1014,
-    72,   170,   205,    42,   474,    55,  1041,   204,   393,   220,
-    42,    35,    57,   482,   437,   556,   950,   243,   856,   172,
-   387,   252,  1450,  1397,   166,  1412,   140,   144,   186,   292,
-  1509,    72,  1415,   345,   256,   345,    55,   345,    72,    58,
-  1048,   513,    35,   171,   491,  1505,  1053,   908,   595,   165,
-   167,   595,   345,   345,  1161,   595,  1510,   360,   981,    15,
-   352,   703,   353,  -411,   986,    -1,    38,   778,   744,   159,
-    58,   552,   192,   630,  1323,  1324,   815,    58,   252,  1579,
-   293,   402,   345,   138,   345,   780,   399,   549,  1344,   550,
-  1537,  -144,  -411,    -2,   513,  1519,  -411,    38,   631,   632,
-   235,   957,  1546,   579,   236,   982,    59,   404,   983,   160,
-    59,   987,  1539,   401,   988,  1534,   888,   205,   704,   291,
-   428,   173,   204,   478,   170,  1580,   186,    95,   110,   111,
-  1162,  -298,    72,    42,   480,   483,  1560,   400,    57,   779,
-   508,  -411,   172,   414,   417,   692,   802,   166,  1547,   580,
-   686,   687,   962,  1112,   816,   220,  1591,    72,   174,   440,
-  1572,    72,    55,   220,  -291,    86,   171,    94,  1568,   605,
-   186,    58,   165,   167,  1576,   217,    88,  -298,  -298,   220,
-   112,   113,     8,   506,   504,   458,   460,  1537,   971,  1006,
-  1513,  1167,  -291,  -143,  1507,   256,    58,   601,  1450,    93,
-    58,   922,   107,  1042,  1389,   137,    39,  1253,    89,  -361,
-  1119,    15,  1423,  1122,    87,   801,  -352,   600,  1314,  1007,
-   441,  1429,  1430,  1373,  1431,  -352,   359,   108,    90,   441,
-  1234,   700,   665,   974,   130,   131,   727,    39,   243,  1544,
-    40,  1168,  -361,   208,   935,   216,  -361,   447,   627,   592,
-   923,   232,  1043,   442,  1148,  1149,  1254,  -618,   507,   960,
-   961,  1373,   442,   455,   448,   415,   418,  1315,  1190,   109,
-   345,    40,  1374,  1134,   742,  1017,   886,   660,  1601,  -361,
-  1195,   174,   135,   292,   680,   926,  1085,   127,   128,  1577,
-   304,   243,   504,   449,   992,   296,   390,   391,    10,   345,
-   636,   683,   256,  -618,  -618,   634,    26,   936,  1018,   456,
-  1481,   859,  1019,  1215,   737,  1217,   127,   128,  -618,   886,
-   501,   217,   743,   937,   633,   527,   528,  1602,   860,   217,
-   217,   137,   401,    21,   293,    91,  -300,    26,   502,   130,
-   131,   536,   617,   677,   537,  1020,   205,   538,    27,   315,
-   548,    72,  1357,   863,   553,    92,   635,   861,   208,   217,
-   359,   886,   594,   864,   438,   157,   668,   981,   130,   131,
-  1522,  1523,   579,   291,   771,    59,   859,   865,  1087,   909,
-    32,  1137,  -300,  -300,   503,   220,   173,   218,   219,   697,
-    58,   216,   507,   860,   679,   480,   483,  -294,   745,   481,
-   216,   720,  1114,   480,     8,     9,   175,   172,   217,   296,
-   390,   391,    10,   158,   982,   483,   152,   983,   580,  -821,
-  1250,  1251,   861,  1356,   183,   -52,    72,   179,   220,   138,
-   -52,   171,   370,   676,   483,    89,   622,    59,   371,  1041,
-   184,   -52,   768,  -141,   211,   212,   791,    21,   359,   139,
-    14,    18,   679,   362,   366,    90,   130,   131,   731,   732,
-    26,   217,    27,   315,   345,    58,   549,   345,   550,   773,
-   345,  -362,    20,    15,   345,   807,   807,   807,   807,  1446,
-   959,    23,   623,   605,    95,   110,   111,   345,    72,   798,
-   238,   676,   792,   772,    32,   757,   680,   345,   240,   765,
-   345,   592,   665,  1160,  -362,   605,   681,   874,  -362,   932,
-   577,   578,   678,  1196,   296,   390,   391,    10,   217,   886,
-   138,   931,   373,   627,   876,    88,  -578,    58,   626,   801,
-   152,   152,   152,   496,   356,   292,   911,   112,   113,   114,
-    91,  -362,    90,  -120,  1061,    15,   174,   295,   886,   374,
-   358,   801,    21,   875,   677,  1002,   513,  1004,   368,   247,
-    92,   720,  1008,   536,   537,     8,     9,    27,   315,    92,
-   877,   256,  -578,   185,   152,   943,  -120,   948,   949,   497,
-  -120,  1001,   372,   556,   218,   434,   293,   208,   216,   789,
-   217,   217,  1223,  1225,   375,  -118,    91,    15,   217,    32,
-  1239,   376,   880,   882,   388,   679,   345,   122,   377,   129,
-   217,  -578,   679,  -120,   137,  1046,    92,   130,   131,    26,
-   205,   949,  1392,   397,   243,   291,   630,  -291,  -118,   217,
-   894,   929,  -118,   154,   878,   790,     7,   127,   128,    10,
-   971,   972,    13,   420,   676,   127,   128,   771,    -7,   771,
-   996,   676,   185,   438,  1021,   771,   771,  -578,   470,   421,
-   481,   216,  1154,   480,   438,  -118,  1395,  -613,   481,   677,
-  1156,   543,   757,  1027,    21,  1133,   895,   896,   137,  1158,
-   879,   438,  1015,  1016,  1452,  1225,  1555,    26,  1593,    27,
-    28,  1044,   299,   160,  1310,  1312,   997,   130,   131,  1316,
-  1022,   436,  1424,    30,   116,   117,   118,   435,  1155,   439,
-    59,   802,    59,    31,    88,   768,  1157,   768,   205,    59,
-   679,    32,  1026,  1036,   768,  1159,    33,   677,   345,   345,
-  1453,   345,  1556,   677,  1594,   963,   747,   748,  1235,  1236,
-  1354,  1238,   773,   451,   773,   452,  1150,   154,   154,   154,
-   509,   773,   217,  1049,  1050,    26,  1051,   119,   120,   676,
-   510,    72,   511,    72,   512,    91,   772,   520,  1013,   529,
-    72,   674,   765,  -142,   765,   772,   468,   469,   679,   964,
-   552,   765,   476,   477,   679,    92,    26,  1009,   965,   966,
-    89,   154,   530,   217,    91,  1210,  1211,  1212,  1197,   714,
-    58,   345,    58,   116,   747,   748,  1089,  1569,    89,    58,
-    90,  1185,  1186,  1187,    92,   531,  1376,   676,   532,    91,
-   468,   698,   216,   676,   533,   967,   252,  1377,    90,   674,
-   750,   476,   699,  1010,   807,  1418,   217,  1371,  1372,    92,
-   677,   210,   211,   212,   720,   152,   152,   152,    14,   468,
-  1475,  1192,  1193,   595,    26,   256,   119,   120,   217,   127,
-   128,   208,   641,   216,   232,    18,    89,   644,   543,   645,
-    20,   543,   647,  1444,  1425,   804,  1058,  1059,  1060,    23,
-  1206,   677,  -181,   807,   345,   648,    90,   677,   543,   476,
-  1476,   679,  1095,   880,   882,   679,   649,   137,  -181,   661,
-  -181,   543,   468,  1480,   668,   831,   216,   662,    -6,    26,
-  1456,   130,   131,   252,  1027,    90,   249,   127,   128,   802,
-   536,   537,    92,   217,   690,   863,  1473,   771,   481,   720,
-   676,   438,   679,   854,   676,   864,  1138,  1139,   679,   870,
-  1199,   693,   807,   415,   418,   733,  1201,  1202,   345,   865,
-  1199,  1204,     8,     9,  1202,   677,   715,     8,     9,   208,
-   738,   359,    15,  1026,   783,   438,   784,   677,   785,   130,
-   131,   676,   415,   418,   127,   128,   786,   676,   793,   794,
-   679,   811,   674,    15,   813,   814,   704,  -411,  1361,   674,
-    59,   816,   871,   248,   873,   768,   359,   887,   889,   891,
-   677,   359,   677,   914,   130,   131,   679,   925,   915,   130,
-   131,   924,  1456,   928,   129,  -411,  -411,   930,   679,   676,
-   127,   128,   773,   252,    26,   504,   130,   131,   248,    20,
-   807,   938,  1456,   507,  1329,  1330,   939,  1339,  1340,   952,
-  1342,    72,  -294,   345,   958,   676,   772,   378,   379,   380,
-   441,   679,   765,   679,   127,   128,   680,   676,   127,  1341,
-  -820,  1552,   154,   154,   154,   994,  1530,   998,  1242,   978,
-    26,   979,   130,   131,  -574,   999,   980,  -574,  1003,   985,
-    58,  1403,  1005,  1408,  1045,   508,   514,   677,  1405,   771,
-   676,  1456,   676,   972,   127,   128,   515,   674,    26,   706,
-   382,   383,   359,  1062,    26,  1063,   130,   131,  1595,  1297,
-   130,   131,   891,  1289,  1064,  1065,   720,   211,   212,  1240,
-   514,   232,   802,    14,  -574,  1066,  -574,  -574,  1067,  -574,
-   515,  1068,  1069,  1070,   507,  1071,  1256,  1257,   679,  1072,
-  -574,  1296,  -574,  -140,    26,    20,   130,   131,  1074,  1077,
-  1075,  1078,    59,  1079,    23,   674,  1080,   768,  -574,  -574,
-    72,   674,  1081,  1421,  1422,  1256,  1257,   679,  1094,  1098,
-  1096,  1288,   335,  -574,   335,  1097,   335,   676,   116,   747,
-   748,  1099,   749,  1105,   773,    95,    96,    97,  1106,   221,
-   222,   223,   536,   537,  1107,  1132,  1402,  1125,  1402,    58,
-  1115,   438,   438,    72,  1113,   750,   676,  1116,   772,  1118,
-  1128,  1092,   751,    18,   765,  1131,  1153,  1176,   224,  1182,
-  1200,   335,  1205,   335,    15,  1209,  1213,  1229,  -411,    26,
-   438,   119,   120,  1297,  1218,  1219,    26,  1220,    98,    99,
-   225,   205,    58,  1297,  1221,   543,  1226,  1289,  1228,   513,
-  1297,  1427,  1428,  1230,  1289,  1233,  -411,  -411,  1241,   807,
-  1237,  -411,  1487,  1488,  1489,  1296,     8,     9,   674,  1518,
-    12,    13,   674,  1243,  1244,  1296,    14,    95,    96,    97,
-   415,   418,  1296,  1249,    72,   226,   227,   228,  1245,   712,
-    16,  1248,    17,  1252,    72,  1288,   718,  1255,    20,  1260,
-  1161,    72,  1309,  1318,  1319,  1288,   581,    23,  1322,   674,
-   448,   548,  1288,  1549,  1326,   674,    26,  -655,   130,   131,
-   478,  1520,  1521,    58,  1348,   152,  1349,  1355,    26,  -300,
-    98,    99,   100,    58,   574,   575,   576,   577,   578,  1359,
-    58,  1360,  1365,  1366,  -300,   582,   583,  1367,  -300,  1183,
-   584,   585,   586,   587,  1368,   857,  1398,   674,  1375,  1384,
-   799,  1385,  1386,  1400,  -300,  1413,  1459,   152,    95,   110,
-   111,  1464,   221,   222,   223,  1460,  -300,  -300,  1416,  -300,
-  1440,  -300,  1466,   674,   438,   438,  1441,   438,   438,  1571,
-   438,  1442,   378,   379,   380,   674,    18,  1443,  1500,  1448,
-   534,   224,  1533,  1297,  1297,  1500,   371,  1289,  1297,  1467,
-  -300,  -300,  1289,   217,  1474,    95,   110,   111,   498,  1495,
-   852,   112,   113,  1496,   345,  -300,   853,  1504,   674,  1514,
-   674,  1515,  1524,  1526,  1532,  1296,  1296,   381,   335,  1541,
-  1296,   677,  1542,  1550,   151,   382,   383,  1553,  1297,   293,
-  1563,  1551,  1289,    21,    72,    72,   293,  1297,  1567,    72,
-  1574,  1289,  1575,   906,  1578,  1288,  1288,  1581,   112,   113,
-  1288,  1583,  1584,   731,   732,  1588,  1592,  1597,  1596,  1599,
-  1296,  1604,   208,   216,  1605,  1500,  1607,  1608,   291,  1296,
-     1,     5,   679,    58,    58,   291,   156,   430,    58,    72,
-   536,   537,  1471,     7,     8,   246,    10,  1297,    72,   927,
-  1288,  1289,  1135,   438,   438,   674,   429,   543,   427,  1288,
-   116,   117,   118,   152,   152,   152,   696,  1548,  1037,   127,
-   128,   676,   709,   713,    13,  1261,   293,   355,    58,  1296,
-   713,    21,   154,   405,   674,  1297,  1603,    58,   247,  1289,
-  1455,  1358,   152,   152,   152,   101,    27,    28,    72,   416,
-   419,   519,   977,   115,  1350,  1351,  1352,  1353,  1127,  1288,
-   490,  1126,   605,   119,   120,   291,  1188,  1296,  1320,    26,
-   248,   130,   131,  1207,   154,  1343,  1039,   917,    32,   858,
-  1124,   471,   386,   602,  1411,   606,    72,    58,  1306,  1570,
-  1582,  1587,   151,   335,   713,   607,   229,  1288,  1545,  1589,
-  1175,  1417,   438,   438,   438,   608,   217,     0,   609,   610,
-    95,   110,   111,     0,   650,   651,   652,  1388,     0,     0,
-     0,  1023,  1024,     9,    10,    58,   335,     0,   709,     0,
-     0,   828,   829,     0,   833,   834,   835,   836,   837,   838,
-   839,   840,   841,   842,   843,   844,   845,   846,   847,   848,
-   849,   850,   851,     0,   713,   384,     0,     0,     0,    21,
-   713,   438,   438,   112,   113,     0,     0,  1000,    95,   409,
-   410,     0,    26,     0,    27,    28,     0,   411,  1191,     0,
-  1025,     0,     0,     0,     0,  1082,  1083,     0,   189,   254,
-   713,  1088,  1445,     0,     0,     0,     0,   713,   190,     0,
-     0,     0,     0,     0,     0,  1100,    32,  1101,  1047,  1102,
-     0,   191,     0,   254,  1052,     0,     0,     0,     0,   919,
-   921,    98,   113,     0,     0,  1465,   545,     0,     0,   438,
-   154,   154,   154,     0,     0,   335,     0,     7,     8,     9,
-    10,     0,   254,    13,     0,   596,     0,   296,   390,   391,
-    10,   254,   597,     0,  1130,     0,   611,   611,   611,   154,
-   154,   154,     0,     0,   486,   488,     0,   624,     8,     9,
-    10,     0,    95,    96,    97,    21,     0,     0,   499,     0,
-   152,   605,   709,     0,     0,    21,     0,     0,    26,  1498,
-    27,    28,   598,     0,     0,   831,  1498,  1151,    26,     0,
-    27,   315,   304,   625,   940,    21,     0,     0,   254,     0,
-     0,     0,     0,     0,   941,   543,     0,  1108,    26,  1109,
-   130,   131,    32,     0,   608,    98,    99,   942,   610,    95,
-    96,    97,   599,     0,     7,     8,     9,    10,  1011,     0,
-     0,     0,   254,     0,     0,     0,     0,     0,   535,     0,
-   152,   152,   152,     0,     0,     0,     0,   335,   335,   674,
-   335,   614,   618,   621,   416,   419,     0,   254,     0,     0,
-     0,     0,    21,     0,   359,   713,  1498,     0,     0,    95,
-   110,   111,    98,    99,     0,    26,     0,    27,    28,     0,
-   643,   188,  1573,     7,   127,   128,    10,  1073,     0,   653,
-     0,   189,     0,     0,   116,   747,   748,   296,     8,     9,
-    10,   190,   643,     0,  1586,    95,   110,   111,     0,    32,
-     0,   831,     0,   545,   191,     0,   545,     0,     0,   713,
-   713,    21,   112,   113,   709,   713,     0,     0,   247,     0,
-     0,     0,   416,   812,     0,    21,    27,    28,     0,   713,
-     0,   713,   247,   713,     0,     0,   545,   119,   120,   254,
-    27,   315,     0,     0,     0,     0,     0,     0,   112,  1468,
-   248,     0,     0,     0,    80,     0,     0,     0,    32,     0,
-     0,  1214,     0,  1216,   104,  1262,     0,  1263,  1123,  1264,
-     0,     0,    32,     0,   133,     0,     0,   154,   713,     0,
-   142,   142,     0,   142,     0,    80,     0,     7,     8,     9,
-    10,     0,    80,   335,     0,     0,   254,   902,   611,   611,
-   746,   611,     0,     0,     0,   199,  1147,    80,   901,     0,
-     0,     0,     0,     0,     0,   233,     0,     0,  1247,     0,
-     0,   713,   104,     0,     0,    21,     0,     0,     0,   711,
-     0,     0,   247,   258,   104,     0,   711,     0,   713,     0,
-    27,    28,     0,     0,     0,     0,     0,   154,   154,   154,
-     0,     0,     0,    95,   110,   111,   104,     0,     0,     0,
-     0,     0,     0,  1364,   248,   824,   611,     0,   611,   611,
-     0,   611,    32,     0,     0,     0,     0,     0,   254,  1198,
-   296,     8,     9,    10,   133,     0,    80,     0,     0,     0,
-   142,     0,     0,   407,   142,     0,  1321,   142,   142,   142,
-   711,  1325,     0,   881,   883,   254,   112,  1470,     0,   872,
-     0,    80,   611,     0,     0,    80,     0,     0,    21,     0,
-     0,   199,    80,     0,     0,   247,     0,     0,   709,   709,
-     0,     0,  1227,    27,   315,     0,     0,     0,     0,   199,
-   199,   199,     0,     0,     0,     0,     0,     7,     8,     9,
-    10,     0,   335,  1362,     0,     0,     0,   248,     0,     0,
-   711,     0,     0,     0,     0,    32,   711,     0,   199,     0,
-     0,   945,     0,   614,   618,     0,   621,     0,   934,     0,
-     0,     0,   902,     0,   489,    21,     0,     0,     0,   951,
-     0,   605,   254,     0,   104,     0,   711,     0,    26,   611,
-    27,    28,     0,   711,     0,   142,     0,     0,   254,   713,
-     0,   713,     0,   713,   940,     0,     0,   618,     0,   824,
-     0,   709,     0,     0,   941,     0,     0,     0,     0,     0,
-   709,   709,    32,     0,   608,   709,     0,   942,   610,   479,
-   211,   212,     0,   104,   516,     0,    14,     0,     0,     0,
-  1327,  1328,     0,  1436,  1437,   296,   127,   128,    10,     0,
-     0,     0,     0,    18,     0,     0,     0,     0,    20,     0,
-  1447,     0,   611,     0,   611,     0,   709,    23,     0,   416,
-   812,     0,     0,     0,     0,   611,     0,     0,   104,   901,
-   901,   901,   603,    21,   516,   516,   619,     0,     0,     0,
-   247,     0,     0,     0,   618,    80,     0,   713,    27,   315,
-     0,     0,     0,     0,     0,     7,     8,     9,    10,     0,
-     0,   242,     0,   151,     0,     0,  1483,  1484,     0,     0,
-     0,  1383,   611,   611,   611,     0,     0,     0,     0,   133,
-    32,     0,     0,     0,     0,  1493,  1494,     0,   104,     0,
-   199,   104,     0,    21,     0,     0,     0,     0,     0,   605,
-     0,     0,     0,     0,   142,  1173,    26,   142,    27,    28,
-     0,   709,   142,     0,     0,     0,   901,  1103,     0,  1104,
-    80,   711,   940,     0,     0,     0,     0,  1426,     0,     0,
-  1110,     0,   941,     0,   881,   883,     0,     0,     0,     0,
-    32,     0,   608,     0,     0,   942,   610,     0,   199,   709,
-   199,     0,   199,   199,   199,   210,   211,   212,   199,   127,
-   128,     0,    14,   199,     8,     9,   199,   163,    12,    13,
-     0,     0,   717,   653,    14,   711,   711,   881,   883,    18,
-     0,   711,    80,     0,    20,     0,   934,     0,    16,     0,
-    17,    18,     0,    23,     0,   711,    20,   711,     0,   711,
-     0,   713,   605,     0,     0,    23,     0,   605,   684,    26,
-     0,   130,   131,     0,    26,     0,   130,   131,  1485,  1486,
-   104,   104,   104,   104,     0,   606,     0,  1491,     0,     0,
-   606,     0,   254,     0,   254,   607,     0,     0,     0,     0,
-   607,     0,     0,     0,   711,   608,     0,     0,   609,   610,
-   608,     0,     0,   609,   610,  1511,     0,     0,     0,     0,
-     0,     0,   416,   419,   127,   128,     0,     0,     0,   242,
-   611,   611,   611,   611,   611,     0,   254,     0,   611,     0,
-   104,     0,   516,     0,     0,     0,     0,   711,     0,     0,
-     0,   416,  1308,     0,   603,     0,   516,   516,     0,   619,
-     0,   901,   901,   901,   711,     0,   903,   605,     0,     0,
-   905,     0,     0,     0,    26,     0,   130,   131,   572,   573,
-   574,   575,   576,   577,   578,   199,  1224,     0,     0,     0,
-   606,   570,   571,   572,   573,   574,   575,   576,   577,   578,
-   607,     0,     7,     8,     9,    10,     0,     0,    13,   133,
-   608,     0,     0,   609,   610,     0,   133,     0,     0,     0,
-     0,     0,     0,   254,   199,   947,   199,   199,   233,   619,
-     0,     0,     0,     0,     0,  1103,  1104,   881,   883,     0,
-    21,     0,     0,  1110,   709,     0,   605,     0,   611,   611,
-     0,   611,     0,    26,     0,    27,    28,   296,     8,     9,
-    10,     0,     0,     0,     0,     0,   881,   883,     0,  1140,
-   199,     0,  1266,     0,   947,   127,   128,     0,  1224,  1141,
-   504,   199,   199,     0,   199,     0,     0,    32,     0,   608,
-     0,     0,  1142,   610,     0,    21,     0,     0,     0,     0,
-     0,     0,   247,     0,     0,     0,   254,     0,     0,     0,
-    27,   315,   133,     0,     0,    80,     0,    80,   605,     0,
-     0,     0,  1034,    80,    80,    26,     0,   130,   131,     0,
-     0,     0,   104,   254,   507,   711,     0,   711,   104,   711,
-     0,   606,    32,     0,     0,   516,   516,   516,     0,     0,
-     0,   607,     0,  1103,  1104,     0,  1110,   516,     0,     0,
-     0,   608,     0,     0,   609,   610,     0,     0,     0,     0,
-     0,   162,     0,     7,     8,     9,    10,   163,    12,    13,
-     0,     0,     0,     0,    14,     0,     0,     0,  1173,     0,
-     0,     0,   254,  1390,  1391,     0,     0,     0,    16,     0,
-    17,    18,    19,     0,     0,     0,    20,     0,     0,     0,
-     0,    21,     8,     9,     0,    23,    12,    13,   164,     0,
-     0,     0,    14,     0,    26,     0,    27,    28,     0,     0,
-   516,     0,   516,   711,     0,     0,    16,     0,    17,   104,
-    30,     0,     0,   516,    20,   104,     0,   903,   903,   903,
-    31,     0,     0,    23,  1117,     0,     0,     0,    32,   416,
-  1308,     0,    26,    33,   130,   131,   588,     0,    34,     0,
-     8,     9,     0,     0,    12,   242,     0,     0,     0,     0,
-    14,     0,  1451,     0,     0,     0,   104,    83,   104,     0,
-   199,   199,  1144,     0,    16,     0,    17,   106,     0,     0,
-     0,   589,    20,     0,  1469,  1472,   126,   134,   210,   211,
-   212,    23,     0,   143,   143,    14,   143,     0,    83,     0,
-    26,     0,   130,   131,     0,    83,     0,     0,     0,     0,
-     0,     0,    18,     0,  1144,     0,     0,    20,   143,     0,
-    83,     0,     0,     0,     0,     0,    23,   104,   234,     0,
-     0,     0,     0,     0,     0,   244,     0,     0,     0,     0,
-   104,   912,     0,  1034,     0,     0,     0,   244,     0,     0,
-     0,     0,   104,     0,     0,     7,     8,     9,    10,   163,
-    12,    13,  1516,     0,     0,  1203,    14,   711,     0,     0,
-     0,     0,     0,     0,     0,    80,     0,     0,     0,     0,
-    16,     0,    17,    18,    19,   104,     0,   104,    20,     0,
-     0,     0,     0,    21,     0,     0,     0,    23,     0,    83,
-   164,     0,     0,   143,     0,     0,    26,   143,    27,    28,
-   143,   143,   143,     0,     0,   104,     0,     0,     0,     0,
-   516,   516,    30,   516,    83,     0,     0,     0,    83,     0,
-     0,     0,    31,     0,   143,    83,     0,     0,     0,     0,
-    32,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-    34,     0,   143,   143,   143,     0,     8,     9,     0,   163,
-    12,    13,     0,     0,   717,     0,    14,     0,   199,   199,
-   199,   199,  1144,     0,     0,     0,   199,     0,     0,     0,
-    16,   143,    17,    18,     0,     0,     0,     0,    20,     0,
-     0,     0,     0,     0,     0,     0,     0,    23,     0,  1144,
-  1144,  1144,     0,     0,     0,     0,    26,     0,   130,   131,
-   365,   367,     0,     0,     7,   127,   128,    10,   143,     6,
-   242,     7,     8,     9,    10,    11,    12,    13,     0,     0,
-   199,     0,    14,     0,     0,   142,     0,    80,     0,     0,
-     0,     0,     0,     0,     0,    15,    16,     0,    17,    18,
-    19,     0,    21,     0,    20,     0,   244,   143,     0,    21,
-     0,     0,    22,    23,    24,    26,    25,    27,    28,     0,
-     0,     0,    26,     0,    27,    28,     0,     0,    29,     0,
-     0,    30,     0,     0,     0,     0,   199,   199,    30,   199,
-     0,    31,     0,     0,     0,     0,     0,     0,    31,    32,
-     0,   244,     0,     0,    33,   604,    32,   143,   143,   620,
-     0,    33,     0,     0,   629,     0,    34,     0,    83,     0,
-     0,     0,     0,     0,     0,   199,   947,   199,   564,   565,
-   566,   567,   568,   569,   570,   571,   572,   573,   574,   575,
-   576,   577,   578,   760,   104,     7,     8,   761,    10,   163,
-    12,    13,   666,     0,     0,     0,    14,     0,     0,     0,
-     0,   244,     0,   143,   244,     0,     0,     0,     0,     0,
-    16,     0,    17,    18,    19,     0,     0,   143,    20,  -521,
-   143,     0,     0,    21,     0,   143,     0,    23,   762,     0,
-   164,     0,     0,    83,     0,     0,    26,     0,    27,    28,
-     0,     0,   763,     0,   764,     0,     0,     7,   127,   128,
-    10,     0,    30,    13,     7,     8,     9,    10,     0,     0,
-    13,   143,    31,   143,     0,   143,   143,   143,   547,     0,
-    32,   143,     0,     0,     0,    33,   143,  1144,     0,   143,
-     0,     0,     0,     0,     0,    21,     0,     0,     0,     0,
-     0,  -521,    21,     0,   759,    83,     0,     0,    26,     0,
-    27,    28,     0,     0,     0,    26,     0,    27,    28,     0,
-     0,     0,     0,     0,   147,     0,     0,     0,     0,     0,
-     0,   189,     0,     0,   148,     0,     0,     0,     0,     0,
-     0,   190,    32,   244,   244,   244,   244,   149,     0,    32,
-     0,   673,     0,     0,   191,     0,     0,  1144,  1144,  1144,
-     7,     8,     9,    10,   163,    12,    13,     0,     0,   717,
-     0,    14,     7,     8,     9,    10,   104,     0,   504,     0,
-     0,   199,     0,     0,     0,    16,     0,    17,    18,     0,
-     0,     0,     0,    20,     0,     0,     0,     0,    21,     0,
-     0,     0,    23,   244,   605,   143,     0,     0,     0,   719,
-    21,    26,     0,    27,    28,     0,   605,     0,     0,   143,
-   143,     0,   620,    26,     0,    27,    28,  1140,     0,   904,
-     0,     0,     0,     0,     0,     0,     0,  1141,     0,   940,
-     0,     0,   629,     0,     0,    32,     0,   608,   143,   941,
-  1142,   610,     0,     0,     0,     0,     0,    32,     0,   608,
-     0,     0,   942,   610,     0,     0,     0,     0,     0,     0,
-     0,     0,   666,     0,     0,   800,     0,     0,   803,     0,
-   126,     0,   805,   806,   808,   809,   810,   143,   620,   143,
-   143,   234,   620,     0,     0,   547,   567,   568,   569,   570,
-   571,   572,   573,   574,   575,   576,   577,   578,   827,     0,
-     0,     0,     0,     0,   759,     0,     0,     0,   459,   461,
-   465,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   143,     0,     0,     0,   620,     0,     0,
-     0,     0,     0,     0,   143,   143,     0,   143,     0,     0,
-     8,     9,     0,     0,    12,   242,     0,     0,     0,     0,
-    14,     0,   884,     0,     0,     0,     0,     0,     0,   884,
-     0,     0,     0,     0,    16,   134,    17,     0,    83,     0,
-    83,     0,    20,     0,     0,  1035,    83,    83,     0,     0,
-     0,    23,     0,   605,     0,   244,     0,     0,     0,     0,
-    26,   244,   130,   131,     0,     0,     0,     0,   143,   143,
-   143,     0,     0,     0,     0,     0,   606,     0,     0,     0,
-   143,     0,     0,     0,     0,     0,   607,    51,     0,     0,
-     0,     0,     0,     0,     0,     0,   608,     0,     0,   609,
-   610,     0,     0,     0,     0,     0,  -383,     8,     9,  -383,
-  -383,    12,   242,    51,    51,     0,   150,    14,    51,     0,
-     0,     0,     0,     0,     0,    51,     0,     0,     0,     0,
-     0,    16,     0,    17,  -383,     0,     0,   673,    51,    20,
-    51,     0,     0,     0,  -383,     0,     0,     0,    23,     0,
-   605,     0,     0,   143,     0,   143,     0,    26,     0,   130,
-   131,     0,   244,   250,     0,     0,   143,     0,   244,     0,
-   904,   904,   904,   606,     0,     0,     0,   629,     0,     0,
-     0,     0,     0,   607,     0,     0,     0,     0,     0,     0,
-     0,  -383,     0,   608,     0,   719,   609,   610,     0,     0,
-     0,   719,     0,     0,     0,     0,     0,     0,     0,   244,
-     0,   244,     0,   143,   143,   620,   392,   392,     0,    51,
-     0,     0,     0,    51,     0,   250,     0,    51,     0,     0,
-   150,   150,   150,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,    51,     0,     0,   729,    51,   730,
-     0,   459,   461,   465,    51,    51,     0,   904,     0,     0,
-     0,     0,   741,     0,     0,     0,     0,     0,     0,  1084,
-   244,     0,    51,    51,   150,     0,     0,     0,     0,     0,
-     0,   759,   250,   244,   127,   128,  1035,     0,   211,   212,
-     0,     0,     0,     0,    14,   244,     0,     0,     0,     0,
-     0,    51,   827,     0,     0,     0,     0,     0,   719,     0,
-     0,     0,   884,     0,     0,     0,    20,     0,    83,     0,
-     0,     0,     0,     0,     0,    23,     0,   605,   244,     0,
-   244,     0,     0,     0,    26,     0,   130,   131,    51,     0,
-     0,     0,     0,    18,     0,     0,     0,     0,     0,   673,
-   606,  1136,     0,     0,     0,   884,     0,     0,   244,     0,
-   607,     0,     0,   143,   143,     0,   143,     0,     0,     0,
-   608,     0,     0,   616,   610,   557,   558,   559,   560,   561,
-   562,   563,   564,   565,   566,   567,   568,   569,   570,   571,
-   572,   573,   574,   575,   576,   577,   578,   884,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   544,     0,
-  1178,   143,   143,   143,   143,   620,  1184,     0,     0,   143,
-     0,     0,     0,   719,     0,   392,   759,     0,     0,     0,
-     0,     0,     0,   250,     0,   719,     0,     0,    51,     0,
-     0,     0,   904,   904,   904,     0,     0,     0,     7,     8,
-     9,    10,   210,   211,   212,     0,     0,     0,   759,    14,
-     0,     0,     0,     0,     0,     0,     0,     0,   719,     0,
-   719,     0,   392,   143,     0,     0,    18,     0,   143,     0,
-    83,    20,     0,    51,     0,     0,    21,     0,     0,     0,
-    23,     0,   605,     0,     0,     0,     0,    51,  1232,    26,
-    51,    27,    28,     0,     0,    51,     0,     0,     0,     0,
-     0,     0,     0,    51,     0,   940,     0,     0,     0,     0,
-   729,   730,     0,   741,     0,   941,     0,     0,     0,   143,
-   143,     0,   143,    32,     0,   608,     0,     0,   942,   610,
-     0,    51,     0,    51,     0,   150,   150,   150,     0,     0,
-     0,    51,     0,     0,     0,   884,    51,  1394,     0,    51,
-     0,  1032,     0,  1023,  1024,     9,    10,     0,   143,   620,
-   143,     0,     0,     0,     0,    51,     0,     0,     0,     0,
-     0,     0,     0,     0,   884,     0,     0,   244,   566,   567,
-   568,   569,   570,   571,   572,   573,   574,   575,   576,   577,
-   578,    21,     0,     0,     0,   544,     0,     0,   544,     0,
-     0,     0,     0,     0,    26,     0,    27,    28,     0,     0,
-     0,     0,  1025,   544,   544,   544,     0,     0,     0,     0,
-   189,     0,     0,     0,     0,     0,     0,     0,   544,     0,
-   190,     0,     0,     0,    78,     0,     0,     0,    32,     7,
-   127,   128,    10,   191,     6,   504,     7,     8,     9,    10,
-    11,    12,    13,     0,     0,     0,     0,    14,     0,     0,
-    78,    78,     0,    78,     0,    78,     0,     0,     0,     0,
-   904,    16,    78,    17,    18,     0,   250,    21,     0,    20,
-     0,     0,     0,     0,    21,    78,     0,    78,    23,   544,
-    26,   426,    27,    28,     0,     0,     0,    26,     0,    27,
-    28,     0,     0,    29,     0,     0,    30,     0,    51,     0,
-     0,     0,     0,    30,     0,     0,    31,  1178,     0,   459,
-   461,   465,     0,    31,    32,     0,     0,     0,     0,    33,
-     0,    32,   392,     0,     0,     0,    33,     0,   155,   392,
-   904,   904,   904,     0,     0,     0,     0,    51,    51,    51,
-    51,     0,     0,     0,     0,     0,     0,     0,     0,   244,
-   200,     0,     0,   465,   143,     0,    78,     0,     0,     0,
-    78,     0,     0,     0,    78,     0,     0,    78,    78,    78,
-     0,     0,     0,     0,     8,     9,     0,   163,    12,    13,
-     0,    78,  1032,    51,    14,    78,     0,    51,     0,     0,
-     0,    78,    78,     0,    51,    51,     0,    51,    16,     0,
-    17,    18,     0,     0,     0,     0,    20,     0,     0,    78,
-    78,    78,     0,     0,     0,   667,     0,     0,   164,     0,
-     0,     0,     0,     0,    26,     0,   130,   131,    51,     0,
-    51,     0,     0,     0,     0,    51,    51,    51,    78,     0,
-     0,     0,   155,   155,   155,   561,   562,   563,   564,   565,
-   566,   567,   568,   569,   570,   571,   572,   573,   574,   575,
-   576,   577,   578,     0,   544,     0,   200,     0,     0,     0,
-     0,     0,   547,     0,     0,    78,     0,     0,     0,     0,
-     0,     0,     0,     0,   200,   200,   466,     0,     0,   673,
+   423,   617,   433,   178,   475,   152,   122,   431,   252,    36,
+   432,   249,   415,   418,   680,   706,   974,    42,   388,   710,
+   501,   681,    57,   627,   626,   523,   526,   887,   739,   294,
+    59,   103,   657,   245,   887,   678,   757,    59,   394,   395,
+    36,  1088,   494,   818,   220,   695,   857,   393,    42,   951,
+    72,   396,   205,    57,   170,    42,   631,   632,   556,  1413,
+   172,   173,   491,   362,   366,   387,  1416,   243,   957,  1451,
+   252,  1506,  1398,    35,   480,   483,   140,   144,   186,   292,
+  1013,    72,  1015,   345,  1050,   345,   474,   345,    72,  1042,
+  1055,   513,  1510,   166,   167,   482,   579,   778,   440,   595,
+   256,  1511,   345,   345,    35,    58,   595,   595,   686,   687,
+    55,   165,   455,   159,   982,   352,  1538,   353,   816,   152,
+   152,   152,   192,   360,   630,  1163,  1540,   252,    -1,  1520,
+   293,   402,   345,   909,   345,   744,    58,   151,   138,   504,
+   502,    55,   580,    58,   513,   703,  -144,    -2,   171,  1535,
+  1547,    86,   781,   160,   401,  -352,    59,  -291,   456,   441,
+    59,   983,   404,   152,   984,   987,   478,   205,   889,   779,
+  1569,    94,   437,   428,  1573,  1169,   186,   170,    42,    57,
+   803,  1561,    72,   172,   173,   291,   503,   958,   154,   508,
+   220,   727,   442,   414,   417,   204,  1548,  1114,   220,   923,
+    87,  1164,   704,   692,   963,  1324,  1325,    72,  1577,   174,
+   817,    72,   988,  1538,   220,   989,   166,   167,  1592,  1345,
+   186,  -361,   737,    15,  1514,  1170,   217,  -352,   577,   578,
+   743,   441,     8,   506,   165,   458,   460,    58,   192,    95,
+   110,   111,   400,  1508,    88,  1451,   972,   601,   924,  -362,
+  1043,    15,   416,   419,  -361,   549,   600,   550,  -361,   211,
+   212,   256,    58,   496,   442,    14,    58,    55,  1254,    38,
+    91,   171,    93,  1545,   399,   975,   359,     8,     9,   700,
+    39,   543,  -362,   592,   130,   131,  -362,    20,   243,   135,
+    92,  -361,   112,   113,  1121,   151,    23,  1124,   605,  1044,
+    38,   627,   154,   154,   154,   936,   665,  1136,   507,   497,
+   204,    39,  1192,   961,   962,  1087,  1390,  1255,   887,  -362,
+   345,   927,   660,  1578,  1197,    89,  1315,   415,   418,   130,
+   131,  -298,   174,   292,  1374,   480,   483,   910,  1150,  1151,
+   680,   243,  1424,   480,   802,    90,   154,   993,  1374,   345,
+   636,  1430,  1431,  1602,  1432,   483,   742,  -120,  1216,    15,
+  1218,   887,   107,  1042,   964,   747,   748,  1018,   256,   127,
+   128,   501,   217,   401,   483,  1316,   617,  -298,  -298,   633,
+   217,   217,  1007,  1375,   293,   235,  -143,   218,   219,   236,
+  -120,    15,  -291,   677,  -120,  -411,   205,  1482,   137,    40,
+  1019,    72,  1603,   887,  1020,   127,   128,   605,   965,   714,
+   217,   668,  1008,   359,  1358,    26,   579,   966,   967,  -619,
+   220,   130,   131,   771,  -411,    59,   622,  -120,  -411,   545,
+    40,  1139,  1089,   790,   152,   152,   152,  1021,   792,   291,
+    91,   745,   697,  -300,   679,   507,   605,   108,   172,   173,
+  -579,   720,   109,   802,   968,  1116,    58,   130,   131,   217,
+    92,   635,   580,   220,   129,  -619,  -619,   683,  1235,   127,
+   128,    91,   623,  -411,    26,    89,    72,  1393,   543,   791,
+  -619,   543,   137,  -141,   793,   805,  -118,    59,    15,  -300,
+  -300,    92,   802,   634,   875,    90,  -579,   185,   543,   676,
+  1523,  1524,   679,  1063,  -294,  1251,  1252,   157,   731,   732,
+   773,   543,   217,   359,   345,   832,   158,   345,   175,  -118,
+   345,   130,   131,  -118,   345,   808,   808,   808,   808,   127,
+   128,    58,   960,   179,   504,   592,   171,   345,    72,   937,
+   876,  1447,   860,   855,   799,   248,  1162,   345,   877,   871,
+   345,   183,   138,   680,   757,   938,  -118,   676,   184,   861,
+   681,   765,   887,   210,   211,   212,   879,   416,   419,   217,
+    14,   932,   139,  1003,   678,  1005,   665,   627,   626,    26,
+  1009,   130,   131,   933,  1198,   292,  -579,    18,   862,  1357,
+    18,   887,    20,    58,   878,   514,    88,   174,   772,   304,
+    91,    23,   373,   480,   677,   515,    15,   513,  -142,   238,
+  -411,   720,   880,   127,   128,    26,   684,   154,   154,   154,
+    92,   895,    90,   997,   240,  -300,   545,   556,   295,   545,
+   768,   138,  -579,   470,  1135,   982,   293,   256,  -411,  -411,
+  -300,   217,   217,  -411,  -300,   416,   813,  1224,  1226,   217,
+   122,   388,   881,   883,  1240,   679,   345,   358,   370,   545,
+  -300,   217,   679,    26,   371,   130,   131,   896,   897,   998,
+   205,   356,  -300,  -300,   243,  -300,  1022,  -300,   630,   864,
+   217,  1010,   983,  1156,   973,   984,   930,  -822,    91,   865,
+  1158,   291,   296,   390,   391,    10,   771,  1396,   771,   368,
+   972,   372,   912,   866,   771,   771,  -300,  -300,    92,   137,
+   676,   771,  1425,  1160,     8,     9,   376,   676,   374,   677,
+   903,  -300,  1023,   377,    88,  1016,  1017,  1011,  1453,  1157,
+    21,   397,   757,   375,  1045,   447,  1159,   247,    92,  1002,
+  1226,   944,   185,   949,   950,    27,   315,   803,  -291,  1311,
+  1313,  1556,   448,   137,  1317,  1211,  1212,  1213,   359,  1161,
+    59,   420,    59,     8,     9,   421,   130,   131,   205,    59,
+   679,   127,   128,  1047,  1454,    59,   504,    32,   677,   345,
+   345,   449,   345,   773,   677,   773,  -614,   950,   127,   128,
+   248,   299,   773,    -7,  1355,   218,   434,  1557,   773,  1152,
+    95,    96,    97,   217,   221,   222,   223,   359,   435,  1051,
+  1052,    72,  1053,    72,  1580,   130,   131,   127,   128,   160,
+    72,    26,  1094,   130,   131,   676,    72,   436,    18,   679,
+  1187,  1188,  1189,   224,   765,   679,   765,   864,    26,  1028,
+   130,   131,   860,   765,   217,   439,   452,   865,  1594,   765,
+   451,    26,   345,    98,    99,   225,   543,  1091,   509,   861,
+  1581,   866,   510,  1570,     8,     9,    58,    26,    58,   130,
+   131,   772,   511,  1014,   512,    58,   252,   116,   747,   748,
+   772,    58,   520,   514,   676,   808,   772,   217,   862,  1419,
+   676,   677,   529,   515,  1595,   720,  1236,  1237,   530,  1239,
+   226,   227,   228,   768,   750,   768,   903,   531,   359,   217,
+  1027,  1037,   768,   468,   469,   152,   130,   131,   768,    95,
+    96,    97,   256,   552,   127,  1342,   532,  1445,    26,    15,
+   119,   120,   677,  -411,   808,   345,   476,   477,   677,   549,
+   507,   550,   679,   533,   881,   883,   679,  1362,   468,   698,
+   668,    89,   552,  1457,   803,   476,   699,   152,   595,  1199,
+  1185,  -411,  -411,   252,  -575,   641,   249,  -575,   359,  1474,
+    26,    90,    98,    99,   100,   217,   130,   131,   644,   771,
+   720,  1372,  1373,   679,  1201,   468,  1476,  1140,  1141,   679,
+  1203,  1204,   645,   808,  1201,  1206,   647,   676,  1204,   345,
+   507,   676,   892,   416,   813,   661,   677,   415,   418,   648,
+  1194,  1195,   476,  1477,  -575,   649,  -575,  -575,   677,  -575,
+   127,   128,   662,     7,     8,   246,    10,  1060,  1061,  1062,
+  -575,   679,  -575,    89,   211,   212,   415,   418,   676,  1208,
+    14,  1377,   690,    59,   676,   468,  1481,   151,  -575,  -575,
+    90,   -52,   677,    90,   677,  1457,   -52,   679,    92,    -6,
+   129,    21,    20,  -575,   784,   693,   773,   -52,   247,   679,
+    26,    23,   130,   131,   252,  1457,    27,    28,    95,   110,
+   111,  1028,   808,   715,   738,   733,   676,    15,   785,  1175,
+   786,    91,   787,   794,    72,   345,   795,   812,   154,  1378,
+   248,    89,   814,   679,  1553,   679,   815,   704,    32,  1426,
+   817,    92,   676,   680,   152,   152,   152,   765,   872,   874,
+  1531,    90,   888,   890,   676,  1243,   892,  1406,   916,   543,
+   915,   112,   113,   114,  1457,  1404,   508,  1409,   973,   677,
+   154,   925,   706,   152,   152,   152,   929,   926,  -181,    58,
+   931,    20,  1027,  -294,   772,   939,   959,   803,   676,   940,
+   676,  1298,  1596,   137,  -181,   953,  -181,   441,   720,   979,
+   980,  1290,  -821,   981,   995,  1351,  1352,  1353,  1354,   986,
+   127,   128,   999,  1000,  1297,    13,   768,  1004,  1257,  1258,
+   679,  1006,  1046,  1064,  1330,  1331,  1065,  1340,  1341,  1069,
+  1343,  1024,  1025,     9,    10,  1066,  1067,  1068,  1070,    95,
+   110,   111,    72,   221,   222,   223,  1071,  1257,  1258,   679,
+  1072,  1073,  1074,   605,  -140,  1076,    95,   110,   111,   498,
+    26,  1077,   130,   131,  1079,  1289,  1080,    18,  1389,    21,
+  1083,  1096,   224,  1081,  1082,   676,   606,   416,   419,   116,
+   117,   118,    26,  1098,    27,    28,   607,   335,  1193,   335,
+  1026,   335,   112,   113,    21,  1099,   608,    58,   189,   609,
+   610,  1100,  1101,  1107,   676,  1108,   416,  1309,   190,   112,
+   113,  1109,  1115,  1117,  1298,  1155,    32,   116,   117,   118,
+  1118,   191,   205,  1120,  1298,  1428,  1429,   154,   154,   154,
+   513,  1298,   119,   120,  1290,  1127,   335,  1297,   335,  1130,
+   808,  1290,  1133,  1446,  1134,  1178,  1184,  1297,  1519,   127,
+   128,  1202,  1422,  1423,  1297,  1207,   154,   154,   154,  1210,
+   378,   379,   380,  1219,  1220,    72,  1214,  1221,    26,  1227,
+   119,   120,  1222,   415,   418,    72,  1466,  1229,     7,     8,
+     9,    10,    72,  1230,    13,  1231,  1234,  1242,  1289,   378,
+   379,   380,   605,  1403,   478,  1403,  1550,  1238,  1289,    26,
+  1250,   130,   131,  1244,  1163,  1289,     7,     8,     9,    10,
+   152,    26,   242,   382,   383,   606,    21,  1245,  1246,  1249,
+    58,  1253,   605,  1256,  1261,   607,  1310,  1319,  1320,    26,
+    58,    27,    28,  1323,   381,   608,   448,    58,   609,   610,
+  1499,  1327,   382,   383,    21,   941,   832,  1499,  -656,  1349,
+   605,  1488,  1489,  1490,  1350,   942,  1361,    26,  1356,    27,
+    28,  1360,  1366,    32,  1367,   608,   543,  1368,   943,   610,
+    95,   110,   111,   941,   650,   651,   652,  1369,  1376,  1501,
+   152,   152,   152,   942,  1298,  1298,  1501,  1385,  1386,  1298,
+  1387,    32,  1399,   608,  1290,   217,   943,   610,  1401,  1290,
+   574,   575,   576,   577,   578,   345,  1414,  1297,  1297,  1417,
+  1521,  1522,  1297,  1441,  1442,   534,  1443,    95,    96,    97,
+  1444,  1554,   677,   112,   113,  1449,  1460,  1499,   674,  1298,
+   293,  1465,  1461,  1467,   371,    72,    72,   293,  1298,  1290,
+    72,  1468,  1175,  1574,  1475,  1496,  1497,  1505,  1290,  1515,
+  1516,  1525,  1297,   335,   731,   732,  1527,  1533,  1289,  1289,
+  1542,  1297,   359,  1289,  1543,  1587,  1501,  1564,  1551,  1552,
+    98,    99,   832,   679,  1579,  1568,  1575,  1576,  1572,   101,
+    72,  1582,  1584,  1585,  1589,   291,   674,   115,  1298,    72,
+    58,    58,   291,   154,  1593,    58,  1597,  1598,  1290,  1534,
+  1600,  1605,  1606,  1289,     5,  1608,  1609,   624,     8,     9,
+    10,  1297,  1289,   416,  1309,     1,   430,   293,   156,  1472,
+   429,   296,     8,     9,    10,   928,  1298,  1137,   676,   427,
+   229,    95,   409,   410,  1549,    58,  1290,  1038,   696,    72,
+  1262,   355,   304,   625,    58,    21,   405,   709,   713,  1297,
+     7,   127,   128,    10,  1456,   713,    13,  1604,    26,    21,
+   130,   131,  1289,   154,   154,   154,   247,  1359,    95,    96,
+    97,   254,   291,   519,    27,   315,  1129,    72,   978,   712,
+  1128,  1321,   490,  1190,    98,   113,   718,  1040,    21,   384,
+  1048,   527,   528,   918,    58,   254,  1344,  1126,   217,   471,
+  1289,    26,   859,    27,    28,   602,    32,   536,   386,  1412,
+   537,   411,  1307,   538,  1583,  1571,   548,    30,   335,   713,
+   553,    98,    99,  1546,   254,  1588,  1177,    31,   594,    95,
+   110,   111,    58,   254,  1590,    32,     0,  1418,     0,   674,
+    33,     0,     7,     8,     9,    10,   674,     0,    13,     0,
+   800,   335,     0,   709,     0,     0,   829,   830,     0,   834,
+   835,   836,   837,   838,   839,   840,   841,   842,   843,   844,
+   845,   846,   847,   848,   849,   850,   851,   852,     0,   713,
+    21,     0,   112,   113,     0,   713,   605,   116,   747,   748,
+   254,   749,     0,    26,     0,    27,    28,     0,   486,   488,
+     0,     0,   116,   747,   748,     0,     0,     0,    80,  1142,
+   853,     0,   499,     0,   750,   713,   854,     0,   104,  1143,
+     0,   751,   713,     0,   254,   127,   128,    32,   133,   608,
+   242,     0,  1144,   610,   142,   142,     0,   142,    26,    80,
+   119,   120,     0,     0,   920,   922,    80,     0,     0,   254,
+     0,     0,     0,   907,   674,   119,   120,     0,     0,   199,
+   335,    80,     0,     0,   296,   127,   128,    10,   605,   233,
+     0,     0,    95,   110,   111,    26,   104,   130,   131,     0,
+     0,     0,   535,     7,     8,     9,    10,   258,   104,   504,
+     0,   606,     0,     0,     0,   208,     0,   216,     0,     0,
+     0,   607,    21,   232,    95,   110,   111,   709,     0,   247,
+   104,   608,     0,   674,   609,   610,     0,    27,   315,   674,
+     0,    21,     0,     0,   643,   112,  1469,   605,     0,   536,
+   537,     0,     0,   653,    26,     0,    27,    28,   133,     0,
+    80,   254,     0,     0,   142,     0,   643,   407,   142,    32,
+   941,   142,   142,   142,   711,     0,     0,   112,  1471,     0,
+   942,   711,     0,  1012,     0,    80,     0,     0,    32,    80,
+   608,     0,     0,   943,   610,   199,    80,     0,     0,     0,
+     0,     0,     0,   335,   335,     0,   335,     0,   581,     0,
+     0,     0,     0,   199,   199,   199,     0,     0,   254,     0,
+     0,   713,     0,     0,   296,   390,   391,    10,     0,     0,
+   208,     7,     8,     9,    10,     0,   438,     0,     0,     0,
+     0,     0,   199,  1075,     0,   711,   674,   582,   583,     0,
+   674,     0,   584,   585,   586,   587,     0,     0,   489,     0,
+     0,     0,    21,   216,     0,     0,     0,     0,   104,    21,
+     0,   481,   216,     0,   746,   713,   713,    27,   315,   142,
+   709,   713,    26,     0,    27,    28,     0,   674,   188,     0,
+     0,     0,     0,   674,     0,   713,     0,   713,   189,   713,
+   254,     0,     0,     0,     0,   711,  1084,  1085,   190,    32,
+     0,   711,  1090,     0,     0,     0,    32,   104,   516,     0,
+     0,   191,     0,     0,     0,     0,  1102,   254,  1103,     0,
+  1104,     0,     0,     0,  1125,   674,   210,   211,   212,   825,
+     0,   711,     0,    14,   713,   127,   128,     0,   711,     0,
+   504,     0,     7,     8,     9,    10,   210,   211,   212,   335,
+    18,   674,   104,    14,     0,    20,   603,     0,   516,   516,
+   619,     0,  1149,   674,    23,  1132,     0,     0,     0,    80,
+    18,     0,     0,   873,     0,    20,     0,   713,   605,   913,
+    21,     0,     0,     0,    23,    26,   605,   130,   131,     0,
+     0,     0,     0,    26,   713,    27,    28,   674,     0,   674,
+     0,   606,     0,   133,   254,     0,     0,     0,  1153,   941,
+     0,   607,   104,     0,   199,   104,     0,     0,     0,   942,
+   254,   608,     0,     0,   609,   610,     0,    32,   142,   608,
+     0,   142,   943,   610,     0,  1200,   142,     0,     0,     0,
+     0,     0,   935,     0,    80,     0,     0,     0,     0,   208,
+   216,     0,   596,   952,   296,   390,   391,    10,     0,   597,
+     0,     0,     0,     0,     0,     7,   127,   128,    10,  1097,
+     0,   242,   199,     0,   199,     0,   199,   199,   199,     0,
+     0,     0,   199,   825,   674,   709,   709,   199,     0,  1228,
+   199,     0,    21,     0,     0,     0,     0,   536,   537,   598,
+     0,     0,     0,    21,     0,    26,    80,    27,   315,   335,
+     0,     0,     0,   674,     0,   438,    26,   711,    27,    28,
+     0,     0,   481,   216,     0,     0,   438,   210,   211,   212,
+   481,     0,    30,     0,    14,     0,     0,     0,     0,   599,
+     0,     0,    31,   438,   104,   104,   104,   104,     0,     0,
+    32,    18,     0,     0,     0,    33,    20,     0,     7,   127,
+   128,    10,     0,     0,    13,    23,   713,     0,   713,     0,
+   713,   711,   711,     0,     0,     0,     0,   711,   709,   572,
+   573,   574,   575,   576,   577,   578,     0,   709,   709,     0,
+     0,   711,   709,   711,     0,   711,    21,  1263,     0,  1264,
+     0,  1265,     0,     0,   104,     0,   516,  1328,  1329,    26,
+     0,    27,    28,     0,     0,   479,   211,   212,   603,     0,
+   516,   516,    14,   619,     0,   147,     0,     0,     0,     0,
+   904,     0,   709,     0,   906,   148,     0,     0,     0,    18,
+   711,     0,     0,    32,    20,     0,     0,     0,   149,   199,
+     0,     0,     0,    23,  1001,     0,     0,     0,     0,     0,
+     0,     0,     0,   713,     0,     7,     8,     9,    10,     0,
+     0,     0,     0,   133,     0,     0,     7,   127,   128,    10,
+   133,     0,     0,   711,   216,     0,     0,  1384,   199,   948,
+   199,   199,   233,   619,  1365,     0,  1049,  1241,   653,     0,
+   711,     0,  1054,    21,     0,   254,     0,   254,     0,   605,
+     0,   935,     0,     0,    21,     0,    26,     0,    27,    28,
+     0,   247,     0,   208,     0,   216,   232,   709,     0,    27,
+    28,     0,   941,     0,   199,     0,     0,     0,   948,     0,
+     0,     0,   942,  1427,     0,   199,   199,     0,   199,   254,
+    32,     0,   608,   248,     0,   943,   610,     0,     0,     0,
+     0,    32,     0,     0,     0,   709,     0,     0,   216,     0,
+   536,   537,     0,     0,     0,     0,   133,     0,     0,    80,
+     0,    80,     0,     0,     0,     0,  1035,    80,    80,     0,
+   481,     0,     0,   438,    80,     0,     0,   104,     0,     0,
+     0,     0,     0,   104,     0,  1110,     0,  1111,     0,     0,
+   516,   516,   516,     0,     0,     0,     0,   713,     0,     0,
+     0,   208,   516,     0,     0,     0,     0,   438,     0,     0,
+     0,     0,     0,     0,  1486,  1487,   254,   674,     0,     0,
+     0,     8,     9,  1492,   163,    12,    13,     0,     0,   717,
+     0,    14,  1225,   567,   568,   569,   570,   571,   572,   573,
+   574,   575,   576,   577,   578,    16,     0,    17,    18,     0,
+     0,  1512,   711,    20,   711,     0,   711,     0,     0,     0,
+     0,     0,    23,     0,   605,     0,     0,     0,   548,     0,
+     0,    26,     0,   130,   131,   516,     0,   516,     0,     0,
+     0,     0,     0,     0,   104,     0,     0,   606,   516,     0,
+   104,     0,   904,   904,   904,     0,     0,   607,     0,  1119,
+   254,     0,     0,     0,     0,     0,     0,   608,     0,     0,
+   609,   610,     0,     7,     8,     9,    10,     0,  1267,     0,
+     0,     0,     0,     0,  1225,     0,     0,   254,     0,     0,
+     0,   104,     0,   104,    83,   199,   199,  1146,     0,     0,
+     0,     0,     0,     0,   106,     0,     0,     0,     0,   711,
+  1215,    21,  1217,   126,   134,     0,     0,     0,   247,     0,
+   143,   143,     0,   143,   232,    83,    27,    28,     0,     0,
+     0,     0,    83,     0,     0,   296,     8,     9,    10,  1146,
+   709,     0,     0,     0,     0,   143,   254,    83,     0,     0,
+   248,     0,   104,     0,     0,   234,     0,     0,    32,     0,
+     0,     0,   244,     0,     0,   104,     0,  1248,  1035,     0,
+     0,     0,     0,    21,   244,     0,     0,   104,     0,     0,
+   247,     0,     0,     0,     0,     0,     0,     0,    27,   315,
+  1205,     0,     0,     0,     0,     0,     0,     0,  1391,  1392,
+     0,     0,    80,     0,   438,   438,     0,     0,     0,     0,
+     0,   104,   248,   104,     0,     0,     0,   536,   537,     0,
+    32,     0,     7,     8,     9,    10,    83,     0,    13,     0,
+   143,     0,     0,   438,   143,     0,     0,   143,   143,   143,
+     0,   104,     0,     0,     0,  1322,   516,   516,     0,   516,
+  1326,    83,     0,     0,     0,    83,     0,   459,   461,   465,
+    21,   143,    83,   711,     0,     7,   127,   128,    10,     0,
+     0,   504,     0,    26,     0,    27,    28,     0,     0,   143,
+   143,   143,     0,   296,     8,     9,    10,  1452,     0,   189,
+     0,     0,     0,     0,   199,   199,   199,   199,  1146,   190,
+     0,  1363,   199,    21,     0,     0,     0,    32,   143,  1470,
+  1473,     0,   191,     0,     0,     0,    26,     0,    27,    28,
+     0,    21,     0,     0,     0,  1146,  1146,  1146,   247,     0,
+     0,     0,    30,     0,     0,     0,    27,   315,     0,     0,
+     0,     0,    31,     0,     0,   143,     0,     0,     0,     0,
+    32,     0,     0,     0,     0,    33,   199,     0,     0,     0,
+   507,   142,     0,     0,     0,     0,     0,     0,    32,     0,
      0,     7,     8,     9,    10,   210,   211,   212,     0,     0,
-     0,     0,    14,     0,     0,     0,     0,   729,   730,   459,
-   461,   465,     0,   200,     0,   741,     0,     0,     0,    18,
-     0,     0,     0,     0,    20,     0,     0,     0,     0,    21,
-     0,     0,     0,    23,     0,   605,     0,     0,   459,   461,
-   465,     0,    26,     0,    27,    28,     7,     8,     9,    10,
-   210,   211,   212,     0,     0,     0,     0,    14,   940,     0,
-   544,   544,   544,     0,     0,     0,   250,     0,   941,  1337,
-     0,   628,     0,     0,    18,    78,    32,     0,   608,    20,
-     0,   984,   610,     0,    21,     0,     0,     0,    23,   517,
-   605,     0,     0,     0,     0,     0,     0,    26,     0,    27,
-    28,     0,     0,    51,    51,   150,     0,     0,     0,     0,
-   250,     0,     0,   189,     0,     0,     0,     0,     0,     0,
-    78,     0,     0,   190,     0,   729,   730,     0,   741,     0,
-     0,    32,     0,     0,    78,     0,  1407,    78,     0,   613,
-   613,   613,    78,     0,     0,     0,     0,  1172,     0,     0,
-    78,     0,  1331,  1332,     9,    10,     0,   127,   128,     0,
-     0,   211,   212,     0,     0,     0,     0,    14,     0,     0,
-     0,     0,     0,     0,     0,     0,    51,     0,    78,     0,
-    78,     0,    78,    78,    78,     0,     0,     0,    78,    20,
-    21,     0,     0,    78,     0,   200,    78,   250,    23,     0,
-   605,     0,     0,    26,     0,    27,    28,    26,    51,   130,
-   131,  1333,    78,     0,     0,     0,     0,     0,     0,   189,
-     0,     0,     0,   606,     0,     0,     0,     0,     0,   190,
-     0,     0,     0,   607,     0,     0,     0,    32,   255,     0,
-     0,     0,   191,   608,     0,     0,   609,   610,     0,     0,
-     0,     0,     0,   200,     0,   200,     0,   466,   466,   466,
-     0,     0,     0,   200,     0,     0,     0,     0,   200,     0,
-     0,   200,     0,     0,     0,     0,   465,     0,     0,     0,
-   250,     0,     0,     0,     0,     0,     0,     7,     8,     9,
-    10,   201,    12,   202,     0,     0,     0,     0,    14,     0,
-     0,    51,    51,   150,   150,   150,     0,   250,     0,    51,
-     0,   422,    16,     0,    17,    18,     0,     0,     0,     0,
-    20,     0,     0,     0,   628,    21,     0,     0,     0,    23,
-     0,     0,  1172,  1172,  1172,     0,     0,     0,    26,     0,
-    27,    28,     0,   457,   203,     0,   459,   461,   465,     0,
-     0,     0,     0,     0,    30,    78,   473,     8,     9,     0,
-   163,    12,    13,    51,    31,  1529,     0,    14,    51,     0,
-    51,     0,    32,     0,     0,     0,     0,    33,     0,     0,
-     0,    16,     0,    17,    18,     0,     0,   866,     0,    20,
-     0,     0,     0,     0,    78,    78,    78,    78,    23,     0,
-     0,   613,   613,     0,   613,     0,   198,    26,     0,   130,
-   131,   613,     0,     0,     0,    76,     0,     0,     0,    51,
-    51,     0,    51,     0,     0,     0,     0,     0,     0,     0,
-   200,   253,     0,     0,   257,     7,   127,   128,    10,     0,
-    78,   141,   145,     0,    78,     0,    76,     0,     0,     0,
-     0,    78,    78,    76,    78,   253,     0,   361,    51,    51,
-    51,     0,     0,     0,     0,     0,     0,     0,   209,   944,
-     0,   944,   944,    21,   613,     0,     0,     0,     0,     0,
-     0,     7,     8,     9,    10,    78,    26,    78,    27,    28,
-     0,     0,    78,    78,    78,     0,     0,     0,     0,     0,
-     0,     0,   147,     0,     0,     0,     0,     0,     7,     8,
-     9,    10,   148,     0,   242,   944,     0,     0,     0,    21,
-    32,     0,   198,     0,     0,   149,   200,   200,     0,   200,
-     0,     0,    26,     0,    27,    28,     0,     0,  1401,     0,
-   198,   198,   198,     0,     0,     0,    21,   403,   189,     0,
-   472,   406,     0,     0,     0,   408,     0,     0,   190,    26,
-     0,    27,    28,     0,     0,     0,    32,   200,     0,   198,
-  1172,   191,    76,     0,     0,   189,    76,     0,     7,     8,
-     9,    10,     0,   209,    13,   190,     0,     0,     0,     0,
-   517,   517,   517,    32,     0,   257,     0,     0,   191,     0,
-   141,   145,   613,     0,     0,     0,     0,     0,     0,   253,
-     0,     0,     0,     0,     0,     0,    21,     0,     0,     0,
-     0,     0,   734,     0,   628,     0,     0,   740,     0,    26,
-     0,    27,    28,     0,     0,     0,  1331,   127,   128,    10,
-  1172,  1172,  1172,     0,     0,   462,     0,     0,     0,     0,
-     0,     0,   781,     0,     0,   463,     0,     0,   787,     0,
-    78,    78,    78,    32,    51,     0,   505,     0,   464,     0,
-   795,   796,     0,   797,    21,   613,     0,   613,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    26,   613,    27,
-    28,     0,   613,   613,   613,  1333,     0,     0,     0,     0,
-     0,   253,   257,    30,  1174,     0,     0,     0,     0,     0,
-     0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-     0,    32,     0,     0,     0,     0,    33,     0,     0,     0,
-     0,     0,     0,    78,     0,   944,   944,  1145,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   198,     0,     7,     8,     9,    10,   163,    12,    13,
-     0,     0,   989,     0,    14,    78,   637,     0,   892,   893,
-     0,     0,     0,   892,     0,     0,     0,     0,    16,  1145,
-    17,    18,     0,     0,     0,     0,    20,     0,     0,     0,
-     0,    21,     0,     0,     0,    23,     0,     7,     8,     9,
-    10,     0,     0,   504,    26,     0,    27,    28,   200,   198,
-     0,   198,     0,   198,   198,   198,     0,     0,     0,   198,
-    30,     0,     0,     0,   198,   688,     0,   198,   689,     0,
-    31,     0,     0,   691,     0,    21,     0,     0,    32,     0,
-     0,    76,     0,    33,     0,     0,     0,     0,    26,     0,
-    27,    28,     0,     0,     7,     8,     9,    10,    78,    78,
-    78,    78,    78,     0,   189,     0,    78,     0,     0,   406,
-     0,   408,     0,     0,   190,     0,     0,     0,     0,     0,
-     0,     0,    32,     0,   505,   866,   866,   191,   866,  1174,
-  1174,  1174,    21,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   777,     0,    26,     0,    27,    28,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    78,   189,     0,     0,     0,    78,     0,    78,     0,     0,
-     0,   190,     0,   944,   944,  1145,  1145,  1145,     0,    32,
-     0,   944,     0,     0,   191,  1054,     0,  1056,     0,     0,
-     0,     0,     0,     0,     0,     0,     7,     8,     9,    10,
-   201,    12,   202,     0,  1145,  1145,  1145,    14,     0,     0,
-   253,   257,     0,     0,     0,     0,    78,    78,     0,    78,
-     0,    16,     0,    17,    18,     0,   198,     0,     0,    20,
-     0,     0,     0,     0,    21,   200,     0,     0,    23,     0,
-     0,     0,     0,     0,     0,     0,     0,    26,     0,    27,
-    28,     0,     0,  1404,     0,    78,    78,    78,     0,  1090,
-  1091,     0,  1093,    30,     0,   198,     0,   198,   198,     0,
-     0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-     0,    32,     0,     8,     9,     0,    33,    12,    13,     0,
-  1111,   944,   944,    14,   944,     0,     0,     0,     0,     0,
-     0,     7,     8,     9,    10,     0,     0,    16,     0,    17,
-     0,   198,     0,     0,     0,    20,     0,     0,     0,     0,
-     0,     0,   198,   198,    23,   198,   946,     0,     0,     0,
-   200,     0,   200,    26,     0,   130,   131,     0,     0,    21,
-  1146,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   257,     0,    26,     0,    27,    28,     0,     0,     0,     0,
-     0,     0,     0,   198,     0,     0,     0,  1174,   462,     8,
-     9,     0,   201,    12,   202,   990,     0,     0,   463,    14,
-     0,     0,   688,   689,     0,   691,    32,     0,     0,     0,
-     0,   464,     0,    16,     0,    17,    18,     0,     0,     0,
-     0,    20,     0,     0,     0,  1189,     0,     0,     0,     0,
-    23,     0,     0,     0,     0,     0,   777,  1194,   777,    26,
-     0,   130,   131,  1033,  1040,   777,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   102,  1174,  1174,  1174,
-     0,     0,   466,     0,     0,   121,   102,     0,     0,     0,
-     0,     0,   102,   102,     0,   102,     0,     0,     0,     0,
-     0,    78,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     7,     8,     9,    10,   163,    12,    13,
-     0,     0,     0,     0,    14,     0,     0,   231,     0,     0,
-     0,     0,     0,     0,   253,   257,   253,     0,    16,     0,
-    17,    18,  1246,     0,     0,     0,    20,     0,     0,     0,
-     0,    21,   466,   466,   466,    23,     0,     0,     0,     0,
-     0,     0,     0,     0,    26,     0,    27,    28,     0,     0,
-     0,   198,   198,  1143,     0,     0,   200,     0,   253,     0,
-    30,  1259,     0,     0,     0,     0,   385,     0,   121,     0,
-    31,     0,     0,     0,     0,   102,   102,     0,    32,     0,
-     0,     0,   102,    33,   102,   102,   102,     0,   412,   102,
-   102,   102,     0,     0,     0,  1143,   565,   566,   567,   568,
+     0,     0,    14,   244,   143,     0,     0,  1517,   438,   438,
+     0,   438,   438,     0,   438,     0,   614,   618,   621,    18,
+     0,  1437,  1438,     0,    20,     0,     0,     0,     0,    21,
+     0,   199,   199,    23,   199,   605,     0,     0,  1448,     0,
+     0,     0,    26,     0,    27,    28,     0,     0,   244,     0,
+     0,     0,   604,     0,   143,   143,   620,     0,   941,     0,
+     0,   629,     0,     0,     0,    83,     0,     0,   942,     0,
+   199,   948,   199,     0,     0,     0,    32,     0,   608,     0,
+     0,   985,   610,     0,     0,     0,     0,     0,     0,   104,
+     0,     0,     0,     0,  1484,  1485,     0,     0,     0,   666,
+     0,     0,     0,     0,     0,   208,   216,     0,   244,     0,
+   143,   244,     0,  1494,  1495,   570,   571,   572,   573,   574,
+   575,   576,   577,   578,   143,     0,     0,   143,     0,     0,
+     0,     0,   143,     0,     0,     0,   438,   438,     0,     0,
+    83,     7,     8,     9,    10,     0,   729,   242,   730,     0,
+   459,   461,   465,     0,     0,     0,     0,     0,     0,     0,
+     0,   741,   296,   390,   391,    10,     0,     0,   143,     0,
+   143,     0,   143,   143,   143,     0,     0,     0,   143,    21,
+     8,     9,  1146,   143,    12,   242,   143,     0,     0,     0,
+    14,     0,    26,     0,    27,    28,     0,     0,     0,     0,
+    21,   759,    83,     0,    16,     0,    17,     0,   189,     0,
+     0,     0,    20,    26,     0,    27,   315,     0,   190,     0,
+     0,    23,     0,   605,     0,     0,    32,     0,     0,     0,
+    26,   191,   130,   131,     0,   438,   438,   438,     0,     0,
+   244,   244,   244,   244,     0,     0,   606,    32,     0,     0,
+     0,     0,  1146,  1146,  1146,     0,   607,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   608,     0,     0,   609,
+   610,   104,     0,     0,     0,     0,   199,     0,   882,   884,
+     7,     8,     9,    10,   163,    12,    13,     0,     8,     9,
+     0,    14,    12,   242,   438,   438,     0,     0,    14,     0,
+   244,     0,   143,     0,     0,    16,     0,    17,    18,    19,
+     0,     0,    16,    20,    17,     0,   143,   143,    21,   620,
+    20,     0,    23,     0,     0,   164,   905,     0,     0,    23,
+     0,    26,     0,    27,    28,     0,     0,     0,    26,   629,
+   130,   131,     0,     0,     0,   143,   946,    30,   614,   618,
+     0,   621,     0,     0,     0,     0,     0,    31,     0,     0,
+     0,     0,   438,     0,     0,    32,     0,     0,     0,   666,
+    33,     0,     0,     0,     0,    34,     0,   126,     0,     0,
+     0,     0,     0,     0,   143,   620,   143,   143,   234,   620,
+     0,     0,   618,   562,   563,   564,   565,   566,   567,   568,
    569,   570,   571,   572,   573,   574,   575,   576,   577,   578,
-     0,   141,   145,   760,     0,     7,     8,   761,    10,   163,
-    12,    13,     0,     0,   198,  1346,    14,     0,     0,  1347,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    16,     0,    17,    18,    19,   472,     0,     0,    20,  -522,
-     0,     0,     0,    21,     0,     0,     0,    23,   762,     0,
-   164,     0,     0,     0,  1363,     0,    26,     0,    27,    28,
-     0,     0,   763,     0,   764,   487,   102,     0,     0,     0,
-     0,     0,    30,     0,  1033,     0,     0,     0,     0,     0,
-     0,     0,    31,     0,     0,     0,     0,   102,     0,     0,
-    32,     0,     0,     0,     0,    33,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   777,     0,     0,     0,
-     0,  -522,     0,     0,     0,     0,     0,     0,   253,     0,
-     0,     0,     0,     0,     0,     0,   102,     0,  1419,     0,
-     0,     0,  1420,     0,     0,     0,     0,     0,     0,   198,
-   198,   198,   198,  1143,     0,  1258,     0,   198,     0,     0,
-     0,     0,     0,     0,  1438,  1439,     0,     0,     0,     0,
+     6,   759,     7,     8,     9,    10,    11,    12,    13,   729,
+   730,     0,   741,    14,     0,     0,     0,     0,     0,     0,
+   143,     0,     0,     0,   620,     0,     0,    16,     0,    17,
+    18,   143,   143,     0,   143,    20,     0,     0,     0,     0,
+    21,     0,     0,     0,    23,     0,     0,   426,     0,     0,
+  1033,     0,     0,    26,     0,    27,    28,     0,     0,    29,
+     0,     0,   134,     0,     0,    83,     0,    83,     0,    30,
+   618,     0,  1036,    83,    83,     0,     0,     0,     0,    31,
+    83,   127,   128,   244,     0,   211,   212,    32,     0,   244,
+     0,    14,    33,     0,     0,     0,   143,   143,   143,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   143,     0,
+     0,     0,     0,    20,     0,    51,     0,     0,     0,     0,
+     0,     0,    23,     0,   605,  1024,  1025,     9,    10,     0,
+     0,    26,     0,   130,   131,     0,     0,     0,     0,     0,
+     0,    51,    51,  1105,   150,  1106,    51,   606,     0,     0,
+     0,     0,     0,    51,     0,     0,  1112,   607,     0,     0,
+   882,   884,     0,    21,     0,     0,    51,   608,    51,     0,
+   616,   610,     0,     0,     0,     0,    26,     0,    27,    28,
+     0,   143,     0,   143,  1026,     0,     0,     0,     0,     0,
+   244,   250,   189,     0,   143,     0,   244,     0,   905,   905,
+   905,     0,   190,   882,   884,   629,     0,     0,     0,     0,
+    32,     0,     0,     0,     0,   191,     0,     0,     0,   459,
+   461,   465,   564,   565,   566,   567,   568,   569,   570,   571,
+   572,   573,   574,   575,   576,   577,   578,   244,     0,   244,
+     0,   143,   143,   620,   392,   392,     0,    51,     0,     0,
+     0,    51,     0,   250,     0,    51,     0,     0,   150,   150,
+   150,     0,     0,   465,     0,   127,   128,     0,     0,   211,
+   212,     0,    51,     0,     0,    14,    51,     0,     0,     0,
+     0,     0,    51,    51,     0,   905,     0,     0,     0,     0,
+     0,     0,  1033,     0,     0,     0,     0,    20,   244,     0,
+    51,    51,   150,     0,     0,     0,    23,     0,   605,   759,
+   250,   244,     0,     0,  1036,    26,     0,   130,   131,     0,
+     0,     0,     0,   244,     7,     8,     9,    10,     0,    51,
+    13,   606,     8,     9,     0,     0,    12,    13,     0,     0,
+     0,   607,    14,     0,     0,     0,     0,     0,    83,     0,
+     0,   608,     0,     0,   609,   610,    16,   244,    17,   244,
+     0,     0,    21,     0,    20,     0,    51,     0,     0,     0,
+     0,     0,     0,    23,     0,    26,     0,    27,    28,     0,
+     0,     0,    26,     0,   130,   131,     0,   244,     0,     0,
+     0,   462,   143,   143,     0,   143,     0,     0,     0,     0,
+     0,   463,  1105,  1106,   882,   884,     0,     0,     0,    32,
+  1112,     0,     0,     0,   464,     0,     0,     0,   729,   730,
+   459,   461,   465,     0,     0,     0,   741,     0,     0,     0,
+     0,     0,     0,   882,   884,     0,   544,     0,     0,     0,
+   143,   143,   143,   143,   620,     0,     0,     0,   143,   459,
+   461,   465,     0,   392,     0,   759,     0,     0,     0,     0,
+     0,   250,     0,     0,     0,     0,    51,     0,     0,     0,
+     0,   905,   905,   905,     0,     0,     7,     8,     9,    10,
+  1338,     0,   504,     0,     0,     0,     0,   759,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-  1143,  1143,  1143,     0,   102,     0,   102,   102,   562,   563,
-   564,   565,   566,   567,   568,   569,   570,   571,   572,   573,
-   574,   575,   576,   577,   578,     0,     0,     0,     0,   406,
-   408,   198,     0,     0,     0,     0,     0,   505,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  1461,
-     0,   102,   563,   564,   565,   566,   567,   568,   569,   570,
-   571,   572,   573,   574,   575,   576,   577,   578,     0,   102,
-     0,     0,     0,     0,     0,     0,   102,     0,     0,   102,
-     0,     0,     0,     0,   102,     0,     0,   198,   198,     0,
-   198,  1338,     0,     0,     0,     0,  1338,     0,   777,  1462,
-   557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
+   392,     0,   143,     0,     0,     0,     0,   143,     0,     0,
+     0,    51,     0,     0,    21,     0,     0,     0,     0,  1105,
+  1106,     0,  1112,     0,     0,    51,     0,    26,    51,    27,
+    28,     0,     0,    51,     0,   729,   730,     0,   741,     0,
+     0,    51,     0,   189,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   190,     0,     0,     0,   143,   143,     0,
+   143,    32,     0,     0,     0,     0,   191,     0,     0,    51,
+     0,    51,     0,   150,   150,   150,     0,     0,     0,    51,
+     0,     0,     0,     0,    51,  1395,     0,    51,  1332,  1333,
+     9,    10,     0,     0,     0,     0,   143,   620,   143,     0,
+     0,     0,     0,    51,     0,     0,     0,     7,     8,     9,
+    10,   201,    12,   202,     0,   244,     0,     0,    14,     0,
+     0,     0,     0,     0,     0,     0,    21,     0,     0,     0,
+     0,     0,    16,   544,    17,    18,   544,     0,     0,    26,
+    20,    27,    28,     0,     0,    21,     0,  1334,     0,    23,
+     0,   544,   544,   544,     0,   189,     0,     0,    26,     0,
+    27,    28,     0,     0,   203,   190,   544,     0,     0,     0,
+     0,     0,    78,    32,    30,     0,     0,     0,   191,     0,
+     0,     0,     0,     0,    31,     0,   465,     0,     0,     0,
+     0,     0,    32,     0,     0,     0,     0,    33,    78,    78,
+     0,    78,     0,    78,     0,     0,     0,     0,   905,     0,
+    78,     0,     0,     0,   250,  1332,   127,   128,    10,     0,
+     0,     0,     0,    78,     0,    78,     0,   544,   561,   562,
+   563,   564,   565,   566,   567,   568,   569,   570,   571,   572,
+   573,   574,   575,   576,   577,   578,    51,     0,     0,     0,
+     0,     0,     0,    21,     0,     0,   459,   461,   465,     0,
+     0,     0,     0,     0,     0,     0,    26,     0,    27,    28,
+   392,     0,     0,     0,  1334,     0,     0,   392,   905,   905,
+   905,     0,    30,     0,     0,    51,    51,    51,    51,     0,
+     0,     0,    31,     0,     0,     0,     0,   244,   198,     0,
+    32,     0,   143,     0,    78,    33,     0,     0,    78,     0,
+     0,     0,    78,     0,     0,    78,    78,    78,     0,     0,
+     8,     9,     0,   253,    12,    13,   257,     0,     0,    78,
+    14,    51,     0,    78,     0,    51,     0,     0,     0,    78,
+    78,     0,    51,    51,    16,    51,    17,   253,     0,   361,
+     0,     0,    20,     0,     0,     0,     0,    78,    78,    78,
+     0,    23,     0,     0,     0,     0,     0,     0,     0,     0,
+    26,     0,   130,   131,   588,     0,    51,     0,    51,   155,
+     0,     0,     0,    51,    51,    51,    78,     7,   127,   128,
+    10,    51,     0,     7,     8,     9,    10,   163,    12,    13,
+     0,   200,   717,     0,    14,     0,     0,     0,     0,   589,
+     0,     0,     0,   544,   198,     0,     0,     0,    16,     0,
+    17,    18,     0,    78,     0,    21,    20,     0,     0,     0,
+     0,    21,   198,   198,   198,    23,     0,   605,    26,     0,
+    27,    28,   472,     0,    26,     0,    27,    28,     0,     0,
+     0,     0,     0,     0,   147,     0,     0,     0,     0,     0,
+  1142,   198,     0,     0,   148,     0,     0,     0,     0,     0,
+  1143,     0,    32,     0,     0,     0,     0,   149,    32,     0,
+   608,     0,     0,  1144,   610,     0,     0,   257,     7,     8,
+     9,    10,     0,   155,   155,   155,     0,     0,     0,     0,
+     0,   253,     0,     0,     0,     0,     0,     0,     0,   544,
+   544,   544,     0,     0,     0,   250,     0,   200,     0,   628,
+     0,     0,     0,    78,     0,     0,    21,     0,     0,     0,
+     0,     0,     0,     0,     0,   200,   200,   466,     0,    26,
+     0,    27,    28,     0,     0,  1402,     0,     0,     0,     0,
+     0,     0,    51,    51,   150,   189,     0,     0,     0,   250,
+     0,     0,     0,     0,   200,   190,     0,     0,    78,     0,
+     0,     0,     0,    32,     0,     0,     0,     0,   191,     0,
+     0,     0,    78,     0,     0,    78,     0,     0,     0,     0,
+    78,     0,     0,   253,   257,     0,  1174,     0,    78,   566,
    567,   568,   569,   570,   571,   572,   573,   574,   575,   576,
-   577,   578,     0,     0,     0,     0,   198,     0,   198,     0,
-     0,     0,     0,  1432,     0,  -475,  -475,  -475,  -475,  -475,
-  -475,  -475,     0,     0,  -475,     0,  -475,   688,   689,     0,
-   691,   102,     0,   752,     0,     0,     0,  -475,     0,  -475,
-     0,     0,     0,  -475,     0,     0,     0,     0,  -475,     0,
-     0,     0,     0,  -475,     0,     0,     0,  -475,   102,  -475,
-     0,     0,     0,     0,     0,     0,  -475,  1406,  -475,  -475,
-  -475,  -475,  -475,     0,  -475,  -475,  -475,  -475,  -475,  -475,
-  -475,  -475,  -475,  -475,  -475,  -475,  -475,  -475,  -475,  -475,
-  -475,  -475,  -475,  -475,  -475,  -475,  -475,     0,  -475,  -475,
-  -475,     0,  -475,  -475,  -475,  -475,  -475,  -475,     0,  -475,
-     0,     0,     0,     0,  1433,     0,     0,     0,  1143,  -475,
-  -475,  -475,     0,  -475,   760,     0,     7,     8,   761,    10,
-   163,    12,    13,     0,   102,     0,     0,    14,     0,     0,
-     0,     0,     0,     0,     0,   102,   102,     0,   102,   102,
-     0,    16,     0,    17,    18,    19,     0,     0,     0,    20,
-     0,     0,     0,     0,    21,     0,     0,     0,    23,   762,
-     0,   164,     0,     0,     0,     0,     0,    26,     0,    27,
-    28,     0,     0,   763,     0,   764,     0,     0,  1143,  1143,
-  1143,     0,     0,    30,     0,     0,     0,     0,     0,     0,
-     0,   102,     0,    31,     0,     0,     0,     0,   102,   121,
-     0,    32,   198,     0,     0,     0,    33,     0,     0,     0,
-   231,   539,     0,   296,     8,     9,    10,   163,    12,   297,
-   298,   299,   717,   300,    14,     0,     0,     0,     0,     0,
-     0,     0,     0,   752,     0,     0,     0,     0,    16,   301,
-    17,    18,    19,     0,   302,   303,    20,     0,   304,   305,
-   306,    21,   307,   308,     0,    23,     0,   605,     0,   309,
-   310,   311,   312,   313,    26,     0,    27,   315,  -308,     0,
-     0,   316,     0,     0,     0,     0,     0,   317,     0,     0,
-   897,     0,     0,     0,     0,     0,     0,     0,   319,   320,
-   898,   752,     0,     0,   102,     0,   322,   323,   324,     0,
-   608,     0,     0,   899,   610,     0,     0,     0,     0,     0,
+   577,   578,     7,     8,     9,    10,     0,     0,     0,   365,
+   367,     0,     0,     0,     0,    51,    78,     0,    78,     0,
+    78,    78,    78,     0,     0,     0,    78,     0,     0,     0,
+   517,    78,     0,   198,    78,     0,   250,     0,     0,     0,
+    21,     0,     0,     0,     0,     0,     0,     0,     0,    51,
+    78,     0,     0,    26,     0,    27,    28,     0,     0,     0,
+     0,  -383,     8,     9,  -383,  -383,    12,   242,     0,   189,
+     0,     0,    14,     7,     8,     9,    10,     0,     0,   190,
+   613,   613,   613,     0,     0,     0,    16,    32,    17,  -383,
+     0,   198,   191,   198,    20,   198,   198,   198,     0,  -383,
+     0,   198,     0,    23,     0,   605,   198,     0,     0,   198,
+     0,    21,    26,     0,   130,   131,     0,     0,     0,     0,
+   250,     0,     0,     0,    26,     0,    27,    28,   606,     8,
+     9,     0,   163,    12,    13,     0,   200,   717,   607,    14,
+   462,    51,    51,   150,   150,   150,  -383,   250,   608,    51,
+   463,   609,   610,    16,     0,    17,    18,     0,    32,     0,
+     0,    20,   628,   464,     0,     0,     0,     0,     0,     0,
+    23,     0,  1174,  1174,  1174,     0,     0,     0,     0,    26,
+     0,   130,   131,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    78,   200,     0,   200,     0,   466,   466,
+   466,     0,     0,    51,   200,     0,     0,     0,    51,   200,
+     0,     0,   200,     0,     0,     0,   162,     0,     7,     8,
+     9,    10,   163,    12,    13,     0,     0,   547,     0,    14,
+     0,   255,    78,    78,    78,    78,     0,     0,     0,     0,
+     0,     0,     0,    16,     0,    17,    18,    19,     0,     0,
+     0,    20,   253,   257,     0,     0,    21,     0,    51,    51,
+    23,    51,     0,   164,     0,     0,     0,     0,   198,    26,
+     0,    27,    28,     0,     0,     0,     0,     0,    78,     0,
+     0,     0,    78,     0,     0,    30,     0,     0,     0,    78,
+    78,     0,    78,     0,     0,    31,     0,    51,    51,    51,
+   673,     0,     0,    32,   422,     0,     0,   198,    33,   198,
+   198,     0,     0,    34,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    78,     0,    78,     0,     0,   867,     0,
+    78,    78,    78,     0,     0,     0,   457,     0,    78,     0,
+     0,     0,   613,   613,     0,   613,     0,     0,     0,   473,
+     8,     9,   613,   198,    12,    13,     0,     0,   719,     0,
+    14,     0,     0,     0,   198,   198,     0,   198,     0,     0,
+     0,   200,     0,     0,    16,     0,    17,     0,     0,     0,
+     0,     0,    20,     0,     0,     0,     0,     0,     0,     0,
+     0,    23,   257,     0,     0,     0,     0,     0,     0,     0,
+    26,     0,   130,   131,     0,   198,     0,     0,     0,  1174,
+   945,     0,   945,   945,     0,   613,     0,     0,     0,     0,
+     0,     0,     0,     0,   801,     0,     0,   804,     0,     0,
+     0,   806,   807,   809,   810,   811,     0,     0,     0,   858,
+     0,     0,     0,     0,   547,     8,     9,     0,   163,    12,
+    13,     0,     0,     0,     0,    14,   945,   828,     0,     0,
+     0,     0,     0,   628,     0,     0,     0,   200,   200,    16,
+   200,    17,    18,     0,     0,     0,     0,    20,     0,  1174,
+  1174,  1174,     0,     0,     0,     0,   667,     0,     0,   164,
+     0,     0,     0,     0,     0,    26,     0,   130,   131,    78,
+    78,    78,     0,    51,     0,     0,     0,     0,   200,     0,
+     0,   885,     0,     0,     0,     0,     0,     0,   885,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   326,     0,     0,     0,     0,     0,     0,   102,   102,   102,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   102,
-     0,  1409,     0,  1269,  1270,  1271,    10,   163,    12,   297,
-   298,   299,     0,   300,    14,  1272,     0,  1273,  1274,  1275,
-  1276,  1277,  1278,  1279,  1280,  1281,  1282,    15,    16,   301,
-    17,    18,    19,     0,   302,   303,    20,     0,   304,   305,
-   306,    21,   307,   308,  1283,    23,  1284,     0,     0,   309,
-   310,   311,   312,   313,    26,     0,  1285,   315,   704,     0,
-  1286,   316,     0,     0,     0,     0,     0,   317,     0,     0,
-   318,     0,   102,     0,   102,     0,     0,     0,   319,   320,
-   321,     0,     0,     0,     0,   102,   322,   323,   324,     0,
-     0,     0,     0,   325,     0,  1287,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  1410,
-   326,  1268,     0,  1269,  1270,  1271,    10,   163,    12,   297,
-   298,   299,     0,   300,    14,  1272,     0,  1273,  1274,  1275,
-  1276,  1277,  1278,  1279,  1280,  1281,  1282,    15,    16,   301,
-    17,    18,    19,     0,   302,   303,    20,     0,   304,   305,
-   306,    21,   307,   308,  1283,    23,  1284,     0,     0,   309,
-   310,   311,   312,   313,    26,     0,  1285,   315,   704,     0,
-  1286,   316,     0,     0,     0,     0,     0,   317,     0,     0,
-   318,     0,     0,     0,     0,     0,     0,     0,   319,   320,
-   321,     0,     0,     0,     0,     0,   322,   323,   324,     0,
-   752,     0,     0,   325,     0,  1287,     0,     0,     0,     0,
+     0,     0,   517,   517,   517,     0,     0,   253,   257,   253,
+     0,     0,     0,  1176,   613,     0,     0,     0,     0,     0,
+     0,     0,    76,   563,   564,   565,   566,   567,   568,   569,
+   570,   571,   572,   573,   574,   575,   576,   577,   578,     0,
+     0,     0,    78,     0,   198,   198,  1145,     0,   141,   145,
+     0,   253,     0,    76,     0,     0,     0,   611,   611,   611,
+    76,   565,   566,   567,   568,   569,   570,   571,   572,   573,
+   574,   575,   576,   577,   578,   209,    78,     0,     0,     0,
+     0,     0,     0,     0,     0,   734,     0,   613,  1145,   613,
+   740,     0,     0,     0,     0,     0,   673,     0,     0,     0,
+   613,     0,     0,     0,   613,   613,   613,     0,     0,     0,
+     0,     0,     0,     0,     0,   782,     0,   198,     0,     0,
+     0,   788,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   796,   797,     0,   798,     0,   472,     0,
+     0,     0,     0,     0,     0,     0,     0,   945,   945,  1147,
+     0,     0,     0,     0,   403,   719,     0,     0,   406,     0,
+     0,   719,   408,     0,     0,     0,     0,     0,    78,    78,
+    78,    78,    78,     0,     0,     0,    78,     0,     0,    76,
+     0,     0,     0,    76,     0,     0,     0,     0,     0,     0,
+   209,  1147,     0,     0,     0,     0,     0,     0,     0,  1176,
+  1176,  1176,     0,     0,     0,     0,     0,   141,   145,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   326,     0,     0,     0,     0,     0,     0,   102,   557,   558,
-   559,   560,   561,   562,   563,   564,   565,   566,   567,   568,
-   569,   570,   571,   572,   573,   574,   575,   576,   577,   578,
+   200,     0,   253,     0,     0,     0,     0,     0,     0,  1086,
+    78,   893,   894,     0,     0,    78,   893,     0,     0,     0,
+     0,     0,     0,   198,   198,   198,   198,  1145,     0,  1259,
+     0,   198,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   828,     0,     0,     0,     0,     0,   719,     0,
+     0,     0,   885,   505,  1145,  1145,  1145,     0,     0,     0,
+     0,     0,     0,     0,     0,    78,    78,     0,    78,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   867,   867,
+     0,   867,     0,     0,     0,   198,     0,     0,     0,   673,
+     0,  1138,     0,     0,     0,   885,     0,     0,     0,   611,
+   611,     0,   611,     0,    78,    78,    78,     0,     0,   902,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   539,     0,     7,     8,     9,    10,   163,    12,   297,
-   298,   299,   717,   300,    14,     0,  1222,     0,     0,     0,
-     0,     0,   102,   102,     0,   102,     0,     0,    16,   301,
-    17,    18,    19,     0,   302,   303,    20,     0,   304,   305,
-   306,    21,   307,   308,     0,    23,     0,   605,     0,   309,
-   310,   311,   312,   313,    26,     0,    27,    28,  -308,     0,
-     0,   316,     0,     0,     0,     0,     0,   317,     0,     0,
-  1169,     0,     0,     0,     0,     0,     0,     0,   319,   320,
-  1170,     0,     0,     0,     0,   752,   322,   323,   324,     0,
-   608,     0,     0,  1171,   610,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   945,   945,  1147,  1147,
+  1147,     0,     0,     0,   945,     0,     0,   885,     0,     0,
+   198,   198,     0,   198,     0,     0,     0,     0,     0,     0,
+  1180,     0,     0,   637,     0,     0,  1186,  1147,  1147,  1147,
+     0,     0,     0,   719,     0,     0,     0,   611,     0,   611,
+   611,     0,   611,     0,     0,   719,     0,     0,     0,   198,
+     0,   198,     0,   102,     0,     0,     0,     0,   200,  1056,
+     0,  1058,   121,   102,     0,     0,     0,     0,     0,   102,
+   102,     0,   102,     0,     0,     0,     0,     0,     0,   719,
+     0,   719,   688,   611,     0,   689,  1176,     0,     0,     0,
+   691,     0,     0,     0,     0,     0,     0,     0,    76,     0,
+     0,     0,     0,     0,   231,     0,     0,     0,     0,  1233,
+     0,     0,     0,   945,   945,     0,   945,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   406,     0,   408,     0,
+     0,     0,     0,  1092,  1093,     0,  1095,     0,     0,     0,
+     0,   505,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   200,     0,   200,     0,  1176,  1176,  1176,     0,
+   777,  1145,     0,   385,  1113,   121,   885,     0,     0,     0,
+     0,   611,   102,   102,     0,     0,     0,     0,     0,   102,
+    78,   102,   102,   102,     0,   412,   102,   102,   102,     8,
+     9,     0,   163,    12,    13,   885,     0,  1530,     0,    14,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    16,  1148,    17,    18,     0,     0,     0,
+     0,    20,     0,     0,     0,     0,     0,     0,     0,     0,
+    23,  1145,  1145,  1145,     0,     0,     0,     0,     0,    26,
+     0,   130,   131,     0,   611,     0,   611,     0,     0,     0,
+     0,     0,     0,     0,     0,   198,     0,   611,     0,     0,
+     0,   902,   902,   902,   466,     7,     8,     9,    10,   163,
+    12,    13,   487,   102,   990,     0,    14,     0,     0,  1191,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    16,  1196,    17,    18,   102,     0,     0,     0,    20,     0,
+     0,     0,     0,    21,   611,   611,   611,    23,     0,     0,
+     0,     0,     0,     0,     0,     0,    26,     0,    27,    28,
+     8,     9,     0,   201,    12,   202,     0,     0,     0,     0,
+    14,     0,    30,   102,   466,   466,   466,  1180,     0,     0,
+     0,     0,    31,   947,    16,     0,    17,    18,   902,     0,
+    32,     0,    20,     0,     0,    33,     0,     0,   200,     0,
+     0,    23,     0,     0,     0,     0,     0,     0,     0,     0,
+    26,     0,   130,   131,     0,     0,     0,  1247,     0,     0,
+     0,   102,     0,   102,   102,  1024,     8,   761,    10,   201,
+    12,   202,   991,     0,     0,     0,    14,     0,     0,   688,
+   689,     0,   691,     0,     0,     0,     0,     0,     0,     0,
+    16,     0,    17,    18,     0,     0,  1260,     0,    20,     0,
+     0,     0,     0,    21,     0,     0,     0,    23,   102,     0,
+     0,     0,     0,   777,     0,   777,    26,     0,    27,    28,
+  1034,  1041,   777,     0,  1026,     0,   102,     0,   777,     0,
+     0,     0,    30,   102,     0,     0,   102,     0,     0,     0,
+     0,   102,    31,     0,     0,     0,     0,     0,     0,     0,
+    32,     0,     0,     0,     0,    33,     0,     0,     0,  1347,
+     0,     0,     0,  1348,     0,     0,     0,     0,     0,     7,
+     8,     9,    10,   163,    12,    13,     0,     0,     0,     0,
+    14,     0,   547,   611,   611,   611,   611,   611,     0,     0,
+     0,   611,     0,     0,    16,     0,    17,    18,  1364,   673,
+     0,     0,    20,     0,     0,     0,     0,    21,   102,     0,
+   752,    23,     0,     0,   902,   902,   902,     0,     0,     0,
+    26,     0,    27,    28,     0,     0,   760,     0,     7,     8,
+   761,    10,   163,    12,    13,   102,    30,     0,     0,    14,
+     0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
+     0,     0,     0,    16,    32,    17,    18,    19,     0,    33,
+     0,    20,  -521,     0,     0,     0,    21,     0,     0,     0,
+    23,   762,  1420,   164,     0,     0,  1421,     0,     0,    26,
+     0,    27,    28,     0,     0,   763,  1462,   764,     0,   141,
+   145,     0,     0,     0,     0,    30,     0,     0,  1439,  1440,
+   611,   611,     0,   611,     0,    31,     0,     0,     0,     0,
+     0,   102,     0,    32,     0,     0,     0,     0,    33,     0,
+     0,     0,   102,   102,     0,   102,   102,     0,     0,     0,
+     0,     0,     0,     0,  -521,     0,  1463,   557,   558,   559,
+   560,   561,   562,   563,   564,   565,   566,   567,   568,   569,
+   570,   571,   572,   573,   574,   575,   576,   577,   578,     0,
+     0,     0,  1034,     0,     0,     0,     0,     0,     0,  1433,
+     0,  -475,  -475,  -475,  -475,  -475,  -475,  -475,   102,     0,
+  -475,     0,  -475,     0,     0,   102,   121,     0,     0,     0,
+     0,     0,     0,  -475,     0,  -475,   777,   231,     0,  -475,
+     0,     0,     0,     0,  -475,     0,     0,     0,     0,  -475,
+     0,     0,     0,  -475,     0,  -475,     0,     0,     0,     0,
+   752,     0,  -475,     0,  -475,  -475,  -475,  -475,  -475,     0,
+  -475,  -475,  -475,  -475,  -475,  -475,  -475,  -475,  -475,  -475,
+  -475,  -475,  -475,  -475,  -475,  -475,  -475,  -475,  -475,  -475,
+  -475,  -475,  -475,     0,  -475,  -475,  -475,     0,  -475,  -475,
+  -475,  -475,  -475,  -475,     0,  -475,     0,     0,     0,     0,
+  1434,     0,     0,     0,     0,  -475,  -475,  -475,   752,  -475,
+     0,   102,     0,     0,     0,     0,     0,     0,   406,   408,
+     0,     0,     0,     0,     0,     0,   505,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   326,     0,     0,     0,     0,     0,   716,   752,   296,     8,
+     0,     0,     0,     0,     0,   102,   102,   102,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   102,     0,     0,
+     0,     0,   539,     0,   296,     8,     9,    10,   163,    12,
+   297,   298,   299,   717,   300,    14,     0,     0,     0,     0,
+  1339,     0,     0,     0,     0,  1339,     0,     0,     0,    16,
+   301,    17,    18,    19,     0,   302,   303,    20,     0,   304,
+   305,   306,    21,   307,   308,     0,    23,     0,   605,     0,
+   309,   310,   311,   312,   313,    26,     0,    27,   315,  -308,
+     0,     0,   316,     0,     0,     0,     0,     0,   317,     0,
+   102,   898,   102,     0,     0,   688,   689,     0,   691,   319,
+   320,   899,     0,   102,     0,     0,     0,   322,   323,   324,
+     0,   608,     0,     0,   900,   610,     0,     0,     0,     0,
+  1410,     0,  1270,  1271,  1272,    10,   163,    12,   297,   298,
+   299,   326,   300,    14,  1273,  1407,  1274,  1275,  1276,  1277,
+  1278,  1279,  1280,  1281,  1282,  1283,    15,    16,   301,    17,
+    18,    19,     0,   302,   303,    20,     0,   304,   305,   306,
+    21,   307,   308,  1284,    23,  1285,     0,     0,   309,   310,
+   311,   312,   313,    26,     0,  1286,   315,   704,     0,  1287,
+   316,     0,     0,     0,     0,     0,   317,     0,     0,   318,
+     0,     0,     0,     0,     0,     0,     0,   319,   320,   321,
+     0,     0,     0,     0,     0,   322,   323,   324,     0,     0,
+     0,     0,   325,     0,  1288,     0,     0,     0,   752,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,  1411,   326,
+  1269,     0,  1270,  1271,  1272,    10,   163,    12,   297,   298,
+   299,     0,   300,    14,  1273,   102,  1274,  1275,  1276,  1277,
+  1278,  1279,  1280,  1281,  1282,  1283,    15,    16,   301,    17,
+    18,    19,     0,   302,   303,    20,     0,   304,   305,   306,
+    21,   307,   308,  1284,    23,  1285,     0,     0,   309,   310,
+   311,   312,   313,    26,     0,  1286,   315,   704,     0,  1287,
+   316,     0,     0,     0,     0,     0,   317,     0,     0,   318,
+     0,   102,   102,     0,   102,     0,     0,   319,   320,   321,
+     0,     0,     0,     0,     0,   322,   323,   324,     0,     0,
+     0,     0,   325,     0,  1288,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   326,
+     0,     0,   539,     0,     7,     8,     9,    10,   163,    12,
+   297,   298,   299,   717,   300,    14,     0,     0,     0,     0,
+     0,     0,     0,     0,   752,     0,     0,     0,     0,    16,
+   301,    17,    18,    19,     0,   302,   303,    20,     0,   304,
+   305,   306,    21,   307,   308,     0,    23,     0,   605,     0,
+   309,   310,   311,   312,   313,    26,   752,    27,    28,  -308,
+     0,     0,   316,     0,     0,     0,     0,     0,   317,     0,
+     0,  1171,     0,     0,   102,     0,   102,     0,     0,   319,
+   320,  1172,     0,     0,     0,     0,     0,   322,   323,   324,
+     0,   608,     0,     0,  1173,   610,   716,     0,   296,     8,
      9,    10,   163,    12,   297,   298,   299,   717,   300,    14,
-     0,     0,     0,     0,     0,   102,     0,   102,     0,     0,
+     0,   326,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    16,   301,    17,    18,    19,     0,   302,
    303,    20,     0,   304,   305,   306,    21,   307,   308,     0,
     23,     0,     0,     0,   309,   310,   311,   312,   313,    26,
      0,    27,   315,     0,     0,     0,   316,     0,     0,     0,
      0,     0,   317,     0,     0,   318,     0,     0,     0,     0,
      0,     0,     0,   319,   320,   321,     0,     0,     0,     0,
-     0,   322,   323,   324,     0,     0,     0,   830,   325,   296,
+     0,   322,   323,   324,     0,     0,     0,   831,   325,   296,
      8,     9,    10,   163,    12,   297,   298,   299,     0,   300,
-    14,     0,     0,  -791,     0,   326,     0,     0,     0,     0,
+    14,     0,     0,  -792,     0,   326,     0,     0,     0,     0,
      0,     0,     0,     0,    16,   301,    17,    18,    19,     0,
    302,   303,    20,     0,   304,   305,   306,    21,   307,   308,
      0,    23,     0,     0,     0,   309,   310,   311,   312,   313,
-    26,     0,    27,   315,  1506,     0,  -781,   316,     0,     0,
+    26,     0,    27,   315,  1507,     0,  -782,   316,     0,     0,
      0,     0,     0,   317,     0,     0,   318,     0,     0,     0,
      0,     0,     0,     0,   319,   320,   321,     0,     0,     0,
      0,     0,   322,   323,   324,     0,     0,     0,   707,   325,
-   818,   819,   820,    10,     0,    12,   521,   298,   299,     0,
+   819,   820,   821,    10,     0,    12,   521,   298,   299,     0,
    300,    14,     0,     0,     0,     0,   326,     0,     0,     0,
      0,     0,     0,     0,     0,    16,   301,    17,     0,    19,
      0,   302,   303,    20,     0,   304,   305,   306,    21,   307,
    308,     0,    23,     0,     0,     0,   309,   310,   311,   312,
-   313,    26,     0,   821,   822,   708,     0,     0,   316,     0,
+   313,    26,     0,   822,   823,   708,     0,     0,   316,     0,
      0,     0,     0,     0,   317,     0,     0,   318,     0,     0,
      0,     0,     0,     0,     0,   319,   320,   321,     0,     0,
      0,     0,     0,   322,   323,   324,     0,     0,     0,     0,
-   325,   823,   707,     0,   818,   819,   820,    10,     0,    12,
-   521,   298,   299,     0,   300,    14,   976,   326,     0,     0,
+   325,   824,   707,     0,   819,   820,   821,    10,     0,    12,
+   521,   298,   299,     0,   300,    14,   977,   326,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
    301,    17,     0,    19,     0,   302,   303,    20,     0,   304,
    305,   306,    21,   307,   308,     0,    23,     0,     0,     0,
-   309,   310,   311,   312,   313,    26,     0,   821,   822,   708,
+   309,   310,   311,   312,   313,    26,     0,   822,   823,   708,
      0,     0,   316,     0,     0,     0,     0,     0,   317,     0,
      0,   318,     0,     0,     0,     0,     0,     0,     0,   319,
    320,   321,     0,     0,     0,     0,     0,   322,   323,   324,
-     0,     0,     0,     0,   325,   823,   707,     0,   818,   819,
-   820,    10,     0,    12,   521,   298,   299,     0,   300,    14,
+     0,     0,     0,     0,   325,   824,   707,     0,   819,   820,
+   821,    10,     0,    12,   521,   298,   299,     0,   300,    14,
      0,   326,     0,     0,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    16,   301,    17,     0,    19,     0,   302,
    303,    20,     0,   304,   305,   306,    21,   307,   308,     0,
     23,     0,     0,     0,   309,   310,   311,   312,   313,    26,
-     0,   821,   822,   708,     0,     0,   316,     0,     0,     0,
+     0,   822,   823,   708,     0,     0,   316,     0,     0,     0,
      0,     0,   317,     0,     0,   318,     0,     0,     0,     0,
      0,     0,     0,   319,   320,   321,     0,     0,     0,     0,
-     0,   322,   323,   324,     0,     0,     0,   707,   325,   818,
-   819,   820,    10,     0,    12,   521,   298,   299,     0,   300,
+     0,   322,   323,   324,     0,     0,     0,   707,   325,   819,
+   820,   821,    10,     0,    12,   521,   298,   299,     0,   300,
     14,     0,     0,     0,  -479,   326,     0,     0,     0,     0,
      0,     0,     0,     0,    16,   301,    17,     0,    19,     0,
    302,   303,    20,     0,   304,   305,   306,    21,   307,   308,
      0,    23,     0,     0,     0,   309,   310,   311,   312,   313,
-    26,     0,   821,   822,   708,     0,     0,   316,     0,     0,
+    26,     0,   822,   823,   708,     0,     0,   316,     0,     0,
      0,     0,     0,   317,     0,     0,   318,     0,     0,     0,
      0,     0,     0,     0,   319,   320,   321,     0,     0,     0,
      0,     0,   322,   323,   324,     0,     0,     0,   707,   325,
    296,     8,     9,    10,     0,    12,   521,   298,   299,     0,
-   300,    14,     0,     0,     0,  1307,   326,     0,     0,     0,
+   300,    14,     0,     0,     0,  1308,   326,     0,     0,     0,
      0,     0,     0,     0,     0,    16,   301,    17,     0,    19,
      0,   302,   303,    20,     0,   304,   305,   306,    21,   307,
    308,     0,    23,     0,     0,     0,   309,   310,   311,   312,
@@ -2140,7 +2113,7 @@ static const short yytable[] = {    59,
      0,     0,     0,     0,   317,     0,     0,   318,     0,     0,
      0,     0,     0,     0,     0,   319,   320,   321,     0,     0,
      0,     0,     0,   322,   323,   324,     0,     0,     0,     0,
-   325,     0,   539,     0,   296,     8,     9,    10,  1311,    12,
+   325,     0,   539,     0,   296,     8,     9,    10,  1312,    12,
    297,   298,   299,     0,   300,    14,     0,   326,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
    301,    17,     0,    19,     0,   302,   303,    20,     0,   304,
@@ -2158,13 +2131,13 @@ static const short yytable[] = {    59,
    708,     0,     0,   316,     0,     0,     0,     0,     0,   317,
      0,     0,   318,     0,     0,     0,     0,     0,     0,     0,
    319,   320,   321,     0,     0,     0,     0,     0,   322,   323,
-   324,     0,     0,     0,   830,   325,   296,     8,     9,    10,
+   324,     0,     0,     0,   831,   325,   296,     8,     9,    10,
      0,    12,   521,   298,   299,     0,   300,    14,     0,     0,
      0,     0,   326,     0,     0,     0,     0,     0,     0,     0,
      0,    16,   301,    17,     0,    19,     0,   302,   303,    20,
      0,   304,   305,   306,    21,   307,   308,     0,    23,     0,
      0,     0,   309,   310,   311,   312,   313,    26,     0,    27,
-   315,     0,     0,     0,   316,  -781,     0,     0,     0,     0,
+   315,     0,     0,     0,   316,  -782,     0,     0,     0,     0,
    317,     0,     0,   318,     0,     0,     0,     0,     0,     0,
      0,   319,   320,   321,     0,     0,     0,     0,     0,   322,
    323,   324,     0,     0,     0,   539,   325,     7,     8,     9,
@@ -2174,9 +2147,9 @@ static const short yytable[] = {    59,
     20,     0,   304,   305,   306,    21,   307,   308,     0,    23,
      0,     0,     0,   309,   310,   311,   312,   313,    26,     0,
     27,    28,  -308,     0,     0,   316,     0,     0,     0,     0,
-     0,   317,     0,     0,  1477,     0,     0,     0,     0,     0,
-     0,     0,   319,   320,  1478,     0,     0,     0,     0,     0,
-   322,   323,   324,     0,     0,     0,  1558,  1479,   296,     8,
+     0,   317,     0,     0,  1478,     0,     0,     0,     0,     0,
+     0,     0,   319,   320,  1479,     0,     0,     0,     0,     0,
+   322,   323,   324,     0,     0,     0,  1559,  1480,   296,     8,
      9,    10,     0,    12,   297,   298,   299,     0,   300,    14,
      0,     0,     0,     0,   326,     0,     0,     0,     0,     0,
      0,     0,     0,    16,   301,    17,     0,    19,     0,   302,
@@ -2185,7 +2158,7 @@ static const short yytable[] = {    59,
      0,    27,   315,     0,     0,  -194,   316,     0,     0,     0,
      0,     0,   317,     0,     0,   318,     0,     0,     0,     0,
      0,     0,     0,   319,   320,   321,     0,     0,     0,     0,
-     0,   322,   323,   324,     0,     0,     0,   830,   325,   296,
+     0,   322,   323,   324,     0,     0,     0,   831,   325,   296,
      8,     9,    10,     0,    12,   521,   298,   299,     0,   300,
     14,     0,     0,     0,     0,   326,     0,     0,     0,     0,
      0,     0,     0,     0,    16,   301,    17,     0,    19,     0,
@@ -2196,12 +2169,12 @@ static const short yytable[] = {    59,
      0,    12,    13,     0,   319,   320,   321,    14,     0,     0,
      0,     0,   322,   323,   324,     0,     0,     0,     0,   325,
      0,    16,     0,    17,     0,     0,     0,     0,     0,    20,
-     0,   260,   261,     0,  -781,     0,   326,     0,    23,     0,
+     0,   260,   261,     0,  -782,     0,   326,     0,    23,     0,
    262,     0,     0,     0,     0,     0,     0,    26,     0,   130,
    131,     0,   263,     0,     0,     0,   264,   265,   266,   267,
    268,   269,   270,   271,   272,   273,   274,   275,   276,   277,
    278,   279,   280,   281,   282,   283,   284,     0,     0,   285,
-   286,   287,     0,     0,   288,     0,   918,   289,   296,     8,
+   286,   287,     0,     0,   288,     0,   919,   289,   296,     8,
      9,    10,     0,    12,   521,   298,   299,     0,   300,    14,
      0,     0,     0,   290,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    16,   301,    17,     0,    19,     0,   302,
@@ -2210,7 +2183,7 @@ static const short yytable[] = {    59,
      0,    27,   315,     0,     0,     0,   316,     0,     0,     0,
      0,     0,   317,     0,     0,   318,     0,     0,     0,     0,
      0,     0,     0,   319,   320,   321,     0,     0,     0,     0,
-     0,   322,   323,   324,     0,     0,     0,   920,   325,   296,
+     0,   322,   323,   324,     0,     0,     0,   921,   325,   296,
      8,     9,    10,     0,    12,   521,   298,   299,     0,   300,
     14,     0,     0,     0,     0,   326,     0,     0,     0,     0,
      0,     0,     0,     0,    16,   301,    17,     0,    19,     0,
@@ -2219,7 +2192,7 @@ static const short yytable[] = {    59,
     26,     0,    27,   315,     0,     0,     0,   316,     0,     0,
      0,     0,     0,   317,     0,     0,   318,     0,     0,     0,
      0,     0,     0,     0,   319,   320,   321,     0,     0,     0,
-     0,     0,   322,   323,   324,     0,     0,     0,  1490,   325,
+     0,     0,   322,   323,   324,     0,     0,     0,  1491,   325,
    296,     8,     9,    10,     0,    12,   521,   298,   299,     0,
    300,    14,     0,     0,     0,     0,   326,     0,     0,     0,
      0,     0,     0,     0,     0,    16,   301,    17,     0,    19,
@@ -2238,8 +2211,15 @@ static const short yytable[] = {    59,
    317,     0,   760,   318,     7,     8,   761,    10,   163,    12,
     13,   319,   320,   321,     0,    14,     0,     0,     0,   322,
    323,   324,     0,     0,     0,     0,   325,     0,     0,    16,
+     0,    17,    18,    19,     0,     0,     0,    20,  -522,     0,
+     0,     0,    21,   326,   870,     0,    23,   762,     0,   164,
+     0,     0,     0,     0,     0,    26,     0,    27,    28,     0,
+     0,   763,     0,   764,     0,     0,     0,     0,     0,     0,
+     0,    30,   760,     0,     7,     8,   761,    10,   163,    12,
+    13,    31,     0,     0,     0,    14,     0,     0,     0,    32,
+     0,     0,     0,     0,    33,     0,     0,     0,     0,    16,
      0,    17,    18,    19,     0,     0,     0,    20,  -524,     0,
-     0,     0,    21,   326,   869,     0,    23,   762,     0,   164,
+  -522,     0,    21,     0,     0,     0,    23,   762,     0,   164,
      0,     0,     0,     0,     0,    26,     0,    27,    28,     0,
      0,   763,     0,   764,     0,     0,     0,     0,     0,     0,
      0,    30,   760,     0,     7,     8,   761,    10,   163,    12,
@@ -2251,89 +2231,89 @@ static const short yytable[] = {    59,
      0,   763,     0,   764,     0,     0,     0,     0,     0,     0,
      0,    30,     0,     0,     0,     0,     0,     0,     0,     0,
      0,    31,     0,     0,     0,     0,     0,     0,     0,    32,
-     0,     0,     0,     0,    33,     0,     0,  1269,  1270,  1271,
-    10,   163,    12,   297,   298,   299,     0,   300,    14,  1272,
-  -523,  1273,  1274,  1275,  1276,  1277,  1278,  1279,  1280,  1281,
-  1282,    15,    16,   301,    17,    18,    19,     0,   302,   303,
-    20,     0,   304,   305,   306,    21,   307,   308,  1283,    23,
-  1284,     0,     0,   309,   310,   311,   312,   313,    26,     0,
-  1285,   315,   704,     0,  1286,   316,     0,     0,     0,     0,
+     0,     0,     0,     0,    33,     0,     0,  1270,  1271,  1272,
+    10,   163,    12,   297,   298,   299,     0,   300,    14,  1273,
+  -523,  1274,  1275,  1276,  1277,  1278,  1279,  1280,  1281,  1282,
+  1283,    15,    16,   301,    17,    18,    19,     0,   302,   303,
+    20,     0,   304,   305,   306,    21,   307,   308,  1284,    23,
+  1285,     0,     0,   309,   310,   311,   312,   313,    26,     0,
+  1286,   315,   704,     0,  1287,   316,     0,     0,     0,     0,
      0,   317,     0,     0,   318,     0,     0,     0,     0,     0,
      0,     0,   319,   320,   321,     0,     0,     0,     0,     0,
-   322,   323,   324,     0,     0,     0,     0,   325,     0,  1287,
+   322,   323,   324,     0,     0,     0,     0,   325,     0,  1288,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,  1414,   326,  1269,  1270,  1271,    10,   163,
-    12,   297,   298,   299,     0,   300,    14,  1272,     0,  1273,
-  1274,  1275,  1276,  1277,  1278,  1279,  1280,  1281,  1282,    15,
+     0,     0,     0,  1415,   326,  1270,  1271,  1272,    10,   163,
+    12,   297,   298,   299,     0,   300,    14,  1273,     0,  1274,
+  1275,  1276,  1277,  1278,  1279,  1280,  1281,  1282,  1283,    15,
     16,   301,    17,    18,    19,     0,   302,   303,    20,     0,
-   304,   305,   306,    21,   307,   308,  1283,    23,  1284,     0,
-     0,   309,   310,   311,   312,   313,    26,     0,  1285,   315,
-   704,     0,  1286,   316,     0,     0,     0,     0,     0,   317,
+   304,   305,   306,    21,   307,   308,  1284,    23,  1285,     0,
+     0,   309,   310,   311,   312,   313,    26,     0,  1286,   315,
+   704,     0,  1287,   316,     0,     0,     0,     0,     0,   317,
      0,     0,   318,     0,     0,     0,     0,     0,     0,     0,
    319,   320,   321,     0,     0,     0,     0,     0,   322,   323,
-   324,     0,     0,     0,     0,   325,     0,  1287,     0,  1269,
-  1270,  1271,    10,   163,    12,   297,   298,   299,     0,   300,
-    14,  1272,   326,  1273,  1274,  1275,  1276,  1277,  1278,  1279,
-  1280,  1281,  1282,    15,    16,   301,    17,    18,    19,     0,
+   324,     0,     0,     0,     0,   325,     0,  1288,     0,  1270,
+  1271,  1272,    10,   163,    12,   297,   298,   299,     0,   300,
+    14,  1273,   326,  1274,  1275,  1276,  1277,  1278,  1279,  1280,
+  1281,  1282,  1283,    15,    16,   301,    17,    18,    19,     0,
    302,   303,    20,     0,   304,   305,   306,    21,   307,   308,
-  1283,    23,  1284,     0,     0,   309,   310,   311,   312,   313,
-    26,     0,  1285,   315,  1535,     0,  1286,   316,     0,     0,
+  1284,    23,  1285,     0,     0,   309,   310,   311,   312,   313,
+    26,     0,  1286,   315,  1536,     0,  1287,   316,     0,     0,
      0,     0,     0,   317,     0,     0,   318,     0,     0,     0,
      0,     0,     0,     0,   319,   320,   321,     0,     0,     0,
      0,     0,   322,   323,   324,     0,     0,     0,     0,   325,
-     0,  1287,     0,  1269,  1270,  1271,    10,   163,    12,   297,
-   298,   299,     0,   300,    14,  1272,   326,  1273,  1274,  1275,
-  1276,  1277,  1278,  1279,  1280,  1281,  1282,    15,    16,   301,
+     0,  1288,     0,  1270,  1271,  1272,    10,   163,    12,   297,
+   298,   299,     0,   300,    14,  1273,   326,  1274,  1275,  1276,
+  1277,  1278,  1279,  1280,  1281,  1282,  1283,    15,    16,   301,
     17,    18,    19,     0,   302,   303,    20,     0,   304,   305,
-   306,    21,   307,   308,  1283,    23,  1284,     0,     0,   309,
-   310,   311,   312,   313,    26,     0,  1285,   315,     0,     0,
-  1286,   316,     0,     0,     0,     0,     0,   317,     0,     0,
+   306,    21,   307,   308,  1284,    23,  1285,     0,     0,   309,
+   310,   311,   312,   313,    26,     0,  1286,   315,     0,     0,
+  1287,   316,     0,     0,     0,     0,     0,   317,     0,     0,
    318,     0,     0,     0,     0,     0,     0,     0,   319,   320,
    321,     0,     0,     0,     0,     0,   322,   323,   324,     0,
-     0,     0,     0,   325,     0,  1287,   296,     8,     9,    10,
+     0,     0,     0,   325,     0,  1288,   296,     8,     9,    10,
    163,    12,   297,   298,   299,   717,   300,    14,     0,     0,
    326,     0,     0,     0,     0,     0,     0,     0,     0,     0,
      0,    16,   301,    17,    18,    19,     0,   302,   303,    20,
      0,   304,   305,   306,    21,   307,   308,     0,    23,     0,
    605,     0,   309,   310,   311,   312,   313,    26,     0,    27,
    315,     0,     0,     0,   316,     0,     0,     0,     0,     0,
-   317,     0,     0,   897,     0,     0,     0,     0,     0,     0,
-     0,   319,   320,   898,     0,     0,     0,     0,     0,   322,
-   323,   324,     0,   608,     0,     0,   899,   610,     7,     8,
+   317,     0,     0,   898,     0,     0,     0,     0,     0,     0,
+     0,   319,   320,   899,     0,     0,     0,     0,     0,   322,
+   323,   324,     0,   608,     0,     0,   900,   610,     7,     8,
      9,    10,   163,    12,   297,   298,   299,   717,   300,    14,
      0,     0,     0,   326,     0,     0,     0,     0,     0,     0,
      0,     0,     0,    16,   301,    17,    18,    19,     0,   302,
    303,    20,     0,   304,   305,   306,    21,   307,   308,     0,
     23,     0,   605,     0,   309,   310,   311,   312,   313,    26,
      0,    27,    28,     0,     0,     0,   316,     0,     0,     0,
-     0,     0,   317,     0,     0,  1169,     0,     0,     0,     0,
-     0,     0,     0,   319,   320,  1170,     0,     0,     0,     0,
-     0,   322,   323,   324,     0,   608,     0,     0,  1171,   610,
+     0,     0,   317,     0,     0,  1171,     0,     0,     0,     0,
+     0,     0,     0,   319,   320,  1172,     0,     0,     0,     0,
+     0,   322,   323,   324,     0,   608,     0,     0,  1173,   610,
    296,     8,     9,    10,     0,    12,   297,   298,   299,     0,
    300,    14,     0,     0,     0,   326,     0,     0,     0,     0,
      0,     0,     0,     0,     0,    16,   301,    17,     0,    19,
      0,   302,   303,    20,     0,   304,   305,   306,    21,   307,
    308,     0,    23,     0,   605,     0,   309,   310,   311,   312,
    313,    26,     0,    27,   315,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   317,     0,     0,   897,     0,     0,
-     0,     0,     0,     0,     0,   319,   320,   898,     0,     0,
+     0,     0,     0,     0,   317,     0,     0,   898,     0,     0,
+     0,     0,     0,     0,     0,   319,   320,   899,     0,     0,
      0,     0,     0,   322,   323,   324,     0,   608,     0,     0,
-   899,   610,     7,     8,     9,    10,     0,    12,   297,   298,
+   900,   610,     7,     8,     9,    10,     0,    12,   297,   298,
    299,     0,   300,    14,     0,     0,     0,   326,     0,     0,
      0,     0,     0,     0,     0,     0,     0,    16,   301,    17,
      0,    19,     0,   302,   303,    20,     0,   304,   305,   306,
     21,   307,   308,     0,    23,     0,   605,     0,   309,   310,
    311,   312,   313,    26,     0,    27,    28,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   317,     0,     0,  1169,
-     0,     0,     0,     0,     0,     0,     0,   319,   320,  1170,
+     0,     0,     0,     0,     0,     0,   317,     0,     0,  1171,
+     0,     0,     0,     0,     0,     0,     0,   319,   320,  1172,
      0,     0,     0,     0,     0,   322,   323,   324,     0,   608,
-     0,     0,  1171,   610,   296,     8,     9,    10,     0,    12,
+     0,     0,  1173,   610,   296,     8,     9,    10,     0,    12,
    521,   298,   299,     0,   300,    14,     0,     0,     0,   326,
      0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
    301,    17,     0,    19,     0,   302,   303,    20,     0,   304,
    305,   306,    21,   307,   308,     0,    23,     0,     0,     0,
    309,   310,   311,   312,   313,    26,     0,    27,   315,     0,
-     0,  1387,   316,     0,     0,     0,     0,     0,   317,     0,
+     0,  1388,   316,     0,     0,     0,     0,     0,   317,     0,
      0,   318,     0,     0,     0,     0,     0,     0,     0,   319,
    320,   321,     0,     0,     0,     0,     0,   322,   323,   324,
      0,     0,     0,     0,   325,   296,     8,     9,    10,   163,
@@ -2397,7 +2377,7 @@ static const short yytable[] = {    59,
     27,   315,     0,     0,     0,   316,     0,     0,     0,     0,
      0,   317,     0,     0,   540,     0,     0,     0,     0,     0,
      0,     0,   319,   320,   541,     0,     0,     0,     0,     0,
-   322,   323,   324,  1129,     8,     9,    10,   542,    12,   521,
+   322,   323,   324,  1131,     8,     9,    10,   542,    12,   521,
    298,   299,     0,   300,    14,     0,     0,     0,     0,     0,
      0,     0,     0,     0,   326,     0,     0,     0,    16,   301,
     17,     0,    19,     0,   302,   303,    20,     0,   304,   305,
@@ -2412,9 +2392,9 @@ static const short yytable[] = {    59,
    302,   303,    20,     0,   304,   305,   306,    21,   307,   308,
      0,    23,     0,     0,     0,   309,   310,   311,   312,   313,
     26,     0,    27,    28,     0,     0,     0,   316,     0,     0,
-     0,     0,     0,   317,     0,     0,  1477,     0,     0,     0,
-     0,     0,     0,     0,   319,   320,  1478,     0,     0,     0,
-     0,     0,   322,   323,   324,   296,     8,     9,    10,  1479,
+     0,     0,     0,   317,     0,     0,  1478,     0,     0,     0,
+     0,     0,     0,     0,   319,   320,  1479,     0,     0,     0,
+     0,     0,   322,   323,   324,   296,     8,     9,    10,  1480,
     12,   521,   298,   299,     0,   300,    14,     0,     0,     0,
      0,     0,     0,     0,     0,     0,   326,     0,     0,     0,
     16,   301,    17,     0,    19,     0,   302,   303,    20,     0,
@@ -2455,737 +2435,732 @@ static const short yytable[] = {    59,
    302,   303,    20,     0,   304,   305,   306,    21,   307,   308,
      0,    23,     0,     0,     0,   309,   310,   311,   312,   313,
     26,     0,    27,    28,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   317,     0,     0,  1477,  1023,     8,   761,
-    10,   201,    12,   202,   319,   320,  1478,     0,    14,     0,
-     0,     0,   322,   323,   324,     0,     0,     0,     0,  1479,
-     0,     0,    16,     0,    17,    18,     0,     0,     0,     0,
-    20,     0,     0,     0,     0,    21,   326,     0,     0,    23,
-     0,     0,     0,     0,     0,     0,     0,     0,    26,     0,
-    27,    28,     0,     0,     0,     0,  1025,     0,     0,     0,
-     0,     0,     0,     0,    30,     7,     8,     9,    10,   201,
-    12,   202,     0,     0,    31,     0,    14,     0,     0,     0,
-     0,     0,    32,     0,     0,     0,     0,    33,     0,     0,
-    16,     0,    17,    18,     0,     0,     0,     0,    20,     0,
-     0,     0,     0,    21,     0,     0,     0,    23,     0,     0,
-     0,     0,     0,     0,     0,     0,    26,     0,    27,    28,
+     0,     0,     0,   317,     0,     6,  1478,     7,     8,     9,
+    10,    11,    12,    13,   319,   320,  1479,     0,    14,     0,
+     0,     0,   322,   323,   324,     0,     0,     0,     0,  1480,
+     0,    15,    16,     0,    17,    18,    19,     0,     0,     0,
+    20,     0,     0,     0,     0,    21,   326,     0,    22,    23,
+    24,     0,    25,     0,     0,     0,     0,     0,    26,     0,
+    27,    28,     0,     0,    29,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    30,     0,     0,     0,     0,     0,
+     0,     0,     0,   760,    31,     7,     8,   761,    10,   163,
+    12,    13,    32,     0,     0,     0,    14,    33,     0,     0,
+     0,     0,    34,     0,     0,     0,     0,     0,     0,     0,
+    16,     0,    17,    18,    19,     0,     0,     0,    20,     0,
+     0,     0,     0,    21,     0,     0,     0,    23,   762,     0,
+   164,     0,     0,     0,     0,     0,    26,     0,    27,    28,
+     0,     0,   763,     0,   764,     0,     0,     0,     0,     0,
+     0,     0,    30,     7,     8,     9,    10,   201,    12,   202,
+     0,     0,    31,     0,    14,     0,     0,     0,     0,     0,
+    32,     0,     0,     0,     0,    33,     0,     0,    16,     0,
+    17,    18,     0,     0,     0,     0,    20,     0,     0,     0,
+     0,    21,     0,     0,     0,    23,     0,     0,     0,     0,
+     0,     0,     0,     0,    26,     0,    27,    28,     0,     0,
+  1405,     0,     7,     8,     9,    10,   201,    12,   202,     0,
+    30,     0,     0,    14,     0,     0,     0,     0,     0,     0,
+    31,     0,     0,     0,     0,     0,     0,    16,    32,    17,
+    18,     0,     0,    33,     0,    20,     0,     0,     0,     0,
+    21,     0,     0,     0,    23,     0,     0,     0,     0,     0,
+     0,     0,     0,    26,     0,    27,    28,     7,     8,     9,
+    10,   210,   211,   212,     0,     0,     0,     0,    14,    30,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    31,
+     0,     0,     0,     0,     0,    18,     0,    32,     0,     0,
+    20,     0,    33,     0,     0,    21,     0,     0,     0,    23,
+     0,   605,     0,     0,     0,     0,     0,     0,    26,     0,
+    27,    28,     0,     0,     0,     0,    18,     0,     0,     0,
+     0,     0,     0,     0,   189,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   190,     0,     0,     0,     0,     0,
+     0,     0,    32,     0,     0,     0,     0,  1408,   557,   558,
+   559,   560,   561,   562,   563,   564,   565,   566,   567,   568,
+   569,   570,   571,   572,   573,   574,   575,   576,   577,   578,
    557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
-   567,   568,    30,   570,   571,   572,   573,   574,   575,   576,
-   577,   578,    31,     0,     0,     0,     0,     0,     0,     0,
-    32,     0,     0,     0,     0,    33,   557,   558,   559,   560,
-   561,   562,   563,   564,   565,   566,   567,   568,   569,   570,
-   571,   572,   573,   574,   575,   576,   577,   578,     0,     0,
+   567,   568,   569,   570,   571,   572,   573,   574,   575,   576,
+   577,   578,   557,   558,   559,   560,   561,   562,   563,   564,
+   565,   566,   567,   568,   569,   570,   571,   572,   573,   574,
+   575,   576,   577,   578,     0,     0,     0,     0,  1223,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   646,     0,     0,
-  1525,   557,   558,   559,   560,   561,   562,   563,   564,   565,
-   566,   567,   568,   569,   570,   571,   572,   573,   574,   575,
-   576,   577,   578,  1543,   557,   558,   559,   560,   561,   562,
-   563,   564,   565,   566,   567,   568,   569,   570,   571,   572,
-   573,   574,   575,   576,   577,   578,   557,   558,   559,   560,
-   561,   562,   563,   564,   565,   566,   567,   568,   569,   570,
-   571,   572,   573,   574,   575,   576,   577,   578
+     0,     0,     0,   646,     0,     0,  1526,   557,   558,   559,
+   560,   561,   562,   563,   564,   565,   566,   567,   568,   569,
+   570,   571,   572,   573,   574,   575,   576,   577,   578,  1544,
+   557,   558,   559,   560,   561,   562,   563,   564,   565,   566,
+   567,   568,   569,   570,   571,   572,   573,   574,   575,   576,
+   577,   578,   557,   558,   559,   560,   561,   562,   563,   564,
+   565,   566,   567,   568,   569,   570,   571,   572,   573,   574,
+   575,   576,   577,   578,   557,   558,   559,   560,   561,   562,
+   563,   564,   565,   566,   567,   568,     0,   570,   571,   572,
+   573,   574,   575,   576,   577,   578
 };
 
 static const short yycheck[] = {     4,
-   147,   148,   157,     4,   205,   170,    55,   171,   398,    80,
-    46,   702,    80,    23,   172,    14,   448,   345,   398,   247,
-   351,   126,     4,   443,   398,   351,   470,   134,   491,   858,
-    35,     4,   300,   301,    35,   685,   609,    42,   133,   134,
-    76,   428,   243,   616,   552,    84,   369,   765,    42,   767,
-     4,    42,    57,    35,   205,     4,   774,    57,   133,    62,
-    42,     4,    35,   214,   178,   333,   678,    72,   589,    42,
-   124,   142,  1369,  1288,    42,  1298,    30,    31,    54,    84,
-  1459,    35,  1305,    88,    83,    90,    35,    92,    42,     4,
-   782,   292,    35,    42,   238,  1458,   788,   632,    11,    42,
-    42,    11,   107,   108,    33,    11,  1460,   106,    12,    27,
-    90,     1,    92,    31,    12,     0,     4,    37,   478,    58,
-    35,    59,   171,   351,  1192,  1193,   546,    42,   199,    62,
-    84,   136,   137,    54,   139,   495,   136,    75,  1206,    77,
-  1503,    62,    60,     0,   345,  1482,    64,    35,   352,   353,
-    58,   686,    62,    47,    62,    59,   161,   137,    62,    98,
-   165,    59,  1506,   136,    62,  1502,   610,   172,    58,    84,
-   161,   165,   172,   209,   165,   108,   152,     3,     4,     5,
-   109,    47,   136,   165,   213,   214,  1540,   136,   161,   109,
-   258,   109,   165,   147,   148,   108,   524,   165,   108,    93,
-   404,   405,   108,   895,   108,   208,  1585,   161,    42,     1,
-  1554,   165,   161,   216,   108,    60,   165,    48,     1,    47,
-   196,   136,   165,   165,  1561,    59,    74,    93,    94,   232,
-    56,    57,     4,     5,     9,   189,   190,  1600,   701,     7,
-  1463,    59,   108,    62,  1459,   244,   161,   342,  1545,    74,
-   165,    59,    93,    60,    80,    74,     4,    59,    54,    25,
-   910,    27,  1330,   913,   109,    93,    58,   342,    59,    37,
-    62,  1339,  1340,    60,  1342,    58,    48,    93,    74,    62,
-   108,   436,   389,   703,    56,    57,    61,    35,   293,  1512,
-     4,   109,    58,    57,   668,    59,    62,    47,   629,   338,
-   108,    65,   109,    95,   954,   955,   108,    47,    80,   696,
-   697,    60,    95,    47,    64,   462,   463,   108,  1010,    93,
-   325,    35,   109,   935,   475,    25,   899,   381,    59,    95,
-  1022,   165,    74,   338,   724,   658,   857,     4,     5,  1562,
-    38,   346,     9,    93,   724,     3,     4,     5,     6,   354,
-   355,   400,   351,    93,    94,   355,    54,    59,    58,    93,
-   109,    47,    62,  1055,   468,  1057,     4,     5,   108,   942,
-   598,   205,   476,    75,   354,   302,   303,   108,    64,   213,
-   214,    74,   355,    41,   338,    54,    47,    54,    47,    56,
-    57,   318,   720,   398,   321,    95,   401,   324,    56,    57,
-   327,   355,  1231,    70,   331,    74,   355,    93,   172,   243,
-    48,   984,   339,    80,   178,    93,   398,    12,    56,    57,
-  1488,  1489,    47,   338,   492,   430,    47,    94,   860,   633,
-    88,   939,    93,    94,    93,   438,   430,    59,    60,   430,
-   355,   205,    80,    64,   398,   474,   475,   108,   484,   213,
-   214,   456,   896,   482,     4,     5,   107,   430,   292,     3,
-     4,     5,     6,    60,    59,   494,    33,    62,    93,    64,
-  1120,  1121,    93,    94,    60,    59,   430,    25,   481,    54,
-    64,   430,    58,   398,   513,    54,    47,   492,    64,  1207,
-    54,    75,   492,    62,     8,     9,    47,    41,    48,    74,
-    14,    31,   456,   107,   108,    74,    56,    57,   462,   463,
-    54,   345,    56,    57,   519,   430,    75,   522,    77,   492,
-   525,    25,    36,    27,   529,   530,   531,   532,   533,  1358,
-   695,    45,    93,    47,     3,     4,     5,   542,   492,   519,
-    62,   456,    93,   492,    88,  1008,   936,   552,    58,   492,
-   555,   590,   659,   973,    58,    47,   936,    47,    62,   666,
-    83,    84,   936,    62,     3,     4,     5,     6,   402,  1142,
-    54,   666,    54,   904,    47,    74,    47,   492,   904,    93,
-   147,   148,   149,    47,   109,   590,   635,    56,    57,    58,
-    54,    95,    74,    25,   798,    27,   430,    74,  1171,    54,
-    58,    93,    41,    93,   609,   749,   807,   751,    93,    48,
-    74,   616,   756,   540,   541,     4,     5,    56,    57,    74,
-    93,   620,    93,    94,   191,   674,    58,   676,   677,    93,
-    62,   745,    54,   901,    59,    60,   590,   401,   402,    47,
-   474,   475,  1074,  1075,    54,    25,    54,    27,   482,    88,
-  1094,    54,   606,   607,   759,   609,   661,   667,    54,    44,
-   494,    47,   616,    95,    74,   779,    74,    56,    57,    54,
-   675,   720,    57,    75,   679,   590,   904,   108,    58,   513,
-    47,   661,    62,    33,    47,    93,     3,     4,     5,     6,
-  1153,   701,     9,   108,   609,     4,     5,   765,   109,   767,
-    47,   616,    94,   467,    47,   773,   774,    93,    94,   108,
-   474,   475,    47,   742,   478,    95,    62,   108,   482,   724,
-    47,   325,  1185,   772,    41,   929,    93,    94,    74,    47,
-    93,   495,   768,   769,    47,  1167,    47,    54,    62,    56,
-    57,   777,    11,    98,  1176,  1177,    93,    56,    57,  1181,
-    93,    93,    62,    70,     3,     4,     5,    60,    93,     3,
-   765,  1089,   767,    80,    74,   765,    93,   767,   773,   774,
-   724,    88,   772,   773,   774,    93,    93,   782,   783,   784,
-    93,   786,    93,   788,   108,     3,     4,     5,  1090,  1091,
-  1222,  1093,   765,    60,   767,   111,   961,   147,   148,   149,
-    94,   774,   636,   783,   784,    54,   786,    56,    57,   724,
-    94,   765,    62,   767,   111,    54,   765,    93,   767,    93,
-   774,   398,   765,    62,   767,   774,    59,    60,   782,    47,
-    59,   774,    59,    60,   788,    74,    54,    47,    56,    57,
-    54,   191,    74,   677,    54,  1049,  1050,  1051,    62,   453,
-   765,   856,   767,     3,     4,     5,   861,  1548,    54,   774,
-    74,  1005,  1006,  1007,    74,    74,    62,   782,    74,    54,
-    59,    60,   636,   788,    74,    93,   947,    62,    74,   456,
-    30,    59,    60,    93,   889,  1317,   720,    59,    60,    74,
-   895,     7,     8,     9,   899,   462,   463,   464,    14,    59,
-    60,  1015,  1016,    11,    54,   904,    56,    57,   742,     4,
-     5,   675,   109,   677,   678,    31,    54,   108,   522,    59,
-    36,   525,   108,  1355,    62,   529,   795,   796,   797,    45,
-  1044,   936,    59,   938,   939,   108,    74,   942,   542,    59,
-    60,   895,   869,   897,   898,   899,   108,    74,    75,    74,
-    77,   555,    59,    60,   936,   559,   720,    54,   109,    54,
-  1380,    56,    57,  1034,  1013,    74,  1034,     4,     5,  1297,
-   897,   898,    74,   807,   108,    70,  1396,  1045,   742,   984,
-   895,   745,   936,   587,   899,    80,   940,   941,   942,   593,
-  1026,   109,   997,  1140,  1141,   108,  1032,  1033,  1003,    94,
-  1036,  1037,     4,     5,  1040,  1010,   111,     4,     5,   773,
-   111,    48,    27,  1013,    74,   779,    74,  1022,    54,    56,
-    57,   936,  1169,  1170,     4,     5,    74,   942,   111,   111,
-   984,   108,   609,    27,   108,   108,    58,    31,  1242,   616,
-  1045,   108,    54,    80,     8,  1045,    48,   111,    93,    47,
-  1055,    48,  1057,    64,    56,    57,  1010,   109,    59,    56,
-    57,    93,  1482,    54,    44,    59,    60,    60,  1022,   984,
-     4,     5,  1045,  1144,    54,     9,    56,    57,    80,    36,
-  1085,    64,  1502,    80,  1198,  1199,    64,  1201,  1202,    64,
-  1204,  1045,   108,  1098,    60,  1010,  1045,     3,     4,     5,
-    62,  1055,  1045,  1057,     4,     5,  1496,  1022,     4,     5,
-    64,  1531,   462,   463,   464,    64,  1496,    64,  1098,   108,
-    54,   108,    56,    57,     9,   111,   108,    12,    93,   108,
-  1045,  1295,    59,  1297,    62,  1203,    70,  1142,  1296,  1207,
-  1055,  1561,  1057,  1153,     4,     5,    80,   724,    54,  1569,
-    56,    57,    48,   108,    54,   108,    56,    57,  1590,  1164,
-    56,    57,    47,  1164,   108,   108,  1171,     8,     9,  1096,
-    70,   935,  1500,    14,    59,   108,    61,    62,    75,    64,
-    80,    75,    75,    75,    80,   108,  1140,  1141,  1142,   108,
-    75,  1164,    77,    62,    54,    36,    56,    57,    62,   108,
-    59,    62,  1207,   108,    45,   782,   108,  1207,    93,    94,
-  1164,   788,   111,  1327,  1328,  1169,  1170,  1171,    94,    74,
-   111,  1164,    88,   108,    90,    88,    92,  1142,     3,     4,
-     5,    47,     7,   108,  1207,     3,     4,     5,   108,     7,
-     8,     9,  1169,  1170,   111,    60,  1295,   109,  1297,  1164,
-   108,  1015,  1016,  1207,   111,    30,  1171,   108,  1207,   108,
-   108,   865,    37,    31,  1207,   109,    59,    64,    36,    64,
-    59,   137,    59,   139,    27,   108,   108,   108,    31,    54,
-  1044,    56,    57,  1288,    93,    93,    54,    93,    56,    57,
-    58,  1296,  1207,  1298,    93,   899,   109,  1298,   109,  1500,
-  1305,  1337,  1338,   108,  1305,   108,    59,    60,     8,  1314,
-   111,    64,  1426,  1427,  1428,  1288,     4,     5,   895,  1474,
-     8,     9,   899,   108,   108,  1298,    14,     3,     4,     5,
-  1477,  1478,  1305,   111,  1288,   103,   104,   105,   108,   449,
-    28,   108,    30,   109,  1298,  1288,   456,   108,    36,   108,
-    33,  1305,   108,   108,   108,  1298,    47,    45,   108,   936,
-    64,  1288,  1305,  1528,   108,   942,    54,    54,    56,    57,
-  1406,  1485,  1486,  1288,   108,   942,   108,    62,    54,    12,
-    56,    57,    58,  1298,    80,    81,    82,    83,    84,   111,
-  1305,    47,   108,   108,    27,    86,    87,   108,    31,  1003,
-    91,    92,    93,    94,    96,    93,     9,   984,    62,    62,
-   520,    60,    60,    60,    47,    16,    93,   984,     3,     4,
-     5,    60,     7,     8,     9,    93,    59,    60,   108,    62,
-   108,    64,    60,  1010,  1198,  1199,   108,  1201,  1202,  1553,
-  1204,   108,     3,     4,     5,  1022,    31,   108,  1453,   108,
-   316,    36,  1501,  1458,  1459,  1460,    64,  1458,  1463,    54,
-    93,    94,  1463,  1297,    93,     3,     4,     5,     6,   111,
-   580,    56,    57,    93,  1479,   108,   586,    17,  1055,    60,
-  1057,    54,   107,    97,   108,  1458,  1459,    48,   354,    60,
-  1463,  1496,   108,   108,    33,    56,    57,  1533,  1503,  1453,
-    11,   108,  1503,    41,  1458,  1459,  1460,  1512,    60,  1463,
-    60,  1512,    60,   623,    93,  1458,  1459,    59,    56,    57,
-  1463,    64,   108,  1477,  1478,    60,   108,    11,   108,    60,
-  1503,    11,  1296,  1297,    60,  1540,     0,     0,  1453,  1512,
-     0,     2,  1496,  1458,  1459,  1460,    35,   166,  1463,  1503,
-  1477,  1478,  1394,     3,     4,     5,     6,  1562,  1512,   659,
-  1503,  1562,   936,  1327,  1328,  1142,   165,  1171,   161,  1512,
-     3,     4,     5,  1140,  1141,  1142,   430,  1527,   773,     4,
-     5,  1496,   448,   449,     9,  1153,  1540,    94,  1503,  1562,
-   456,    41,   942,   139,  1171,  1600,  1600,  1512,    48,  1600,
-  1379,  1232,  1169,  1170,  1171,    14,    56,    57,  1562,   148,
-   149,   295,   708,    22,  1218,  1219,  1220,  1221,   922,  1562,
-   237,   917,    47,    56,    57,  1540,  1008,  1600,  1185,    54,
-    80,    56,    57,  1045,   984,  1205,   773,   642,    88,   590,
-   915,   196,   124,   342,  1298,    70,  1600,  1562,  1165,  1548,
-  1569,  1579,   191,   519,   520,    80,    65,  1600,  1517,  1581,
-   992,  1314,  1426,  1427,  1428,    90,  1500,    -1,    93,    94,
-     3,     4,     5,    -1,     7,     8,     9,  1281,    -1,    -1,
-    -1,     3,     4,     5,     6,  1600,   552,    -1,   554,    -1,
-    -1,   557,   558,    -1,   560,   561,   562,   563,   564,   565,
-   566,   567,   568,   569,   570,   571,   572,   573,   574,   575,
-   576,   577,   578,    -1,   580,   124,    -1,    -1,    -1,    41,
-   586,  1485,  1486,    56,    57,    -1,    -1,   740,     3,     4,
-     5,    -1,    54,    -1,    56,    57,    -1,   146,    60,    -1,
-    62,    -1,    -1,    -1,    -1,   855,   856,    -1,    70,    80,
-   616,   861,  1356,    -1,    -1,    -1,    -1,   623,    80,    -1,
-    -1,    -1,    -1,    -1,    -1,   875,    88,   877,   781,   879,
-    -1,    93,    -1,   104,   787,    -1,    -1,    -1,    -1,   645,
-   646,    56,    57,    -1,    -1,  1389,   325,    -1,    -1,  1553,
-  1140,  1141,  1142,    -1,    -1,   661,    -1,     3,     4,     5,
-     6,    -1,   133,     9,    -1,     1,    -1,     3,     4,     5,
-     6,   142,     8,    -1,   924,    -1,   344,   345,   346,  1169,
-  1170,  1171,    -1,    -1,   233,   234,    -1,     3,     4,     5,
-     6,    -1,     3,     4,     5,    41,    -1,    -1,   247,    -1,
-  1407,    47,   708,    -1,    -1,    41,    -1,    -1,    54,  1453,
-    56,    57,    48,    -1,    -1,  1459,  1460,   967,    54,    -1,
-    56,    57,    38,    39,    70,    41,    -1,    -1,   199,    -1,
-    -1,    -1,    -1,    -1,    80,  1479,    -1,   890,    54,   892,
-    56,    57,    88,    -1,    90,    56,    57,    93,    94,     3,
-     4,     5,    88,    -1,     3,     4,     5,     6,   764,    -1,
-    -1,    -1,   233,    -1,    -1,    -1,    -1,    -1,   317,    -1,
-  1477,  1478,  1479,    -1,    -1,    -1,    -1,   783,   784,  1496,
-   786,   344,   345,   346,   463,   464,    -1,   258,    -1,    -1,
-    -1,    -1,    41,    -1,    48,   801,  1540,    -1,    -1,     3,
-     4,     5,    56,    57,    -1,    54,    -1,    56,    57,    -1,
-   359,    60,  1556,     3,     4,     5,     6,   823,    -1,   368,
-    -1,    70,    -1,    -1,     3,     4,     5,     3,     4,     5,
-     6,    80,   381,    -1,  1578,     3,     4,     5,    -1,    88,
-    -1,  1585,    -1,   522,    93,    -1,   525,    -1,    -1,   855,
-   856,    41,    56,    57,   860,   861,    -1,    -1,    48,    -1,
-    -1,    -1,   541,   542,    -1,    41,    56,    57,    -1,   875,
-    -1,   877,    48,   879,    -1,    -1,   555,    56,    57,   350,
-    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,
-    80,    -1,    -1,    -1,     4,    -1,    -1,    -1,    88,    -1,
-    -1,  1054,    -1,  1056,    14,  1155,    -1,  1157,   914,  1159,
-    -1,    -1,    88,    -1,    24,    -1,    -1,  1407,   924,    -1,
-    30,    31,    -1,    33,    -1,    35,    -1,     3,     4,     5,
-     6,    -1,    42,   939,    -1,    -1,   407,   616,   606,   607,
-   489,   609,    -1,    -1,    -1,    55,   952,    57,   616,    -1,
-    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,  1111,    -1,
-    -1,   967,    72,    -1,    -1,    41,    -1,    -1,    -1,   449,
-    -1,    -1,    48,    83,    84,    -1,   456,    -1,   984,    -1,
-    56,    57,    -1,    -1,    -1,    -1,    -1,  1477,  1478,  1479,
-    -1,    -1,    -1,     3,     4,     5,   106,    -1,    -1,    -1,
-    -1,    -1,    -1,  1253,    80,   554,   674,    -1,   676,   677,
-    -1,   679,    88,    -1,    -1,    -1,    -1,    -1,   489,  1025,
-     3,     4,     5,     6,   134,    -1,   136,    -1,    -1,    -1,
-   140,    -1,    -1,   143,   144,    -1,  1189,   147,   148,   149,
-   520,  1194,    -1,   606,   607,   516,    56,    57,    -1,   598,
-    -1,   161,   720,    -1,    -1,   165,    -1,    -1,    41,    -1,
-    -1,   171,   172,    -1,    -1,    48,    -1,    -1,  1074,  1075,
-    -1,    -1,  1078,    56,    57,    -1,    -1,    -1,    -1,   189,
-   190,   191,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
-     6,    -1,  1098,  1246,    -1,    -1,    -1,    80,    -1,    -1,
-   580,    -1,    -1,    -1,    -1,    88,   586,    -1,   218,    -1,
-    -1,   674,    -1,   676,   677,    -1,   679,    -1,   667,    -1,
-    -1,    -1,   801,    -1,   234,    41,    -1,    -1,    -1,   678,
-    -1,    47,   603,    -1,   244,    -1,   616,    -1,    54,   807,
-    56,    57,    -1,   623,    -1,   255,    -1,    -1,   619,  1155,
-    -1,  1157,    -1,  1159,    70,    -1,    -1,   720,    -1,   708,
-    -1,  1167,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
-  1176,  1177,    88,    -1,    90,  1181,    -1,    93,    94,     7,
-     8,     9,    -1,   293,   294,    -1,    14,    -1,    -1,    -1,
-  1196,  1197,    -1,  1346,  1347,     3,     4,     5,     6,    -1,
-    -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,    36,    -1,
-  1363,    -1,   880,    -1,   882,    -1,  1222,    45,    -1,   898,
-   899,    -1,    -1,    -1,    -1,   893,    -1,    -1,   338,   897,
-   898,   899,   342,    41,   344,   345,   346,    -1,    -1,    -1,
-    48,    -1,    -1,    -1,   807,   355,    -1,  1253,    56,    57,
-    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,
-    -1,     9,    -1,   942,    -1,    -1,  1419,  1420,    -1,    -1,
-    -1,  1277,   940,   941,   942,    -1,    -1,    -1,    -1,   389,
-    88,    -1,    -1,    -1,    -1,  1438,  1439,    -1,   398,    -1,
-   400,   401,    -1,    41,    -1,    -1,    -1,    -1,    -1,    47,
-    -1,    -1,    -1,    -1,   414,   984,    54,   417,    56,    57,
-    -1,  1317,   422,    -1,    -1,    -1,   984,   880,    -1,   882,
-   430,   801,    70,    -1,    -1,    -1,    -1,  1333,    -1,    -1,
-   893,    -1,    80,    -1,   897,   898,    -1,    -1,    -1,    -1,
-    88,    -1,    90,    -1,    -1,    93,    94,    -1,   458,  1355,
-   460,    -1,   462,   463,   464,     7,     8,     9,   468,     4,
-     5,    -1,    14,   473,     4,     5,   476,     7,     8,     9,
-    -1,    -1,    12,   922,    14,   855,   856,   940,   941,    31,
-    -1,   861,   492,    -1,    36,    -1,   935,    -1,    28,    -1,
-    30,    31,    -1,    45,    -1,   875,    36,   877,    -1,   879,
-    -1,  1407,    47,    -1,    -1,    45,    -1,    47,    60,    54,
-    -1,    56,    57,    -1,    54,    -1,    56,    57,  1424,  1425,
-   530,   531,   532,   533,    -1,    70,    -1,  1433,    -1,    -1,
-    70,    -1,   903,    -1,   905,    80,    -1,    -1,    -1,    -1,
-    80,    -1,    -1,    -1,   924,    90,    -1,    -1,    93,    94,
-    90,    -1,    -1,    93,    94,  1461,    -1,    -1,    -1,    -1,
-    -1,    -1,  1141,  1142,     4,     5,    -1,    -1,    -1,     9,
-  1138,  1139,  1140,  1141,  1142,    -1,   947,    -1,  1146,    -1,
-   590,    -1,   592,    -1,    -1,    -1,    -1,   967,    -1,    -1,
-    -1,  1170,  1171,    -1,   604,    -1,   606,   607,    -1,   609,
-    -1,  1169,  1170,  1171,   984,    -1,   616,    47,    -1,    -1,
-   620,    -1,    -1,    -1,    54,    -1,    56,    57,    78,    79,
-    80,    81,    82,    83,    84,   635,  1075,    -1,    -1,    -1,
-    70,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    80,    -1,     3,     4,     5,     6,    -1,    -1,     9,   659,
-    90,    -1,    -1,    93,    94,    -1,   666,    -1,    -1,    -1,
-    -1,    -1,    -1,  1034,   674,   675,   676,   677,   678,   679,
-    -1,    -1,    -1,    -1,    -1,  1138,  1139,  1140,  1141,    -1,
-    41,    -1,    -1,  1146,  1590,    -1,    47,    -1,  1256,  1257,
-    -1,  1259,    -1,    54,    -1,    56,    57,     3,     4,     5,
-     6,    -1,    -1,    -1,    -1,    -1,  1169,  1170,    -1,    70,
-   720,    -1,  1161,    -1,   724,     4,     5,    -1,  1167,    80,
-     9,   731,   732,    -1,   734,    -1,    -1,    88,    -1,    90,
-    -1,    -1,    93,    94,    -1,    41,    -1,    -1,    -1,    -1,
-    -1,    -1,    48,    -1,    -1,    -1,  1117,    -1,    -1,    -1,
-    56,    57,   762,    -1,    -1,   765,    -1,   767,    47,    -1,
-    -1,    -1,   772,   773,   774,    54,    -1,    56,    57,    -1,
-    -1,    -1,   782,  1144,    80,  1155,    -1,  1157,   788,  1159,
-    -1,    70,    88,    -1,    -1,   795,   796,   797,    -1,    -1,
-    -1,    80,    -1,  1256,  1257,    -1,  1259,   807,    -1,    -1,
-    -1,    90,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,
-    -1,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,  1407,    -1,
-    -1,    -1,  1203,  1282,  1283,    -1,    -1,    -1,    28,    -1,
-    30,    31,    32,    -1,    -1,    -1,    36,    -1,    -1,    -1,
-    -1,    41,     4,     5,    -1,    45,     8,     9,    48,    -1,
-    -1,    -1,    14,    -1,    54,    -1,    56,    57,    -1,    -1,
-   880,    -1,   882,  1253,    -1,    -1,    28,    -1,    30,   889,
-    70,    -1,    -1,   893,    36,   895,    -1,   897,   898,   899,
-    80,    -1,    -1,    45,   904,    -1,    -1,    -1,    88,  1478,
-  1479,    -1,    54,    93,    56,    57,    58,    -1,    98,    -1,
-     4,     5,    -1,    -1,     8,     9,    -1,    -1,    -1,    -1,
-    14,    -1,  1371,    -1,    -1,    -1,   936,     4,   938,    -1,
-   940,   941,   942,    -1,    28,    -1,    30,    14,    -1,    -1,
-    -1,    93,    36,    -1,  1393,  1394,    23,    24,     7,     8,
-     9,    45,    -1,    30,    31,    14,    33,    -1,    35,    -1,
-    54,    -1,    56,    57,    -1,    42,    -1,    -1,    -1,    -1,
-    -1,    -1,    31,    -1,   984,    -1,    -1,    36,    55,    -1,
-    57,    -1,    -1,    -1,    -1,    -1,    45,   997,    65,    -1,
-    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    -1,
-  1010,    60,    -1,  1013,    -1,    -1,    -1,    84,    -1,    -1,
-    -1,    -1,  1022,    -1,    -1,     3,     4,     5,     6,     7,
-     8,     9,  1471,    -1,    -1,  1035,    14,  1407,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,  1045,    -1,    -1,    -1,    -1,
-    28,    -1,    30,    31,    32,  1055,    -1,  1057,    36,    -1,
-    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,   136,
-    48,    -1,    -1,   140,    -1,    -1,    54,   144,    56,    57,
-   147,   148,   149,    -1,    -1,  1085,    -1,    -1,    -1,    -1,
-  1090,  1091,    70,  1093,   161,    -1,    -1,    -1,   165,    -1,
-    -1,    -1,    80,    -1,   171,   172,    -1,    -1,    -1,    -1,
-    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,
-    98,    -1,   189,   190,   191,    -1,     4,     5,    -1,     7,
-     8,     9,    -1,    -1,    12,    -1,    14,    -1,  1138,  1139,
-  1140,  1141,  1142,    -1,    -1,    -1,  1146,    -1,    -1,    -1,
-    28,   218,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    -1,  1169,
-  1170,  1171,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
-   107,   108,    -1,    -1,     3,     4,     5,     6,   255,     1,
-     9,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
-  1200,    -1,    14,    -1,    -1,  1205,    -1,  1207,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    27,    28,    -1,    30,    31,
-    32,    -1,    41,    -1,    36,    -1,   293,   294,    -1,    41,
-    -1,    -1,    44,    45,    46,    54,    48,    56,    57,    -1,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,
-    -1,    70,    -1,    -1,    -1,    -1,  1256,  1257,    70,  1259,
-    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,    80,    88,
-    -1,   338,    -1,    -1,    93,   342,    88,   344,   345,   346,
-    -1,    93,    -1,    -1,   351,    -1,    98,    -1,   355,    -1,
-    -1,    -1,    -1,    -1,    -1,  1295,  1296,  1297,    70,    71,
-    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-    82,    83,    84,     1,  1314,     3,     4,     5,     6,     7,
-     8,     9,   389,    -1,    -1,    -1,    14,    -1,    -1,    -1,
-    -1,   398,    -1,   400,   401,    -1,    -1,    -1,    -1,    -1,
-    28,    -1,    30,    31,    32,    -1,    -1,   414,    36,    37,
-   417,    -1,    -1,    41,    -1,   422,    -1,    45,    46,    -1,
-    48,    -1,    -1,   430,    -1,    -1,    54,    -1,    56,    57,
-    -1,    -1,    60,    -1,    62,    -1,    -1,     3,     4,     5,
-     6,    -1,    70,     9,     3,     4,     5,     6,    -1,    -1,
-     9,   458,    80,   460,    -1,   462,   463,   464,   325,    -1,
-    88,   468,    -1,    -1,    -1,    93,   473,  1407,    -1,   476,
-    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    -1,
-    -1,   109,    41,    -1,   491,   492,    -1,    -1,    54,    -1,
-    56,    57,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
-    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    70,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
-    -1,    80,    88,   530,   531,   532,   533,    93,    -1,    88,
-    -1,   398,    -1,    -1,    93,    -1,    -1,  1477,  1478,  1479,
-     3,     4,     5,     6,     7,     8,     9,    -1,    -1,    12,
-    -1,    14,     3,     4,     5,     6,  1496,    -1,     9,    -1,
-    -1,  1501,    -1,    -1,    -1,    28,    -1,    30,    31,    -1,
-    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,    -1,
-    -1,    -1,    45,   590,    47,   592,    -1,    -1,    -1,   456,
-    41,    54,    -1,    56,    57,    -1,    47,    -1,    -1,   606,
-   607,    -1,   609,    54,    -1,    56,    57,    70,    -1,   616,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    70,
-    -1,    -1,   629,    -1,    -1,    88,    -1,    90,   635,    80,
-    93,    94,    -1,    -1,    -1,    -1,    -1,    88,    -1,    90,
-    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   659,    -1,    -1,   522,    -1,    -1,   525,    -1,
-   667,    -1,   529,   530,   531,   532,   533,   674,   675,   676,
-   677,   678,   679,    -1,    -1,   542,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,   555,    -1,
-    -1,    -1,    -1,    -1,   701,    -1,    -1,    -1,   189,   190,
-   191,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   720,    -1,    -1,    -1,   724,    -1,    -1,
-    -1,    -1,    -1,    -1,   731,   732,    -1,   734,    -1,    -1,
-     4,     5,    -1,    -1,     8,     9,    -1,    -1,    -1,    -1,
-    14,    -1,   609,    -1,    -1,    -1,    -1,    -1,    -1,   616,
-    -1,    -1,    -1,    -1,    28,   762,    30,    -1,   765,    -1,
-   767,    -1,    36,    -1,    -1,   772,   773,   774,    -1,    -1,
-    -1,    45,    -1,    47,    -1,   782,    -1,    -1,    -1,    -1,
-    54,   788,    56,    57,    -1,    -1,    -1,    -1,   795,   796,
-   797,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,
-   807,    -1,    -1,    -1,    -1,    -1,    80,     4,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    90,    -1,    -1,    93,
-    94,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
-     7,     8,     9,    30,    31,    -1,    33,    14,    35,    -1,
-    -1,    -1,    -1,    -1,    -1,    42,    -1,    -1,    -1,    -1,
-    -1,    28,    -1,    30,    31,    -1,    -1,   724,    55,    36,
-    57,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,
-    47,    -1,    -1,   880,    -1,   882,    -1,    54,    -1,    56,
-    57,    -1,   889,    80,    -1,    -1,   893,    -1,   895,    -1,
-   897,   898,   899,    70,    -1,    -1,    -1,   904,    -1,    -1,
-    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    88,    -1,    90,    -1,   782,    93,    94,    -1,    -1,
-    -1,   788,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   936,
-    -1,   938,    -1,   940,   941,   942,   133,   134,    -1,   136,
-    -1,    -1,    -1,   140,    -1,   142,    -1,   144,    -1,    -1,
-   147,   148,   149,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   161,    -1,    -1,   458,   165,   460,
-    -1,   462,   463,   464,   171,   172,    -1,   984,    -1,    -1,
-    -1,    -1,   473,    -1,    -1,    -1,    -1,    -1,    -1,   856,
-   997,    -1,   189,   190,   191,    -1,    -1,    -1,    -1,    -1,
-    -1,  1008,   199,  1010,     4,     5,  1013,    -1,     8,     9,
-    -1,    -1,    -1,    -1,    14,  1022,    -1,    -1,    -1,    -1,
-    -1,   218,   889,    -1,    -1,    -1,    -1,    -1,   895,    -1,
-    -1,    -1,   899,    -1,    -1,    -1,    36,    -1,  1045,    -1,
-    -1,    -1,    -1,    -1,    -1,    45,    -1,    47,  1055,    -1,
-  1057,    -1,    -1,    -1,    54,    -1,    56,    57,   255,    -1,
-    -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,    -1,   936,
-    70,   938,    -1,    -1,    -1,   942,    -1,    -1,  1085,    -1,
-    80,    -1,    -1,  1090,  1091,    -1,  1093,    -1,    -1,    -1,
-    90,    -1,    -1,    93,    94,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,   984,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   325,    -1,
-   997,  1138,  1139,  1140,  1141,  1142,  1003,    -1,    -1,  1146,
-    -1,    -1,    -1,  1010,    -1,   342,  1153,    -1,    -1,    -1,
-    -1,    -1,    -1,   350,    -1,  1022,    -1,    -1,   355,    -1,
-    -1,    -1,  1169,  1170,  1171,    -1,    -1,    -1,     3,     4,
-     5,     6,     7,     8,     9,    -1,    -1,    -1,  1185,    14,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1055,    -1,
-  1057,    -1,   389,  1200,    -1,    -1,    31,    -1,  1205,    -1,
-  1207,    36,    -1,   400,    -1,    -1,    41,    -1,    -1,    -1,
-    45,    -1,    47,    -1,    -1,    -1,    -1,   414,  1085,    54,
-   417,    56,    57,    -1,    -1,   422,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   430,    -1,    70,    -1,    -1,    -1,    -1,
-   731,   732,    -1,   734,    -1,    80,    -1,    -1,    -1,  1256,
-  1257,    -1,  1259,    88,    -1,    90,    -1,    -1,    93,    94,
-    -1,   458,    -1,   460,    -1,   462,   463,   464,    -1,    -1,
-    -1,   468,    -1,    -1,    -1,  1142,   473,  1284,    -1,   476,
-    -1,   772,    -1,     3,     4,     5,     6,    -1,  1295,  1296,
-  1297,    -1,    -1,    -1,    -1,   492,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,  1171,    -1,    -1,  1314,    72,    73,
-    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-    84,    41,    -1,    -1,    -1,   522,    -1,    -1,   525,    -1,
-    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,
-    -1,    -1,    62,   540,   541,   542,    -1,    -1,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   555,    -1,
-    80,    -1,    -1,    -1,     4,    -1,    -1,    -1,    88,     3,
-     4,     5,     6,    93,     1,     9,     3,     4,     5,     6,
-     7,     8,     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,
-    30,    31,    -1,    33,    -1,    35,    -1,    -1,    -1,    -1,
-  1407,    28,    42,    30,    31,    -1,   603,    41,    -1,    36,
-    -1,    -1,    -1,    -1,    41,    55,    -1,    57,    45,   616,
-    54,    48,    56,    57,    -1,    -1,    -1,    54,    -1,    56,
-    57,    -1,    -1,    60,    -1,    -1,    70,    -1,   635,    -1,
-    -1,    -1,    -1,    70,    -1,    -1,    80,  1314,    -1,   940,
-   941,   942,    -1,    80,    88,    -1,    -1,    -1,    -1,    93,
-    -1,    88,   659,    -1,    -1,    -1,    93,    -1,    33,   666,
-  1477,  1478,  1479,    -1,    -1,    -1,    -1,   674,   675,   676,
-   677,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1496,
-    55,    -1,    -1,   984,  1501,    -1,   136,    -1,    -1,    -1,
-   140,    -1,    -1,    -1,   144,    -1,    -1,   147,   148,   149,
-    -1,    -1,    -1,    -1,     4,     5,    -1,     7,     8,     9,
-    -1,   161,  1013,   720,    14,   165,    -1,   724,    -1,    -1,
-    -1,   171,   172,    -1,   731,   732,    -1,   734,    28,    -1,
-    30,    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,   189,
-   190,   191,    -1,    -1,    -1,    45,    -1,    -1,    48,    -1,
-    -1,    -1,    -1,    -1,    54,    -1,    56,    57,   765,    -1,
-   767,    -1,    -1,    -1,    -1,   772,   773,   774,   218,    -1,
-    -1,    -1,   147,   148,   149,    67,    68,    69,    70,    71,
-    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-    82,    83,    84,    -1,   801,    -1,   171,    -1,    -1,    -1,
-    -1,    -1,  1479,    -1,    -1,   255,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   189,   190,   191,    -1,    -1,  1496,
+   157,   345,   172,    46,   205,    33,    23,   170,    80,     4,
+   171,    80,   147,   148,   398,   443,   702,     4,   126,   448,
+   247,   398,     4,   351,   351,   300,   301,   609,   470,    84,
+    35,    14,   369,    76,   616,   398,   491,    42,   133,   134,
+    35,   859,   243,   552,    62,   428,   589,   133,    35,   678,
+     4,   134,    57,    35,    42,    42,   352,   353,   333,  1299,
+    42,    42,   238,   107,   108,   124,  1306,    72,   685,  1370,
+   142,  1459,  1289,     4,   213,   214,    30,    31,    54,    84,
+   765,    35,   767,    88,   783,    90,   205,    92,    42,   774,
+   789,   292,  1460,    42,    42,   214,    47,    37,     1,    11,
+    83,  1461,   107,   108,    35,     4,    11,    11,   404,   405,
+     4,    42,    47,    58,    12,    90,  1504,    92,   546,   147,
+   148,   149,    55,   106,   351,    33,  1507,   199,     0,  1483,
+    84,   136,   137,   632,   139,   478,    35,    33,    54,     9,
+    47,    35,    93,    42,   345,     1,    62,     0,    42,  1503,
+    62,    60,   495,    98,   136,    58,   161,   108,    93,    62,
+   165,    59,   137,   191,    62,    12,   209,   172,   610,   109,
+     1,    48,   178,   161,  1555,    59,   152,   165,   165,   161,
+   524,  1541,   136,   165,   165,    84,    93,   686,    33,   258,
+   208,    61,    95,   147,   148,    57,   108,   896,   216,    59,
+   109,   109,    58,   108,   108,  1194,  1195,   161,  1562,    42,
+   108,   165,    59,  1601,   232,    62,   165,   165,  1586,  1208,
+   196,    25,   468,    27,  1464,   109,    59,    58,    83,    84,
+   476,    62,     4,     5,   165,   189,   190,   136,   171,     3,
+     4,     5,   136,  1460,    74,  1546,   701,   342,   108,    25,
+    60,    27,   148,   149,    58,    75,   342,    77,    62,     8,
+     9,   244,   161,    47,    95,    14,   165,   161,    59,     4,
+    54,   165,    74,  1513,   136,   703,    48,     4,     5,   436,
+     4,   325,    58,   338,    56,    57,    62,    36,   293,    74,
+    74,    95,    56,    57,   911,   191,    45,   914,    47,   109,
+    35,   629,   147,   148,   149,   668,   389,   936,    80,    93,
+   172,    35,  1011,   696,   697,   858,    80,   108,   900,    95,
+   325,   658,   381,  1563,  1023,    54,    59,   462,   463,    56,
+    57,    47,   165,   338,    60,   474,   475,   633,   955,   956,
+   724,   346,  1331,   482,    93,    74,   191,   724,    60,   354,
+   355,  1340,  1341,    59,  1343,   494,   475,    25,  1057,    27,
+  1059,   943,    93,  1048,     3,     4,     5,    25,   351,     4,
+     5,   598,   205,   355,   513,   108,   720,    93,    94,   354,
+   213,   214,     7,   109,   338,    58,    62,    59,    60,    62,
+    58,    27,   108,   398,    62,    31,   401,   109,    74,     4,
+    58,   355,   108,   985,    62,     4,     5,    47,    47,   453,
+   243,   398,    37,    48,  1232,    54,    47,    56,    57,    47,
+   438,    56,    57,   492,    60,   430,    47,    95,    64,   325,
+    35,   940,   861,    47,   462,   463,   464,    95,    47,   338,
+    54,   484,   430,    47,   398,    80,    47,    93,   430,   430,
+    47,   456,    93,    93,    93,   897,   355,    56,    57,   292,
+    74,   355,    93,   481,    44,    93,    94,   400,   108,     4,
+     5,    54,    93,   109,    54,    54,   430,    57,   522,    93,
+   108,   525,    74,    62,    93,   529,    25,   492,    27,    93,
+    94,    74,    93,   355,    47,    74,    93,    94,   542,   398,
+  1489,  1490,   456,   799,   108,  1122,  1123,    93,   462,   463,
+   492,   555,   345,    48,   519,   559,    60,   522,   107,    58,
+   525,    56,    57,    62,   529,   530,   531,   532,   533,     4,
+     5,   430,   695,    25,     9,   590,   430,   542,   492,    59,
+    93,  1359,    47,   587,   519,    80,   974,   552,    47,   593,
+   555,    60,    54,   937,  1009,    75,    95,   456,    54,    64,
+   937,   492,  1144,     7,     8,     9,    47,   463,   464,   402,
+    14,   666,    74,   749,   937,   751,   659,   905,   905,    54,
+   756,    56,    57,   666,    62,   590,    47,    31,    93,    94,
+    31,  1173,    36,   492,    93,    70,    74,   430,   492,    38,
+    54,    45,    54,   742,   609,    80,    27,   808,    62,    62,
+    31,   616,    93,     4,     5,    54,    60,   462,   463,   464,
+    74,    47,    74,    47,    58,    12,   522,   902,    74,   525,
+   492,    54,    93,    94,   930,    12,   590,   620,    59,    60,
+    27,   474,   475,    64,    31,   541,   542,  1076,  1077,   482,
+   667,   759,   606,   607,  1096,   609,   661,    58,    58,   555,
+    47,   494,   616,    54,    64,    56,    57,    93,    94,    93,
+   675,   109,    59,    60,   679,    62,    47,    64,   905,    70,
+   513,    47,    59,    47,   701,    62,   661,    64,    54,    80,
+    47,   590,     3,     4,     5,     6,   765,    62,   767,    93,
+  1155,    54,   635,    94,   773,   774,    93,    94,    74,    74,
+   609,   780,    62,    47,     4,     5,    54,   616,    54,   724,
+   616,   108,    93,    54,    74,   768,   769,    93,    47,    93,
+    41,    75,  1187,    54,   777,    47,    93,    48,    74,   745,
+  1169,   674,    94,   676,   677,    56,    57,  1091,   108,  1178,
+  1179,    47,    64,    74,  1183,  1051,  1052,  1053,    48,    93,
+   765,   108,   767,     4,     5,   108,    56,    57,   773,   774,
+   724,     4,     5,   779,    93,   780,     9,    88,   783,   784,
+   785,    93,   787,   765,   789,   767,   108,   720,     4,     5,
+    80,    11,   774,   109,  1223,    59,    60,    93,   780,   962,
+     3,     4,     5,   636,     7,     8,     9,    48,    60,   784,
+   785,   765,   787,   767,    62,    56,    57,     4,     5,    98,
+   774,    54,   866,    56,    57,   724,   780,    93,    31,   783,
+  1006,  1007,  1008,    36,   765,   789,   767,    70,    54,   772,
+    56,    57,    47,   774,   677,     3,   111,    80,    62,   780,
+    60,    54,   857,    56,    57,    58,   900,   862,    94,    64,
+   108,    94,    94,  1549,     4,     5,   765,    54,   767,    56,
+    57,   765,    62,   767,   111,   774,   948,     3,     4,     5,
+   774,   780,    93,    70,   783,   890,   780,   720,    93,  1318,
+   789,   896,    93,    80,   108,   900,  1092,  1093,    74,  1095,
+   103,   104,   105,   765,    30,   767,   802,    74,    48,   742,
+   772,   773,   774,    59,    60,   943,    56,    57,   780,     3,
+     4,     5,   905,    59,     4,     5,    74,  1356,    54,    27,
+    56,    57,   937,    31,   939,   940,    59,    60,   943,    75,
+    80,    77,   896,    74,   898,   899,   900,  1243,    59,    60,
+   937,    54,    59,  1381,  1298,    59,    60,   985,    11,    62,
+  1004,    59,    60,  1035,     9,   109,  1035,    12,    48,  1397,
+    54,    74,    56,    57,    58,   808,    56,    57,   108,  1048,
+   985,    59,    60,   937,  1027,    59,    60,   941,   942,   943,
+  1033,  1034,    59,   998,  1037,  1038,   108,   896,  1041,  1004,
+    80,   900,    47,   899,   900,    74,  1011,  1142,  1143,   108,
+  1016,  1017,    59,    60,    59,   108,    61,    62,  1023,    64,
+     4,     5,    54,     3,     4,     5,     6,   796,   797,   798,
+    75,   985,    77,    54,     8,     9,  1171,  1172,   937,  1045,
+    14,    62,   108,  1048,   943,    59,    60,   943,    93,    94,
+    74,    59,  1057,    74,  1059,  1483,    64,  1011,    74,   109,
+    44,    41,    36,   108,    74,   109,  1048,    75,    48,  1023,
+    54,    45,    56,    57,  1146,  1503,    56,    57,     3,     4,
+     5,  1014,  1087,   111,   111,   108,   985,    27,    74,   985,
+    54,    54,    74,   111,  1048,  1100,   111,   108,   943,    62,
+    80,    54,   108,  1057,  1532,  1059,   108,    58,    88,    62,
+   108,    74,  1011,  1497,  1142,  1143,  1144,  1048,    54,     8,
+  1497,    74,   111,    93,  1023,  1100,    47,  1297,    59,  1173,
+    64,    56,    57,    58,  1562,  1296,  1205,  1298,  1155,  1144,
+   985,    93,  1570,  1171,  1172,  1173,    54,   109,    59,  1048,
+    60,    36,  1014,   108,  1048,    64,    60,  1501,  1057,    64,
+  1059,  1166,  1591,    74,    75,    64,    77,    62,  1173,   108,
+   108,  1166,    64,   108,    64,  1219,  1220,  1221,  1222,   108,
+     4,     5,    64,   111,  1166,     9,  1048,    93,  1142,  1143,
+  1144,    59,    62,   108,  1200,  1201,   108,  1203,  1204,    75,
+  1206,     3,     4,     5,     6,   108,   108,   108,    75,     3,
+     4,     5,  1166,     7,     8,     9,    75,  1171,  1172,  1173,
+    75,   108,   108,    47,    62,    62,     3,     4,     5,     6,
+    54,    59,    56,    57,   108,  1166,    62,    31,  1282,    41,
+   111,    94,    36,   108,   108,  1144,    70,  1143,  1144,     3,
+     4,     5,    54,   111,    56,    57,    80,    88,    60,    90,
+    62,    92,    56,    57,    41,    88,    90,  1166,    70,    93,
+    94,    74,    47,   108,  1173,   108,  1172,  1173,    80,    56,
+    57,   111,   111,   108,  1289,    59,    88,     3,     4,     5,
+   108,    93,  1297,   108,  1299,  1338,  1339,  1142,  1143,  1144,
+  1501,  1306,    56,    57,  1299,   109,   137,  1289,   139,   108,
+  1315,  1306,   109,  1357,    60,    64,    64,  1299,  1475,     4,
+     5,    59,  1328,  1329,  1306,    59,  1171,  1172,  1173,   108,
+     3,     4,     5,    93,    93,  1289,   108,    93,    54,   109,
+    56,    57,    93,  1478,  1479,  1299,  1390,   109,     3,     4,
+     5,     6,  1306,   108,     9,   108,   108,     8,  1289,     3,
+     4,     5,    47,  1296,  1407,  1298,  1529,   111,  1299,    54,
+   111,    56,    57,   108,    33,  1306,     3,     4,     5,     6,
+  1408,    54,     9,    56,    57,    70,    41,   108,   108,   108,
+  1289,   109,    47,   108,   108,    80,   108,   108,   108,    54,
+  1299,    56,    57,   108,    48,    90,    64,  1306,    93,    94,
+  1454,   108,    56,    57,    41,    70,  1460,  1461,    54,   108,
+    47,  1427,  1428,  1429,   108,    80,    47,    54,    62,    56,
+    57,   111,   108,    88,   108,    90,  1480,   108,    93,    94,
+     3,     4,     5,    70,     7,     8,     9,    96,    62,  1454,
+  1478,  1479,  1480,    80,  1459,  1460,  1461,    62,    60,  1464,
+    60,    88,     9,    90,  1459,  1298,    93,    94,    60,  1464,
+    80,    81,    82,    83,    84,  1480,    16,  1459,  1460,   108,
+  1486,  1487,  1464,   108,   108,   316,   108,     3,     4,     5,
+   108,  1534,  1497,    56,    57,   108,    93,  1541,   398,  1504,
+  1454,    60,    93,    60,    64,  1459,  1460,  1461,  1513,  1504,
+  1464,    54,  1408,  1557,    93,   111,    93,    17,  1513,    60,
+    54,   107,  1504,   354,  1478,  1479,    97,   108,  1459,  1460,
+    60,  1513,    48,  1464,   108,  1579,  1541,    11,   108,   108,
+    56,    57,  1586,  1497,    93,    60,    60,    60,  1554,    14,
+  1504,    59,    64,   108,    60,  1454,   456,    22,  1563,  1513,
+  1459,  1460,  1461,  1408,   108,  1464,   108,    11,  1563,  1502,
+    60,    11,    60,  1504,     2,     0,     0,     3,     4,     5,
+     6,  1563,  1513,  1479,  1480,     0,   166,  1541,    35,  1395,
+   165,     3,     4,     5,     6,   659,  1601,   937,  1497,   161,
+    65,     3,     4,     5,  1528,  1504,  1601,   773,   430,  1563,
+  1155,    94,    38,    39,  1513,    41,   139,   448,   449,  1601,
+     3,     4,     5,     6,  1380,   456,     9,  1601,    54,    41,
+    56,    57,  1563,  1478,  1479,  1480,    48,  1233,     3,     4,
+     5,    80,  1541,   295,    56,    57,   923,  1601,   708,   449,
+   918,  1187,   237,  1009,    56,    57,   456,   773,    41,   124,
+   780,   302,   303,   642,  1563,   104,  1207,   916,  1501,   196,
+  1601,    54,   590,    56,    57,   342,    88,   318,   124,  1299,
+   321,   146,  1167,   324,  1570,  1549,   327,    70,   519,   520,
+   331,    56,    57,  1518,   133,  1580,   993,    80,   339,     3,
+     4,     5,  1601,   142,  1582,    88,    -1,  1315,    -1,   609,
+    93,    -1,     3,     4,     5,     6,   616,    -1,     9,    -1,
+   520,   552,    -1,   554,    -1,    -1,   557,   558,    -1,   560,
+   561,   562,   563,   564,   565,   566,   567,   568,   569,   570,
+   571,   572,   573,   574,   575,   576,   577,   578,    -1,   580,
+    41,    -1,    56,    57,    -1,   586,    47,     3,     4,     5,
+   199,     7,    -1,    54,    -1,    56,    57,    -1,   233,   234,
+    -1,    -1,     3,     4,     5,    -1,    -1,    -1,     4,    70,
+   580,    -1,   247,    -1,    30,   616,   586,    -1,    14,    80,
+    -1,    37,   623,    -1,   233,     4,     5,    88,    24,    90,
+     9,    -1,    93,    94,    30,    31,    -1,    33,    54,    35,
+    56,    57,    -1,    -1,   645,   646,    42,    -1,    -1,   258,
+    -1,    -1,    -1,   623,   724,    56,    57,    -1,    -1,    55,
+   661,    57,    -1,    -1,     3,     4,     5,     6,    47,    65,
+    -1,    -1,     3,     4,     5,    54,    72,    56,    57,    -1,
+    -1,    -1,   317,     3,     4,     5,     6,    83,    84,     9,
+    -1,    70,    -1,    -1,    -1,    57,    -1,    59,    -1,    -1,
+    -1,    80,    41,    65,     3,     4,     5,   708,    -1,    48,
+   106,    90,    -1,   783,    93,    94,    -1,    56,    57,   789,
+    -1,    41,    -1,    -1,   359,    56,    57,    47,    -1,   540,
+   541,    -1,    -1,   368,    54,    -1,    56,    57,   134,    -1,
+   136,   350,    -1,    -1,   140,    -1,   381,   143,   144,    88,
+    70,   147,   148,   149,   449,    -1,    -1,    56,    57,    -1,
+    80,   456,    -1,   764,    -1,   161,    -1,    -1,    88,   165,
+    90,    -1,    -1,    93,    94,   171,   172,    -1,    -1,    -1,
+    -1,    -1,    -1,   784,   785,    -1,   787,    -1,    47,    -1,
+    -1,    -1,    -1,   189,   190,   191,    -1,    -1,   407,    -1,
+    -1,   802,    -1,    -1,     3,     4,     5,     6,    -1,    -1,
+   172,     3,     4,     5,     6,    -1,   178,    -1,    -1,    -1,
+    -1,    -1,   218,   824,    -1,   520,   896,    86,    87,    -1,
+   900,    -1,    91,    92,    93,    94,    -1,    -1,   234,    -1,
+    -1,    -1,    41,   205,    -1,    -1,    -1,    -1,   244,    41,
+    -1,   213,   214,    -1,   489,   856,   857,    56,    57,   255,
+   861,   862,    54,    -1,    56,    57,    -1,   937,    60,    -1,
+    -1,    -1,    -1,   943,    -1,   876,    -1,   878,    70,   880,
+   489,    -1,    -1,    -1,    -1,   580,   856,   857,    80,    88,
+    -1,   586,   862,    -1,    -1,    -1,    88,   293,   294,    -1,
+    -1,    93,    -1,    -1,    -1,    -1,   876,   516,   878,    -1,
+   880,    -1,    -1,    -1,   915,   985,     7,     8,     9,   554,
+    -1,   616,    -1,    14,   925,     4,     5,    -1,   623,    -1,
+     9,    -1,     3,     4,     5,     6,     7,     8,     9,   940,
+    31,  1011,   338,    14,    -1,    36,   342,    -1,   344,   345,
+   346,    -1,   953,  1023,    45,   925,    -1,    -1,    -1,   355,
+    31,    -1,    -1,   598,    -1,    36,    -1,   968,    47,    60,
+    41,    -1,    -1,    -1,    45,    54,    47,    56,    57,    -1,
+    -1,    -1,    -1,    54,   985,    56,    57,  1057,    -1,  1059,
+    -1,    70,    -1,   389,   603,    -1,    -1,    -1,   968,    70,
+    -1,    80,   398,    -1,   400,   401,    -1,    -1,    -1,    80,
+   619,    90,    -1,    -1,    93,    94,    -1,    88,   414,    90,
+    -1,   417,    93,    94,    -1,  1026,   422,    -1,    -1,    -1,
+    -1,    -1,   667,    -1,   430,    -1,    -1,    -1,    -1,   401,
+   402,    -1,     1,   678,     3,     4,     5,     6,    -1,     8,
+    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,   870,
+    -1,     9,   458,    -1,   460,    -1,   462,   463,   464,    -1,
+    -1,    -1,   468,   708,  1144,  1076,  1077,   473,    -1,  1080,
+   476,    -1,    41,    -1,    -1,    -1,    -1,   898,   899,    48,
+    -1,    -1,    -1,    41,    -1,    54,   492,    56,    57,  1100,
+    -1,    -1,    -1,  1173,    -1,   467,    54,   802,    56,    57,
+    -1,    -1,   474,   475,    -1,    -1,   478,     7,     8,     9,
+   482,    -1,    70,    -1,    14,    -1,    -1,    -1,    -1,    88,
+    -1,    -1,    80,   495,   530,   531,   532,   533,    -1,    -1,
+    88,    31,    -1,    -1,    -1,    93,    36,    -1,     3,     4,
+     5,     6,    -1,    -1,     9,    45,  1157,    -1,  1159,    -1,
+  1161,   856,   857,    -1,    -1,    -1,    -1,   862,  1169,    78,
+    79,    80,    81,    82,    83,    84,    -1,  1178,  1179,    -1,
+    -1,   876,  1183,   878,    -1,   880,    41,  1157,    -1,  1159,
+    -1,  1161,    -1,    -1,   590,    -1,   592,  1198,  1199,    54,
+    -1,    56,    57,    -1,    -1,     7,     8,     9,   604,    -1,
+   606,   607,    14,   609,    -1,    70,    -1,    -1,    -1,    -1,
+   616,    -1,  1223,    -1,   620,    80,    -1,    -1,    -1,    31,
+   925,    -1,    -1,    88,    36,    -1,    -1,    -1,    93,   635,
+    -1,    -1,    -1,    45,   740,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,  1254,    -1,     3,     4,     5,     6,    -1,
+    -1,    -1,    -1,   659,    -1,    -1,     3,     4,     5,     6,
+   666,    -1,    -1,   968,   636,    -1,    -1,  1278,   674,   675,
+   676,   677,   678,   679,  1254,    -1,   782,  1098,   923,    -1,
+   985,    -1,   788,    41,    -1,   904,    -1,   906,    -1,    47,
+    -1,   936,    -1,    -1,    41,    -1,    54,    -1,    56,    57,
+    -1,    48,    -1,   675,    -1,   677,   678,  1318,    -1,    56,
+    57,    -1,    70,    -1,   720,    -1,    -1,    -1,   724,    -1,
+    -1,    -1,    80,  1334,    -1,   731,   732,    -1,   734,   948,
+    88,    -1,    90,    80,    -1,    93,    94,    -1,    -1,    -1,
+    -1,    88,    -1,    -1,    -1,  1356,    -1,    -1,   720,    -1,
+  1171,  1172,    -1,    -1,    -1,    -1,   762,    -1,    -1,   765,
+    -1,   767,    -1,    -1,    -1,    -1,   772,   773,   774,    -1,
+   742,    -1,    -1,   745,   780,    -1,    -1,   783,    -1,    -1,
+    -1,    -1,    -1,   789,    -1,   891,    -1,   893,    -1,    -1,
+   796,   797,   798,    -1,    -1,    -1,    -1,  1408,    -1,    -1,
+    -1,   773,   808,    -1,    -1,    -1,    -1,   779,    -1,    -1,
+    -1,    -1,    -1,    -1,  1425,  1426,  1035,  1497,    -1,    -1,
+    -1,     4,     5,  1434,     7,     8,     9,    -1,    -1,    12,
+    -1,    14,  1077,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    28,    -1,    30,    31,    -1,
+    -1,  1462,  1157,    36,  1159,    -1,  1161,    -1,    -1,    -1,
+    -1,    -1,    45,    -1,    47,    -1,    -1,    -1,  1289,    -1,
+    -1,    54,    -1,    56,    57,   881,    -1,   883,    -1,    -1,
+    -1,    -1,    -1,    -1,   890,    -1,    -1,    70,   894,    -1,
+   896,    -1,   898,   899,   900,    -1,    -1,    80,    -1,   905,
+  1119,    -1,    -1,    -1,    -1,    -1,    -1,    90,    -1,    -1,
+    93,    94,    -1,     3,     4,     5,     6,    -1,  1163,    -1,
+    -1,    -1,    -1,    -1,  1169,    -1,    -1,  1146,    -1,    -1,
+    -1,   937,    -1,   939,     4,   941,   942,   943,    -1,    -1,
+    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,    -1,  1254,
+  1056,    41,  1058,    23,    24,    -1,    -1,    -1,    48,    -1,
+    30,    31,    -1,    33,   936,    35,    56,    57,    -1,    -1,
+    -1,    -1,    42,    -1,    -1,     3,     4,     5,     6,   985,
+  1591,    -1,    -1,    -1,    -1,    55,  1205,    57,    -1,    -1,
+    80,    -1,   998,    -1,    -1,    65,    -1,    -1,    88,    -1,
+    -1,    -1,    72,    -1,    -1,  1011,    -1,  1113,  1014,    -1,
+    -1,    -1,    -1,    41,    84,    -1,    -1,  1023,    -1,    -1,
+    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    56,    57,
+  1036,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1283,  1284,
+    -1,    -1,  1048,    -1,  1016,  1017,    -1,    -1,    -1,    -1,
+    -1,  1057,    80,  1059,    -1,    -1,    -1,  1478,  1479,    -1,
+    88,    -1,     3,     4,     5,     6,   136,    -1,     9,    -1,
+   140,    -1,    -1,  1045,   144,    -1,    -1,   147,   148,   149,
+    -1,  1087,    -1,    -1,    -1,  1191,  1092,  1093,    -1,  1095,
+  1196,   161,    -1,    -1,    -1,   165,    -1,   189,   190,   191,
+    41,   171,   172,  1408,    -1,     3,     4,     5,     6,    -1,
+    -1,     9,    -1,    54,    -1,    56,    57,    -1,    -1,   189,
+   190,   191,    -1,     3,     4,     5,     6,  1372,    -1,    70,
+    -1,    -1,    -1,    -1,  1140,  1141,  1142,  1143,  1144,    80,
+    -1,  1247,  1148,    41,    -1,    -1,    -1,    88,   218,  1394,
+  1395,    -1,    93,    -1,    -1,    -1,    54,    -1,    56,    57,
+    -1,    41,    -1,    -1,    -1,  1171,  1172,  1173,    48,    -1,
+    -1,    -1,    70,    -1,    -1,    -1,    56,    57,    -1,    -1,
+    -1,    -1,    80,    -1,    -1,   255,    -1,    -1,    -1,    -1,
+    88,    -1,    -1,    -1,    -1,    93,  1202,    -1,    -1,    -1,
+    80,  1207,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
     -1,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
-    -1,    -1,    14,    -1,    -1,    -1,    -1,  1138,  1139,  1140,
-  1141,  1142,    -1,   218,    -1,  1146,    -1,    -1,    -1,    31,
-    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,
-    -1,    -1,    -1,    45,    -1,    47,    -1,    -1,  1169,  1170,
-  1171,    -1,    54,    -1,    56,    57,     3,     4,     5,     6,
-     7,     8,     9,    -1,    -1,    -1,    -1,    14,    70,    -1,
-   897,   898,   899,    -1,    -1,    -1,   903,    -1,    80,  1200,
-    -1,   351,    -1,    -1,    31,   355,    88,    -1,    90,    36,
-    -1,    93,    94,    -1,    41,    -1,    -1,    -1,    45,   294,
-    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,
-    57,    -1,    -1,   940,   941,   942,    -1,    -1,    -1,    -1,
-   947,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-   400,    -1,    -1,    80,    -1,  1256,  1257,    -1,  1259,    -1,
-    -1,    88,    -1,    -1,   414,    -1,    93,   417,    -1,   344,
-   345,   346,   422,    -1,    -1,    -1,    -1,   984,    -1,    -1,
-   430,    -1,     3,     4,     5,     6,    -1,     4,     5,    -1,
-    -1,     8,     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1013,    -1,   458,    -1,
-   460,    -1,   462,   463,   464,    -1,    -1,    -1,   468,    36,
-    41,    -1,    -1,   473,    -1,   400,   476,  1034,    45,    -1,
-    47,    -1,    -1,    54,    -1,    56,    57,    54,  1045,    56,
-    57,    62,   492,    -1,    -1,    -1,    -1,    -1,    -1,    70,
-    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    80,
-    -1,    -1,    -1,    80,    -1,    -1,    -1,    88,    82,    -1,
-    -1,    -1,    93,    90,    -1,    -1,    93,    94,    -1,    -1,
-    -1,    -1,    -1,   458,    -1,   460,    -1,   462,   463,   464,
-    -1,    -1,    -1,   468,    -1,    -1,    -1,    -1,   473,    -1,
-    -1,   476,    -1,    -1,    -1,    -1,  1407,    -1,    -1,    -1,
-  1117,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
-     6,     7,     8,     9,    -1,    -1,    -1,    -1,    14,    -1,
-    -1,  1138,  1139,  1140,  1141,  1142,    -1,  1144,    -1,  1146,
-    -1,   155,    28,    -1,    30,    31,    -1,    -1,    -1,    -1,
-    36,    -1,    -1,    -1,   604,    41,    -1,    -1,    -1,    45,
-    -1,    -1,  1169,  1170,  1171,    -1,    -1,    -1,    54,    -1,
-    56,    57,    -1,   187,    60,    -1,  1477,  1478,  1479,    -1,
-    -1,    -1,    -1,    -1,    70,   635,   200,     4,     5,    -1,
-     7,     8,     9,  1200,    80,    12,    -1,    14,  1205,    -1,
-  1207,    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,
-    -1,    28,    -1,    30,    31,    -1,    -1,   592,    -1,    36,
-    -1,    -1,    -1,    -1,   674,   675,   676,   677,    45,    -1,
-    -1,   606,   607,    -1,   609,    -1,    55,    54,    -1,    56,
-    57,   616,    -1,    -1,    -1,     4,    -1,    -1,    -1,  1256,
-  1257,    -1,  1259,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   635,    80,    -1,    -1,    83,     3,     4,     5,     6,    -1,
-   720,    30,    31,    -1,   724,    -1,    35,    -1,    -1,    -1,
-    -1,   731,   732,    42,   734,   104,    -1,   106,  1295,  1296,
-  1297,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    57,   674,
-    -1,   676,   677,    41,   679,    -1,    -1,    -1,    -1,    -1,
-    -1,     3,     4,     5,     6,   765,    54,   767,    56,    57,
-    -1,    -1,   772,   773,   774,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,     3,     4,
-     5,     6,    80,    -1,     9,   720,    -1,    -1,    -1,    41,
-    88,    -1,   171,    -1,    -1,    93,   731,   732,    -1,   734,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,
-   189,   190,   191,    -1,    -1,    -1,    41,   136,    70,    -1,
-   199,   140,    -1,    -1,    -1,   144,    -1,    -1,    80,    54,
-    -1,    56,    57,    -1,    -1,    -1,    88,   772,    -1,   218,
-  1407,    93,   161,    -1,    -1,    70,   165,    -1,     3,     4,
-     5,     6,    -1,   172,     9,    80,    -1,    -1,    -1,    -1,
-   795,   796,   797,    88,    -1,   244,    -1,    -1,    93,    -1,
-   189,   190,   807,    -1,    -1,    -1,    -1,    -1,    -1,   258,
-    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
-    -1,    -1,   466,    -1,   904,    -1,    -1,   471,    -1,    54,
-    -1,    56,    57,    -1,    -1,    -1,     3,     4,     5,     6,
-  1477,  1478,  1479,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,   496,    -1,    -1,    80,    -1,    -1,   502,    -1,
-   940,   941,   942,    88,  1501,    -1,   255,    -1,    93,    -1,
-   514,   515,    -1,   517,    41,   880,    -1,   882,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,   893,    56,
-    57,    -1,   897,   898,   899,    62,    -1,    -1,    -1,    -1,
-    -1,   350,   351,    70,   984,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
-    -1,    -1,    -1,  1013,    -1,   940,   941,   942,    -1,    -1,
+    -1,    -1,    14,   293,   294,    -1,    -1,  1472,  1200,  1201,
+    -1,  1203,  1204,    -1,  1206,    -1,   344,   345,   346,    31,
+    -1,  1347,  1348,    -1,    36,    -1,    -1,    -1,    -1,    41,
+    -1,  1257,  1258,    45,  1260,    47,    -1,    -1,  1364,    -1,
+    -1,    -1,    54,    -1,    56,    57,    -1,    -1,   338,    -1,
+    -1,    -1,   342,    -1,   344,   345,   346,    -1,    70,    -1,
+    -1,   351,    -1,    -1,    -1,   355,    -1,    -1,    80,    -1,
+  1296,  1297,  1298,    -1,    -1,    -1,    88,    -1,    90,    -1,
+    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,  1315,
+    -1,    -1,    -1,    -1,  1420,  1421,    -1,    -1,    -1,   389,
+    -1,    -1,    -1,    -1,    -1,  1297,  1298,    -1,   398,    -1,
+   400,   401,    -1,  1439,  1440,    76,    77,    78,    79,    80,
+    81,    82,    83,    84,   414,    -1,    -1,   417,    -1,    -1,
+    -1,    -1,   422,    -1,    -1,    -1,  1328,  1329,    -1,    -1,
+   430,     3,     4,     5,     6,    -1,   458,     9,   460,    -1,
+   462,   463,   464,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   473,     3,     4,     5,     6,    -1,    -1,   458,    -1,
+   460,    -1,   462,   463,   464,    -1,    -1,    -1,   468,    41,
+     4,     5,  1408,   473,     8,     9,   476,    -1,    -1,    -1,
+    14,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,
+    41,   491,   492,    -1,    28,    -1,    30,    -1,    70,    -1,
+    -1,    -1,    36,    54,    -1,    56,    57,    -1,    80,    -1,
+    -1,    45,    -1,    47,    -1,    -1,    88,    -1,    -1,    -1,
+    54,    93,    56,    57,    -1,  1427,  1428,  1429,    -1,    -1,
+   530,   531,   532,   533,    -1,    -1,    70,    88,    -1,    -1,
+    -1,    -1,  1478,  1479,  1480,    -1,    80,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    90,    -1,    -1,    93,
+    94,  1497,    -1,    -1,    -1,    -1,  1502,    -1,   606,   607,
+     3,     4,     5,     6,     7,     8,     9,    -1,     4,     5,
+    -1,    14,     8,     9,  1486,  1487,    -1,    -1,    14,    -1,
+   590,    -1,   592,    -1,    -1,    28,    -1,    30,    31,    32,
+    -1,    -1,    28,    36,    30,    -1,   606,   607,    41,   609,
+    36,    -1,    45,    -1,    -1,    48,   616,    -1,    -1,    45,
+    -1,    54,    -1,    56,    57,    -1,    -1,    -1,    54,   629,
+    56,    57,    -1,    -1,    -1,   635,   674,    70,   676,   677,
+    -1,   679,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,
+    -1,    -1,  1554,    -1,    -1,    88,    -1,    -1,    -1,   659,
+    93,    -1,    -1,    -1,    -1,    98,    -1,   667,    -1,    -1,
+    -1,    -1,    -1,    -1,   674,   675,   676,   677,   678,   679,
+    -1,    -1,   720,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+     1,   701,     3,     4,     5,     6,     7,     8,     9,   731,
+   732,    -1,   734,    14,    -1,    -1,    -1,    -1,    -1,    -1,
+   720,    -1,    -1,    -1,   724,    -1,    -1,    28,    -1,    30,
+    31,   731,   732,    -1,   734,    36,    -1,    -1,    -1,    -1,
+    41,    -1,    -1,    -1,    45,    -1,    -1,    48,    -1,    -1,
+   772,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,
+    -1,    -1,   762,    -1,    -1,   765,    -1,   767,    -1,    70,
+   808,    -1,   772,   773,   774,    -1,    -1,    -1,    -1,    80,
+   780,     4,     5,   783,    -1,     8,     9,    88,    -1,   789,
+    -1,    14,    93,    -1,    -1,    -1,   796,   797,   798,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   808,    -1,
+    -1,    -1,    -1,    36,    -1,     4,    -1,    -1,    -1,    -1,
+    -1,    -1,    45,    -1,    47,     3,     4,     5,     6,    -1,
+    -1,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,
+    -1,    30,    31,   881,    33,   883,    35,    70,    -1,    -1,
+    -1,    -1,    -1,    42,    -1,    -1,   894,    80,    -1,    -1,
+   898,   899,    -1,    41,    -1,    -1,    55,    90,    57,    -1,
+    93,    94,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+    -1,   881,    -1,   883,    62,    -1,    -1,    -1,    -1,    -1,
+   890,    80,    70,    -1,   894,    -1,   896,    -1,   898,   899,
+   900,    -1,    80,   941,   942,   905,    -1,    -1,    -1,    -1,
+    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,   941,
+   942,   943,    70,    71,    72,    73,    74,    75,    76,    77,
+    78,    79,    80,    81,    82,    83,    84,   937,    -1,   939,
+    -1,   941,   942,   943,   133,   134,    -1,   136,    -1,    -1,
+    -1,   140,    -1,   142,    -1,   144,    -1,    -1,   147,   148,
+   149,    -1,    -1,   985,    -1,     4,     5,    -1,    -1,     8,
+     9,    -1,   161,    -1,    -1,    14,   165,    -1,    -1,    -1,
+    -1,    -1,   171,   172,    -1,   985,    -1,    -1,    -1,    -1,
+    -1,    -1,  1014,    -1,    -1,    -1,    -1,    36,   998,    -1,
+   189,   190,   191,    -1,    -1,    -1,    45,    -1,    47,  1009,
+   199,  1011,    -1,    -1,  1014,    54,    -1,    56,    57,    -1,
+    -1,    -1,    -1,  1023,     3,     4,     5,     6,    -1,   218,
+     9,    70,     4,     5,    -1,    -1,     8,     9,    -1,    -1,
+    -1,    80,    14,    -1,    -1,    -1,    -1,    -1,  1048,    -1,
+    -1,    90,    -1,    -1,    93,    94,    28,  1057,    30,  1059,
+    -1,    -1,    41,    -1,    36,    -1,   255,    -1,    -1,    -1,
+    -1,    -1,    -1,    45,    -1,    54,    -1,    56,    57,    -1,
+    -1,    -1,    54,    -1,    56,    57,    -1,  1087,    -1,    -1,
+    -1,    70,  1092,  1093,    -1,  1095,    -1,    -1,    -1,    -1,
+    -1,    80,  1140,  1141,  1142,  1143,    -1,    -1,    -1,    88,
+  1148,    -1,    -1,    -1,    93,    -1,    -1,    -1,  1140,  1141,
+  1142,  1143,  1144,    -1,    -1,    -1,  1148,    -1,    -1,    -1,
+    -1,    -1,    -1,  1171,  1172,    -1,   325,    -1,    -1,    -1,
+  1140,  1141,  1142,  1143,  1144,    -1,    -1,    -1,  1148,  1171,
+  1172,  1173,    -1,   342,    -1,  1155,    -1,    -1,    -1,    -1,
+    -1,   350,    -1,    -1,    -1,    -1,   355,    -1,    -1,    -1,
+    -1,  1171,  1172,  1173,    -1,    -1,     3,     4,     5,     6,
+  1202,    -1,     9,    -1,    -1,    -1,    -1,  1187,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   400,    -1,     3,     4,     5,     6,     7,     8,     9,
-    -1,    -1,    12,    -1,    14,  1045,   355,    -1,   612,   613,
-    -1,    -1,    -1,   617,    -1,    -1,    -1,    -1,    28,   984,
-    30,    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,
-    -1,    41,    -1,    -1,    -1,    45,    -1,     3,     4,     5,
-     6,    -1,    -1,     9,    54,    -1,    56,    57,  1013,   458,
+   389,    -1,  1202,    -1,    -1,    -1,    -1,  1207,    -1,    -1,
+    -1,   400,    -1,    -1,    41,    -1,    -1,    -1,    -1,  1257,
+  1258,    -1,  1260,    -1,    -1,   414,    -1,    54,   417,    56,
+    57,    -1,    -1,   422,    -1,  1257,  1258,    -1,  1260,    -1,
+    -1,   430,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    80,    -1,    -1,    -1,  1257,  1258,    -1,
+  1260,    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,   458,
     -1,   460,    -1,   462,   463,   464,    -1,    -1,    -1,   468,
-    70,    -1,    -1,    -1,   473,   414,    -1,   476,   417,    -1,
-    80,    -1,    -1,   422,    -1,    41,    -1,    -1,    88,    -1,
-    -1,   430,    -1,    93,    -1,    -1,    -1,    -1,    54,    -1,
-    56,    57,    -1,    -1,     3,     4,     5,     6,  1138,  1139,
-  1140,  1141,  1142,    -1,    70,    -1,  1146,    -1,    -1,   458,
-    -1,   460,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    88,    -1,   473,  1090,  1091,    93,  1093,  1169,
-  1170,  1171,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   492,    -1,    54,    -1,    56,    57,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-  1200,    70,    -1,    -1,    -1,  1205,    -1,  1207,    -1,    -1,
-    -1,    80,    -1,  1138,  1139,  1140,  1141,  1142,    -1,    88,
-    -1,  1146,    -1,    -1,    93,   789,    -1,   791,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
-     7,     8,     9,    -1,  1169,  1170,  1171,    14,    -1,    -1,
-   619,   620,    -1,    -1,    -1,    -1,  1256,  1257,    -1,  1259,
-    -1,    28,    -1,    30,    31,    -1,   635,    -1,    -1,    36,
-    -1,    -1,    -1,    -1,    41,  1200,    -1,    -1,    45,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,
-    57,    -1,    -1,    60,    -1,  1295,  1296,  1297,    -1,   863,
-   864,    -1,   866,    70,    -1,   674,    -1,   676,   677,    -1,
-    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    88,    -1,     4,     5,    -1,    93,     8,     9,    -1,
-   894,  1256,  1257,    14,  1259,    -1,    -1,    -1,    -1,    -1,
-    -1,     3,     4,     5,     6,    -1,    -1,    28,    -1,    30,
-    -1,   720,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
-    -1,    -1,   731,   732,    45,   734,   675,    -1,    -1,    -1,
-  1295,    -1,  1297,    54,    -1,    56,    57,    -1,    -1,    41,
-   944,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   759,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   772,    -1,    -1,    -1,  1407,    70,     4,
-     5,    -1,     7,     8,     9,   724,    -1,    -1,    80,    14,
-    -1,    -1,   731,   732,    -1,   734,    88,    -1,    -1,    -1,
-    -1,    93,    -1,    28,    -1,    30,    31,    -1,    -1,    -1,
-    -1,    36,    -1,    -1,    -1,  1009,    -1,    -1,    -1,    -1,
-    45,    -1,    -1,    -1,    -1,    -1,   765,  1021,   767,    54,
-    -1,    56,    57,   772,   773,   774,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    14,  1477,  1478,  1479,
-    -1,    -1,  1407,    -1,    -1,    23,    24,    -1,    -1,    -1,
-    -1,    -1,    30,    31,    -1,    33,    -1,    -1,    -1,    -1,
-    -1,  1501,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    -1,    -1,    -1,    -1,    14,    -1,    -1,    65,    -1,    -1,
-    -1,    -1,    -1,    -1,   903,   904,   905,    -1,    28,    -1,
-    30,    31,  1106,    -1,    -1,    -1,    36,    -1,    -1,    -1,
-    -1,    41,  1477,  1478,  1479,    45,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,
-    -1,   940,   941,   942,    -1,    -1,  1501,    -1,   947,    -1,
-    70,  1145,    -1,    -1,    -1,    -1,   124,    -1,   126,    -1,
-    80,    -1,    -1,    -1,    -1,   133,   134,    -1,    88,    -1,
-    -1,    -1,   140,    93,   142,   143,   144,    -1,   146,   147,
-   148,   149,    -1,    -1,    -1,   984,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-    -1,   940,   941,     1,    -1,     3,     4,     5,     6,     7,
-     8,     9,    -1,    -1,  1013,  1209,    14,    -1,    -1,  1213,
+    -1,    -1,    -1,    -1,   473,  1285,    -1,   476,     3,     4,
+     5,     6,    -1,    -1,    -1,    -1,  1296,  1297,  1298,    -1,
+    -1,    -1,    -1,   492,    -1,    -1,    -1,     3,     4,     5,
+     6,     7,     8,     9,    -1,  1315,    -1,    -1,    14,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
+    -1,    -1,    28,   522,    30,    31,   525,    -1,    -1,    54,
+    36,    56,    57,    -1,    -1,    41,    -1,    62,    -1,    45,
+    -1,   540,   541,   542,    -1,    70,    -1,    -1,    54,    -1,
+    56,    57,    -1,    -1,    60,    80,   555,    -1,    -1,    -1,
+    -1,    -1,     4,    88,    70,    -1,    -1,    -1,    93,    -1,
+    -1,    -1,    -1,    -1,    80,    -1,  1408,    -1,    -1,    -1,
+    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,    30,    31,
+    -1,    33,    -1,    35,    -1,    -1,    -1,    -1,  1408,    -1,
+    42,    -1,    -1,    -1,   603,     3,     4,     5,     6,    -1,
+    -1,    -1,    -1,    55,    -1,    57,    -1,   616,    67,    68,
+    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
+    79,    80,    81,    82,    83,    84,   635,    -1,    -1,    -1,
+    -1,    -1,    -1,    41,    -1,    -1,  1478,  1479,  1480,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+   659,    -1,    -1,    -1,    62,    -1,    -1,   666,  1478,  1479,
+  1480,    -1,    70,    -1,    -1,   674,   675,   676,   677,    -1,
+    -1,    -1,    80,    -1,    -1,    -1,    -1,  1497,    55,    -1,
+    88,    -1,  1502,    -1,   136,    93,    -1,    -1,   140,    -1,
+    -1,    -1,   144,    -1,    -1,   147,   148,   149,    -1,    -1,
+     4,     5,    -1,    80,     8,     9,    83,    -1,    -1,   161,
+    14,   720,    -1,   165,    -1,   724,    -1,    -1,    -1,   171,
+   172,    -1,   731,   732,    28,   734,    30,   104,    -1,   106,
+    -1,    -1,    36,    -1,    -1,    -1,    -1,   189,   190,   191,
+    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    54,    -1,    56,    57,    58,    -1,   765,    -1,   767,    33,
+    -1,    -1,    -1,   772,   773,   774,   218,     3,     4,     5,
+     6,   780,    -1,     3,     4,     5,     6,     7,     8,     9,
+    -1,    55,    12,    -1,    14,    -1,    -1,    -1,    -1,    93,
+    -1,    -1,    -1,   802,   171,    -1,    -1,    -1,    28,    -1,
+    30,    31,    -1,   255,    -1,    41,    36,    -1,    -1,    -1,
+    -1,    41,   189,   190,   191,    45,    -1,    47,    54,    -1,
+    56,    57,   199,    -1,    54,    -1,    56,    57,    -1,    -1,
+    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+    70,   218,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
+    80,    -1,    88,    -1,    -1,    -1,    -1,    93,    88,    -1,
+    90,    -1,    -1,    93,    94,    -1,    -1,   244,     3,     4,
+     5,     6,    -1,   147,   148,   149,    -1,    -1,    -1,    -1,
+    -1,   258,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   898,
+   899,   900,    -1,    -1,    -1,   904,    -1,   171,    -1,   351,
+    -1,    -1,    -1,   355,    -1,    -1,    41,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   189,   190,   191,    -1,    54,
+    -1,    56,    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,
+    -1,    -1,   941,   942,   943,    70,    -1,    -1,    -1,   948,
+    -1,    -1,    -1,    -1,   218,    80,    -1,    -1,   400,    -1,
+    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,
+    -1,    -1,   414,    -1,    -1,   417,    -1,    -1,    -1,    -1,
+   422,    -1,    -1,   350,   351,    -1,   985,    -1,   430,    72,
+    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+    83,    84,     3,     4,     5,     6,    -1,    -1,    -1,   107,
+   108,    -1,    -1,    -1,    -1,  1014,   458,    -1,   460,    -1,
+   462,   463,   464,    -1,    -1,    -1,   468,    -1,    -1,    -1,
+   294,   473,    -1,   400,   476,    -1,  1035,    -1,    -1,    -1,
+    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1048,
+   492,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,
+    -1,     3,     4,     5,     6,     7,     8,     9,    -1,    70,
+    -1,    -1,    14,     3,     4,     5,     6,    -1,    -1,    80,
+   344,   345,   346,    -1,    -1,    -1,    28,    88,    30,    31,
+    -1,   458,    93,   460,    36,   462,   463,   464,    -1,    41,
+    -1,   468,    -1,    45,    -1,    47,   473,    -1,    -1,   476,
+    -1,    41,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,
+  1119,    -1,    -1,    -1,    54,    -1,    56,    57,    70,     4,
+     5,    -1,     7,     8,     9,    -1,   400,    12,    80,    14,
+    70,  1140,  1141,  1142,  1143,  1144,    88,  1146,    90,  1148,
+    80,    93,    94,    28,    -1,    30,    31,    -1,    88,    -1,
+    -1,    36,   604,    93,    -1,    -1,    -1,    -1,    -1,    -1,
+    45,    -1,  1171,  1172,  1173,    -1,    -1,    -1,    -1,    54,
+    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   635,   458,    -1,   460,    -1,   462,   463,
+   464,    -1,    -1,  1202,   468,    -1,    -1,    -1,  1207,   473,
+    -1,    -1,   476,    -1,    -1,    -1,     1,    -1,     3,     4,
+     5,     6,     7,     8,     9,    -1,    -1,   325,    -1,    14,
+    -1,    82,   674,   675,   676,   677,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,    -1,
+    -1,    36,   619,   620,    -1,    -1,    41,    -1,  1257,  1258,
+    45,  1260,    -1,    48,    -1,    -1,    -1,    -1,   635,    54,
+    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,   720,    -1,
+    -1,    -1,   724,    -1,    -1,    70,    -1,    -1,    -1,   731,
+   732,    -1,   734,    -1,    -1,    80,    -1,  1296,  1297,  1298,
+   398,    -1,    -1,    88,   155,    -1,    -1,   674,    93,   676,
+   677,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   765,    -1,   767,    -1,    -1,   592,    -1,
+   772,   773,   774,    -1,    -1,    -1,   187,    -1,   780,    -1,
+    -1,    -1,   606,   607,    -1,   609,    -1,    -1,    -1,   200,
+     4,     5,   616,   720,     8,     9,    -1,    -1,   456,    -1,
+    14,    -1,    -1,    -1,   731,   732,    -1,   734,    -1,    -1,
+    -1,   635,    -1,    -1,    28,    -1,    30,    -1,    -1,    -1,
+    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    45,   759,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    54,    -1,    56,    57,    -1,   772,    -1,    -1,    -1,  1408,
+   674,    -1,   676,   677,    -1,   679,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   522,    -1,    -1,   525,    -1,    -1,
+    -1,   529,   530,   531,   532,   533,    -1,    -1,    -1,    93,
+    -1,    -1,    -1,    -1,   542,     4,     5,    -1,     7,     8,
+     9,    -1,    -1,    -1,    -1,    14,   720,   555,    -1,    -1,
+    -1,    -1,    -1,   905,    -1,    -1,    -1,   731,   732,    28,
+   734,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,  1478,
+  1479,  1480,    -1,    -1,    -1,    -1,    45,    -1,    -1,    48,
+    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,   941,
+   942,   943,    -1,  1502,    -1,    -1,    -1,    -1,   772,    -1,
+    -1,   609,    -1,    -1,    -1,    -1,    -1,    -1,   616,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    28,    -1,    30,    31,    32,  1034,    -1,    -1,    36,    37,
-    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    -1,
-    48,    -1,    -1,    -1,  1248,    -1,    54,    -1,    56,    57,
-    -1,    -1,    60,    -1,    62,   233,   234,    -1,    -1,    -1,
-    -1,    -1,    70,    -1,  1013,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    80,    -1,    -1,    -1,    -1,   255,    -1,    -1,
-    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1045,    -1,    -1,    -1,
-    -1,   109,    -1,    -1,    -1,    -1,    -1,    -1,  1117,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   294,    -1,  1322,    -1,
-    -1,    -1,  1326,    -1,    -1,    -1,    -1,    -1,    -1,  1138,
-  1139,  1140,  1141,  1142,    -1,  1144,    -1,  1146,    -1,    -1,
-    -1,    -1,    -1,    -1,  1348,  1349,    -1,    -1,    -1,    -1,
+    -1,    -1,   796,   797,   798,    -1,    -1,   904,   905,   906,
+    -1,    -1,    -1,   985,   808,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,     4,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
+    -1,    -1,  1014,    -1,   941,   942,   943,    -1,    30,    31,
+    -1,   948,    -1,    35,    -1,    -1,    -1,   344,   345,   346,
+    42,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,    57,  1048,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   466,    -1,   881,   985,   883,
+   471,    -1,    -1,    -1,    -1,    -1,   724,    -1,    -1,    -1,
+   894,    -1,    -1,    -1,   898,   899,   900,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   496,    -1,  1014,    -1,    -1,
+    -1,   502,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   514,   515,    -1,   517,    -1,  1035,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   941,   942,   943,
+    -1,    -1,    -1,    -1,   136,   783,    -1,    -1,   140,    -1,
+    -1,   789,   144,    -1,    -1,    -1,    -1,    -1,  1140,  1141,
+  1142,  1143,  1144,    -1,    -1,    -1,  1148,    -1,    -1,   161,
+    -1,    -1,    -1,   165,    -1,    -1,    -1,    -1,    -1,    -1,
+   172,   985,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1171,
+  1172,  1173,    -1,    -1,    -1,    -1,    -1,   189,   190,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-  1169,  1170,  1171,    -1,   342,    -1,   344,   345,    68,    69,
-    70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-    80,    81,    82,    83,    84,    -1,    -1,    -1,    -1,  1138,
-  1139,  1200,    -1,    -1,    -1,    -1,    -1,  1146,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    12,
-    -1,   389,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    -1,   407,
-    -1,    -1,    -1,    -1,    -1,    -1,   414,    -1,    -1,   417,
-    -1,    -1,    -1,    -1,   422,    -1,    -1,  1256,  1257,    -1,
-  1259,  1200,    -1,    -1,    -1,    -1,  1205,    -1,  1207,    62,
-    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-    83,    84,    -1,    -1,    -1,    -1,  1295,    -1,  1297,    -1,
-    -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
-     8,     9,    -1,    -1,    12,    -1,    14,  1256,  1257,    -1,
-  1259,   489,    -1,   491,    -1,    -1,    -1,    25,    -1,    27,
-    -1,    -1,    -1,    31,    -1,    -1,    -1,    -1,    36,    -1,
-    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,   516,    47,
-    -1,    -1,    -1,    -1,    -1,    -1,    54,  1296,    56,    57,
-    58,    59,    60,    -1,    62,    63,    64,    65,    66,    67,
-    68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-    78,    79,    80,    81,    82,    83,    84,    -1,    86,    87,
-    88,    -1,    90,    91,    92,    93,    94,    95,    -1,    97,
-    -1,    -1,    -1,    -1,   102,    -1,    -1,    -1,  1407,   107,
-   108,   109,    -1,   111,     1,    -1,     3,     4,     5,     6,
-     7,     8,     9,    -1,   592,    -1,    -1,    14,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   603,   604,    -1,   606,   607,
-    -1,    28,    -1,    30,    31,    32,    -1,    -1,    -1,    36,
-    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,
-    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,
-    57,    -1,    -1,    60,    -1,    62,    -1,    -1,  1477,  1478,
-  1479,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,   659,    -1,    80,    -1,    -1,    -1,    -1,   666,   667,
-    -1,    88,  1501,    -1,    -1,    -1,    93,    -1,    -1,    -1,
-   678,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   701,    -1,    -1,    -1,    -1,    28,    29,
-    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    -1,    45,    -1,    47,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
-    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,   759,    -1,    -1,   762,    -1,    86,    87,    88,    -1,
-    90,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,
+  1014,    -1,  1119,    -1,    -1,    -1,    -1,    -1,    -1,   857,
+  1202,   612,   613,    -1,    -1,  1207,   617,    -1,    -1,    -1,
+    -1,    -1,    -1,  1140,  1141,  1142,  1143,  1144,    -1,  1146,
+    -1,  1148,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   890,    -1,    -1,    -1,    -1,    -1,   896,    -1,
+    -1,    -1,   900,   255,  1171,  1172,  1173,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,  1257,  1258,    -1,  1260,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1092,  1093,
+    -1,  1095,    -1,    -1,    -1,  1202,    -1,    -1,    -1,   937,
+    -1,   939,    -1,    -1,    -1,   943,    -1,    -1,    -1,   606,
+   607,    -1,   609,    -1,  1296,  1297,  1298,    -1,    -1,   616,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   110,    -1,    -1,    -1,    -1,    -1,    -1,   795,   796,   797,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   807,
-    -1,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    -1,    13,    14,    15,    -1,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    44,    45,    46,    -1,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
-    60,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,   880,    -1,   882,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,   893,    86,    87,    88,    -1,
-    -1,    -1,    -1,    93,    -1,    95,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
-   110,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    -1,    13,    14,    15,    -1,    17,    18,    19,
-    20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    44,    45,    46,    -1,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
-    60,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,
-  1008,    -1,    -1,    93,    -1,    95,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1140,  1141,  1142,  1143,
+  1144,    -1,    -1,    -1,  1148,    -1,    -1,   985,    -1,    -1,
+  1257,  1258,    -1,  1260,    -1,    -1,    -1,    -1,    -1,    -1,
+   998,    -1,    -1,   355,    -1,    -1,  1004,  1171,  1172,  1173,
+    -1,    -1,    -1,  1011,    -1,    -1,    -1,   674,    -1,   676,
+   677,    -1,   679,    -1,    -1,  1023,    -1,    -1,    -1,  1296,
+    -1,  1298,    -1,    14,    -1,    -1,    -1,    -1,  1202,   790,
+    -1,   792,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
+    31,    -1,    33,    -1,    -1,    -1,    -1,    -1,    -1,  1057,
+    -1,  1059,   414,   720,    -1,   417,  1408,    -1,    -1,    -1,
+   422,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   430,    -1,
+    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,  1087,
+    -1,    -1,    -1,  1257,  1258,    -1,  1260,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   458,    -1,   460,    -1,
+    -1,    -1,    -1,   864,   865,    -1,   867,    -1,    -1,    -1,
+    -1,   473,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,  1296,    -1,  1298,    -1,  1478,  1479,  1480,    -1,
+   492,  1408,    -1,   124,   895,   126,  1144,    -1,    -1,    -1,
+    -1,   808,   133,   134,    -1,    -1,    -1,    -1,    -1,   140,
+  1502,   142,   143,   144,    -1,   146,   147,   148,   149,     4,
+     5,    -1,     7,     8,     9,  1173,    -1,    12,    -1,    14,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   110,    -1,    -1,    -1,    -1,    -1,    -1,  1035,    63,    64,
-    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+    -1,    -1,    -1,    28,   945,    30,    31,    -1,    -1,    -1,
+    -1,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    45,  1478,  1479,  1480,    -1,    -1,    -1,    -1,    -1,    54,
+    -1,    56,    57,    -1,   881,    -1,   883,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,  1502,    -1,   894,    -1,    -1,
+    -1,   898,   899,   900,  1408,     3,     4,     5,     6,     7,
+     8,     9,   233,   234,    12,    -1,    14,    -1,    -1,  1010,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    12,    13,    14,    -1,   111,    -1,    -1,    -1,
-    -1,    -1,  1090,  1091,    -1,  1093,    -1,    -1,    28,    29,
-    30,    31,    32,    -1,    34,    35,    36,    -1,    38,    39,
-    40,    41,    42,    43,    -1,    45,    -1,    47,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
-    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,  1153,    86,    87,    88,    -1,
-    90,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,
+    28,  1022,    30,    31,   255,    -1,    -1,    -1,    36,    -1,
+    -1,    -1,    -1,    41,   941,   942,   943,    45,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+     4,     5,    -1,     7,     8,     9,    -1,    -1,    -1,    -1,
+    14,    -1,    70,   294,  1478,  1479,  1480,  1315,    -1,    -1,
+    -1,    -1,    80,   675,    28,    -1,    30,    31,   985,    -1,
+    88,    -1,    36,    -1,    -1,    93,    -1,    -1,  1502,    -1,
+    -1,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    54,    -1,    56,    57,    -1,    -1,    -1,  1108,    -1,    -1,
+    -1,   342,    -1,   344,   345,     3,     4,     5,     6,     7,
+     8,     9,   724,    -1,    -1,    -1,    14,    -1,    -1,   731,
+   732,    -1,   734,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    28,    -1,    30,    31,    -1,    -1,  1147,    -1,    36,    -1,
+    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,   389,    -1,
+    -1,    -1,    -1,   765,    -1,   767,    54,    -1,    56,    57,
+   772,   773,   774,    -1,    62,    -1,   407,    -1,   780,    -1,
+    -1,    -1,    70,   414,    -1,    -1,   417,    -1,    -1,    -1,
+    -1,   422,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,  1210,
+    -1,    -1,    -1,  1214,    -1,    -1,    -1,    -1,    -1,     3,
+     4,     5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,
+    14,    -1,  1480,  1140,  1141,  1142,  1143,  1144,    -1,    -1,
+    -1,  1148,    -1,    -1,    28,    -1,    30,    31,  1249,  1497,
+    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,   489,    -1,
+   491,    45,    -1,    -1,  1171,  1172,  1173,    -1,    -1,    -1,
+    54,    -1,    56,    57,    -1,    -1,     1,    -1,     3,     4,
+     5,     6,     7,     8,     9,   516,    70,    -1,    -1,    14,
+    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,
+    -1,    -1,    -1,    28,    88,    30,    31,    32,    -1,    93,
+    -1,    36,    37,    -1,    -1,    -1,    41,    -1,    -1,    -1,
+    45,    46,  1323,    48,    -1,    -1,  1327,    -1,    -1,    54,
+    -1,    56,    57,    -1,    -1,    60,    12,    62,    -1,   941,
+   942,    -1,    -1,    -1,    -1,    70,    -1,    -1,  1349,  1350,
+  1257,  1258,    -1,  1260,    -1,    80,    -1,    -1,    -1,    -1,
+    -1,   592,    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,
+    -1,    -1,   603,   604,    -1,   606,   607,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   109,    -1,    62,    63,    64,    65,
+    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
+    -1,    -1,  1014,    -1,    -1,    -1,    -1,    -1,    -1,     1,
+    -1,     3,     4,     5,     6,     7,     8,     9,   659,    -1,
+    12,    -1,    14,    -1,    -1,   666,   667,    -1,    -1,    -1,
+    -1,    -1,    -1,    25,    -1,    27,  1048,   678,    -1,    31,
+    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,
+    -1,    -1,    -1,    45,    -1,    47,    -1,    -1,    -1,    -1,
+   701,    -1,    54,    -1,    56,    57,    58,    59,    60,    -1,
+    62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,    -1,    86,    87,    88,    -1,    90,    91,
+    92,    93,    94,    95,    -1,    97,    -1,    -1,    -1,    -1,
+   102,    -1,    -1,    -1,    -1,   107,   108,   109,   759,   111,
+    -1,   762,    -1,    -1,    -1,    -1,    -1,    -1,  1140,  1141,
+    -1,    -1,    -1,    -1,    -1,    -1,  1148,    -1,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   110,    -1,    -1,    -1,    -1,    -1,     1,  1185,     3,     4,
+    -1,    -1,    -1,    -1,    -1,   796,   797,   798,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   808,    -1,    -1,
+    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,     8,
+     9,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
+  1202,    -1,    -1,    -1,    -1,  1207,    -1,    -1,    -1,    28,
+    29,    30,    31,    32,    -1,    34,    35,    36,    -1,    38,
+    39,    40,    41,    42,    43,    -1,    45,    -1,    47,    -1,
+    49,    50,    51,    52,    53,    54,    -1,    56,    57,    58,
+    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+   881,    70,   883,    -1,    -1,  1257,  1258,    -1,  1260,    78,
+    79,    80,    -1,   894,    -1,    -1,    -1,    86,    87,    88,
+    -1,    90,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,
+     1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
+    11,   110,    13,    14,    15,  1297,    17,    18,    19,    20,
+    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
+    41,    42,    43,    44,    45,    46,    -1,    -1,    49,    50,
+    51,    52,    53,    54,    -1,    56,    57,    58,    -1,    60,
+    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
+    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,
+    -1,    -1,    93,    -1,    95,    -1,    -1,    -1,  1009,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,   110,
+     1,    -1,     3,     4,     5,     6,     7,     8,     9,    10,
+    11,    -1,    13,    14,    15,  1036,    17,    18,    19,    20,
+    21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+    31,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
+    41,    42,    43,    44,    45,    46,    -1,    -1,    49,    50,
+    51,    52,    53,    54,    -1,    56,    57,    58,    -1,    60,
+    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
+    -1,  1092,  1093,    -1,  1095,    -1,    -1,    78,    79,    80,
+    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    -1,    -1,
+    -1,    -1,    93,    -1,    95,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
+    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,     8,
+     9,    10,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,  1155,    -1,    -1,    -1,    -1,    28,
+    29,    30,    31,    32,    -1,    34,    35,    36,    -1,    38,
+    39,    40,    41,    42,    43,    -1,    45,    -1,    47,    -1,
+    49,    50,    51,    52,    53,    54,  1187,    56,    57,    58,
+    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+    -1,    70,    -1,    -1,  1205,    -1,  1207,    -1,    -1,    78,
+    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
+    -1,    90,    -1,    -1,    93,    94,     1,    -1,     3,     4,
      5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-    -1,    -1,    -1,    -1,    -1,  1203,    -1,  1205,    -1,    -1,
+    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     -1,    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,
     35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
     45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
@@ -3354,6 +3329,13 @@ static const short yycheck[] = {     4,
      9,    80,    -1,    -1,    -1,    14,    -1,    -1,    -1,    88,
     -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    28,
     -1,    30,    31,    32,    -1,    -1,    -1,    36,    37,    -1,
+   109,    -1,    41,    -1,    -1,    -1,    45,    46,    -1,    48,
+    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
+    -1,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    70,     1,    -1,     3,     4,     5,     6,     7,     8,
+     9,    80,    -1,    -1,    -1,    14,    -1,    -1,    -1,    88,
+    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    -1,    28,
+    -1,    30,    31,    32,    -1,    -1,    -1,    36,    37,    -1,
    109,    -1,    41,    -1,    -1,    -1,    45,    46,    -1,    48,
     -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
     -1,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -3563,34 +3545,60 @@ static const short yycheck[] = {     4,
     34,    35,    36,    -1,    38,    39,    40,    41,    42,    43,
     -1,    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,
     54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    67,    -1,    -1,    70,     3,     4,     5,
+    -1,    -1,    -1,    67,    -1,     1,    70,     3,     4,     5,
      6,     7,     8,     9,    78,    79,    80,    -1,    14,    -1,
     -1,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,
-    -1,    -1,    28,    -1,    30,    31,    -1,    -1,    -1,    -1,
-    36,    -1,    -1,    -1,    -1,    41,   110,    -1,    -1,    45,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,
-    56,    57,    -1,    -1,    -1,    -1,    62,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    70,     3,     4,     5,     6,     7,
-     8,     9,    -1,    -1,    80,    -1,    14,    -1,    -1,    -1,
-    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,
-    28,    -1,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,
-    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+    -1,    27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,
+    36,    -1,    -1,    -1,    -1,    41,   110,    -1,    44,    45,
+    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    -1,
+    56,    57,    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,     1,    80,     3,     4,     5,     6,     7,
+     8,     9,    88,    -1,    -1,    -1,    14,    93,    -1,    -1,
+    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    28,    -1,    30,    31,    32,    -1,    -1,    -1,    36,    -1,
+    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    46,    -1,
+    48,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
+    -1,    -1,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    70,     3,     4,     5,     6,     7,     8,     9,
+    -1,    -1,    80,    -1,    14,    -1,    -1,    -1,    -1,    -1,
+    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    28,    -1,
+    30,    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,
+    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,
+    60,    -1,     3,     4,     5,     6,     7,     8,     9,    -1,
+    70,    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,
+    80,    -1,    -1,    -1,    -1,    -1,    -1,    28,    88,    30,
+    31,    -1,    -1,    93,    -1,    36,    -1,    -1,    -1,    -1,
+    41,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    54,    -1,    56,    57,     3,     4,     5,
+     6,     7,     8,     9,    -1,    -1,    -1,    -1,    14,    70,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,
+    -1,    -1,    -1,    -1,    -1,    31,    -1,    88,    -1,    -1,
+    36,    -1,    93,    -1,    -1,    41,    -1,    -1,    -1,    45,
+    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,
+    56,    57,    -1,    -1,    -1,    -1,    31,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,    63,    64,
+    65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
     63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
-    73,    74,    70,    76,    77,    78,    79,    80,    81,    82,
-    83,    84,    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    88,    -1,    -1,    -1,    -1,    93,    63,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+    83,    84,    63,    64,    65,    66,    67,    68,    69,    70,
+    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+    81,    82,    83,    84,    -1,    -1,    -1,    -1,   111,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    59,    -1,    -1,
-   107,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-    82,    83,    84,    62,    63,    64,    65,    66,    67,    68,
-    69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84,    63,    64,    65,    66,
-    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84
+    -1,    -1,    -1,    59,    -1,    -1,   107,    63,    64,    65,
+    66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    62,
+    63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+    73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+    83,    84,    63,    64,    65,    66,    67,    68,    69,    70,
+    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+    81,    82,    83,    84,    63,    64,    65,    66,    67,    68,
+    69,    70,    71,    72,    73,    74,    -1,    76,    77,    78,
+    79,    80,    81,    82,    83,    84
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
 #line 3 "/usr/lib/bison.simple"
@@ -4091,106 +4099,106 @@ yyreduce:
   switch (yyn) {
 
 case 2:
-#line 338 "parse.y"
+#line 337 "parse.y"
 { finish_translation_unit (); ;
     break;}
 case 3:
-#line 346 "parse.y"
+#line 345 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 4:
-#line 348 "parse.y"
+#line 347 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 5:
-#line 350 "parse.y"
+#line 349 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 8:
-#line 359 "parse.y"
+#line 358 "parse.y"
 { have_extern_spec = 1;
                  used_extern_spec = 0;
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 9:
-#line 364 "parse.y"
+#line 363 "parse.y"
 { have_extern_spec = 0; ;
     break;}
 case 10:
-#line 369 "parse.y"
+#line 368 "parse.y"
 { yyval.itype = pedantic;
                  pedantic = 0; ;
     break;}
 case 12:
-#line 378 "parse.y"
+#line 377 "parse.y"
 { if (pending_lang_change) do_pending_lang_change(); ;
     break;}
 case 13:
-#line 380 "parse.y"
+#line 379 "parse.y"
 { if (! toplevel_bindings_p () && ! pseudo_global_level_p())
                  pop_everything (); ;
     break;}
 case 14:
-#line 386 "parse.y"
+#line 385 "parse.y"
 { if (pending_inlines) do_pending_inlines (); ;
     break;}
 case 15:
-#line 388 "parse.y"
+#line 387 "parse.y"
 { if (pending_inlines) do_pending_inlines (); ;
     break;}
 case 16:
-#line 390 "parse.y"
+#line 389 "parse.y"
 { if (pending_inlines) do_pending_inlines (); ;
     break;}
 case 17:
-#line 392 "parse.y"
+#line 391 "parse.y"
 { if (TREE_CHAIN (yyvsp[-2].ttype)) yyvsp[-2].ttype = combine_strings (yyvsp[-2].ttype);
                  assemble_asm (yyvsp[-2].ttype); ;
     break;}
 case 18:
-#line 395 "parse.y"
+#line 394 "parse.y"
 { pop_lang_context (); ;
     break;}
 case 19:
-#line 397 "parse.y"
+#line 396 "parse.y"
 { if (pending_inlines) do_pending_inlines ();
                  pop_lang_context (); ;
     break;}
 case 20:
-#line 400 "parse.y"
+#line 399 "parse.y"
 { if (pending_inlines) do_pending_inlines ();
                  pop_lang_context (); ;
     break;}
 case 21:
-#line 403 "parse.y"
+#line 402 "parse.y"
 { push_namespace (yyvsp[-1].ttype); ;
     break;}
 case 22:
-#line 405 "parse.y"
+#line 404 "parse.y"
 { pop_namespace (); ;
     break;}
 case 23:
-#line 407 "parse.y"
+#line 406 "parse.y"
 { push_namespace (NULL_TREE); ;
     break;}
 case 24:
-#line 409 "parse.y"
+#line 408 "parse.y"
 { pop_namespace (); ;
     break;}
 case 26:
-#line 412 "parse.y"
+#line 411 "parse.y"
 { do_toplevel_using_decl (yyvsp[-1].ttype); ;
     break;}
 case 28:
-#line 415 "parse.y"
+#line 414 "parse.y"
 { pedantic = yyvsp[-1].itype; ;
     break;}
 case 29:
-#line 420 "parse.y"
+#line 419 "parse.y"
 { begin_only_namespace_names (); ;
     break;}
 case 30:
-#line 422 "parse.y"
+#line 421 "parse.y"
 {
                  end_only_namespace_names ();
                  if (lastiddecl)
@@ -4199,35 +4207,35 @@ case 30:
                ;
     break;}
 case 31:
-#line 432 "parse.y"
+#line 431 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 32:
-#line 434 "parse.y"
+#line 433 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 33:
-#line 436 "parse.y"
+#line 435 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 34:
-#line 441 "parse.y"
+#line 440 "parse.y"
 { yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 35:
-#line 443 "parse.y"
+#line 442 "parse.y"
 { yyval.ttype = build_parse_node (SCOPE_REF, global_namespace, yyvsp[0].ttype); ;
     break;}
 case 36:
-#line 445 "parse.y"
+#line 444 "parse.y"
 { yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 37:
-#line 450 "parse.y"
+#line 449 "parse.y"
 { begin_only_namespace_names (); ;
     break;}
 case 38:
-#line 452 "parse.y"
+#line 451 "parse.y"
 {
                  end_only_namespace_names ();
                  /* If no declaration was found, the using-directive is
@@ -4239,7 +4247,7 @@ case 38:
                ;
     break;}
 case 39:
-#line 465 "parse.y"
+#line 464 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
@@ -4247,7 +4255,7 @@ case 39:
                ;
     break;}
 case 40:
-#line 471 "parse.y"
+#line 470 "parse.y"
 {
                  yyval.ttype = yyvsp[-1].ttype;
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
@@ -4256,86 +4264,86 @@ case 40:
                ;
     break;}
 case 43:
-#line 482 "parse.y"
+#line 481 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 44:
-#line 484 "parse.y"
+#line 483 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 45:
-#line 489 "parse.y"
+#line 488 "parse.y"
 { push_lang_context (yyvsp[0].ttype); ;
     break;}
 case 46:
-#line 491 "parse.y"
+#line 490 "parse.y"
 { if (current_lang_name != yyvsp[0].ttype)
                    cp_error ("use of linkage spec `%D' is different from previous spec `%D'", yyvsp[0].ttype, current_lang_name);
                  pop_lang_context (); push_lang_context (yyvsp[0].ttype); ;
     break;}
 case 47:
-#line 498 "parse.y"
+#line 497 "parse.y"
 { begin_template_parm_list (); ;
     break;}
 case 48:
-#line 500 "parse.y"
+#line 499 "parse.y"
 { yyval.ttype = end_template_parm_list (yyvsp[-1].ttype); ;
     break;}
 case 49:
-#line 502 "parse.y"
+#line 501 "parse.y"
 { begin_specialization(); 
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 50:
-#line 508 "parse.y"
+#line 507 "parse.y"
 { yyval.ttype = process_template_parm (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 51:
-#line 510 "parse.y"
+#line 509 "parse.y"
 { yyval.ttype = process_template_parm (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 52:
-#line 515 "parse.y"
+#line 514 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 53:
-#line 517 "parse.y"
+#line 516 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 54:
-#line 521 "parse.y"
+#line 520 "parse.y"
 { yyval.ttype = finish_template_type_parm (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 55:
-#line 523 "parse.y"
+#line 522 "parse.y"
 { yyval.ttype = finish_template_type_parm (class_type_node, yyvsp[0].ttype); ;
     break;}
 case 56:
-#line 528 "parse.y"
+#line 527 "parse.y"
 { yyval.ttype = finish_template_template_parm (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 57:
-#line 540 "parse.y"
+#line 539 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 58:
-#line 542 "parse.y"
+#line 541 "parse.y"
 { yyval.ttype = build_tree_list (groktypename (yyvsp[0].ftype.t), yyvsp[-2].ttype); ;
     break;}
 case 59:
-#line 544 "parse.y"
+#line 543 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;
     break;}
 case 60:
-#line 546 "parse.y"
+#line 545 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-2].ftype.t); ;
     break;}
 case 61:
-#line 548 "parse.y"
+#line 547 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 62:
-#line 550 "parse.y"
+#line 549 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) != TEMPLATE_DECL
                      && TREE_CODE (yyvsp[0].ttype) != TEMPLATE_TEMPLATE_PARM
@@ -4348,66 +4356,66 @@ case 62:
                ;
     break;}
 case 63:
-#line 564 "parse.y"
+#line 563 "parse.y"
 { finish_template_decl (yyvsp[-1].ttype); ;
     break;}
 case 64:
-#line 566 "parse.y"
+#line 565 "parse.y"
 { finish_template_decl (yyvsp[-1].ttype); ;
     break;}
 case 65:
-#line 571 "parse.y"
+#line 570 "parse.y"
 { if (pending_inlines) do_pending_inlines (); ;
     break;}
 case 66:
-#line 573 "parse.y"
+#line 572 "parse.y"
 { if (pending_inlines) do_pending_inlines (); ;
     break;}
 case 67:
-#line 575 "parse.y"
+#line 574 "parse.y"
 { if (pending_inlines) do_pending_inlines (); ;
     break;}
 case 68:
-#line 577 "parse.y"
+#line 576 "parse.y"
 { if (pending_inlines) do_pending_inlines ();
                  pop_lang_context (); ;
     break;}
 case 69:
-#line 580 "parse.y"
+#line 579 "parse.y"
 { if (pending_inlines) do_pending_inlines ();
                  pop_lang_context (); ;
     break;}
 case 70:
-#line 583 "parse.y"
+#line 582 "parse.y"
 { pedantic = yyvsp[-1].itype; ;
     break;}
 case 72:
-#line 589 "parse.y"
+#line 588 "parse.y"
 {;
     break;}
 case 73:
-#line 591 "parse.y"
+#line 590 "parse.y"
 { note_list_got_semicolon (yyvsp[-2].ftype.t); ;
     break;}
 case 74:
-#line 593 "parse.y"
+#line 592 "parse.y"
 { maybe_process_partial_specialization (yyvsp[-1].ftype.t);
                  note_got_semicolon (yyvsp[-1].ftype.t); ;
     break;}
 case 76:
-#line 600 "parse.y"
+#line 599 "parse.y"
 {;
     break;}
 case 77:
-#line 602 "parse.y"
+#line 601 "parse.y"
 { note_list_got_semicolon (yyvsp[-2].ftype.t); ;
     break;}
 case 78:
-#line 604 "parse.y"
+#line 603 "parse.y"
 { pedwarn ("empty declaration"); ;
     break;}
 case 80:
-#line 607 "parse.y"
+#line 606 "parse.y"
 {
                  tree t, attrs;
                  split_specs_attrs (yyvsp[-1].ftype.t, &t, &attrs);
@@ -4416,124 +4424,124 @@ case 80:
                ;
     break;}
 case 84:
-#line 620 "parse.y"
+#line 619 "parse.y"
 { yyval.itype = 0; ;
     break;}
 case 85:
-#line 622 "parse.y"
+#line 621 "parse.y"
 { yyval.itype = 1; ;
     break;}
 case 91:
-#line 638 "parse.y"
+#line 637 "parse.y"
 { finish_function (lineno, (int)yyvsp[-1].itype, 0); ;
     break;}
 case 92:
-#line 640 "parse.y"
+#line 639 "parse.y"
 { ;
     break;}
 case 93:
-#line 642 "parse.y"
+#line 641 "parse.y"
 { ;
     break;}
 case 94:
-#line 647 "parse.y"
+#line 646 "parse.y"
 { yyval.ttype = begin_constructor_declarator (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 95:
-#line 649 "parse.y"
+#line 648 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 96:
-#line 651 "parse.y"
+#line 650 "parse.y"
 { yyval.ttype = begin_constructor_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype); 
                  yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 97:
-#line 655 "parse.y"
+#line 654 "parse.y"
 { yyval.ttype = begin_constructor_declarator (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 98:
-#line 657 "parse.y"
+#line 656 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 99:
-#line 659 "parse.y"
+#line 658 "parse.y"
 { yyval.ttype = begin_constructor_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype);
                  yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 100:
-#line 663 "parse.y"
+#line 662 "parse.y"
 { yyval.ttype = begin_constructor_declarator (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 101:
-#line 665 "parse.y"
+#line 664 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 102:
-#line 667 "parse.y"
+#line 666 "parse.y"
 { yyval.ttype = begin_constructor_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype);
                  yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 103:
-#line 671 "parse.y"
+#line 670 "parse.y"
 { yyval.ttype = begin_constructor_declarator (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 104:
-#line 673 "parse.y"
+#line 672 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 105:
-#line 675 "parse.y"
+#line 674 "parse.y"
 { yyval.ttype = begin_constructor_declarator (yyvsp[-4].ttype, yyvsp[-3].ttype); 
                  yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 106:
-#line 682 "parse.y"
+#line 681 "parse.y"
 { if (!begin_function_definition (yyvsp[-1].ftype.t, yyvsp[0].ttype))
                    YYERROR1; ;
     break;}
 case 107:
-#line 685 "parse.y"
+#line 684 "parse.y"
 { if (!begin_function_definition (yyvsp[-1].ttype, yyvsp[0].ttype))
                    YYERROR1; ;
     break;}
 case 108:
-#line 688 "parse.y"
+#line 687 "parse.y"
 { if (!begin_function_definition (NULL_TREE, yyvsp[0].ttype))
                    YYERROR1; ;
     break;}
 case 109:
-#line 691 "parse.y"
+#line 690 "parse.y"
 { if (!begin_function_definition (yyvsp[-1].ttype, yyvsp[0].ttype))
                    YYERROR1; ;
     break;}
 case 110:
-#line 694 "parse.y"
+#line 693 "parse.y"
 { if (!begin_function_definition (NULL_TREE, yyvsp[0].ttype))
                    YYERROR1; ;
     break;}
 case 111:
-#line 700 "parse.y"
+#line 699 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 112:
-#line 702 "parse.y"
+#line 701 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 113:
-#line 704 "parse.y"
+#line 703 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-5].ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 114:
-#line 706 "parse.y"
+#line 705 "parse.y"
 { yyval.ttype = make_call_declarator (yyvsp[-3].ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 115:
-#line 713 "parse.y"
+#line 712 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ttype = start_method (specs, yyvsp[0].ttype);
                 rest_of_mdef:
@@ -4544,34 +4552,34 @@ case 115:
                  reinit_parse_for_method (yychar, yyval.ttype); ;
     break;}
 case 116:
-#line 722 "parse.y"
+#line 721 "parse.y"
 { yyval.ttype = start_method (NULL_TREE, yyvsp[0].ttype); goto rest_of_mdef; ;
     break;}
 case 117:
-#line 724 "parse.y"
+#line 723 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ;
     break;}
 case 118:
-#line 727 "parse.y"
+#line 726 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ;
     break;}
 case 119:
-#line 730 "parse.y"
+#line 729 "parse.y"
 { yyval.ttype = start_method (NULL_TREE, yyval.ttype); goto rest_of_mdef; ;
     break;}
 case 120:
-#line 732 "parse.y"
+#line 731 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ttype = start_method (specs, yyvsp[0].ttype); goto rest_of_mdef; ;
     break;}
 case 121:
-#line 735 "parse.y"
+#line 734 "parse.y"
 { yyval.ttype = start_method (NULL_TREE, yyval.ttype); goto rest_of_mdef; ;
     break;}
 case 122:
-#line 740 "parse.y"
+#line 739 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
@@ -4579,19 +4587,19 @@ case 122:
                ;
     break;}
 case 123:
-#line 749 "parse.y"
+#line 748 "parse.y"
 { store_return_init (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 124:
-#line 751 "parse.y"
+#line 750 "parse.y"
 { store_return_init (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 125:
-#line 753 "parse.y"
+#line 752 "parse.y"
 { store_return_init (yyval.ttype, NULL_TREE); ;
     break;}
 case 126:
-#line 758 "parse.y"
+#line 757 "parse.y"
 {
                  if (yyvsp[0].itype == 0)
                    error ("no base initializers given following ':'");
@@ -4603,7 +4611,7 @@ case 126:
                ;
     break;}
 case 127:
-#line 771 "parse.y"
+#line 770 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
@@ -4622,15 +4630,15 @@ case 127:
                ;
     break;}
 case 128:
-#line 791 "parse.y"
+#line 790 "parse.y"
 { yyval.itype = 0; ;
     break;}
 case 129:
-#line 793 "parse.y"
+#line 792 "parse.y"
 { yyval.itype = 1; ;
     break;}
 case 132:
-#line 800 "parse.y"
+#line 799 "parse.y"
 {
                  if (current_class_name)
                    pedwarn ("anachronistic old style base class initializer");
@@ -4638,7 +4646,7 @@ case 132:
                ;
     break;}
 case 133:
-#line 806 "parse.y"
+#line 805 "parse.y"
 {
                  if (current_class_name)
                    pedwarn ("anachronistic old style base class initializer");
@@ -4646,89 +4654,89 @@ case 133:
                ;
     break;}
 case 134:
-#line 812 "parse.y"
+#line 811 "parse.y"
 { expand_member_init (current_class_ref, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 135:
-#line 814 "parse.y"
+#line 813 "parse.y"
 { expand_member_init (current_class_ref, yyvsp[-1].ttype, void_type_node); ;
     break;}
 case 136:
-#line 816 "parse.y"
+#line 815 "parse.y"
 { expand_member_init (current_class_ref, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 137:
-#line 818 "parse.y"
+#line 817 "parse.y"
 { expand_member_init (current_class_ref, yyvsp[-1].ttype, void_type_node); ;
     break;}
 case 138:
-#line 820 "parse.y"
+#line 819 "parse.y"
 { expand_member_init (current_class_ref, TYPE_MAIN_DECL (yyvsp[-3].ttype),
                                      yyvsp[-1].ttype); ;
     break;}
 case 139:
-#line 823 "parse.y"
+#line 822 "parse.y"
 { expand_member_init (current_class_ref, TYPE_MAIN_DECL (yyvsp[-1].ttype),
                                      void_type_node); ;
     break;}
 case 151:
-#line 849 "parse.y"
+#line 848 "parse.y"
 { do_type_instantiation (yyvsp[-1].ftype.t, NULL_TREE);
                  yyungetc (';', 1); ;
     break;}
 case 153:
-#line 853 "parse.y"
+#line 852 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  do_decl_instantiation (specs, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 155:
-#line 857 "parse.y"
+#line 856 "parse.y"
 { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 157:
-#line 860 "parse.y"
+#line 859 "parse.y"
 { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 159:
-#line 863 "parse.y"
+#line 862 "parse.y"
 { do_type_instantiation (yyvsp[-1].ftype.t, yyvsp[-4].ttype);
                  yyungetc (';', 1); ;
     break;}
 case 161:
-#line 868 "parse.y"
+#line 867 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  do_decl_instantiation (specs, yyvsp[0].ttype, yyvsp[-4].ttype); ;
     break;}
 case 163:
-#line 872 "parse.y"
+#line 871 "parse.y"
 { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-3].ttype); ;
     break;}
 case 165:
-#line 875 "parse.y"
+#line 874 "parse.y"
 { do_decl_instantiation (NULL_TREE, yyvsp[0].ttype, yyvsp[-3].ttype); ;
     break;}
 case 167:
-#line 880 "parse.y"
+#line 879 "parse.y"
 { begin_explicit_instantiation(); ;
     break;}
 case 168:
-#line 883 "parse.y"
+#line 882 "parse.y"
 { end_explicit_instantiation(); ;
     break;}
 case 169:
-#line 892 "parse.y"
+#line 891 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 170:
-#line 895 "parse.y"
+#line 894 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 172:
-#line 902 "parse.y"
+#line 901 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 173:
-#line 906 "parse.y"
+#line 905 "parse.y"
 { 
                  if (yychar == YYEMPTY)
                    yychar = YYLEX;
@@ -4738,7 +4746,7 @@ case 173:
                ;
     break;}
 case 175:
-#line 917 "parse.y"
+#line 916 "parse.y"
 {
                  /* Handle `Class<Class<Type>>' without space in the `>>' */
                  pedwarn ("`>>' should be `> >' in template class name");
@@ -4746,79 +4754,79 @@ case 175:
                ;
     break;}
 case 176:
-#line 926 "parse.y"
+#line 925 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 178:
-#line 932 "parse.y"
+#line 931 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
     break;}
 case 179:
-#line 934 "parse.y"
+#line 933 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 180:
-#line 939 "parse.y"
+#line 938 "parse.y"
 { yyval.ttype = groktypename (yyvsp[0].ftype.t); ;
     break;}
 case 181:
-#line 941 "parse.y"
+#line 940 "parse.y"
 { yyval.ttype = lastiddecl; ;
     break;}
 case 183:
-#line 947 "parse.y"
+#line 946 "parse.y"
 { yyval.code = NEGATE_EXPR; ;
     break;}
 case 184:
-#line 949 "parse.y"
+#line 948 "parse.y"
 { yyval.code = CONVERT_EXPR; ;
     break;}
 case 185:
-#line 951 "parse.y"
+#line 950 "parse.y"
 { yyval.code = PREINCREMENT_EXPR; ;
     break;}
 case 186:
-#line 953 "parse.y"
+#line 952 "parse.y"
 { yyval.code = PREDECREMENT_EXPR; ;
     break;}
 case 187:
-#line 955 "parse.y"
+#line 954 "parse.y"
 { yyval.code = TRUTH_NOT_EXPR; ;
     break;}
 case 188:
-#line 960 "parse.y"
+#line 959 "parse.y"
 { yyval.ttype = build_x_compound_expr (yyval.ttype); ;
     break;}
 case 190:
-#line 966 "parse.y"
+#line 965 "parse.y"
 { error ("ANSI C++ forbids an empty condition for `%s'",
                         cond_stmt_keyword);
                  yyval.ttype = integer_zero_node; ;
     break;}
 case 191:
-#line 970 "parse.y"
+#line 969 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 192:
-#line 975 "parse.y"
+#line 974 "parse.y"
 { error ("ANSI C++ forbids an empty condition for `%s'",
                         cond_stmt_keyword);
                  yyval.ttype = integer_zero_node; ;
     break;}
 case 193:
-#line 979 "parse.y"
+#line 978 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 194:
-#line 984 "parse.y"
+#line 983 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 196:
-#line 987 "parse.y"
+#line 986 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 197:
-#line 992 "parse.y"
+#line 991 "parse.y"
 { {
                  tree d;
                  for (d = getdecls (); d; d = TREE_CHAIN (d))
@@ -4837,7 +4845,7 @@ case 197:
                ;
     break;}
 case 198:
-#line 1009 "parse.y"
+#line 1008 "parse.y"
 { 
                  cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-3].ttype, 1, LOOKUP_ONLYCONVERTING);
                  resume_momentary (yyvsp[-2].itype);
@@ -4847,182 +4855,182 @@ case 198:
                ;
     break;}
 case 204:
-#line 1028 "parse.y"
+#line 1027 "parse.y"
 { yyval.ttype = begin_compound_stmt (1); ;
     break;}
 case 205:
-#line 1030 "parse.y"
+#line 1029 "parse.y"
 { finish_compound_stmt (1, yyvsp[-1].ttype); ;
     break;}
 case 207:
-#line 1037 "parse.y"
+#line 1036 "parse.y"
 { yyval.ttype = expr_tree_cons (NULL_TREE, yyval.ttype, 
                                  build_expr_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 208:
-#line 1040 "parse.y"
+#line 1039 "parse.y"
 { yyval.ttype = expr_tree_cons (NULL_TREE, yyval.ttype, 
                                  build_expr_list (NULL_TREE, error_mark_node)); ;
     break;}
 case 209:
-#line 1043 "parse.y"
+#line 1042 "parse.y"
 { chainon (yyval.ttype, build_expr_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 210:
-#line 1045 "parse.y"
+#line 1044 "parse.y"
 { chainon (yyval.ttype, build_expr_list (NULL_TREE, error_mark_node)); ;
     break;}
 case 211:
-#line 1050 "parse.y"
+#line 1049 "parse.y"
 { yyval.ttype = build_expr_list (NULL_TREE, yyval.ttype); ;
     break;}
 case 213:
-#line 1056 "parse.y"
+#line 1055 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 214:
-#line 1059 "parse.y"
+#line 1058 "parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
 case 215:
-#line 1062 "parse.y"
+#line 1061 "parse.y"
 { yyval.ttype = build_x_indirect_ref (yyvsp[0].ttype, "unary *"); ;
     break;}
 case 216:
-#line 1064 "parse.y"
+#line 1063 "parse.y"
 { yyval.ttype = build_x_unary_op (ADDR_EXPR, yyvsp[0].ttype); ;
     break;}
 case 217:
-#line 1066 "parse.y"
+#line 1065 "parse.y"
 { yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, yyvsp[0].ttype); ;
     break;}
 case 218:
-#line 1068 "parse.y"
+#line 1067 "parse.y"
 { yyval.ttype = finish_unary_op_expr (yyvsp[-1].code, yyvsp[0].ttype); ;
     break;}
 case 219:
-#line 1071 "parse.y"
+#line 1070 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids `&&'");
                  yyval.ttype = finish_label_address_expr (yyvsp[0].ttype); ;
     break;}
 case 220:
-#line 1075 "parse.y"
+#line 1074 "parse.y"
 { yyval.ttype = expr_sizeof (yyvsp[0].ttype); ;
     break;}
 case 221:
-#line 1077 "parse.y"
+#line 1076 "parse.y"
 { yyval.ttype = c_sizeof (groktypename (yyvsp[-1].ftype.t)); ;
     break;}
 case 222:
-#line 1079 "parse.y"
+#line 1078 "parse.y"
 { yyval.ttype = grok_alignof (yyvsp[0].ttype); ;
     break;}
 case 223:
-#line 1081 "parse.y"
+#line 1080 "parse.y"
 { yyval.ttype = c_alignof (groktypename (yyvsp[-1].ftype.t)); 
                  check_for_new_type ("alignof", yyvsp[-1].ftype); ;
     break;}
 case 224:
-#line 1087 "parse.y"
+#line 1086 "parse.y"
 { yyval.ttype = build_new (NULL_TREE, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-1].itype); 
                  check_for_new_type ("new", yyvsp[0].ftype); ;
     break;}
 case 225:
-#line 1090 "parse.y"
+#line 1089 "parse.y"
 { yyval.ttype = build_new (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-2].itype); 
                  check_for_new_type ("new", yyvsp[-1].ftype); ;
     break;}
 case 226:
-#line 1093 "parse.y"
+#line 1092 "parse.y"
 { yyval.ttype = build_new (yyvsp[-1].ttype, yyvsp[0].ftype.t, NULL_TREE, yyvsp[-2].itype); 
                  check_for_new_type ("new", yyvsp[0].ftype); ;
     break;}
 case 227:
-#line 1096 "parse.y"
+#line 1095 "parse.y"
 { yyval.ttype = build_new (yyvsp[-2].ttype, yyvsp[-1].ftype.t, yyvsp[0].ttype, yyvsp[-3].itype); 
                  check_for_new_type ("new", yyvsp[-1].ftype); ;
     break;}
 case 228:
-#line 1109 "parse.y"
+#line 1108 "parse.y"
 { yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-1].ftype.t),
                                  NULL_TREE, yyvsp[-4].itype); 
                  check_for_new_type ("new", yyvsp[-1].ftype); ;
     break;}
 case 229:
-#line 1114 "parse.y"
+#line 1113 "parse.y"
 { yyval.ttype = build_new (NULL_TREE, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-5].itype); 
                  check_for_new_type ("new", yyvsp[-2].ftype); ;
     break;}
 case 230:
-#line 1118 "parse.y"
+#line 1117 "parse.y"
 { yyval.ttype = build_new (yyvsp[-4].ttype, groktypename(yyvsp[-1].ftype.t), NULL_TREE, yyvsp[-5].itype); 
                  check_for_new_type ("new", yyvsp[-1].ftype); ;
     break;}
 case 231:
-#line 1122 "parse.y"
+#line 1121 "parse.y"
 { yyval.ttype = build_new (yyvsp[-5].ttype, groktypename(yyvsp[-2].ftype.t), yyvsp[0].ttype, yyvsp[-6].itype); 
                  check_for_new_type ("new", yyvsp[-2].ftype); ;
     break;}
 case 232:
-#line 1126 "parse.y"
+#line 1125 "parse.y"
 { yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 0, yyvsp[-1].itype); ;
     break;}
 case 233:
-#line 1128 "parse.y"
+#line 1127 "parse.y"
 { yyval.ttype = delete_sanity (yyvsp[0].ttype, NULL_TREE, 1, yyvsp[-3].itype);
                  if (yychar == YYEMPTY)
                    yychar = YYLEX; ;
     break;}
 case 234:
-#line 1132 "parse.y"
+#line 1131 "parse.y"
 { yyval.ttype = delete_sanity (yyvsp[0].ttype, yyvsp[-2].ttype, 2, yyvsp[-4].itype);
                  if (yychar == YYEMPTY)
                    yychar = YYLEX; ;
     break;}
 case 235:
-#line 1136 "parse.y"
+#line 1135 "parse.y"
 { yyval.ttype = build_x_unary_op (REALPART_EXPR, yyvsp[0].ttype); ;
     break;}
 case 236:
-#line 1138 "parse.y"
+#line 1137 "parse.y"
 { yyval.ttype = build_x_unary_op (IMAGPART_EXPR, yyvsp[0].ttype); ;
     break;}
 case 237:
-#line 1148 "parse.y"
+#line 1147 "parse.y"
 { finish_new_placement (NULL_TREE, yyvsp[-2].itype); ;
     break;}
 case 238:
-#line 1151 "parse.y"
+#line 1150 "parse.y"
 { yyval.itype = begin_new_placement (); ;
     break;}
 case 239:
-#line 1155 "parse.y"
+#line 1154 "parse.y"
 { yyval.ttype = finish_new_placement (yyvsp[-1].ttype, yyvsp[-2].itype); ;
     break;}
 case 240:
-#line 1157 "parse.y"
+#line 1156 "parse.y"
 { cp_pedwarn ("old style placement syntax, use () instead");
                  yyval.ttype = finish_new_placement (yyvsp[-1].ttype, yyvsp[-2].itype); ;
     break;}
 case 241:
-#line 1163 "parse.y"
+#line 1162 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 242:
-#line 1165 "parse.y"
+#line 1164 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 243:
-#line 1167 "parse.y"
+#line 1166 "parse.y"
 {
                  cp_error ("`%T' is not a valid expression", yyvsp[-1].ftype.t);
                  yyval.ttype = error_mark_node;
                ;
     break;}
 case 244:
-#line 1175 "parse.y"
+#line 1174 "parse.y"
 {
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids initialization of new expression with `='");
@@ -5034,23 +5042,23 @@ case 244:
                ;
     break;}
 case 245:
-#line 1189 "parse.y"
+#line 1188 "parse.y"
 { yyvsp[-1].ftype.t = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[-1].ftype.t), 0);
                  yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE);
                  check_for_new_type ("cast", yyvsp[-1].ftype); ;
     break;}
 case 246:
-#line 1193 "parse.y"
+#line 1192 "parse.y"
 { yyvsp[-1].ftype.t = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[-1].ftype.t), 0); 
                  yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-1].ftype.t, NULL_TREE, NULL_TREE);
                  check_for_new_type ("cast", yyvsp[-1].ftype); ;
     break;}
 case 248:
-#line 1201 "parse.y"
+#line 1200 "parse.y"
 { yyval.ttype = reparse_absdcl_as_casts (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 249:
-#line 1203 "parse.y"
+#line 1202 "parse.y"
 { 
                  tree init = build_nt (CONSTRUCTOR, NULL_TREE,
                                        nreverse (yyvsp[-2].ttype)); 
@@ -5063,161 +5071,161 @@ case 249:
                ;
     break;}
 case 251:
-#line 1219 "parse.y"
+#line 1218 "parse.y"
 { yyval.ttype = build_x_binary_op (MEMBER_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 252:
-#line 1221 "parse.y"
+#line 1220 "parse.y"
 { yyval.ttype = build_m_component_ref (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 253:
-#line 1223 "parse.y"
+#line 1222 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 254:
-#line 1225 "parse.y"
+#line 1224 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 255:
-#line 1227 "parse.y"
+#line 1226 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 256:
-#line 1229 "parse.y"
+#line 1228 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 257:
-#line 1231 "parse.y"
+#line 1230 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 258:
-#line 1233 "parse.y"
+#line 1232 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 259:
-#line 1235 "parse.y"
+#line 1234 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 260:
-#line 1237 "parse.y"
+#line 1236 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 261:
-#line 1239 "parse.y"
+#line 1238 "parse.y"
 { yyval.ttype = build_x_binary_op (LT_EXPR, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 262:
-#line 1241 "parse.y"
+#line 1240 "parse.y"
 { yyval.ttype = build_x_binary_op (GT_EXPR, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 263:
-#line 1243 "parse.y"
+#line 1242 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 264:
-#line 1245 "parse.y"
+#line 1244 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 265:
-#line 1247 "parse.y"
+#line 1246 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 266:
-#line 1249 "parse.y"
+#line 1248 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 267:
-#line 1251 "parse.y"
+#line 1250 "parse.y"
 { yyval.ttype = build_x_binary_op (yyvsp[-1].code, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 268:
-#line 1253 "parse.y"
+#line 1252 "parse.y"
 { yyval.ttype = build_x_binary_op (TRUTH_ANDIF_EXPR, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 269:
-#line 1255 "parse.y"
+#line 1254 "parse.y"
 { yyval.ttype = build_x_binary_op (TRUTH_ORIF_EXPR, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 270:
-#line 1257 "parse.y"
+#line 1256 "parse.y"
 { yyval.ttype = build_x_conditional_expr (yyval.ttype, yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 271:
-#line 1259 "parse.y"
+#line 1258 "parse.y"
 { yyval.ttype = build_x_modify_expr (yyval.ttype, NOP_EXPR, yyvsp[0].ttype);
                  if (yyval.ttype != error_mark_node)
                     C_SET_EXP_ORIGINAL_CODE (yyval.ttype, MODIFY_EXPR); ;
     break;}
 case 272:
-#line 1263 "parse.y"
+#line 1262 "parse.y"
 { yyval.ttype = build_x_modify_expr (yyval.ttype, yyvsp[-1].code, yyvsp[0].ttype); ;
     break;}
 case 273:
-#line 1265 "parse.y"
+#line 1264 "parse.y"
 { yyval.ttype = build_throw (NULL_TREE); ;
     break;}
 case 274:
-#line 1267 "parse.y"
+#line 1266 "parse.y"
 { yyval.ttype = build_throw (yyvsp[0].ttype); ;
     break;}
 case 275:
-#line 1285 "parse.y"
+#line 1284 "parse.y"
 { yyval.ttype = build_parse_node (BIT_NOT_EXPR, yyvsp[0].ttype); ;
     break;}
 case 276:
-#line 1287 "parse.y"
+#line 1286 "parse.y"
 { yyval.ttype = build_parse_node (BIT_NOT_EXPR, yyvsp[0].ttype); ;
     break;}
 case 282:
-#line 1296 "parse.y"
+#line 1295 "parse.y"
 { yyval.ttype = do_identifier (yyvsp[-1].ttype, 1, NULL_TREE); ;
     break;}
 case 283:
-#line 1300 "parse.y"
+#line 1299 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 284:
-#line 1302 "parse.y"
+#line 1301 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 285:
-#line 1307 "parse.y"
+#line 1306 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 286:
-#line 1309 "parse.y"
+#line 1308 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 287:
-#line 1312 "parse.y"
+#line 1311 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 292:
-#line 1324 "parse.y"
+#line 1323 "parse.y"
 { yyval.ttype = build_parse_node (INDIRECT_REF, yyvsp[0].ttype); ;
     break;}
 case 293:
-#line 1326 "parse.y"
+#line 1325 "parse.y"
 { yyval.ttype = build_parse_node (ADDR_EXPR, yyvsp[0].ttype); ;
     break;}
 case 294:
-#line 1328 "parse.y"
+#line 1327 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 295:
-#line 1333 "parse.y"
+#line 1332 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 296:
-#line 1335 "parse.y"
+#line 1334 "parse.y"
 { yyval.ttype = lookup_template_function (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 300:
-#line 1345 "parse.y"
+#line 1344 "parse.y"
 { yyval.ttype = finish_decl_parsing (yyvsp[-1].ttype); ;
     break;}
 case 301:
-#line 1350 "parse.y"
+#line 1349 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == BIT_NOT_EXPR)
                    yyval.ttype = build_x_unary_op (BIT_NOT_EXPR, TREE_OPERAND (yyvsp[0].ttype, 0));
@@ -5226,7 +5234,7 @@ case 301:
                ;
     break;}
 case 304:
-#line 1359 "parse.y"
+#line 1358 "parse.y"
 {
                  if (processing_template_decl)
                    push_obstacks (&permanent_obstack, &permanent_obstack);
@@ -5242,20 +5250,20 @@ case 304:
                ;
     break;}
 case 305:
-#line 1373 "parse.y"
+#line 1372 "parse.y"
 { yyval.ttype = finish_parenthesized_expr (yyvsp[-1].ttype); ;
     break;}
 case 306:
-#line 1375 "parse.y"
+#line 1374 "parse.y"
 { yyvsp[-1].ttype = reparse_decl_as_expr (NULL_TREE, yyvsp[-1].ttype);
                  yyval.ttype = finish_parenthesized_expr (yyvsp[-1].ttype); ;
     break;}
 case 307:
-#line 1378 "parse.y"
+#line 1377 "parse.y"
 { yyval.ttype = error_mark_node; ;
     break;}
 case 308:
-#line 1380 "parse.y"
+#line 1379 "parse.y"
 { tree scope = current_scope ();
                  if (!scope || TREE_CODE (scope) != FUNCTION_DECL)
                    {
@@ -5268,43 +5276,43 @@ case 308:
                ;
     break;}
 case 309:
-#line 1391 "parse.y"
+#line 1390 "parse.y"
 { yyval.ttype = finish_stmt_expr (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 310:
-#line 1396 "parse.y"
+#line 1395 "parse.y"
 { yyval.ttype = finish_call_expr (yyvsp[-3].ttype, yyvsp[-1].ttype, 1); ;
     break;}
 case 311:
-#line 1398 "parse.y"
+#line 1397 "parse.y"
 { yyval.ttype = finish_call_expr (yyvsp[-1].ttype, NULL_TREE, 1); ;
     break;}
 case 312:
-#line 1400 "parse.y"
+#line 1399 "parse.y"
 { yyval.ttype = finish_call_expr (yyvsp[-3].ttype, yyvsp[-1].ttype, 0); ;
     break;}
 case 313:
-#line 1402 "parse.y"
+#line 1401 "parse.y"
 { yyval.ttype = finish_call_expr (yyvsp[-1].ttype, NULL_TREE, 0); ;
     break;}
 case 314:
-#line 1404 "parse.y"
+#line 1403 "parse.y"
 { yyval.ttype = grok_array_decl (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 315:
-#line 1406 "parse.y"
+#line 1405 "parse.y"
 { yyval.ttype = finish_increment_expr (yyvsp[-1].ttype, POSTINCREMENT_EXPR); ;
     break;}
 case 316:
-#line 1408 "parse.y"
+#line 1407 "parse.y"
 { yyval.ttype = finish_increment_expr (yyvsp[-1].ttype, POSTDECREMENT_EXPR); ;
     break;}
 case 317:
-#line 1411 "parse.y"
+#line 1410 "parse.y"
 { yyval.ttype = finish_this_expr (); ;
     break;}
 case 318:
-#line 1413 "parse.y"
+#line 1412 "parse.y"
 {
                  tree type = NULL_TREE;
                  tree id = yyval.ttype;
@@ -5350,49 +5358,49 @@ case 318:
                ;
     break;}
 case 320:
-#line 1458 "parse.y"
+#line 1457 "parse.y"
 { tree type = groktypename (yyvsp[-4].ftype.t);
                  check_for_new_type ("dynamic_cast", yyvsp[-4].ftype);
                  yyval.ttype = build_dynamic_cast (type, yyvsp[-1].ttype); ;
     break;}
 case 321:
-#line 1462 "parse.y"
+#line 1461 "parse.y"
 { tree type = groktypename (yyvsp[-4].ftype.t);
                  check_for_new_type ("static_cast", yyvsp[-4].ftype);
                  yyval.ttype = build_static_cast (type, yyvsp[-1].ttype); ;
     break;}
 case 322:
-#line 1466 "parse.y"
+#line 1465 "parse.y"
 { tree type = groktypename (yyvsp[-4].ftype.t);
                  check_for_new_type ("reinterpret_cast", yyvsp[-4].ftype);
                  yyval.ttype = build_reinterpret_cast (type, yyvsp[-1].ttype); ;
     break;}
 case 323:
-#line 1470 "parse.y"
+#line 1469 "parse.y"
 { tree type = groktypename (yyvsp[-4].ftype.t);
                  check_for_new_type ("const_cast", yyvsp[-4].ftype);
                  yyval.ttype = build_const_cast (type, yyvsp[-1].ttype); ;
     break;}
 case 324:
-#line 1474 "parse.y"
+#line 1473 "parse.y"
 { yyval.ttype = build_x_typeid (yyvsp[-1].ttype); ;
     break;}
 case 325:
-#line 1476 "parse.y"
+#line 1475 "parse.y"
 { tree type = groktypename (yyvsp[-1].ftype.t);
                  check_for_new_type ("typeid", yyvsp[-1].ftype);
                  yyval.ttype = get_typeid (TYPE_MAIN_VARIANT (type)); ;
     break;}
 case 326:
-#line 1480 "parse.y"
+#line 1479 "parse.y"
 { yyval.ttype = do_scoped_id (yyvsp[0].ttype, 1); ;
     break;}
 case 327:
-#line 1482 "parse.y"
+#line 1481 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 328:
-#line 1484 "parse.y"
+#line 1483 "parse.y"
 {
                  got_scope = NULL_TREE;
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
@@ -5402,102 +5410,102 @@ case 328:
                ;
     break;}
 case 329:
-#line 1492 "parse.y"
+#line 1491 "parse.y"
 { yyval.ttype = build_offset_ref (OP0 (yyval.ttype), OP1 (yyval.ttype)); ;
     break;}
 case 330:
-#line 1494 "parse.y"
+#line 1493 "parse.y"
 { yyval.ttype = finish_qualified_call_expr (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 331:
-#line 1496 "parse.y"
+#line 1495 "parse.y"
 { yyval.ttype = finish_qualified_call_expr (yyvsp[-1].ttype, NULL_TREE); ;
     break;}
 case 332:
-#line 1498 "parse.y"
+#line 1497 "parse.y"
 { 
                  yyval.ttype = build_x_component_ref (yyval.ttype, yyvsp[0].ttype, NULL_TREE, 1); 
                ;
     break;}
 case 333:
-#line 1502 "parse.y"
+#line 1501 "parse.y"
 { yyval.ttype = finish_object_call_expr (yyvsp[-3].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); ;
     break;}
 case 334:
-#line 1504 "parse.y"
+#line 1503 "parse.y"
 { yyval.ttype = finish_object_call_expr (yyvsp[-1].ttype, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 335:
-#line 1506 "parse.y"
+#line 1505 "parse.y"
 { yyval.ttype = build_x_component_ref (yyval.ttype, yyvsp[0].ttype, NULL_TREE, 1); ;
     break;}
 case 336:
-#line 1508 "parse.y"
+#line 1507 "parse.y"
 { if (processing_template_decl)
                    yyval.ttype = build_min_nt (COMPONENT_REF, yyvsp[-1].ttype, copy_to_permanent (yyvsp[0].ttype));
                  else
                    yyval.ttype = build_object_ref (yyval.ttype, OP0 (yyvsp[0].ttype), OP1 (yyvsp[0].ttype)); ;
     break;}
 case 337:
-#line 1513 "parse.y"
+#line 1512 "parse.y"
 { yyval.ttype = finish_object_call_expr (yyvsp[-3].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); ;
     break;}
 case 338:
-#line 1515 "parse.y"
+#line 1514 "parse.y"
 { yyval.ttype = finish_object_call_expr (yyvsp[-1].ttype, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 339:
-#line 1517 "parse.y"
+#line 1516 "parse.y"
 { yyval.ttype = finish_qualified_object_call_expr (yyvsp[-3].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); ;
     break;}
 case 340:
-#line 1519 "parse.y"
+#line 1518 "parse.y"
 { yyval.ttype = finish_qualified_object_call_expr (yyvsp[-1].ttype, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 341:
-#line 1522 "parse.y"
+#line 1521 "parse.y"
 { yyval.ttype = finish_pseudo_destructor_call_expr (yyvsp[-3].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 342:
-#line 1524 "parse.y"
+#line 1523 "parse.y"
 { yyval.ttype = finish_pseudo_destructor_call_expr (yyvsp[-5].ttype, yyvsp[-4].ttype, yyvsp[-1].ttype); ;
     break;}
 case 343:
-#line 1526 "parse.y"
+#line 1525 "parse.y"
 {
                  yyval.ttype = error_mark_node;
                ;
     break;}
 case 344:
-#line 1571 "parse.y"
+#line 1570 "parse.y"
 { yyval.itype = 0; ;
     break;}
 case 345:
-#line 1573 "parse.y"
+#line 1572 "parse.y"
 { got_scope = NULL_TREE; yyval.itype = 1; ;
     break;}
 case 346:
-#line 1578 "parse.y"
+#line 1577 "parse.y"
 { yyval.itype = 0; ;
     break;}
 case 347:
-#line 1580 "parse.y"
+#line 1579 "parse.y"
 { got_scope = NULL_TREE; yyval.itype = 1; ;
     break;}
 case 348:
-#line 1585 "parse.y"
+#line 1584 "parse.y"
 { yyval.ttype = boolean_true_node; ;
     break;}
 case 349:
-#line 1587 "parse.y"
+#line 1586 "parse.y"
 { yyval.ttype = boolean_false_node; ;
     break;}
 case 351:
-#line 1594 "parse.y"
+#line 1593 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 352:
-#line 1599 "parse.y"
+#line 1598 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
@@ -5509,18 +5517,18 @@ case 352:
                ;
     break;}
 case 353:
-#line 1612 "parse.y"
+#line 1611 "parse.y"
 { got_object = TREE_TYPE (yyval.ttype); ;
     break;}
 case 354:
-#line 1614 "parse.y"
+#line 1613 "parse.y"
 {
                  yyval.ttype = build_x_arrow (yyval.ttype); 
                  got_object = TREE_TYPE (yyval.ttype);
                ;
     break;}
 case 355:
-#line 1622 "parse.y"
+#line 1621 "parse.y"
 {
                  resume_momentary (yyvsp[-1].itype);
                  if (yyvsp[-2].ftype.t && IS_AGGR_TYPE_CODE (TREE_CODE (yyvsp[-2].ftype.t)))
@@ -5528,138 +5536,138 @@ case 355:
                ;
     break;}
 case 356:
-#line 1628 "parse.y"
+#line 1627 "parse.y"
 {
                  resume_momentary (yyvsp[-1].itype);
                  note_list_got_semicolon (yyvsp[-2].ftype.t);
                ;
     break;}
 case 357:
-#line 1633 "parse.y"
+#line 1632 "parse.y"
 { resume_momentary (yyvsp[-1].itype); ;
     break;}
 case 358:
-#line 1635 "parse.y"
+#line 1634 "parse.y"
 {
                  shadow_tag (yyvsp[-1].ftype.t);
                  note_list_got_semicolon (yyvsp[-1].ftype.t);
                ;
     break;}
 case 359:
-#line 1640 "parse.y"
+#line 1639 "parse.y"
 { warning ("empty declaration"); ;
     break;}
 case 360:
-#line 1642 "parse.y"
+#line 1641 "parse.y"
 { pedantic = yyvsp[-1].itype; ;
     break;}
 case 363:
-#line 1656 "parse.y"
+#line 1655 "parse.y"
 { yyval.ttype = make_call_declarator (NULL_TREE, empty_parms (),
                                             NULL_TREE, NULL_TREE); ;
     break;}
 case 364:
-#line 1659 "parse.y"
+#line 1658 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), NULL_TREE,
                                             NULL_TREE); ;
     break;}
 case 365:
-#line 1666 "parse.y"
+#line 1665 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 366:
-#line 1669 "parse.y"
+#line 1668 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 367:
-#line 1672 "parse.y"
+#line 1671 "parse.y"
 { yyval.ftype.t = build_decl_list (get_decl_list (yyvsp[-1].ftype.t), yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 368:
-#line 1675 "parse.y"
+#line 1674 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE);
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag;  ;
     break;}
 case 369:
-#line 1678 "parse.y"
+#line 1677 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
 case 372:
-#line 1694 "parse.y"
+#line 1693 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
 case 373:
-#line 1697 "parse.y"
+#line 1696 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 374:
-#line 1700 "parse.y"
+#line 1699 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-2].ftype.t, chainon (yyvsp[-1].ttype, yyvsp[0].ttype)); 
                  yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
     break;}
 case 375:
-#line 1703 "parse.y"
+#line 1702 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ttype)); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 376:
-#line 1706 "parse.y"
+#line 1705 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ttype)); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 377:
-#line 1709 "parse.y"
+#line 1708 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-2].ftype.t,
                                         chainon (yyvsp[-1].ttype, chainon (yyvsp[0].ttype, yyvsp[-3].ttype))); 
                  yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
     break;}
 case 378:
-#line 1716 "parse.y"
+#line 1715 "parse.y"
 { if (extra_warnings)
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyval.ttype));
                  yyval.ttype = build_decl_list (NULL_TREE, yyval.ttype); ;
     break;}
 case 379:
-#line 1721 "parse.y"
+#line 1720 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyval.ttype); ;
     break;}
 case 380:
-#line 1723 "parse.y"
+#line 1722 "parse.y"
 { if (extra_warnings)
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
                  yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 381:
-#line 1728 "parse.y"
+#line 1727 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 382:
-#line 1730 "parse.y"
+#line 1729 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
     break;}
 case 383:
-#line 1740 "parse.y"
+#line 1739 "parse.y"
 { yyval.ttype = yyvsp[0].ftype.t; TREE_STATIC (yyval.ttype) = 1; ;
     break;}
 case 384:
-#line 1742 "parse.y"
+#line 1741 "parse.y"
 { yyval.ttype = IDENTIFIER_AS_LIST (yyval.ttype); ;
     break;}
 case 385:
-#line 1744 "parse.y"
+#line 1743 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype);
                  TREE_STATIC (yyval.ttype) = 1; ;
     break;}
 case 386:
-#line 1747 "parse.y"
+#line 1746 "parse.y"
 { if (extra_warnings && TREE_STATIC (yyval.ttype))
                    warning ("`%s' is not at beginning of declaration",
                             IDENTIFIER_POINTER (yyvsp[0].ttype));
@@ -5667,61 +5675,61 @@ case 386:
                  TREE_STATIC (yyval.ttype) = TREE_STATIC (yyvsp[-1].ttype); ;
     break;}
 case 387:
-#line 1753 "parse.y"
+#line 1752 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 388:
-#line 1755 "parse.y"
+#line 1754 "parse.y"
 { yyval.ttype = decl_tree_cons (yyvsp[0].ttype, NULL_TREE, NULL_TREE); ;
     break;}
 case 389:
-#line 1766 "parse.y"
+#line 1765 "parse.y"
 { yyval.ftype.t = get_decl_list (yyvsp[0].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
 case 390:
-#line 1769 "parse.y"
+#line 1768 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
 case 391:
-#line 1772 "parse.y"
+#line 1771 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 392:
-#line 1775 "parse.y"
+#line 1774 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[-1].ftype.t, chainon (yyvsp[0].ttype, yyvsp[-2].ftype.t)); 
                  yyval.ftype.new_type_flag = yyvsp[-2].ftype.new_type_flag; ;
     break;}
 case 393:
-#line 1781 "parse.y"
+#line 1780 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, yyvsp[0].ftype.t); ;
     break;}
 case 394:
-#line 1783 "parse.y"
+#line 1782 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ftype.t, yyvsp[-1].ttype); ;
     break;}
 case 396:
-#line 1793 "parse.y"
+#line 1792 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
 case 397:
-#line 1795 "parse.y"
+#line 1794 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
 case 398:
-#line 1797 "parse.y"
+#line 1796 "parse.y"
 { yyval.ftype.t = TREE_TYPE (yyvsp[-1].ttype);
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 399:
-#line 1800 "parse.y"
+#line 1799 "parse.y"
 { yyval.ftype.t = groktypename (yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 400:
-#line 1803 "parse.y"
+#line 1802 "parse.y"
 { tree type = TREE_TYPE (yyvsp[-1].ttype);
 
                   yyval.ftype.new_type_flag = 0;
@@ -5738,7 +5746,7 @@ case 400:
                ;
     break;}
 case 401:
-#line 1818 "parse.y"
+#line 1817 "parse.y"
 { tree type = groktypename (yyvsp[-1].ftype.t);
 
                   yyval.ftype.new_type_flag = 0;
@@ -5755,188 +5763,200 @@ case 401:
                ;
     break;}
 case 402:
-#line 1838 "parse.y"
+#line 1837 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
 case 403:
-#line 1840 "parse.y"
+#line 1839 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype; yyval.ftype.new_type_flag = 0; ;
     break;}
+case 406:
+#line 1846 "parse.y"
+{ check_multiple_declarators (); ;
+    break;}
+case 408:
+#line 1852 "parse.y"
+{ check_multiple_declarators (); ;
+    break;}
+case 410:
+#line 1858 "parse.y"
+{ check_multiple_declarators (); ;
+    break;}
 case 411:
-#line 1861 "parse.y"
+#line 1863 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 412:
-#line 1863 "parse.y"
+#line 1865 "parse.y"
 { if (TREE_CHAIN (yyvsp[-1].ttype)) yyvsp[-1].ttype = combine_strings (yyvsp[-1].ttype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 413:
-#line 1868 "parse.y"
+#line 1870 "parse.y"
 { yyval.ttype = start_decl (yyvsp[-3].ttype, current_declspecs, 1,
                                          yyvsp[-1].ttype, prefix_attributes); ;
     break;}
 case 414:
-#line 1872 "parse.y"
+#line 1874 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1, LOOKUP_ONLYCONVERTING); ;
     break;}
 case 415:
-#line 1874 "parse.y"
+#line 1876 "parse.y"
 { yyval.ttype = start_decl (yyvsp[-2].ttype, current_declspecs, 0,
                                          yyvsp[0].ttype, prefix_attributes);
                  cp_finish_decl (yyval.ttype, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
 case 416:
-#line 1887 "parse.y"
+#line 1889 "parse.y"
 { yyvsp[0].itype = parse_decl (yyvsp[-3].ttype, yyvsp[-4].ttype, 
                                           yyvsp[-1].ttype, 1, &yyval.ttype); ;
     break;}
 case 417:
-#line 1892 "parse.y"
+#line 1894 "parse.y"
 { cp_finish_decl (yyvsp[-1].ttype, yyvsp[0].ttype, yyvsp[-4].ttype, 1,
                                  LOOKUP_ONLYCONVERTING);
                  yyval.itype = yyvsp[-2].itype; ;
     break;}
 case 418:
-#line 1896 "parse.y"
+#line 1898 "parse.y"
 { tree d;
                  yyval.itype = parse_decl (yyvsp[-2].ttype, yyvsp[-3].ttype, yyvsp[0].ttype, 0, &d);
                  cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
 case 419:
-#line 1903 "parse.y"
+#line 1905 "parse.y"
 { yyval.itype = yyvsp[0].itype; ;
     break;}
 case 420:
-#line 1907 "parse.y"
+#line 1909 "parse.y"
 { yyval.itype = yyvsp[0].itype; ;
     break;}
 case 421:
-#line 1912 "parse.y"
+#line 1914 "parse.y"
 { /* Set things up as initdcl0_innards expects.  */
              yyvsp[0].ttype = yyvsp[-1].ttype; 
               yyvsp[-1].ttype = NULL_TREE; ;
     break;}
 case 422:
-#line 1916 "parse.y"
+#line 1918 "parse.y"
 {;
     break;}
 case 423:
-#line 1918 "parse.y"
+#line 1920 "parse.y"
 { tree d;
                  parse_decl(yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype, 0, &d);
                  cp_finish_decl (d, NULL_TREE, yyvsp[-1].ttype, 1, 0); ;
     break;}
 case 424:
-#line 1927 "parse.y"
+#line 1929 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 425:
-#line 1929 "parse.y"
+#line 1931 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 426:
-#line 1934 "parse.y"
+#line 1936 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 427:
-#line 1936 "parse.y"
+#line 1938 "parse.y"
 { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 428:
-#line 1941 "parse.y"
+#line 1943 "parse.y"
 { yyval.ttype = yyvsp[-2].ttype; ;
     break;}
 case 429:
-#line 1946 "parse.y"
+#line 1948 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 430:
-#line 1948 "parse.y"
+#line 1950 "parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 431:
-#line 1953 "parse.y"
+#line 1955 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 432:
-#line 1955 "parse.y"
+#line 1957 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 433:
-#line 1957 "parse.y"
+#line 1959 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, build_tree_list (NULL_TREE, yyvsp[-1].ttype)); ;
     break;}
 case 434:
-#line 1959 "parse.y"
+#line 1961 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-5].ttype, tree_cons (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype)); ;
     break;}
 case 435:
-#line 1961 "parse.y"
+#line 1963 "parse.y"
 { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 440:
-#line 1977 "parse.y"
+#line 1979 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 441:
-#line 1979 "parse.y"
+#line 1981 "parse.y"
 { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 442:
-#line 1984 "parse.y"
+#line 1986 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 443:
-#line 1986 "parse.y"
+#line 1988 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 445:
-#line 1994 "parse.y"
+#line 1996 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE);
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
 case 446:
-#line 1997 "parse.y"
+#line 1999 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype));
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
 case 447:
-#line 2000 "parse.y"
+#line 2002 "parse.y"
 { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype));
                  TREE_HAS_CONSTRUCTOR (yyval.ttype) = 1; ;
     break;}
 case 448:
-#line 2003 "parse.y"
+#line 2005 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 449:
-#line 2010 "parse.y"
+#line 2012 "parse.y"
 { yyval.ttype = build_tree_list (NULL_TREE, yyval.ttype); ;
     break;}
 case 450:
-#line 2012 "parse.y"
+#line 2014 "parse.y"
 { yyval.ttype = expr_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 451:
-#line 2015 "parse.y"
+#line 2017 "parse.y"
 { yyval.ttype = build_expr_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 452:
-#line 2017 "parse.y"
+#line 2019 "parse.y"
 { yyval.ttype = build_expr_list (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 453:
-#line 2019 "parse.y"
+#line 2021 "parse.y"
 { yyval.ttype = expr_tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 454:
-#line 2024 "parse.y"
+#line 2026 "parse.y"
 { start_function (NULL_TREE, TREE_VALUE (yyvsp[0].ttype),
                                  NULL_TREE, 1);
                  reinit_parse_for_function (); ;
     break;}
 case 455:
-#line 2030 "parse.y"
+#line 2032 "parse.y"
 {
                  int nested = (hack_decl_function_context
                                (current_function_decl) != NULL_TREE);
@@ -5945,37 +5965,37 @@ case 455:
                ;
     break;}
 case 456:
-#line 2037 "parse.y"
+#line 2039 "parse.y"
 { process_next_inline (yyvsp[-2].ttype); ;
     break;}
 case 457:
-#line 2039 "parse.y"
+#line 2041 "parse.y"
 { process_next_inline (yyvsp[-2].ttype); ;
     break;}
 case 460:
-#line 2051 "parse.y"
+#line 2053 "parse.y"
 { replace_defarg (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 461:
-#line 2053 "parse.y"
+#line 2055 "parse.y"
 { replace_defarg (yyvsp[-2].ttype, error_mark_node); ;
     break;}
 case 463:
-#line 2058 "parse.y"
+#line 2060 "parse.y"
 { do_pending_defargs (); ;
     break;}
 case 464:
-#line 2060 "parse.y"
+#line 2062 "parse.y"
 { do_pending_defargs (); ;
     break;}
 case 465:
-#line 2065 "parse.y"
+#line 2067 "parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = current_enum_type;
                  current_enum_type = start_enum (yyvsp[-1].ttype); ;
     break;}
 case 466:
-#line 2069 "parse.y"
+#line 2071 "parse.y"
 { TYPE_VALUES (current_enum_type) = yyvsp[-2].ttype;
                  yyval.ftype.t = finish_enum (current_enum_type);
                  yyval.ftype.new_type_flag = 1;
@@ -5984,19 +6004,19 @@ case 466:
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
 case 467:
-#line 2076 "parse.y"
+#line 2078 "parse.y"
 { yyval.ftype.t = finish_enum (start_enum (yyvsp[-2].ttype));
                  yyval.ftype.new_type_flag = 1;
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
 case 468:
-#line 2080 "parse.y"
+#line 2082 "parse.y"
 { yyvsp[0].itype = suspend_momentary ();
                  yyval.ttype = current_enum_type;
                  current_enum_type = start_enum (make_anon_name ()); ;
     break;}
 case 469:
-#line 2084 "parse.y"
+#line 2086 "parse.y"
 { TYPE_VALUES (current_enum_type) = yyvsp[-2].ttype;
                  yyval.ftype.t = finish_enum (current_enum_type);
                  yyval.ftype.new_type_flag = 1;
@@ -6005,30 +6025,30 @@ case 469:
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
 case 470:
-#line 2091 "parse.y"
+#line 2093 "parse.y"
 { yyval.ftype.t = finish_enum (start_enum (make_anon_name()));
                  yyval.ftype.new_type_flag = 1;
                  check_for_missing_semicolon (yyval.ftype.t); ;
     break;}
 case 471:
-#line 2095 "parse.y"
+#line 2097 "parse.y"
 { yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, 1); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 472:
-#line 2098 "parse.y"
+#line 2100 "parse.y"
 { yyval.ftype.t = xref_tag (enum_type_node, yyvsp[0].ttype, 1); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 473:
-#line 2101 "parse.y"
+#line 2103 "parse.y"
 { yyval.ftype.t = yyvsp[0].ttype;
                  yyval.ftype.new_type_flag = 0; 
                  if (!processing_template_decl)
                    cp_pedwarn ("using `typename' outside of template"); ;
     break;}
 case 474:
-#line 2108 "parse.y"
+#line 2110 "parse.y"
 { 
                  int semi;
 
@@ -6036,21 +6056,21 @@ case 474:
                    yychar = YYLEX;
                  semi = yychar == ';';
 
-                 yyval.ttype = finish_class_definition (yyvsp[-4].ttype, yyvsp[-2].ttype, yyvsp[0].ttype, semi); 
+                 yyval.ttype = finish_class_definition (yyvsp[-4].ttype, yyvsp[0].ttype, semi); 
                ;
     break;}
 case 475:
-#line 2118 "parse.y"
+#line 2120 "parse.y"
 { finish_default_args (); ;
     break;}
 case 476:
-#line 2120 "parse.y"
+#line 2122 "parse.y"
 { yyval.ftype.t = yyvsp[-3].ttype;
                  yyval.ftype.new_type_flag = 1; 
                  begin_inline_definitions (); ;
     break;}
 case 477:
-#line 2124 "parse.y"
+#line 2126 "parse.y"
 {
                  yyval.ftype.new_type_flag = 0;
                  if (TYPE_BINFO (yyvsp[0].ttype) == NULL_TREE)
@@ -6070,85 +6090,88 @@ case 477:
                ;
     break;}
 case 481:
-#line 2151 "parse.y"
+#line 2153 "parse.y"
 { if (pedantic && !in_system_header)
                    pedwarn ("comma at end of enumerator list"); ;
     break;}
 case 483:
-#line 2158 "parse.y"
+#line 2160 "parse.y"
 { error ("storage class specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
 case 484:
-#line 2160 "parse.y"
+#line 2162 "parse.y"
 { error ("type specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
 case 485:
-#line 2162 "parse.y"
+#line 2164 "parse.y"
 { error ("type qualifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
 case 486:
-#line 2164 "parse.y"
+#line 2166 "parse.y"
 { error ("no body nor ';' separates two class, struct or union declarations"); ;
     break;}
 case 487:
-#line 2166 "parse.y"
+#line 2168 "parse.y"
 { yyval.ttype = build_decl_list (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 488:
-#line 2171 "parse.y"
-{ current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
+#line 2173 "parse.y"
+{ 
+                 current_aggr = yyvsp[-1].ttype; 
+                 yyval.ttype = yyvsp[0].ttype; 
+               ;
     break;}
 case 489:
-#line 2176 "parse.y"
+#line 2181 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 490:
-#line 2178 "parse.y"
+#line 2183 "parse.y"
 { yyungetc ('{', 1); ;
     break;}
 case 491:
-#line 2180 "parse.y"
+#line 2185 "parse.y"
 { yyungetc (':', 1); ;
     break;}
 case 492:
-#line 2185 "parse.y"
+#line 2190 "parse.y"
 {
                  current_aggr = yyvsp[-2].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 493:
-#line 2190 "parse.y"
+#line 2195 "parse.y"
 {
                  current_aggr = yyvsp[-3].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
 case 494:
-#line 2195 "parse.y"
+#line 2200 "parse.y"
 {
                  current_aggr = yyvsp[-2].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype);
                ;
     break;}
 case 495:
-#line 2200 "parse.y"
+#line 2205 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 496:
-#line 2202 "parse.y"
+#line 2207 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 497:
-#line 2207 "parse.y"
-{ yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, 0); ;
-    break;}
-case 498:
 #line 2212 "parse.y"
 { yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, 1); ;
     break;}
+case 498:
+#line 2214 "parse.y"
+{ yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, 0); ;
+    break;}
 case 499:
-#line 2215 "parse.y"
+#line 2216 "parse.y"
 { 
                  yyval.ttype = yyvsp[-1].ttype;
                  if (yyvsp[0].ttype)
@@ -6156,7 +6179,7 @@ case 499:
                ;
     break;}
 case 500:
-#line 2221 "parse.y"
+#line 2222 "parse.y"
 { 
                  yyval.ttype = TREE_TYPE (yyvsp[-1].ttype);
                  if (TREE_INT_CST_LOW (current_aggr) == union_type 
@@ -6173,44 +6196,44 @@ case 500:
                ;
     break;}
 case 501:
-#line 2239 "parse.y"
+#line 2240 "parse.y"
 { yyval.ttype = xref_tag (yyval.ttype, make_anon_name (), 0);
                  yyungetc ('{', 1); ;
     break;}
 case 504:
-#line 2250 "parse.y"
+#line 2251 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 505:
-#line 2252 "parse.y"
+#line 2253 "parse.y"
 { yyungetc(':', 1); yyval.ttype = NULL_TREE; ;
     break;}
 case 506:
-#line 2254 "parse.y"
+#line 2255 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 508:
-#line 2260 "parse.y"
+#line 2261 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 509:
-#line 2265 "parse.y"
+#line 2266 "parse.y"
 { yyval.ttype = finish_base_specifier (access_default_node, yyvsp[0].ttype,
                                              current_aggr 
                                              == signature_type_node); ;
     break;}
 case 510:
-#line 2269 "parse.y"
+#line 2270 "parse.y"
 { yyval.ttype = finish_base_specifier (yyvsp[-2].ttype, yyvsp[0].ttype, 
                                              current_aggr 
                                              == signature_type_node); ;
     break;}
 case 511:
-#line 2276 "parse.y"
+#line 2277 "parse.y"
 { if (yyval.ttype != error_mark_node) yyval.ttype = TYPE_MAIN_DECL (yyvsp[0].ttype); ;
     break;}
 case 513:
-#line 2279 "parse.y"
+#line 2280 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6233,7 +6256,7 @@ case 513:
                ;
     break;}
 case 514:
-#line 2300 "parse.y"
+#line 2301 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6256,13 +6279,13 @@ case 514:
                ;
     break;}
 case 516:
-#line 2325 "parse.y"
+#line 2326 "parse.y"
 { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL])
                    cp_error ("`%D' access", yyvsp[-1].ttype);
                  yyval.ttype = access_default_virtual_node; ;
     break;}
 case 517:
-#line 2329 "parse.y"
+#line 2330 "parse.y"
 {
                  if (yyvsp[-2].ttype != access_default_virtual_node)
                    error ("multiple access specifiers");
@@ -6275,7 +6298,7 @@ case 517:
                ;
     break;}
 case 518:
-#line 2340 "parse.y"
+#line 2341 "parse.y"
 { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL])
                    cp_error ("`%D' access", yyvsp[-1].ttype);
                  else if (yyval.ttype == access_public_node)
@@ -6289,281 +6312,296 @@ case 518:
                ;
     break;}
 case 519:
-#line 2355 "parse.y"
+#line 2356 "parse.y"
 { yyvsp[-1].ttype = begin_class_definition (yyvsp[-1].ttype); ;
     break;}
 case 520:
-#line 2360 "parse.y"
-{
-                   yyval.ttype = build_self_reference ();
-               ;
-    break;}
-case 521:
-#line 2367 "parse.y"
-{ if (yyval.ttype) yyval.ttype = build_tree_list (access_public_node, yyval.ttype); ;
-    break;}
-case 522:
-#line 2369 "parse.y"
+#line 2361 "parse.y"
 {
-                 if (current_aggr == signature_type_node)
-                   yyval.ttype = build_tree_list (access_public_node, yyvsp[0].ttype);
-                 else
-                   yyval.ttype = build_tree_list (access_default_node, yyvsp[0].ttype);
-                 if (yyvsp[-1].ttype) yyval.ttype = tree_cons (access_public_node, yyvsp[-1].ttype, yyval.ttype);
+                 finish_member_declaration (build_self_reference ());
                ;
     break;}
-case 523:
-#line 2377 "parse.y"
+case 525:
+#line 2375 "parse.y"
 {
-                 tree visspec = yyvsp[-2].ttype;
-
                  if (current_aggr == signature_type_node)
                    {
                      error ("access specifier not allowed in signature");
-                     visspec = access_public_node;
+                     yyvsp[-1].ttype = access_public_node;
                    }
-                 yyval.ttype = chainon (yyval.ttype, build_tree_list (visspec, yyvsp[0].ttype));
-               ;
-    break;}
-case 524:
-#line 2388 "parse.y"
-{
-                 if (current_aggr == signature_type_node)
-                   error ("access specifier not allowed in signature");
-               ;
-    break;}
-case 525:
-#line 2398 "parse.y"
-{ if (yyval.ttype == void_type_node) yyval.ttype = NULL_TREE; 
-               ;
+
+                 current_access_specifier = yyvsp[-1].ttype;
+                ;
     break;}
 case 526:
-#line 2401 "parse.y"
-{ /* In pushdecl, we created a reverse list of names
-                    in this binding level.  Make sure that the chain
-                    of what we're trying to add isn't the item itself
-                    (which can happen with what pushdecl's doing).  */
-                 if (yyvsp[0].ttype != NULL_TREE && yyvsp[0].ttype != void_type_node
-                     && yyvsp[0].ttype != error_mark_node)
-                   {
-                     if (TREE_CHAIN (yyvsp[0].ttype) != yyval.ttype)
-                       yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype);
-                     else
-                       yyval.ttype = yyvsp[0].ttype;
-                   }
+#line 2390 "parse.y"
+{ 
+                 finish_member_declaration (yyvsp[0].ttype);
                ;
     break;}
 case 527:
-#line 2418 "parse.y"
-{ ;
+#line 2394 "parse.y"
+{ 
+                 finish_member_declaration (yyvsp[0].ttype);
+               ;
     break;}
-case 528:
-#line 2420 "parse.y"
+case 529:
+#line 2402 "parse.y"
 { error ("missing ';' before right brace");
                  yyungetc ('}', 0); ;
     break;}
-case 529:
-#line 2425 "parse.y"
-{ yyval.ttype = finish_method (yyval.ttype); ;
-    break;}
 case 530:
-#line 2427 "parse.y"
+#line 2407 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 531:
-#line 2429 "parse.y"
+#line 2409 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 532:
-#line 2431 "parse.y"
+#line 2411 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 533:
-#line 2433 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
+#line 2413 "parse.y"
+{ yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 534:
-#line 2435 "parse.y"
-{ yyval.ttype = yyvsp[0].ttype;
-                 pedantic = yyvsp[-1].itype; ;
+#line 2415 "parse.y"
+{ yyval.ttype = NULL_TREE; ;
     break;}
 case 535:
-#line 2438 "parse.y"
-{ yyval.ttype = finish_member_template_decl (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+#line 2417 "parse.y"
+{ yyval.ttype = yyvsp[0].ttype;
+                 pedantic = yyvsp[-1].itype; ;
     break;}
 case 536:
-#line 2440 "parse.y"
-{ yyval.ttype = finish_member_class_template (yyvsp[-2].ttype, yyvsp[-1].ftype.t); ;
+#line 2420 "parse.y"
+{  
+                 if (yyvsp[0].ttype)
+                   yyval.ttype = finish_member_template_decl (yyvsp[0].ttype);
+                 else
+                   /* The component was already processed.  */
+                   yyval.ttype = NULL_TREE;
+
+                 finish_template_decl (yyvsp[-1].ttype);
+               ;
     break;}
 case 537:
-#line 2448 "parse.y"
-{ yyval.ttype = grok_x_components (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
+#line 2430 "parse.y"
+{ 
+                 yyval.ttype = finish_member_class_template (yyvsp[-1].ftype.t); 
+                 finish_template_decl (yyvsp[-2].ttype);
+               ;
     break;}
 case 538:
-#line 2450 "parse.y"
-{ yyval.ttype = grok_x_components (yyvsp[-1].ttype, yyvsp[0].ttype); ;
+#line 2441 "parse.y"
+{
+                 /* Most of the productions for component_decl only
+                    allow the creation of one new member, so we call
+                    finish_member_declaration in component_decl_list.
+                    For this rule and the next, however, there can be
+                    more than one member, e.g.:
+
+                      int i, j;
+
+                    and we need the first member to be fully
+                    registered before the second is processed.
+                    Therefore, the rules for components take care of
+                    this processing.  To avoid registering the
+                    components more than once, we send NULL_TREE up
+                    here; that lets finish_member_declaration now
+                    that there is nothing to do.  */
+                 if (!yyvsp[0].itype)
+                   grok_x_components (yyvsp[-1].ftype.t);
+                 yyval.ttype = NULL_TREE;
+               ;
     break;}
 case 539:
-#line 2452 "parse.y"
-{ yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
-                                 build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
+#line 2462 "parse.y"
+{ 
+                 if (!yyvsp[0].itype)
+                   grok_x_components (yyvsp[-1].ttype);
+                 yyval.ttype = NULL_TREE; 
+               ;
     break;}
 case 540:
-#line 2455 "parse.y"
+#line 2468 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
     break;}
 case 541:
-#line 2458 "parse.y"
-{ yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ;
+#line 2471 "parse.y"
+{ yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
+                                 build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
     break;}
 case 542:
-#line 2460 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
+#line 2474 "parse.y"
+{ yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 543:
-#line 2471 "parse.y"
-{ tree specs, attrs;
-                 split_specs_attrs (yyvsp[-4].ttype, &specs, &attrs);
-                 yyval.ttype = grokfield (yyvsp[-3].ttype, specs, yyvsp[0].ttype, yyvsp[-2].ttype,
-                                 build_tree_list (yyvsp[-1].ttype, attrs)); ;
+#line 2476 "parse.y"
+{ yyval.ttype = NULL_TREE; ;
     break;}
 case 544:
-#line 2476 "parse.y"
+#line 2487 "parse.y"
+{ tree specs, attrs;
+                 split_specs_attrs (yyvsp[-4].ttype, &specs, &attrs);
+                 yyval.ttype = grokfield (yyvsp[-3].ttype, specs, yyvsp[0].ttype, yyvsp[-2].ttype,
+                                 build_tree_list (yyvsp[-1].ttype, attrs)); ;
+    break;}
+case 545:
+#line 2492 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, NULL_TREE)); ;
     break;}
-case 545:
-#line 2479 "parse.y"
+case 546:
+#line 2495 "parse.y"
 { yyval.ttype = do_class_using_decl (yyvsp[0].ttype); ;
     break;}
-case 546:
-#line 2485 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
+case 547:
+#line 2501 "parse.y"
+{ yyval.itype = 0; ;
     break;}
 case 548:
-#line 2488 "parse.y"
-{
-                 /* In this context, void_type_node encodes
-                    friends.  They have been recorded elsewhere.  */
-                 if (yyval.ttype == void_type_node)
-                   yyval.ttype = yyvsp[0].ttype;
-                 else
-                   yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype);
+#line 2503 "parse.y"
+{ 
+                 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
+                   yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
+                 finish_member_declaration (yyvsp[0].ttype); 
+                 yyval.itype = 1;
                ;
     break;}
 case 549:
-#line 2500 "parse.y"
-{ yyval.ttype = NULL_TREE; ;
+#line 2510 "parse.y"
+{ 
+                 check_multiple_declarators ();
+                 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
+                   yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
+                 finish_member_declaration (yyvsp[0].ttype);
+                 yyval.itype = 2;
+               ;
+    break;}
+case 550:
+#line 2521 "parse.y"
+{ yyval.itype = 0; ;
     break;}
 case 551:
-#line 2503 "parse.y"
-{
-                 /* In this context, void_type_node encodes
-                    friends.  They have been recorded elsewhere.  */
-                 if (yyval.ttype == void_type_node)
-                   yyval.ttype = yyvsp[0].ttype;
-                 else
-                   yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype);
+#line 2523 "parse.y"
+{ 
+                 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
+                   yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
+                 finish_member_declaration (yyvsp[0].ttype);
+                 yyval.itype = 1;
+               ;
+    break;}
+case 552:
+#line 2530 "parse.y"
+{ 
+                 check_multiple_declarators ();
+                 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
+                   yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
+                 finish_member_declaration (yyvsp[0].ttype); 
+                 yyval.itype = 2;
                ;
     break;}
-case 556:
-#line 2525 "parse.y"
+case 557:
+#line 2551 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 557:
-#line 2531 "parse.y"
+case 558:
+#line 2557 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 558:
-#line 2540 "parse.y"
+case 559:
+#line 2566 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 559:
-#line 2546 "parse.y"
+case 560:
+#line 2572 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 560:
-#line 2552 "parse.y"
+case 561:
+#line 2578 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
                  yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 561:
-#line 2558 "parse.y"
+case 562:
+#line 2584 "parse.y"
 { split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-3].ttype = current_declspecs;
                  yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 562:
-#line 2567 "parse.y"
+case 563:
+#line 2593 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 563:
-#line 2570 "parse.y"
+case 564:
+#line 2596 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 564:
-#line 2576 "parse.y"
+case 565:
+#line 2602 "parse.y"
 { yyval.ttype = grokfield (yyval.ttype, current_declspecs, yyvsp[0].ttype, yyvsp[-2].ttype,
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
-case 565:
-#line 2579 "parse.y"
+case 566:
+#line 2605 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 566:
-#line 2582 "parse.y"
+case 567:
+#line 2608 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
-case 568:
-#line 2593 "parse.y"
+case 569:
+#line 2619 "parse.y"
 { TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 569:
-#line 2598 "parse.y"
+case 570:
+#line 2624 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, NULL_TREE, current_enum_type); ;
     break;}
-case 570:
-#line 2600 "parse.y"
+case 571:
+#line 2626 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, yyvsp[0].ttype, current_enum_type); ;
     break;}
-case 571:
-#line 2606 "parse.y"
+case 572:
+#line 2632 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 572:
-#line 2609 "parse.y"
+case 573:
+#line 2635 "parse.y"
 { yyval.ftype.t = build_decl_list (yyvsp[0].ftype.t, NULL_TREE); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
-case 573:
-#line 2616 "parse.y"
+case 574:
+#line 2642 "parse.y"
 {
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids array dimensions with parenthesized type in new");
@@ -6572,72 +6610,72 @@ case 573:
                  yyval.ftype.new_type_flag = yyvsp[-4].ftype.new_type_flag;
                ;
     break;}
-case 574:
-#line 2627 "parse.y"
+case 575:
+#line 2653 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 575:
-#line 2629 "parse.y"
+case 576:
+#line 2655 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 576:
-#line 2634 "parse.y"
+case 577:
+#line 2660 "parse.y"
 { yyval.ftype.t = IDENTIFIER_AS_LIST (yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 577:
-#line 2637 "parse.y"
+case 578:
+#line 2663 "parse.y"
 { yyval.ftype.t = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 578:
-#line 2646 "parse.y"
-{ yyval.itype = suspend_momentary (); ;
-    break;}
 case 579:
-#line 2651 "parse.y"
-{ resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ;
+#line 2672 "parse.y"
+{ yyval.itype = suspend_momentary (); ;
     break;}
 case 580:
-#line 2657 "parse.y"
-{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
+#line 2677 "parse.y"
+{ resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 581:
-#line 2659 "parse.y"
+#line 2683 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 582:
-#line 2661 "parse.y"
-{ resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ;
+#line 2685 "parse.y"
+{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 583:
-#line 2663 "parse.y"
-{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ;
+#line 2687 "parse.y"
+{ resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ;
     break;}
 case 584:
-#line 2670 "parse.y"
-{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
+#line 2689 "parse.y"
+{ resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ;
     break;}
 case 585:
-#line 2672 "parse.y"
-{ yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
+#line 2696 "parse.y"
+{ yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 586:
-#line 2674 "parse.y"
-{ yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
+#line 2698 "parse.y"
+{ yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 587:
-#line 2676 "parse.y"
-{ yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
+#line 2700 "parse.y"
+{ yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 588:
-#line 2678 "parse.y"
+#line 2702 "parse.y"
+{ yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
+    break;}
+case 589:
+#line 2704 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 590:
-#line 2686 "parse.y"
+case 591:
+#line 2712 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    {
@@ -6655,8 +6693,8 @@ case 590:
                    yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 591:
-#line 2703 "parse.y"
+case 592:
+#line 2729 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
@@ -6665,153 +6703,153 @@ case 591:
                  got_scope = NULL_TREE;
                ;
     break;}
-case 594:
-#line 2716 "parse.y"
+case 595:
+#line 2742 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 595:
-#line 2721 "parse.y"
+case 596:
+#line 2747 "parse.y"
 { yyval.ttype = get_type_decl (yyvsp[0].ttype); ;
     break;}
-case 596:
-#line 2726 "parse.y"
+case 597:
+#line 2752 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 597:
-#line 2728 "parse.y"
+case 598:
+#line 2754 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 598:
-#line 2730 "parse.y"
+case 599:
+#line 2756 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 599:
-#line 2732 "parse.y"
+case 600:
+#line 2758 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 600:
-#line 2734 "parse.y"
+case 601:
+#line 2760 "parse.y"
 { push_nested_class (yyvsp[-1].ttype, 3);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype);
                  TREE_COMPLEXITY (yyval.ttype) = current_class_depth; ;
     break;}
-case 602:
-#line 2745 "parse.y"
+case 603:
+#line 2771 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 603:
-#line 2747 "parse.y"
+case 604:
+#line 2773 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 604:
-#line 2749 "parse.y"
+case 605:
+#line 2775 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 605:
-#line 2751 "parse.y"
+case 606:
+#line 2777 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 606:
-#line 2753 "parse.y"
+case 607:
+#line 2779 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 608:
-#line 2761 "parse.y"
+case 609:
+#line 2787 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 609:
-#line 2763 "parse.y"
+case 610:
+#line 2789 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 610:
-#line 2765 "parse.y"
+case 611:
+#line 2791 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 611:
-#line 2767 "parse.y"
+case 612:
+#line 2793 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 612:
-#line 2769 "parse.y"
+case 613:
+#line 2795 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 614:
-#line 2777 "parse.y"
+case 615:
+#line 2803 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 615:
-#line 2779 "parse.y"
+case 616:
+#line 2805 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 616:
-#line 2781 "parse.y"
+case 617:
+#line 2807 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 617:
-#line 2783 "parse.y"
+case 618:
+#line 2809 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
-case 618:
-#line 2785 "parse.y"
+case 619:
+#line 2811 "parse.y"
 { enter_scope_of (yyvsp[0].ttype); ;
     break;}
-case 619:
-#line 2787 "parse.y"
+case 620:
+#line 2813 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype);
                  enter_scope_of (yyval.ttype);
                ;
     break;}
-case 620:
-#line 2795 "parse.y"
+case 621:
+#line 2821 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 621:
-#line 2798 "parse.y"
+case 622:
+#line 2824 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 622:
-#line 2804 "parse.y"
+case 623:
+#line 2830 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 623:
-#line 2807 "parse.y"
+case 624:
+#line 2833 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 625:
-#line 2814 "parse.y"
+case 626:
+#line 2840 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 626:
-#line 2819 "parse.y"
+case 627:
+#line 2845 "parse.y"
 { yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
-case 627:
-#line 2821 "parse.y"
+case 628:
+#line 2847 "parse.y"
 { yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
-case 628:
-#line 2823 "parse.y"
+case 629:
+#line 2849 "parse.y"
 { yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 633:
-#line 2834 "parse.y"
+case 634:
+#line 2860 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 634:
-#line 2836 "parse.y"
+case 635:
+#line 2862 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 635:
-#line 2843 "parse.y"
+case 636:
+#line 2869 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    {
@@ -6826,32 +6864,32 @@ case 635:
                  got_scope = yyval.ttype = TYPE_MAIN_VARIANT (TREE_TYPE (yyval.ttype));
                ;
     break;}
-case 636:
-#line 2857 "parse.y"
+case 637:
+#line 2883 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype = TREE_TYPE (yyval.ttype);
                ;
     break;}
-case 637:
-#line 2863 "parse.y"
+case 638:
+#line 2889 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype;
                ;
     break;}
-case 638:
-#line 2869 "parse.y"
+case 639:
+#line 2895 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); ;
     break;}
-case 640:
-#line 2885 "parse.y"
+case 641:
+#line 2911 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 641:
-#line 2890 "parse.y"
+case 642:
+#line 2916 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -6865,27 +6903,27 @@ case 641:
                    }
                ;
     break;}
-case 642:
-#line 2903 "parse.y"
+case 643:
+#line 2929 "parse.y"
 { yyval.ttype = TREE_TYPE (yyvsp[0].ttype); ;
     break;}
-case 643:
-#line 2905 "parse.y"
+case 644:
+#line 2931 "parse.y"
 { yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 644:
-#line 2907 "parse.y"
+case 645:
+#line 2933 "parse.y"
 { yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
-case 645:
-#line 2912 "parse.y"
+case 646:
+#line 2938 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype);
                ;
     break;}
-case 646:
-#line 2917 "parse.y"
+case 647:
+#line 2943 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -6899,16 +6937,16 @@ case 646:
                    }
                ;
     break;}
-case 647:
-#line 2930 "parse.y"
+case 648:
+#line 2956 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
-case 648:
-#line 2932 "parse.y"
+case 649:
+#line 2958 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 649:
-#line 2937 "parse.y"
+case 650:
+#line 2963 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE)
                    yyvsp[-1].ttype = lastiddecl;
@@ -6921,32 +6959,32 @@ case 649:
                    cp_error ("`%T' is not a class or namespace", yyvsp[-1].ttype);
                ;
     break;}
-case 650:
-#line 2949 "parse.y"
+case 651:
+#line 2975 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype));
                ;
     break;}
-case 651:
-#line 2955 "parse.y"
+case 652:
+#line 2981 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); ;
     break;}
-case 654:
-#line 2959 "parse.y"
+case 655:
+#line 2985 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
                  got_scope = yyval.ttype;
                ;
     break;}
-case 655:
-#line 2968 "parse.y"
+case 656:
+#line 2994 "parse.y"
 { yyval.ttype = build_min_nt (TEMPLATE_ID_EXPR, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 656:
-#line 2973 "parse.y"
+case 657:
+#line 2999 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
@@ -6955,149 +6993,149 @@ case 656:
                  got_scope = NULL_TREE;
                ;
     break;}
-case 658:
-#line 2982 "parse.y"
+case 659:
+#line 3008 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 659:
-#line 2987 "parse.y"
+case 660:
+#line 3013 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
-case 660:
-#line 2989 "parse.y"
+case 661:
+#line 3015 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ;
     break;}
-case 661:
-#line 2996 "parse.y"
+case 662:
+#line 3022 "parse.y"
 { got_scope = void_type_node; ;
     break;}
-case 662:
-#line 3002 "parse.y"
+case 663:
+#line 3028 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 663:
-#line 3004 "parse.y"
+case 664:
+#line 3030 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 664:
-#line 3006 "parse.y"
+case 665:
+#line 3032 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 665:
-#line 3008 "parse.y"
+case 666:
+#line 3034 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
-case 666:
-#line 3010 "parse.y"
+case 667:
+#line 3036 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg);
                ;
     break;}
-case 667:
-#line 3014 "parse.y"
+case 668:
+#line 3040 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 669:
-#line 3023 "parse.y"
+case 670:
+#line 3049 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
-case 670:
-#line 3025 "parse.y"
+case 671:
+#line 3051 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 671:
-#line 3031 "parse.y"
+case 672:
+#line 3057 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 672:
-#line 3033 "parse.y"
+case 673:
+#line 3059 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 673:
-#line 3035 "parse.y"
+case 674:
+#line 3061 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
-case 674:
-#line 3037 "parse.y"
+case 675:
+#line 3063 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ;
     break;}
-case 675:
-#line 3039 "parse.y"
+case 676:
+#line 3065 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
-case 676:
-#line 3041 "parse.y"
+case 677:
+#line 3067 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
-case 677:
-#line 3043 "parse.y"
+case 678:
+#line 3069 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
-case 678:
-#line 3045 "parse.y"
+case 679:
+#line 3071 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ;
     break;}
-case 679:
-#line 3047 "parse.y"
+case 680:
+#line 3073 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, arg);
                ;
     break;}
-case 680:
-#line 3051 "parse.y"
+case 681:
+#line 3077 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 682:
-#line 3060 "parse.y"
+case 683:
+#line 3086 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 684:
-#line 3064 "parse.y"
-{ yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
-    break;}
 case 685:
-#line 3066 "parse.y"
-{ yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
+#line 3090 "parse.y"
+{ yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 686:
-#line 3068 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
+#line 3092 "parse.y"
+{ yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 687:
-#line 3070 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
+#line 3094 "parse.y"
+{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 688:
-#line 3072 "parse.y"
-{ yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
+#line 3096 "parse.y"
+{ yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
 case 689:
-#line 3074 "parse.y"
-{ set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
+#line 3098 "parse.y"
+{ yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 690:
-#line 3076 "parse.y"
+#line 3100 "parse.y"
 { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 691:
-#line 3078 "parse.y"
-{ yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
+#line 3102 "parse.y"
+{ set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 692:
-#line 3080 "parse.y"
+#line 3104 "parse.y"
+{ yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
+    break;}
+case 693:
+#line 3106 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, NULL_TREE); ;
     break;}
-case 699:
-#line 3103 "parse.y"
+case 700:
+#line 3129 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids label declarations"); ;
     break;}
-case 702:
-#line 3114 "parse.y"
+case 703:
+#line 3140 "parse.y"
 { tree link;
                  for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
                    {
@@ -7107,226 +7145,226 @@ case 702:
                    }
                ;
     break;}
-case 703:
-#line 3128 "parse.y"
+case 704:
+#line 3154 "parse.y"
 {;
     break;}
-case 705:
-#line 3134 "parse.y"
+case 706:
+#line 3160 "parse.y"
 { yyval.ttype = begin_compound_stmt (0); ;
     break;}
-case 706:
-#line 3136 "parse.y"
+case 707:
+#line 3162 "parse.y"
 { yyval.ttype = finish_compound_stmt (0, yyvsp[-1].ttype); ;
     break;}
-case 707:
-#line 3141 "parse.y"
+case 708:
+#line 3167 "parse.y"
 {
                  yyval.ttype = begin_if_stmt ();
                  cond_stmt_keyword = "if";
                ;
     break;}
-case 708:
-#line 3146 "parse.y"
+case 709:
+#line 3172 "parse.y"
 { finish_if_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
-case 709:
-#line 3148 "parse.y"
+case 710:
+#line 3174 "parse.y"
 { yyval.ttype = finish_then_clause (yyvsp[-3].ttype); ;
     break;}
-case 711:
-#line 3153 "parse.y"
+case 712:
+#line 3179 "parse.y"
 { yyval.ttype = begin_compound_stmt (0); ;
     break;}
-case 712:
-#line 3155 "parse.y"
+case 713:
+#line 3181 "parse.y"
 { yyval.ttype = finish_compound_stmt (0, yyvsp[-1].ttype); ;
     break;}
-case 713:
-#line 3160 "parse.y"
+case 714:
+#line 3186 "parse.y"
 {;
     break;}
-case 715:
-#line 3166 "parse.y"
+case 716:
+#line 3192 "parse.y"
 { finish_stmt (); ;
     break;}
-case 716:
-#line 3168 "parse.y"
+case 717:
+#line 3194 "parse.y"
 { finish_expr_stmt (yyvsp[-1].ttype); ;
     break;}
-case 717:
-#line 3170 "parse.y"
+case 718:
+#line 3196 "parse.y"
 { begin_else_clause (); ;
     break;}
-case 718:
-#line 3172 "parse.y"
+case 719:
+#line 3198 "parse.y"
 { 
                  finish_else_clause (yyvsp[-3].ttype); 
                  finish_if_stmt ();
                ;
     break;}
-case 719:
-#line 3177 "parse.y"
+case 720:
+#line 3203 "parse.y"
 { finish_if_stmt (); ;
     break;}
-case 720:
-#line 3179 "parse.y"
+case 721:
+#line 3205 "parse.y"
 {
                  yyval.ttype = begin_while_stmt ();
                  cond_stmt_keyword = "while";
                ;
     break;}
-case 721:
-#line 3184 "parse.y"
+case 722:
+#line 3210 "parse.y"
 { finish_while_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
-case 722:
-#line 3186 "parse.y"
+case 723:
+#line 3212 "parse.y"
 { finish_while_stmt (yyvsp[-3].ttype); ;
     break;}
-case 723:
-#line 3188 "parse.y"
+case 724:
+#line 3214 "parse.y"
 { yyval.ttype = begin_do_stmt (); ;
     break;}
-case 724:
-#line 3190 "parse.y"
+case 725:
+#line 3216 "parse.y"
 {
                  finish_do_body (yyvsp[-2].ttype);
                  cond_stmt_keyword = "do";
                ;
     break;}
-case 725:
-#line 3195 "parse.y"
+case 726:
+#line 3221 "parse.y"
 { finish_do_stmt (yyvsp[-1].ttype, yyvsp[-5].ttype); ;
     break;}
-case 726:
-#line 3197 "parse.y"
+case 727:
+#line 3223 "parse.y"
 { yyval.ttype = begin_for_stmt (); ;
     break;}
-case 727:
-#line 3199 "parse.y"
+case 728:
+#line 3225 "parse.y"
 { finish_for_init_stmt (yyvsp[-2].ttype); ;
     break;}
-case 728:
-#line 3201 "parse.y"
+case 729:
+#line 3227 "parse.y"
 { finish_for_cond (yyvsp[-1].ttype, yyvsp[-5].ttype); ;
     break;}
-case 729:
-#line 3203 "parse.y"
+case 730:
+#line 3229 "parse.y"
 { finish_for_expr (yyvsp[-1].ttype, yyvsp[-8].ttype); ;
     break;}
-case 730:
-#line 3205 "parse.y"
+case 731:
+#line 3231 "parse.y"
 { finish_for_stmt (yyvsp[-3].ttype, yyvsp[-10].ttype); ;
     break;}
-case 731:
-#line 3207 "parse.y"
+case 732:
+#line 3233 "parse.y"
 { begin_switch_stmt (); ;
     break;}
-case 732:
-#line 3209 "parse.y"
+case 733:
+#line 3235 "parse.y"
 { yyval.ttype = finish_switch_cond (yyvsp[-1].ttype); ;
     break;}
-case 733:
-#line 3211 "parse.y"
+case 734:
+#line 3237 "parse.y"
 { finish_switch_stmt (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 734:
-#line 3213 "parse.y"
+case 735:
+#line 3239 "parse.y"
 { finish_case_label (yyvsp[-1].ttype, NULL_TREE); ;
     break;}
-case 736:
-#line 3216 "parse.y"
+case 737:
+#line 3242 "parse.y"
 { finish_case_label (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
-case 738:
-#line 3219 "parse.y"
+case 739:
+#line 3245 "parse.y"
 { finish_case_label (NULL_TREE, NULL_TREE); ;
     break;}
-case 740:
-#line 3222 "parse.y"
+case 741:
+#line 3248 "parse.y"
 { finish_break_stmt (); ;
     break;}
-case 741:
-#line 3224 "parse.y"
+case 742:
+#line 3250 "parse.y"
 { finish_continue_stmt (); ;
     break;}
-case 742:
-#line 3226 "parse.y"
+case 743:
+#line 3252 "parse.y"
 { finish_return_stmt (NULL_TREE); ;
     break;}
-case 743:
-#line 3228 "parse.y"
+case 744:
+#line 3254 "parse.y"
 { finish_return_stmt (yyvsp[-1].ttype); ;
     break;}
-case 744:
-#line 3230 "parse.y"
+case 745:
+#line 3256 "parse.y"
 { 
                  finish_asm_stmt (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
                                   NULL_TREE); 
                ;
     break;}
-case 745:
-#line 3236 "parse.y"
+case 746:
+#line 3262 "parse.y"
 { 
                  finish_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
                                   NULL_TREE); 
                ;
     break;}
-case 746:
-#line 3242 "parse.y"
+case 747:
+#line 3268 "parse.y"
 { finish_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
-case 747:
-#line 3246 "parse.y"
+case 748:
+#line 3272 "parse.y"
 { finish_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ;
     break;}
-case 748:
-#line 3248 "parse.y"
+case 749:
+#line 3274 "parse.y"
 { 
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids computed gotos");
                  finish_goto_stmt (yyvsp[-1].ttype);
                ;
     break;}
-case 749:
-#line 3254 "parse.y"
+case 750:
+#line 3280 "parse.y"
 { finish_goto_stmt (yyvsp[-1].ttype); ;
     break;}
-case 750:
-#line 3256 "parse.y"
+case 751:
+#line 3282 "parse.y"
 { finish_stmt (); ;
     break;}
-case 751:
-#line 3258 "parse.y"
+case 752:
+#line 3284 "parse.y"
 { error ("label must be followed by statement");
                  yyungetc ('}', 0);
                  finish_stmt (); ;
     break;}
-case 752:
-#line 3262 "parse.y"
+case 753:
+#line 3288 "parse.y"
 { finish_stmt (); ;
     break;}
-case 755:
-#line 3266 "parse.y"
+case 756:
+#line 3292 "parse.y"
 { do_local_using_decl (yyvsp[0].ttype); ;
     break;}
-case 757:
-#line 3272 "parse.y"
+case 758:
+#line 3298 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
                  expand_start_early_try_stmts ();
                ;
     break;}
-case 758:
-#line 3278 "parse.y"
+case 759:
+#line 3304 "parse.y"
 { 
                   expand_start_all_catch (); 
                 ;
     break;}
-case 759:
-#line 3282 "parse.y"
+case 760:
+#line 3308 "parse.y"
 {
                  int nested = (hack_decl_function_context
                                (current_function_decl) != NULL_TREE);
@@ -7334,42 +7372,42 @@ case 759:
                  finish_function (lineno, (int)yyvsp[-3].itype, nested);
                ;
     break;}
-case 760:
-#line 3292 "parse.y"
+case 761:
+#line 3318 "parse.y"
 { yyval.ttype = begin_try_block (); ;
     break;}
-case 761:
-#line 3294 "parse.y"
+case 762:
+#line 3320 "parse.y"
 { finish_try_block (yyvsp[-1].ttype); ;
     break;}
-case 762:
-#line 3296 "parse.y"
+case 763:
+#line 3322 "parse.y"
 { finish_handler_sequence (yyvsp[-3].ttype); ;
     break;}
-case 765:
-#line 3306 "parse.y"
+case 766:
+#line 3332 "parse.y"
 { yyval.ttype = begin_handler(); ;
     break;}
-case 766:
-#line 3308 "parse.y"
+case 767:
+#line 3334 "parse.y"
 { finish_handler_parms (yyvsp[-1].ttype); ;
     break;}
-case 767:
-#line 3310 "parse.y"
+case 768:
+#line 3336 "parse.y"
 { finish_handler (yyvsp[-3].ttype); ;
     break;}
-case 770:
-#line 3320 "parse.y"
+case 771:
+#line 3346 "parse.y"
 { expand_start_catch_block (NULL_TREE, NULL_TREE); ;
     break;}
-case 771:
-#line 3336 "parse.y"
+case 772:
+#line 3362 "parse.y"
 { check_for_new_type ("inside exception declarations", yyvsp[-1].ftype);
                  expand_start_catch_block (TREE_PURPOSE (yyvsp[-1].ftype.t),
                                            TREE_VALUE (yyvsp[-1].ftype.t)); ;
     break;}
-case 772:
-#line 3343 "parse.y"
+case 773:
+#line 3369 "parse.y"
 { tree label;
                do_label:
                  label = define_label (input_filename, lineno, yyvsp[-1].ttype);
@@ -7377,99 +7415,99 @@ case 772:
                    expand_label (label);
                ;
     break;}
-case 773:
-#line 3350 "parse.y"
-{ goto do_label; ;
-    break;}
 case 774:
-#line 3352 "parse.y"
+#line 3376 "parse.y"
 { goto do_label; ;
     break;}
 case 775:
-#line 3354 "parse.y"
+#line 3378 "parse.y"
 { goto do_label; ;
     break;}
 case 776:
-#line 3359 "parse.y"
+#line 3380 "parse.y"
+{ goto do_label; ;
+    break;}
+case 777:
+#line 3385 "parse.y"
 { if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ;
     break;}
-case 778:
-#line 3362 "parse.y"
+case 779:
+#line 3388 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids compound statements inside for initializations");
                ;
     break;}
-case 779:
-#line 3371 "parse.y"
+case 780:
+#line 3397 "parse.y"
 { emit_line_note (input_filename, lineno);
                  yyval.ttype = NULL_TREE; ;
     break;}
-case 780:
-#line 3374 "parse.y"
+case 781:
+#line 3400 "parse.y"
 { emit_line_note (input_filename, lineno); ;
     break;}
-case 781:
-#line 3379 "parse.y"
+case 782:
+#line 3405 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 783:
-#line 3382 "parse.y"
+case 784:
+#line 3408 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 784:
-#line 3389 "parse.y"
+case 785:
+#line 3415 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 787:
-#line 3396 "parse.y"
+case 788:
+#line 3422 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 788:
-#line 3401 "parse.y"
+case 789:
+#line 3427 "parse.y"
 { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
-case 789:
-#line 3406 "parse.y"
+case 790:
+#line 3432 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ;
     break;}
-case 790:
-#line 3408 "parse.y"
+case 791:
+#line 3434 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
-case 791:
-#line 3419 "parse.y"
+case 792:
+#line 3445 "parse.y"
 {
                  yyval.ttype = empty_parms();
                ;
     break;}
-case 793:
-#line 3424 "parse.y"
+case 794:
+#line 3450 "parse.y"
 { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE, yyvsp[0].ftype.t), 0);
                  check_for_new_type ("inside parameter list", yyvsp[0].ftype); ;
     break;}
-case 794:
-#line 3432 "parse.y"
-{ yyval.ttype = finish_parmlist (yyval.ttype, 0); ;
-    break;}
 case 795:
-#line 3434 "parse.y"
-{ yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
+#line 3458 "parse.y"
+{ yyval.ttype = finish_parmlist (yyval.ttype, 0); ;
     break;}
 case 796:
-#line 3437 "parse.y"
+#line 3460 "parse.y"
 { yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
     break;}
 case 797:
-#line 3439 "parse.y"
+#line 3463 "parse.y"
+{ yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
+    break;}
+case 798:
+#line 3465 "parse.y"
 { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE,
                                                         yyvsp[-1].ftype.t), 1); ;
     break;}
-case 798:
-#line 3442 "parse.y"
+case 799:
+#line 3468 "parse.y"
 { yyval.ttype = finish_parmlist (NULL_TREE, 1); ;
     break;}
-case 799:
-#line 3444 "parse.y"
+case 800:
+#line 3470 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -7480,8 +7518,8 @@ case 799:
                  yychar = ')';
                ;
     break;}
-case 800:
-#line 3454 "parse.y"
+case 801:
+#line 3480 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -7493,99 +7531,99 @@ case 800:
                  yychar = ')';
                ;
     break;}
-case 801:
-#line 3469 "parse.y"
+case 802:
+#line 3495 "parse.y"
 { maybe_snarf_defarg (); ;
     break;}
-case 802:
-#line 3471 "parse.y"
+case 803:
+#line 3497 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 805:
-#line 3482 "parse.y"
+case 806:
+#line 3508 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[0].ftype);
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ftype.t); ;
     break;}
-case 806:
-#line 3485 "parse.y"
+case 807:
+#line 3511 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[-1].ftype);
                  yyval.ttype = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t); ;
     break;}
-case 807:
-#line 3488 "parse.y"
+case 808:
+#line 3514 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[0].ftype);
                  yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ;
     break;}
-case 808:
-#line 3491 "parse.y"
+case 809:
+#line 3517 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
-case 809:
-#line 3493 "parse.y"
+case 810:
+#line 3519 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ;
     break;}
-case 811:
-#line 3499 "parse.y"
+case 812:
+#line 3525 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[-1].ftype);
                  yyval.ttype = build_tree_list (NULL_TREE, yyvsp[-1].ftype.t); ;
     break;}
-case 812:
-#line 3509 "parse.y"
+case 813:
+#line 3535 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag;
                  yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); ;
     break;}
-case 813:
-#line 3513 "parse.y"
+case 814:
+#line 3539 "parse.y"
 { yyval.ftype.t = build_tree_list (yyvsp[-1].ftype.t, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 814:
-#line 3516 "parse.y"
+case 815:
+#line 3542 "parse.y"
 { yyval.ftype.t = build_tree_list (get_decl_list (yyvsp[-1].ftype.t), yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 815:
-#line 3519 "parse.y"
+case 816:
+#line 3545 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ftype.t);
                  yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype);
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
-case 816:
-#line 3523 "parse.y"
+case 817:
+#line 3549 "parse.y"
 { tree specs = strip_attrs (yyvsp[0].ftype.t);
                  yyval.ftype.t = build_tree_list (specs, NULL_TREE); 
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag; ;
     break;}
-case 817:
-#line 3527 "parse.y"
+case 818:
+#line 3553 "parse.y"
 { tree specs = strip_attrs (yyvsp[-1].ttype);
                  yyval.ftype.t = build_tree_list (specs, yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = 0; ;
     break;}
-case 818:
-#line 3534 "parse.y"
+case 819:
+#line 3560 "parse.y"
 { yyval.ftype.t = build_tree_list (NULL_TREE, yyvsp[0].ftype.t);
                  yyval.ftype.new_type_flag = yyvsp[0].ftype.new_type_flag;  ;
     break;}
-case 819:
-#line 3537 "parse.y"
+case 820:
+#line 3563 "parse.y"
 { yyval.ftype.t = build_tree_list (yyvsp[0].ttype, yyvsp[-1].ftype.t);
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag;  ;
     break;}
-case 822:
-#line 3548 "parse.y"
+case 823:
+#line 3574 "parse.y"
 { see_typename (); ;
     break;}
-case 823:
-#line 3553 "parse.y"
+case 824:
+#line 3579 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  yyval.ttype = build_tree_list (integer_type_node, NULL_TREE);
                ;
     break;}
-case 824:
-#line 3558 "parse.y"
+case 825:
+#line 3584 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  if (TREE_CODE (yyval.ttype) == SCOPE_REF
@@ -7595,189 +7633,189 @@ case 824:
                  yyval.ttype = build_tree_list (integer_type_node, yyval.ttype);
                ;
     break;}
-case 825:
-#line 3570 "parse.y"
+case 826:
+#line 3596 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 826:
-#line 3572 "parse.y"
+case 827:
+#line 3598 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
-case 827:
-#line 3574 "parse.y"
+case 828:
+#line 3600 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ;
     break;}
-case 828:
-#line 3579 "parse.y"
+case 829:
+#line 3605 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ;
     break;}
-case 830:
-#line 3585 "parse.y"
+case 831:
+#line 3611 "parse.y"
 {
                  TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype;
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
-case 831:
-#line 3593 "parse.y"
+case 832:
+#line 3619 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 832:
-#line 3595 "parse.y"
+case 833:
+#line 3621 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 833:
-#line 3597 "parse.y"
+case 834:
+#line 3623 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
-case 834:
-#line 3599 "parse.y"
+case 835:
+#line 3625 "parse.y"
 { tree arg = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype);
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-2].ttype, arg);
                ;
     break;}
-case 835:
-#line 3606 "parse.y"
-{ got_scope = NULL_TREE; ;
-    break;}
 case 836:
-#line 3611 "parse.y"
-{ yyval.ttype = ansi_opname[MULT_EXPR]; ;
+#line 3632 "parse.y"
+{ got_scope = NULL_TREE; ;
     break;}
 case 837:
-#line 3613 "parse.y"
-{ yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ;
+#line 3637 "parse.y"
+{ yyval.ttype = ansi_opname[MULT_EXPR]; ;
     break;}
 case 838:
-#line 3615 "parse.y"
-{ yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ;
+#line 3639 "parse.y"
+{ yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ;
     break;}
 case 839:
-#line 3617 "parse.y"
-{ yyval.ttype = ansi_opname[PLUS_EXPR]; ;
+#line 3641 "parse.y"
+{ yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ;
     break;}
 case 840:
-#line 3619 "parse.y"
-{ yyval.ttype = ansi_opname[MINUS_EXPR]; ;
+#line 3643 "parse.y"
+{ yyval.ttype = ansi_opname[PLUS_EXPR]; ;
     break;}
 case 841:
-#line 3621 "parse.y"
-{ yyval.ttype = ansi_opname[BIT_AND_EXPR]; ;
+#line 3645 "parse.y"
+{ yyval.ttype = ansi_opname[MINUS_EXPR]; ;
     break;}
 case 842:
-#line 3623 "parse.y"
-{ yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ;
+#line 3647 "parse.y"
+{ yyval.ttype = ansi_opname[BIT_AND_EXPR]; ;
     break;}
 case 843:
-#line 3625 "parse.y"
-{ yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ;
+#line 3649 "parse.y"
+{ yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ;
     break;}
 case 844:
-#line 3627 "parse.y"
-{ yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ;
+#line 3651 "parse.y"
+{ yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ;
     break;}
 case 845:
-#line 3629 "parse.y"
-{ yyval.ttype = ansi_opname[COMPOUND_EXPR]; ;
+#line 3653 "parse.y"
+{ yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ;
     break;}
 case 846:
-#line 3631 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
+#line 3655 "parse.y"
+{ yyval.ttype = ansi_opname[COMPOUND_EXPR]; ;
     break;}
 case 847:
-#line 3633 "parse.y"
-{ yyval.ttype = ansi_opname[LT_EXPR]; ;
+#line 3657 "parse.y"
+{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 848:
-#line 3635 "parse.y"
-{ yyval.ttype = ansi_opname[GT_EXPR]; ;
+#line 3659 "parse.y"
+{ yyval.ttype = ansi_opname[LT_EXPR]; ;
     break;}
 case 849:
-#line 3637 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
+#line 3661 "parse.y"
+{ yyval.ttype = ansi_opname[GT_EXPR]; ;
     break;}
 case 850:
-#line 3639 "parse.y"
-{ yyval.ttype = ansi_assopname[yyvsp[0].code]; ;
+#line 3663 "parse.y"
+{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 851:
-#line 3641 "parse.y"
-{ yyval.ttype = ansi_opname [MODIFY_EXPR]; ;
+#line 3665 "parse.y"
+{ yyval.ttype = ansi_assopname[yyvsp[0].code]; ;
     break;}
 case 852:
-#line 3643 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
+#line 3667 "parse.y"
+{ yyval.ttype = ansi_opname [MODIFY_EXPR]; ;
     break;}
 case 853:
-#line 3645 "parse.y"
+#line 3669 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 854:
-#line 3647 "parse.y"
-{ yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ;
+#line 3671 "parse.y"
+{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 855:
-#line 3649 "parse.y"
-{ yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ;
+#line 3673 "parse.y"
+{ yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ;
     break;}
 case 856:
-#line 3651 "parse.y"
-{ yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ;
+#line 3675 "parse.y"
+{ yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ;
     break;}
 case 857:
-#line 3653 "parse.y"
-{ yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ;
+#line 3677 "parse.y"
+{ yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ;
     break;}
 case 858:
-#line 3655 "parse.y"
-{ yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ;
+#line 3679 "parse.y"
+{ yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ;
     break;}
 case 859:
-#line 3657 "parse.y"
-{ yyval.ttype = ansi_opname[COND_EXPR]; ;
+#line 3681 "parse.y"
+{ yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ;
     break;}
 case 860:
-#line 3659 "parse.y"
-{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
+#line 3683 "parse.y"
+{ yyval.ttype = ansi_opname[COND_EXPR]; ;
     break;}
 case 861:
-#line 3661 "parse.y"
-{ yyval.ttype = ansi_opname[COMPONENT_REF]; ;
+#line 3685 "parse.y"
+{ yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 862:
-#line 3663 "parse.y"
-{ yyval.ttype = ansi_opname[MEMBER_REF]; ;
+#line 3687 "parse.y"
+{ yyval.ttype = ansi_opname[COMPONENT_REF]; ;
     break;}
 case 863:
-#line 3665 "parse.y"
-{ yyval.ttype = ansi_opname[CALL_EXPR]; ;
+#line 3689 "parse.y"
+{ yyval.ttype = ansi_opname[MEMBER_REF]; ;
     break;}
 case 864:
-#line 3667 "parse.y"
-{ yyval.ttype = ansi_opname[ARRAY_REF]; ;
+#line 3691 "parse.y"
+{ yyval.ttype = ansi_opname[CALL_EXPR]; ;
     break;}
 case 865:
-#line 3669 "parse.y"
-{ yyval.ttype = ansi_opname[NEW_EXPR]; ;
+#line 3693 "parse.y"
+{ yyval.ttype = ansi_opname[ARRAY_REF]; ;
     break;}
 case 866:
-#line 3671 "parse.y"
-{ yyval.ttype = ansi_opname[DELETE_EXPR]; ;
+#line 3695 "parse.y"
+{ yyval.ttype = ansi_opname[NEW_EXPR]; ;
     break;}
 case 867:
-#line 3673 "parse.y"
-{ yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ;
+#line 3697 "parse.y"
+{ yyval.ttype = ansi_opname[DELETE_EXPR]; ;
     break;}
 case 868:
-#line 3675 "parse.y"
-{ yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ;
+#line 3699 "parse.y"
+{ yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ;
     break;}
 case 869:
-#line 3678 "parse.y"
-{ yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
+#line 3701 "parse.y"
+{ yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ;
     break;}
 case 870:
-#line 3680 "parse.y"
+#line 3704 "parse.y"
+{ yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
+    break;}
+case 871:
+#line 3706 "parse.y"
 { yyval.ttype = ansi_opname[ERROR_MARK]; ;
     break;}
 }
@@ -7978,7 +8016,7 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 3683 "parse.y"
+#line 3709 "parse.y"
 
 
 #ifdef SPEW_DEBUG
index 64a75e823a9c1958b9ba8ef07da3843d994a20fa..42af782951607651e5858aa8defde158eaf5a152 100644 (file)
@@ -204,10 +204,9 @@ empty_parms ()
 
 %type <ttype> declarator notype_declarator after_type_declarator
 %type <ttype> direct_notype_declarator direct_after_type_declarator
-
-%type <ttype> opt.component_decl_list component_decl_list
-%type <ttype> component_decl component_decl_1 components notype_components
-%type <ttype> component_declarator component_declarator0 self_reference
+%type <itype> components notype_components
+%type <ttype> component_decl component_decl_1 
+%type <ttype> component_declarator component_declarator0
 %type <ttype> notype_component_declarator notype_component_declarator0
 %type <ttype> after_type_component_declarator after_type_component_declarator0
 %type <ttype> enumlist enumerator
@@ -1844,16 +1843,19 @@ typespecqual_reserved:
 initdecls:
          initdcl0
        | initdecls ',' initdcl
+            { check_multiple_declarators (); }
        ;
 
 notype_initdecls:
          notype_initdcl0
        | notype_initdecls ',' initdcl
+            { check_multiple_declarators (); }
        ;
 
 nomods_initdecls:
          nomods_initdcl0
        | nomods_initdecls ',' initdcl
+            { check_multiple_declarators (); }
        ;
 
 maybeasm:
@@ -2112,7 +2114,7 @@ structsp:
                    yychar = YYLEX;
                  semi = yychar == ';';
 
-                 $<ttype>$ = finish_class_definition ($1, $3, $5, semi); 
+                 $<ttype>$ = finish_class_definition ($1, $5, semi); 
                }
          pending_defargs
                 { finish_default_args (); }
@@ -2168,7 +2170,10 @@ aggr:
 
 named_class_head_sans_basetype:
          aggr identifier
-               { current_aggr = $$; $$ = $2; }
+               { 
+                 current_aggr = $1; 
+                 $$ = $2; 
+               }
        ;
 
 named_class_head_sans_basetype_defn:
@@ -2202,15 +2207,11 @@ named_complex_class_head_sans_basetype:
                { current_aggr = $$; $$ = $3; }
        ;
 
-do_xref_defn:
-         /* empty */  %prec EMPTY
-               { $<ttype>$ = xref_tag (current_aggr, $<ttype>0, 0); }
-       ;
-
 named_class_head:
          named_class_head_sans_basetype  %prec EMPTY
                { $$ = xref_tag (current_aggr, $1, 1); }
-       | named_class_head_sans_basetype_defn do_xref_defn
+       | named_class_head_sans_basetype_defn 
+                { $<ttype>$ = xref_tag (current_aggr, $1, 0); }
           maybe_base_class_list  %prec EMPTY
                { 
                  $$ = $<ttype>2;
@@ -2358,64 +2359,45 @@ left_curly:
 self_reference:
          /* empty */
                {
-                   $$ = build_self_reference ();
+                 finish_member_declaration (build_self_reference ());
                }
        ;
 
 opt.component_decl_list:
          self_reference
-               { if ($$) $$ = build_tree_list (access_public_node, $$); }
        | self_reference component_decl_list
-               {
-                 if (current_aggr == signature_type_node)
-                   $$ = build_tree_list (access_public_node, $2);
-                 else
-                   $$ = build_tree_list (access_default_node, $2);
-                 if ($1) $$ = tree_cons (access_public_node, $1, $$);
-               }
-       | opt.component_decl_list VISSPEC ':' component_decl_list
-               {
-                 tree visspec = $2;
+       | opt.component_decl_list access_specifier component_decl_list
+       | opt.component_decl_list access_specifier 
+       ;
 
+access_specifier:
+         VISSPEC ':'
+                {
                  if (current_aggr == signature_type_node)
                    {
                      error ("access specifier not allowed in signature");
-                     visspec = access_public_node;
+                     $1 = access_public_node;
                    }
-                 $$ = chainon ($$, build_tree_list (visspec, $4));
-               }
-       | opt.component_decl_list VISSPEC ':'
-               {
-                 if (current_aggr == signature_type_node)
-                   error ("access specifier not allowed in signature");
-               }
+
+                 current_access_specifier = $1;
+                }
        ;
 
 /* Note: we no longer warn about the semicolon after a component_decl_list.
    ARM $9.2 says that the semicolon is optional, and therefore allowed.  */
 component_decl_list:
          component_decl
-               { if ($$ == void_type_node) $$ = NULL_TREE; 
+               { 
+                 finish_member_declaration ($1);
                }
        | component_decl_list component_decl
-               { /* In pushdecl, we created a reverse list of names
-                    in this binding level.  Make sure that the chain
-                    of what we're trying to add isn't the item itself
-                    (which can happen with what pushdecl's doing).  */
-                 if ($2 != NULL_TREE && $2 != void_type_node
-                     && $2 != error_mark_node)
-                   {
-                     if (TREE_CHAIN ($2) != $$)
-                       $$ = chainon ($$, $2);
-                     else
-                       $$ = $2;
-                   }
+               { 
+                 finish_member_declaration ($2);
                }
        ;
 
 component_decl:
          component_decl_1 ';'
-               { }
        | component_decl_1 '}'
                { error ("missing ';' before right brace");
                  yyungetc ('}', 0); }
@@ -2435,9 +2417,20 @@ component_decl:
                { $$ = $2;
                  pedantic = $<itype>1; }
         | template_header component_decl
-                { $$ = finish_member_template_decl ($1, $2); }
+                {  
+                 if ($2)
+                   $$ = finish_member_template_decl ($2);
+                 else
+                   /* The component was already processed.  */
+                   $$ = NULL_TREE;
+
+                 finish_template_decl ($1);
+               }
        | template_header typed_declspecs ';'
-                { $$ = finish_member_class_template ($1, $2.t); }
+                { 
+                 $$ = finish_member_class_template ($2.t); 
+                 finish_template_decl ($1);
+               }
        ;
 
 component_decl_1:
@@ -2445,9 +2438,32 @@ component_decl_1:
           speed; we need to call grok_x_components for enums, so the
           speedup would be insignificant.  */
          typed_declspecs components
-               { $$ = grok_x_components ($1.t, $2); }
+               {
+                 /* Most of the productions for component_decl only
+                    allow the creation of one new member, so we call
+                    finish_member_declaration in component_decl_list.
+                    For this rule and the next, however, there can be
+                    more than one member, e.g.:
+
+                      int i, j;
+
+                    and we need the first member to be fully
+                    registered before the second is processed.
+                    Therefore, the rules for components take care of
+                    this processing.  To avoid registering the
+                    components more than once, we send NULL_TREE up
+                    here; that lets finish_member_declaration now
+                    that there is nothing to do.  */
+                 if (!$2)
+                   grok_x_components ($1.t);
+                 $$ = NULL_TREE;
+               }
        | declmods notype_components
-               { $$ = grok_x_components ($1, $2); }
+               { 
+                 if (!$2)
+                   grok_x_components ($1);
+                 $$ = NULL_TREE; 
+               }
        | notype_declarator maybeasm maybe_attribute maybe_init
                { $$ = grokfield ($$, NULL_TREE, $4, $2,
                                  build_tree_list ($3, NULL_TREE)); }
@@ -2482,31 +2498,41 @@ component_decl_1:
 /* ??? Huh? ^^^ */
 components:
          /* empty: possibly anonymous */
-               { $$ = NULL_TREE; }
+                { $$ = 0; }
        | component_declarator0
+                { 
+                 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
+                   $1 = finish_member_template_decl ($1);
+                 finish_member_declaration ($1); 
+                 $$ = 1;
+               }
        | components ',' component_declarator
-               {
-                 /* In this context, void_type_node encodes
-                    friends.  They have been recorded elsewhere.  */
-                 if ($$ == void_type_node)
-                   $$ = $3;
-                 else
-                   $$ = chainon ($$, $3);
+                { 
+                 check_multiple_declarators ();
+                 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
+                   $3 = finish_member_template_decl ($3);
+                 finish_member_declaration ($3);
+                 $$ = 2;
                }
        ;
 
 notype_components:
          /* empty: possibly anonymous */
-               { $$ = NULL_TREE; }
+                { $$ = 0; }
        | notype_component_declarator0
+                { 
+                 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
+                   $1 = finish_member_template_decl ($1);
+                 finish_member_declaration ($1);
+                 $$ = 1;
+               }
        | notype_components ',' notype_component_declarator
-               {
-                 /* In this context, void_type_node encodes
-                    friends.  They have been recorded elsewhere.  */
-                 if ($$ == void_type_node)
-                   $$ = $3;
-                 else
-                   $$ = chainon ($$, $3);
+                { 
+                 check_multiple_declarators ();
+                 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
+                   $3 = finish_member_template_decl ($3);
+                 finish_member_declaration ($3); 
+                 $$ = 2;
                }
        ;
 
index 10161f822ab0b1ea37aecaca756426e7860854ed..c493bea4f5f77cb1e53677614a75c05432649f80 100644 (file)
@@ -129,6 +129,7 @@ static tree tsubst_decl PROTO((tree, tree, tree, tree));
 static tree tsubst_arg_types PROTO((tree, tree, tree));
 static void check_specialization_scope PROTO((void));
 static tree process_partial_specialization PROTO((tree));
+static void set_current_access_from_decl PROTO((tree));
 
 /* We use TREE_VECs to hold template arguments.  If there is only one
    level of template arguments, then the TREE_VEC contains the
@@ -196,12 +197,9 @@ static tree process_partial_specialization PROTO((tree));
    it is a specialization, in which case the DECL itself is returned.  */
 
 tree
-finish_member_template_decl (template_parameters, decl)
-  tree template_parameters;
+finish_member_template_decl (decl)
   tree decl;
 {
-  finish_template_decl (template_parameters);
-
   if (decl == NULL_TREE || decl == void_type_node)
     return NULL_TREE;
   else if (decl == error_mark_node)
@@ -3066,9 +3064,11 @@ comp_template_args (oldargs, newargs)
 
       if (nt == ot)
        continue;
-      if (TREE_CODE (nt) != TREE_CODE (ot))
+      else if (!nt || !ot)
+       return 0;
+      else if (TREE_CODE (nt) != TREE_CODE (ot))
        return 0;
-      if (TREE_CODE (nt) == TREE_VEC)
+      else if (TREE_CODE (nt) == TREE_VEC)
         {
           /* For member templates */
          if (comp_template_args (ot, nt))
@@ -3382,14 +3382,12 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope)
     }
   else 
     {
-      extern tree current_local_enum;
       tree template_type = TREE_TYPE (template);
       tree type_decl;
       tree found = NULL_TREE;
       int arg_depth;
       int parm_depth;
       int is_partial_instantiation;
-      tree prev_local_enum = NULL_TREE;
 
       template = most_general_template (template);
       parmlist = DECL_TEMPLATE_PARMS (template);
@@ -3549,10 +3547,7 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope)
       if (TREE_CODE (template_type) == ENUMERAL_TYPE)
        {
          if (!is_partial_instantiation)
-           {
-             prev_local_enum = current_local_enum;
-             t = start_enum (TYPE_IDENTIFIER (template_type));
-           }
+           t = start_enum (TYPE_IDENTIFIER (template_type));
          else
            /* We don't want to call start_enum for this type, since
               the values for the enumeration constants may involve
@@ -3570,7 +3565,7 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope)
          TYPE_FOR_JAVA (t) = TYPE_FOR_JAVA (template_type);
        }
 
-      /* If we called tsubst_enum above, this information will already
+      /* If we called start_enum above, this information will already
         be set up.  */
       if (!TYPE_NAME (t))
        {
@@ -3599,17 +3594,14 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope)
 
       if (TREE_CODE (t) == ENUMERAL_TYPE 
          && !is_partial_instantiation)
-       {
-         /* Now that the type has been registered on the
-            instantiations list, we set up the enumerators.  Because
-            the enumeration constants may involve the enumeration
-            type itself, we make sure to register the type first, and
-            then create the constants.  That way, doing tsubst_expr
-            for the enumeration constants won't result in recursive
-            calls here; we'll find the instantiation and exit above.  */
-         tsubst_enum (template_type, t, arglist);
-         current_local_enum = prev_local_enum;
-       }
+       /* Now that the type has been registered on the instantiations
+          list, we set up the enumerators.  Because the enumeration
+          constants may involve the enumeration type itself, we make
+          sure to register the type first, and then create the
+          constants.  That way, doing tsubst_expr for the enumeration
+          constants won't result in recursive calls here; we'll find
+          the instantiation and exit above.  */
+       tsubst_enum (template_type, t, arglist);
 
       /* We're done with the permanent obstack, now.  */
       pop_obstacks ();
@@ -3814,6 +3806,9 @@ for_each_template_parm (t, fn, data)
     case TYPENAME_TYPE:
       return 1;
 
+    case PTRMEM_CST:
+      return for_each_template_parm (TREE_TYPE (t), fn, data);
+
     case SCOPE_REF:
       return for_each_template_parm (TREE_OPERAND (t, 0), fn, data);
 
@@ -4256,7 +4251,7 @@ tree
 instantiate_class_template (type)
      tree type;
 {
-  tree template, args, pattern, t, *field_chain;
+  tree template, args, pattern, t;
   tree typedecl;
 
   if (type == error_mark_node)
@@ -4323,11 +4318,16 @@ instantiate_class_template (type)
     }
 
   if (pedantic && uses_template_parms (args))
-    /* If there are still template parameters amongst the args, then
-       we can't instantiate the type; there's no telling whether or not one
-       of the template parameters might eventually be instantiated to some
-       value that results in a specialization being used.  */
-    return type;
+    {
+      /* If there are still template parameters amongst the args, then
+        we can't instantiate the type; there's no telling whether or not one
+        of the template parameters might eventually be instantiated to some
+        value that results in a specialization being used.  We do the
+        type as complete so that, for example, declaring one of its
+        members to be a friend will not be rejected.  */
+      TYPE_SIZE (type) = integer_zero_node;
+      return type;
+    }
 
   TYPE_BEING_DEFINED (type) = 1;
 
@@ -4394,8 +4394,6 @@ instantiate_class_template (type)
   TYPE_ALIGN (type) = TYPE_ALIGN (pattern);
   TYPE_FOR_JAVA (type) = TYPE_FOR_JAVA (pattern); /* For libjava's JArray<T> */
 
-  CLASSTYPE_LOCAL_TYPEDECLS (type) = CLASSTYPE_LOCAL_TYPEDECLS (pattern);
-
   /* If this is a partial instantiation, don't tsubst anything.  We will
      only use this type for implicit typename, so the actual contents don't
      matter.  All that matters is whether a particular name is a type.  */
@@ -4449,8 +4447,6 @@ instantiate_class_template (type)
              }
            TYPE_GETS_NEW (type) |= TYPE_GETS_NEW (basetype);
            TYPE_GETS_DELETE (type) |= TYPE_GETS_DELETE (basetype);
-           CLASSTYPE_LOCAL_TYPEDECLS (type)
-             |= CLASSTYPE_LOCAL_TYPEDECLS (basetype);
          }
        /* Don't initialize this until the vector is filled out, or
           lookups will crash.  */
@@ -4458,8 +4454,6 @@ instantiate_class_template (type)
       }
   }
 
-  field_chain = &TYPE_FIELDS (type);
-
   for (t = CLASSTYPE_TAGS (pattern); t; t = TREE_CHAIN (t))
     {
       tree tag = TREE_VALUE (t);
@@ -4467,35 +4461,7 @@ instantiate_class_template (type)
       tree newtag;
 
       newtag = tsubst (tag, args, NULL_TREE);
-      if (TREE_CODE (newtag) == ENUMERAL_TYPE)
-       {
-         extern tree current_local_enum;
-         tree prev_local_enum = current_local_enum;
-
-         if (TYPE_VALUES (newtag))
-           {
-             tree v;
-
-             /* We must set things up so that CURRENT_LOCAL_ENUM is the
-                CONST_DECL for the last enumeration constant, since the
-                CONST_DECLs are chained backwards.  */
-             for (v = TYPE_VALUES (newtag); TREE_CHAIN (v); 
-                  v = TREE_CHAIN (v))
-               ;
-
-             current_local_enum 
-               = IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (v));
-             *field_chain = grok_enum_decls (NULL_TREE);
-             current_local_enum = prev_local_enum;
-
-             while (*field_chain)
-               {
-                 DECL_FIELD_CONTEXT (*field_chain) = type;
-                 field_chain = &TREE_CHAIN (*field_chain);
-               }
-           }
-       }
-      else
+      if (TREE_CODE (newtag) != ENUMERAL_TYPE)
        {
          /* Now, we call pushtag to put this NEWTAG into the scope of
             TYPE.  We first set up the IDENTIFIER_TYPE_VALUE to avoid
@@ -4530,12 +4496,27 @@ instantiate_class_template (type)
            DECL_EXTERNAL (r) = 1;
            cp_finish_decl (r, DECL_INITIAL (r), NULL_TREE, 0, 0);
          }
-
-       *field_chain = r;
-       field_chain = &TREE_CHAIN (r);
+       
+       /* R will have a TREE_CHAIN if and only if it has already been
+          processed by finish_member_declaration.  This can happen
+          if, for example, it is a TYPE_DECL for a class-scoped
+          ENUMERAL_TYPE; such a thing will already have been added to
+          the field list by tsubst_enum above.  */
+       if (!TREE_CHAIN (r))
+         {
+           set_current_access_from_decl (r);
+           finish_member_declaration (r);
+         }
       }
 
-  TYPE_METHODS (type) = tsubst_chain (TYPE_METHODS (pattern), args);
+  /* Set up the list (TYPE_METHODS) and vector (CLASSTYPE_METHOD_VEC)
+     for this instantiation.  */
+  for (t = TYPE_METHODS (pattern); t; t = TREE_CHAIN (t))
+    {
+      tree r = tsubst (t, args, NULL_TREE);
+      set_current_access_from_decl (r);
+      finish_member_declaration (r);
+    }
 
   /* Construct the DECL_FRIENDLIST for the new class type.  */
   typedecl = TYPE_MAIN_DECL (type);
@@ -4627,6 +4608,14 @@ instantiate_class_template (type)
        require_complete_type (t);
       }
 
+  /* Set the file and line number information to whatever is given for
+     the class itself.  This puts error messages involving generated
+     implicit functions at a predictable point, and the same point
+     that would be used for non-template classes.  */
+  lineno = DECL_SOURCE_LINE (typedecl);
+  input_filename = DECL_SOURCE_FILE (typedecl);
+
+  unreverse_member_declarations (type);
   type = finish_struct_1 (type, 0);
   CLASSTYPE_GOT_SEMICOLON (type) = 1;
 
@@ -6787,6 +6776,7 @@ type_unification_real (tparms, targs, parms, args, subr,
            {
              tree targs;
              tree arg_type;
+             int r;
 
              /* Have to back unify here */
              arg = OVL_FUNCTION (arg);
@@ -6795,10 +6785,14 @@ type_unification_real (tparms, targs, parms, args, subr,
              maybe_adjust_types_for_deduction (strict, &parm, &arg_type);
              parm = expr_tree_cons (NULL_TREE, parm, NULL_TREE);
              arg_type = scratch_tree_cons (NULL_TREE, arg_type, NULL_TREE);
-             return 
-               type_unification (DECL_INNERMOST_TEMPLATE_PARMS (arg), 
-                                 targs, arg_type, parm, NULL_TREE,
-                                 DEDUCE_EXACT, allow_incomplete); 
+             r = type_unification (DECL_INNERMOST_TEMPLATE_PARMS (arg), 
+                                   targs, arg_type, parm, NULL_TREE,
+                                   DEDUCE_EXACT, allow_incomplete);
+             if (r)
+               /* If the back-unification failed, just bail out.  */
+               return r;
+             else 
+               continue;
            }
          arg = TREE_TYPE (arg);
        }
@@ -7952,16 +7946,22 @@ regenerate_decl_from_template (decl, tmpl)
      register_specialization for it.  */
   my_friendly_assert (unregistered, 0);
 
+  if (TREE_CODE (decl) == VAR_DECL)
+    /* Make sure that we can see identifiers, and compute access
+       correctly, for the class members used in the declaration of
+       this static variable.  */
+    pushclass (DECL_CONTEXT (decl), 2);
+
   /* Do the substitution to get the new declaration.  */
   new_decl = tsubst (code_pattern, args, NULL_TREE);
 
   if (TREE_CODE (decl) == VAR_DECL)
     {
       /* Set up DECL_INITIAL, since tsubst doesn't.  */
-      pushclass (DECL_CONTEXT (decl), 2);
       DECL_INITIAL (new_decl) = 
        tsubst_expr (DECL_INITIAL (code_pattern), args, 
                     DECL_TI_TEMPLATE (decl));
+      /* Pop the class context we pushed above.  */
       popclass (1);
     }
 
@@ -8228,27 +8228,6 @@ out:
   return d;
 }
 
-tree
-tsubst_chain (t, argvec)
-     tree t, argvec;
-{
-  if (t)
-    {
-      tree first = tsubst (t, argvec, NULL_TREE);
-      tree last = first;
-
-      for (t = TREE_CHAIN (t); t; t = TREE_CHAIN (t))
-       {
-         tree x = tsubst (t, argvec, NULL_TREE);
-         TREE_CHAIN (last) = x;
-         last = x;
-       }
-
-      return first;
-    }
-  return NULL_TREE;
-}
-
 static tree
 tsubst_expr_values (t, argvec)
      tree t, argvec;
@@ -8321,6 +8300,20 @@ add_maybe_template (d, fns)
   DECL_MAYBE_TEMPLATE (d) = 1;
 }
 
+/* Set CURRENT_ACCESS_SPECIFIER based on the protection of DECL.  */
+
+static void
+set_current_access_from_decl (decl)
+     tree decl;
+{
+  if (TREE_PRIVATE (decl))
+    current_access_specifier = access_private_node;
+  else if (TREE_PROTECTED (decl))
+    current_access_specifier = access_protected_node;
+  else
+    current_access_specifier = access_public_node;
+}
+
 /* Instantiate an enumerated type.  TAG is the template type, NEWTAG
    is the instantiation (which should have been created with
    start_enum) and ARGS are the template arguments to use.  */
@@ -8335,15 +8328,20 @@ tsubst_enum (tag, newtag, args)
 
   for (e = TYPE_VALUES (tag); e; e = TREE_CHAIN (e))
     {
-      tree elt
-       = build_enumerator (TREE_PURPOSE (e), 
-                           /* Note that in a template enum, the
-                              TREE_VALUE is the CONST_DECL, not the
-                              corresponding INTEGER_CST.  */
-                           tsubst_expr (DECL_INITIAL (TREE_VALUE (e)), 
+      tree value;
+      tree elt;
+
+      /* Note that in a template enum, the TREE_VALUE is the
+        CONST_DECL, not the corresponding INTEGER_CST.  */
+      value = tsubst_expr (DECL_INITIAL (TREE_VALUE (e)), 
                                         args,
-                                        NULL_TREE),
-                           newtag); 
+                                        NULL_TREE);
+
+      /* Give this enumeration constant the correct access.  */
+      set_current_access_from_decl (TREE_VALUE (e));
+
+      /* Actually build the enumerator itself.  */
+      elt = build_enumerator (TREE_PURPOSE (e), value, newtag); 
 
       /* We save the enumerators we have built so far in the
         TYPE_VALUES so that if the enumeration constants for
@@ -8420,7 +8418,7 @@ set_mangled_name_for_template_decl (decl)
      with the innermost level omitted.  */
   fn_type = TREE_TYPE (tmpl);
   if (DECL_STATIC_FUNCTION_P (decl))
-      context = DECL_CLASS_CONTEXT (decl);
+    context = DECL_CLASS_CONTEXT (decl);
 
   if (parm_depth == 1)
     /* No substitution is necessary.  */
index 75c3d198a1deb388a8d4011f12322aa48058761d..5f157029ecaf96aefde0d0faf2072473c6225c1d 100644 (file)
@@ -1289,7 +1289,7 @@ lookup_fnfields_1 (type, name)
       if (*++methods && name == dtor_identifier)
        return 1;
 
-      while (++methods != end)
+      while (++methods != end && *methods)
        {
 #ifdef GATHER_STATISTICS
          n_outer_fields_searched++;
@@ -1301,20 +1301,28 @@ lookup_fnfields_1 (type, name)
       /* If we didn't find it, it might have been a template
         conversion operator.  (Note that we don't look for this case
         above so that we will always find specializations first.)  */
-      if (methods == end 
+      if ((methods == end || !*methods)
          && IDENTIFIER_TYPENAME_P (name)) 
        {
          methods = &TREE_VEC_ELT (method_vec, 0) + 1;
          
-         while (++methods != end)
+         while (++methods != end && *methods)
            {
-             if (TREE_CODE (OVL_CURRENT (*methods)) == TEMPLATE_DECL 
-                 && IDENTIFIER_TYPENAME_P (DECL_NAME (OVL_CURRENT (*methods))))
+             tree method_name = DECL_NAME (OVL_CURRENT (*methods));
+
+             if (!IDENTIFIER_TYPENAME_P (method_name))
+               {
+                 /* Since all conversion operators come first, we know
+                    there is no such operator.  */
+                 methods = end;
+                 break;
+               }
+             else if (TREE_CODE (OVL_CURRENT (*methods)) == TEMPLATE_DECL)
                break;
            }
        }
 
-      if (methods != end)
+      if (methods != end && *methods)
        return methods - &TREE_VEC_ELT (method_vec, 0);
     }
 
@@ -2962,7 +2970,7 @@ dfs_pushdecls (binfo)
      tree binfo;
 {
   tree type = BINFO_TYPE (binfo);
-  tree fields, *methods, *end;
+  tree fields;
   tree method_vec;
   int dummy = 0;
 
@@ -3015,16 +3023,24 @@ dfs_pushdecls (binfo)
   method_vec = CLASSTYPE_METHOD_VEC (type);
   if (method_vec && ! dummy)
     {
+      tree *methods;
+      tree *end;
+
       /* Farm out constructors and destructors.  */
-      methods = &TREE_VEC_ELT (method_vec, 2);
       end = TREE_VEC_END (method_vec);
 
-      while (methods != end)
+      for (methods = &TREE_VEC_ELT (method_vec, 2);
+          *methods && methods != end;
+          methods++)
        {
          /* This will cause lookup_name to return a pointer
             to the tree_list of possible methods of this name.  */
-         tree name = DECL_NAME (OVL_CURRENT (*methods));
-         tree class_value = IDENTIFIER_CLASS_VALUE (name);
+         tree name;
+         tree class_value;
+
+         
+         name = DECL_NAME (OVL_CURRENT (*methods));
+         class_value = IDENTIFIER_CLASS_VALUE (name);
 
          /* If the class value is not an envelope of the kind described in
             the comment above, we create a new envelope.  */
@@ -3049,8 +3065,6 @@ dfs_pushdecls (binfo)
          envelope_add_decl (type, OVL_CURRENT (*methods),
                             &TREE_PURPOSE (class_value));
          pop_obstacks ();
-
-         methods++;
        }
     }
 
@@ -3074,10 +3088,11 @@ dfs_compress_decls (binfo)
   else if (method_vec != 0)
     {
       /* Farm out constructors and destructors.  */
-      tree *methods = &TREE_VEC_ELT (method_vec, 2);
+      tree *methods;
       tree *end = TREE_VEC_END (method_vec);
 
-      for (; methods != end; methods++)
+      for (methods = &TREE_VEC_ELT (method_vec, 2); 
+          methods != end && *methods; methods++)
        {
          /* This is known to be an envelope of the kind described before
             dfs_pushdecls.  */
@@ -3269,7 +3284,9 @@ add_conversions (binfo)
   for (i = 2; i < TREE_VEC_LENGTH (method_vec); ++i)
     {
       tree tmp = TREE_VEC_ELT (method_vec, i);
-      if (! IDENTIFIER_TYPENAME_P (DECL_NAME (OVL_CURRENT (tmp))))
+
+      if (!tmp
+         || !IDENTIFIER_TYPENAME_P (DECL_NAME (OVL_CURRENT (tmp))))
        break;
       conversions = scratch_tree_cons (binfo, tmp, conversions);
     }
index 6f69d64594bc0f778f77e0b370e02d1d81440ae1..9579d44d96b089768e628882787a71c84d9e174a 100644 (file)
@@ -1268,14 +1268,99 @@ begin_class_definition (t)
   return t;
 }
 
-/* Finish a class definition T, with the indicated COMPONENTS, and
-   with the indicate ATTRIBUTES.  If SEMI, the definition is
-   immediately followed by a semicolon.  Returns the type.  */
+/* Finish the member declaration given by DECL.  */
+
+void
+finish_member_declaration (decl)
+     tree decl;
+{
+  if (decl == error_mark_node || decl == NULL_TREE)
+    return;
+
+  if (decl == void_type_node)
+    /* The COMPONENT was a friend, not a member, and so there's
+       nothing for us to do.  */
+    return;
+
+  /* We should see only one DECL at a time.  */
+  my_friendly_assert (TREE_CHAIN (decl) == NULL_TREE, 0);
+
+  /* Set up access control for DECL.  */
+  TREE_PRIVATE (decl) 
+    = (current_access_specifier == access_private_node);
+  TREE_PROTECTED (decl) 
+    = (current_access_specifier == access_protected_node);
+  if (TREE_CODE (decl) == TEMPLATE_DECL)
+    {
+      TREE_PRIVATE (DECL_RESULT (decl)) = TREE_PRIVATE (decl);
+      TREE_PROTECTED (DECL_RESULT (decl)) = TREE_PROTECTED (decl);
+    }
+
+  /* Mark the DECL as a member of the current class.  */
+  if (TREE_CODE (decl) == FUNCTION_DECL 
+      || DECL_FUNCTION_TEMPLATE_P (decl))
+    /* Historically, DECL_CONTEXT was not set for a FUNCTION_DECL in
+       finish_struct.  Presumably it is already set as the function is
+       parsed.  Perhaps DECL_CLASS_CONTEXT is already set, too?  */
+    DECL_CLASS_CONTEXT (decl) = current_class_type;
+  else if (TREE_CODE (decl) == TYPE_DECL)
+    /* Historically, DECL_CONTEXT was not set for a TYPE_DECL in
+       finish_struct, so we do not do it here either.  Perhaps we
+       should, though.  */
+      ;
+  else
+    DECL_CONTEXT (decl) = current_class_type;
+
+  /* Put functions on the TYPE_METHODS list and everything else on the
+     TYPE_FIELDS list.  Note that these are built up in reverse order.
+     We reverse them (to obtain declaration order) in finish_struct.  */
+  if (TREE_CODE (decl) == FUNCTION_DECL 
+      || DECL_FUNCTION_TEMPLATE_P (decl))
+    {
+      /* We also need to add this function to the
+        CLASSTYPE_METHOD_VEC.  */
+      add_method (current_class_type, 0, decl);
+
+      TREE_CHAIN (decl) = TYPE_METHODS (current_class_type);
+      TYPE_METHODS (current_class_type) = decl;
+    }
+  else
+    {
+      /* All TYPE_DECLs go at the end of TYPE_FIELDS.  Ordinary fields
+        go at the beginning.  The reason is that lookup_field_1
+        searches the list in order, and we want a field name to
+        override a type name so that the "struct stat hack" will
+        work.  In particular:
+
+          struct S { enum E { }; int E } s;
+          s.E = 3;
+
+        is legal.  In addition, the FIELD_DECLs must be maintained in
+        declaration order so that class layout works as expected.
+        However, we don't need that order until class layout, so we
+        save a little time by putting FIELD_DECLs on in reverse order
+        here, and then reversing them in finish_struct_1.  (We could
+        also keep a pointer to the correct insertion points in the
+        list.)  */
+
+      if (TREE_CODE (decl) == TYPE_DECL)
+       TYPE_FIELDS (current_class_type) 
+         = chainon (TYPE_FIELDS (current_class_type), decl);
+      else
+       {
+         TREE_CHAIN (decl) = TYPE_FIELDS (current_class_type);
+         TYPE_FIELDS (current_class_type) = decl;
+       }
+    }
+}
+
+/* Finish a class definition T with the indicate ATTRIBUTES.  If SEMI,
+   the definition is immediately followed by a semicolon.  Returns the
+   type.  */
 
 tree
-finish_class_definition (t, components, attributes, semi)
+finish_class_definition (t, attributes, semi)
      tree t;
-     tree components;
      tree attributes;
      int semi;
 {
@@ -1299,7 +1384,7 @@ finish_class_definition (t, components, attributes, semi)
     ;
   else
     {
-      t = finish_struct (t, components, attributes, semi);
+      t = finish_struct (t, attributes, semi);
       if (semi) 
        note_got_semicolon (t);
     }
@@ -1342,8 +1427,7 @@ begin_inline_definitions ()
    TYPES whose template parameters are given by PARMS.  */
 
 tree
-finish_member_class_template (parms, types)
-     tree parms;
+finish_member_class_template (types)
      tree types;
 {
   tree t;
@@ -1356,13 +1440,15 @@ finish_member_class_template (parms, types)
       maybe_process_partial_specialization (TREE_VALUE (t));
 
   note_list_got_semicolon (types);
-  grok_x_components (types, NULL_TREE); 
+  grok_x_components (types);
   if (TYPE_CONTEXT (TREE_VALUE (types)) != current_class_type)
     /* The component was in fact a friend declaration.  We avoid
        finish_member_template_decl performing certain checks by
        unsetting TYPES.  */
     types = NULL_TREE;
-  finish_member_template_decl (parms, types);
+  
+  finish_member_template_decl (types);
+
   /* As with other component type declarations, we do
      not store the new DECL on the list of
      component_decls.  */
@@ -1480,3 +1566,31 @@ finish_base_specifier (access_specifier, base_class,
 
   return result;
 }
+
+/* Called when multiple declarators are processed.  If that is not
+   premitted in this context, an error is issued.  */
+
+void
+check_multiple_declarators ()
+{
+  /* [temp]
+     
+     In a template-declaration, explicit specialization, or explicit
+     instantiation the init-declarator-list in the declaration shall
+     contain at most one declarator.  
+
+     We don't just use PROCESSING_TEMPLATE_DECL for the first
+     condition since that would disallow the perfectly legal code, 
+     like `template <class T> struct S { int i, j; };'.  */
+  tree scope = current_scope ();
+
+  if (scope && TREE_CODE (scope) == FUNCTION_DECL)
+    /* It's OK to write `template <class T> void f() { int i, j;}'.  */
+    return;
+     
+  if (PROCESSING_REAL_TEMPLATE_DECL_P () 
+      || processing_explicit_instantiation
+      || processing_specialization)
+    cp_error ("multiple declarators in template declaration");
+}
+
index 3580d4fc49a42e4e375e75cf617beb0024a4f4bf..6f8d14dd19d27334dd5afffad9a44db54232a764 100644 (file)
@@ -343,49 +343,45 @@ build_member_function_pointer (member)
    The new FIELD_DECLs are appended at the end of the last (and only)
    sublist of `list_of_fieldlists.'
 
+   T is the signature type.
+  
    As a side effect, each member function in the signature gets the
    `decl.ignored' bit turned on, so we don't output debug info for it.  */
 
 void
-append_signature_fields (list_of_fieldlists)
-     tree list_of_fieldlists;
+append_signature_fields (t)
+     tree t;
 {
-  tree l, x;
-  tree last_x = NULL_TREE;
+  tree x;
   tree mfptr;
   tree last_mfptr = NULL_TREE;
   tree mfptr_list = NULL_TREE;
              
-  /* For signatures it should actually be only a list with one element.  */
-  for (l = list_of_fieldlists; l; l = TREE_CHAIN (l))
+  for (x = TYPE_METHODS (t); x; x = TREE_CHAIN (x))
     {
-      for (x = TREE_VALUE (l); x; x = TREE_CHAIN (x))
+      if (TREE_CODE (x) == FUNCTION_DECL)
        {
-         if (TREE_CODE (x) == FUNCTION_DECL)
+         mfptr = build_member_function_pointer (x);
+         DECL_MEMFUNC_POINTER_TO (x) = mfptr;
+         DECL_MEMFUNC_POINTING_TO (mfptr) = x;
+         DECL_IGNORED_P (x) = 1;
+         DECL_IN_AGGR_P (mfptr) = 1;
+         if (! mfptr_list)
+           mfptr_list = last_mfptr = mfptr;
+         else
            {
-             mfptr = build_member_function_pointer (x);
-             DECL_MEMFUNC_POINTER_TO (x) = mfptr;
-             DECL_MEMFUNC_POINTING_TO (mfptr) = x;
-             DECL_IGNORED_P (x) = 1;
-             DECL_IN_AGGR_P (mfptr) = 1;
-             if (! mfptr_list)
-               mfptr_list = last_mfptr = mfptr;
-             else
-               {
-                 TREE_CHAIN (last_mfptr) = mfptr;
-                 last_mfptr = mfptr;
-               }
+             TREE_CHAIN (last_mfptr) = mfptr;
+             last_mfptr = mfptr;
            }
-         last_x = x;
        }
     }
 
-  /* Append the lists.  */
-  if (last_x && mfptr_list)
-    {
-      TREE_CHAIN (last_x) = mfptr_list;
-      TREE_CHAIN (last_mfptr) = NULL_TREE;
-    }
+  /* The member function pointers must come after the TYPE_DECLs, in
+     this case, because build_signature_table_constructor depends on
+     finding opaque TYPE_DECLS before the functions that make use of
+     them.  */
+  if (last_mfptr)
+    TYPE_FIELDS (t) = chainon (TYPE_FIELDS (t), mfptr_list);
 }
 
 /* Compare the types of a signature member function and a class member
index 224c950c2804fb8c4314171386e338f2dfa17165..1f55e56b1d8ba80b221373dee352962728eb374d 100644 (file)
@@ -1581,6 +1581,10 @@ search_tree (t, func)
     case DEFAULT_ARG:
       break;
 
+    case PTRMEM_CST:
+      TRY (TREE_TYPE (t));
+      break;
+
     case COND_EXPR:
     case TARGET_EXPR:
     case AGGR_INIT_EXPR:
@@ -1845,6 +1849,12 @@ mapcar (t, func)
     case STRING_CST:
       return copy_node (t);
 
+    case PTRMEM_CST:
+      t = copy_node (t);
+      TREE_TYPE (t) = mapcar (TREE_TYPE (t), func);
+      PTRMEM_CST_MEMBER (t) = mapcar (PTRMEM_CST_MEMBER (t), func);
+      return t;
+
     case COND_EXPR:
     case TARGET_EXPR:
     case AGGR_INIT_EXPR:
@@ -1908,7 +1918,7 @@ mapcar (t, func)
       TREE_OPERAND (t, 1) = mapcar (TREE_OPERAND (t, 1), func);
 
       /* tree.def says that operand two is RTL, but
-        build_call_declarator puts trees in there.  */
+        make_call_declarator puts trees in there.  */
       if (TREE_OPERAND (t, 2)
          && TREE_CODE (TREE_OPERAND (t, 2)) == TREE_LIST)
        TREE_OPERAND (t, 2) = mapcar (TREE_OPERAND (t, 2), func);
@@ -2449,6 +2459,13 @@ cp_tree_equal (t1, t2)
        return comptypes (TREE_OPERAND (t1, 0), TREE_OPERAND (t2, 0), 1);
       break;
 
+    case PTRMEM_CST:
+      /* Two pointer-to-members are the same if they point to the same
+        field or function in the same class.  */
+      return (PTRMEM_CST_MEMBER (t1) == PTRMEM_CST_MEMBER (t2)
+             && comptypes (PTRMEM_CST_CLASS (t1), PTRMEM_CST_CLASS (t2),
+                           1));
+
     default:
       break;
     }
index 9e2c12327439544a11cb55df8337d14877d1a49d..02a8c84c06d85960f305edf222cbfd59e69c1a1b 100644 (file)
@@ -4884,7 +4884,6 @@ unary_complex_lvalue (code, arg)
       else
        {
          tree type;
-         tree offset;
 
          if (TREE_OPERAND (arg, 0)
              && (TREE_CODE (TREE_OPERAND (arg, 0)) != NOP_EXPR
@@ -4896,21 +4895,13 @@ unary_complex_lvalue (code, arg)
              return error_mark_node;
            }
 
-         /* Add in the offset to the field.  */
-         offset = convert (sizetype,
-                           size_binop (EASY_DIV_EXPR,
-                                       DECL_FIELD_BITPOS (t),
-                                       size_int (BITS_PER_UNIT)));
-
-         /* We offset all pointer to data members by 1 so that we can
-            distinguish between a null pointer to data member and the first
-            data member of a structure.  */
-         offset = size_binop (PLUS_EXPR, offset, size_int (1));
-
          type = build_offset_type (DECL_FIELD_CONTEXT (t), TREE_TYPE (t));
          type = build_pointer_type (type);
 
-         return cp_convert (type, offset);
+         t = make_node (PTRMEM_CST);
+         TREE_TYPE (t) = type;
+         PTRMEM_CST_MEMBER (t) = TREE_OPERAND (arg, 1);
+         return t;
        }
     }
 
diff --git a/gcc/testsuite/g++.old-deja/g++.other/elab1.C b/gcc/testsuite/g++.old-deja/g++.other/elab1.C
new file mode 100644 (file)
index 0000000..614e73b
--- /dev/null
@@ -0,0 +1,9 @@
+typedef struct {} S;
+
+S s1;
+struct S* s2; // ERROR - S is a typedef name
+
+template <class T>
+struct X {
+  friend class T; // ERROR - T is a template type parameter
+};
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/decl1.C b/gcc/testsuite/g++.old-deja/g++.pt/decl1.C
new file mode 100644 (file)
index 0000000..5814251
--- /dev/null
@@ -0,0 +1,19 @@
+struct S {
+  template <class T>
+  int f(T), g(T); // ERROR - more than one declarator
+};
+
+template <class T>
+void x(T), y(T); // ERROR - more than one declarator
+
+template <class T>
+struct S2 
+{
+  static int i, j; // OK.
+};
+
+template <class T>
+int S2<T>::i, S2<T>::j; // ERROR - more than one declarator
+
+template <>
+int S2<int>::i, S2<double>::i;  // ERROR - more than one declarator
index 0a28f3ae2d4144d69891f6a396c4df3317821240..c2c22c7634e9fe199ff8b3485bc80a251f157943 100644 (file)
@@ -1,7 +1,7 @@
 // Build don't link:
 
 class foo {
-  friend void bar<int>(int); // ERROR - must be declared first - XFAIL *-*-*
+  friend void bar<int>(int); // ERROR - must be declared first
 };
 
 template <typename T> void bar(T);
index f3b72be28cc07140e9d102efe038661185bf480a..38cf5c7854979ff298b1d13341d47cf677b87c40 100644 (file)
@@ -3,4 +3,4 @@
 class A
 {
   template<class T>T epsilon; // ERROR - invalid member template
-}; // ERROR - the compiler crashes here
+};
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C b/gcc/testsuite/g++.old-deja/g++.pt/ptrmem2.C
new file mode 100644 (file)
index 0000000..c6927d1
--- /dev/null
@@ -0,0 +1,43 @@
+struct S;
+
+template <S* (S::*p)()>
+struct F {
+  S* f (S& s)
+    {
+      return (s.*p)();
+    }
+};
+
+template <int S::*p>
+struct D {
+  void d (S& s)
+    {
+      (s.*p) = 3;
+    }
+};
+
+struct S {
+  S* g ();
+  int i;
+  F<&S::g> fg;
+  D<&S::i> di;
+  S* h(), k(F<&S::h>);
+  F<&S::g> fg2;
+  D<&S::i> di2;
+};
+
+S* S::g()
+{
+  return this;
+}
+
+int main()
+{
+  S s;
+  s.i = 2;
+  s.di.d (s);
+  if (s.i != 3)
+    return 1;
+  if (s.fg2.f(s) != &s)
+    return 1;
+}
index 6dab744b357ee66c6ade1e99ad81a66b8728cebc..5c99f772ad97dc1e03df473082a9f1ded8d68b25 100644 (file)
@@ -1,9 +1,9 @@
 // Build don't link: 
 
-template <class A> class B {    // ERROR - candidates
+template <class A> class B {   
   A a;                          
  public:
   B(A&aa);                     // ERROR - near match
   ~B();
-};
+};  // ERROR - candidates
 static B<int> b_int (3);       // ERROR - no matching function
index 94141548687e7db2526546566b86a7c171bbe799..ccd206b0e2c4e6e1c20eb8b45bd63373170eab17 100644 (file)
@@ -17,7 +17,7 @@ inline istream& operator>>(istream& is, Empty& ) { return is;}
 
 template<class VertexType, class EdgeType>
 class Graph
-{ // ERROR - candidates
+{ 
   public:
     // public type interface
     typedef map<int, EdgeType > Successor;
@@ -32,7 +32,7 @@ class Graph
     bool directed;
     GraphType C;          // container
     ostream* pOut;
-};      // class Graph
+}; // ERROR - candidates
 
 // all graph-methods delet
 template<class VertexType, class EdgeType>
index f41ead5313f41c448d122a91ba5e4e5015858a11..95c454eaef139175c4ddd039abd8590e66342fb1 100644 (file)
@@ -22,7 +22,7 @@ class X
 {
 public:
   static T *do_something ();
-  friend class T;
+  friend class T; // ERROR - `T' is a template parameter
   friend class XX<T, U>;
 };