tinfo.h (__class_type_info): Fix illegal declaration.
authorMark Mitchell <mark@codesourcery.com>
Fri, 2 Apr 1999 15:36:57 +0000 (15:36 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Fri, 2 Apr 1999 15:36:57 +0000 (15:36 +0000)
1999-04-02  Mark Mitchell  <mark@codesourcery.com>
* tinfo.h (__class_type_info): Fix illegal declaration.
* cp-tree.def (TEMPLATE_ID_EXPR): Update comment.
* cp-tree.h (INHERITED_VALUE_BINDING_P): New macro.
(IDENTIFIER_CLASS_VALUE): Improve documentation.
(is_properly_derived_from): Declare.
(invalidate_class_lookup_cache): Likewise.
(maybe_maybe_note_name_used_in_class): Likewise.
(note_name_declared_in_class): Likewise.
(push_using_decl): Remove duplicate declaration.
(id_in_current_class): Remove declaration.
(push_class_binding): Change prototype.
(clear_identitifer_class_values): Declare.
* call.c (is_properly_derived_from): Make it global.
(build_new_function_call): Be careful about updating candidates.
(build_new_method_call): Handle COMPONENT_REFs.  Don't crash when
asked to make illegal calls.
* class.c: Include splay-tree.h.
(class_stack_node): Add names_used slot.
(check_member_decl_is_same_in_complete_scope): Remove.
(add_method): Fix comment.  Push the declaration into class
scope.
(finish_struct_1): When popping the class, pop the bindings too.
Remove check for data member/function member conflict.
(finish_struct): Remove calls to
check_member_decl_is_same_in_complete_scope.  Change calls to
popclass.
(pushclass): Clear names_used in the class stack entry.
Use invalidate_class_lookup_cache to remove cached entries, rather
than magic values with popclass.  Clear IDENTIFIER_CLASS_VALUE
before entering a new class.  Remove dead code.  Don't mess with
current_function_decl when pushing declarations.
(invalidate_class_lookup_cache): New function, split out from ...
(popclass): Here.  Clean up names_used on our way out.
(instantiate_type): Adjust.
(build_self_reference): Don't push the declaration here.
(maybe_note_name_used_in_class): New function.
(note_name_declared_in_class): Likewise.
* decl.c (add_binding): Change prototype.
(find_class_binding_level): New function.
(innermost_nonclass_level): Likewise.
(current_binding_level): Update documentation.
(inner_binding_level): Remove.  Replace with current_binding_level
throughout.
(push_binding_level): Remove special handling of
class_binding_level.
(pop_binding_level): Likewise.  Use find_class_binding_level.
(suspend_binding_level): Likewise.
(global_bindings_p): Use innermost_nonclass_level.
(toplevel_bindings_p): Likewise.
(namespace_bindings_p): Likewise.
(pseudo_global_level_p): Likewise.
(push_binding): Clear INHERITED_VALUE_BINDING_P.
(add_binding): Check for illegal multiple declarations.  Return a
value indicating whether or not the new binding was legal.
(push_local_binding): Skip over class binding levels.  Check
return value from add_binding.
(push_class_binding): Set INHERITED_VALUE_BINDING_P.  Call
note_name_declared_in_class.
(pushlevel_class): Remove "fake out the rest of the compiler"
code.
(poplevel_class): Reset IDENTIFIER_CLASS_VALUEs.
(clear_identifier_class_values): New function.
(pop_from_top_level): Use it.
(pop_everything): Tweak.
(maybe_process_template_type_declaration): Don't push the
declaration for the template here.
(pushtag): Don't push tag declarations into class scope here.
(pushdecl): Apply DeMorgan's law for readability.
(pushdecl_class_level): Remove special-case code for
TYPE_BEING_DEFINED.  Handle OVERLOADs and anonymous unions.
(push_class_level_bindng): Deal with inherited bindings.
(lookup_name_real): Remove special-case code for
TYPE_BEING_DEFINED, and some implicit typename magic.
(grokdeclarator): Handle COMPONENT_REF for a template function.
(build_enumerator): Don't call pushdecl_class_level here.
(id_in_current_class): Remove.
* decl2.c (grokfield): Don't call pushdecl_class_level or
check_template_shadow.
* errfn.c (cp_file_of): Don't declare.
(cp_line_of): Likewise.
* error.c (dump_decl): Handle an OVERLOAD.
(cp_file_of): Likewise.
(cp_line_of): Likewise.
* init.c (build_member_call): Handle a COMPONENT_REF.
* lex.c (do_identifier): Call maybe_note_name_used_in_class, not
pushdecl_class_level.
* method.c (hack_identifier): Build COMPONENT_REFs for references
to member templates as well as member functions.  Remove dead
code.
* parse.y (left_curly): Remove.
(nonnested_type): Call maybe_note_name_used_in_class, not
pushdecl_class_level.
* parse.c: Regenerated.
(nested_name_specifier_1): Likewise.
* pt.c (check_explicit_specialization): Adjust, for robustness.
(check_template_shadow): Handle OVERLOADs.
(build_template_decl): Set DECL_CONSTRUCTOR_P on the
TEMPLATE_DECL, if appropriate.
* search.c (envelope_add_decl): Remove.
(dfs_pushdecls): Likewise.
(dfs_compress_decls): Likewise.
(dfs_push_decls): New function.
(dfs_push_type_decls): Likewise.
(setup_class_bindings): Likewise.
(template_self_reference_p): Likewise.
(lookup_field_r): Use it.
(looup_member): Remove old comment.  Deal with ambiguity.
(push_class_decls): Use dfs_push_decls and dfs_push_type_decls,
and remove envelope processing.
* semantics.c (begin_class_definition): Let pushclass push
declarations for base classes.
(finish_member_declaration): Push declarations into class scope.
* typeck.c (build_component_ref): Just put an OVERLOAD into the
COMPONENT_REF, not a TREE_LIST of an OVERLOAD.
(build_x_function_call): Deal with OVERLOAD.  Handle template-ids.
* Makefile.in (class.o): Depend on splay-tree.h.

From-SVN: r26133

25 files changed:
gcc/cp/ChangeLog
gcc/cp/Makefile.in
gcc/cp/call.c
gcc/cp/class.c
gcc/cp/cp-tree.def
gcc/cp/cp-tree.h
gcc/cp/decl.c
gcc/cp/decl2.c
gcc/cp/errfn.c
gcc/cp/error.c
gcc/cp/init.c
gcc/cp/lex.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/tinfo.h
gcc/cp/typeck.c
gcc/testsuite/g++.old-deja/g++.benjamin/tem03.C
gcc/testsuite/g++.old-deja/g++.other/lookup12.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.other/using5.C
gcc/testsuite/g++.old-deja/g++.pt/lookup7.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.pt/lookup8.C [new file with mode: 0644]

index 948736da48d33937231be09df15c1ee14171a375..186a1e5e879d0b8f2021a3e3513920c124e22140 100644 (file)
@@ -1,3 +1,123 @@
+1999-04-02  Mark Mitchell  <mark@codesourcery.com>
+
+       * tinfo.h (__class_type_info): Fix illegal declaration.
+       
+       * cp-tree.def (TEMPLATE_ID_EXPR): Update comment.
+       * cp-tree.h (INHERITED_VALUE_BINDING_P): New macro.
+       (IDENTIFIER_CLASS_VALUE): Improve documentation.
+       (is_properly_derived_from): Declare.
+       (invalidate_class_lookup_cache): Likewise.
+       (maybe_maybe_note_name_used_in_class): Likewise.
+       (note_name_declared_in_class): Likewise.
+       (push_using_decl): Remove duplicate declaration.
+       (id_in_current_class): Remove declaration.
+       (push_class_binding): Change prototype.
+       (clear_identitifer_class_values): Declare.
+       * call.c (is_properly_derived_from): Make it global.
+       (build_new_function_call): Be careful about updating candidates.
+       (build_new_method_call): Handle COMPONENT_REFs.  Don't crash when
+       asked to make illegal calls.
+       * class.c: Include splay-tree.h.
+       (class_stack_node): Add names_used slot.
+       (check_member_decl_is_same_in_complete_scope): Remove.
+       (add_method): Fix comment.  Push the declaration into class
+       scope.
+       (finish_struct_1): When popping the class, pop the bindings too.
+       Remove check for data member/function member conflict.
+       (finish_struct): Remove calls to
+       check_member_decl_is_same_in_complete_scope.  Change calls to
+       popclass.
+       (pushclass): Clear names_used in the class stack entry.
+       Use invalidate_class_lookup_cache to remove cached entries, rather
+       than magic values with popclass.  Clear IDENTIFIER_CLASS_VALUE
+       before entering a new class.  Remove dead code.  Don't mess with
+       current_function_decl when pushing declarations.
+       (invalidate_class_lookup_cache): New function, split out from ...
+       (popclass): Here.  Clean up names_used on our way out.
+       (instantiate_type): Adjust.
+       (build_self_reference): Don't push the declaration here.
+       (maybe_note_name_used_in_class): New function.
+       (note_name_declared_in_class): Likewise.
+       * decl.c (add_binding): Change prototype.
+       (find_class_binding_level): New function.
+       (innermost_nonclass_level): Likewise.
+       (current_binding_level): Update documentation.
+       (inner_binding_level): Remove.  Replace with current_binding_level
+       throughout.
+       (push_binding_level): Remove special handling of
+       class_binding_level.
+       (pop_binding_level): Likewise.  Use find_class_binding_level.
+       (suspend_binding_level): Likewise.
+       (global_bindings_p): Use innermost_nonclass_level.
+       (toplevel_bindings_p): Likewise.
+       (namespace_bindings_p): Likewise.
+       (pseudo_global_level_p): Likewise.
+       (push_binding): Clear INHERITED_VALUE_BINDING_P.
+       (add_binding): Check for illegal multiple declarations.  Return a
+       value indicating whether or not the new binding was legal.
+       (push_local_binding): Skip over class binding levels.  Check
+       return value from add_binding.
+       (push_class_binding): Set INHERITED_VALUE_BINDING_P.  Call
+       note_name_declared_in_class.
+       (pushlevel_class): Remove "fake out the rest of the compiler"
+       code.
+       (poplevel_class): Reset IDENTIFIER_CLASS_VALUEs.
+       (clear_identifier_class_values): New function.
+       (pop_from_top_level): Use it.
+       (pop_everything): Tweak.
+       (maybe_process_template_type_declaration): Don't push the
+       declaration for the template here.
+       (pushtag): Don't push tag declarations into class scope here.
+       (pushdecl): Apply DeMorgan's law for readability.
+       (pushdecl_class_level): Remove special-case code for
+       TYPE_BEING_DEFINED.  Handle OVERLOADs and anonymous unions.
+       (push_class_level_bindng): Deal with inherited bindings.
+       (lookup_name_real): Remove special-case code for
+       TYPE_BEING_DEFINED, and some implicit typename magic.
+       (grokdeclarator): Handle COMPONENT_REF for a template function.
+       (build_enumerator): Don't call pushdecl_class_level here.
+       (id_in_current_class): Remove.
+       * decl2.c (grokfield): Don't call pushdecl_class_level or
+       check_template_shadow.
+       * errfn.c (cp_file_of): Don't declare.
+       (cp_line_of): Likewise.
+       * error.c (dump_decl): Handle an OVERLOAD.
+       (cp_file_of): Likewise.
+       (cp_line_of): Likewise.
+       * init.c (build_member_call): Handle a COMPONENT_REF.
+       * lex.c (do_identifier): Call maybe_note_name_used_in_class, not
+       pushdecl_class_level.
+       * method.c (hack_identifier): Build COMPONENT_REFs for references
+       to member templates as well as member functions.  Remove dead
+       code.
+       * parse.y (left_curly): Remove.
+       (nonnested_type): Call maybe_note_name_used_in_class, not
+       pushdecl_class_level.
+       * parse.c: Regenerated.
+       (nested_name_specifier_1): Likewise.
+       * pt.c (check_explicit_specialization): Adjust, for robustness.
+       (check_template_shadow): Handle OVERLOADs.
+       (build_template_decl): Set DECL_CONSTRUCTOR_P on the
+       TEMPLATE_DECL, if appropriate.
+       * search.c (envelope_add_decl): Remove.
+       (dfs_pushdecls): Likewise.
+       (dfs_compress_decls): Likewise.
+       (dfs_push_decls): New function.
+       (dfs_push_type_decls): Likewise.
+       (setup_class_bindings): Likewise.
+       (template_self_reference_p): Likewise.
+       (lookup_field_r): Use it.
+       (looup_member): Remove old comment.  Deal with ambiguity.
+       (push_class_decls): Use dfs_push_decls and dfs_push_type_decls,
+       and remove envelope processing.
+       * semantics.c (begin_class_definition): Let pushclass push
+       declarations for base classes.
+       (finish_member_declaration): Push declarations into class scope.
+       * typeck.c (build_component_ref): Just put an OVERLOAD into the
+       COMPONENT_REF, not a TREE_LIST of an OVERLOAD.
+       (build_x_function_call): Deal with OVERLOAD.  Handle template-ids.
+       * Makefile.in (class.o): Depend on splay-tree.h.
+       
 Wed Mar 31 11:30:43 BST 1999  Nathan Sidwell  <nathan@acm.org>
 
        * cvt.c (convert_pointer_to_real): Use same_type_p.
index ae156e66690496dfd47b4e0da8ac9a93622a3105..576e97b9538655f34be49acae46fd6f6f2371e2b 100644 (file)
@@ -267,7 +267,8 @@ typeck2.o : typeck2.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h \
 typeck.o : typeck.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) \
   $(EXPR_H) $(srcdir)/../system.h $(srcdir)/../toplev.h
 class.o : class.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h \
-  $(srcdir)/../system.h $(srcdir)/../toplev.h
+  $(srcdir)/../system.h $(srcdir)/../toplev.h \
+  $(srcdir)/../../include/splay-tree.h
 call.o : call.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h \
   $(srcdir)/../system.h $(srcdir)/../toplev.h
 friend.o : friend.c $(CONFIG_H) $(CXX_TREE_H) $(srcdir)/../flags.h $(RTL_H) \
index 9bc349e7999ffb62847071a32c27df95ab50d5c7..f3ef258d8694b4cb50656418368f26bc0b1289c8 100644 (file)
@@ -87,7 +87,6 @@ static tree strip_top_quals PROTO((tree));
 static tree non_reference PROTO((tree));
 static tree build_conv PROTO((enum tree_code, tree, tree));
 static int is_subseq PROTO((tree, tree));
-static int is_properly_derived_from PROTO((tree, tree));
 static int maybe_handle_ref_bind PROTO((tree*, tree*));
 static void maybe_handle_implicit_object PROTO((tree*));
 static struct z_candidate * add_candidate PROTO((struct z_candidate *,
@@ -2312,6 +2311,8 @@ build_new_function_call (fn, args)
       for (t1 = fn; t1; t1 = OVL_CHAIN (t1))
        {
          tree t = OVL_FUNCTION (t1);
+         struct z_candidate *old_candidates = candidates;
+
          if (TREE_CODE (t) == TEMPLATE_DECL)
            {
              templates = scratch_tree_cons (NULL_TREE, t, templates);
@@ -2322,6 +2323,9 @@ build_new_function_call (fn, args)
          else if (! template_only)
            candidates = add_function_candidate
              (candidates, t, args, LOOKUP_NORMAL);
+
+         if (candidates != old_candidates)
+           candidates->basetype_path = DECL_REAL_CONTEXT (t);
        }
 
       if (! any_viable (candidates))
@@ -3524,8 +3528,16 @@ build_new_method_call (instance, name, args, basetype_path, flags)
     {
       explicit_targs = TREE_OPERAND (name, 1);
       name = TREE_OPERAND (name, 0);
-      if (TREE_CODE (name) == TEMPLATE_DECL)
+      if (TREE_CODE_CLASS (TREE_CODE (name)) == 'd')
        name = DECL_NAME (name);
+      else 
+       {
+         if (TREE_CODE (name) == COMPONENT_REF)
+           name = TREE_OPERAND (name, 1);
+         if (TREE_CODE (name) == OVERLOAD)
+           name = DECL_NAME (OVL_CURRENT (name));
+       }
+
       template_only = 1;
     }
 
@@ -3675,7 +3687,10 @@ build_new_method_call (instance, name, args, basetype_path, flags)
     cp_error ("abstract virtual `%#D' called from constructor", cand->fn);
   if (TREE_CODE (TREE_TYPE (cand->fn)) == METHOD_TYPE
       && is_dummy_object (instance_ptr))
-    cp_error ("cannot call member function `%D' without object", cand->fn);
+    {
+      cp_error ("cannot call member function `%D' without object", cand->fn);
+      return error_mark_node;
+    }
 
   if (DECL_VINDEX (cand->fn) && ! (flags & LOOKUP_NONVIRTUAL)
       && ((instance == current_class_ref && (dtor_label || ctor_label))
@@ -3738,7 +3753,7 @@ is_subseq (ics1, ics2)
 /* Returns non-zero iff DERIVED is derived from BASE.  The inputs may
    be any _TYPE nodes.  */
 
-static int
+int
 is_properly_derived_from (derived, base)
      tree derived;
      tree base;
index 36765e08402bca1ad27d95741cb0b855945ac1b6..7fd1eeb4ef50c88d4a5ad752800a0bf58b04d942 100644 (file)
@@ -30,6 +30,7 @@ Boston, MA 02111-1307, USA.  */
 #include "rtl.h"
 #include "output.h"
 #include "toplev.h"
+#include "splay-tree.h"
 
 #include "obstack.h"
 #define obstack_chunk_alloc xmalloc
@@ -62,6 +63,9 @@ typedef struct class_stack_node {
   /* The access specifier pending for new declarations in the scope of
      this class.  */
   tree access;
+
+  /* If were defining TYPE, the names used in this class.  */
+  splay_tree names_used;
 }* class_stack_node_t;
 
 /* The stack itself.  This is an dynamically resized array.  The
@@ -130,7 +134,6 @@ 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));
@@ -1286,7 +1289,7 @@ add_method (type, fields, method)
 
              /* We don't call duplicate_decls here to merge the
                 declarations because that will confuse things if the
-                methods have inline definitions In particular, we
+                methods have inline definitions In particular, we
                 will crash while processing the definitions.  */
              return;
            }
@@ -1295,6 +1298,12 @@ add_method (type, fields, method)
       /* Actually insert the new method.  */
       TREE_VEC_ELT (method_vec, slot) 
        = build_overload (method, TREE_VEC_ELT (method_vec, slot));
+
+      /* Add the new binding.  */ 
+      if (!DECL_CONSTRUCTOR_P (method)
+         && !DECL_DESTRUCTOR_P (method))
+       push_class_level_binding (DECL_NAME (method),
+                                 TREE_VEC_ELT (method_vec, slot));
     }
   pop_obstacks ();
 }
@@ -3255,7 +3264,7 @@ finish_struct_1 (t, warn_anon)
        cp_error ("redefinition of `%#T'", t);
       else
        my_friendly_abort (172);
-      popclass (0);
+      popclass (1);
       return t;
     }
 
@@ -3838,32 +3847,6 @@ finish_struct_1 (t, warn_anon)
   /* Delete all duplicate fields from the fields */
   delete_duplicate_fields (fields);
 
-  /* Catch function/field name conflict.  We don't need to do this for a
-     signature, since it can only contain the fields constructed in
-     append_signature_fields.  */
-  if (! IS_SIGNATURE (t))
-    {
-      int n_methods = method_vec ? TREE_VEC_LENGTH (method_vec) : 0;
-      for (x = fields; x; x = TREE_CHAIN (x))
-       {
-         tree name = DECL_NAME (x);
-         int i;
-
-         if (TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x))
-           continue;
-
-         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)
-             {
-               cp_error_at ("data member `%#D' conflicts with", x);
-               cp_error_at ("function member `%#D'",
-                            OVL_CURRENT (TREE_VEC_ELT (method_vec, i)));
-               break;
-             }
-       }
-    }
-
   /* Now we have the nearly final fieldlist for the data fields.  Record it,
      then lay out the structure or union (including the fields).  */
 
@@ -4258,54 +4241,6 @@ 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;
-
-      /* This should match pushdecl_class_level.  */
-      if (icv && icv != x
-         && 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);
-       }
-    }
-}
-
 /* When T was built up, the member declarations were added in reverse
    order.  Rearrange them to declaration order.  */
 
@@ -4372,14 +4307,6 @@ finish_struct (t, attributes, warn_anon)
      as necessary.  */
   unreverse_member_declarations (t);
 
-  if (flag_optional_diags) 
-    {
-      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);
-    }
-
   /* 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;
@@ -4413,8 +4340,9 @@ finish_struct (t, attributes, warn_anon)
     t = finish_struct_1 (t, warn_anon);
 
   TYPE_BEING_DEFINED (t) = 0;
+
   if (current_class_type)
-    popclass (0);
+    popclass (1);
   else
     error ("trying to finish struct, but kicked out due to previous parse errors.");
 
@@ -4636,6 +4564,7 @@ pushclass (type, modify)
   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_stack[current_class_depth].names_used = 0;
   current_class_depth++;
 
   /* Now set up the new type.  */
@@ -4651,12 +4580,12 @@ pushclass (type, modify)
                              : access_public_node);
 
   if (previous_class_type != NULL_TREE
-      && (type != previous_class_type || TYPE_SIZE (previous_class_type) == NULL_TREE)
+      && (type != previous_class_type 
+         || TYPE_SIZE (previous_class_type) == NULL_TREE)
       && current_class_depth == 1)
     {
       /* Forcibly remove any old class remnants.  */
-      popclass (-1);
-      previous_class_type = NULL_TREE;
+      invalidate_class_lookup_cache ();
 
       /* Now, free the obstack on which we cached all the values.  */
       obstack_free (&class_cache_obstack, class_cache_firstobj);
@@ -4664,6 +4593,11 @@ pushclass (type, modify)
        = (char*) obstack_finish (&class_cache_obstack);
     }
 
+  /* If we're about to enter a nested class, clear
+     IDENTIFIER_CLASS_VALUE for the enclosing classes.  */
+  if (modify && current_class_depth > 1)
+    clear_identifier_class_values ();
+
   pushlevel_class ();
 
 #if 0
@@ -4674,25 +4608,9 @@ pushclass (type, modify)
   if (modify)
     {
       tree tags;
-      tree this_fndecl = current_function_decl;
-
-      if (current_function_decl
-         && DECL_CONTEXT (current_function_decl)
-         && TREE_CODE (DECL_CONTEXT (current_function_decl)) == FUNCTION_DECL)
-       current_function_decl = DECL_CONTEXT (current_function_decl);
-      else
-       current_function_decl = NULL_TREE;
 
       if (type != previous_class_type || current_class_depth > 1)
-       {
-#ifdef MI_MATRIX
-         build_mi_matrix (type);
-         push_class_decls (type);
-         free_mi_matrix ();
-#else
-         push_class_decls (type);
-#endif
-       }
+       push_class_decls (type);
       else
        {
          tree item;
@@ -4726,9 +4644,32 @@ pushclass (type, modify)
                 && CLASSTYPE_IS_TEMPLATE (tag_type)))
            pushtag (TREE_PURPOSE (tags), tag_type, 0);
        }
+    }
+}
+
+/* When we exit a toplevel class scope, we save the
+   IDENTIFIER_CLASS_VALUEs so that we can restore them quickly if we
+   reenter the class.  Here, we've entered some other class, so we
+   must invalidate our cache.  */
 
-      current_function_decl = this_fndecl;
+void
+invalidate_class_lookup_cache ()
+{
+  tree tags = CLASSTYPE_TAGS (previous_class_type);
+  tree t;
+  
+  /* This code can be seen as a cache miss.  When we've cached a
+     class' scope's bindings and we can't use them, we need to reset
+     them.  This is it!  */
+  for (t = previous_class_values; t; t = TREE_CHAIN (t))
+    IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
+  while (tags)
+    {
+      TREE_NONLOCAL_FLAG (TREE_VALUE (tags)) = 0;
+      tags = TREE_CHAIN (tags);
     }
+  
+  previous_class_type = NULL_TREE;
 }
  
 /* Get out of the current class scope. If we were in a class scope
@@ -4740,26 +4681,6 @@ void
 popclass (modify)
      int modify;
 {
-  if (modify < 0)
-    {
-      /* Back this old class out completely.  */
-      tree tags = CLASSTYPE_TAGS (previous_class_type);
-      tree t;
-
-      /* This code can be seen as a cache miss.  When we've cached a
-        class' scope's bindings and we can't use them, we need to reset
-        them.  This is it!  */
-      for (t = previous_class_values; t; t = TREE_CHAIN (t))
-       IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
-      while (tags)
-       {
-         TREE_NONLOCAL_FLAG (TREE_VALUE (tags)) = 0;
-         tags = TREE_CHAIN (tags);
-       }
-
-      return;
-    }
-
   if (modify)
     {
       /* Just remove from this class what didn't make
@@ -4787,6 +4708,8 @@ popclass (modify)
   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;
+  if (current_class_stack[current_class_depth].names_used)
+    splay_tree_delete (current_class_stack[current_class_depth].names_used);
 }
 
 /* Returns 1 if current_class_type is either T or a nested type of T.  */
@@ -5216,8 +5139,6 @@ instantiate_type (lhstype, rhs, complain)
        tree field = TREE_OPERAND (rhs, 1);
        tree r;
 
-       my_friendly_assert (TREE_CODE (field) == TREE_LIST, 0);
-
        r = instantiate_type (lhstype, field, complain);
 
        if (r != error_mark_node && TYPE_PTRMEMFUNC_P (lhstype))
@@ -5225,15 +5146,15 @@ instantiate_type (lhstype, rhs, complain)
            if (complain)
              {
                tree t = TYPE_PTRMEMFUNC_OBJECT_TYPE (lhstype);
-               tree fn = TREE_VALUE (field);
-               if (TREE_CODE (fn) == OVERLOAD)
-                 fn = OVL_FUNCTION (fn);
-               if (TREE_CODE (fn) == FUNCTION_DECL)
+
+               if (TREE_CODE (field) == OVERLOAD)
+                 field = OVL_FUNCTION (field);
+               if (TREE_CODE (field) == FUNCTION_DECL)
                  {
                    cp_error ("object-dependent reference `%E' can only be used in a call",
-                             DECL_NAME (fn));
+                             DECL_NAME (field));
                    cp_error ("  to form a pointer to member function, say `&%T::%E'",
-                             t, DECL_NAME (fn));
+                             t, DECL_NAME (field));
                  }
                else
                  cp_error ("object-dependent reference can only be used in a call");
@@ -5490,8 +5411,6 @@ build_self_reference ()
   DECL_CLASS_CONTEXT (value) = current_class_type;
   DECL_ARTIFICIAL (value) = 1;
 
-  pushdecl_class_level (value);
-
   saved_cas = current_access_specifier;
   current_access_specifier = access_public_node;
   finish_member_declaration (value);
@@ -5568,3 +5487,64 @@ is_base_of_enclosing_class (base, type)
     }
   return 0;
 }
+
+/* Note that NAME was looked up while the current class was being
+   defined and that the result of that lookup was DECL.  */
+
+void
+maybe_note_name_used_in_class (name, decl)
+     tree name;
+     tree decl;
+{
+  splay_tree names_used;
+
+  /* If we're not defining a class, there's nothing to do.  */
+  if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
+    return;
+  
+  /* If there's already a binding for this NAME, then we don't have
+     anything to worry about.  */
+  if (IDENTIFIER_CLASS_VALUE (name))
+    return;
+
+  if (!current_class_stack[current_class_depth - 1].names_used)
+    current_class_stack[current_class_depth - 1].names_used
+      = splay_tree_new (splay_tree_compare_pointers, 0, 0);
+  names_used = current_class_stack[current_class_depth - 1].names_used;
+
+  splay_tree_insert (names_used,
+                    (splay_tree_key) name, 
+                    (splay_tree_value) decl);
+}
+
+/* Note that NAME was declared (as DECL) in the current class.  Check
+   to see that the declaration is legal.  */
+
+void
+note_name_declared_in_class (name, decl)
+     tree name;
+     tree decl;
+{
+  splay_tree names_used;
+  splay_tree_node n;
+
+  /* Look to see if we ever used this name.  */
+  names_used 
+    = current_class_stack[current_class_depth - 1].names_used;
+  if (!names_used)
+    return;
+
+  n = splay_tree_lookup (names_used, (splay_tree_key) name);
+  if (n)
+    {
+      /* [basic.scope.class]
+        
+        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.  */
+      cp_error ("declaration of `%#D'", decl);
+      cp_error_at ("changes meaning of `%s' from `%+#D'", 
+                  IDENTIFIER_POINTER (DECL_NAME (decl)),
+                  (tree) n->value);
+    }
+}
index 2fdacfd3965ae536973adcbce837a3a5759a6c54..090d83724aca727bd728c3aab4f72dd0cc4972ea 100644 (file)
@@ -170,12 +170,11 @@ DEFTREECODE (USING_DECL, "using_decl", 'd', 0)
 /* An un-parsed default argument.  Looks like an IDENTIFIER_NODE.  */
 DEFTREECODE (DEFAULT_ARG, "default_arg", 'c', 2)
 
-/* A template-id, like foo<int>.  The first operand is the template.  
-   The second is the list of explicitly specified arguments.  The 
-   template will be a FUNCTION_DECL, TEMPLATE_DECL, or a list of
-   overloaded functions and templates if the template-id refers to
-   a global template.  If the template-id refers to a member template,
-   the template may be an IDENTIFIER_NODE.  */
+/* A template-id, like foo<int>.  The first operand is the template.
+   The second is the list of explicitly specified arguments.  The
+   template will be a FUNCTION_DECL, TEMPLATE_DECL, or an OVERLOAD.
+   If the template-id refers to a member template, the template may be
+   an IDENTIFIER_NODE.  */
 DEFTREECODE (TEMPLATE_ID_EXPR, "template_id_expr", 'e', 2)
 
 /* An association between name and entity. Parameters are the scope
index 9babb014af5715b87a850256a775f83d6633e7f9..6d0b2735bd23f138df3a88200ffcabd82aa25b89 100644 (file)
@@ -40,6 +40,7 @@ Boston, MA 02111-1307, USA.  */
       (TREE_CALLS_NEW) (in _EXPR or _REF) (commented-out).
       TYPE_USES_COMPLEX_INHERITANCE (in _TYPE).
       C_DECLARED_LABEL_FLAG.
+      INHERITED_VALUE_BINDING_P (in CPLUS_BINDING)
    2: IDENTIFIER_OPNAME_P.
       BINFO_VBASE_MARKED.
       BINFO_FIELDS_MARKED.
@@ -134,6 +135,10 @@ typedef struct ptrmem_cst
    or namespace scope.  */
 #define LOCAL_BINDING_P(NODE) TREE_LANG_FLAG_0(NODE)
 
+/* Nonzero if BINDING_VALUE is from a base class of the class which is
+   currently being defined.  */
+#define INHERITED_VALUE_BINDING_P(NODE) TREE_LANG_FLAG_1(NODE)
+
 /* For a binding between a name and an entity at a non-local scope,
    defines the scope where the binding is declared.  (Either a class
    _TYPE node, or a NAMESPACE_DECL.)  This macro should be used only
@@ -235,10 +240,10 @@ struct tree_srcloc
    ? BINDING_VALUE (IDENTIFIER_BINDING (NODE)) \
    : NULL_TREE)
 
-/* If we are currently in class scope, then IDENTIFIER_CLASS_VALUE
-   indicates the class-scoped binding of NODE.  This is just a pointer
-   to the BINDING_VALUE of one of the bindings in the
-   IDENTIFIER_BINDINGs list, so any time that this is set so is
+/* If IDENTIFIER_CLASS_VALUE is set, then NODE is bound in the current
+   class, and IDENTIFIER_CLASS_VALUE is the value binding.  This is
+   just a pointer to the BINDING_VALUE of one of the bindings in the
+   IDENTIFIER_BINDINGs list, so any time that this is non-NULL so is
    IDENTIFIER_BINDING.  */
 #define IDENTIFIER_CLASS_VALUE(NODE) \
   (((struct lang_identifier *) (NODE))->class_value)
@@ -2684,6 +2689,7 @@ extern int can_convert_arg                        PROTO((tree, tree, tree));
 extern int enforce_access                       PROTO((tree, tree));
 extern tree convert_default_arg                 PROTO((tree, tree, tree));
 extern tree convert_arg_to_ellipsis             PROTO((tree));
+extern int is_properly_derived_from             PROTO((tree, tree));
 
 /* in class.c */
 extern tree build_vbase_path                   PROTO((enum tree_code, tree, tree, tree, int));
@@ -2713,6 +2719,9 @@ 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));
+extern void invalidate_class_lookup_cache       PROTO((void));
+extern void maybe_note_name_used_in_class       PROTO((tree, tree));
+extern void note_name_declared_in_class         PROTO((tree, tree));
 
 /* in cvt.c */
 extern tree convert_to_reference               PROTO((tree, tree, int, int, tree));
@@ -2776,7 +2785,6 @@ extern tree pushdecl_namespace_level            PROTO((tree));
 extern tree push_using_decl                     PROTO((tree, tree));
 extern tree push_using_directive                PROTO((tree));
 extern void push_class_level_binding           PROTO((tree, tree));
-extern tree push_using_decl                     PROTO((tree, tree));
 extern tree implicitly_declare                 PROTO((tree));
 extern tree lookup_label                       PROTO((tree));
 extern tree shadow_label                       PROTO((tree));
@@ -2845,7 +2853,6 @@ extern tree maybe_build_cleanup_and_delete        PROTO((tree));
 extern tree maybe_build_cleanup                        PROTO((tree));
 extern void cplus_expand_expr_stmt             PROTO((tree));
 extern void finish_stmt                                PROTO((void));
-extern int id_in_current_class                 PROTO((tree));
 extern void push_cp_function_context           PROTO((tree));
 extern void pop_cp_function_context            PROTO((tree));
 extern int in_function_p                       PROTO((void));
@@ -2856,9 +2863,10 @@ extern void cat_namespace_levels                PROTO((void));
 extern void fixup_anonymous_union               PROTO((tree));
 extern int check_static_variable_definition     PROTO((tree, tree));
 extern void push_local_binding                  PROTO((tree, tree, int));
-extern void push_class_binding                  PROTO((tree, tree));
+extern int push_class_binding                   PROTO((tree, tree));
 extern tree check_default_argument              PROTO((tree, tree));
 extern tree push_overloaded_decl               PROTO((tree, int));
+extern void clear_identifier_class_values       PROTO((void));
 
 /* in decl2.c */
 extern int check_java_method                   PROTO((tree));
index 74ba56b74aab809b9b298225583c99502fd6cd39..63f4fec119729b2297db11d619898dfd422d4ed6 100644 (file)
@@ -178,7 +178,7 @@ static void check_for_uninitialized_const_var PROTO((tree));
 static unsigned long typename_hash PROTO((hash_table_key));
 static boolean typename_compare PROTO((hash_table_key, hash_table_key));
 static void push_binding PROTO((tree, tree, struct binding_level*));
-static void add_binding PROTO((tree, tree));
+static int add_binding PROTO((tree, tree));
 static void pop_binding PROTO((tree, tree));
 static tree local_variable_p PROTO((tree));
 static tree find_binding PROTO((tree, tree));
@@ -188,6 +188,8 @@ static int lookup_flags PROTO((int, int));
 static tree qualify_lookup PROTO((tree, int));
 static tree record_builtin_java_type PROTO((const char *, int));
 static const char *tag_name PROTO((enum tag_types code));
+static void find_class_binding_level PROTO((void));
+static struct binding_level *innermost_nonclass_level PROTO((void));
 
 #if defined (DEBUG_CP_BINDING_LEVELS)
 static void indent PROTO((void));
@@ -716,7 +718,7 @@ struct binding_level
 
 #define NULL_BINDING_LEVEL ((struct binding_level *) NULL)
   
-/* The (non-class) binding level currently in effect.  */
+/* The binding level currently in effect.  */
 
 static struct binding_level *current_binding_level;
 
@@ -724,11 +726,6 @@ static struct binding_level *current_binding_level;
 
 static struct binding_level *class_binding_level;
 
-/* The current (class or non-class) binding level currently in effect.  */
-
-#define inner_binding_level \
-  (class_binding_level ? class_binding_level : current_binding_level)
-
 /* A chain of binding_level structures awaiting reuse.  */
 
 static struct binding_level *free_binding_level;
@@ -771,15 +768,7 @@ push_binding_level (newlevel, tag_transparent, keep)
   /* Add this level to the front of the chain (stack) of levels that
      are active.  */
   *newlevel = clear_binding_level;
-  if (class_binding_level)
-    {
-      newlevel->level_chain = class_binding_level;
-      class_binding_level = (struct binding_level *)0;
-    }
-  else
-    {
-      newlevel->level_chain = current_binding_level;
-    }
+  newlevel->level_chain = current_binding_level;
   current_binding_level = newlevel;
   newlevel->tag_transparent = tag_transparent;
   newlevel->more_cleanups_ok = 1;
@@ -794,12 +783,25 @@ push_binding_level (newlevel, tag_transparent, keep)
 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
 }
 
+/* Find the innermost enclosing class scope, and reset
+   CLASS_BINDING_LEVEL appropriately.  */
+
+static void
+find_class_binding_level ()
+{
+  struct binding_level *level = current_binding_level;
+
+  while (level && level->parm_flag != 2)
+    level = level->level_chain;
+  if (level && level->parm_flag == 2)
+    class_binding_level = level;
+  else
+    class_binding_level = 0;
+}
+
 static void
 pop_binding_level ()
 {
-  if (class_binding_level)
-    current_binding_level = class_binding_level;
-
   if (global_binding_level)
     {
       /* Cannot pop a level, if there are none left to pop.  */
@@ -828,13 +830,8 @@ pop_binding_level ()
     if (level->binding_depth != binding_depth)
       abort ();
 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
-      free_binding_level = level;
-
-    class_binding_level = current_binding_level;
-    if (class_binding_level->parm_flag != 2)
-      class_binding_level = 0;
-    while (current_binding_level->parm_flag == 2)
-      current_binding_level = current_binding_level->level_chain;
+    free_binding_level = level;
+    find_class_binding_level ();
   }
 }
 
@@ -864,14 +861,8 @@ suspend_binding_level ()
     }
   is_class_level = 0;
 #endif /* defined(DEBUG_CP_BINDING_LEVELS) */
-  {
-    current_binding_level = current_binding_level->level_chain;
-    class_binding_level = current_binding_level;
-    if (class_binding_level->parm_flag != 2)
-      class_binding_level = 0;
-    while (current_binding_level->parm_flag == 2)
-      current_binding_level = current_binding_level->level_chain;
-  }
+  current_binding_level = current_binding_level->level_chain;
+  find_class_binding_level ();
 }
 
 static void
@@ -912,25 +903,44 @@ global_bindings_p ()
   return current_binding_level == global_binding_level;
 }
 
+/* Return the innermost binding level that is not for a class scope.  */
+
+static struct binding_level *
+innermost_nonclass_level ()
+{
+  struct binding_level *b;
+
+  b = current_binding_level;
+  while (b->parm_flag == 2)
+    b = b->level_chain;
+
+  return b;
+}
+
 /* Nonzero if we are currently in a toplevel binding level.  This
    means either the global binding level or a namespace in a toplevel
-   binding level.
-   Since there are no non-toplevel namespace levels, this really
-   means any namespace or pseudo-global level.  */
+   binding level.  Since there are no non-toplevel namespace levels,
+   this really means any namespace or pseudo-global level.  We also
+   include a class whose context is toplevel.  */
 
 int
 toplevel_bindings_p ()
 {
-  return current_binding_level->namespace_p 
-    || current_binding_level->pseudo_global;
+  struct binding_level *b = innermost_nonclass_level ();
+
+  return b->namespace_p || b->pseudo_global;
 }
 
-/* Nonzero if this is a namespace scope.  */
+/* Nonzero if this is a namespace scope, or if we are defining a class
+   which is itself at namespace scope, or whose enclosing class is
+   such a class, etc.  */
 
 int
 namespace_bindings_p ()
 {
-  return current_binding_level->namespace_p;
+  struct binding_level *b = innermost_nonclass_level ();
+
+  return b->namespace_p;
 }
 
 void
@@ -974,7 +984,9 @@ declare_namespace_level ()
 int
 pseudo_global_level_p ()
 {
-  return current_binding_level->pseudo_global;
+  struct binding_level *b = innermost_nonclass_level ();
+
+  return b->pseudo_global;
 }
 
 void
@@ -1085,6 +1097,7 @@ push_binding (id, decl, level)
   BINDING_VALUE (binding) = decl;
   BINDING_TYPE (binding) = NULL_TREE;
   BINDING_LEVEL (binding) = level;
+  INHERITED_VALUE_BINDING_P (binding) = 0;
   LOCAL_BINDING_P (binding) = (level != class_binding_level);
 
   /* And put it on the front of the ilst of bindings for ID.  */
@@ -1097,31 +1110,44 @@ push_binding (id, decl, level)
    stat' hack whereby a non-typedef class-name or enum-name can be
    bound at the same level as some other kind of entity.  It's the
    responsibility of the caller to check that inserting this name is
-   legal here.  */
-static void
+   legal here.  Returns nonzero if the new binding was successful.  */
+static int
 add_binding (id, decl)
      tree id;
      tree decl;
 {
   tree binding = IDENTIFIER_BINDING (id);
+  int ok = 1;
 
   if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl))
     /* The new name is the type name.  */
     BINDING_TYPE (binding) = decl;
-  else 
-    {
-      /* The old name must be the type name.  It was placed in
-        IDENTIFIER_VALUE because it was thought, at the point it
-        was declared, to be the only entity with such a name.  */
-      my_friendly_assert (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
-                         && DECL_ARTIFICIAL (BINDING_VALUE (binding)),
-                         0);
-
-      /* Move the type name into the type slot; it is now hidden by
-        the new binding.  */
+  else if (!BINDING_VALUE (binding))
+    /* This situation arises when push_class_level_binding moves an
+       inherited type-binding out of the way to make room for a new
+       value binding.  */
+    BINDING_VALUE (binding) = decl;
+  else if (TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
+          && DECL_ARTIFICIAL (BINDING_VALUE (binding)))
+    {
+      /* The old binding was a type name.  It was placed in
+        BINDING_VALUE because it was thought, at the point it was
+        declared, to be the only entity with such a name.  Move the
+        type name into the type slot; it is now hidden by the new
+        binding.  */
       BINDING_TYPE (binding) = BINDING_VALUE (binding);
       BINDING_VALUE (binding) = decl;
+      INHERITED_VALUE_BINDING_P (binding) = 0;
     }
+  else
+    {
+      cp_error ("declaration of `%#D'", decl);
+      cp_error_at ("conflicts with previous declaration `%#D'",
+                  BINDING_VALUE (binding));
+      ok = 0;
+    }
+
+  return ok;
 }
 
 /* Bind DECL to ID in the current_binding_level.
@@ -1134,14 +1160,26 @@ push_local_binding (id, decl, flags)
      tree decl;
      int flags;
 {
-  tree d = decl;
+  struct binding_level *b;
+
+  /* Skip over any local classes.  This makes sense if we call
+     push_local_binding with a friend decl of a local class.  */
+  b = current_binding_level;
+  while (b->parm_flag == 2)
+    b = b->level_chain;
 
   if (lookup_name_current_level (id))
-    /* Supplement the existing binding.  */
-    add_binding (id, d);
+    {
+      /* Supplement the existing binding.  */
+      if (!add_binding (id, decl))
+       /* It didn't work.  Something else must be bound at this
+          level.  Do not add DECL to the list of things to pop
+          later.  */
+       return;
+    }
   else
     /* Create a new binding.  */
-    push_binding (id, d, current_binding_level);
+    push_binding (id, decl, b);
 
   if (TREE_CODE (decl) == OVERLOAD || (flags & PUSH_USING))
     /* We must put the OVERLOAD into a TREE_LIST since the
@@ -1151,21 +1189,30 @@ push_local_binding (id, decl, flags)
 
   /* And put DECL on the list of things declared by the current
      binding level.  */
-  TREE_CHAIN (decl) = current_binding_level->names;
-  current_binding_level->names = decl;
+  TREE_CHAIN (decl) = b->names;
+  b->names = decl;
 }
 
-/* Bind DECL to ID in the class_binding_level.  */
+/* Bind DECL to ID in the class_binding_level.  Returns nonzero if the
+   binding was successful.  */
 
-void
+int
 push_class_binding (id, decl)
      tree id;
      tree decl;
 {
-  if (IDENTIFIER_BINDING (id)
-      && BINDING_LEVEL (IDENTIFIER_BINDING (id)) == class_binding_level)
+  int result = 1;
+  tree binding = IDENTIFIER_BINDING (id);
+  tree context;
+
+  /* Note that we declared this value so that we can issue an error if
+     this an illegal redeclaration of a name already used for some
+     other purpose.  */
+  note_name_declared_in_class (id, decl);
+
+  if (binding && BINDING_LEVEL (binding) == class_binding_level)
     /* Supplement the existing binding.  */
-    add_binding (id, decl);
+    result = add_binding (id, decl);
   else
     /* Create a new binding.  */
     push_binding (id, decl, class_binding_level);
@@ -1176,6 +1223,32 @@ push_class_binding (id, decl)
      a class-name or enum-name we might prefer a field-name, or some
      such.  */
   IDENTIFIER_CLASS_VALUE (id) = BINDING_VALUE (IDENTIFIER_BINDING (id));
+
+  /* If this is a binding from a base class, mark it as such.  */
+  binding = IDENTIFIER_BINDING (id);
+  if (BINDING_VALUE (binding) == decl && TREE_CODE (decl) != TREE_LIST)
+    {
+      if (TREE_CODE (decl) == OVERLOAD)
+       context = DECL_REAL_CONTEXT (OVL_CURRENT (decl));
+      else
+       {
+         my_friendly_assert (TREE_CODE_CLASS (TREE_CODE (decl)) == 'd',
+                             0);
+         context = DECL_REAL_CONTEXT (decl);
+       }
+
+      if (is_properly_derived_from (current_class_type, context))
+       INHERITED_VALUE_BINDING_P (binding) = 1;
+      else
+       INHERITED_VALUE_BINDING_P (binding) = 0;
+    }
+  else if (BINDING_VALUE (binding) == decl)
+    /* We only encounter a TREE_LIST when push_class_decls detects an
+       ambiguity.  Such an ambiguity can be overridden by a definition
+       in this class.  */
+    INHERITED_VALUE_BINDING_P (binding) = 1;
+
+  return result;
 }
 
 /* Remove the binding for DECL which should be the innermost binding
@@ -1647,14 +1720,6 @@ pushlevel_class ()
   decl_stack = push_decl_level (decl_stack, &decl_obstack);
   class_binding_level = current_binding_level;
   class_binding_level->parm_flag = 2;
-  /* We have just pushed into a new binding level.  Now, fake out the rest
-     of the compiler.  Set the `current_binding_level' back to point to
-     the most closely containing non-class binding level.  */
-  do
-    {
-      current_binding_level = current_binding_level->level_chain;
-    }
-  while (current_binding_level->parm_flag == 2);
 }
 
 /* ...and a poplevel for class declarations.  FORCE is used to force
@@ -1677,10 +1742,37 @@ poplevel_class (force)
      if we don't touch it here, we're able to use the cache effect if the
      next time we're entering a class scope, it is the same class.  */
   if (current_class_depth != 1 || force)
-    for (shadowed = level->class_shadowed;
-        shadowed;
-        shadowed = TREE_CHAIN (shadowed))
-      IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = TREE_VALUE (shadowed);
+    {
+      struct binding_level* b;
+
+      /* Clear out our IDENTIFIER_CLASS_VALUEs.  */
+      for (shadowed = level->class_shadowed;
+          shadowed;
+          shadowed = TREE_CHAIN (shadowed))
+       IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) = NULL_TREE;
+       
+      /* Find the next enclosing class, and recreate
+        IDENTIFIER_CLASS_VALUEs appropriate for that class.  */
+      b = level->level_chain;
+      while (b && b->parm_flag != 2)
+       b = b->level_chain;
+
+      if (b)
+       for (shadowed = b->class_shadowed; 
+            shadowed; 
+            shadowed = TREE_CHAIN (shadowed))
+         {
+           tree t;
+
+           t = IDENTIFIER_BINDING (TREE_PURPOSE (shadowed));
+           while (t && BINDING_LEVEL (t) != b)
+             t = TREE_CHAIN (t);
+      
+           if (t)
+             IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (shadowed)) 
+               = BINDING_VALUE (t);
+         }
+    }
   else
     /* Remember to save what IDENTIFIER's were bound in this scope so we
        can recover from cache misses.  */
@@ -1704,9 +1796,6 @@ poplevel_class (force)
                      class_binding_level->parm_flag,
                      class_binding_level->keep);
 
-  if (class_binding_level->parm_flag != 2)
-    class_binding_level = (struct binding_level *)0;
-
   /* Now, pop out of the binding level which we created up in the
      `pushlevel_class' routine.  */
 #if defined(DEBUG_CP_BINDING_LEVELS)
@@ -1717,6 +1806,24 @@ poplevel_class (force)
 
   return block;
 }
+
+/* We are entering the scope of a class.  Clear IDENTIFIER_CLASS_VALUE
+   for any names in enclosing classes.  */
+
+void
+clear_identifier_class_values ()
+{
+  tree t;
+
+  if (!class_binding_level)
+    return;
+
+  for (t = class_binding_level->class_shadowed;
+       t;
+       t = TREE_CHAIN (t))
+    IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (t)) = NULL_TREE;
+}
+
 \f
 /* For debugging.  */
 static int no_print_functions = 0;
@@ -2202,7 +2309,7 @@ maybe_push_to_top_level (pseudo)
   extern int current_lang_stacksize;
   struct saved_scope *s
     = (struct saved_scope *) xmalloc (sizeof (struct saved_scope));
-  struct binding_level *b = inner_binding_level;
+  struct binding_level *b = current_binding_level;
   tree old_bindings = NULL_TREE;
 
   push_cp_function_context (NULL_TREE);
@@ -2296,10 +2403,7 @@ pop_from_top_level ()
 
   /* Clear out class-level bindings cache.  */
   if (previous_class_type)
-    {
-      popclass (-1);
-      previous_class_type = NULL_TREE;
-    }
+    invalidate_class_lookup_cache ();
 
   pop_obstacks ();
 
@@ -2385,14 +2489,14 @@ set_identifier_type_value_with_scope (id, type, b)
   SET_IDENTIFIER_TYPE_VALUE (id, type);
 }
 
-/* As set_identifier_type_value_with_scope, but using inner_binding_level.  */
+/* As set_identifier_type_value_with_scope, but using current_binding_level.  */
 
 void
 set_identifier_type_value (id, type)
      tree id;
      tree type;
 {
-  set_identifier_type_value_with_scope (id, type, inner_binding_level);
+  set_identifier_type_value_with_scope (id, type, current_binding_level);
 }
 
 /* Return the type associated with id. */
@@ -2425,9 +2529,9 @@ pop_everything ()
 #ifdef DEBUG_CP_BINDING_LEVELS
   fprintf (stderr, "XXX entering pop_everything ()\n");
 #endif
-  while (! toplevel_bindings_p () && ! pseudo_global_level_p ())
+  while (!toplevel_bindings_p ())
     {
-      if (class_binding_level)
+      if (current_binding_level->parm_flag == 2)
        pop_nested_class (1);
       else
        poplevel (0, 0, 0);
@@ -2506,8 +2610,6 @@ maybe_process_template_type_declaration (type, globalize, b)
              && !globalize && b->pseudo_global
              && b->level_chain->parm_flag == 2)
            {
-             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
@@ -2538,7 +2640,7 @@ pushtag (name, type, globalize)
   tree context = 0;
   tree c_decl = 0;
 
-  b = inner_binding_level;
+  b = current_binding_level;
   while (b->tag_transparent
         || (globalize && b->parm_flag == 2))
     b = b->level_chain;
@@ -2604,13 +2706,14 @@ pushtag (name, type, globalize)
 
          if (b->parm_flag == 2)
            {
-             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
+               pushdecl_class_level (d);
            }
          else
            d = pushdecl_with_scope (d, b);
@@ -3942,8 +4045,8 @@ pushdecl (x)
         We will reverse them later if necessary.  */
       TREE_CHAIN (x) = current_binding_level->names;
       current_binding_level->names = x;
-      if (! (current_binding_level != global_binding_level 
-            || TREE_PERMANENT (x)))
+      if (current_binding_level == global_binding_level
+         && !TREE_PERMANENT (x))
        my_friendly_abort (124);
     }
 
@@ -3987,7 +4090,7 @@ tree
 pushdecl_namespace_level (x)
      tree x;
 {
-  register struct binding_level *b = inner_binding_level;
+  register struct binding_level *b = current_binding_level;
   register tree t;
 
   t = pushdecl_with_scope (x, NAMESPACE_LEVEL (current_namespace));
@@ -4048,39 +4151,30 @@ pushdecl_class_level (x)
 {
   /* Don't use DECL_ASSEMBLER_NAME here!  Everything that looks in class
      scope looks for the pre-mangled name.  */
-  register tree name = DECL_NAME (x);
+  register tree name;
+
+  if (TREE_CODE (x) == OVERLOAD)
+    x = OVL_CURRENT (x);
+  name = DECL_NAME (x);
 
   if (name)
     {
       if (TYPE_BEING_DEFINED (current_class_type))
-       {
-         /* 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.
-            Types, enums, and static vars are checked here; other
-            members are checked in finish_struct.  */
-         tree icv = IDENTIFIER_CLASS_VALUE (name);
-
-         /* This should match check_member_decl_is_same_in_complete_scope.  */
-         if (icv && icv != x
-             && flag_optional_diags
-             /* Don't complain about inherited names.  */
-             && id_in_current_class (name)
-             /* Or shadowed tags.  */
-             && !(DECL_DECLARES_TYPE_P (icv)
-                  && DECL_CONTEXT (icv) == current_class_type))
-           {
-             cp_pedwarn ("declaration of identifier `%D' as `%#D'", name, x);
-             cp_pedwarn_at ("conflicts with previous use in class as `%#D'",
-                            icv);
-           }
-
-         check_template_shadow (x);
-       }
+       check_template_shadow (x);
 
       push_class_level_binding (name, x);
       if (TREE_CODE (x) == TYPE_DECL)
        set_identifier_type_value (name, TREE_TYPE (x));
     }
+  else if (ANON_UNION_TYPE_P (TREE_TYPE (x)))
+    {
+      tree f;
+
+      for (f = TYPE_FIELDS (TREE_TYPE (x));
+          f;
+          f = TREE_CHAIN (f))
+       pushdecl_class_level (f);
+    }
 }
 
 #if 0
@@ -4114,6 +4208,7 @@ push_class_level_binding (name, x)
      tree name;
      tree x;
 {
+  tree binding;
   /* The class_binding_level will be NULL if x is a template 
      parameter name in a member template.  */
   if (!class_binding_level)
@@ -4122,19 +4217,64 @@ push_class_level_binding (name, x)
   /* If this declaration shadows a declaration from an enclosing
      class, then we will need to restore IDENTIFIER_CLASS_VALUE when
      we leave this class.  Record the shadowed declaration here.  */
-  maybe_push_cache_obstack ();
-  class_binding_level->class_shadowed
-    = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
-                class_binding_level->class_shadowed);
-  TREE_TYPE (class_binding_level->class_shadowed)
-    = x;
-  pop_obstacks ();
-
-  /* Put the binding on the stack of bindings for the identifier, and
-     update IDENTIFIER_CLASS_VALUE.  */
-  push_class_binding (name, x);
+  binding = IDENTIFIER_BINDING (name);
+  if (binding 
+      && ((TREE_CODE (x) == OVERLOAD
+          && BINDING_VALUE (binding)
+          && is_overloaded_fn (BINDING_VALUE (binding)))
+         || INHERITED_VALUE_BINDING_P (binding)))
+    {
+      tree shadow;
+      tree old_decl;
+
+      /* If the old binding was from a base class, and was for a tag
+        name, slide it over to make room for the new binding.  The
+        old binding is still visible if explicitly qualified with a
+        class-key.  */
+      if (INHERITED_VALUE_BINDING_P (binding)
+         && BINDING_VALUE (binding)
+         && TREE_CODE (BINDING_VALUE (binding)) == TYPE_DECL
+         && DECL_ARTIFICIAL (BINDING_VALUE (binding))
+         && !(TREE_CODE (x) == TYPE_DECL && DECL_ARTIFICIAL (x)))
+       {
+         old_decl = BINDING_TYPE (binding);
+         BINDING_TYPE (binding) = BINDING_VALUE (binding);
+         BINDING_VALUE (binding) = NULL_TREE;
+         INHERITED_VALUE_BINDING_P (binding) = 0;
+       }
+      else
+       old_decl = BINDING_VALUE (binding);
+
+      /* There was already a binding for X containing fewer
+        functions than are named in X.  Find the previous
+        declaration of X on the class-shadowed list, and update it.  */
+      for (shadow = class_binding_level->class_shadowed;
+          shadow;
+          shadow = TREE_CHAIN (shadow))
+       if (TREE_PURPOSE (shadow) == name
+           && TREE_TYPE (shadow) == old_decl)
+         {
+           BINDING_VALUE (binding) = x;
+           INHERITED_VALUE_BINDING_P (binding) = 0;
+           TREE_TYPE (shadow) = x;
+           return;
+         }
+    }
 
-  obstack_ptr_grow (&decl_obstack, x);
+  /* If we didn't replace an existing binding, put the binding on the
+     stack of bindings for the identifier, and update
+     IDENTIFIER_CLASS_VALUE.  */
+  if (push_class_binding (name, x))
+    {
+      maybe_push_cache_obstack ();
+      class_binding_level->class_shadowed
+       = tree_cons (name, IDENTIFIER_CLASS_VALUE (name),
+                    class_binding_level->class_shadowed);
+      pop_obstacks ();
+      /* Record the value we are binding NAME to so that we can know
+        what to pop later.  */
+      TREE_TYPE (class_binding_level->class_shadowed) = x;
+    }
 }
 
 /* Insert another USING_DECL into the current binding level,
@@ -5434,26 +5574,6 @@ lookup_name_real (name, prefer_type, nonclass, namespaces_only)
                   || TREE_CODE (type) == TYPENAME_TYPE)
            /* Someone else will give an error about this if needed.  */
            val = NULL_TREE;
-         else if (TYPE_BEING_DEFINED (type))
-           {
-             val = IDENTIFIER_CLASS_VALUE (name);
-             if (val && DECL_CONTEXT (val) != type)
-               {
-                 struct binding_level *b = class_binding_level;
-                 for (val = NULL_TREE; b; b = b->level_chain)
-                   {
-                     tree t = purpose_member (name, b->class_shadowed);
-                     if (t && TREE_VALUE (t)
-                         && DECL_CONTEXT (TREE_VALUE (t)) == type)
-                       {
-                         val = TREE_VALUE (t);
-                         break;
-                       }
-                   }
-               }
-             if (val == NULL_TREE)
-               val = lookup_field (type, name, 0, 1);
-           }
          else if (type == current_class_type)
            val = IDENTIFIER_CLASS_VALUE (name);
          else
@@ -5495,26 +5615,6 @@ lookup_name_real (name, prefer_type, nonclass, namespaces_only)
        }
     }
 
-  /* If VAL is a type from a dependent base, we're not really supposed
-     to be able to see it; the fact that we can is the "implicit
-     typename" extension.  We call lookup_field here to turn VAL into
-     a TYPE_DECL for a TYPENAME_TYPE.  */
-  if (processing_template_decl && val
-      && val == IDENTIFIER_CLASS_VALUE (name)
-      && TREE_CODE (val) == TYPE_DECL
-      && !currently_open_class (DECL_CONTEXT (val))
-      && uses_template_parms (current_class_type))
-    val = lookup_field (current_class_type, name, 0, 1);
-
-  /* We don't put names from baseclasses onto the IDENTIFIER_BINDING
-     list when we're defining a type.  It would probably be simpler to
-     do this, but we don't.  So, we must lookup names from base
-     classes explicitly.  */
-  if (!val && !nonclass 
-      && current_class_type && TYPE_BEING_DEFINED (current_class_type))
-    val = qualify_lookup (lookup_field (current_class_type, name, 0, 0),
-                         flags);
-
   /* The name might be from an enclosing class of the current scope.  */
   if (!val && !nonclass && current_class_type)
     val = qualify_lookup (lookup_nested_field (name, !yylex), flags);
@@ -9072,12 +9172,15 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
                if (TREE_CODE (fns) == LOOKUP_EXPR)
                  fns = TREE_OPERAND (fns, 0);
 
-               if (TREE_CODE (fns) == IDENTIFIER_NODE)
-                 dname = fns;
-               else if (is_overloaded_fn (fns))
-                 dname = DECL_NAME (get_first_fn (fns));
-               else
-                 my_friendly_abort (0);
+               dname = fns;
+               if (TREE_CODE (dname) == COMPONENT_REF)
+                 dname = TREE_OPERAND (dname, 1);
+               if (TREE_CODE (dname) != IDENTIFIER_NODE)
+                 {
+                   my_friendly_assert (is_overloaded_fn (dname),
+                                       19990331);
+                   dname = DECL_NAME (get_first_fn (dname));
+                 }
              }
          /* Fall through. */
 
@@ -12126,7 +12229,7 @@ xref_tag (code_type_node, name, globalize)
   enum tree_code code;
   int temp = 0;
   register tree ref, t;
-  struct binding_level *b = inner_binding_level;
+  struct binding_level *b = current_binding_level;
   int got_type = 0;
   tree attributes = NULL_TREE;
 
@@ -12557,7 +12660,7 @@ start_enum (name)
      tree name;
 {
   register tree enumtype = NULL_TREE;
-  struct binding_level *b = inner_binding_level;
+  struct binding_level *b = current_binding_level;
 
   /* We are wasting space here and putting these on the permanent_obstack so
      that typeid(local enum) will work correctly. */
@@ -12795,13 +12898,10 @@ build_enumerator (name, value, type)
  TREE_READONLY (decl) = 1;
 
  if (context && context == current_class_type)
-   {
-     pushdecl_class_level (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);
-   }
+   /* 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
    {
      pushdecl (decl);
@@ -14506,13 +14606,6 @@ revert_static_member_fn (decl, fn, argtypes)
     *argtypes = args;
 }
 
-int
-id_in_current_class (id)
-     tree id;
-{
-  return !!purpose_member (id, class_binding_level->class_shadowed);
-}
-
 struct cp_function
 {
   int returns_value;
index bb7071e522111a602cc4c5acb734d15afc0a53fb..180de3d6824df740e2b627f7c5bdb256a500c6ec 100644 (file)
@@ -1525,7 +1525,6 @@ grokfield (declarator, declspecs, init, asmspec_tree, attrlist)
        DECL_ASSEMBLER_NAME (value) =
          get_identifier (build_overload_name (TREE_TYPE (value), 1, 1));
 
-      pushdecl_class_level (value);
       return value;
     }
 
@@ -1611,8 +1610,6 @@ grokfield (declarator, declspecs, init, asmspec_tree, attrlist)
       && (TREE_CODE (value) == VAR_DECL || TREE_CODE (value) == FUNCTION_DECL))
     value = push_template_decl (value);
 
-  check_template_shadow (value);
-
   if (attrlist)
     cplus_decl_attributes (value, TREE_PURPOSE (attrlist),
                           TREE_VALUE (attrlist));
@@ -1656,7 +1653,6 @@ grokfield (declarator, declspecs, init, asmspec_tree, attrlist)
       DECL_CLASS_CONTEXT (value) = current_class_type;
 
       cp_finish_decl (value, init, asmspec_tree, 1, flags);
-      pushdecl_class_level (value);
       return value;
     }
   if (TREE_CODE (value) == FIELD_DECL)
index 7d6e66dffac84a490c5aa17e18ace8e7ffd277c8..58a46af4bad63744c26acc55ab81fc33cdec5075 100644 (file)
@@ -41,8 +41,6 @@ int cp_silent = 0;
 typedef void errorfn ();       /* deliberately vague */
 
 static void cp_thing PROTO ((errorfn *, int, const char *, va_list));
-extern char* cp_file_of PROTO((tree));
-extern int   cp_line_of PROTO((tree));
 
 #define STRDUP(f) (ap = (char *) alloca (strlen (f) +1), strcpy (ap, (f)), ap)
 
index b230e1f1efc24afffb6ce46fbe59726e14aa083d..45b96d7ef401ffe3438e0d453eaed19801d3c0a3 100644 (file)
@@ -806,6 +806,10 @@ dump_decl (t, v)
       }
       break;
 
+    case OVERLOAD:
+      t = OVL_CURRENT (t);
+      /* Fall through.  */
+
     case FUNCTION_DECL:
       if (GLOBAL_IORD_P (DECL_ASSEMBLER_NAME (t)))
        dump_global_iord (DECL_ASSEMBLER_NAME (t));
@@ -1928,6 +1932,8 @@ cp_file_of (t)
     return DECL_SOURCE_FILE (DECL_CONTEXT (t));
   else if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')
     return DECL_SOURCE_FILE (TYPE_MAIN_DECL (t));
+  else if (TREE_CODE (t) == OVERLOAD)
+    return DECL_SOURCE_FILE (OVL_FUNCTION (t));
   else
     return DECL_SOURCE_FILE (t);
 }
@@ -1945,6 +1951,8 @@ cp_line_of (t)
 
   if (TREE_CODE_CLASS (TREE_CODE (t)) == 't')
     line = DECL_SOURCE_LINE (TYPE_MAIN_DECL (t));
+  else if (TREE_CODE (t) == OVERLOAD)
+    line = DECL_SOURCE_LINE (OVL_FUNCTION (t));
   else
     line = DECL_SOURCE_LINE (t);
 
index 71fd08b1d4c34078a463617b9cccfbaf22a6d59b..062620367154429c8ec3a6c4acd51e5c4b2d7611 100644 (file)
@@ -1377,14 +1377,17 @@ build_member_call (type, name, parmlist)
     return build_x_function_call (lookup_namespace_name (type, name),
                                  parmlist, current_class_ref);
 
-  if (TREE_CODE (name) != TEMPLATE_ID_EXPR)
-    method_name = name;
-  else
+  if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
     {
       method_name = TREE_OPERAND (name, 0);
+      if (TREE_CODE (method_name) == COMPONENT_REF)
+       method_name = TREE_OPERAND (method_name, 1);
       if (is_overloaded_fn (method_name))
        method_name = DECL_NAME (OVL_CURRENT (method_name));
+      TREE_OPERAND (name, 0) = method_name;
     }
+  else
+    method_name = name;
 
   if (TREE_CODE (method_name) == BIT_NOT_EXPR)
     {
index 81e99d8cd04194a70f1857a1fc60fde578537d73..4d68ba97bf4ff10a3092ad7a995203f3adb8ae66 100644 (file)
@@ -2878,15 +2878,13 @@ do_identifier (token, parsing, args)
 
   /* Remember that this name has been used in the class definition, as per
      [class.scope0] */
-  if (id && current_class_type && parsing
-      && TYPE_BEING_DEFINED (current_class_type)
-      && ! IDENTIFIER_CLASS_VALUE (token)
+  if (id && parsing
       /* Avoid breaking if we get called for a default argument that
         refers to an overloaded method.  Eventually this will not be
         necessary, since default arguments shouldn't be parsed until
         after the class is complete.  (jason 3/12/97) */
       && TREE_CODE (id) != OVERLOAD)
-    pushdecl_class_level (id);
+    maybe_note_name_used_in_class (token, id);
 
   if (id == error_mark_node)
     {
index ecfa82c4012353104714908bc509c77e835dfffe..d0bbf1546f68f69cf024ec34209f10ed5108fcb7 100644 (file)
@@ -1916,11 +1916,16 @@ hack_identifier (value, name)
       TREE_USED (value) = 1;
       value = build_component_ref (current_class_ref, name, NULL_TREE, 1);
     }
-  else if (TREE_CODE (value) == FUNCTION_DECL
-          && DECL_FUNCTION_MEMBER_P (value))
+  else if ((TREE_CODE (value) == FUNCTION_DECL
+           && DECL_FUNCTION_MEMBER_P (value))
+          || (TREE_CODE (value) == OVERLOAD
+              && DECL_FUNCTION_MEMBER_P (OVL_CURRENT (value))))
     {
       tree decl;
 
+      if (TREE_CODE (value) == OVERLOAD)
+       value = OVL_CURRENT (value);
+
       if (IS_SIGNATURE (DECL_CLASS_CONTEXT (value)))
        return value;
 
@@ -1928,19 +1933,7 @@ hack_identifier (value, name)
       value = build_component_ref (decl, name, NULL_TREE, 1);
     }
   else if (really_overloaded_fn (value))
-    {
-#if 0
-      tree t = get_first_fn (value);
-      for (; t; t = DECL_CHAIN (t))
-       {
-         if (TREE_CODE (t) == TEMPLATE_DECL)
-           continue;
-
-         assemble_external (t);
-         TREE_USED (t) = 1;
-       }
-#endif
-    }
+    ;
   else if (TREE_CODE (value) == OVERLOAD)
     /* not really overloaded function */
     mark_used (OVL_FUNCTION (value));
index 6e3b2111f26f356d475b76d035e4b8dedd12e69d..6eedc518e86ad13482439ae149177380d0cf468c 100644 (file)
@@ -310,11 +310,11 @@ static const short yyprhs[] = {     0,
   1498,  1503,  1505,  1507,  1511,  1516,  1520,  1526,  1528,  1533,
   1537,  1541,  1542,  1546,  1550,  1554,  1555,  1558,  1561,  1562,
   1570,  1575,  1576,  1583,  1587,  1590,  1593,  1596,  1597,  1598,
-  1608,  1610,  1611,  1613,  1614,  1616,  1618,  1621,  1624,  1627,
-  1630,  1633,  1636,  1639,  1642,  1645,  1649,  1654,  1658,  1661,
-  1665,  1667,  1668,  1672,  1673,  1677,  1680,  1682,  1684,  1685,
-  1688,  1692,  1694,  1699,  1701,  1705,  1707,  1709,  1714,  1719,
-  1722,  1725,  1729,  1733,  1735,  1736,  1738,  1742,  1745,  1748,
+  1599,  1610,  1612,  1613,  1615,  1616,  1618,  1620,  1623,  1626,
+  1629,  1632,  1635,  1638,  1641,  1644,  1647,  1651,  1656,  1660,
+  1663,  1667,  1669,  1670,  1674,  1675,  1679,  1682,  1684,  1686,
+  1687,  1690,  1694,  1696,  1701,  1703,  1707,  1709,  1711,  1716,
+  1721,  1724,  1727,  1731,  1735,  1736,  1738,  1742,  1745,  1748,
   1750,  1753,  1756,  1759,  1762,  1765,  1768,  1771,  1773,  1776,
   1779,  1783,  1786,  1789,  1794,  1799,  1802,  1804,  1810,  1815,
   1817,  1818,  1820,  1824,  1825,  1827,  1831,  1833,  1835,  1837,
@@ -368,8 +368,8 @@ static const short yyrhs[] = {    -1,
     54,     0,   209,     0,   313,     0,   327,   313,     0,   327,
    209,     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,   268,   137,     0,
-    45,   137,     0,   134,   268,   137,     0,   138,     0,   138,
+   136,    59,   140,     0,   163,     0,     0,   269,   137,     0,
+    45,   137,     0,   134,   269,   137,     0,   138,     0,   138,
     64,   225,     0,   390,     0,   390,    64,   204,     0,   139,
      0,   139,    64,   184,     0,   134,   142,     0,   134,     1,
      0,   148,   147,     0,   143,     0,   141,     0,   133,   116,
@@ -435,7 +435,7 @@ static const short yyrhs[] = {    -1,
     58,   199,   196,   109,     0,    93,   196,   108,     0,    47,
      0,    93,   232,   108,     0,    64,   254,     0,    93,   225,
    108,     0,   202,    93,   225,   108,     0,   197,     0,   202,
-   197,     0,   202,    58,   255,   266,   109,     0,   203,     0,
+   197,     0,   202,    58,   255,   267,   109,     0,   203,     0,
    204,    83,   204,     0,   204,    84,   204,     0,   204,    78,
    204,     0,   204,    79,   204,     0,   204,    80,   204,     0,
    204,    81,   204,     0,   204,    82,   204,     0,   204,    76,
@@ -509,24 +509,24 @@ static const short yyrhs[] = {    -1,
    337,     0,   256,   146,   361,     0,   256,   146,     1,     0,
      0,   258,   257,   147,     0,   102,   204,   107,     0,   102,
      1,   107,     0,     0,   260,   259,     0,   260,     1,     0,
-     0,    14,   163,    58,   262,   296,   267,   109,     0,    14,
-   163,    58,   109,     0,     0,    14,    58,   263,   296,   267,
+     0,    14,   163,    58,   262,   296,   268,   109,     0,    14,
+   163,    58,   109,     0,     0,    14,    58,   263,   296,   268,
    109,     0,    14,    58,   109,     0,    14,   163,     0,    14,
-   325,     0,    45,   320,     0,     0,     0,   276,   282,   283,
-   109,   246,   264,   260,   265,   258,     0,   276,     0,     0,
-    59,     0,     0,    59,     0,    36,     0,   268,     7,     0,
-   268,     8,     0,   268,     9,     0,   268,    36,     0,   268,
-   247,     0,   268,   163,     0,   268,   165,     0,   269,    58,
-     0,   269,    62,     0,   268,   318,   163,     0,   268,   327,
-   318,   163,     0,   268,   327,   163,     0,   268,   178,     0,
-   268,   318,   178,     0,   269,     0,     0,   270,   273,   277,
-     0,     0,   271,   274,   277,     0,   268,    58,     0,   275,
-     0,   272,     0,     0,    62,   391,     0,    62,   391,   278,
-     0,   279,     0,   278,    59,   391,   279,     0,   280,     0,
-   281,   391,   280,     0,   320,     0,   305,     0,    30,    93,
-   186,   108,     0,    30,    93,   225,   108,     0,    37,   391,
-     0,     7,   391,     0,   281,    37,   391,     0,   281,     7,
-   391,     0,    58,     0,     0,   285,     0,   283,   284,   285,
+   325,     0,    45,   320,     0,     0,     0,     0,   277,    58,
+   264,   283,   109,   246,   265,   260,   266,   258,     0,   277,
+     0,     0,    59,     0,     0,    59,     0,    36,     0,   269,
+     7,     0,   269,     8,     0,   269,     9,     0,   269,    36,
+     0,   269,   247,     0,   269,   163,     0,   269,   165,     0,
+   270,    58,     0,   270,    62,     0,   269,   318,   163,     0,
+   269,   327,   318,   163,     0,   269,   327,   163,     0,   269,
+   178,     0,   269,   318,   178,     0,   270,     0,     0,   271,
+   274,   278,     0,     0,   272,   275,   278,     0,   269,    58,
+     0,   276,     0,   273,     0,     0,    62,   391,     0,    62,
+   391,   279,     0,   280,     0,   279,    59,   391,   280,     0,
+   281,     0,   282,   391,   281,     0,   320,     0,   305,     0,
+    30,    93,   186,   108,     0,    30,    93,   225,   108,     0,
+    37,   391,     0,     7,   391,     0,   282,    37,   391,     0,
+   282,     7,   391,     0,     0,   285,     0,   283,   284,   285,
      0,   283,   284,     0,    37,    62,     0,   286,     0,   285,
    286,     0,   287,    60,     0,   287,   109,     0,   156,    62,
      0,   156,    95,     0,   156,    25,     0,   156,    58,     0,
@@ -691,47 +691,47 @@ static const short yyrline[] = { 0,
   1999,  2000,  2001,  2005,  2008,  2012,  2015,  2021,  2023,  2026,
   2029,  2032,  2038,  2041,  2044,  2046,  2048,  2052,  2058,  2066,
   2073,  2077,  2079,  2084,  2087,  2090,  2092,  2094,  2098,  2103,
-  2110,  2114,  2118,  2125,  2129,  2132,  2135,  2141,  2153,  2157,
-  2162,  2182,  2184,  2187,  2189,  2194,  2196,  2198,  2200,  2202,
-  2204,  2208,  2216,  2219,  2221,  2225,  2231,  2236,  2241,  2243,
-  2247,  2250,  2254,  2260,  2266,  2291,  2297,  2299,  2302,  2305,
-  2307,  2311,  2313,  2317,  2322,  2328,  2331,  2332,  2353,  2376,
-  2378,  2382,  2393,  2407,  2412,  2413,  2414,  2415,  2418,  2433,
-  2438,  2444,  2446,  2451,  2453,  2455,  2457,  2459,  2461,  2464,
-  2474,  2481,  2506,  2512,  2515,  2518,  2520,  2531,  2536,  2539,
-  2544,  2547,  2554,  2564,  2567,  2574,  2584,  2586,  2589,  2591,
-  2594,  2601,  2609,  2616,  2622,  2628,  2636,  2640,  2645,  2649,
-  2652,  2661,  2663,  2667,  2670,  2675,  2679,  2685,  2696,  2699,
-  2703,  2707,  2715,  2720,  2726,  2729,  2731,  2733,  2739,  2742,
-  2744,  2746,  2748,  2752,  2755,  2773,  2783,  2785,  2786,  2790,
-  2795,  2798,  2800,  2802,  2804,  2808,  2814,  2816,  2824,  2827,
-  2829,  2831,  2833,  2837,  2840,  2843,  2845,  2847,  2849,  2853,
-  2856,  2859,  2861,  2863,  2865,  2867,  2874,  2878,  2883,  2887,
-  2892,  2894,  2898,  2901,  2903,  2906,  2908,  2909,  2912,  2914,
-  2916,  2922,  2937,  2943,  2949,  2963,  2965,  2969,  2983,  2985,
-  2987,  2991,  2997,  3010,  3012,  3016,  3029,  3035,  3037,  3038,
-  3039,  3047,  3052,  3061,  3062,  3066,  3069,  3075,  3081,  3084,
-  3086,  3088,  3090,  3094,  3098,  3102,  3105,  3110,  3113,  3115,
-  3117,  3119,  3121,  3123,  3125,  3127,  3131,  3135,  3139,  3143,
-  3144,  3146,  3148,  3150,  3152,  3154,  3156,  3158,  3160,  3168,
-  3170,  3171,  3172,  3175,  3181,  3183,  3188,  3190,  3193,  3207,
-  3210,  3213,  3217,  3220,  3227,  3229,  3232,  3234,  3236,  3239,
-  3242,  3245,  3248,  3250,  3253,  3257,  3259,  3265,  3267,  3268,
-  3270,  3275,  3277,  3279,  3281,  3283,  3286,  3287,  3289,  3292,
-  3293,  3296,  3296,  3299,  3299,  3302,  3302,  3304,  3306,  3308,
-  3310,  3316,  3322,  3325,  3328,  3334,  3336,  3338,  3342,  3344,
-  3345,  3346,  3348,  3351,  3358,  3363,  3369,  3373,  3375,  3378,
-  3380,  3383,  3387,  3389,  3392,  3394,  3397,  3414,  3420,  3428,
-  3430,  3432,  3436,  3439,  3440,  3448,  3452,  3456,  3459,  3460,
-  3466,  3469,  3472,  3474,  3478,  3483,  3486,  3496,  3501,  3502,
-  3509,  3512,  3515,  3517,  3520,  3522,  3532,  3546,  3550,  3553,
-  3555,  3559,  3563,  3566,  3569,  3571,  3575,  3577,  3584,  3591,
-  3594,  3598,  3602,  3606,  3612,  3616,  3621,  3623,  3626,  3631,
-  3637,  3648,  3651,  3653,  3657,  3662,  3664,  3671,  3674,  3676,
-  3678,  3684,  3689,  3692,  3694,  3696,  3698,  3700,  3702,  3704,
-  3706,  3708,  3710,  3712,  3714,  3716,  3718,  3720,  3722,  3724,
-  3726,  3728,  3730,  3732,  3734,  3736,  3738,  3740,  3742,  3744,
-  3746,  3748,  3750,  3752,  3754,  3757,  3759
+  2110,  2114,  2118,  2125,  2129,  2132,  2135,  2141,  2143,  2154,
+  2158,  2163,  2183,  2185,  2188,  2190,  2195,  2197,  2199,  2201,
+  2203,  2205,  2209,  2217,  2220,  2222,  2226,  2232,  2237,  2242,
+  2244,  2248,  2251,  2255,  2261,  2267,  2292,  2298,  2300,  2303,
+  2306,  2308,  2312,  2314,  2318,  2323,  2329,  2332,  2333,  2354,
+  2377,  2379,  2383,  2394,  2408,  2409,  2410,  2411,  2414,  2429,
+  2434,  2440,  2442,  2447,  2449,  2451,  2453,  2455,  2457,  2460,
+  2470,  2477,  2502,  2508,  2511,  2514,  2516,  2527,  2532,  2535,
+  2540,  2543,  2550,  2560,  2563,  2570,  2580,  2582,  2585,  2587,
+  2590,  2597,  2605,  2612,  2618,  2624,  2632,  2636,  2641,  2645,
+  2648,  2657,  2659,  2663,  2666,  2671,  2675,  2681,  2692,  2695,
+  2699,  2703,  2711,  2716,  2722,  2725,  2727,  2729,  2735,  2738,
+  2740,  2742,  2744,  2748,  2751,  2762,  2772,  2774,  2775,  2779,
+  2784,  2787,  2789,  2791,  2793,  2797,  2803,  2805,  2813,  2816,
+  2818,  2820,  2822,  2826,  2829,  2832,  2834,  2836,  2838,  2842,
+  2845,  2848,  2850,  2852,  2854,  2856,  2863,  2867,  2872,  2876,
+  2881,  2883,  2887,  2890,  2892,  2895,  2897,  2898,  2901,  2903,
+  2905,  2911,  2921,  2927,  2933,  2947,  2949,  2953,  2967,  2969,
+  2971,  2975,  2981,  2994,  2996,  3000,  3013,  3019,  3021,  3022,
+  3023,  3031,  3036,  3045,  3046,  3050,  3053,  3059,  3065,  3068,
+  3070,  3072,  3074,  3078,  3082,  3086,  3089,  3094,  3097,  3099,
+  3101,  3103,  3105,  3107,  3109,  3111,  3115,  3119,  3123,  3127,
+  3128,  3130,  3132,  3134,  3136,  3138,  3140,  3142,  3144,  3152,
+  3154,  3155,  3156,  3159,  3165,  3167,  3172,  3174,  3177,  3191,
+  3194,  3197,  3201,  3204,  3211,  3213,  3216,  3218,  3220,  3223,
+  3226,  3229,  3232,  3234,  3237,  3241,  3243,  3249,  3251,  3252,
+  3254,  3259,  3261,  3263,  3265,  3267,  3270,  3271,  3273,  3276,
+  3277,  3280,  3280,  3283,  3283,  3286,  3286,  3288,  3290,  3292,
+  3294,  3300,  3306,  3309,  3312,  3318,  3320,  3322,  3326,  3328,
+  3329,  3330,  3332,  3335,  3342,  3347,  3353,  3357,  3359,  3362,
+  3364,  3367,  3371,  3373,  3376,  3378,  3381,  3398,  3404,  3412,
+  3414,  3416,  3420,  3423,  3424,  3432,  3436,  3440,  3443,  3444,
+  3450,  3453,  3456,  3458,  3462,  3467,  3470,  3480,  3485,  3486,
+  3493,  3496,  3499,  3501,  3504,  3506,  3516,  3530,  3534,  3537,
+  3539,  3543,  3547,  3550,  3553,  3555,  3559,  3561,  3568,  3575,
+  3578,  3582,  3586,  3590,  3596,  3600,  3605,  3607,  3610,  3615,
+  3621,  3632,  3635,  3637,  3641,  3646,  3648,  3655,  3658,  3660,
+  3662,  3668,  3673,  3676,  3678,  3680,  3682,  3684,  3686,  3688,
+  3690,  3692,  3694,  3696,  3698,  3700,  3702,  3704,  3706,  3708,
+  3710,  3712,  3714,  3716,  3718,  3720,  3722,  3724,  3726,  3728,
+  3730,  3732,  3734,  3736,  3738,  3741,  3743
 };
 #endif
 
@@ -778,32 +778,32 @@ static const char * const yytname[] = {   "$","error","$undefined.","IDENTIFIER"
 "notype_initdcl0","nomods_initdcl0","@25","maybe_attribute","attributes","attribute",
 "attribute_list","attrib","any_word","identifiers_or_typenames","maybe_init",
 "init","initlist","fn.defpen","pending_inline","pending_inlines","defarg_again",
-"pending_defargs","structsp","@26","@27","@28","@29","maybecomma","maybecomma_warn",
+"pending_defargs","structsp","@26","@27","@28","@29","@30","maybecomma","maybecomma_warn",
 "aggr","named_class_head_sans_basetype","named_class_head_sans_basetype_defn",
-"named_complex_class_head_sans_basetype","named_class_head","@30","@31","unnamed_class_head",
+"named_complex_class_head_sans_basetype","named_class_head","@31","@32","unnamed_class_head",
 "class_head","maybe_base_class_list","base_class_list","base_class","base_class.1",
-"base_class_access_list","left_curly","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","maybe_parmlist","after_type_declarator","nonnested_type",
-"complete_type_name","nested_type","direct_after_type_declarator","notype_declarator_intern",
-"notype_declarator","complex_notype_declarator","complex_direct_notype_declarator",
-"qualified_id","notype_qualified_id","overqualified_id","functional_cast","type_name",
-"nested_name_specifier","nested_name_specifier_1","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","@32","simple_if","@33","@34","implicitly_scoped_stmt",
-"@35","stmt","simple_stmt","@36","@37","@38","@39","@40","@41","@42","@43","@44",
-"@45","@46","@47","@48","@49","function_try_block","@50","@51","try_block","@52",
-"@53","handler_seq","handler","@54","@55","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","@56","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
+"base_class_access_list","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",
+"maybe_parmlist","after_type_declarator","nonnested_type","complete_type_name",
+"nested_type","direct_after_type_declarator","notype_declarator_intern","notype_declarator",
+"complex_notype_declarator","complex_direct_notype_declarator","qualified_id",
+"notype_qualified_id","overqualified_id","functional_cast","type_name","nested_name_specifier",
+"nested_name_specifier_1","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",
+"@33","simple_if","@34","@35","implicitly_scoped_stmt","@36","stmt","simple_stmt",
+"@37","@38","@39","@40","@41","@42","@43","@44","@45","@46","@47","@48","@49",
+"@50","function_try_block","@51","@52","try_block","@53","@54","handler_seq",
+"handler","@55","@56","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","@57","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
 };
 #endif
 
@@ -855,12 +855,12 @@ static const short yyr1[] = {     0,
    251,   251,   251,   252,   252,   253,   253,   254,   254,   254,
    254,   254,   255,   255,   255,   255,   255,   256,   257,   257,
    257,   258,   258,   259,   259,   260,   260,   260,   262,   261,
-   261,   263,   261,   261,   261,   261,   261,   264,   265,   261,
-   261,   266,   266,   267,   267,   268,   268,   268,   268,   268,
-   268,   269,   270,   270,   270,   271,   271,   271,   271,   271,
-   272,   273,   272,   274,   272,   275,   276,   276,   277,   277,
-   277,   278,   278,   279,   279,   280,   280,   280,   280,   281,
-   281,   281,   281,   282,   283,   283,   283,   283,   284,   285,
+   261,   263,   261,   261,   261,   261,   261,   264,   265,   266,
+   261,   261,   267,   267,   268,   268,   269,   269,   269,   269,
+   269,   269,   270,   271,   271,   271,   272,   272,   272,   272,
+   272,   273,   274,   273,   275,   273,   276,   277,   277,   278,
+   278,   278,   279,   279,   280,   280,   281,   281,   281,   281,
+   282,   282,   282,   282,   283,   283,   283,   283,   284,   285,
    285,   286,   286,   286,   286,   286,   286,   286,   286,   286,
    286,   287,   287,   287,   287,   287,   287,   287,   287,   287,
    288,   288,   288,   289,   289,   289,   290,   290,   291,   291,
@@ -946,12 +946,12 @@ static const short yyr2[] = {     0,
      1,     1,     1,     1,     3,     0,     2,     1,     2,     3,
      4,     1,     1,     3,     4,     3,     5,     1,     4,     3,
      3,     0,     3,     3,     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,
-     1,     0,     3,     0,     3,     2,     1,     1,     0,     2,
-     3,     1,     4,     1,     3,     1,     1,     4,     4,     2,
-     2,     3,     3,     1,     0,     1,     3,     2,     2,     1,
+     4,     0,     6,     3,     2,     2,     2,     0,     0,     0,
+    10,     1,     0,     1,     0,     1,     1,     2,     2,     2,
+     2,     2,     2,     2,     2,     2,     3,     4,     3,     2,
+     3,     1,     0,     3,     0,     3,     2,     1,     1,     0,
+     2,     3,     1,     4,     1,     3,     1,     1,     4,     4,
+     2,     2,     3,     3,     0,     1,     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,
@@ -991,13 +991,13 @@ static const short yyr2[] = {     0,
 
 static const short yydefact[] = {     3,
     12,    12,     5,     0,     4,     0,   281,   636,   637,     0,
-   388,   400,   581,     0,    11,     0,     0,     0,    10,   486,
+   388,   400,   581,     0,    11,     0,     0,     0,    10,   487,
    842,     0,     0,     0,   167,   668,   282,   283,    83,     0,
      0,   829,     0,    45,     0,     0,    13,    25,     0,    27,
      8,     0,    16,    15,    89,   110,    86,     0,   638,   171,
    302,   279,   303,   614,     0,   375,     0,   374,   393,     0,
-   413,   392,   430,   399,     0,   501,   502,   504,   508,   507,
-   481,   387,   597,   401,   598,   108,   301,   625,   595,     0,
+   413,   392,   430,   399,     0,   502,   503,   505,   509,   508,
+   482,   387,   597,   401,   598,   108,   301,   625,   595,     0,
    639,   579,     0,     0,   280,    81,    82,   178,   642,   178,
    643,   178,   284,   167,   140,   141,   142,   143,   144,   472,
    475,     0,   664,     0,   476,     0,     0,     0,     0,   141,
@@ -1012,2315 +1012,2296 @@ static const short yydefact[] = {     3,
    579,    80,     0,     0,     0,   106,     0,   409,   365,   594,
    366,   606,     0,   579,   390,   389,    78,   109,   376,     0,
    411,   391,   107,   382,   406,   407,   377,   395,   397,   386,
-   408,     0,    75,   431,   487,   488,   489,   490,   506,   149,
-   148,   150,   492,   493,   172,   499,   491,     0,     0,   494,
-   495,   509,   509,   524,     0,   582,   394,     0,   425,   637,
-     0,   666,   171,   629,   630,   626,   600,   640,     0,   599,
-   596,     0,   877,   873,   872,   870,   852,   857,   858,     0,
-   864,   863,   849,   850,   848,   867,   856,   853,   854,   855,
-   859,   860,   846,   847,   843,   844,   845,   869,   861,   862,
-   851,   868,     0,   865,   775,   393,   776,   838,   284,   281,
-   581,   306,   354,     0,     0,     0,     0,   350,   348,   321,
-   352,   353,     0,     0,     0,     0,     0,   282,   283,   275,
-     0,     0,   186,   185,     0,   187,   188,     0,     0,   189,
-     0,     0,   179,   180,     0,   249,     0,   252,   184,   305,
-   215,     0,     0,   307,   308,     0,   182,   372,   393,   373,
-   631,   333,   323,     0,     0,     0,     0,   178,     0,   474,
-     0,   469,     0,   665,   663,     0,   190,   191,     0,     0,
-     0,   435,     3,    21,    29,   660,   656,   657,   659,   661,
-   658,   140,   141,   142,     0,   143,   144,   648,   649,   653,
-   650,   647,     0,   291,   292,   290,   628,   627,    33,    32,
-    49,     0,   157,     0,     0,   393,   155,     0,     0,   608,
-   610,     0,   609,   141,   142,   277,   278,   297,     0,   618,
-   296,     0,   617,     0,   304,   282,   283,     0,     0,     0,
-   295,   294,   622,     0,     0,    12,     0,   167,     9,     9,
-    70,     0,    65,     0,     0,    71,    74,     0,   427,   429,
-   122,    93,   127,   764,     0,    85,    84,    92,   125,     0,
-     0,   123,    88,   624,     0,     0,   587,     0,   832,     0,
-   592,     0,   591,     0,     0,     0,     0,   579,   428,     0,
-    77,   583,   579,   605,     0,   379,   380,     0,    76,   428,
-   384,   383,   385,   378,   398,   415,   414,   178,   496,   500,
-   498,     0,   829,   503,   505,   547,   637,     0,   538,     0,
-     0,   550,     0,   121,   116,     0,   171,   551,   554,     0,
-     0,   530,     0,   119,   396,   428,   579,    94,     0,     0,
-     0,     0,   579,   100,   580,   613,   637,   667,   171,     0,
-     0,   866,   871,   395,   579,   579,     0,   579,   876,   178,
-     0,     0,     0,   222,     0,     0,   224,   237,   238,     0,
-     0,     0,     0,     0,   276,   221,   218,   217,   219,     0,
-     0,     0,     0,     0,   305,     0,     0,     0,   216,   176,
-   177,   299,     0,   220,     0,     0,   250,     0,     0,     0,
+   408,     0,    75,   431,   488,   489,   490,   491,   507,   149,
+   148,   150,   493,   494,   172,   500,   492,     0,     0,   495,
+   496,   510,   510,   478,   582,   394,     0,   425,   637,     0,
+   666,   171,   629,   630,   626,   600,   640,     0,   599,   596,
+     0,   877,   873,   872,   870,   852,   857,   858,     0,   864,
+   863,   849,   850,   848,   867,   856,   853,   854,   855,   859,
+   860,   846,   847,   843,   844,   845,   869,   861,   862,   851,
+   868,     0,   865,   775,   393,   776,   838,   284,   281,   581,
+   306,   354,     0,     0,     0,     0,   350,   348,   321,   352,
+   353,     0,     0,     0,     0,     0,   282,   283,   275,     0,
+     0,   186,   185,     0,   187,   188,     0,     0,   189,     0,
+     0,   179,   180,     0,   249,     0,   252,   184,   305,   215,
+     0,     0,   307,   308,     0,   182,   372,   393,   373,   631,
+   333,   323,     0,     0,     0,     0,   178,     0,   474,     0,
+   469,     0,   665,   663,     0,   190,   191,     0,     0,     0,
+   435,     3,    21,    29,   660,   656,   657,   659,   661,   658,
+   140,   141,   142,     0,   143,   144,   648,   649,   653,   650,
+   647,     0,   291,   292,   290,   628,   627,    33,    32,    49,
+     0,   157,     0,     0,   393,   155,     0,     0,   608,   610,
+     0,   609,   141,   142,   277,   278,   297,     0,   618,   296,
+     0,   617,     0,   304,   282,   283,     0,     0,     0,   295,
+   294,   622,     0,     0,    12,     0,   167,     9,     9,    70,
+     0,    65,     0,     0,    71,    74,     0,   427,   429,   122,
+    93,   127,   764,     0,    85,    84,    92,   125,     0,     0,
+   123,    88,   624,     0,     0,   587,     0,   832,     0,   592,
+     0,   591,     0,     0,     0,     0,   579,   428,     0,    77,
+   583,   579,   605,     0,   379,   380,     0,    76,   428,   384,
+   383,   385,   378,   398,   415,   414,   178,   497,   501,   499,
+     0,   829,   504,   506,     0,   396,   428,   579,    94,     0,
+     0,     0,     0,   579,   100,   580,   613,   637,   667,   171,
+     0,     0,   866,   871,   395,   579,   579,     0,   579,   876,
+   178,     0,     0,     0,   222,     0,     0,   224,   237,   238,
+     0,     0,     0,     0,     0,   276,   221,   218,   217,   219,
+     0,     0,     0,     0,     0,   305,     0,     0,     0,   216,
+   176,   177,   299,     0,   220,     0,     0,   250,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   315,
-     0,   317,   319,   320,   358,   357,     0,     0,   240,   240,
-     0,   226,   577,     0,   234,   355,   347,     0,     0,   829,
-   336,   339,   340,     0,     0,   367,   685,   681,   690,     0,
-   583,   579,   579,   579,   369,   688,     0,   635,   371,     0,
-     0,   370,   335,     0,   330,   349,   331,   351,   632,     0,
-   332,   175,   175,     0,   165,     0,   393,   163,   574,   484,
-   572,   471,     0,     0,   402,     0,     0,   403,   404,   405,
-   441,   442,   443,   440,     0,   433,   436,     0,     3,     0,
-   651,   178,   654,     0,    41,    42,     0,    53,     0,     0,
-    57,    61,    50,   828,   823,     0,   372,   393,    53,   373,
-   827,    59,   168,   153,   151,   168,   175,   300,   616,   615,
-   304,     0,   619,     0,    18,    20,    89,     9,     9,    73,
-    72,     0,   128,   356,     0,   712,    91,   710,   452,     0,
-   448,   447,   214,     0,   213,   584,   623,     0,   805,     0,
-   800,   393,     0,   799,   801,   830,   812,     0,     0,   621,
-   590,   589,     0,     0,   604,     0,   423,   422,   410,   603,
-     0,   832,   593,   381,   412,   424,   428,     0,   497,   510,
-   579,   798,   546,   539,   551,   540,   428,   428,   536,   537,
-   534,   535,   579,   798,   281,   636,     0,   415,   117,   542,
-   552,   557,   558,   415,   415,     0,     0,   415,   115,   543,
-   555,   415,     0,   428,     0,   531,   532,   533,   428,   426,
-   832,   798,   178,   178,   641,   178,   832,   798,   579,    97,
-   579,   103,   875,   874,   838,   838,   838,     0,     0,     0,
-     0,   635,     0,     0,     0,     0,   393,     0,     0,     0,
-   311,     0,   309,   310,     0,   247,   181,   281,   636,   637,
-   282,   283,     0,     0,   453,   482,     0,   274,   273,   790,
-   789,     0,   271,   270,   268,   269,   267,   266,   265,   262,
-   263,   264,   260,   261,   255,   256,   257,   258,   259,   253,
-   254,     0,     0,     0,     0,     0,   240,   228,   244,     0,
-     0,   227,   579,   579,     0,   579,   576,   675,     0,     0,
-     0,     0,     0,   338,     0,   342,     0,   344,     0,   684,
-   683,   680,   679,   828,     0,     0,   699,     0,     0,   832,
-   368,   832,   686,   579,   798,   583,   685,   681,     0,     0,
-   579,     0,   392,     0,     0,     0,     0,   170,   174,   285,
-   168,   161,   159,   168,     0,   485,     0,   484,   212,   211,
-   210,   209,   435,     0,     0,    24,     0,     0,   655,     0,
-    38,    44,    43,    55,    52,    53,     0,    48,     0,     0,
-   685,   681,     0,   819,   579,   822,   824,     0,   820,   821,
-    54,   492,     0,   158,   168,   168,   156,   169,   298,    17,
-    19,    69,    89,   416,   145,   636,   637,   133,   146,   147,
-     0,   126,   129,     0,   638,     0,     0,     0,     0,   711,
-   705,   449,     0,   124,   588,   585,   804,   818,   807,     0,
-   586,   803,   817,   806,   802,   831,   814,   825,   815,   808,
-   813,   834,     0,   420,   602,   601,   419,   175,   829,     0,
-   829,   511,   512,   514,   829,   517,   516,   832,     0,   541,
-   446,   446,   832,     0,     0,     0,   428,   428,     0,   428,
-   428,     0,   428,     0,   529,   478,     0,   446,    96,     0,
-     0,     0,     0,   102,     0,   832,   798,   832,   798,   840,
-   839,   841,   286,   322,   223,   225,   328,   329,     0,     0,
-     0,     0,   310,   313,     0,     0,     0,     0,   248,     0,
-   314,   316,   318,     0,     0,     0,     0,   229,   246,     0,
-     0,   672,   670,     0,   673,   583,   235,     0,     0,   178,
-   345,     0,     0,     0,   682,   678,   689,   579,   698,   696,
-   697,   687,   832,     0,   694,     0,   633,   634,     0,   334,
-   166,   168,   168,   164,   575,   573,   473,     0,   434,   432,
-   281,     0,    22,    30,   662,    56,    51,    58,    62,   684,
-   680,   685,   681,     0,   595,     0,   579,   686,    60,   154,
-   152,    68,     0,   131,     0,   135,     0,   137,     0,   139,
-     0,   765,     0,   202,   713,     0,   706,   707,     0,   450,
-   685,   681,     0,   305,     0,   631,   826,     0,     0,   835,
-   836,     0,     0,   417,   173,   521,     0,   520,   829,   829,
-   829,     0,   112,   579,   545,   549,   114,   579,   428,   428,
-   566,   446,   281,   636,     0,   553,   559,   560,   415,   415,
-   446,   446,     0,   446,   556,   466,   544,   579,   288,   287,
-   289,   579,    99,     0,   105,     0,     0,     0,     0,     0,
-     0,   456,     0,   454,   251,   272,   242,   241,   239,   230,
-     0,   243,   245,   671,   669,   676,   674,     0,   236,     0,
-     0,   337,   341,   343,   832,   692,   579,   693,   162,   160,
-   470,     0,   437,   439,   684,   680,   600,   686,   132,   130,
-     0,     0,     0,     0,   444,     0,     0,   281,   636,   637,
-   714,   727,   730,   733,   738,     0,     0,     0,     0,     0,
-     0,     0,     0,   282,   759,   767,     0,   786,   763,   762,
-   761,     0,   722,     0,     0,   393,     0,   701,   720,   726,
-   700,   721,   760,     0,   708,   451,     0,   634,   816,   810,
-   811,   809,     0,   833,   421,     0,     0,     0,     0,   523,
-   522,   515,   832,   832,   565,   562,   564,     0,     0,   428,
-   428,   428,   561,   563,   548,     0,   832,   832,   579,   579,
-     0,     0,     0,     0,   455,     0,     0,   231,   232,   677,
-   346,   287,   695,   832,     0,   134,   136,   138,   772,   766,
-   770,     0,   709,   704,   205,   779,   781,   782,     0,     0,
-   718,     0,     0,     0,   745,   747,   748,   749,     0,     0,
-     0,     0,     0,     0,     0,   780,     0,   364,   787,     0,
-   723,   362,   415,     0,   363,     0,   415,     0,     0,     0,
-   203,   703,   702,   724,   758,   757,   310,   837,   418,   518,
-   519,   513,   111,   113,   428,   428,   571,   446,   446,   468,
-     0,   467,   462,    95,   101,   832,   832,   324,   325,   326,
-   327,   457,     0,   233,   691,   438,     0,   771,   445,   194,
-     0,   715,   728,   717,     0,     0,     0,     0,     0,   741,
-     0,   750,     0,   756,    39,   144,    34,   144,     0,    35,
-   768,     0,   360,   361,     0,     0,     0,   359,   204,   718,
-   570,   568,   567,   569,     0,     0,   480,    98,   104,   578,
-     0,   773,   201,     0,   393,     0,   718,     0,   731,   719,
-   705,   784,   734,     0,     0,     0,     0,   746,   755,    40,
-    36,     0,     0,   725,   465,   464,   458,    86,    89,     0,
-     0,     0,   195,   415,   716,   206,   729,   208,     0,   785,
-     0,   783,   739,   743,   742,   769,   791,     0,     0,   463,
-   777,   778,   774,   428,   705,   192,     0,     0,   198,     0,
-   197,   718,     0,     0,     0,   792,   793,   751,   461,     0,
-   460,     0,   207,     0,   732,   735,   740,   744,     0,   791,
-     0,     0,   459,   199,   193,     0,     0,     0,   752,   794,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   315,     0,   317,   319,   320,   358,   357,     0,     0,   240,
+   240,     0,   226,   577,     0,   234,   355,   347,     0,     0,
+   829,   336,   339,   340,     0,     0,   367,   685,   681,   690,
+     0,   583,   579,   579,   579,   369,   688,     0,   635,   371,
+     0,     0,   370,   335,     0,   330,   349,   331,   351,   632,
+     0,   332,   175,   175,     0,   165,     0,   393,   163,   574,
+   485,   572,   471,     0,     0,   402,     0,     0,   403,   404,
+   405,   441,   442,   443,   440,     0,   433,   436,     0,     3,
+     0,   651,   178,   654,     0,    41,    42,     0,    53,     0,
+     0,    57,    61,    50,   828,   823,     0,   372,   393,    53,
+   373,   827,    59,   168,   153,   151,   168,   175,   300,   616,
+   615,   304,     0,   619,     0,    18,    20,    89,     9,     9,
+    73,    72,     0,   128,   356,     0,   712,    91,   710,   452,
+     0,   448,   447,   214,     0,   213,   584,   623,     0,   805,
+     0,   800,   393,     0,   799,   801,   830,   812,     0,     0,
+   621,   590,   589,     0,     0,   604,     0,   423,   422,   410,
+   603,     0,   832,   593,   381,   412,   424,   428,     0,   498,
+   511,   547,   637,     0,   538,     0,     0,   550,     0,   121,
+   116,     0,   171,   551,   554,     0,     0,   530,     0,   119,
+   426,   832,   798,   178,   178,   641,   178,   832,   798,   579,
+    97,   579,   103,   875,   874,   838,   838,   838,     0,     0,
+     0,     0,   635,     0,     0,     0,     0,   393,     0,     0,
+     0,   311,     0,   309,   310,     0,   247,   181,   281,   636,
+   637,   282,   283,     0,     0,   453,   483,     0,   274,   273,
+   790,   789,     0,   271,   270,   268,   269,   267,   266,   265,
+   262,   263,   264,   260,   261,   255,   256,   257,   258,   259,
+   253,   254,     0,     0,     0,     0,     0,   240,   228,   244,
+     0,     0,   227,   579,   579,     0,   579,   576,   675,     0,
+     0,     0,     0,     0,   338,     0,   342,     0,   344,     0,
+   684,   683,   680,   679,   828,     0,     0,   699,     0,     0,
+   832,   368,   832,   686,   579,   798,   583,   685,   681,     0,
+     0,   579,     0,   392,     0,     0,     0,     0,   170,   174,
+   285,   168,   161,   159,   168,     0,   486,     0,   485,   212,
+   211,   210,   209,   435,     0,     0,    24,     0,     0,   655,
+     0,    38,    44,    43,    55,    52,    53,     0,    48,     0,
+     0,   685,   681,     0,   819,   579,   822,   824,     0,   820,
+   821,    54,   493,     0,   158,   168,   168,   156,   169,   298,
+    17,    19,    69,    89,   416,   145,   636,   637,   133,   146,
+   147,     0,   126,   129,     0,   638,     0,     0,     0,     0,
+   711,   705,   449,     0,   124,   588,   585,   804,   818,   807,
+     0,   586,   803,   817,   806,   802,   831,   814,   825,   815,
+   808,   813,   834,     0,   420,   602,   601,   419,   175,   829,
+     0,   829,   512,   513,   515,   829,   518,   517,   579,   798,
+   546,   539,   551,   540,   428,   428,   536,   537,   534,   535,
+   579,   798,   281,   636,     0,   415,   117,   542,   552,   557,
+   558,   415,   415,     0,     0,   415,   115,   543,   555,   415,
+     0,   428,     0,   531,   532,   533,   428,    96,     0,     0,
+     0,     0,   102,     0,   832,   798,   832,   798,   840,   839,
+   841,   286,   322,   223,   225,   328,   329,     0,     0,     0,
+     0,   310,   313,     0,     0,     0,     0,   248,     0,   314,
+   316,   318,     0,     0,     0,     0,   229,   246,     0,     0,
+   672,   670,     0,   673,   583,   235,     0,     0,   178,   345,
+     0,     0,     0,   682,   678,   689,   579,   698,   696,   697,
+   687,   832,     0,   694,     0,   633,   634,     0,   334,   166,
+   168,   168,   164,   575,   573,   473,     0,   434,   432,   281,
+     0,    22,    30,   662,    56,    51,    58,    62,   684,   680,
+   685,   681,     0,   595,     0,   579,   686,    60,   154,   152,
+    68,     0,   131,     0,   135,     0,   137,     0,   139,     0,
+   765,     0,   202,   713,     0,   706,   707,     0,   450,   685,
+   681,     0,   305,     0,   631,   826,     0,     0,   835,   836,
+     0,     0,   417,   173,   522,     0,   521,   829,   829,   829,
+     0,   832,     0,   541,   446,   446,   832,     0,     0,     0,
+   428,   428,     0,   428,   428,     0,   428,     0,   529,   479,
+     0,   446,   579,   288,   287,   289,   579,    99,     0,   105,
+     0,     0,     0,     0,     0,     0,   456,     0,   454,   251,
+   272,   242,   241,   239,   230,     0,   243,   245,   671,   669,
+   676,   674,     0,   236,     0,     0,   337,   341,   343,   832,
+   692,   579,   693,   162,   160,   470,     0,   437,   439,   684,
+   680,   600,   686,   132,   130,     0,     0,     0,     0,   444,
+     0,     0,   281,   636,   637,   714,   727,   730,   733,   738,
+     0,     0,     0,     0,     0,     0,     0,     0,   282,   759,
+   767,     0,   786,   763,   762,   761,     0,   722,     0,     0,
+   393,     0,   701,   720,   726,   700,   721,   760,     0,   708,
+   451,     0,   634,   816,   810,   811,   809,     0,   833,   421,
+     0,     0,     0,     0,   524,   523,   516,   112,   579,   545,
+   549,   114,   579,   428,   428,   566,   446,   281,   636,     0,
+   553,   559,   560,   415,   415,   446,   446,     0,   446,   556,
+   466,   544,   832,   832,   579,   579,     0,     0,     0,     0,
+   455,     0,     0,   231,   232,   677,   346,   287,   695,   832,
+     0,   134,   136,   138,   772,   766,   770,     0,   709,   704,
+   205,   779,   781,   782,     0,     0,   718,     0,     0,     0,
+   745,   747,   748,   749,     0,     0,     0,     0,     0,     0,
+     0,   780,     0,   364,   787,     0,   723,   362,   415,     0,
+   363,     0,   415,     0,     0,     0,   203,   703,   702,   724,
+   758,   757,   310,   837,   418,   519,   520,   514,   832,   832,
+   565,   562,   564,     0,     0,   428,   428,   428,   561,   563,
+   548,     0,    95,   101,   832,   832,   324,   325,   326,   327,
+   457,     0,   233,   691,   438,     0,   771,   445,   194,     0,
+   715,   728,   717,     0,     0,     0,     0,     0,   741,     0,
+   750,     0,   756,    39,   144,    34,   144,     0,    35,   768,
+     0,   360,   361,     0,     0,     0,   359,   204,   718,   111,
+   113,   428,   428,   571,   446,   446,   468,     0,   467,   462,
+    98,   104,   578,     0,   773,   201,     0,   393,     0,   718,
+     0,   731,   719,   705,   784,   734,     0,     0,     0,     0,
+   746,   755,    40,    36,     0,     0,   725,   570,   568,   567,
+   569,     0,     0,   481,     0,     0,     0,   195,   415,   716,
+   206,   729,   208,     0,   785,     0,   783,   739,   743,   742,
+   769,   791,     0,   465,   464,   458,    86,    89,   777,   778,
+   774,   428,   705,   192,     0,     0,   198,     0,   197,   718,
+     0,     0,     0,   792,   793,   751,     0,   463,     0,   207,
+     0,   732,   735,   740,   744,     0,   791,     0,     0,   461,
+     0,   460,   199,   193,     0,     0,     0,   752,   794,   459,
      0,     0,   795,     0,     0,   200,   736,   796,     0,   753,
      0,     0,     0,   737,   797,   754,     0,     0,     0
 };
 
 static const short yydefgoto[] = {  1627,
-   436,     2,   437,   165,   726,   331,   181,     3,     4,    37,
-   689,   373,  1329,   690,   512,  1330,  1331,   393,  1424,   694,
-    41,   513,   402,   700,   974,   701,   702,   703,    43,   172,
-   173,    44,   455,   184,   180,    45,    46,   822,  1087,   828,
-  1089,    47,   515,   516,   185,   186,   456,   733,  1012,  1013,
-   669,  1014,   234,    48,   996,   995,   716,   713,  1153,  1152,
-   954,   951,   136,   994,    49,   236,    50,   948,   582,   332,
-   333,   334,   335,  1332,  1578,  1482,  1580,  1524,  1611,  1195,
-  1557,  1575,   367,   940,   336,  1270,   895,   621,   902,   337,
-   338,   368,   340,   358,    52,   255,   695,   418,   154,    53,
-    54,   341,   577,   342,   343,   344,   345,   457,   346,  1333,
-   496,   643,   347,  1334,    56,   217,   706,   348,   218,   555,
-   219,   197,   210,    60,   479,   497,  1356,   767,  1213,   198,
-   211,    61,   526,   768,    62,    63,   685,   686,   687,  1306,
-   462,   865,   866,  1548,  1549,  1517,  1462,  1376,    64,   673,
-   361,  1246,  1463,  1108,   957,    65,    66,    67,    68,    69,
-   242,   243,    70,    71,   504,  1052,  1053,  1054,  1055,   245,
-   520,   815,   521,   522,   523,   800,   810,   801,  1236,   802,
-   803,  1237,  1238,   670,   671,   622,   930,   350,   465,   466,
+   435,     2,   436,   165,   707,   330,   181,     3,     4,    37,
+   670,   372,  1304,   671,   768,  1305,  1306,   392,  1410,   675,
+    41,   769,   401,   681,   935,   682,   683,   684,    43,   172,
+   173,    44,   454,   184,   180,    45,    46,   783,  1066,   789,
+  1068,    47,   771,   772,   185,   186,   455,   714,   973,   974,
+   650,   975,   234,    48,   957,   956,   697,   694,  1132,  1131,
+   915,   912,   136,   955,    49,   236,    50,   909,   563,   331,
+   332,   333,   334,  1307,  1576,  1471,  1578,  1517,  1611,  1174,
+  1552,  1573,   366,   901,   335,  1245,   856,   602,   863,   336,
+   337,   367,   339,   357,    52,   254,   676,   417,   154,    53,
+    54,   340,   558,   341,   342,   343,   344,   456,   345,  1308,
+   495,   624,   346,  1309,    56,   217,   687,   347,   218,   536,
+   219,   197,   210,    60,   478,   496,  1331,   748,  1192,   198,
+   211,    61,   507,   749,    62,    63,   666,   667,   668,  1281,
+   461,   826,   827,  1567,  1568,  1544,  1509,  1452,    64,   654,
+   360,   505,  1361,  1510,  1087,   918,    65,    66,    67,    68,
+    69,   242,   243,    70,    71,   503,  1013,  1014,  1015,  1016,
+   776,  1053,   777,   778,   779,  1038,  1048,  1039,  1351,  1040,
+  1041,  1352,  1353,   651,   652,   603,   891,   349,   464,   465,
    191,   199,    73,    74,    75,   200,   142,   143,   157,    77,
-   132,   351,   352,   353,    79,   354,    81,  1057,   123,   124,
-   125,   531,   105,    82,   355,   907,   908,   925,   646,  1337,
-  1338,  1196,  1197,  1198,   737,  1339,  1021,  1340,  1409,  1527,
-  1485,  1486,  1341,  1342,  1510,  1410,  1528,  1411,  1559,  1412,
-  1561,  1606,  1621,  1413,  1582,  1537,  1583,  1491,   458,   734,
-  1304,  1343,  1427,  1542,  1400,  1401,  1477,  1552,  1526,  1522,
-  1344,  1533,  1430,   872,  1585,  1586,  1587,  1619,   753,   754,
-  1041,  1209,  1352,   755,   756,   757,  1037,   758,   148,  1039,
-   760,  1211,  1212,   549,    84,    85
+   132,   350,   351,   352,    79,   353,    81,  1018,   123,   124,
+   125,   512,   105,    82,   354,   868,   869,   886,   627,  1312,
+  1313,  1175,  1176,  1177,   718,  1314,   982,  1315,  1395,  1520,
+  1474,  1475,  1316,  1317,  1499,  1396,  1521,  1397,  1554,  1398,
+  1556,  1605,  1621,  1399,  1580,  1530,  1581,  1480,   457,   715,
+  1279,  1318,  1413,  1535,  1386,  1387,  1466,  1547,  1519,  1515,
+  1319,  1526,  1416,   833,  1583,  1584,  1585,  1619,   734,   735,
+  1002,  1188,  1327,   736,   737,   738,   998,   739,   148,  1000,
+   741,  1190,  1191,   530,    84,    85
 };
 
-static const short yypact[] = {   136,
-   169,-32768,-32768,  5066,-32768,   203,   163,    73,    77,   190,
-   291,-32768,-32768,  1458,-32768,   259,   264,   279,-32768,-32768,
--32768,   871,  2044,  1374,   330,-32768,   336,   320,-32768,  1976,
-  1976,-32768,  2798,-32768,  5066,   351,-32768,-32768,   355,-32768,
-    51,  3166,-32768,-32768,   344,   824,   443,   463,   483,-32768,
--32768,-32768,-32768,   324,  5213,-32768,  5421,-32768,  2205,   804,
--32768,   456,-32768,-32768,  1137,   623,-32768,-32768,-32768,-32768,
-   435,  3747,-32768,-32768,-32768,   198,-32768,-32768,-32768,   906,
--32768,-32768,  1174,  8340,   481,-32768,-32768, 10037,-32768, 10037,
--32768, 10037,-32768,-32768,-32768,    73,    77,   336,   510,   472,
-   539,   483,-32768,  1000,-32768,  1174, 10123, 10123,   509,-32768,
--32768,-32768,-32768,-32768,   234,   550,   474,   541,   767,   554,
-   564,-32768,-32768,  1006,-32768,   305,    73,    77,-32768,   336,
-   510,-32768,  2508,  1031,   545,  5547, 10037,-32768, 10037,  4171,
-  2952,-32768,-32768,  1311,  1265,  2952,-32768,   664,  3604,  3604,
-  2798,   517,   538,-32768,   559,   876,   562,   592,-32768,-32768,
-   700,-32768,   630,-32768,  3999,-32768,-32768,   330,  3843,   643,
--32768,-32768,-32768,   344,  6652,  6133,   836,   690,-32768,-32768,
-   684,   456,   778,   176,   458,   728,-32768,-32768,   691,    69,
--32768,-32768,  3940,  3940,  6529,   198,   864,-32768,-32768,   546,
--32768,-32768,  1679,-32768,-32768,-32768,-32768,-32768,  2205,   883,
--32768,   456,   198,-32768,-32768,-32768,  2251,  2205,-32768,   456,
--32768,  6652,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   749,-32768,   483,-32768,   456,  2169,   910,-32768,
--32768,   766,   766,-32768,  4696,-32768,   715,  1174,-32768,   784,
-  1757,-32768,   366,-32768,-32768,-32768,-32768,-32768,  4100,-32768,
--32768,   769,-32768,   740,   758,-32768,-32768,-32768,-32768,   781,
+static const short yypact[] = {   109,
+   134,-32768,-32768,  4885,-32768,    42,    50,    73,   331,   142,
+   271,-32768,-32768,  1327,-32768,   270,   277,   309,-32768,-32768,
+-32768,  1510,  1154,  1165,   343,-32768,   369,   372,-32768,  2239,
+  2239,-32768,  2031,-32768,  4885,   361,-32768,-32768,   315,-32768,
+    84,  5387,-32768,-32768,   384,   924,   493,   401,   467,-32768,
+-32768,-32768,-32768,   510,  3805,-32768,  4032,-32768,   862,   246,
+-32768,   525,-32768,-32768,  1990,   769,-32768,-32768,-32768,-32768,
+   528,  3436,-32768,-32768,-32768,  1345,-32768,-32768,-32768,   644,
+-32768,-32768,   214,  6209,   540,-32768,-32768,  9588,-32768,  9588,
+-32768,  9588,-32768,-32768,-32768,    73,   331,   369,   573,   490,
+   594,   467,-32768,   334,-32768,   214,  9674,  9674,   561,-32768,
+-32768,-32768,-32768,-32768,   599,   607,   413,   441,   451,   616,
+   621,-32768,-32768,  1360,-32768,   632,    73,   331,-32768,   369,
+   573,-32768,  3078,  1248,   602, 10763,  9588,-32768,  9588,  3145,
+  2789,-32768,-32768,  1580,   603,  2789,-32768,  1199,  2798,  2798,
+  2031,   570,   619,-32768,   640,   392,   653,   669,-32768,-32768,
+   726,-32768,   643,-32768, 10522,-32768,-32768,   343,  6171,   688,
+-32768,-32768,-32768,   384,  5433, 10818,   422,   745,-32768,-32768,
+   718,   525,   825,    92,   287,   770,-32768,-32768,   723,   154,
+-32768,-32768,  3340,  3340,  3908,  1345,   580,-32768,-32768,   637,
+-32768,-32768,  1772,-32768,-32768,-32768,-32768,-32768,   862,   660,
+-32768,   525,  1345,-32768,-32768,-32768,  1432,   862,-32768,   525,
+-32768,  5433,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,   774,-32768,   467,-32768,   525,  1901,  1725,-32768,
+-32768,   793,   793,-32768,-32768,  1264,   214,-32768,   579,   625,
+-32768,   301,-32768,-32768,-32768,-32768,-32768,  3593,-32768,-32768,
+   195,-32768,   773,   783,-32768,-32768,-32768,-32768,   801,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   755,-32768,-32768,   715,  3747,  1632,-32768,-32768,
-   776,-32768,-32768, 10731, 10817, 10903, 10903,-32768,-32768,-32768,
--32768,-32768,   780,   786,   797,   825,   832,  1025,   510, 10209,
 1357, 10903,-32768,-32768, 10903,-32768,-32768, 10903,  7539,-32768,
10903,    65,   849,-32768, 10903,-32768, 10295,-32768, 11119,   426,
-  1563,  3740, 10381,-32768,   919,  2567,-32768,  1700,  2285,  3286,
--32768,   431,-32768,  3387,  1998,    65,    65, 10037,  5547,-32768,
-  1357,   827,  1357,-32768,-32768,   826,   879, 11052,   837,   842,
-   857,  1966,   630,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,   550,   474,   541,  1357,   767,   554,   881,   564,-32768,
-   914,-32768,   270,    73,    77,-32768,-32768,-32768,-32768,-32768,
--32768,  6834,-32768,  6652,  6645,   723,-32768,    65,   301,-32768,
--32768,   811,-32768,   897,   903,-32768,-32768,-32768,  2952,-32768,
--32768,  2952,-32768,   873,-32768,-32768,-32768,   876,   876,   876,
--32768,-32768,-32768,  4100,   103,   875,   884,-32768,-32768,-32768,
--32768,  5547,-32768,   900,   963,-32768,-32768,   700,-32768,   456,
--32768,-32768,-32768,-32768,   165,-32768,-32768,-32768,-32768,  8091,
- 10209,-32768,-32768,-32768, 10209,   877,-32768,  5311,   240,  4742,
--32768,  4742,-32768,  5059,  5059,  6529,   882,-32768,   456,  6652,
--32768,   891,-32768,-32768,  5849,  2251,  2205,  6652,-32768,   456,
--32768,-32768,   456,  2251,-32768,   981,-32768, 10037,   749,-32768,
--32768,  2169,-32768,-32768,-32768,-32768,   807,   385,-32768, 10209,
-  1836,-32768,  1836,   219,   219,   220,   433,  3033,  4527,   108,
-  4879,-32768,   274,   219,   715,   456,-32768,-32768,   941,   944,
-   971,   955,-32768,-32768,-32768,-32768,   847,-32768,   439,   921,
-   927,-32768,-32768,   715,-32768,-32768,  1100,-32768,-32768, 10037,
10209,   776,  7539,-32768,   451,  7539,-32768,-32768,-32768, 10123,
-  4970,  4970,  4970,  4970, 11097,-32768,-32768,-32768,-32768,   934,
10473, 10473,  7539,   937,   437,   939,   991,   947,-32768,-32768,
--32768,-32768, 10037,-32768,  7630,  7539,-32768, 10209, 10209,  5654,
- 10209, 10209, 10209, 10209, 10209, 10209, 10209, 10209, 10209, 10209,
- 10209, 10209, 10209, 10209, 10209, 10209, 10209, 10209, 10209,-32768,
10209,-32768,-32768,-32768,-32768,-32768, 10209, 10209,-32768,-32768,
-   339,   651,  1120,  8700,-32768,-32768,-32768,   998,  1757,  1053,
-   469,   482,   581,  3585,  1265,-32768,  1659,  1659,-32768,  3502,
-   960,   982,  1043,-32768,-32768,   590,  9320,  1173,-32768,  1103,
-  1174,-32768,-32768, 10209,-32768,-32768,-32768,-32768,-32768,    90,
-   481,-32768,-32768,    65,-32768,  6652,  1444,-32768,  1014,  1034,
--32768,-32768,  1357,   881,-32768,  8432,  8523,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,   278,-32768,  1016,  1020,   630,   270,
-  1062, 10037,-32768,  1073,-32768,-32768,  1031,  2198,  1102,    71,
-  1079,  1083,-32768,-32768,  2306,  6133,  2306,  2152,  1137,  4350,
--32768,  1094,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
-  1046,  1054,-32768,  1107,-32768,-32768,   344,-32768,-32768,-32768,
--32768,   104,  1493,  1101,   991,-32768,-32768,-32768,-32768,  7429,
- 11097,-32768,   879,  1064, 11052,-32768,-32768,  1067,-32768,  1089,
-    93,  3406,  1095,-32768,   571,  5919,  1140,  1145,   649,-32768,
--32768,-32768,  4742,  4742,-32768,  5849,-32768,  1157,-32768,-32768,
-  1111,   240,-32768,  2251,-32768,-32768,   456,  1109,-32768,  2385,
--32768,  7162, 11097,-32768,  5202,-32768,   456,   456,-32768,-32768,
--32768,-32768,-32768,  7162,   174,   966, 10209,   981,-32768,  1166,
--32768,-32768,-32768,   485,   580,   906,  1265,   587,   219,  1177,
--32768,   676,  1161,   456,  8768,-32768,-32768,-32768,   456,-32768,
-   240,  7162, 10037, 10037,-32768, 10037,   240,  7162,-32768,-32768,
--32768,-32768,-32768,-32768,  1688,  1688,  1688,    65,  1136,  1143,
-  9688,  1043,  1147,  1149,  1152,  1170,  2853,  1186,  1189,  1190,
--32768,  1167,-32768,-32768,  1168,-32768,-32768,  1211,   996,  1060,
-   557,   601, 10209,  1217,-32768,  1232,  1191, 11097, 11097,-32768,
--32768,  1235,  5746,  6217,  6158,  4780,  2387,  5364,  4442,  2354,
-  2354,  2354,  1205,  1205,  1512,  1512,  1028,  1028,  1028,-32768,
--32768,  1192,  1194,  1183, 10209, 10123,-32768,   651,-32768,  8091,
10209,-32768,-32768,-32768, 10209,-32768,-32768,  1204, 10903,  1199,
-  1215,  1231,  1264,-32768, 10209,-32768, 10209,-32768, 10209,  2925,
--32768,  2925,-32768,   228,  1216,  1218,-32768,  1214,  4970,   240,
--32768,   240,  3053,-32768,  7162,  1219,  9504,  9504,  6451,  1220,
10295,  1221,   876,  2159,  1998,  1368,  1224,-32768,-32768,-32768,
--32768,-32768,-32768,-32768, 10209,  1357,  1225,  1034,-32768, 11097,
--32768, 11097,  1966,  1227, 10559,-32768,  1233,  1253,-32768,    65,
--32768,-32768,-32768,-32768,-32768,  1852,  6834,-32768,  4970, 10037,
-  1202,  1202,  4282,-32768,-32768,-32768,-32768,  1679,-32768,-32768,
--32768,  1188, 10209,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   344,-32768,   550,   474,   541,-32768,   767,   554,
10209,  1285,-32768,   672,   564,   702,   706,  1806,   991,-32768,
   96,-32768,   171,-32768,-32768,-32768,-32768,-32768,-32768,  9412,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,  1145,  1283,-32768,
--32768,-32768,  4970,-32768,-32768,-32768,  1284,-32768,-32768,  1257,
--32768,  1294,-32768,-32768,   298,-32768,-32768,   240,  1249,-32768,
-  1305,  1305,   240,  1262, 10209, 10209,  7076,   456,  4960,   456,
-   456,  1524,   456,  6356,-32768,-32768,  8838,  1305,-32768,  1266,
-    65,    65,    65,-32768,  1267,   240,  7162,   240,  7162,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1289,  1290,
-  1291,  1293,  1046,-32768, 10985,  8091,  7724,  1280,-32768, 10209,
--32768,-32768,-32768,  1281,  1287,  1295,  4970,-32768,-32768,  1298,
-   569,  1012,  1012,  1296,  1012,-32768,-32768, 10903,  1384, 10037,
--32768,  1309,  1313,  1319,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,   240,  1326,-32768,  1325,-32768,-32768,  2768,-32768,
--32768,-32768,-32768,-32768, 11097,-32768,-32768,  1292,-32768,-32768,
-   292,  1330,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  2497,
-  2497,  2557,  2557,  4282,-32768,  1679,-32768,  3088, 11119,-32768,
--32768,-32768,  1331,-32768,  1493,-32768, 10209,-32768, 10209,-32768,
10209,-32768,  1357,-32768,-32768,  7026,  1413,-32768,  7815,-32768,
-  9596,  9596,  7226,   173,  1339,   209,-32768,  8091,  7906,-32768,
--32768,   311,  8091,-32768,-32768,-32768, 10123,-32768,-32768,-32768,
--32768,  1848,-32768,-32768,-32768,-32768,-32768,-32768,  7076,  7076,
--32768,  1305,   585,  1127, 10209,-32768,-32768,-32768,   981,   981,
 1305,  1305,   847,  1305,-32768,-32768,-32768,-32768,-32768,  1395,
--32768,-32768,-32768,  1342,-32768,  1346, 10209, 10209, 10209, 10209,
-  8091,-32768,  1393,-32768,-32768, 11097,-32768,-32768,-32768,    60,
-  1295,-32768,-32768,-32768,-32768,-32768,-32768,  1348,-32768,  1421,
-    65,-32768,-32768,-32768,   240,-32768,-32768,-32768,-32768,-32768,
--32768, 10209,-32768,-32768,  2497,  2497,-32768,  3088,-32768,-32768,
-  1352,  1362,  1363,  1380,-32768,  1036,   321,  1407,  1164,  1165,
--32768,-32768,-32768,-32768,-32768, 10209,  1416,  1419,  1425,  9774,
-   653,  1357,   496,   693,-32768,-32768,  9865,  1477,-32768,-32768,
--32768,  1430,-32768,  6551,  6039,  4418,  6895,-32768,-32768,  1475,
--32768,-32768,-32768,  8931,-32768,-32768,  1386,  1373,-32768,-32768,
--32768,-32768,  4970,-32768,-32768,  8091,  1391,  1399,  2385,-32768,
--32768,-32768,   240,   240,-32768,-32768,-32768, 10209, 10209,  7076,
-   456,   456,-32768,-32768,-32768,  6712,   240,   240,-32768,-32768,
-  1400,  1401,  1405,  1410,-32768,  8091, 10209,-32768,    60,-32768,
--32768,-32768,-32768,   240,  1415,-32768,-32768,-32768,-32768,  1380,
--32768,  1357,-32768,-32768,-32768,-32768,-32768,-32768,   711,   711,
-   991,  1432,  1433,  6200,-32768,-32768,-32768,-32768,  1467, 10209,
-  1472,  1428,  1480,  1927,  1987,-32768,   991,-32768,-32768,  1451,
--32768,-32768,   981,  1061,-32768,  1076,   981,  9951,  1090,   322,
--32768,-32768,-32768,-32768,-32768,-32768,   364,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  7076,  7076,-32768,  1305,  1305,-32768,
-  8614,-32768,-32768,-32768,-32768,   240,   240,-32768,-32768,-32768,
--32768,-32768,  1434,-32768,-32768,-32768,  1459,-32768,-32768,-32768,
- 10123,-32768,-32768,-32768,  1538,  9227,  7336, 10123, 10209,-32768,
-  9039,-32768,  1496,-32768,-32768,  1504,-32768,  1480,  1927,-32768,
--32768,   700,-32768,-32768, 10645, 10645,  8000,-32768,-32768,   991,
--32768,-32768,-32768,-32768,  1452, 11007,  1463,-32768,-32768,-32768,
10990,-32768,-32768,  1455,   398,  6652,   991,  9133,-32768,-32768,
-    96,-32768,-32768,  1507,  1460, 11075,  9039,-32768,-32768,-32768,
--32768,  1380,    76,-32768,-32768,-32768,-32768,   443,   344,  1462,
-  1466,   991,-32768,   981,-32768,-32768,-32768,-32768,   714,-32768,
-  8182,-32768,-32768,-32768,-32768,  1380,  1566,  1522,   177,-32768,
--32768,-32768,-32768,   456,    96,-32768, 10209,  1523,-32768,  1529,
--32768,   991,  9039,  1491,    63,  1531,-32768,-32768,-32768,   165,
--32768,  1534,-32768,  1494,-32768,-32768,-32768,-32768, 10209,  1566,
-  1539,  1566,-32768,-32768,-32768,  8273,  1500,   572,-32768,-32768,
-  8091,  1501,-32768,  1577,  1553,-32768,-32768,-32768,   332,-32768,
-  9133,  1603,  1559,-32768,-32768,-32768,  1621,  1622,-32768
+-32768,   768,-32768,-32768,  1264,  3436,  1127,-32768,-32768,   798,
+-32768,-32768, 10282, 10368, 10454, 10454,-32768,-32768,-32768,-32768,
+-32768,   806,   843,   861,   886,   889,  1274,   573,  9760,  1748,
10454,-32768,-32768, 10454,-32768,-32768, 10454,  7137,-32768, 10454,
  470,   855,-32768, 10454,-32768,  9846,-32768, 11114,   354,  1918,
+  5474,  9932,-32768,   962,  1226,-32768,   694,  5865,  5704,-32768,
+   357,-32768,  3224,  1609,   470,   470,  9588, 10763,-32768,  1748,
+   872,  1748,-32768,-32768,   877,   937,  6534,   890,   903,   916,
+  1834,   643,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+   607,   413,   441,  1748,   451,   616,   943,   621,-32768,   971,
+-32768,   311,    73,   331,-32768,-32768,-32768,-32768,-32768,-32768,
+ 10927,-32768,  5433, 11007,  2304,-32768,   470,   986,-32768,-32768,
+   554,-32768,   953,   961,-32768,-32768,-32768,  2789,-32768,-32768,
+  2789,-32768,   933,-32768,-32768,-32768,   392,   392,   392,-32768,
+-32768,-32768,  3593,    66,   935,   939,-32768,-32768,-32768,-32768,
+ 10763,-32768,   687,   778,-32768,-32768,   726,-32768,   525,-32768,
+-32768,-32768,-32768,   117,-32768,-32768,-32768,-32768,  7689,  9760,
+-32768,-32768,-32768,  9760,   940,-32768,  7046,   132,  4140,-32768,
+  4140,-32768,  4757,  4757,  3908,   946,-32768,   525,  5433,-32768,
+   948,-32768,-32768,  5008,  1432,   862,  5433,-32768,   525,-32768,
+-32768,   525,  1432,-32768,  1045,-32768,  9588,   774,-32768,-32768,
+  1901,-32768,-32768,-32768,  3498,  1264,   525,-32768,-32768,  1001,
+  1003,  1024,  1007,-32768,-32768,-32768,-32768,   742,-32768,   363,
+   979,   985,-32768,-32768,  1264,-32768,-32768,   817,-32768,-32768,
+  9588,  9760,   798,  7137,-32768,   436,  7137,-32768,-32768,-32768,
+  9674,  6081,  6081,  6081,  6081, 11092,-32768,-32768,-32768,-32768,
  977, 10024, 10024,  7137,   990,    59,   991,  1044,   996,-32768,
+-32768,-32768,-32768,  9588,-32768,  7228,  7137,-32768,  9760,  9760,
 7780,  9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,
+  9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,  9760,
+-32768,  9760,-32768,-32768,-32768,-32768,-32768,  9760,  9760,-32768,
+-32768,  4521,   430,   454,  8321,-32768,-32768,-32768,  1049,   625,
 1098,   502,   565,   574,  3291,   603,-32768,  1364,  1364,-32768,
+  3759,  1000,  1028,  1079,-32768,-32768,   725,  8871,   380,-32768,
+   896,   214,-32768,-32768,  9760,-32768,-32768,-32768,-32768,-32768,
+   243,   540,-32768,-32768,   470,-32768,  5433,  2388,-32768,  1064,
+  1070,-32768,-32768,  1748,   943,-32768,  8053,  8144,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,    49,-32768,  1037,  1025,   643,
+   311,  1082,  9588,-32768,  1083,-32768,-32768,  1248,  1649,  1103,
+    63,  1081,  1088,-32768,-32768,  2867, 10818,  2867,  3084,  1990,
+  5001,-32768,  1100,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,  1054,  1057,-32768,  1113,-32768,-32768,   384,-32768,-32768,
+-32768,-32768,    70,  1053,  1115,  1044,-32768,-32768,-32768,-32768,
+  5971, 11092,-32768,   937,  1072,  6534,-32768,-32768,  1078,-32768,
+  1086,   199,  5100,  1087,-32768,   324, 10581,  1123,  1132,   615,
+-32768,-32768,-32768,  4140,  4140,-32768,  5008,-32768,  1136,-32768,
+-32768,  1095,   132,-32768,  1432,-32768,-32768,   525,  1138,-32768,
+  1589,-32768,   766,   566,-32768,  9760,  4591,-32768,  4591,   175,
+   175,   407,   618,  1653, 10636,    76,  4269,-32768,   121,   175,
+-32768,   132, 10940,  9588,  9588,-32768,  9588,   132, 10940,-32768,
+-32768,-32768,-32768,-32768,-32768,   753,   753,   753,   470,  1107,
+  1110,  9239,  1079,  1116,  1118,  1120,  1150,  6074,  1158,  1160,
+  1163,-32768,  1133,-32768,-32768,  1137,-32768,-32768,  1187,   295,
+   859,   153,    57,  9760,  1188,-32768,  1201,  1156, 11092, 11092,
+-32768,-32768,  1200, 11132,  5299, 11045, 11147,  5771,  5810,  5228,
+  3744,  3744,  3744,  1789,  1789,  1590,  1590,    60,    60,    60,
+-32768,-32768,  1171,  1176,  1155,  9760,  9674,-32768,   430,-32768,
+  7689,  9760,-32768,-32768,-32768,  9760,-32768,-32768,  1191, 10454,
+  1179,  1204,  1221,  1250,-32768,  9760,-32768,  9760,-32768,  9760,
+  2159,-32768,  2159,-32768,   124,  1194,  1195,-32768,  1196,  6081,
+   132,-32768,   132,  2743,-32768, 10940,  1202,  9055,  9055,  6858,
 1209,  9846,  1212,   392,  2599,  1609,   900,  1213,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,  9760,  1748,  1190,  1070,-32768,
+ 11092,-32768, 11092,  1834,  1215, 10110,-32768,  1203,  1266,-32768,
+   470,-32768,-32768,-32768,-32768,-32768,  1551, 10927,-32768,  6081,
 9588,  1765,  1765,  2979,-32768,-32768,-32768,-32768,  1772,-32768,
+-32768,-32768,  1009,  9760,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,   384,-32768,   607,   413,   441,-32768,   451,
+   616,  9760,  1251,-32768,   629,   621,   646,   689,  1794,  1044,
+-32768,    61,-32768,    55,-32768,-32768,-32768,-32768,-32768,-32768,
+  8963,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1132,  1263,
+-32768,-32768,-32768,  6081,-32768,-32768,-32768,  1273,-32768,-32768,
 1235,-32768,  1280,-32768,-32768,   217,-32768,-32768,-32768, 10940,
11092,-32768,  3610,-32768,   525,   525,-32768,-32768,-32768,-32768,
+-32768, 10940,   452,   885,  9760,  1045,-32768,  1281,-32768,-32768,
+-32768,   282,   680,   644,   603,   974,   175,  1285,-32768,  1117,
+  1279,   525,  6339,-32768,-32768,-32768,   525,-32768,  1237,   470,
+   470,   470,-32768,  1238,   132, 10940,   132, 10940,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,  1260,  1261,  1265,
+  1268,  1054,-32768, 11002,  7689,  7322,  1257,-32768,  9760,-32768,
+-32768,-32768,  1262,  1267,  1272,  6081,-32768,-32768,  1278,   303,
+   852,   852,  1276,   852,-32768,-32768, 10454,  1381,  9588,-32768,
+  1283,  1288,  1290,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,   132,  1294,-32768,  1292,-32768,-32768,  2997,-32768,-32768,
+-32768,-32768,-32768, 11092,-32768,-32768,  1297,-32768,-32768,   169,
+  1305,-32768,-32768,-32768,-32768,-32768,-32768,-32768,  2320,  2320,
+  2539,  2539,  2979,-32768,  1772,-32768,  2686, 11114,-32768,-32768,
+-32768,  1311,-32768,  1053,-32768,  9760,-32768,  9760,-32768,  9760,
+-32768,  1748,-32768,-32768,  6744,  1357,-32768,  7413,-32768,  9147,
+  9147,  6952,   218,  1314,   423,-32768,  7689,  7504,-32768,-32768,
  213,  7689,-32768,-32768,-32768,  9674,-32768,-32768,-32768,-32768,
+  1186,   132,  1318,-32768,  1363,  1363,   132,  1320,  9760,  9760,
+  4789,   525,  4409,   525,   525,   973,   525,  5170,-32768,-32768,
+  8389,  1363,-32768,-32768,  1375,-32768,-32768,-32768,  1324,-32768,
+  1335,  9760,  9760,  9760,  9760,  7689,-32768,  1383,-32768,-32768,
11092,-32768,-32768,-32768,   662,  1272,-32768,-32768,-32768,-32768,
+-32768,-32768,  1337,-32768,  1403,   470,-32768,-32768,-32768,   132,
+-32768,-32768,-32768,-32768,-32768,-32768,  9760,-32768,-32768,  2320,
+  2320,-32768,  2686,-32768,-32768,  1344,  1347,  1354,  1369,-32768,
+   835,   174,  1391,   908,   912,-32768,-32768,-32768,-32768,-32768,
+  9760,  1405,  1409,  1410,  9325,   495,  1748,   884,   458,-32768,
+-32768,  9416,  1469,-32768,-32768,-32768,  1421,-32768,  5273, 10704,
+ 10873,  6621,-32768,-32768,  1468,-32768,-32768,-32768,  8482,-32768,
+-32768,  1378,   856,-32768,-32768,-32768,-32768,  6081,-32768,-32768,
+  7689,  1379,  1380,  1589,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,  4789,  4789,-32768,  1363,   523,  1093,  9760,
+-32768,-32768,-32768,  1045,  1045,  1363,  1363,   742,  1363,-32768,
+-32768,-32768,   132,   132,-32768,-32768,  1386,  1387,  1388,  1389,
+-32768,  7689,  9760,-32768,   662,-32768,-32768,-32768,-32768,   132,
+  1393,-32768,-32768,-32768,-32768,  1369,-32768,  1748,-32768,-32768,
+-32768,-32768,-32768,-32768,   706,   706,  1044,  1398,  1413,  6390,
+-32768,-32768,-32768,-32768,  1447,  9760,  1449,  1448,  1457,  1971,
+  2010,-32768,  1044,-32768,-32768,  1425,-32768,-32768,  1045,   871,
+-32768,   883,  1045,  9502,   909,   313,-32768,-32768,-32768,-32768,
+-32768,-32768,   497,-32768,-32768,-32768,-32768,-32768,   132,   132,
+-32768,-32768,-32768,  9760,  9760,  4789,   525,   525,-32768,-32768,
+-32768,  6483,-32768,-32768,   132,   132,-32768,-32768,-32768,-32768,
+-32768,  1408,-32768,-32768,-32768,  1428,-32768,-32768,-32768,  9674,
+-32768,-32768,-32768,  1508,  8778,  5575,  9674,  9760,-32768,  8590,
+-32768,  1467,-32768,-32768,  1478,-32768,  1457,  1971,-32768,-32768,
+   726,-32768,-32768, 10196, 10196,  7598,-32768,-32768,  1044,-32768,
+-32768,  4789,  4789,-32768,  1363,  1363,-32768,  8235,-32768,-32768,
+-32768,-32768,-32768, 10994,-32768,-32768,  1427,   995,  5433,  1044,
 8684,-32768,-32768,    61,-32768,-32768,  1473,  1430, 11070,  8590,
+-32768,-32768,-32768,-32768,  1369,   104,-32768,-32768,-32768,-32768,
+-32768,  1434, 11024,  1442,  1435,  1438,  1044,-32768,  1045,-32768,
+-32768,-32768,-32768,   731,-32768,  7871,-32768,-32768,-32768,-32768,
+  1369,  1531,  1490,-32768,-32768,-32768,   493,   384,-32768,-32768,
+-32768,   525,    61,-32768,  9760,  1491,-32768,  1497,-32768,  1044,
+  8590,  1470,   746,  1502,-32768,-32768,   100,-32768,  1498,-32768,
+  1456,-32768,-32768,-32768,-32768,  9760,  1531,  1514,  1531,-32768,
+   117,-32768,-32768,-32768,  7962,  1480,   767,-32768,-32768,-32768,
+  7689,  1487,-32768,  1565,  1521,-32768,-32768,-32768,   312,-32768,
+  8684,  1586,  1543,-32768,-32768,-32768,  1605,  1606,-32768
 };
 
 static const short yypgoto[] = {-32768,
-  1624,-32768,  -304,  1456,  -364,    75,     2,  1623,-32768,  1593,
--32768,-32768,   315,-32768,   373,-32768,   507,-32768,   206,   942,
-    58,    24,-32768,-32768,  -669,-32768,-32768,   657,    59,  1469,
-  1197,  1478,  -719,   111,  -173,    29,    55,-32768,-32768,-32768,
--32768,-32768,  1125,-32768,-32768,-32768,-32768,-32768,-32768,   466,
-  1903,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,  1568,  -526,  6178,  1422,   -58,  -599,  -235,   -44,
-  1533,  -547,-32768,   388,-32768,   260,-32768, -1362,-32768, -1307,
-    52,-32768,  1442,  1361,  -254,   403,  -557,-32768,  -868,  3479,
-  -125,  1528,  4472,  1379,  -332,   -52,   -76,   427,  -140,   -66,
-   135,-32768,-32768,-32768,  -344,-32768,  -159,-32768,-32768, -1236,
-   -16,  -329,  1934,   530,  -150,  -166,    78,    50,  -206,    -4,
-  -145,  -165,  -171,    32,   -11,   357,-32768,  -257,-32768,-32768,
--32768,-32768,-32768,   734,  1247,   -45,-32768,   716,-32768,-32768,
-  -765,  -399,   940,-32768,-32768,-32768,-32768,-32768,   218,-32768,
--32768,-32768,-32768,-32768,   729,  -377,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,  1447,-32768,   335,   473,-32768,-32768,
--32768,-32768,   885,  -479,-32768,-32768,-32768,-32768,-32768,-32768,
-  1172,-32768,   624,  1030,   745,  1086,  2837,    14,    54,  -461,
-  1510,  2756,  -686,-32768,    13,-32768,   645,    20,  -142,   271,
-  -105,  5046,  1365,-32768,  5682,  2642,  1651,   -19,  -113,-32768,
-  1590,   -54,-32768,  5135,  3513,  -359,-32768,  1597,-32768,-32768,
-   381,-32768,-32768,   527,   138,  -429,-32768,-32768,-32768,-32768,
- -1369,-32768, -1238, -1389,-32768,-32768,-32768,-32768,-32768,-32768,
--32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   156,-32768,
--32768,-32768,-32768,-32768,   188, -1311,-32768,-32768,   -51,-32768,
--32768,-32768,-32768, -1385,   140,-32768,   144,-32768,  -606,  -580,
-   710,-32768,-32768,-32768,-32768,  -393,-32768,  -390,  -333,-32768,
-  1007,   397,-32768,    83,-32768,  -232
+  1618,-32768,  -335,  1452,  -377,    -1,    10,  1621,-32768,  1595,
+-32768,-32768,   205,-32768,   232,-32768,   275,-32768,   221,   978,
+    45,     7,-32768,-32768,  -661,-32768,-32768,   704,    53,  1486,
+  1220,  1499,  -706,   111,  -173,     4,    72,-32768,-32768,-32768,
+-32768,-32768,   892,-32768,-32768,-32768,-32768,-32768,-32768,   518,
+   344,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,  1593,  -653,  5642,  1451,   -65,  -578,  -210,   329,
+  1554,  -529,-32768,   583,-32768,   305,-32768, -1379,-32768, -1145,
+    83,-32768,  2023,   910,  -286,   456,  -538,-32768,  -811,  3215,
+  -101,  1343,  4049,  1414,  -318,   -60,   -77,  1310,  -137,   -47,
+   106,-32768,-32768,-32768,  -333,-32768,  -153,-32768,-32768, -1238,
+   -15,  -346,  3891,   113,  1282,  -158,    48,    23,  -199,    -4,
+  -163,  -171,  -169,   -16,    24,    -3,-32768,  -220,-32768,-32768,
+-32768,-32768,-32768,   840,  1206,    54,-32768,   784,-32768,-32768,
+  -850,  -443,   993,-32768,-32768,-32768,-32768,-32768,    81,-32768,
+-32768,-32768,-32768,-32768,-32768,   792,  -362,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,  1474,-32768,   385,   517,-32768,
+-32768,-32768,   667,  -708,-32768,-32768,-32768,-32768,-32768,-32768,
+   947,-32768,   503,  1077,   807,  1134,  2728,    95,    25,  -459,
+  1534,  1793,  -689,-32768,     6,-32768,   941,   238,   -58,   545,
+  -106,  4549,  1390,-32768,  5209,  2423,  1969,   -11,  -113,-32768,
+  1613,   -53,-32768,  4653,  3236,  -112,-32768,  3011,-32768,-32768,
+   432,-32768,-32768,   569,   141,  -387,-32768,-32768,-32768,-32768,
+ -1389,-32768, -1234, -1400,-32768,-32768,-32768,-32768,-32768,-32768,
+-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,   160,-32768,
+-32768,-32768,-32768,-32768,   215, -1354,-32768,-32768,   -41,-32768,
+-32768,-32768,-32768, -1402,   151,-32768,   157,-32768,  -707,  -598,
+   762,-32768,-32768,-32768,-32768,  -396,-32768,  -395,  -397,-32768,
+  1243,   434,-32768,    46,-32768,  -226
 };
 
 
-#define        YYLAST          11203
+#define        YYLAST          11231
 
 
 static const short yytable[] = {    59,
-   443,   435,   487,   122,   445,    36,   420,   423,   711,   444,
-   658,   712,   392,   256,  1019,   432,   224,    72,   532,   648,
-   771,   253,   657,    76,   709,   738,   103,    42,   400,  1118,
-    59,   784,   298,   786,   182,   857,    36,    59,   196,   991,
-   525,   816,   486,   141,   146,   356,  1016,   357,    72,   554,
-   557,   494,   209,    58,    76,    72,   398,   399,    42,   926,
-   742,    76,   896,   949,   249,    42,   926,   247,   688,   391,
-   174,   492,   495,   177,   201,   727,   213,   256,    35,   296,
-   397,    57,   587,   349,    58,   349,   626,   349,  1478,   544,
-  1428,    58,   408,  1056,   224,   260,  1530,   297,  1443,   170,
-   171,  1534,   349,   349,  1027,  1446,   899,   190,   163,    35,
-   224,   208,    57,   626,   626,   467,   169,   998,   364,   176,
-   662,   663,   661,   900,  1600,  1535,    89,   308,  1193,   977,
-    91,   406,   349,   295,   349,    -1,   256,  1567,  1558,   580,
-  1544,   581,   544,    26,   813,   978,    90,   855,   164,    72,
-    92,  1028,   901,  1387,  1029,   407,  -828,  1555,   196,   410,
-    59,   468,   419,   422,    59,   735,   224,   155,    -2,   780,
-  1601,   209,   717,   718,   224,  1059,   452,  1589,    72,   928,
-   558,   559,    72,  1568,    76,    58,   517,  1064,    76,   997,
-   403,   224,    42,   440,   201,   213,   567,   174,  1581,   568,
-   177,   490,   569,   539,  1194,   579,   470,   472,   190,   584,
-   724,  1004,  1597,   405,    58,  1080,   814,   625,    58,  -302,
-  1612,  1085,   736,  1560,    15,   842,   170,   171,  -415,  1199,
-   208,  1558,   776,  -356,  -356,  1065,    88,   453,   453,  1027,
-    59,   201,    57,   169,   789,    15,   176,    88,   535,  -415,
-  1532,   705,  1538,   190,  1478,  -625,  -415,  -415,    72,   178,
-   260,  -415,    86,    93,   524,  -302,  -302,  1593,   820,   632,
-   454,   454,   300,   394,   395,    10,   221,   790,  -415,  1200,
-  -295,   791,  -415,   155,   155,   155,  1028,   696,   732,  1029,
-   623,   374,   247,   631,    58,  1225,  1226,   375,  1565,   514,
-   759,  -625,  -625,   158,  1220,  1020,  1166,   116,   117,   118,
-    21,    87,  1247,   664,   792,   658,  -625,   705,    38,   511,
-   774,   976,   519,    26,   349,    27,   319,  -415,  1144,   155,
-   691,   420,   423,   817,  1221,   856,   963,   296,    94,  1117,
-   492,   495,     8,     9,  1598,   247,    12,    13,   492,    38,
-  1292,   107,    14,   349,   667,   297,   108,    32,   926,   583,
-   119,   120,   711,  1002,  1003,  1038,    16,   260,    17,  1353,
-  -583,   109,    72,   138,    20,   580,    39,   581,   668,   495,
-  1404,  1404,   818,    23,   967,   964,   178,   714,   127,   128,
-  1622,   295,    26,   139,   130,   131,   532,   708,   495,  1293,
-   209,  1388,   926,   135,   224,   215,   216,    39,    58,   137,
-  -304,    14,   533,   665,   162,   710,  -583,   189,  1354,   158,
-   158,   158,   648,   201,  1151,   699,   221,  1154,   950,  1405,
-  1509,   897,  1169,    20,   221,   221,   405,    59,    26,  1623,
-   130,   131,    23,   161,   636,   567,   568,   224,  1215,   926,
-   179,   707,   517,   778,   517,    72,  -304,  -304,   534,   153,
-   517,    76,   517,   752,   221,   158,  1367,   183,  1180,  1181,
-   729,  -298,   610,   177,  1146,  1373,  1374,   653,  1375,   793,
-  1254,   710,  1256,   610,   777,   831,    18,   763,   764,   705,
-   841,    58,   244,   349,   366,   370,   705,   636,  1016,   201,
-  1119,   799,   787,   788,   459,   838,    59,   201,    59,  -365,
-    40,    15,   819,   221,   209,   914,    59,   707,   611,   176,
-  1474,   460,   187,   654,    72,   794,    72,   377,   916,   611,
-   524,   832,   524,    55,    72,  1056,   188,   805,   812,   129,
-   524,    40,  -365,   841,  -295,   349,  -365,    90,   349,    26,
-   461,   349,  1423,  1001,   299,   349,   847,   847,   847,   847,
-    58,   915,    58,   138,    55,   514,   221,   514,   349,   623,
-    58,   175,   798,   808,   917,   514,   421,   424,   349,  -365,
-   360,   349,  1032,   711,   696,   511,   712,   511,   519,  1192,
-   519,   973,  -583,   926,   378,   511,   362,   816,   519,   709,
-   658,   372,  1093,   376,  -366,   705,    15,   380,   155,   155,
-   155,  -120,   657,    15,    92,   636,   296,   381,  -143,   401,
-   972,   153,   926,   221,  -295,  1289,  1290,   918,   492,  1033,
-   137,   705,  1034,  1614,   297,   708,   934,  -366,  -583,   482,
-   544,  -366,   752,   705,  -120,   425,  1368,   970,  -120,   952,
-   920,   922,   189,   710,   138,    95,   110,   111,    88,   178,
-   710,   841,  -144,   260,  1278,   404,    95,   414,   415,   433,
-   295,   705,  1056,   919,  -366,   147,  1273,   705,   122,  1615,
-   240,  -120,   935,   936,   241,   201,   587,   349,   984,   707,
-   989,   990,  1513,  1514,    55,  1042,   707,   899,   175,  -620,
-  -118,   209,    15,   221,   221,   247,  1262,  1264,   112,   113,
-   303,   221,   661,  1017,   900,  1216,   574,  1218,  1186,    98,
-   113,  1222,   215,   216,   201,   987,   201,   201,    14,   214,
-   215,   216,  1420,  -118,  1165,   990,    14,  -118,    -7,   256,
-   164,  1043,   221,   901,   158,   158,   158,   253,  1188,   447,
-    20,   708,  1190,    18,  1426,   576,   517,  1480,    20,    23,
-  1576,   221,  1274,  1275,  1187,  1277,   137,    23,   799,   710,
-  -118,   201,     8,   537,   518,  1036,   448,   708,  1081,  1082,
-   451,  1083,   715,  1127,   705,   411,  1068,   463,   705,   708,
-   413,   842,  1070,  1071,  1189,   710,  1068,  1073,  1191,  1264,
-  1071,   464,   432,  1481,   805,   707,  1577,   710,  1349,  1351,
-    59,   567,   568,  1355,   127,   128,   363,   708,   349,   349,
-   379,   349,   498,   708,   130,   131,   705,   503,    72,  1182,
-   527,   707,   705,   540,   524,   710,   769,    91,   147,   798,
-   137,   710,   542,   707,   775,  1249,  1250,  1251,   538,  1590,
-    15,   541,   746,   781,  -415,   421,   722,    92,   363,   561,
-    91,  1385,   222,   223,    58,   543,   130,   131,   551,   514,
-   562,   707,   560,    95,   110,   111,   528,   707,   300,   705,
-    92,    10,  -415,  -415,   221,  1359,  1360,  1361,   666,   511,
-   538,   349,   519,   829,   222,   446,  1121,   224,   563,   782,
-    91,   421,   424,   536,   392,   564,    18,   583,     7,     8,
-   250,    10,    95,    96,    97,   449,    21,  1090,  1091,  1092,
-    92,   256,   480,   481,   847,   221,   112,   113,   114,   626,
-   708,   426,   427,   675,   752,   672,   705,   676,   705,   830,
-   574,   488,   489,   574,   678,   428,    21,   844,   710,   679,
-   920,   922,   710,   251,   692,   429,  1449,   260,   480,   730,
-   574,    27,    28,    32,   680,    98,    99,   693,   430,   221,
-    90,   175,   708,   574,   847,   349,    92,   871,   708,   576,
-   721,  1484,   576,    -6,   707,   252,  1472,   747,   707,   765,
-   710,   221,   725,    32,  1170,  1171,   710,  1501,   421,   852,
-   699,   770,  1279,     8,     9,   894,   842,    15,   382,   383,
-   384,   910,   576,   539,   823,   127,   128,   824,   517,    89,
-   535,   488,   731,   705,   825,   752,   707,  1066,   826,   420,
-   423,   833,   707,   300,   394,   395,    10,   834,   847,    90,
-   518,   851,   785,   710,   853,  1392,   854,   363,   736,    89,
-   518,   911,   705,   385,   856,   130,   131,  -141,   420,   423,
-   913,   386,   387,   719,   221,    26,   720,   130,   131,    90,
-   927,    21,    59,   942,   929,   567,   568,   955,   723,   707,
-  1484,   903,   708,  -183,   708,  1281,    27,   319,  1240,   931,
-    72,   904,   956,  1240,  1402,  1403,   524,  1484,   137,  -183,
-   710,  -183,   710,   127,   128,   905,     8,     9,   965,   256,
-   608,   609,   847,    91,   411,   969,   413,   155,    32,   480,
-  1503,  -142,  1573,   127,   128,   349,    58,   711,   966,   536,
-  1551,   514,   971,    92,   488,  1504,   707,    20,   707,    95,
-    96,    97,   979,   225,   226,   227,   980,   363,   480,  1508,
-   363,   511,  1484,  -298,   519,   130,   131,   993,   130,   131,
-   738,   999,   453,  1436,   155,  1017,  1000,    18,  1434,   708,
-  1439,  1024,   228,    26,  1025,   130,   131,     8,     9,   252,
-    89,  -579,   252,  1048,  -579,  1295,  1296,   710,  1369,   903,
-    26,  1336,    98,    99,   229,   842,  1026,  1328,   752,   904,
-    90,   579,  1031,  -827,     7,     8,     9,    10,  1040,    72,
-    13,  1616,   349,   905,  1295,  1296,   710,    89,    91,   931,
-  1044,  1045,  1075,   707,  1069,  1407,  1408,  1371,  1372,   130,
-   131,  -579,    18,  -579,  -579,  1074,  -579,    90,    92,   230,
-   231,   232,    21,  1094,  1099,    58,   -52,  -579,   636,  -579,
-  1095,   -52,   707,   158,  1096,    26,  1097,    27,    28,  1098,
-  1100,   498,   -52,  1101,  1102,  -579,  -579,   942,   127,   128,
-  1327,   981,  -140,  1335,  1103,  1104,   140,   140,  1106,   156,
-  -579,   982,   603,   604,   605,   606,   607,   608,   609,    32,
-  1107,   639,  1124,  1113,   983,   641,  1110,  1126,  1109,  1111,
-   158,  1112,  1129,   212,  1130,   220,   155,   155,   155,  1128,
-  1131,   237,  1164,     7,   127,   128,    10,  1433,   544,  1433,
-   130,   131,  1336,  1137,  1139,  1138,   574,  1147,  1148,  1145,
-   209,  1150,  1336,  1157,  1160,   155,   155,   155,  1328,  1336,
-    72,  1163,  1543,  1185,   518,  1328,  1208,  1214,   847,  1217,
-    72,    21,  1219,   201,  1437,   201,  1224,    72,   251,    95,
-   110,   111,   420,   423,   421,   852,    27,    28,   460,  1228,
-   705,     8,     9,  1248,  1252,  1570,    58,   127,   128,   567,
-   568,  1257,  1258,  1259,  -304,  1260,    58,   140,  1265,  1267,
-   252,  1280,   140,    58,  1268,   156,   156,   156,    32,  -304,
-  1291,  1327,  1269,  -304,  1335,  1272,  1276,   719,   720,   153,
-   723,  1327,   112,   113,  1335,   363,  1282,   129,  1327,  -304,
-  1283,  1335,   212,   130,   131,   490,  1284,    26,   450,   130,
-   131,  -304,  -304,  1287,  -304,  1288,  -304,  1294,  1299,   140,
-   140,   156,   158,   158,   158,  1193,  1348,   538,  -662,  1379,
-   214,   215,   216,  1380,  1386,   220,  1205,    14,  1390,  1396,
-    95,    96,    97,   493,   220,  -304,  -304,  1391,  1406,  1397,
-  1398,   158,   158,   158,    18,  1399,  1525,  1415,  1416,    20,
-  -304,  1336,  1336,  1525,  1417,  1429,  1336,  1328,    23,  1431,
-  1444,   375,  1328,  1447,   297,  1005,  1006,  1007,  1450,    72,
-    72,   297,   349,   953,    72,   140,  1451,  1468,  1469,  1554,
-  1047,    26,  1470,    98,    99,   100,   708,  1471,   763,   764,
-  1061,  1062,  1476,  1336,  1487,  1488,  1492,   127,  1243,  1328,
-   295,  1494,  1336,  1495,   710,    58,    58,   295,  1328,  1008,
-    58,    72,  1574,  1502,  1520,   201,    26,  1076,  1009,  1010,
-    72,  1521,  1078,   221,  1529,  1539,  1525,  1540,  1545,  1547,
-  1327,  1327,  1553,  1335,  1335,  1327,  1562,  1563,  1335,  1571,
-   707,   363,   155,  1572,   297,   156,  1584,    58,  1336,   130,
-   131,  1588,  1595,  1599,  1328,  1011,    58,  1618,  1596,  1602,
-   574,   605,   606,   607,   608,   609,    72,  1604,  1609,   421,
-   424,  1605,  1327,   538,  1357,  1335,   518,  1613,  1617,   612,
-   295,  1327,  1620,  1625,  1335,   339,  1336,   339,  1626,   339,
-  1628,  1629,  1328,     1,     5,   442,   147,   160,   421,  1347,
-  1499,   968,    58,  1167,    72,   127,   128,   441,   728,   155,
-   155,   155,   439,   809,  1381,  1382,  1383,  1384,   613,   614,
-  1300,   212,   220,   615,   616,   617,   618,  1327,  1569,   500,
-  1335,   359,   127,   128,   339,   140,   339,    13,   140,  1483,
-    58,   409,  1624,  1389,   156,   156,   156,   550,  1159,  1023,
-   140,     7,     8,     9,    10,    26,  1158,   130,   131,   505,
-   811,   127,   128,  1452,  1362,  1327,   535,  1245,  1335,  1077,
-  1156,   545,   958,   127,   128,   636,   898,  1419,   158,   483,
-   633,   546,    26,   390,   130,   131,   140,  1442,   140,    21,
-   156,   156,   156,  1345,  1591,   450,   251,  1603,   637,  1566,
-   258,   140,   493,   220,    27,    28,   450,     0,   638,  1608,
-   493,    26,   221,   130,   131,  1610,   636,  1207,   639,  1448,
-     0,   640,   641,    26,   258,   130,   131,   545,   252,    95,
-   110,   111,   529,     0,     0,   212,    32,   546,     0,   637,
-     0,     0,   450,     0,  1473,   158,   158,   158,  1046,   638,
-     0,     0,     0,   258,     0,     0,     0,     0,     0,   639,
-     0,     0,   640,   641,   258,     0,     0,    21,     0,   156,
-  1231,  1232,   156,  1241,  1242,     0,  1244,  1493,   116,  1006,
-  1007,     0,   112,   113,   411,   413,     0,   156,   156,   156,
-     0,   744,   536,     0,     0,     0,     0,  1079,   750,     0,
-     0,     0,   156,  1084,     0,     0,   506,     0,     7,     8,
-   507,    10,   167,    12,    13,     0,     0,   565,     0,    14,
-   116,  1006,  1007,   258,    95,   110,   111,     0,   225,   226,
-   227,   119,   120,    16,  1205,    17,    18,    19,  1523,     0,
-     0,    20,     0,     0,   871,  1523,    21,  1050,     0,     0,
-    23,   508,    18,   168,     0,   339,     0,   228,   258,    26,
-     0,    27,    28,   943,   574,   509,     0,   510,     0,     0,
-     0,    26,   743,   119,   120,    30,     0,   112,   113,   743,
-     0,   839,   258,   220,     0,    31,   101,     0,     0,     0,
-     0,     0,     0,    32,   115,     0,     0,     0,    33,    95,
-   110,   111,   421,  1347,     0,     0,  1140,     0,  1141,   719,
-   720,     0,   723,     0,   645,   649,   652,     0,  1523,     0,
-     0,     0,   212,     0,   220,   237,     0,     0,     0,     0,
-     0,     0,  1365,  1366,  1594,     0,     0,   233,    95,   110,
-   111,   892,   681,   682,   683,     0,     0,   893,     7,   127,
-   128,    10,   112,  1496,    13,     0,  1607,   741,   745,    95,
-   110,   111,   743,   871,     0,   745,     0,     0,   220,     0,
-   655,     8,     9,    10,   258,     0,    18,     0,     0,   140,
-   140,     0,   140,     0,   947,     0,    21,     0,     0,     0,
-   493,   112,   113,   450,     0,   339,   388,     0,     0,    26,
-     0,    27,    28,   450,   450,   308,   656,   783,    21,     0,
-   369,   371,   112,  1498,     0,    30,   116,   117,   118,     0,
-   416,    26,   743,   130,   131,    31,     0,     0,   743,     0,
-   450,     0,   258,    32,  1223,   450,     0,     0,    33,  1227,
-     0,     0,     0,     0,     0,     0,     0,   339,   745,     0,
-     0,     0,     0,     0,     0,     0,     0,   156,   743,     0,
-     0,     0,  1253,     0,  1255,   743,     0,    26,     0,   119,
-   120,     0,     0,  1457,  1458,  1459,     0,     0,     0,     0,
-   339,     0,   741,     0,     0,   868,   869,     0,   873,   874,
-   875,   876,   877,   878,   879,   880,   881,   882,   883,   884,
-   885,   886,   887,   888,   889,   890,   891,     0,   745,     0,
-   499,   501,     0,     0,   745,     0,     0,     0,     0,  1286,
-     0,     0,   258,   530,     7,     8,     9,    10,   214,   215,
-   216,   300,     8,     9,    10,    14,     0,     0,     0,     0,
-     0,    95,    96,    97,   745,     0,     0,     0,     0,     0,
-     0,   745,    18,   156,   156,   943,     0,    20,  1511,  1512,
-     0,     0,    21,     0,     0,     0,    23,   258,   636,    21,
-   382,   383,   384,   960,   962,    26,   251,    27,    28,     0,
-     0,   214,   215,   216,    27,   319,   363,     0,    14,   339,
-     0,   981,   237,   566,    98,    99,     0,   140,   140,   943,
-     0,   982,     0,   921,   923,    18,     0,     0,   252,    32,
-    20,   639,     0,     0,   983,   641,    32,     0,     0,    23,
-     0,    26,     0,   386,   387,  1114,  1115,   491,   215,   216,
-     0,  1120,   578,     0,    14,   674,     0,   741,     0,     0,
-     0,     0,     0,     0,   684,  1132,   943,  1133,     0,  1134,
-     0,    18,   743,     0,   258,     0,    20,   674,   127,   128,
-     0,  1393,   215,   216,     0,    23,     0,     0,    14,     0,
-   258,   986,     0,   645,   649,     0,   652,  1592,     7,     8,
-     9,    10,     0,   450,   450,     0,   450,   450,     0,   450,
-    20,     0,     0,     0,  1067,  1162,     0,     0,     0,    23,
-     0,   636,     0,     0,     0,   704,   743,   743,    26,     0,
-   130,   131,   743,     0,     0,     0,    21,     0,   649,     0,
-   339,   339,   636,   339,   637,     0,   743,     0,   743,    26,
-   743,    27,    28,     0,   638,     0,     0,     0,   745,  1453,
-  1454,  1183,     0,     0,   639,   981,     0,   647,   641,     0,
-     0,     0,     0,  1464,  1465,   982,     0,   116,  1006,  1007,
-  1105,  1049,     0,    32,     0,   639,     0,     0,   983,   641,
-  1475,   751,     0,     0,   779,     0,   743,     0,     0,     0,
-     0,     0,     0,     0,  1050,     0,   140,   140,   156,   156,
-   943,  1051,   745,   745,   140,     0,     0,   741,   745,   601,
-   602,   603,   604,   605,   606,   607,   608,   609,    26,     0,
-   119,   120,   745,   649,   745,     0,   745,   156,   156,   943,
-     0,     0,   743,     0,     0,     0,   258,   596,   597,   598,
-   599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
-   609,   743,  1518,  1519,     0,   450,   450,     0,     0,     0,
-     0,     0,  1155,     0,     0,     0,   840,   864,     0,   843,
-     0,     0,   745,   845,   846,   848,   849,   850,     0,     7,
-     8,     9,    10,     0,     0,   246,   578,   339,     0,     0,
-   300,   394,   395,    10,     0,     0,  1135,     0,  1136,   867,
-  1179,     0,     0,     0,     0,     0,     0,    18,     0,  1142,
-     0,   912,     0,   921,   923,     0,     0,    21,   745,     0,
-     0,   140,   140,   636,   140,     0,     0,  1301,    21,  1302,
-    26,  1303,    27,    28,     0,   251,     0,   745,     0,     7,
-     8,     9,    10,    27,   319,    13,   981,   627,     0,   300,
-   394,   395,    10,   924,   628,     0,   982,   921,   923,     0,
-   924,   212,   220,     0,    32,     0,   639,    18,     0,   983,
-   641,     0,  1229,  1230,   258,    32,   258,    21,     0,     0,
-   975,     0,     0,   636,     0,     0,     0,    21,     0,     0,
-    26,   992,    27,    28,   629,     0,   450,   450,   450,     0,
-    26,     0,    27,   319,     0,     0,  1172,     0,   743,     0,
-   743,     0,   743,   741,   741,     0,  1173,  1266,   258,     0,
-     0,     0,   864,     0,    32,    80,   639,     0,     0,  1174,
-   641,     0,  1395,     0,   630,   104,     0,   339,     0,     0,
-     0,     0,     0,     0,     0,   133,     0,     0,     0,     0,
-     0,   144,   144,     0,   144,     0,    80,     0,     0,     0,
-     0,     0,     0,    80,   156,     0,     0,     0,     0,   704,
-     0,     0,     0,     0,     0,     0,   203,     0,    80,     0,
-     0,   450,   450,     0,     0,     0,   238,     0,     0,     0,
-     0,     0,     0,   104,   745,   751,   745,     0,   745,     0,
-     0,     0,   258,     0,   262,   104,   741,   751,     0,     0,
-     0,     0,     0,   743,     0,   741,   741,     0,     0,     0,
-   741,     0,     0,     0,     0,     0,     0,   104,     0,     0,
-     0,   156,   156,   156,     0,   751,     0,     0,     0,     0,
-     0,   751,  1370,     0,     0,     0,  1135,  1136,   921,   923,
-   300,     8,     9,    10,  1142,   133,     0,    80,     0,     0,
-     0,   144,   144,     0,     0,     0,   412,   144,   741,     0,
-   144,   144,   144,     0,     0,     0,     0,   921,   923,   258,
-     7,   127,   128,    10,     0,     0,    80,     0,    21,     0,
-    80,     0,     0,     0,     0,   251,   203,    80,     0,   745,
-   450,     0,     0,    27,   319,     0,   258,     0,    18,  1116,
-     0,     0,     0,     0,   203,   203,   203,     0,    21,     0,
-     0,     0,     0,  1414,     0,     0,     0,   538,     0,     0,
-     0,    26,     0,    27,    28,    32,   127,   128,     0,     0,
-   215,   216,   867,   203,     0,   684,    14,   149,   751,     0,
-     0,     0,   924,     0,     0,     0,     0,   150,   975,   743,
-   502,     0,     0,   741,     0,    32,    80,     0,    20,   104,
-   151,  1135,  1136,     0,  1142,  1455,  1456,    23,     0,   636,
-   144,     0,     0,     0,     0,     0,    26,     0,   130,   131,
-   704,     0,  1168,   741,     0,     0,   924,     0,   259,     0,
-     0,     0,   637,     0,     0,     0,     0,     0,   127,   128,
-     0,     0,   638,   246,     0,     0,     0,     0,   104,   547,
-     0,     0,   639,     0,     0,   640,   641,     0,   471,   473,
-   477,     0,     0,     0,     7,   127,   128,    10,     0,     0,
-   246,     0,     0,   924,     0,   745,     0,     0,     0,     0,
-     0,   636,     0,     0,     0,     0,  1210,     0,    26,     0,
-   130,   131,    18,   104,     0,     0,     0,   634,  1516,   547,
-   547,   650,    21,     0,   637,   434,     0,     0,     0,     0,
-    80,     0,     0,     0,   638,    26,     0,    27,    28,  1263,
-     0,     0,     0,     0,   639,     0,  1536,   640,   641,     0,
-   751,    30,   751,     0,     0,     0,     0,   469,     0,     0,
-     0,    31,     0,     0,   133,   795,   796,     9,    10,    32,
-   485,     0,     0,   104,    33,   203,   104,     0,     0,     0,
-  1271,     0,     0,     0,     0,     0,   127,   128,     0,     0,
-   144,   535,     0,   144,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    21,     0,   144,     0,     0,     0,     0,
-     0,     0,     0,    80,     0,     0,    26,     0,    27,    28,
-     7,     8,     9,    10,   797,  1305,   535,     0,     0,   636,
-     0,  1263,   193,     0,     0,     0,    26,   924,   130,   131,
-     0,   203,   194,   203,     0,   203,   203,   203,    18,     0,
-    32,   203,   637,     0,     0,   195,   203,     0,    21,   203,
-     0,     0,   638,     0,   636,     0,   924,     0,   741,     0,
-     0,    26,   639,    27,    28,   640,   641,     0,     0,   133,
-  1358,     0,    80,     0,    80,     0,     0,   981,     0,   806,
-    80,     0,    80,     0,     0,     0,   166,   982,     7,     8,
-     9,    10,   167,    12,    13,    32,     0,   639,     0,    14,
-   983,   641,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    16,     0,    17,    18,    19,     0,     0,
-     0,    20,   104,   104,   104,   104,    21,     0,     0,     0,
-    23,     0,     0,   168,     0,     0,     0,     0,     0,    26,
-     0,    27,    28,  1421,  1422,   761,     0,   762,     0,   471,
-   473,   477,     0,     0,     0,    30,     0,     0,     0,     0,
-   773,     0,     0,     0,     0,    31,     0,     0,     0,     0,
-     0,     0,     0,    32,     0,     0,     0,     0,    33,     0,
-     0,     0,   104,    34,   547,     0,     0,     0,     0,     0,
-     0,     0,     0,   804,     0,     0,   634,     0,   547,   547,
-     0,   650,     0,     0,     0,     0,  1210,     0,   944,     8,
-     9,     0,   946,    12,   246,     0,     0,     0,     0,    14,
-     0,     0,     0,     0,  1479,     0,     0,   203,     0,     0,
-     0,     0,     0,    16,   766,    17,     0,     0,     0,   772,
-     0,    20,     0,     0,     0,     0,  1497,  1500,     0,     0,
-    23,   133,   636,     0,     0,     0,     0,     0,   133,    26,
-     0,   130,   131,     0,     0,     0,   203,   988,   203,   203,
-   238,   650,     0,     0,     0,   637,     0,     0,     0,     0,
-     0,     0,     0,   821,     0,   638,     0,     0,     0,   827,
-     0,     0,     0,     0,     0,   639,     0,     0,   640,   641,
-     0,   835,   836,     0,   837,     0,     0,     0,     0,   300,
-     8,     9,    10,   203,     0,     0,     0,   988,     0,     0,
-     0,  1541,     0,     0,   203,   203,     0,   203,     7,     8,
-     9,    10,   214,   215,   216,     0,     0,     0,     0,    14,
-     0,     0,     0,   104,     0,     0,   806,    21,     0,     0,
-     0,     0,     0,     0,   251,   104,    18,     0,     0,     0,
-   578,    20,    27,   319,     0,     0,    21,     0,  1072,     0,
-    23,     0,   636,     0,   704,     0,    80,     0,     0,    26,
-     0,    27,    28,   104,     0,     0,     0,     0,     0,   104,
-     0,     0,     0,     0,    32,   981,   547,   547,   547,   932,
-   933,     0,     0,     0,   932,   982,     0,     0,   547,     0,
-     0,     0,     0,    32,     0,   639,     0,     0,  1030,   641,
-     0,     0,     0,     0,     0,     8,     9,     0,   167,    12,
-    13,     0,     0,   749,     0,    14,    83,     0,   761,   762,
-     0,   773,     0,     0,     0,     0,   106,     0,     0,    16,
-     0,    17,    18,     0,     0,   126,   134,    20,     0,     0,
-   804,     0,   145,   145,     0,   145,    23,    83,   636,     0,
-     0,     0,     0,     0,    83,    26,     0,   130,   131,     0,
-     0,   547,     0,   547,     0,     0,     0,   145,     0,    83,
-   104,   637,     0,     0,   547,     0,   104,   239,   944,   944,
-   944,   638,     0,     0,   248,     0,  1149,   300,   127,   128,
-    10,   639,     0,     0,   640,   641,   248,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     7,   127,   128,    10,
-     0,     0,    13,     0,     0,     0,     0,  1058,   104,     0,
-   104,     0,   203,   203,  1176,    21,     0,     0,     0,  1063,
-     0,     0,   251,     0,    18,     0,     0,     0,     0,     0,
-    27,   319,     0,     0,    21,     0,     0,     0,    83,     0,
-     0,     0,   145,   145,     0,     0,     0,    26,   145,    27,
-    28,   145,   145,   145,     0,  1086,     0,  1088,     0,     0,
-     0,  1176,    32,   149,     0,     0,     0,    83,     0,     0,
-     0,    83,     0,   150,   104,     0,     0,   145,    83,     0,
-     0,    32,     0,     0,     0,     0,   151,     0,     0,     0,
-     0,     0,     0,     0,     0,   145,   145,   145,     0,     0,
-   203,     0,     0,     0,     0,   144,     0,     0,    80,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   104,     0,
-   104,     0,     0,     0,   145,     0,   471,   473,   477,  1122,
-  1123,     0,  1125,     8,     9,     0,     0,    12,    13,     0,
-     8,     9,     0,    14,    12,   246,     0,    83,   104,     0,
-    14,     0,     0,   547,   547,     0,   547,    16,     0,    17,
-  1143,   145,     0,     0,    16,    20,    17,     0,     0,     0,
-     0,     0,    20,     0,    23,   477,     0,     0,     0,     0,
-     0,    23,     0,    26,     0,   130,   131,   619,     0,     0,
-    26,     0,   130,   131,     0,     0,     0,     0,     0,   248,
-   145,   203,   203,   203,   203,  1176,     0,     0,     0,   203,
-     0,  1178,     0,     0,  1239,     0,   642,   642,   642,     0,
-     0,     0,   620,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,  1176,  1176,  1176,     7,     8,     9,    10,   167,
-    12,    13,     0,     0,   248,     0,    14,     0,   635,     0,
-   145,   145,   651,     0,     0,     0,     0,   660,     0,     0,
-    16,    83,    17,    18,    19,     0,     0,     0,    20,     0,
-     0,     0,     0,    21,     0,     0,     0,    23,     0,     0,
-   168,     0,     0,     0,     0,     0,    26,     0,    27,    28,
-     0,     0,     0,     0,     0,   697,     0,     0,     0,     0,
-     0,     0,    30,     0,   248,     0,   145,   248,     0,     0,
-     0,     0,    31,     0,     0,   761,   762,   471,   473,   477,
-    32,   145,     0,   773,   145,    33,   203,   203,     0,   203,
-    34,     0,     7,     8,     9,    10,   145,     0,    13,     0,
-     0,     0,     0,     0,    83,     0,   471,   473,   477,     0,
+   442,   629,    35,   443,   692,   693,   444,   434,   980,   486,
+    42,   122,   391,    36,   252,   723,   535,   538,   431,   103,
+   639,   752,   887,   513,   977,   177,    58,   399,   952,   887,
+    59,  1467,   255,    35,   818,   638,   669,    59,   690,   196,
+   169,    42,   297,   958,    36,   174,   506,  1097,    42,   568,
+   485,    57,   209,   491,   494,   397,   398,    58,  1022,   493,
+  1024,   708,   857,  1414,    58,   910,   719,   246,  1054,   182,
+   390,  1017,   396,  1527,  1523,  1059,   607,  1429,   190,   295,
+   607,  1064,    57,   348,  1432,   348,   170,   348,   259,   176,
+   419,   422,   451,  1172,   171,   525,   255,  1528,    72,   248,
+  1600,    86,   348,   348,   761,   591,   294,   924,    -1,  1537,
+   138,   363,  1051,  1178,   607,   224,    55,   716,  -144,   959,
+  1553,   938,   178,    88,   141,   146,    89,   642,   208,    72,
+  1550,   405,   348,    -2,   348,   988,    72,   939,   155,   221,
+   516,   163,   589,   590,   643,   644,    90,    55,   525,  -356,
+    87,   592,   177,   452,   175,   255,   925,  -356,    58,   196,
+    59,   452,   889,  1179,    59,  1562,  -295,   169,   439,  1173,
+   816,   209,   174,   705,   717,    42,  1579,   965,   296,   190,
+  1055,   164,   989,   404,  1052,   990,   453,    58,  1123,   803,
+  1594,    58,   740,   224,   453,   520,   698,   699,     8,   518,
+   466,    15,  1612,   539,   540,  -415,  1467,   402,    38,   224,
+   988,  1563,    57,   170,  -143,    93,   176,     8,     9,   548,
+  1553,   171,   549,  1199,   190,   550,   137,  1267,   560,  1056,
+    72,   817,   565,  1390,  -415,    39,   489,  1525,  -415,    38,
+   606,    76,   362,   418,   421,  1531,   467,   208,   403,   178,
+   130,   131,   259,  1200,   155,   155,   155,   989,  1130,    72,
+   990,  1133,  -828,    72,  -302,   224,    39,   613,   757,   130,
+   131,  1328,    76,   224,   519,  1145,  1268,    55,    40,    76,
+   307,   175,  1391,  -415,   612,   677,   781,   469,   471,   221,
+   224,   246,   201,   713,   213,  1560,    26,   221,   221,   604,
+   155,   887,  1159,  1160,   222,   223,  -365,   639,    15,    40,
+  -302,  -302,  1203,   299,   393,   394,    10,   937,    94,  1096,
+  1329,   491,   494,   348,  1208,  -295,   221,   755,   981,   491,
+   672,   963,   964,   458,   928,   993,   295,     8,     9,  -365,
+   692,   999,   494,  -365,   246,   887,  1595,   514,    89,   617,
+   459,    21,   348,   648,  1340,  1341,  -141,   101,  1229,   259,
+  1231,   494,   107,   294,    26,   115,    27,   318,    90,   108,
+  1622,  1362,  1390,   406,   162,   221,  -365,   409,  1555,   460,
+    58,   362,   994,   513,    91,   995,   629,   695,  -579,   130,
+   131,  -579,   887,   515,   299,   802,   689,    10,    32,   209,
+   591,   109,    76,   634,    92,   404,    76,   680,   233,   792,
+  1248,  1148,   201,   213,   419,   422,   135,  1098,   355,  1623,
+   356,  1498,    18,   688,   177,   138,   892,  1590,   221,   646,
+  1194,  1027,    21,  1374,   911,   296,    59,  1125,  -579,   773,
+  -579,  -579,   137,  -579,   710,   139,   592,   425,   426,   635,
+   548,   549,    72,   161,  -579,   793,  -579,   127,   128,   201,
+   187,   427,   733,    58,  1028,   407,   376,   387,  1029,  -625,
+   647,   428,  -579,  -579,   977,   750,   860,  1264,  1265,    32,
+   222,   445,   617,   756,   429,   221,    90,  -579,   176,   688,
+   179,   415,   348,   861,   377,   691,  1443,    95,   110,   111,
+    59,  1030,   224,   767,   378,  1449,  1450,    26,  1451,   130,
+   131,  1017,  1054,  1209,    92,  -625,  -625,   183,   758,  1412,
+   188,   178,   862,   864,   137,    88,   348,    58,   802,   348,
+  -625,   137,   348,   865,   962,    72,   348,   808,   808,   808,
+   808,   692,   693,  -304,   561,   224,   562,   866,   875,   348,
+   112,   113,   775,   175,   887,    18,  -583,   127,   128,   348,
+   604,   691,   348,  1463,   677,   221,   221,   744,   745,   127,
+   128,   934,   639,   221,  1406,   690,   770,   158,   155,   155,
+   155,   498,   500,   887,  1444,   244,   221,   638,  1072,  -304,
+  -304,   491,  1171,   511,   876,   649,    88,   295,   359,    72,
+   933,   362,  -583,   189,  -298,   221,   127,   128,   525,   130,
+   131,   877,  1195,   298,  1197,   568,   689,   774,  1201,    26,
+   879,   130,   131,   733,   294,   508,   138,    95,   110,   111,
+   510,   913,    91,   519,   116,   117,   118,   259,   479,   480,
+   201,  1237,  1239,   688,  1017,  1253,     7,     8,   249,    10,
+   688,   361,    92,   371,  1540,  1541,   373,   878,   130,   131,
+   375,  1003,   374,   547,  1031,    21,   880,   122,   348,   379,
+   945,   509,   950,   951,   380,  1165,   400,  -295,    76,   642,
+   112,   113,   209,  -583,    21,   645,   246,   119,   120,   365,
+   369,   250,  1167,   158,   158,   158,   296,   127,   128,    27,
+    28,   773,   978,   773,  -366,   655,    15,  1004,   860,   773,
+  1032,   773,   881,   883,   665,   691,   201,   951,   487,   488,
+  1144,  1166,   691,   251,   201,   861,   424,   655,   221,  -583,
+   481,    32,   689,   189,  1239,  1169,   302,  -366,  1168,   158,
+   617,  -366,   780,  1324,  1326,   479,   711,    26,  1330,   130,
+   131,    -7,  1469,   803,   862,  1373,   127,   128,  1037,   688,
+   432,   516,    59,   618,    59,   767,   431,   767,  1106,   221,
+   209,   895,    59,   619,  -366,   767,  -620,  1574,   689,   348,
+   348,  1170,   348,   620,   689,   164,   621,   622,   790,    58,
+  1161,    58,  1371,  1025,  1026,    91,   548,   549,  1470,    58,
+  1334,  1335,  1336,  1057,   446,   688,    26,  1597,   130,   131,
+   447,   688,  1019,   221,   775,    92,   775,   896,   897,    91,
+   127,   128,   526,  1575,   775,   759,   240,   450,  1614,   462,
+   241,   691,   527,   463,   791,   221,   487,   712,   770,    92,
+   770,  1069,  1070,  1071,   760,  1036,  1046,   497,   770,  1224,
+  1225,  1226,   348,  1598,   502,   127,   128,  1100,  1020,   799,
+   516,    72,   523,    72,   362,   391,   521,  -304,   214,   215,
+   216,    72,   130,   131,  1615,    14,   522,   691,   524,   774,
+  1601,  1023,  -304,   691,   201,   808,  -304,  1435,   221,   774,
+   532,   689,    18,  1388,  1389,   733,   251,    20,   541,     8,
+     9,   255,  -304,     8,     9,    26,    23,   130,   131,   825,
+   555,   259,    91,   564,  -304,  -304,   542,  -304,   688,  -304,
+  -142,   864,   688,   201,   948,   201,   201,   129,  1461,   479,
+  1492,   865,    92,   689,   543,   808,   348,    26,    89,   689,
+  1409,   487,  1493,   362,   680,   866,  1210,   362,  -304,  -304,
+    15,   130,   131,   873,  -415,   130,   131,   224,    90,   544,
+   688,    89,   545,  -304,   803,    91,   688,   479,  1497,  1393,
+   201,   147,   607,  1394,   997,   251,   127,  1358,   252,   519,
+   653,    90,  -415,  -415,   656,    92,   733,   773,  1249,  1250,
+   691,  1252,   881,   883,   691,   657,   255,   659,  -120,   808,
+    15,   931,   215,   216,   780,  1254,   780,  1037,    14,  1473,
+   660,  1043,  1050,   688,   780,   689,   673,   158,   158,   158,
+   362,   448,   936,   661,   674,  1490,    90,   689,   130,   131,
+    20,  -120,   691,   953,    92,  -120,  1149,  1150,   691,    23,
+   702,   617,   688,    -6,   564,  1378,   727,   706,    59,   155,
+   728,   767,   519,   746,   688,   966,   967,   968,   751,  1212,
+   561,   689,   562,   689,   825,  1214,  1215,   -52,  -120,  1212,
+  1217,    15,   -52,  1215,   784,    58,   785,   786,   548,   549,
+   787,   410,   497,   -52,   812,   691,   412,   802,   688,   794,
+   688,   808,   419,   422,  1036,   795,   155,   814,   815,   969,
+   775,   717,   872,   817,   348,   874,    26,   255,   970,   971,
+   888,  1473,  1060,  1061,   691,  1062,   555,   692,  1546,   555,
+   890,   419,   422,   805,   770,   892,   691,   916,   917,   926,
+   127,   128,  1473,   927,   147,   930,   555,  1420,    20,  1425,
+  1422,  -118,   932,    15,   940,   972,    89,    72,   689,   555,
+   520,   941,   978,   832,  1445,   773,   116,   117,   118,  1571,
+   691,  -298,   691,   954,   960,   774,    90,  1616,   127,   128,
+  1311,   803,   961,  1302,  -118,   688,   452,   733,  -118,   985,
+    26,   855,   130,   131,  1303,   986,  -827,   871,   116,   967,
+   968,   348,  1473,   987,   992,  1001,   526,    58,   517,  1005,
+   560,    95,   413,   414,   688,  1006,   527,    26,   129,   119,
+   120,  -118,  1009,   719,  1073,  1011,    59,  1074,    26,   767,
+   130,   131,  1310,  1075,  1078,  1076,   608,  1077,   299,   393,
+   394,    10,  1079,   609,  1080,   140,   140,  1081,   156,    26,
+  1082,   119,   120,    58,  1083,  1270,  1271,   691,  -140,  1085,
+   299,   393,   394,    10,    98,   113,   155,   155,   155,  1086,
+  1043,  1089,   212,  1088,   220,  1092,    21,   665,   775,    72,
+   237,   215,   216,   610,  1270,  1271,   691,    14,  1090,    26,
+   936,    27,   318,  1091,  1105,   155,   155,   155,    21,  1107,
+   780,  1108,   770,  1419,  1109,  1419,  1110,  1311,  1136,    20,
+  1302,  1116,  1117,    27,   318,   209,  1118,  1311,    23,  1164,
+  1302,  1142,  1124,   611,  1311,    72,  1126,  1302,   525,  1127,
+  1129,  1303,  1139,   808,    58,  1143,  1187,  1196,  1303,    95,
+    96,    97,  -183,   774,    58,    32,  1193,  1536,  1198,  1213,
+  1219,    58,   153,  1218,  1223,  1227,   140,   137,  -183,  1310,
+  -183,   140,  1232,  1233,   156,   156,   156,  1234,   700,  1310,
+  1235,   701,   381,   382,   383,  1240,  1310,   127,   128,   725,
+  1242,    15,    13,   704,  1243,  -415,   731,  1447,  1448,  1244,
+    26,   212,    98,    99,   100,  1247,  1251,   449,  1255,  1172,
+  1257,   221,   548,   549,  1588,  1258,    72,  1259,   140,   140,
+   156,  1262,  1263,  -415,  -415,  1266,    72,   384,  -415,   410,
+   617,   412,  1269,    72,   220,   385,   386,    26,  1274,   130,
+   131,  1323,   492,   220,   517,  1339,   459,  1343,  -662,  1238,
+   338,  1365,   338,   618,   338,   419,   422,  1256,   490,   215,
+   216,   800,  1366,   619,  1372,    14,   489,  1376,  1103,  1377,
+  1355,  1382,  1392,   620,  1383,  1355,   621,   622,   780,   420,
+   423,  1384,    18,   140,  1385,  1518,  1401,    20,  1402,  1403,
+  1311,  1311,  1518,  1302,  1302,  1311,    23,  1415,  1302,   338,
+  1417,   338,   555,  1430,  1303,  1433,  1436,  1437,   158,  1303,
+  1476,   348,   294,  1457,  1458,  1459,  1460,    58,    58,   294,
+  1465,   853,    58,  1549,   153,  1477,  1481,   854,  1483,   689,
+  1484,   374,    95,   110,   111,  1280,  1311,  1491,  1513,  1302,
+  1514,  1238,  1310,  1310,  1522,  1311,  1532,  1310,  1302,   155,
+  1303,  1533,  1557,   156,  1548,   158,   688,  1558,  1566,  1303,
+  1564,  1582,  1569,    58,   908,  1570,   201,  1423,   201,  1586,
+  1592,  1518,    58,    95,   110,   111,  1593,   225,   226,   227,
+  1599,  1603,  1596,  1604,   296,   112,   113,   114,  1310,    72,
+    72,   296,  1572,  1608,    72,  1618,  1311,  1310,   294,  1302,
+  1620,    18,     7,   127,   128,    10,   228,  1613,   744,   745,
+  1303,   116,   967,   968,  1617,  1010,  1625,  1008,   221,   155,
+   155,   155,  1626,    58,  1628,  1629,   112,   113,   691,   212,
+   220,   636,     8,     9,    10,    72,  1311,     1,  1011,  1302,
+    21,   441,     5,   140,    72,  1012,   140,   250,  1310,   160,
+  1303,  1488,   156,   156,   156,    27,    28,   557,   140,  1407,
+  1408,  1146,    26,    58,   119,   120,   307,   637,   929,    21,
+   296,   381,   382,   383,   440,  1033,  1034,     9,    10,   251,
+   709,   546,    26,   438,   130,   131,  1047,    32,  1310,   586,
+   587,   588,   589,   590,   140,    72,   140,  1587,   156,   156,
+   156,  1275,   686,   449,   700,   701,   358,   704,   499,   140,
+   492,   220,   408,    21,   449,   158,   158,   158,   492,   338,
+  1472,  1375,    26,  1624,   385,   386,    26,  1138,    27,    28,
+  1137,   531,   449,   984,  1035,    72,   504,  1337,  1438,  1221,
+  1360,  1049,   193,  1135,   158,   158,   158,    95,    96,    97,
+   919,  1468,   194,   482,   614,   859,   389,   420,   703,   156,
+    32,  1610,   156,  1428,  1320,   195,  1602,  1607,   686,  1561,
+    95,   110,   111,  1486,  1489,  1609,   201,   156,   156,   156,
+  1186,  1434,     0,     0,   555,  1093,  1094,     7,     8,     9,
+    10,  1099,   156,    13,     7,     8,     9,    10,  1332,     0,
+    98,    99,     0,   420,   423,  1111,     0,  1112,     0,  1113,
+     0,     0,     0,     0,     0,    18,   116,   967,   968,     0,
+     0,   722,   726,   112,   113,    21,     0,     0,     0,   726,
+     0,   617,    21,     0,  1367,  1368,  1369,  1370,    26,   250,
+    27,    28,     0,     0,     0,     0,     0,    27,    28,     0,
+     0,  1534,     0,   904,   942,  1141,    95,   110,   111,   338,
+   662,   663,   664,   557,   943,     0,   557,     0,     0,   119,
+   120,   251,    32,   220,   620,     0,     0,   944,   622,    32,
+     0,     0,   420,   813,  1205,  1206,   584,   585,   586,   587,
+   588,   589,   590,   338,   726,     0,   557,  1405,     0,     0,
+     0,  1162,     0,   147,     0,     0,     0,     0,     0,   112,
+   113,  1220,   212,     0,   220,   237,  1222,     0,     0,     0,
+     0,     0,   686,    95,    96,    97,   338,     0,   722,   686,
+     0,   829,   830,     0,   834,   835,   836,   837,   838,   839,
+   840,   841,   842,   843,   844,   845,   846,   847,   848,   849,
+   850,   851,   852,     0,   726,     0,     0,   903,   220,     0,
+   726,     0,     0,     0,     0,     0,     0,     0,   362,   140,
+   140,     0,   140,     0,     0,  1462,    98,    99,     0,     0,
+   492,     0,     0,   449,   593,     0,     0,     0,   158,     0,
+   726,     0,     0,    95,   110,   111,     0,   726,     0,     0,
+   212,     0,     0,     0,     0,   470,   472,   476,  1482,     0,
+     0,     0,    95,    96,    97,  1007,   225,   226,   227,   921,
+   923,     0,     0,   594,   595,     0,     0,   156,   596,   597,
+   598,   599,    95,   110,   111,   338,     0,     0,   686,     0,
+    18,     0,     0,     0,  1058,   228,   112,  1485,     0,     0,
+  1063,     0,     0,     7,   127,   128,    10,     0,   158,   158,
+   158,     0,     0,    26,     0,    98,    99,   229,   257,     0,
+  1346,  1347,  1516,  1356,  1357,     0,  1359,     0,   832,  1516,
+     0,    18,     0,   722,   686,   112,  1487,     0,     0,     0,
+   686,    21,   257,     0,     0,  1276,     0,  1277,   555,  1278,
+     0,     0,     0,     0,    26,     0,    27,    28,     0,   410,
+   412,     0,   230,   231,   232,     0,     0,   517,     0,     0,
+   149,   257,     0,   156,   156,   904,     0,     0,  1021,     0,
+   150,   903,   257,     0,     0,     0,     0,     0,    32,     0,
+     0,     0,     0,   151,     0,     0,   338,   338,     0,   338,
+     0,     0,     0,  1119,     0,  1120,     0,     0,  1516,     0,
+     0,     0,   237,     0,   726,     0,     0,   140,   140,   904,
+     0,     0,     0,     0,     0,     0,     0,  1591,     0,     0,
+     0,     0,   127,   128,     0,     0,  1084,   245,     0,     0,
+     0,   257,     0,     0,     0,     0,  1381,   686,  1606,     0,
+     0,   686,     0,  1441,  1442,     0,     0,   832,     0,     0,
+     0,     0,     0,     0,     0,     0,   904,     0,   726,   726,
+     0,     0,     0,   722,   726,   617,   257,     0,   420,   813,
+   700,   701,    26,   704,   130,   131,     0,     0,   726,   686,
+   726,     0,   726,     0,     0,   686,     0,     0,   618,   257,
+   449,   449,     0,     0,     0,     0,     0,     0,   619,     0,
+     0,     7,   127,   128,    10,     0,     0,    13,   620,     0,
+     0,   621,   622,   153,     0,     0,     0,   449,  1134,     0,
+     0,   742,   449,   743,     0,   470,   472,   476,   726,    18,
+     0,     0,   686,     0,     0,     0,   754,     0,     0,    21,
+     0,     0,     0,   338,     0,  1504,  1505,  1506,     0,     0,
+     0,     0,    26,     0,    27,    28,  1158,     0,     0,     0,
+  1184,   686,     0,     0,     0,     0,     0,  1228,    30,  1230,
+   214,   215,   216,   686,   726,     0,     0,    14,    31,     0,
+     0,   257,     7,     8,     9,    10,    32,     0,   245,     0,
+     0,    33,     0,   726,    18,     0,     0,     0,     0,    20,
+     0,  1538,  1539,     0,     0,     0,     0,   686,    23,   686,
+    18,     0,     0,     0,   140,   140,   156,   156,   904,     0,
+    21,     0,   140,   696,  1261,     0,   617,     0,     0,     0,
+     0,     0,     0,    26,     0,    27,    28,  1211,     0,   257,
+     0,     0,     0,     0,     0,   156,   156,   904,     0,   942,
+     0,     0,     0,     0,   214,   215,   216,     0,     0,   943,
+     0,    14,     0,     0,     0,     0,     0,    32,     0,   620,
+     0,  1589,   944,   622,     0,     0,   449,   449,    18,   449,
+   449,     0,   449,    20,     0,     0,    80,   722,   722,     0,
+     0,  1241,    23,     0,   686,     0,   104,     0,     0,     0,
+     0,     0,     0,     0,  1338,     0,   133,   914,     0,  1342,
+     0,   338,   144,   144,     0,   144,     0,    80,     0,     0,
+     0,   420,   423,   686,    80,     0,     0,     0,     0,   257,
+     0,     0,     0,     0,     0,   140,   140,   203,   140,    80,
+     0,     0,   724,     0,     0,     0,     0,   238,     0,   724,
+   420,  1322,     0,     0,   104,     0,   257,     0,     0,     0,
+     0,     0,  1379,     0,     0,   261,   104,     0,   726,     0,
+   726,     0,   726,     0,     0,   212,   220,     0,     0,     0,
+   722,     0,     0,     0,     0,     0,     0,     0,   104,   722,
+   722,     0,     0,     0,   722,     0,   742,   743,     0,   754,
+     0,     7,     8,     9,    10,     0,     0,    13,     0,   449,
+   449,  1344,  1345,     0,   724,     0,   133,     0,    80,     0,
+     0,     0,   144,   144,     0,     0,  1042,   411,   144,    18,
+     0,   144,   144,   144,     0,     0,     0,     0,   722,    21,
+     0,     0,     0,   257,     0,   617,     0,    80,     0,     0,
+     0,    80,    26,     0,    27,    28,     0,   203,    80,   257,
+     0,   299,     8,     9,    10,  1453,  1454,     0,  1151,   726,
+     0,     0,     0,     0,   724,   203,   203,   203,  1152,     0,
+   724,     0,  1464,     0,     0,     0,    32,     0,   620,   156,
+     0,  1153,   622,  1400,     0,     0,     0,     0,     0,    21,
+     0,     0,     0,     0,   203,     0,   250,     0,     0,     0,
+   724,   449,   449,   449,    27,   318,     0,   724,     0,     0,
+     0,   501,     0,     0,     0,     0,     0,     0,     0,   104,
+     0,     0,     0,   722,     0,     0,     0,     0,   251,     0,
+   144,  1500,  1501,     0,     0,     0,    32,     0,     7,     8,
+     9,    10,  1446,     0,   516,     0,     0,  1511,  1512,   156,
+   156,   156,     0,     0,     0,     0,     0,   449,   449,     0,
+     0,     0,     0,     0,   722,     0,    18,     0,   104,   528,
+     0,     0,     0,     0,     0,     0,    21,     0,     0,     0,
+     0,     0,   617,  1184,   470,   472,   476,     0,     0,    26,
+     0,    27,    28,     0,     0,     0,   127,   128,     0,     0,
+     0,   516,     0,     0,     0,   942,     0,     0,     0,     0,
+     0,     0,     0,   104,     0,   943,   726,   615,     0,   528,
+   528,   631,     0,    32,     0,   620,     0,   449,   944,   622,
+    80,     0,     0,   476,     0,     0,  1502,  1503,     0,   617,
+     0,     7,   127,   128,    10,   686,    26,   245,   130,   131,
+     7,   127,   128,    10,   420,  1322,    13,     0,     0,   258,
+     0,     0,   618,     0,   133,  1042,     0,     0,     0,    18,
+  1529,     0,   619,   104,   724,   203,   104,     0,    18,    21,
+     0,     0,   620,     0,     0,   621,   622,     0,    21,     0,
+   144,     0,    26,   144,    27,    28,     0,     0,     0,     0,
+  1543,    26,     0,    27,    28,   144,     0,     0,    30,     0,
+     0,     0,     0,    80,     0,     0,     0,   149,    31,     7,
+     8,     9,    10,   257,     0,   257,    32,   150,   724,   724,
+     0,    33,     0,     0,   724,    32,   433,     0,     0,     0,
+   151,   203,     0,   203,     0,   203,   203,   203,   724,     0,
+   724,   203,   724,     0,     0,     0,   203,    21,     0,   203,
+     0,     0,     0,   617,     0,     0,     0,   257,   468,     0,
+    26,     0,    27,    28,     0,     0,     0,    80,     0,     0,
+     0,   484,     0,     0,     0,     0,   942,     0,     0,     0,
+     0,   742,   743,   470,   472,   476,   943,     0,   724,   754,
+     0,     0,     0,   722,    32,     0,   620,     0,     0,   944,
+   622,     0,     0,     0,   104,   104,   104,   104,     0,     0,
+     0,     0,   470,   472,   476,     0,     0,     0,     0,     0,
+     0,     7,     8,     9,    10,   167,    12,    13,     0,     0,
+   730,     0,    14,     0,   724,     0,     0,     0,     0,   299,
+     8,     9,    10,     0,     0,  1354,    16,     0,    17,    18,
+     0,     0,   257,   724,    20,     0,     0,     0,     0,    21,
+     0,     0,     0,    23,   104,   617,   528,     0,     0,     0,
+     0,     0,    26,     0,    27,    28,     0,    21,   615,     0,
+   528,   528,     0,   631,   250,     0,     0,     0,  1151,     0,
+   905,     0,    27,   318,   907,     0,     0,     0,  1152,     0,
+     0,     0,   742,   743,     0,   754,    32,     0,   620,   203,
+     0,  1153,   622,     0,     0,     0,   519,     0,     0,     0,
+   299,   393,   394,    10,    32,     0,     7,     8,     9,    10,
+   214,   215,   216,   133,     0,     0,   257,    14,     0,     0,
+   133,     0,     0,     0,     0,     0,     0,     0,   203,   949,
+   203,   203,   238,   631,    18,     0,     0,     0,    21,    20,
+     0,     0,     0,   257,    21,   250,     0,     0,    23,     0,
+   617,     0,     0,    27,   318,     0,     0,    26,     0,    27,
+    28,     0,     0,     0,     0,     0,     0,     7,   127,   128,
+    10,     0,     0,   942,     0,   203,     0,     0,     0,   949,
+     0,     0,     0,   943,     0,    32,   203,   203,     0,   203,
+     0,    32,     0,   620,     0,    18,   944,   622,     0,     0,
+     0,     0,     0,     0,   257,    21,   133,     0,   724,    80,
+   724,    80,   724,     0,     0,     0,  1044,    80,    26,    80,
+    27,    28,     0,     0,   747,   104,     0,     0,     0,   753,
+     0,   104,     0,     0,    30,     0,   476,     0,   528,   528,
+   528,     0,     0,     0,    31,     0,   299,     8,     9,    10,
+   528,     0,    32,     0,     0,   782,     0,    33,     0,    83,
+     0,   788,     0,     0,     0,     0,     0,     0,     0,   106,
+     0,     0,     0,   796,   797,     0,   798,     0,   126,   134,
+     0,     0,     0,     0,    21,   145,   145,     0,   145,     0,
+    83,   250,     0,     0,     0,     0,     0,    83,     0,    27,
+   318,     0,     0,     0,     0,     0,   470,   472,   476,   724,
+   145,     0,    83,   299,   127,   128,    10,     0,     0,     0,
+   239,     0,     0,   528,     0,   528,     0,   247,     0,     0,
+     0,    32,   104,     0,     0,     0,   528,     0,   104,   247,
+   905,   905,   905,     0,     0,     0,     0,     0,  1128,     0,
+     0,    21,     0,     0,     0,     0,     0,     0,   250,     0,
+     0,     0,     7,     8,     9,    10,    27,   318,    13,     0,
+     0,   893,   894,     0,     0,     0,   893,   626,   630,   633,
+   104,     0,   104,     0,   203,   203,  1155,     0,     0,     0,
+    18,    83,     0,     0,     0,   145,   145,     0,    32,     0,
+    21,   145,     0,     0,   145,   145,   145,     0,     0,     0,
+     0,     0,     0,    26,     0,    27,    28,     0,     0,     0,
+    83,     0,     0,     0,    83,     0,     0,     0,     0,   193,
+   145,    83,     0,  1155,     0,     0,     0,     0,     0,   194,
+     0,     0,     0,     0,     0,     0,   104,    32,   145,   145,
+   145,     0,   195,     0,     0,     0,     0,     0,     0,     8,
+     9,     0,   104,    12,   245,  1044,   724,     0,     0,    14,
+     0,     0,     0,     0,   104,     0,     0,   145,     0,     0,
+     0,     0,     0,    16,     0,    17,     0,  1216,     0,     0,
+     0,    20,     0,     0,     0,    80,     0,     0,     0,     0,
+    23,     0,     0,     0,     0,     0,     0,     0,   104,    26,
+   104,   130,   131,   145,     0,     0,     0,     0,   762,     0,
+     7,     8,   763,    10,   167,    12,    13,     0,     0,     0,
+     0,    14,     0,     0,     0,     0,     0,  1065,   104,  1067,
+     0,     0,     0,   528,   528,    16,   528,    17,    18,    19,
+     0,   247,   145,    20,  -525,     0,     0,     0,    21,     0,
+     0,     0,    23,   764,     0,   168,     0,     0,     0,     0,
+     0,    26,     0,    27,    28,     0,     0,   765,     0,   766,
+     0,   623,   623,   623,     0,     0,     0,    30,     0,     0,
+     0,   203,   203,   203,   203,  1155,   247,    31,     0,   203,
+   616,     0,   145,   145,   632,    32,     0,     0,     0,   641,
+    33,  1101,  1102,    83,  1104,     7,   127,   128,    10,     0,
+     0,   516,  1155,  1155,  1155,     0,  -525,     0,     0,     0,
+     0,     0,  1033,  1034,     9,    10,     0,     0,     0,     0,
+     0,     0,  1122,    18,     0,     0,     0,   678,   882,   884,
+     0,     0,     0,    21,     0,   203,   247,     0,   145,   247,
+   144,     0,     0,    80,     0,     0,    26,     0,    27,    28,
+    21,     0,     0,   145,     0,     0,   145,     0,     0,     0,
+     0,     0,    30,    26,     0,    27,    28,     0,   145,  1204,
+     0,  1035,    31,  1157,     0,     0,    83,     0,     0,   193,
+    32,     0,     0,     0,     0,    33,     0,     0,     0,   194,
+     0,     0,   203,   203,     0,   203,   947,    32,   626,   630,
+     0,   633,   195,     0,   145,     0,   145,     0,   145,   145,
+   145,     0,     0,     0,   145,     0,     0,     0,     0,   145,
+     0,     0,   145,     0,     0,     0,     0,     0,     0,     0,
+     0,   203,   949,   203,     0,     0,     0,     0,     0,     0,
+    83,     0,     0,   630,     0,     0,  1202,     0,     0,     0,
+   104,     0,     0,     0,     0,     0,     0,     0,  1207,     0,
+     0,     0,     8,     9,     0,   167,    12,    13,     0,     0,
+   730,     0,    14,     0,     0,     0,     0,   247,   247,   247,
+   247,     0,     0,     0,     0,     0,    16,     0,    17,    18,
+     0,     0,     0,     0,    20,     0,     0,     0,     0,     0,
+     0,     0,     0,    23,     0,   617,     0,     7,     8,     9,
+    10,     0,    26,     0,   130,   131,     0,     0,   630,   582,
+   583,   584,   585,   586,   587,   588,   589,   590,   618,     0,
+     0,     0,   623,   623,     0,   623,     0,   247,   619,   145,
+     0,     0,   902,     0,  1260,    21,  1155,     0,   620,     0,
+     0,   621,   622,   145,   145,     0,   632,     0,    26,     0,
+    27,    28,     0,   906,   192,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   193,     0,   641,     0,     0,     0,
+     0,     0,   145,  1273,   194,     0,     0,     0,     0,     0,
+     0,  1114,    32,  1115,     0,     0,     0,   195,     0,     0,
+   623,     0,   623,   623,  1121,   623,   678,     0,   882,   884,
+     7,     8,     9,    10,   126,     0,  1155,  1155,  1155,     0,
+     0,   145,   632,   145,   145,   239,   632,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,   104,     0,    18,     0,
+     0,   203,     0,     0,     0,     0,     0,   623,    21,   979,
+  1363,     0,   882,   884,  1364,     0,     0,     0,     0,     0,
+     0,    26,     0,    27,    28,     0,     0,     0,   145,     0,
+     0,     0,   632,     0,     0,     0,     0,   473,     0,   145,
+   145,     0,   145,     0,     0,     0,     0,   474,     0,  1380,
+     0,     0,     0,     0,     0,    32,   979,   368,   370,   134,
+   475,     0,    83,     0,    83,     0,     0,     0,     0,  1045,
+    83,     0,    83,     0,     0,     0,     0,     0,   247,     0,
+     0,     0,   623,     0,   247,     0,     0,     0,     0,     0,
+     0,   145,   145,   145,     7,     8,     9,    10,   205,    12,
+   206,     0,     0,   145,     0,    14,     0,     0,     0,     0,
+     0,     0,    51,     0,     0,     0,     0,     0,     0,    16,
+     0,    17,    18,     0,     0,     0,  1439,    20,     0,     0,
+  1440,     0,    21,     0,     0,     0,    23,     0,    51,    51,
+     0,   152,     0,    51,     0,    26,     0,    27,    28,     0,
+    51,   207,  1455,  1456,     0,   623,     0,   623,     0,     0,
+     0,    30,     0,    51,     0,    51,     0,     0,   623,     0,
+     0,    31,   902,   902,   902,     0,   145,     0,   145,    32,
+     0,     0,     0,     0,    33,   247,     0,     0,   253,   145,
+     0,   247,     0,   906,   906,   906,     0,     0,     0,     0,
+     0,   641,     7,     8,     9,    10,     0,     0,   245,     0,
+     0,     0,     0,     0,     0,     0,   623,   623,   623,  1114,
+  1115,   882,   884,     0,     0,     0,     0,  1121,     0,     0,
+    18,     0,     0,   247,     0,   247,     0,   145,   145,   632,
+    21,   395,   395,     0,    51,     0,     0,     0,    51,    51,
+   882,   884,   253,    26,    51,    27,    28,   152,   152,   152,
+     0,     0,     0,     0,   430,   902,     0,     0,     0,   193,
+     0,     0,     0,    51,     0,     0,     0,    51,   559,   194,
+     0,     0,     0,    51,    51,     0,   906,    32,     0,     0,
+     0,     0,   195,     0,     0,     0,     0,     0,     0,   247,
+     0,    51,    51,   152,     0,     0,     0,     0,     0,     0,
+     0,   253,     0,     0,     0,   247,     0,     0,  1045,     0,
+     0,     0,     0,     0,     0,     0,     0,   247,     0,   762,
+    51,     7,     8,   763,    10,   167,    12,    13,     0,     0,
+  1114,  1115,    14,  1121,     0,     0,     0,     0,    83,     0,
+     0,   685,     0,     0,     0,     0,    16,     0,    17,    18,
+    19,   247,     0,   247,    20,  -526,    51,     0,     0,    21,
+     0,     0,     0,    23,   764,     0,   168,     0,     0,     0,
+     0,     0,    26,     0,    27,    28,     0,     0,   765,     0,
+   766,   247,     0,     0,     0,     0,   145,   145,    30,   145,
+     0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
+     0,     0,     0,     0,     0,     0,    32,   732,     0,     0,
+     0,    33,     0,   623,   623,   623,   623,   623,     0,     0,
+     0,   623,     0,     0,     0,     0,   556,  -526,     0,     0,
+     0,     0,     0,     0,   145,   145,   145,   145,   632,     0,
+     0,     0,   145,   395,   902,   902,   902,     0,     0,   979,
+     0,   253,     0,     0,     0,     0,    51,     0,     0,     0,
+     0,  1348,  1349,     9,    10,   906,   906,   906,     0,     0,
+     0,     0,     0,     0,   801,     0,     0,   804,     0,     0,
+     0,   806,   807,   809,   810,   811,   979,     0,     0,     0,
+   395,     0,     0,     0,   559,     0,     0,     0,   145,    21,
+     0,    51,     0,   145,     0,     0,    83,   828,     0,     0,
+     0,     0,    26,     0,    27,    28,    51,     0,     0,    51,
+  1350,     0,     0,     0,     0,   430,   430,   430,   193,     0,
+     0,    51,     0,     0,   623,   623,     0,   623,   194,    51,
+     0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
+     0,   195,     0,     0,     0,   145,   145,     0,   145,     0,
+     0,   885,     0,     0,     0,     0,     0,    51,   885,    51,
+     0,   152,   152,   152,     8,     9,     0,    51,    12,    13,
+     0,     0,    51,  1411,    14,    51,     0,     0,     0,     0,
+     0,     0,     0,     0,   145,   632,   145,     0,    16,     0,
+    17,     0,    78,    51,     0,     0,    20,     0,     0,     0,
+     0,     0,     0,   247,     0,    23,     0,     0,     0,   979,
+     0,     0,     0,     0,    26,     0,   130,   131,    78,    78,
+     0,    78,   556,    78,     0,   556,     0,     0,     0,     0,
+    78,   762,     0,     7,     8,   763,    10,   167,    12,    13,
+   556,   556,   556,    78,    14,    78,     0,     0,     0,     0,
+     0,     0,     0,   858,     0,   556,     0,     0,    16,     0,
+    17,    18,    19,     0,     0,     0,    20,   685,     0,     0,
+     0,    21,     0,     0,     0,    23,   764,     0,   168,     0,
+     0,     0,     0,     0,    26,     0,    27,    28,     0,     0,
+   765,     0,   766,     0,     0,     0,     0,     0,     0,   906,
+    30,     0,     0,   253,     0,     0,     0,     0,     0,     0,
+    31,     0,     0,   732,     0,     0,   556,     0,    32,   732,
+     0,     0,     0,    33,    78,   159,     0,     0,    78,    78,
+     0,     0,     0,     0,    78,    51,     0,    78,    78,    78,
+     0,     0,     0,     0,     0,     0,     0,   204,     0,     0,
+     0,     0,     0,    78,     0,     0,     0,    78,     0,   395,
+     0,     0,     0,    78,    78,     0,   395,     0,     0,   906,
+   906,   906,     0,     0,    51,    51,    51,    51,     0,     0,
+     0,    78,    78,    78,     0,     0,     0,  1095,     0,   247,
+     0,     0,     0,     0,   145,     0,     0,     0,     0,     7,
+     8,     9,    10,     0,     0,    13,     0,     0,     0,     0,
+    78,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   828,    51,     0,     0,     0,    51,   732,    18,     0,     0,
+   885,     0,    51,    51,     0,    51,     0,    21,     0,     0,
+     0,   159,   159,   159,     0,     0,    78,     0,     0,     0,
+    26,     0,    27,    28,     0,    51,     0,    51,     0,    18,
+     0,     0,    51,    51,     0,    51,   473,   204,   685,     0,
+  1147,     0,     0,     0,   885,     0,   474,     0,     0,     0,
+     0,     0,     0,     0,    32,   204,   204,   477,     0,   475,
+   556,   569,   570,   571,   572,   573,   574,   575,   576,   577,
+   578,   579,   580,   581,   582,   583,   584,   585,   586,   587,
+   588,   589,   590,     0,   204,     0,     0,     0,     0,     0,
+     0,   885,     0,     0,     0,     6,     0,     7,     8,     9,
+    10,    11,    12,    13,  1189,     0,     0,     0,    14,     0,
+     0,     0,   640,     0,     0,     0,    78,     0,     0,     0,
+   732,    15,    16,     0,    17,    18,    19,     0,     0,     0,
+    20,     0,   732,     0,     0,    21,     0,     0,    22,    23,
+    24,     0,    25,     0,     0,     0,     0,     0,    26,     0,
+    27,    28,     0,     0,    29,     0,   556,   556,   556,   529,
+     0,    78,   430,   253,    30,     0,   732,     0,   732,     0,
+     0,     0,     0,     0,    31,     0,    78,     0,     0,    78,
+     0,     0,    32,     0,     0,     0,     0,    33,     0,     0,
+     0,    78,    34,     0,     0,     0,  1246,     0,     0,    78,
+    51,    51,   152,     0,     0,     0,     0,   253,     0,   625,
+   625,   625,     0,  -387,     8,     9,  -387,  -387,    12,   245,
+     7,     8,     9,    10,    14,     0,   516,    78,     0,    78,
+     0,    78,    78,    78,     0,     0,     0,    78,    16,     0,
+    17,  -387,    78,     0,     0,    78,    20,     0,    18,  1183,
+     0,  -387,     0,   885,     0,    23,     0,   617,    21,     0,
+     0,     0,     0,    78,    26,   204,   130,   131,     0,     0,
+     0,    26,     0,    27,    28,     0,     0,     0,     0,     0,
+   618,    51,   885,     0,     0,     0,     0,   193,     0,     0,
+   619,     0,     0,     0,     0,     0,  1333,   194,  -387,     0,
+   620,     0,   253,   621,   622,    32,     0,     0,     0,     0,
+   195,    51,     7,     8,     9,    10,   214,   215,   216,     0,
+     0,     0,     0,    14,     0,     0,     0,     0,     0,     0,
+     0,   204,     0,   204,     0,   477,   477,   477,     0,     0,
+    18,   204,     0,     0,     0,    20,   204,     0,     0,   204,
+    21,     0,     0,     0,    23,     0,   617,     0,     0,     0,
+     0,     0,     0,    26,     0,    27,    28,     0,     0,     0,
+     0,     0,     0,     0,   640,     0,     0,     0,     0,   942,
+     0,     0,  1348,   127,   128,    10,   253,     0,     0,   943,
+     0,     0,     0,     0,     0,     0,     0,    32,     0,   620,
+     0,     0,   991,   622,     0,    78,     0,    51,    51,   152,
+   152,   152,     0,   253,     0,    51,     0,     0,     0,     0,
+    21,     0,     0,     0,     0,     0,     0,     0,  1189,     0,
+     0,     0,     0,    26,     0,    27,    28,     0,  1183,  1183,
+  1183,  1350,     0,     0,    78,    78,    78,    78,     0,    30,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    31,
+     0,     0,     0,     0,     0,     0,   867,    32,     0,     0,
+     0,    51,    33,   202,     0,     0,    51,     0,     0,    51,
+   625,   625,     0,   625,     0,     7,     8,     9,    10,     0,
+   625,    78,     0,     0,     0,    78,     0,     0,   256,     0,
+     0,   260,    78,    78,     0,    78,     0,     0,     0,   204,
+   579,   580,   581,   582,   583,   584,   585,   586,   587,   588,
+   589,   590,   256,    21,   364,    78,     0,    78,    51,    51,
+     0,    51,    78,    78,     0,    78,    26,     0,    27,    28,
+     0,     0,  1418,     0,     0,     0,     0,     0,   946,     0,
+   946,   946,   193,   625,     0,     0,     0,     0,     0,     0,
+     0,     0,   194,     0,     0,     0,     0,    51,    51,    51,
+    32,     0,     0,     0,     0,   195,   574,   575,   576,   577,
+   578,   579,   580,   581,   582,   583,   584,   585,   586,   587,
+   588,   589,   590,   202,     0,   946,   559,   166,     0,     7,
+     8,     9,    10,   167,    12,    13,   204,   204,     0,   204,
+    14,   202,   202,   202,   685,     0,     0,     0,     0,     0,
+     0,   483,     0,     0,    16,     0,    17,    18,    19,     0,
+     0,     0,    20,     0,     0,     0,   204,    21,     0,     0,
+   202,    23,     0,     0,   168,     7,     8,     9,    10,     0,
+    26,     0,    27,    28,     0,     0,     0,     0,   529,   529,
+   529,     0,     0,     0,   640,   260,    30,     0,     0,     0,
+   625,     0,     0,     0,     0,     0,    31,     0,     0,   256,
+     0,     0,  1183,    21,    32,     0,     0,     8,     9,    33,
+     0,    12,    13,     0,    34,     0,    26,    14,    27,    28,
+    78,    78,    78,     0,     0,     0,     0,     0,     0,     0,
+     0,    16,   193,    17,     0,     0,     0,     0,     0,    20,
+     0,     0,   194,     0,     0,     0,     0,     0,    23,     0,
+    32,     0,     0,     0,     0,   195,     0,    26,     0,   130,
+   131,   600,     0,   625,     0,   625,     0,     0,     0,  1185,
+     0,     0,  1183,  1183,  1183,     0,   625,     0,     0,     0,
+   625,   625,   625,     0,     0,     0,     0,     0,     0,     0,
+     0,   256,   260,     0,     0,     0,   601,    51,     0,     0,
+     0,    78,     0,     0,     0,   831,     0,   299,     8,     9,
+    10,   167,    12,   300,   301,   302,     0,   303,    14,     0,
+     0,     0,     0,     0,   946,   946,  1156,     0,     0,     0,
+     0,    78,    16,   304,    17,    18,    19,     0,   305,   306,
+    20,   202,   307,   308,   309,    21,   310,   311,     0,    23,
+     0,     0,     0,   312,   313,   314,   315,   316,    26,     0,
+    27,   318,  1524,     0,  -788,   319,     0,     0,     0,     0,
+     0,   320,     0,  1156,   321,     0,     0,     0,     0,     0,
+     0,     0,   322,   323,   324,   102,     0,     0,     0,     0,
+   325,   326,   327,     0,   121,   102,     0,   328,     0,     0,
+     0,   102,   102,     0,   102,   204,     0,   202,     0,   202,
+     0,   202,   202,   202,   329,     0,     0,   202,     0,     0,
+     0,     0,   202,     0,     0,   202,     0,    78,    78,    78,
+    78,    78,     0,     0,     0,    78,   235,     8,     9,     0,
+     0,    12,   245,     0,     0,     0,     0,    14,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,  1185,  1185,
+  1185,    16,     0,    17,     0,     0,     0,     0,     0,    20,
+     0,     0,     0,     0,     0,     0,     0,     0,    23,     0,
+   617,     0,     0,   867,   867,     0,   867,    26,     0,   130,
+   131,    78,     0,     0,     0,   388,    78,   121,     0,    78,
+     0,     0,     0,   618,   102,   102,     0,     0,     0,     0,
+     0,   102,   102,   619,     0,   102,   102,   102,     0,   416,
+   102,   102,   102,   620,     0,     0,   621,   622,     0,     0,
+     0,   946,   946,  1156,  1156,  1156,     0,     0,     0,   946,
+     0,     0,     0,     0,     0,     0,     0,     0,    78,    78,
+     0,    78,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,  1156,  1156,  1156,     0,     0,     0,     0,   256,
+   260,   577,   578,   579,   580,   581,   582,   583,   584,   585,
+   586,   587,   588,   589,   590,   202,     0,    78,    78,    78,
+     0,     0,     0,     0,     0,   204,     0,     0,   127,   128,
+     0,     0,   215,   216,     0,     0,     0,     0,    14,   235,
+   102,   578,   579,   580,   581,   582,   583,   584,   585,   586,
+   587,   588,   589,   590,   202,     0,   202,   202,     0,   102,
+    20,     0,     0,     0,     0,     0,     0,     0,     0,    23,
+     0,   617,     0,     0,     0,     0,     0,     0,    26,     0,
+   130,   131,   946,   946,     0,   946,     0,     0,     0,     0,
+     0,     0,     0,     0,   618,     0,     0,     0,   102,     0,
+     0,   202,     0,     0,   619,     0,     0,     0,     0,     0,
+     0,     0,   202,   202,   620,   202,     0,   628,   622,     0,
+     0,   204,     0,   204,     0,     0,     0,     0,     0,     0,
+     0,   720,  1185,   819,   820,   821,    10,     0,    12,   533,
+   301,   302,   202,   303,    14,     0,   102,     0,   102,   102,
+     0,     0,     0,     0,     0,     0,     0,     0,    16,   304,
+    17,     0,    19,     0,   305,   306,    20,     0,   307,   308,
+   309,    21,   310,   311,     0,    23,     0,     0,     0,   312,
+   313,   314,   315,   316,    26,     0,   822,   823,   721,     0,
+     0,   319,     0,   102,     0,     0,     0,   320,     0,     0,
+   321,     0,  1185,  1185,  1185,     0,     0,     0,   322,   323,
+   324,     0,   102,     0,     0,     0,   325,   326,   327,   102,
+     0,     0,   102,   328,   824,     0,     0,    78,     0,     0,
+     0,     0,     0,     0,   102,     0,   477,   127,   128,   983,
+   329,   215,   216,     0,     8,     9,     0,    14,    12,    13,
+     0,     0,     0,     0,    14,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    16,    20,
+    17,     0,     0,   256,   260,   256,    20,     0,    23,     0,
+   617,     0,     0,     0,     0,    23,     0,    26,     0,   130,
+   131,     0,     0,     0,    26,     0,   130,   131,     0,     0,
+     0,     0,   102,   618,     0,     0,   477,   477,   477,     0,
+   202,   202,  1154,   619,     0,     0,     0,   256,     0,     0,
+     0,     0,     0,   620,     0,     0,   621,   622,     0,   102,
+     0,   204,     0,     7,     8,     9,    10,   167,    12,    13,
+     0,     0,     0,     0,    14,     0,     0,   260,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    16,  1154,
+    17,    18,    19,     0,     0,     0,    20,     0,     0,   262,
+     0,    21,     8,     9,     0,    23,    12,    13,   168,     0,
+     0,     0,    14,     0,    26,     0,    27,    28,     0,     0,
+     0,   202,     0,     0,     0,     0,    16,     0,    17,     0,
+    30,     0,     0,     0,    20,   102,   263,   264,     0,     0,
+    31,     0,   483,    23,     0,   265,   102,   102,    32,   102,
+   102,     0,    26,    33,   130,   131,     0,   266,    34,     0,
+     0,   267,   268,   269,   270,   271,   272,   273,   274,   275,
+   276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
+   286,   287,     0,     0,   288,   289,   290,     0,     0,   291,
+     0,     0,   292,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   102,     0,     0,     0,     0,     0,   293,   102,
+   121,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   235,     0,     0,     0,     0,   256,     0,     0,   762,
+     0,     7,     8,   763,    10,   167,    12,    13,     0,     0,
+     0,     0,    14,     0,     0,   976,     0,   202,   202,   202,
+   202,  1154,     0,  1272,     0,   202,    16,     0,    17,    18,
+    19,     0,     0,     0,    20,  -528,     0,     0,     0,    21,
+     0,     0,     0,    23,   764,     0,   168,     0,  1154,  1154,
+  1154,     0,    26,     0,    27,    28,     0,     0,   765,     0,
+   766,  1478,   976,     0,     0,   102,     0,     0,    30,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
+     0,   202,     0,     0,     0,     0,    32,     0,     0,     0,
+     0,    33,     0,     0,     0,     0,     0,   102,   102,   102,
+     0,     0,     0,     0,     0,     0,     0,  -528,     0,   102,
+     0,  1479,   569,   570,   571,   572,   573,   574,   575,   576,
+   577,   578,   579,   580,   581,   582,   583,   584,   585,   586,
+   587,   588,   589,   590,     0,     0,     0,     0,   202,   202,
+     0,   202,     0,  1507,     0,  -480,  -480,  -480,  -480,  -480,
+  -480,  -480,     0,     0,  -480,     0,  -480,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,  -480,     0,  -480,
+     0,     0,     0,  -480,     0,     0,     0,   202,  -480,   202,
+     0,     0,   102,  -480,   102,     0,     0,  -480,     0,  -480,
+     0,     0,     0,     0,     0,   102,  -480,     0,  -480,  -480,
+  -480,  -480,  -480,     0,  -480,  -480,  -480,  -480,  -480,  -480,
+  -480,  -480,  -480,  -480,  -480,  -480,  -480,  -480,  -480,  -480,
+  -480,  -480,  -480,  -480,  -480,  -480,  -480,     0,  -480,  -480,
+  -480,     0,  -480,  -480,  -480,  -480,  -480,  -480,     0,  -480,
+     0,     0,     0,     0,  1508,     0,     0,     0,     0,  -480,
+  -480,  -480,   658,  -480,     0,     0,   569,   570,   571,   572,
+   573,   574,   575,   576,   577,   578,   579,   580,   581,   582,
+   583,   584,   585,   586,   587,   588,   589,   590,     0,     0,
+   976,  1426,     0,  1283,  1284,  1285,    10,   167,    12,   300,
+   301,   302,  1154,   303,    14,  1286,     0,  1287,  1288,  1289,
+  1290,  1291,  1292,  1293,  1294,  1295,  1296,    15,    16,   304,
+    17,    18,    19,     0,   305,   306,    20,     0,   307,   308,
+   309,    21,   310,   311,  1297,    23,  1298,     0,     0,   312,
+   313,   314,   315,   316,    26,     0,  1299,   318,   717,     0,
+  1300,   319,     0,     0,     0,     0,   102,   320,     0,     0,
+   321,     0,     0,     0,     0,     0,     0,     0,   322,   323,
+   324,     0,  1154,  1154,  1154,     0,   325,   326,   327,     0,
+     0,     0,     0,   328,     0,  1301,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   202,     0,  1427,
+   329,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   102,   102,  1282,   102,  1283,  1284,  1285,    10,
+   167,    12,   300,   301,   302,     0,   303,    14,  1286,     0,
+  1287,  1288,  1289,  1290,  1291,  1292,  1293,  1294,  1295,  1296,
+    15,    16,   304,    17,    18,    19,     0,   305,   306,    20,
+     0,   307,   308,   309,    21,   310,   311,  1297,    23,  1298,
+     0,     0,   312,   313,   314,   315,   316,    26,     0,  1299,
+   318,   717,     0,  1300,   319,   976,     0,     0,     0,     0,
+   320,     0,     0,   321,     0,     0,     0,     0,     0,     0,
+     0,   322,   323,   324,     0,     0,     0,     0,     0,   325,
+   326,   327,     0,     0,     0,     0,   328,     0,  1301,     0,
+     0,     0,   976,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   329,     0,     0,     0,   102,   551,   102,
+   299,     8,     9,    10,   167,    12,   300,   301,   302,   730,
+   303,    14,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    16,   304,    17,    18,    19,
+     0,   305,   306,    20,     0,   307,   308,   309,    21,   310,
+   311,     0,    23,     0,   617,     0,   312,   313,   314,   315,
+   316,    26,     0,    27,   318,  -312,     0,     0,   319,     0,
+     0,     0,     0,     0,   320,     0,     0,   898,     0,     0,
+     0,     0,     0,     0,     0,   322,   323,   899,     0,     0,
+     0,     0,     0,   325,   326,   327,     0,   620,     0,     0,
+   900,   622,   551,     0,     7,     8,     9,    10,   167,    12,
+   300,   301,   302,   730,   303,    14,     0,   329,     0,     0,
+     0,     0,     0,     0,     0,   976,     0,     0,     0,    16,
+   304,    17,    18,    19,     0,   305,   306,    20,     0,   307,
+   308,   309,    21,   310,   311,     0,    23,     0,   617,     0,
+   312,   313,   314,   315,   316,    26,     0,    27,    28,  -312,
+     0,     0,   319,     0,     0,     0,     0,     0,   320,     0,
+     0,  1180,     0,     0,     0,     0,     0,     0,     0,   322,
+   323,  1181,     0,     0,     0,     0,     0,   325,   326,   327,
+     0,   620,     0,     0,  1182,   622,   729,     0,   299,     8,
+     9,    10,   167,    12,   300,   301,   302,   730,   303,    14,
+     0,   329,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,    16,   304,    17,    18,    19,     0,   305,
+   306,    20,     0,   307,   308,   309,    21,   310,   311,     0,
+    23,     0,     0,     0,   312,   313,   314,   315,   316,    26,
+     0,    27,   318,     0,     0,     0,   319,     0,     0,     0,
+     0,     0,   320,     0,     0,   321,     0,     0,     0,     0,
+     0,     0,     0,   322,   323,   324,     0,     0,     0,     0,
+     0,   325,   326,   327,     0,     0,     0,   551,   328,   299,
+     8,     9,    10,     0,    12,   300,   301,   302,     0,   303,
+    14,     0,     0,  -798,     0,   329,     0,     0,     0,     0,
+     0,     0,     0,     0,    16,   304,    17,    18,    19,     0,
+   305,   306,    20,     0,   307,   308,   309,    21,   310,   311,
+     0,    23,     0,     0,     0,   312,   313,   314,   315,   316,
+    26,     0,    27,   318,  -312,     0,     0,   319,     0,     0,
+     0,     0,     0,   320,     0,     0,   552,     0,     0,     0,
+     0,     0,     0,     0,   322,   323,   553,     0,     0,     0,
+     0,     0,   325,   326,   327,     0,     0,     0,   720,   554,
+   819,   820,   821,    10,     0,    12,   533,   301,   302,     0,
+   303,    14,     0,     0,     0,     0,   329,     0,     0,     0,
+     0,     0,     0,     0,     0,    16,   304,    17,     0,    19,
+     0,   305,   306,    20,     0,   307,   308,   309,    21,   310,
+   311,     0,    23,     0,     0,     0,   312,   313,   314,   315,
+   316,    26,     0,   822,   823,   721,     0,     0,   319,     0,
+     0,     0,     0,     0,   320,     0,     0,   321,     0,     0,
+     0,     0,     0,     0,     0,   322,   323,   324,     0,     0,
+     0,     0,     0,   325,   326,   327,     0,     0,     0,     0,
+   328,   824,   720,     0,   819,   820,   821,    10,     0,    12,
+   533,   301,   302,     0,   303,    14,     0,   329,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
+   304,    17,     0,    19,     0,   305,   306,    20,     0,   307,
+   308,   309,    21,   310,   311,     0,    23,     0,     0,     0,
+   312,   313,   314,   315,   316,    26,     0,   822,   823,   721,
+     0,     0,   319,     0,     0,     0,     0,     0,   320,     0,
+     0,   321,     0,     0,     0,     0,     0,     0,     0,   322,
+   323,   324,     0,     0,     0,     0,     0,   325,   326,   327,
+     0,     0,     0,   720,   328,   819,   820,   821,    10,     0,
+    12,   533,   301,   302,     0,   303,    14,     0,     0,     0,
+  -484,   329,     0,     0,     0,     0,     0,     0,     0,     0,
+    16,   304,    17,     0,    19,     0,   305,   306,    20,     0,
+   307,   308,   309,    21,   310,   311,     0,    23,     0,     0,
+     0,   312,   313,   314,   315,   316,    26,     0,   822,   823,
+   721,     0,     0,   319,     0,     0,     0,     0,     0,   320,
+     0,     0,   321,     0,     0,     0,     0,     0,     0,     0,
+   322,   323,   324,     0,     0,     0,     0,     0,   325,   326,
+   327,     0,     0,     0,   720,   328,   299,     8,     9,    10,
+     0,    12,   533,   301,   302,     0,   303,    14,     0,     0,
+     0,  1321,   329,     0,     0,     0,     0,     0,     0,     0,
+     0,    16,   304,    17,     0,    19,     0,   305,   306,    20,
+     0,   307,   308,   309,    21,   310,   311,     0,    23,     0,
+     0,     0,   312,   313,   314,   315,   316,    26,     0,    27,
+   318,   721,     0,     0,   319,     0,     0,     0,     0,     0,
+   320,     0,     0,   321,     0,     0,     0,     0,     0,     0,
+     0,   322,   323,   324,     0,     0,     0,     0,     0,   325,
+   326,   327,     0,     0,     0,     0,   328,     0,   551,     0,
+     7,     8,     9,    10,  1325,    12,   300,   301,   302,     0,
+   303,    14,     0,   329,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,    16,   304,    17,    18,    19,
+     0,   305,   306,    20,     0,   307,   308,   309,    21,   310,
+   311,     0,    23,     0,     0,     0,   312,   313,   314,   315,
+   316,    26,     0,    27,    28,  -312,     0,     0,   319,     0,
+     0,     0,     0,     0,   320,     0,     0,  1494,     0,     0,
+     0,     0,     0,     0,     0,   322,   323,  1495,     0,     0,
+     0,     0,     0,   325,   326,   327,     0,     0,     0,   720,
+  1496,   299,     8,     9,    10,     0,    12,   533,   301,   302,
+     0,   303,    14,     0,     0,     0,     0,   329,     0,     0,
+     0,     0,     0,     0,     0,     0,    16,   304,    17,     0,
+    19,     0,   305,   306,    20,     0,   307,   308,   309,    21,
+   310,   311,     0,    23,     0,     0,     0,   312,   313,   314,
+   315,   316,    26,     0,    27,   318,   721,     0,     0,   319,
+     0,     0,     0,     0,     0,   320,     0,     0,   321,     0,
+     0,     0,     0,     0,     0,     0,   322,   323,   324,     0,
+     0,     0,     0,     0,   325,   326,   327,     0,     0,     0,
+   831,   328,   299,     8,     9,    10,     0,    12,   533,   301,
+   302,     0,   303,    14,     0,     0,     0,     0,   329,     0,
+     0,     0,     0,     0,     0,     0,     0,    16,   304,    17,
+     0,    19,     0,   305,   306,    20,     0,   307,   308,   309,
+    21,   310,   311,     0,    23,     0,     0,     0,   312,   313,
+   314,   315,   316,    26,     0,    27,   318,     0,     0,     0,
+   319,  -788,     0,     0,     0,     0,   320,     0,     0,   321,
+     0,     0,     0,     0,     0,     0,     0,   322,   323,   324,
+     0,     0,     0,     0,     0,   325,   326,   327,     0,     0,
+     0,  1577,   328,   299,     8,     9,    10,     0,    12,   300,
+   301,   302,     0,   303,    14,     0,     0,     0,     0,   329,
+     0,     0,     0,     0,     0,     0,     0,     0,    16,   304,
+    17,     0,    19,     0,   305,   306,    20,     0,   307,   308,
+   309,    21,   310,   311,     0,    23,     0,     0,     0,   312,
+   313,   314,   315,   316,    26,     0,    27,   318,     0,     0,
+  -196,   319,     0,     0,     0,     0,     0,   320,     0,     0,
+   321,     0,     0,     0,     0,     0,     0,     0,   322,   323,
+   324,     0,     0,     0,     0,     0,   325,   326,   327,     0,
+     0,     0,   831,   328,   299,     8,     9,    10,     0,    12,
+   533,   301,   302,     0,   303,    14,     0,     0,     0,     0,
+   329,     0,     0,     0,     0,     0,     0,     0,     0,    16,
+   304,    17,     0,    19,     0,   305,   306,    20,     0,   307,
+   308,   309,    21,   310,   311,     0,    23,     0,     0,     0,
+   312,   313,   314,   315,   316,    26,     0,    27,   318,     0,
+     0,     0,   319,     0,     0,     0,     0,     0,   320,     0,
+     0,   321,     0,     0,     0,     0,     0,     0,     0,   322,
+   323,   324,     0,     0,     0,     0,     0,   325,   326,   327,
+     0,     0,     0,   920,   328,   299,     8,     9,    10,     0,
+    12,   533,   301,   302,     0,   303,    14,     0,     0,  -788,
+     0,   329,     0,     0,     0,     0,     0,     0,     0,     0,
+    16,   304,    17,     0,    19,     0,   305,   306,    20,     0,
+   307,   308,   309,    21,   310,   311,     0,    23,     0,     0,
+     0,   312,   313,   314,   315,   316,    26,     0,    27,   318,
+     0,     0,     0,   319,     0,     0,     0,     0,     0,   320,
+     0,     0,   321,     0,     0,     0,     0,     0,     0,     0,
+   322,   323,   324,     0,     0,     0,     0,     0,   325,   326,
+   327,     0,     0,     0,   922,   328,   299,     8,     9,    10,
+     0,    12,   533,   301,   302,     0,   303,    14,     0,     0,
+     0,     0,   329,     0,     0,     0,     0,     0,     0,     0,
+     0,    16,   304,    17,     0,    19,     0,   305,   306,    20,
+     0,   307,   308,   309,    21,   310,   311,     0,    23,     0,
+     0,     0,   312,   313,   314,   315,   316,    26,     0,    27,
+   318,     0,     0,     0,   319,     0,     0,     0,     0,     0,
+   320,     0,     0,   321,     0,     0,     0,     0,     0,     0,
+     0,   322,   323,   324,     0,     0,     0,     0,     0,   325,
+   326,   327,     0,     0,     0,  1542,   328,   299,     8,     9,
+    10,     0,    12,   533,   301,   302,     0,   303,    14,     0,
+     0,     0,     0,   329,     0,     0,     0,     0,     0,     0,
+     0,     0,    16,   304,    17,     0,    19,     0,   305,   306,
+    20,     0,   307,   308,   309,    21,   310,   311,     0,    23,
+     0,     0,     0,   312,   313,   314,   315,   316,    26,     0,
+    27,   318,     0,     0,     0,   319,     0,     0,     0,     0,
+     0,   320,     0,     0,   321,     0,     0,     0,     0,     0,
+     0,     0,   322,   323,   324,     0,     0,     0,     0,     0,
+   325,   326,   327,   299,     8,     9,    10,   328,    12,   533,
+   301,   302,     0,   303,    14,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   329,     0,     0,     0,    16,   304,
+    17,     0,    19,     0,   305,   306,    20,     0,   307,   308,
+   309,    21,   310,   311,     0,    23,     0,     0,     0,   312,
+   313,   314,   315,   316,    26,     0,    27,   318,     0,     0,
+     0,   319,     0,     0,     0,     0,     0,   320,     0,   762,
+   321,     7,     8,   763,    10,   167,    12,    13,   322,   323,
+   324,     0,    14,     0,     0,     0,   325,   326,   327,     0,
+     0,     0,     0,   328,     0,     0,    16,     0,    17,    18,
+    19,     0,     0,     0,    20,  -527,     0,     0,     0,    21,
+   329,   870,     0,    23,   764,     0,   168,     0,     0,     0,
+     0,     0,    26,     0,    27,    28,     0,     0,   765,     0,
+   766,     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,  1283,  1284,  1285,    10,   167,    12,
+   300,   301,   302,     0,   303,    14,  1286,  -527,  1287,  1288,
+  1289,  1290,  1291,  1292,  1293,  1294,  1295,  1296,    15,    16,
+   304,    17,    18,    19,     0,   305,   306,    20,     0,   307,
+   308,   309,    21,   310,   311,  1297,    23,  1298,     0,     0,
+   312,   313,   314,   315,   316,    26,     0,  1299,   318,   717,
+     0,  1300,   319,     0,     0,     0,     0,     0,   320,     0,
+     0,   321,     0,     0,     0,     0,     0,     0,     0,   322,
+   323,   324,     0,     0,     0,     0,     0,   325,   326,   327,
+     0,     0,     0,     0,   328,     0,  1301,     0,     0,     0,
      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    18,     0,     0,     0,  1285,   203,   988,   203,     0,     0,
-    21,     0,   145,     0,   145,     0,   145,   145,   145,     0,
-     0,     0,   145,    26,   104,    27,    28,   145,     0,     6,
-   145,     7,     8,     9,    10,    11,    12,    13,     0,   193,
-     0,     0,    14,  1298,     0,     0,     0,     0,     0,   194,
-   134,     0,     0,    83,     0,    83,    16,    32,    17,    18,
-   807,    83,   195,    83,    20,     0,     0,     0,     0,    21,
-     0,     0,     0,    23,     0,     0,   438,     0,     0,     0,
-   761,   762,    26,   773,    27,    28,     0,     0,    29,     0,
-  1363,     0,     0,     0,  1364,     0,     0,     0,    30,     0,
-     0,     0,     0,   248,   248,   248,   248,     0,    31,  1176,
-     0,     0,     0,     0,  1377,     0,    32,     0,  1378,     0,
-     0,    33,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     7,   127,   128,    10,     0,     0,   535,     0,
-     0,     0,     0,     0,     0,   642,   642,     0,   642,     0,
-     0,     0,     0,  1394,     0,   941,     0,     0,     0,     0,
-    18,     0,     0,   248,     0,   145,     0,     0,     0,     0,
-    21,     0,     0,     0,     0,     0,  1176,  1176,  1176,   145,
-   145,     0,   651,    26,     0,    27,    28,     0,     0,   945,
-     0,     0,   104,     0,     0,     0,     0,   203,     0,    30,
-     0,     0,   660,     7,   127,   128,    10,     0,   145,    31,
-     0,     0,     0,   642,     0,   642,   642,    32,   642,     0,
-     0,     0,    33,   477,     0,     0,     0,     0,     0,     0,
-     0,    18,   697,     0,     0,     0,     0,     0,     0,     0,
-   126,    21,     0,     0,     0,  1466,  1467,   145,   651,   145,
-   145,   239,   651,     0,    26,     0,    27,    28,     0,     0,
-   642,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    30,     0,     0,     0,     0,  1018,     0,     0,     0,     0,
-    31,     0,     0,     0,     0,     0,     0,     0,    32,     0,
-   471,   473,   477,    33,   145,     0,     0,     0,   651,     0,
-     0,     0,     0,     0,     0,   145,   145,     0,   145,     0,
-     0,     0,     0,     0,     7,     8,     9,    10,   167,    12,
-    13,     0,  1018,   749,   248,    14,     0,   807,     0,     0,
-     0,     0,     0,     0,     0,     0,   248,     0,     0,    16,
+  1431,   329,  1283,  1284,  1285,    10,   167,    12,   300,   301,
+   302,     0,   303,    14,  1286,     0,  1287,  1288,  1289,  1290,
+  1291,  1292,  1293,  1294,  1295,  1296,    15,    16,   304,    17,
+    18,    19,     0,   305,   306,    20,     0,   307,   308,   309,
+    21,   310,   311,  1297,    23,  1298,     0,     0,   312,   313,
+   314,   315,   316,    26,     0,  1299,   318,   717,     0,  1300,
+   319,     0,     0,     0,     0,     0,   320,     0,     0,   321,
+     0,     0,     0,     0,     0,     0,     0,   322,   323,   324,
+     0,     0,     0,     0,     0,   325,   326,   327,     0,     0,
+     0,     0,   328,     0,  1301,     0,  1283,  1284,  1285,    10,
+   167,    12,   300,   301,   302,     0,   303,    14,  1286,   329,
+  1287,  1288,  1289,  1290,  1291,  1292,  1293,  1294,  1295,  1296,
+    15,    16,   304,    17,    18,    19,     0,   305,   306,    20,
+     0,   307,   308,   309,    21,   310,   311,  1297,    23,  1298,
+     0,     0,   312,   313,   314,   315,   316,    26,     0,  1299,
+   318,  1551,     0,  1300,   319,     0,     0,     0,     0,     0,
+   320,     0,     0,   321,     0,     0,     0,     0,     0,     0,
+     0,   322,   323,   324,     0,     0,     0,     0,     0,   325,
+   326,   327,     0,     0,     0,     0,   328,     0,  1301,     0,
+  1283,  1284,  1285,    10,   167,    12,   300,   301,   302,     0,
+   303,    14,  1286,   329,  1287,  1288,  1289,  1290,  1291,  1292,
+  1293,  1294,  1295,  1296,    15,    16,   304,    17,    18,    19,
+     0,   305,   306,    20,     0,   307,   308,   309,    21,   310,
+   311,  1297,    23,  1298,     0,     0,   312,   313,   314,   315,
+   316,    26,     0,  1299,   318,     0,     0,  1300,   319,     0,
+     0,     0,     0,     0,   320,     0,     0,   321,     0,     0,
+     0,     0,     0,     0,     0,   322,   323,   324,     0,     0,
+     0,     0,     0,   325,   326,   327,     0,     0,     0,     0,
+   328,     0,  1301,   299,     8,     9,    10,   167,    12,   300,
+   301,   302,   730,   303,    14,     0,     0,   329,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,    16,   304,
+    17,    18,    19,     0,   305,   306,    20,     0,   307,   308,
+   309,    21,   310,   311,     0,    23,     0,   617,     0,   312,
+   313,   314,   315,   316,    26,     0,    27,   318,     0,     0,
+     0,   319,     0,     0,     0,     0,     0,   320,     0,     0,
+   898,     0,     0,     0,     0,     0,     0,     0,   322,   323,
+   899,     0,     0,     0,     0,     0,   325,   326,   327,     0,
+   620,     0,     0,   900,   622,     7,     8,     9,    10,   167,
+    12,   300,   301,   302,   730,   303,    14,     0,     0,     0,
+   329,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+    16,   304,    17,    18,    19,     0,   305,   306,    20,     0,
+   307,   308,   309,    21,   310,   311,     0,    23,     0,   617,
+     0,   312,   313,   314,   315,   316,    26,     0,    27,    28,
+     0,     0,     0,   319,     0,     0,     0,     0,     0,   320,
+     0,     0,  1180,     0,     0,     0,     0,     0,     0,     0,
+   322,   323,  1181,     0,     0,     0,     0,     0,   325,   326,
+   327,     0,   620,     0,     0,  1182,   622,   299,     8,     9,
+    10,     0,    12,   300,   301,   302,     0,   303,    14,     0,
+     0,     0,   329,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    16,   304,    17,    18,    19,     0,   305,   306,
+    20,     0,   307,   308,   309,    21,   310,   311,     0,    23,
+     0,   617,     0,   312,   313,   314,   315,   316,    26,     0,
+    27,   318,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   320,     0,     0,   898,     0,     0,     0,     0,     0,
+     0,     0,   322,   323,   899,     0,     0,     0,     0,     0,
+   325,   326,   327,     0,   620,     0,     0,   900,   622,     7,
+     8,     9,    10,     0,    12,   300,   301,   302,     0,   303,
+    14,     0,     0,     0,   329,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,    16,   304,    17,    18,    19,     0,
+   305,   306,    20,     0,   307,   308,   309,    21,   310,   311,
+     0,    23,     0,   617,     0,   312,   313,   314,   315,   316,
+    26,     0,    27,    28,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   320,     0,     0,  1180,     0,     0,     0,
+     0,     0,     0,     0,   322,   323,  1181,     0,     0,     0,
+     0,     0,   325,   326,   327,     0,   620,     0,     0,  1182,
+   622,   299,     8,     9,    10,     0,    12,   533,   301,   302,
+     0,   303,    14,     0,     0,     0,   329,     0,     0,     0,
+     0,     0,     0,     0,     0,     0,    16,   304,    17,    18,
+    19,     0,   305,   306,    20,     0,   307,   308,   309,    21,
+   310,   311,     0,    23,     0,     0,     0,   312,   313,   314,
+   315,   316,    26,     0,    27,   318,     0,     0,     0,   319,
+     0,     0,     0,     0,     0,   320,     0,     0,   552,     0,
+     0,     0,     0,     0,     0,     0,   322,   323,   553,     0,
+     0,     0,     0,     0,   325,   326,   327,   299,     8,     9,
+    10,   554,    12,   533,   301,   302,     0,   303,    14,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   329,     0,
+     0,     0,    16,   304,    17,     0,    19,     0,   305,   306,
+    20,     0,   307,   308,   309,    21,   310,   311,     0,    23,
+     0,     0,     0,   312,   313,   314,   315,   316,    26,     0,
+    27,   318,     0,     0,  1404,   319,     0,     0,     0,     0,
+     0,   320,     0,     0,   321,     0,     0,     0,     0,     0,
+     0,     0,   322,   323,   324,     0,     0,     0,     0,     0,
+   325,   326,   327,     0,     0,     0,     0,   328,   299,     8,
+     9,    10,   167,    12,   300,   301,   302,     0,   303,    14,
+     0,     0,     0,     0,   329,     0,     0,     0,     0,     0,
+     0,     0,     0,    16,   304,    17,    18,    19,     0,   305,
+   306,    20,     0,   307,   308,   309,    21,   310,   311,     0,
+    23,     0,     0,     0,   312,   313,   314,   315,   316,    26,
+     0,    27,   318,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   320,     0,     0,   321,     0,     0,     0,     0,
+     0,     0,     0,   322,   323,   324,     0,     0,     0,     0,
+     0,   325,   326,   327,     7,     8,     9,    10,   328,    12,
+   533,   301,   302,     0,   303,    14,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   329,     0,     0,     0,    16,
+   304,    17,    18,    19,     0,   305,   306,    20,     0,   307,
+   308,   309,    21,   310,   311,     0,    23,     0,     0,     0,
+   312,   313,   314,   315,   316,    26,     0,    27,    28,     0,
+     0,     0,   319,     0,     0,     0,     0,     0,   320,     0,
+     0,  1494,     0,     0,     0,     0,     0,     0,     0,   322,
+   323,  1495,     0,     0,     0,     0,     0,   325,   326,   327,
+   299,     8,     9,    10,  1496,    12,   300,   301,   302,     0,
+   303,    14,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   329,     0,     0,     0,    16,   304,    17,     0,    19,
+     0,   305,   306,    20,     0,   307,   308,   309,    21,   310,
+   311,     0,    23,     0,     0,     0,   312,   313,   314,   315,
+   316,    26,     0,   317,   318,     0,     0,     0,   319,     0,
+     0,     0,     0,     0,   320,     0,     0,   321,     0,     0,
+     0,     0,     0,     0,     0,   322,   323,   324,     0,     0,
+     0,     0,     0,   325,   326,   327,   299,     8,     9,    10,
+   328,    12,   300,   301,   302,     0,   303,    14,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   329,     0,     0,
+     0,    16,   304,    17,     0,    19,     0,   305,   306,    20,
+     0,   307,   308,   309,    21,   310,   311,     0,    23,     0,
+     0,     0,   312,   313,   314,   315,   316,    26,     0,    27,
+   318,     0,     0,     0,   319,     0,     0,     0,     0,     0,
+   320,     0,     0,   321,     0,     0,     0,     0,     0,     0,
+     0,   322,   323,   324,     0,     0,     0,     0,     0,   325,
+   326,   327,   299,     8,     9,    10,   328,    12,   533,   301,
+   302,     0,   303,    14,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   329,     0,     0,     0,    16,   304,    17,
+     0,    19,     0,   305,   306,    20,     0,   307,   308,   309,
+    21,   310,   311,     0,    23,     0,     0,     0,   312,   313,
+   314,   315,   316,    26,     0,    27,   318,     0,     0,     0,
+   319,     0,     0,     0,     0,     0,   320,     0,     0,   321,
+     0,     0,     0,     0,     0,     0,     0,   322,   323,   324,
+     0,     0,     0,     0,     0,   325,   326,   327,   299,     8,
+     9,    10,   328,    12,   533,   301,   302,     0,   303,    14,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   329,
+     0,     0,     0,    16,   304,    17,     0,    19,     0,   305,
+   306,    20,     0,   307,   308,   309,    21,   310,   311,     0,
+    23,     0,     0,     0,   312,   313,   314,   315,   316,    26,
+     0,    27,   318,   566,     0,     0,     0,     0,     0,     0,
+     0,     0,   320,     0,     0,   321,     0,     0,     0,     0,
+     0,     0,     0,   322,   323,   324,     0,     0,     0,     0,
+     0,   325,   326,   327,   299,     8,     9,    10,   567,    12,
+   533,   301,   302,     0,   303,    14,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   329,     0,     0,     0,    16,
+   304,    17,     0,    19,     0,   305,   306,    20,     0,   307,
+   308,   309,    21,   310,   311,     0,    23,     0,     0,     0,
+   312,   313,   314,   315,   316,    26,     0,    27,   318,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   320,     0,
+     0,   321,     0,     0,     0,     0,     0,     0,     0,   322,
+   323,   324,     0,     0,     0,     0,     0,   325,   326,   327,
+     0,     0,     0,     0,   328,   605,   299,     8,     9,    10,
+     0,    12,   533,   301,   302,     0,   303,    14,     0,     0,
+     0,   329,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,    16,   304,    17,    18,    19,     0,   305,   306,    20,
+     0,   307,   308,   309,    21,   310,   311,     0,    23,     0,
+     0,     0,   312,   313,   314,   315,   316,    26,     0,    27,
+   318,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   320,     0,     0,   552,     0,     0,     0,     0,     0,     0,
+     0,   322,   323,   553,     0,     0,     0,     0,     0,   325,
+   326,   327,  1140,     8,     9,    10,   554,    12,   533,   301,
+   302,     0,   303,    14,     0,     0,     0,     0,     0,     0,
+     0,     0,     0,   329,     0,     0,     0,    16,   304,    17,
+     0,    19,     0,   305,   306,    20,     0,   307,   308,   309,
+    21,   310,   311,     0,    23,     0,     0,     0,   312,   313,
+   314,   315,   316,    26,     0,    27,   318,     0,     0,     0,
+   319,     0,     0,     0,     0,     0,   320,     0,     0,   321,
+     0,     0,     0,     0,     0,     0,     0,   322,   323,   324,
+     0,     0,     0,     0,     0,   325,   326,   327,     7,     8,
+     9,    10,   328,    12,   300,   301,   302,     0,   303,    14,
+     0,     0,     0,     0,     0,     0,     0,     0,     0,   329,
+     0,     0,     0,    16,   304,    17,    18,    19,     0,   305,
+   306,    20,     0,   307,   308,   309,    21,   310,   311,     0,
+    23,     0,     0,     0,   312,   313,   314,   315,   316,    26,
+     0,    27,    28,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,   320,     0,     0,  1494,     0,     0,     0,     0,
+     0,     0,     0,   322,   323,  1495,     0,     0,     0,     0,
+     0,   325,   326,   327,   299,     8,     9,    10,  1496,    12,
+   533,   301,   302,     0,   303,    14,     0,     0,     0,     0,
+     0,     0,     0,     0,     0,   329,     0,     0,     0,    16,
+   304,    17,     0,    19,     0,   305,   306,    20,     0,   307,
+   308,   309,    21,   310,   311,     0,    23,     0,     0,     0,
+   312,   313,   314,   315,   316,    26,     0,    27,   318,     0,
+     0,     0,     0,     0,     0,     0,     0,     0,   320,     0,
+     0,   321,     0,     0,     0,     0,     0,     0,     0,   322,
+   323,   324,     0,     0,     0,     0,     0,   325,   326,   327,
+   299,     8,     9,    10,   534,    12,   533,   301,   302,     0,
+   303,    14,     0,     0,     0,     0,     0,     0,     0,     0,
+     0,   329,     0,     0,     0,    16,   304,    17,     0,    19,
+     0,   305,   306,    20,     0,   307,   308,   309,    21,   310,
+   311,     0,    23,     0,     0,     0,   312,   313,   314,   315,
+   316,    26,     0,    27,   318,     0,     0,     0,     0,     0,
+     0,     0,     0,     0,   320,     0,     0,   321,     0,     0,
+     0,     0,     0,     0,     0,   322,   323,   324,     0,     0,
+     0,     0,     0,   325,   326,   327,   299,     8,     9,    10,
+   537,    12,   533,   301,   302,     0,   303,    14,     0,     0,
+     0,     0,     0,     0,     0,     0,     0,   329,     0,     0,
+     0,    16,   304,    17,     0,    19,     0,   305,   306,    20,
+     0,   307,   308,   309,    21,   310,   311,     0,    23,     0,
+     0,     0,   312,   313,   314,   315,   316,    26,     0,    27,
+   318,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+   320,     0,     6,   321,     7,     8,     9,    10,    11,    12,
+    13,   322,   323,   324,     0,    14,     0,     0,     0,   325,
+   326,   327,     0,     0,     0,     0,   328,     0,     0,    16,
      0,    17,    18,     0,     0,     0,     0,    20,     0,     0,
-     0,     0,    21,     0,     0,   642,    23,    83,   636,     0,
-     0,     0,     0,     0,   248,    26,     0,    27,    28,     0,
-   248,     0,     0,     0,     0,     0,     0,   145,   145,   145,
-     0,  1172,  -387,     8,     9,  -387,  -387,    12,   246,   145,
-     0,  1173,     0,    14,     0,     0,     0,     0,     0,    32,
-     0,   639,     0,     0,  1174,   641,     0,    16,     0,    17,
-  -387,     0,     0,     0,     0,    20,     0,     0,     0,     0,
-  -387,     0,     0,     0,    23,     0,   636,     0,   642,     0,
-   642,     0,     0,    26,     0,   130,   131,     0,     0,     0,
-     0,   642,     0,     0,     0,   941,   941,   941,     0,   637,
-     7,     8,     9,    10,   214,   215,   216,     0,     0,   638,
-     0,    14,   145,     0,   145,     0,     0,  -387,     0,   639,
-     0,   248,   640,   641,     0,   145,     0,   248,    18,   945,
-   945,   945,     0,    20,     0,     0,     0,   660,    21,   642,
-   642,   642,    23,     0,   636,     0,     0,     0,     0,     0,
-     0,    26,     0,    27,    28,    51,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   193,     0,   248,
-     0,   248,     0,   145,   145,   651,     0,   194,     0,     0,
-     0,    51,    51,     0,   152,    32,    51,     0,   941,     0,
-  1438,     0,     0,    51,   598,   599,   600,   601,   602,   603,
-   604,   605,   606,   607,   608,   609,    51,     0,    51,   795,
-     8,   507,    10,   205,    12,   206,     0,     0,     0,     0,
-    14,     0,   945,     0,     0,     0,     0,     0,     0,     0,
-     0,   254,     0,     0,    16,   248,    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,   145,    27,    28,     0,     0,   145,     0,   797,    83,
-     0,     0,     0,     0,     0,     0,    30,     0,     0,   248,
-     0,   248,     0,     0,   396,   396,    31,    51,     0,     0,
-     0,    51,    51,     0,    32,   254,     0,    51,     0,    33,
-   152,   152,   152,     0,     0,     0,     0,   431,     0,   248,
-     0,     0,     0,     0,   145,   145,    51,   145,     0,     0,
-    51,     0,     0,     0,     0,     0,    51,    51,   642,   642,
-   642,   642,   642,     0,     0,     0,   642,     0,     0,     0,
-     0,     0,     0,     0,    51,    51,   152,     0,     0,     0,
-     0,     0,     0,     0,   254,     0,     0,     0,     0,   941,
-   941,   941,   145,   145,   145,   145,   651,     0,     0,     0,
-   145,     0,     0,    51,     0,     0,   506,  1018,     7,     8,
-   507,    10,   167,    12,    13,     0,     0,     0,     0,    14,
-     0,     0,     0,   945,   945,   945,    51,     0,     0,     0,
-     0,     0,     0,    16,     0,    17,    18,    19,     0,     0,
-    51,    20,  -525,     0,  1018,     0,    21,     0,     0,     0,
-    23,   508,     0,   168,     7,     8,     9,    10,     0,    26,
-   246,    27,    28,     0,     0,   509,     0,   510,     0,     0,
-     0,     0,     0,     0,     0,    30,     0,     0,     0,     0,
-     0,     0,    18,   642,   642,    31,   642,     0,     0,     0,
-     0,     0,    21,    32,     0,     0,     0,     0,    33,     0,
+     0,     0,    21,   329,     0,     0,    23,     0,     0,   437,
      0,     0,     0,     0,     0,    26,     0,    27,    28,     0,
-   575,     0,     0,     0,  -525,     0,     0,   145,   145,     0,
-   145,   193,     0,     0,     0,     0,     0,   396,     0,     0,
-     0,   194,     0,     0,     0,   254,     0,     0,     0,    32,
-    51,     0,     0,     0,   195,  1425,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   145,   651,   145,   595,
-   596,   597,   598,   599,   600,   601,   602,   603,   604,   605,
-   606,   607,   608,   609,   396,   248,     0,     0,     0,     0,
-     0,  1018,     0,     0,     0,    51,     0,     0,     0,   506,
-     0,     7,     8,   507,    10,   167,    12,    13,     0,     0,
-    51,     0,    14,    51,     0,     0,     0,     0,     0,   431,
-   431,   431,     0,     0,     0,    51,    16,     0,    17,    18,
-    19,     0,     0,    51,    20,  -526,     0,     0,     0,    21,
-     0,     0,     0,    23,   508,     0,   168,     0,     0,     0,
-     0,     0,    26,     0,    27,    28,     0,     0,   509,     0,
-   510,    51,     0,    51,     0,   152,   152,   152,    30,     0,
-   945,    51,     0,     0,     0,     0,    51,     0,    31,    51,
-     0,     0,  1233,  1234,     9,    10,    32,     0,     0,     0,
-     0,    33,     0,     8,     9,     0,     0,    12,    13,     0,
-     0,     0,    51,    14,    51,     0,     0,  -526,     0,    51,
-    51,     0,    51,     0,     0,     0,     0,    16,     0,    17,
-    21,     0,     0,     0,     0,    20,     0,     0,     0,     0,
-     0,     0,     0,    26,    23,    27,    28,   945,   945,   945,
-     0,  1235,     0,    26,   575,   130,   131,   575,     0,   193,
-     0,     0,     0,   248,     0,     0,     0,     0,   145,   194,
-     0,     0,   575,   575,   575,     0,     0,    32,     0,    78,
-     0,     0,   195,     0,     0,     0,     0,   575,     0,     0,
-     0,     7,     8,     9,    10,     0,     6,    13,     7,     8,
-     9,    10,    11,    12,    13,    78,    78,     0,    78,    14,
-    78,     0,     0,     0,     0,     0,     0,    78,     0,    18,
-     0,     0,    15,    16,     0,    17,    18,    19,     0,    21,
-    78,    20,    78,     0,     0,   254,    21,     0,     0,    22,
-    23,    24,    26,    25,    27,    28,     0,     0,   575,    26,
-     0,    27,    28,     0,     0,    29,     0,     0,   474,     0,
-     0,     0,     0,     0,     0,    30,     0,    51,   475,     0,
-     0,     0,     0,     0,     0,    31,    32,     0,     0,     0,
-     0,   476,     0,    32,     0,     0,     0,     0,    33,     0,
-     0,   396,     0,    34,     0,     0,     0,   159,   396,     0,
-     0,     0,     0,     0,     0,     0,    51,    51,    51,    51,
-     0,    78,     0,     0,     0,    78,    78,     0,     0,   204,
-     0,    78,     0,     0,    78,    78,    78,     0,     0,     0,
-     0,     0,     0,     0,   795,   796,     9,    10,     0,     0,
-    78,     0,     0,     0,    78,     7,     8,     9,    10,     0,
-    78,    78,     0,    51,     0,     0,     0,    51,     0,     0,
-     0,     0,     0,     0,    51,    51,     0,    51,    78,    78,
-    78,     0,    21,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    21,     0,    26,    51,    27,    28,     0,
-     0,  1060,     0,   797,     0,     0,    26,    78,    27,    28,
-     0,   193,   192,     0,     0,     0,     0,   254,     0,     0,
-     0,   194,   193,   159,   159,   159,    51,     0,     0,    32,
-    78,     0,   194,     0,   195,     0,     0,     0,     0,     0,
-    32,     0,     0,     0,    78,   195,     0,     0,     0,   204,
-     0,   748,   575,   300,     8,     9,    10,   167,    12,   301,
-   302,   303,   749,   304,    14,     0,     0,   204,   204,   478,
-     0,     0,     0,     0,     0,     0,     0,     0,    16,   305,
-    17,    18,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,     0,    23,   204,     0,     0,   313,
-   314,   315,   316,   317,    26,     0,    27,   319,     0,     0,
-     0,   320,     0,     0,     0,     0,     0,   321,     0,     0,
-   322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
-   325,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-   659,     0,     0,   329,    78,     0,     0,     0,   575,   575,
-   575,     0,     0,     0,   431,   254,     0,     0,  -798,     0,
-   330,     0,     0,     7,     8,     9,    10,   205,    12,   206,
-     0,     0,   548,     0,    14,   597,   598,   599,   600,   601,
-   602,   603,   604,   605,   606,   607,   608,   609,    16,    78,
-    17,    18,    51,    51,   152,     0,    20,     0,     0,   254,
-     0,    21,     0,     0,    78,    23,     0,    78,     0,     0,
-     0,     0,     0,     0,    26,     0,    27,    28,     0,    78,
-   207,     0,   644,   644,   644,     0,     0,    78,     0,     0,
+     0,    29,     0,     7,     8,     9,    10,   167,    12,    13,
+     0,    30,   996,     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,  1033,     8,
+   763,    10,   205,    12,   206,     0,     0,     0,     0,    14,
     30,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    31,  1204,     0,     0,     0,     0,     0,     0,    32,     0,
-     0,     0,     0,    33,     0,    78,     0,    78,     0,    78,
-    78,    78,     0,     0,     0,    78,     0,     0,     0,     0,
-    78,     0,     0,    78,     0,     0,     0,     0,   204,     0,
-    51,     0,     0,     0,     0,    51,     0,     0,    51,     7,
-     8,     9,    10,   167,    12,    13,    78,     0,    78,     0,
-    14,     0,     0,    78,    78,     0,    78,     0,     0,     0,
-     0,     0,     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,   204,     0,   204,     0,   478,   478,
-   478,     0,     0,     0,   204,     0,    30,     0,     0,   204,
-   254,     0,   204,     0,     0,     0,    31,     0,     0,     0,
-     0,     0,     0,     0,    32,     0,     0,     0,     0,    33,
-     0,    51,    51,   152,   152,   152,     0,   254,     0,    51,
-     0,     0,   204,     0,   870,     0,   300,     8,     9,    10,
-     0,    12,   552,   302,   303,     0,   304,    14,     0,     0,
-     0,     0,  1204,  1204,  1204,     0,     0,     0,     0,     0,
-   659,    16,   305,    17,     0,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-     0,     0,   313,   314,   315,   316,   317,    26,     0,    27,
-   319,    78,     0,     0,   320,  -788,     0,     0,     0,     0,
-   321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,   325,     0,     0,   202,     0,     0,   326,
-   327,   328,     0,     0,     0,     0,   329,     0,     0,     0,
-    78,    78,    78,    78,     0,     0,     0,   906,     0,     0,
-     0,   257,     0,   330,   261,     0,    51,    51,     0,    51,
-     0,   644,   644,     0,   644,     0,     0,     0,     0,     0,
-     0,   644,     0,     0,     0,   257,     0,   365,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    78,     0,     0,
-   204,    78,     0,     0,     0,    51,    51,    51,    78,    78,
-     0,    78,   592,   593,   594,   595,   596,   597,   598,   599,
-   600,   601,   602,   603,   604,   605,   606,   607,   608,   609,
-    78,     0,     0,     0,     0,     0,     0,     0,     0,   985,
-     0,   985,   985,     0,   644,     0,     0,     0,     0,     0,
-     0,     7,     8,     9,    10,     0,   202,   535,     0,     0,
-    78,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   202,   202,   202,     0,     0,    18,
-     0,     0,     0,     0,   484,     0,   985,     0,     0,    21,
-     0,     0,     0,     0,     0,     0,     0,   204,   204,     0,
-   204,     0,    26,   202,    27,    28,     0,     0,     0,  1204,
-     0,     0,     0,     0,     0,     0,     0,     0,   193,   204,
-     0,     7,     8,     9,    10,   167,    12,    13,   194,   261,
-  1035,     0,    14,     0,     0,     0,    32,     0,     0,     0,
-     0,   195,     0,   257,     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,   548,
-   548,   548,    26,     0,    27,    28,  1204,  1204,  1204,     0,
-     0,   644,     0,     0,     0,     0,     0,     0,    30,     0,
-   659,     0,     0,     0,     0,     0,     0,    51,    31,     0,
-     0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
-     0,    33,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    78,    78,    78,     0,
-     0,     0,     0,     0,     0,   257,   261,     0,     0,     0,
-     0,     7,     8,     9,    10,   205,    12,   206,     0,     0,
-     0,     0,    14,     0,   644,     0,   644,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    16,   644,    17,    18,
-     0,   644,   644,   644,    20,  1206,     0,     0,     0,    21,
-     0,     0,     0,    23,     0,   202,     0,     0,     0,     0,
-     0,     0,    26,     0,    27,    28,     0,     0,  1435,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,    30,     0,
-     0,     0,     0,     0,    78,   985,   985,  1177,    31,    78,
-     0,     0,    78,     0,     0,     0,    32,     0,     0,     0,
-     0,    33,     0,     0,     0,     7,     8,     9,    10,   205,
-    12,   206,     0,     0,     0,     0,    14,     0,     0,     0,
-     0,   202,     0,   202,     0,   202,   202,   202,     0,     0,
-    16,   202,    17,    18,  1177,     0,   202,     0,    20,   202,
+    31,     0,     0,    16,     0,    17,    18,     0,    32,     0,
+     0,    20,     0,    33,     0,     0,    21,     0,     0,     0,
+    23,     0,     0,     0,     0,     0,     0,     0,     0,    26,
+     0,    27,    28,     0,     0,     0,     0,  1035,     0,     0,
+     0,     0,     0,     0,     0,    30,     7,     8,     9,    10,
+   205,    12,   206,     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,  1421,     0,     7,     8,     9,    10,   167,
+    12,    13,     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,
-     0,   102,     0,     0,     0,     0,     0,     0,     0,   202,
-   121,   102,    30,   204,     0,     0,     0,   102,   102,     0,
-   102,  1489,    31,     0,     0,    78,    78,    78,    78,    78,
-    32,     0,     0,    78,     0,    33,   594,   595,   596,   597,
-   598,   599,   600,   601,   602,   603,   604,   605,   606,   607,
-   608,   609,   235,     0,     0,     0,  1206,  1206,  1206,     0,
-     0,     0,     0,     0,     0,     0,   906,   906,     0,   906,
-     0,  1490,   588,   589,   590,   591,   592,   593,   594,   595,
-   596,   597,   598,   599,   600,   601,   602,   603,   604,   605,
-   606,   607,   608,   609,   593,   594,   595,   596,   597,   598,
-   599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
-   609,   389,     0,   121,   985,   985,  1177,  1177,  1177,     0,
-   102,   102,   985,     0,     0,     0,     0,   102,   102,     0,
-     0,   102,   102,   102,     0,   417,   102,   102,   102,     0,
-     0,   257,   261,     0,     0,  1177,  1177,  1177,     0,     0,
-    78,    78,     0,    78,     0,     0,     0,   202,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,  1233,   127,
-   128,    10,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    78,
-    78,    78,     0,     0,     0,     0,   202,     0,   202,   202,
-     0,     0,     0,     0,     0,     0,    21,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    26,
-     0,    27,    28,     0,     0,   235,   102,  1235,     0,     0,
-     0,     0,     0,     0,     0,    30,     0,     0,     0,   985,
-   985,     0,   985,   202,     0,    31,   102,     0,     0,     0,
-     0,     0,     0,    32,   202,   202,     0,   202,    33,     0,
-     0,   570,     0,   300,     8,     9,    10,   167,    12,   301,
-   302,   303,   749,   304,    14,     0,   202,     0,   204,     0,
-   204,     0,     0,     0,     0,   102,     0,     0,    16,   305,
-    17,    18,    19,  1206,   306,   307,    20,   484,   308,   309,
-   310,    21,   311,   312,     0,    23,     0,   636,     0,   313,
-   314,   315,   316,   317,    26,     0,    27,   319,  -312,     0,
-     0,   320,     0,     0,     0,     0,     0,   321,     0,     0,
-   937,     0,     0,   102,     0,   102,   102,     0,   323,   324,
-   938,     7,     8,     9,    10,     0,   326,   327,   328,     0,
-   639,     0,     0,   939,   641,     0,     0,     0,     0,     0,
-  1206,  1206,  1206,     7,     8,     9,    10,     0,     0,    18,
-   330,     0,     0,     0,     0,     0,     0,     0,     0,    21,
-   102,    78,   478,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,    26,     0,    27,    28,     0,     0,     0,   102,
-     0,    21,     0,     0,     0,     0,   102,     0,   474,   102,
-     0,     0,     0,     0,    26,     0,    27,    28,   475,     0,
-  1432,   102,     0,     0,     0,     0,    32,     0,     0,     0,
-   193,   476,     0,     0,     0,   257,   261,   257,     0,     0,
-   194,     0,     0,     0,     0,     0,     0,     0,    32,   478,
-   478,   478,     0,   195,     0,     0,     0,     0,     8,     9,
-     0,   205,    12,   206,     7,     8,     9,    10,    14,     0,
-   204,     0,   202,   202,  1175,     0,     0,     0,     0,   257,
-     0,     0,    16,     0,    17,    18,     0,     0,     0,   102,
-    20,     0,     0,     0,     0,   102,     0,     0,     0,    23,
-     0,     0,    21,     0,     0,     0,     0,     0,    26,   261,
-   130,   131,     0,     0,     0,    26,     0,    27,    28,     0,
-     0,  1175,  1460,     0,  -479,  -479,  -479,  -479,  -479,  -479,
-  -479,   193,     0,  -479,   102,  -479,     0,     0,     0,     0,
-     0,   194,     0,     0,     0,     0,  -479,     0,  -479,    32,
-     0,     0,  -479,     0,   195,     0,     0,  -479,     0,     0,
-   202,     0,  -479,     0,     0,     0,  -479,     0,  -479,     0,
-     0,     0,     0,     0,     0,  -479,     0,  -479,  -479,  -479,
-  -479,  -479,     0,  -479,  -479,  -479,  -479,  -479,  -479,  -479,
-  -479,  -479,  -479,  -479,  -479,  -479,  -479,  -479,  -479,  -479,
-  -479,  -479,  -479,  -479,  -479,  -479,     0,  -479,  -479,  -479,
-   102,  -479,  -479,  -479,  -479,  -479,  -479,     0,  -479,     0,
-     0,   102,   102,  1461,   102,   102,     0,     0,  -479,  -479,
-  -479,     0,  -479,     0,     0,     0,     0,     0,     0,     0,
-   257,     0,     0,     0,     0,     0,     0,     8,     9,     0,
-   167,    12,    13,     0,     0,     0,     0,    14,     0,     0,
-     0,   202,   202,   202,   202,  1175,     0,  1297,     0,   202,
-     0,    16,     0,    17,    18,     0,     0,   102,     0,    20,
-     0,     0,     0,     0,   102,   121,     0,     0,   698,     0,
-     0,   168,  1175,  1175,  1175,     0,   235,    26,     0,   130,
-   131,     0,     0,     0,     0,  1440,     0,  1308,  1309,  1310,
-    10,   167,    12,   301,   302,   303,     0,   304,    14,  1311,
-  1015,  1312,  1313,  1314,  1315,  1316,  1317,  1318,  1319,  1320,
-  1321,    15,    16,   305,    17,    18,    19,     0,   306,   307,
-    20,     0,   308,   309,   310,    21,   311,   312,  1322,    23,
-  1323,     0,     0,   313,   314,   315,   316,   317,    26,     0,
-  1324,   319,   736,     0,  1325,   320,     0,  1015,     0,     0,
-     0,   321,     0,     0,   322,     0,     0,     0,     0,     0,
-     0,     0,   323,   324,   325,     0,   202,   202,     0,   202,
-   326,   327,   328,     0,   102,     0,     0,   329,     0,  1326,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,  1441,   330,     0,     0,     0,     0,     0,
-     0,     0,   102,   102,   102,   202,     0,   202,     0,     0,
-     0,     0,     0,     0,   102,     0,  1307,     0,  1308,  1309,
-  1310,    10,   167,    12,   301,   302,   303,     0,   304,    14,
-  1311,     0,  1312,  1313,  1314,  1315,  1316,  1317,  1318,  1319,
-  1320,  1321,    15,    16,   305,    17,    18,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,  1322,
-    23,  1323,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,  1324,   319,   736,     0,  1325,   320,     0,     0,     0,
-     0,     0,   321,     0,     0,   322,     0,   102,     0,   102,
-     0,     0,     0,   323,   324,   325,    18,     0,     0,     0,
-   102,   326,   327,   328,     0,     0,     0,     0,   329,  1175,
-  1326,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   330,     0,     0,   588,   589,
-   590,   591,   592,   593,   594,   595,   596,   597,   598,   599,
-   600,   601,   602,   603,   604,   605,   606,   607,   608,   609,
-     0,     0,     0,     0,     0,     8,     9,     0,   167,    12,
-    13,     0,     0,   749,     0,    14,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,  1175,  1175,  1175,    16,
-     0,    17,    18,     0,     0,  1015,     0,    20,     0,     0,
-     0,     0,     0,     0,     0,     0,    23,   202,     0,     0,
-     0,     0,     0,     0,     0,    26,     0,   130,   131,     0,
-     0,     0,     0,     0,     0,     0,   570,     0,     7,     8,
-     9,    10,   167,    12,   301,   302,   303,   749,   304,    14,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   102,
-     0,   102,     0,    16,   305,    17,    18,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,   636,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,    28,  -312,     0,     0,   320,     0,     0,     0,
-     0,     0,   321,     0,     0,  1201,     0,     0,     0,   102,
-   102,     0,   102,   323,   324,  1202,     0,     0,     0,     0,
-     0,   326,   327,   328,     0,   639,     0,     0,  1203,   641,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,   330,   870,     0,   300,     8,
-     9,    10,   167,    12,   301,   302,   303,     0,   304,    14,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,  1015,    16,   305,    17,    18,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,   319,  1531,     0,  -788,   320,     0,     0,  1015,
-     0,     0,   321,     0,     0,   322,     0,     0,     0,     0,
-     0,     0,     0,   323,   324,   325,     0,     0,     0,     0,
-     0,   326,   327,   328,     0,     0,     0,     0,   329,   739,
-     0,   858,   859,   860,    10,     0,    12,   552,   302,   303,
-     0,   304,    14,     0,     0,   330,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    16,   305,    17,     0,
-    19,     0,   306,   307,    20,     0,   308,   309,   310,    21,
-   311,   312,     0,    23,     0,     0,     0,   313,   314,   315,
-   316,   317,    26,     0,   861,   862,   740,     0,     0,   320,
-     0,     0,     0,     0,     0,   321,     0,     0,   322,     0,
-     0,     0,     0,     0,     0,     0,   323,   324,   325,     0,
-     0,     0,     0,     0,   326,   327,   328,     0,     0,     0,
-     0,   329,   863,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,  1015,  1022,   330,   570,
-     0,   300,     8,     9,    10,     0,    12,   301,   302,   303,
-     0,   304,    14,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,    16,   305,    17,    18,
-    19,     0,   306,   307,    20,     0,   308,   309,   310,    21,
-   311,   312,     0,    23,     0,     0,     0,   313,   314,   315,
-   316,   317,    26,     0,    27,   319,  -312,     0,     0,   320,
-     0,     0,     0,     0,     0,   321,     0,     0,   571,     0,
-     0,     0,     0,     0,     0,     0,   323,   324,   572,     0,
-     0,     0,     0,     0,   326,   327,   328,     0,     0,     0,
-   739,   573,   858,   859,   860,    10,     0,    12,   552,   302,
-   303,     0,   304,    14,     0,     0,     0,     0,   330,     0,
-     0,     0,     0,     0,     0,     0,     0,    16,   305,    17,
-     0,    19,     0,   306,   307,    20,     0,   308,   309,   310,
-    21,   311,   312,     0,    23,     0,     0,     0,   313,   314,
-   315,   316,   317,    26,     0,   861,   862,   740,     0,     0,
-   320,     0,     0,     0,     0,     0,   321,     0,     0,   322,
-     0,     0,     0,     0,     0,     0,     0,   323,   324,   325,
-     0,     0,     0,     0,     0,   326,   327,   328,     0,     0,
-     0,     0,   329,   863,   739,     0,   858,   859,   860,    10,
-     0,    12,   552,   302,   303,     0,   304,    14,     0,   330,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    16,   305,    17,     0,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-     0,     0,   313,   314,   315,   316,   317,    26,     0,   861,
-   862,   740,     0,     0,   320,     0,     0,     0,     0,     0,
-   321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,   325,     0,     0,     0,     0,     0,   326,
-   327,   328,     0,     0,     0,   739,   329,   858,   859,   860,
-    10,     0,    12,   552,   302,   303,     0,   304,    14,     0,
-     0,     0,  -483,   330,     0,     0,     0,     0,     0,     0,
-     0,     0,    16,   305,    17,     0,    19,     0,   306,   307,
-    20,     0,   308,   309,   310,    21,   311,   312,     0,    23,
-     0,     0,     0,   313,   314,   315,   316,   317,    26,     0,
-   861,   862,   740,     0,     0,   320,     0,     0,     0,     0,
-     0,   321,     0,     0,   322,     0,     0,     0,     0,     0,
-     0,     0,   323,   324,   325,     0,     0,     0,     0,     0,
-   326,   327,   328,     0,     0,     0,   739,   329,   300,     8,
-     9,    10,     0,    12,   552,   302,   303,     0,   304,    14,
-     0,     0,     0,  1346,   330,     0,     0,     0,     0,     0,
-     0,     0,     0,    16,   305,    17,     0,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,     0,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,   319,   740,     0,     0,   320,     0,     0,     0,
-     0,     0,   321,     0,     0,   322,     0,     0,     0,     0,
-     0,     0,     0,   323,   324,   325,     0,     0,     0,     0,
-     0,   326,   327,   328,     0,     0,     0,     0,   329,     0,
-   570,     0,     7,     8,     9,    10,  1350,    12,   301,   302,
-   303,     0,   304,    14,     0,   330,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    16,   305,    17,
-    18,    19,     0,   306,   307,    20,     0,   308,   309,   310,
-    21,   311,   312,     0,    23,     0,     0,     0,   313,   314,
-   315,   316,   317,    26,     0,    27,    28,  -312,     0,     0,
-   320,     0,     0,     0,     0,     0,   321,     0,     0,  1505,
-     0,     0,     0,     0,     0,     0,     0,   323,   324,  1506,
-     0,     0,     0,     0,     0,   326,   327,   328,     0,     0,
-     0,   739,  1507,   300,     8,     9,    10,     0,    12,   552,
-   302,   303,     0,   304,    14,     0,     0,     0,     0,   330,
-     0,     0,     0,     0,     0,     0,     0,     0,    16,   305,
-    17,     0,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,     0,    23,     0,     0,     0,   313,
-   314,   315,   316,   317,    26,     0,    27,   319,   740,     0,
-     0,   320,     0,     0,     0,     0,     0,   321,     0,     0,
-   322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
-   325,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-     0,     0,  1579,   329,   300,     8,     9,    10,     0,    12,
-   301,   302,   303,     0,   304,    14,     0,     0,     0,     0,
-   330,     0,     0,     0,     0,     0,     0,     0,     0,    16,
-   305,    17,     0,    19,     0,   306,   307,    20,     0,   308,
-   309,   310,    21,   311,   312,     0,    23,     0,     0,     0,
-   313,   314,   315,   316,   317,    26,     0,    27,   319,     0,
-     0,  -196,   320,     0,     0,     0,     0,     0,   321,     0,
-     0,   322,     0,     0,     0,     0,     0,     0,     0,   323,
-   324,   325,     0,     0,     0,     0,     0,   326,   327,   328,
-     0,     0,     0,   870,   329,   300,     8,     9,    10,     0,
-    12,   552,   302,   303,     0,   304,    14,     0,     0,     0,
-     0,   330,     0,     0,     0,     0,     0,     0,     0,     0,
-    16,   305,    17,     0,    19,     0,   306,   307,    20,     0,
-   308,   309,   310,    21,   311,   312,     0,    23,     0,     0,
-     0,   313,   314,   315,   316,   317,    26,     0,    27,   319,
-     0,     0,     0,   320,     0,     0,     0,     0,     0,   321,
-   263,     0,   322,     8,     9,     0,     0,    12,    13,     0,
-   323,   324,   325,    14,     0,     0,     0,     0,   326,   327,
-   328,     0,     0,     0,     0,   329,     0,    16,     0,    17,
-     0,     0,     0,     0,     0,    20,     0,   264,   265,     0,
-  -788,     0,   330,     0,    23,     0,   266,     0,     0,     0,
-     0,     0,     0,    26,     0,   130,   131,     0,   267,     0,
-     0,     0,   268,   269,   270,   271,   272,   273,   274,   275,
-   276,   277,   278,   279,   280,   281,   282,   283,   284,   285,
-   286,   287,   288,     0,     0,   289,   290,   291,     0,     0,
-   292,     0,   959,   293,   300,     8,     9,    10,     0,    12,
-   552,   302,   303,     0,   304,    14,     0,     0,     0,   294,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
-   305,    17,     0,    19,     0,   306,   307,    20,     0,   308,
-   309,   310,    21,   311,   312,     0,    23,     0,     0,     0,
-   313,   314,   315,   316,   317,    26,     0,    27,   319,     0,
-     0,     0,   320,     0,     0,     0,     0,     0,   321,     0,
-     0,   322,     0,     0,     0,     0,     0,     0,     0,   323,
-   324,   325,     0,     0,     0,     0,     0,   326,   327,   328,
-     0,     0,     0,   961,   329,   300,     8,     9,    10,     0,
-    12,   552,   302,   303,     0,   304,    14,     0,     0,     0,
-     0,   330,     0,     0,     0,     0,     0,     0,     0,     0,
-    16,   305,    17,     0,    19,     0,   306,   307,    20,     0,
-   308,   309,   310,    21,   311,   312,     0,    23,     0,     0,
-     0,   313,   314,   315,   316,   317,    26,     0,    27,   319,
-     0,     0,     0,   320,     0,     0,     0,     0,     0,   321,
-     0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
-   323,   324,   325,     0,     0,     0,     0,     0,   326,   327,
-   328,     0,     0,     0,  1515,   329,   300,     8,     9,    10,
-     0,    12,   552,   302,   303,     0,   304,    14,     0,     0,
-     0,     0,   330,     0,     0,     0,     0,     0,     0,     0,
-     0,    16,   305,    17,     0,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-     0,     0,   313,   314,   315,   316,   317,    26,     0,    27,
-   319,     0,     0,     0,   320,     0,     0,     0,     0,     0,
-   321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,   325,     0,     0,     0,     0,     0,   326,
-   327,   328,   300,     8,     9,    10,   329,    12,   552,   302,
-   303,     0,   304,    14,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   330,     0,     0,     0,    16,   305,    17,
-     0,    19,     0,   306,   307,    20,     0,   308,   309,   310,
-    21,   311,   312,     0,    23,     0,     0,     0,   313,   314,
-   315,   316,   317,    26,     0,    27,   319,     0,     0,     0,
-   320,     0,     0,     0,     0,     0,   321,     0,   506,   322,
-     7,     8,   507,    10,   167,    12,    13,   323,   324,   325,
-     0,    14,     0,     0,     0,   326,   327,   328,     0,     0,
-     0,     0,   329,     0,     0,    16,     0,    17,    18,    19,
-     0,     0,     0,    20,  -528,     0,     0,     0,    21,   330,
-   909,     0,    23,   508,     0,   168,     0,     0,     0,     0,
-     0,    26,     0,    27,    28,     0,     0,   509,     0,   510,
-     0,     0,     0,     0,     0,     0,     0,    30,   506,     0,
-     7,     8,   507,    10,   167,    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,  -527,     0,  -528,     0,    21,     0,
-     0,     0,    23,   508,     0,   168,     0,     0,     0,     0,
-     0,    26,     0,    27,    28,     0,     0,   509,     0,   510,
-     0,     0,     0,     0,     0,     0,     0,    30,     0,     0,
+     7,     8,     9,    10,   205,    12,   206,     0,     0,     0,
+     0,    14,    30,     0,     0,     0,     0,     0,     0,     0,
+     0,     0,    31,     0,     0,    16,     0,    17,    18,     0,
+    32,     0,     0,    20,     0,    33,     0,     0,    21,     0,
+     0,     0,    23,     0,     0,     0,     0,     0,     0,     0,
+     0,    26,     0,    27,    28,     7,     8,     9,    10,   214,
+   215,   216,     0,     0,     0,     0,    14,    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,  1308,  1309,  1310,    10,   167,    12,   301,
-   302,   303,     0,   304,    14,  1311,  -527,  1312,  1313,  1314,
-  1315,  1316,  1317,  1318,  1319,  1320,  1321,    15,    16,   305,
-    17,    18,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,  1322,    23,  1323,     0,     0,   313,
-   314,   315,   316,   317,    26,     0,  1324,   319,   736,     0,
-  1325,   320,     0,     0,     0,     0,     0,   321,     0,     0,
-   322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
-   325,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-     0,     0,     0,   329,     0,  1326,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,  1445,
-   330,  1308,  1309,  1310,    10,   167,    12,   301,   302,   303,
-     0,   304,    14,  1311,     0,  1312,  1313,  1314,  1315,  1316,
-  1317,  1318,  1319,  1320,  1321,    15,    16,   305,    17,    18,
-    19,     0,   306,   307,    20,     0,   308,   309,   310,    21,
-   311,   312,  1322,    23,  1323,     0,     0,   313,   314,   315,
-   316,   317,    26,     0,  1324,   319,   736,     0,  1325,   320,
-     0,     0,     0,     0,     0,   321,     0,     0,   322,     0,
-     0,     0,     0,     0,     0,     0,   323,   324,   325,     0,
-     0,     0,     0,     0,   326,   327,   328,     0,     0,     0,
-     0,   329,     0,  1326,     0,  1308,  1309,  1310,    10,   167,
-    12,   301,   302,   303,     0,   304,    14,  1311,   330,  1312,
-  1313,  1314,  1315,  1316,  1317,  1318,  1319,  1320,  1321,    15,
-    16,   305,    17,    18,    19,     0,   306,   307,    20,     0,
-   308,   309,   310,    21,   311,   312,  1322,    23,  1323,     0,
-     0,   313,   314,   315,   316,   317,    26,     0,  1324,   319,
-  1556,     0,  1325,   320,     0,     0,     0,     0,     0,   321,
-     0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
-   323,   324,   325,     0,     0,     0,     0,     0,   326,   327,
-   328,     0,     0,     0,     0,   329,     0,  1326,     0,  1308,
-  1309,  1310,    10,   167,    12,   301,   302,   303,     0,   304,
-    14,  1311,   330,  1312,  1313,  1314,  1315,  1316,  1317,  1318,
-  1319,  1320,  1321,    15,    16,   305,    17,    18,    19,     0,
-   306,   307,    20,     0,   308,   309,   310,    21,   311,   312,
-  1322,    23,  1323,     0,     0,   313,   314,   315,   316,   317,
-    26,     0,  1324,   319,     0,     0,  1325,   320,     0,     0,
-     0,     0,     0,   321,     0,     0,   322,     0,     0,     0,
-     0,     0,     0,     0,   323,   324,   325,     0,     0,     0,
-     0,     0,   326,   327,   328,     0,     0,     0,     0,   329,
-     0,  1326,   300,     8,     9,    10,   167,    12,   301,   302,
-   303,   749,   304,    14,     0,     0,   330,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,    16,   305,    17,
-    18,    19,     0,   306,   307,    20,     0,   308,   309,   310,
-    21,   311,   312,     0,    23,     0,   636,     0,   313,   314,
-   315,   316,   317,    26,     0,    27,   319,     0,     0,     0,
-   320,     0,     0,     0,     0,     0,   321,     0,     0,   937,
-     0,     0,     0,     0,     0,     0,     0,   323,   324,   938,
-     0,     0,     0,     0,     0,   326,   327,   328,     0,   639,
-     0,     0,   939,   641,     7,     8,     9,    10,   167,    12,
-   301,   302,   303,   749,   304,    14,     0,     0,     0,   330,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,    16,
-   305,    17,    18,    19,     0,   306,   307,    20,     0,   308,
-   309,   310,    21,   311,   312,     0,    23,     0,   636,     0,
-   313,   314,   315,   316,   317,    26,     0,    27,    28,     0,
-     0,     0,   320,     0,     0,     0,     0,     0,   321,     0,
-     0,  1201,     0,     0,     0,     0,     0,     0,     0,   323,
-   324,  1202,     0,     0,     0,     0,     0,   326,   327,   328,
-     0,   639,     0,     0,  1203,   641,   300,     8,     9,    10,
-     0,    12,   301,   302,   303,     0,   304,    14,     0,     0,
-     0,   330,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,    16,   305,    17,    18,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-   636,     0,   313,   314,   315,   316,   317,    26,     0,    27,
-   319,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   321,     0,     0,   937,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,   938,     0,     0,     0,     0,     0,   326,
-   327,   328,     0,   639,     0,     0,   939,   641,     7,     8,
-     9,    10,     0,    12,   301,   302,   303,     0,   304,    14,
-     0,     0,     0,   330,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,    16,   305,    17,    18,    19,     0,   306,
-   307,    20,     0,   308,   309,   310,    21,   311,   312,     0,
-    23,     0,   636,     0,   313,   314,   315,   316,   317,    26,
-     0,    27,    28,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   321,     0,     0,  1201,     0,     0,     0,     0,
-     0,     0,     0,   323,   324,  1202,     0,     0,     0,     0,
-     0,   326,   327,   328,     0,   639,     0,     0,  1203,   641,
-   300,     8,     9,    10,     0,    12,   552,   302,   303,     0,
-   304,    14,     0,     0,     0,   330,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,    16,   305,    17,    18,    19,
-     0,   306,   307,    20,     0,   308,   309,   310,    21,   311,
-   312,     0,    23,     0,     0,     0,   313,   314,   315,   316,
-   317,    26,     0,    27,   319,     0,     0,     0,   320,     0,
-     0,     0,     0,     0,   321,     0,     0,   571,     0,     0,
-     0,     0,     0,     0,     0,   323,   324,   572,     0,     0,
-     0,     0,     0,   326,   327,   328,   300,     8,     9,    10,
-   573,    12,   552,   302,   303,     0,   304,    14,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   330,     0,     0,
-     0,    16,   305,    17,     0,    19,     0,   306,   307,    20,
-     0,   308,   309,   310,    21,   311,   312,     0,    23,     0,
-     0,     0,   313,   314,   315,   316,   317,    26,     0,    27,
-   319,     0,     0,  1418,   320,     0,     0,     0,     0,     0,
-   321,     0,     0,   322,     0,     0,     0,     0,     0,     0,
-     0,   323,   324,   325,     0,     0,     0,     0,     0,   326,
-   327,   328,     0,     0,     0,     0,   329,   300,     8,     9,
-    10,   167,    12,   301,   302,   303,     0,   304,    14,     0,
-     0,     0,     0,   330,     0,     0,     0,     0,     0,     0,
-     0,     0,    16,   305,    17,    18,    19,     0,   306,   307,
-    20,     0,   308,   309,   310,    21,   311,   312,     0,    23,
-     0,     0,     0,   313,   314,   315,   316,   317,    26,     0,
-    27,   319,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   321,     0,     0,   322,     0,     0,     0,     0,     0,
-     0,     0,   323,   324,   325,     0,     0,     0,     0,     0,
-   326,   327,   328,     7,     8,     9,    10,   329,    12,   552,
-   302,   303,     0,   304,    14,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,    16,   305,
-    17,    18,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,     0,    23,     0,     0,     0,   313,
-   314,   315,   316,   317,    26,     0,    27,    28,     0,     0,
-     0,   320,     0,     0,     0,     0,     0,   321,     0,     0,
-  1505,     0,     0,     0,     0,     0,     0,     0,   323,   324,
-  1506,     0,     0,     0,     0,     0,   326,   327,   328,   300,
-     8,     9,    10,  1507,    12,   301,   302,   303,     0,   304,
-    14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   330,     0,     0,     0,    16,   305,    17,     0,    19,     0,
-   306,   307,    20,     0,   308,   309,   310,    21,   311,   312,
-     0,    23,     0,     0,     0,   313,   314,   315,   316,   317,
-    26,     0,   318,   319,     0,     0,     0,   320,     0,     0,
-     0,     0,     0,   321,     0,     0,   322,     0,     0,     0,
-     0,     0,     0,     0,   323,   324,   325,     0,     0,     0,
-     0,     0,   326,   327,   328,   300,     8,     9,    10,   329,
-    12,   301,   302,   303,     0,   304,    14,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   330,     0,     0,     0,
-    16,   305,    17,     0,    19,     0,   306,   307,    20,     0,
-   308,   309,   310,    21,   311,   312,     0,    23,     0,     0,
-     0,   313,   314,   315,   316,   317,    26,     0,    27,   319,
-     0,     0,     0,   320,     0,     0,     0,     0,     0,   321,
-     0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
-   323,   324,   325,     0,     0,     0,     0,     0,   326,   327,
-   328,   300,     8,     9,    10,   329,    12,   552,   302,   303,
-     0,   304,    14,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   330,     0,     0,     0,    16,   305,    17,     0,
-    19,     0,   306,   307,    20,     0,   308,   309,   310,    21,
-   311,   312,     0,    23,     0,     0,     0,   313,   314,   315,
-   316,   317,    26,     0,    27,   319,     0,     0,     0,   320,
-     0,     0,     0,     0,     0,   321,     0,     0,   322,     0,
-     0,     0,     0,     0,     0,     0,   323,   324,   325,     0,
-     0,     0,     0,     0,   326,   327,   328,   300,     8,     9,
-    10,   329,    12,   552,   302,   303,     0,   304,    14,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   330,     0,
-     0,     0,    16,   305,    17,     0,    19,     0,   306,   307,
-    20,     0,   308,   309,   310,    21,   311,   312,     0,    23,
-     0,     0,     0,   313,   314,   315,   316,   317,    26,     0,
-    27,   319,   585,     0,     0,     0,     0,     0,     0,     0,
-     0,   321,     0,     0,   322,     0,     0,     0,     0,     0,
-     0,     0,   323,   324,   325,     0,     0,     0,     0,     0,
-   326,   327,   328,   300,     8,     9,    10,   586,    12,   552,
-   302,   303,     0,   304,    14,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,    16,   305,
-    17,     0,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,     0,    23,     0,     0,     0,   313,
-   314,   315,   316,   317,    26,     0,    27,   319,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   321,     0,     0,
-   322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
-   325,     0,     0,     0,     0,     0,   326,   327,   328,     0,
-     0,     0,     0,   329,   624,   300,     8,     9,    10,     0,
-    12,   552,   302,   303,     0,   304,    14,     0,     0,     0,
-   330,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-    16,   305,    17,    18,    19,     0,   306,   307,    20,     0,
-   308,   309,   310,    21,   311,   312,     0,    23,     0,     0,
-     0,   313,   314,   315,   316,   317,    26,     0,    27,   319,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   321,
-     0,     0,   571,     0,     0,     0,     0,     0,     0,     0,
-   323,   324,   572,     0,     0,     0,     0,     0,   326,   327,
-   328,  1161,     8,     9,    10,   573,    12,   552,   302,   303,
-     0,   304,    14,     0,     0,     0,     0,     0,     0,     0,
-     0,     0,   330,     0,     0,     0,    16,   305,    17,     0,
-    19,     0,   306,   307,    20,     0,   308,   309,   310,    21,
-   311,   312,     0,    23,     0,     0,     0,   313,   314,   315,
-   316,   317,    26,     0,    27,   319,     0,     0,     0,   320,
-     0,     0,     0,     0,     0,   321,     0,     0,   322,     0,
-     0,     0,     0,     0,     0,     0,   323,   324,   325,     0,
-     0,     0,     0,     0,   326,   327,   328,     7,     8,     9,
-    10,   329,    12,   301,   302,   303,     0,   304,    14,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,   330,     0,
-     0,     0,    16,   305,    17,    18,    19,     0,   306,   307,
-    20,     0,   308,   309,   310,    21,   311,   312,     0,    23,
-     0,     0,     0,   313,   314,   315,   316,   317,    26,     0,
-    27,    28,     0,     0,     0,     0,     0,     0,     0,     0,
-     0,   321,     0,     0,  1505,     0,     0,     0,     0,     0,
-     0,     0,   323,   324,  1506,     0,     0,     0,     0,     0,
-   326,   327,   328,   300,     8,     9,    10,  1507,    12,   552,
-   302,   303,     0,   304,    14,     0,     0,     0,     0,     0,
-     0,     0,     0,     0,   330,     0,     0,     0,    16,   305,
-    17,     0,    19,     0,   306,   307,    20,     0,   308,   309,
-   310,    21,   311,   312,     0,    23,     0,     0,     0,   313,
-   314,   315,   316,   317,    26,     0,    27,   319,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,   321,     0,     0,
-   322,     0,     0,     0,     0,     0,     0,     0,   323,   324,
-   325,     0,     0,     0,     0,     0,   326,   327,   328,   300,
-     8,     9,    10,   553,    12,   552,   302,   303,     0,   304,
-    14,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   330,     0,     0,     0,    16,   305,    17,     0,    19,     0,
-   306,   307,    20,     0,   308,   309,   310,    21,   311,   312,
-     0,    23,     0,     0,     0,   313,   314,   315,   316,   317,
-    26,     0,    27,   319,     0,     0,     0,     0,     0,     0,
-     0,     0,     0,   321,     0,     0,   322,     0,     0,     0,
-     0,     0,     0,     0,   323,   324,   325,     0,     0,     0,
-     0,     0,   326,   327,   328,   300,     8,     9,    10,   556,
-    12,   552,   302,   303,     0,   304,    14,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,   330,     0,     0,     0,
-    16,   305,    17,     0,    19,     0,   306,   307,    20,     0,
-   308,   309,   310,    21,   311,   312,     0,    23,     0,     0,
-     0,   313,   314,   315,   316,   317,    26,     0,    27,   319,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,   321,
-     0,     0,   322,     0,     0,     0,     0,     0,     0,     0,
-   323,   324,   325,     0,     0,     0,     0,     0,   326,   327,
-   328,     0,     0,     8,     9,   329,   167,    12,    13,     0,
-     0,  1550,     0,    14,     0,     0,     0,     0,     0,     0,
-     0,     0,   330,     0,     0,     0,     0,    16,     0,    17,
-    18,     0,     0,     0,     0,    20,     0,     0,     0,     0,
-     0,     0,     0,     0,    23,     0,     0,     0,     0,     0,
-     0,     0,     0,    26,     0,   130,   131,   588,   589,   590,
-   591,   592,   593,   594,   595,   596,   597,   598,   599,   600,
-   601,   602,   603,   604,   605,   606,   607,   608,   609,   588,
-   589,   590,   591,   592,   593,   594,   595,   596,   597,   598,
-   599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
-   609,     0,     0,     0,     0,  1261,     0,     0,     0,     0,
-     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-   677,     0,     0,  1546,   588,   589,   590,   591,   592,   593,
-   594,   595,   596,   597,   598,   599,   600,   601,   602,   603,
-   604,   605,   606,   607,   608,   609,  1564,   588,   589,   590,
-   591,   592,   593,   594,   595,   596,   597,   598,   599,   600,
-   601,   602,   603,   604,   605,   606,   607,   608,   609,   588,
-   589,   590,   591,   592,   593,   594,   595,   596,   597,   598,
-   599,   600,   601,   602,   603,   604,   605,   606,   607,   608,
-   609,   588,   589,   590,   591,   592,   593,   594,   595,   596,
-   597,   598,   599,     0,   601,   602,   603,   604,   605,   606,
-   607,   608,   609
+     0,     0,     0,    18,     0,    32,     0,     0,    20,     0,
+    33,     0,     0,    21,     0,     0,     0,    23,     0,   617,
+     0,     0,     0,     0,     0,     0,    26,     0,    27,    28,
+     8,     9,     0,   167,    12,    13,     0,     0,     0,     0,
+    14,     0,   193,     8,     9,     0,   167,    12,    13,     0,
+     0,   730,   194,    14,    16,     0,    17,    18,     0,     0,
+    32,     0,    20,     0,     0,  1424,     0,    16,     0,    17,
+    18,   679,     0,     0,   168,    20,     0,     0,     0,     0,
+    26,     0,   130,   131,    23,     0,     0,     0,     0,     0,
+     0,     0,     0,    26,     0,   130,   131,     8,     9,     0,
+   167,    12,    13,     0,     0,  1545,     0,    14,     0,     0,
+     8,     9,     0,   205,    12,   206,     0,     0,     0,     0,
+    14,    16,     0,    17,    18,     0,     0,     0,     0,    20,
+     0,     0,     0,     0,    16,     0,    17,    18,    23,     0,
+     0,     0,    20,     0,     0,     0,     0,    26,     0,   130,
+   131,    23,     0,     0,     0,     0,     0,     0,     0,     0,
+    26,     0,   130,   131,   569,   570,   571,   572,   573,   574,
+   575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
+   585,   586,   587,   588,   589,   590,   569,   570,   571,   572,
+   573,   574,   575,   576,   577,   578,   579,   580,   581,   582,
+   583,   584,   585,   586,   587,   588,   589,   590,     0,     0,
+     0,     0,  1236,   575,   576,   577,   578,   579,   580,   581,
+   582,   583,   584,   585,   586,   587,   588,   589,   590,     0,
+  1565,  1559,   569,   570,   571,   572,   573,   574,   575,   576,
+   577,   578,   579,   580,   581,   582,   583,   584,   585,   586,
+   587,   588,   589,   590,   569,   570,   571,   572,   573,   574,
+   575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
+   585,   586,   587,   588,   589,   590,   569,   570,   571,   572,
+   573,   574,   575,   576,   577,   578,   579,   580,     0,   582,
+   583,   584,   585,   586,   587,   588,   589,   590,   573,   574,
+   575,   576,   577,   578,   579,   580,   581,   582,   583,   584,
+   585,   586,   587,   588,   589,   590,   576,   577,   578,   579,
+   580,   581,   582,   583,   584,   585,   586,   587,   588,   589,
+   590
 };
 
 static const short yycheck[] = {     4,
-   174,   161,   209,    23,   176,     4,   149,   150,   402,   175,
-   355,   402,   126,    80,   734,   156,    62,     4,   251,   349,
-   482,    80,   355,     4,   402,   455,    14,     4,   134,   898,
-    35,   511,    84,   513,    46,   583,    35,    42,    55,   709,
-   247,   521,   209,    30,    31,    90,   733,    92,    35,   304,
-   305,   218,    57,     4,    35,    42,   133,   134,    35,   640,
-   460,    42,   620,   663,    76,    42,   647,    72,   373,   124,
-    42,   217,   218,    42,    55,   440,    57,   144,     4,    84,
-   133,     4,   337,    88,    35,    90,    11,    92,  1400,   296,
-  1327,    42,   137,   780,   140,    83,  1486,    84,  1337,    42,
-    42,  1487,   107,   108,    12,  1344,    47,    54,    58,    35,
-   156,    57,    35,    11,    11,    47,    42,   717,   106,    42,
-   356,   357,   355,    64,    62,  1488,    54,    38,    33,    59,
-    54,   136,   137,    84,   139,     0,   203,    62,  1528,    75,
-  1510,    77,   349,    54,    37,    75,    74,   577,    98,   136,
-    74,    59,    93,    94,    62,   136,    64,  1527,   175,   140,
-   165,    93,   149,   150,   169,     1,   212,    33,     0,   503,
-   108,   176,   408,   409,   220,   782,     1,     1,   165,   641,
-   306,   307,   169,   108,   165,   136,   245,   794,   169,   716,
-   136,   237,   169,   165,   175,   176,   322,   169,  1561,   325,
-   169,   213,   328,   262,   109,   331,   193,   194,   155,   335,
-   108,   108,  1582,   136,   165,   822,   109,   343,   169,    47,
-  1606,   828,    58,  1531,    27,   555,   169,   169,    31,    59,
-   176,  1621,   490,    58,    58,    62,    74,    62,    62,    12,
-   245,   222,   165,   169,    25,    27,   169,    74,     9,    31,
-  1487,   402,  1491,   200,  1566,    47,    59,    60,   245,    42,
-   248,    64,    60,    74,   245,    93,    94,  1575,   526,   346,
-    95,    95,     3,     4,     5,     6,    59,    58,    60,   109,
-   108,    62,    64,   149,   150,   151,    59,   393,   448,    62,
-   342,    58,   297,   346,   245,  1061,  1062,    64,  1537,   245,
-    61,    93,    94,    33,     7,   735,   976,     3,     4,     5,
-    41,   109,  1078,   358,    95,   660,   108,   468,     4,   245,
-   487,   699,   245,    54,   329,    56,    57,   109,   935,   195,
-   385,   474,   475,    60,    37,   108,    59,   342,    48,   897,
-   486,   487,     4,     5,  1583,   350,     8,     9,   494,    35,
-    59,    93,    14,   358,   359,   342,    93,    88,   939,    59,
-    56,    57,   756,   728,   729,   756,    28,   355,    30,    59,
-    47,    93,   359,    54,    36,    75,     4,    77,   359,   525,
-    60,    60,   109,    45,   689,   108,   169,   404,     4,     5,
-    59,   342,    54,    74,    56,    57,   629,   402,   544,   108,
-   405,  1270,   983,    74,   450,     8,     9,    35,   359,    74,
-    47,    14,    47,   359,    60,   402,    93,    94,   108,   149,
-   150,   151,   752,   404,   951,   402,   209,   954,   664,   109,
-   109,    93,   980,    36,   217,   218,   359,   442,    54,   108,
-    56,    57,    45,    93,    47,   571,   572,   493,  1048,  1030,
-   107,   402,   511,   498,   513,   442,    93,    94,    93,    33,
-   519,   442,   521,   468,   247,   195,  1232,    25,   995,   996,
-   442,   108,    47,   442,   936,  1241,  1242,    47,  1244,    47,
-  1087,   468,  1089,    47,   496,    47,    31,   474,   475,   640,
-    93,   442,    58,   498,   107,   108,   647,    47,  1185,   480,
-   900,   518,   514,   515,    47,   550,   511,   488,   513,    25,
-     4,    27,   524,   296,   519,    47,   521,   468,    93,   442,
-  1389,    64,    60,    93,   511,    93,   513,    54,    47,    93,
-   511,    93,   513,     4,   521,  1222,    54,   518,   519,    44,
-   521,    35,    58,    93,   108,   550,    62,    74,   553,    54,
-    93,   556,    57,   727,    74,   560,   561,   562,   563,   564,
-   511,    93,   513,    54,    35,   511,   349,   513,   573,   621,
-   521,    42,   518,   519,    93,   521,   150,   151,   583,    95,
-   109,   586,    12,   977,   690,   511,   977,   513,   511,  1019,
-   513,   697,    47,  1174,    54,   521,    58,  1077,   521,   977,
-   945,    93,   838,    54,    25,   756,    27,    54,   474,   475,
-   476,    25,   945,    27,    74,    47,   621,    54,    62,    75,
-   697,   195,  1203,   406,   108,  1152,  1153,    47,   774,    59,
-    74,   782,    62,    62,   621,   640,    47,    58,    93,    94,
-   847,    62,   647,   794,    58,   108,    62,   692,    62,   666,
-   637,   638,    94,   640,    54,     3,     4,     5,    74,   442,
-   647,    93,    62,   651,  1126,   136,     3,     4,     5,   108,
-   621,   822,  1359,    93,    95,    31,   108,   828,   698,   108,
-    58,    95,    93,    94,    62,   666,   941,   692,   705,   640,
-   707,   708,  1458,  1459,   165,    47,   647,    47,   169,   108,
-    25,   706,    27,   486,   487,   710,  1106,  1107,    56,    57,
-    11,   494,   945,   733,    64,  1049,   329,  1051,    47,    56,
-    57,  1055,     8,     9,   705,   706,   707,   708,    14,     7,
-     8,     9,    80,    58,   970,   752,    14,    62,   109,   806,
-    98,    93,   525,    93,   474,   475,   476,   806,    47,    60,
-    36,   756,    47,    31,    62,   329,   815,    47,    36,    45,
-    47,   544,  1122,  1123,    93,  1125,    74,    45,   785,   756,
-    95,   752,     4,     5,   245,   756,    93,   782,   823,   824,
-     3,   826,    60,   909,   935,   141,   798,    60,   939,   794,
-   146,  1121,   804,   805,    93,   782,   808,   809,    93,  1199,
-   812,   111,   943,    93,   785,   756,    93,   794,  1208,  1209,
-   815,   937,   938,  1213,     4,     5,    48,   822,   823,   824,
-    54,   826,    74,   828,    56,    57,   977,    62,   815,  1003,
-    47,   782,   983,    94,   815,   822,   480,    54,   194,   785,
-    74,   828,    62,   794,   488,  1081,  1082,  1083,    80,  1569,
-    27,    94,   465,    47,    31,   429,   430,    74,    48,    74,
-    54,  1261,    59,    60,   815,   111,    56,    57,    93,   815,
-    74,   822,    93,     3,     4,     5,    93,   828,     3,  1030,
-    74,     6,    59,    60,   667,  1219,  1220,  1221,   359,   815,
-    80,   896,   815,    47,    59,    60,   901,   943,    74,    93,
-    54,   475,   476,   259,  1018,    74,    31,    59,     3,     4,
-     5,     6,     3,     4,     5,   182,    41,   835,   836,   837,
-    74,   988,    59,    60,   929,   708,    56,    57,    58,    11,
-   935,    56,    57,   108,   939,   109,  1087,    59,  1089,    93,
-   553,    59,    60,   556,   108,    70,    41,   560,   935,   108,
-   937,   938,   939,    48,    74,    80,  1356,   945,    59,    60,
-   573,    56,    57,    88,   108,    56,    57,    54,    93,   752,
-    74,   442,   977,   586,   979,   980,    74,   590,   983,   553,
-   108,  1411,   556,   109,   935,    80,  1386,   111,   939,   108,
-   977,   774,   109,    88,   981,   982,   983,  1427,   572,   573,
-   977,   111,  1128,     4,     5,   618,  1336,    27,     3,     4,
-     5,   624,   586,  1072,    74,     4,     5,    74,  1077,    54,
-     9,    59,    60,  1174,    54,  1030,   977,    62,    74,  1172,
-  1173,   111,   983,     3,     4,     5,     6,   111,  1043,    74,
-   511,   108,   513,  1030,   108,  1281,   108,    48,    58,    54,
-   521,    54,  1203,    48,   108,    56,    57,    62,  1201,  1202,
-     8,    56,    57,   419,   847,    54,   422,    56,    57,    74,
-   111,    41,  1077,   647,    93,  1201,  1202,    64,   434,  1030,
-  1510,    70,  1087,    59,  1089,  1130,    56,    57,  1069,    47,
-  1077,    80,    59,  1074,    59,    60,  1077,  1527,    74,    75,
-  1087,    77,  1089,     4,     5,    94,     4,     5,    93,  1176,
-    83,    84,  1117,    54,   470,    54,   472,   983,    88,    59,
-    60,    62,  1552,     4,     5,  1130,  1077,  1521,   109,   485,
-  1521,  1077,    60,    74,    59,    60,  1087,    36,  1089,     3,
-     4,     5,    64,     7,     8,     9,    64,    48,    59,    60,
-    48,  1077,  1582,   108,  1077,    56,    57,    64,    56,    57,
-  1590,   108,    62,  1335,  1030,  1185,    60,    31,  1334,  1174,
-  1336,   108,    36,    54,   108,    56,    57,     4,     5,    80,
-    54,     9,    80,    75,    12,  1172,  1173,  1174,    62,    70,
-    54,  1196,    56,    57,    58,  1525,   108,  1196,  1203,    80,
-    74,  1327,   108,    64,     3,     4,     5,     6,    64,  1196,
-     9,  1611,  1217,    94,  1201,  1202,  1203,    54,    54,    47,
-    64,   111,    62,  1174,    59,    62,    62,  1239,  1240,    56,
-    57,    59,    31,    61,    62,    59,    64,    74,    74,   103,
-   104,   105,    41,   108,    75,  1196,    59,    75,    47,    77,
-   108,    64,  1203,   983,   108,    54,   108,    56,    57,   108,
-    75,    74,    75,    75,    75,    93,    94,   841,     4,     5,
-  1196,    70,    62,  1196,   108,   108,    30,    31,    62,    33,
-   108,    80,    78,    79,    80,    81,    82,    83,    84,    88,
-    59,    90,   905,   111,    93,    94,    62,    94,   108,   108,
-  1030,   108,    88,    57,    74,    59,  1172,  1173,  1174,   111,
-    47,    65,    60,     3,     4,     5,     6,  1334,  1525,  1336,
-    56,    57,  1327,   108,   111,   108,   939,   108,   108,   111,
-  1335,   108,  1337,   109,   108,  1201,  1202,  1203,  1337,  1344,
-  1327,   109,  1502,    59,   815,  1344,    64,    64,  1353,    93,
-  1337,    41,    59,  1334,  1335,  1336,   108,  1344,    48,     3,
-     4,     5,  1505,  1506,   938,   939,    56,    57,    64,   108,
-  1521,     4,     5,   108,   108,  1549,  1327,     4,     5,  1505,
-  1506,    93,    93,    93,    12,    93,  1337,   141,   109,   109,
-    80,     8,   146,  1344,   108,   149,   150,   151,    88,    27,
-   109,  1327,   108,    31,  1327,   108,   111,   763,   764,   983,
-   766,  1337,    56,    57,  1337,    48,   108,    44,  1344,    47,
-   108,  1344,   176,    56,    57,  1437,   108,    54,   182,    56,
-    57,    59,    60,   108,    62,   111,    64,   108,   108,   193,
-   194,   195,  1172,  1173,  1174,    33,   108,    80,    54,   108,
-     7,     8,     9,   108,    62,   209,  1030,    14,   111,   108,
-     3,     4,     5,   217,   218,    93,    94,    47,    62,   108,
-   108,  1201,  1202,  1203,    31,    96,  1481,    62,    60,    36,
-   108,  1486,  1487,  1488,    60,     9,  1491,  1486,    45,    60,
-    16,    64,  1491,   108,  1481,     3,     4,     5,   108,  1486,
-  1487,  1488,  1507,    60,  1491,   259,   108,   108,   108,  1526,
-   777,    54,   108,    56,    57,    58,  1521,   108,  1505,  1506,
-   787,   788,   108,  1528,    93,    93,    60,     4,     5,  1528,
-  1481,    60,  1537,    54,  1521,  1486,  1487,  1488,  1537,    47,
-  1491,  1528,  1554,    93,   111,  1526,    54,   814,    56,    57,
-  1537,    93,   819,  1336,    17,    60,  1561,    54,   107,    97,
-  1486,  1487,   108,  1486,  1487,  1491,    60,   108,  1491,   108,
-  1521,    48,  1438,   108,  1561,   329,    11,  1528,  1583,    56,
-    57,    60,    60,    93,  1583,    93,  1537,    11,    60,    59,
-  1203,    80,    81,    82,    83,    84,  1583,    64,    60,  1173,
-  1174,   108,  1528,    80,  1217,  1528,  1077,   108,   108,    47,
-  1561,  1537,    60,    11,  1537,    88,  1621,    90,    60,    92,
-     0,     0,  1621,     0,     2,   170,   982,    35,  1202,  1203,
-  1425,   690,  1583,   977,  1621,     4,     5,   169,   442,  1505,
-  1506,  1507,   165,   519,  1257,  1258,  1259,  1260,    86,    87,
-  1185,   405,   406,    91,    92,    93,    94,  1583,  1548,   238,
-  1583,    94,     4,     5,   137,   419,   139,     9,   422,  1410,
-  1621,   139,  1621,  1271,   428,   429,   430,   299,   963,   740,
-   434,     3,     4,     5,     6,    54,   958,    56,    57,   243,
-   519,     4,     5,  1359,  1222,  1621,     9,  1074,  1621,   815,
-   956,    70,   673,     4,     5,    47,   621,  1320,  1438,   200,
-   346,    80,    54,   124,    56,    57,   470,  1337,   472,    41,
-   474,   475,   476,  1197,  1569,   479,    48,  1590,    70,  1542,
-    80,   485,   486,   487,    56,    57,   490,    -1,    80,  1600,
-   494,    54,  1525,    56,    57,  1602,    47,  1038,    90,  1353,
-    -1,    93,    94,    54,   104,    56,    57,    70,    80,     3,
-     4,     5,     6,    -1,    -1,   519,    88,    80,    -1,    70,
-    -1,    -1,   526,    -1,  1387,  1505,  1506,  1507,   772,    80,
-    -1,    -1,    -1,   133,    -1,    -1,    -1,    -1,    -1,    90,
-    -1,    -1,    93,    94,   144,    -1,    -1,    41,    -1,   553,
-  1067,  1068,   556,  1070,  1071,    -1,  1073,  1420,     3,     4,
-     5,    -1,    56,    57,  1170,  1171,    -1,   571,   572,   573,
-    -1,   461,  1178,    -1,    -1,    -1,    -1,   821,   468,    -1,
-    -1,    -1,   586,   827,    -1,    -1,     1,    -1,     3,     4,
-     5,     6,     7,     8,     9,    -1,    -1,   320,    -1,    14,
-     3,     4,     5,   203,     3,     4,     5,    -1,     7,     8,
-     9,    56,    57,    28,  1438,    30,    31,    32,  1481,    -1,
-    -1,    36,    -1,    -1,  1487,  1488,    41,    30,    -1,    -1,
-    45,    46,    31,    48,    -1,   358,    -1,    36,   238,    54,
-    -1,    56,    57,   647,  1507,    60,    -1,    62,    -1,    -1,
-    -1,    54,   461,    56,    57,    70,    -1,    56,    57,   468,
-    -1,   551,   262,   667,    -1,    80,    14,    -1,    -1,    -1,
-    -1,    -1,    -1,    88,    22,    -1,    -1,    -1,    93,     3,
-     4,     5,  1506,  1507,    -1,    -1,   930,    -1,   932,  1295,
-  1296,    -1,  1298,    -1,   348,   349,   350,    -1,  1561,    -1,
-    -1,    -1,   706,    -1,   708,   709,    -1,    -1,    -1,    -1,
-    -1,    -1,  1229,  1230,  1577,    -1,    -1,    65,     3,     4,
-     5,   611,     7,     8,     9,    -1,    -1,   617,     3,     4,
-     5,     6,    56,    57,     9,    -1,  1599,   460,   461,     3,
-     4,     5,   551,  1606,    -1,   468,    -1,    -1,   752,    -1,
-     3,     4,     5,     6,   354,    -1,    31,    -1,    -1,   763,
-   764,    -1,   766,    -1,   654,    -1,    41,    -1,    -1,    -1,
-   774,    56,    57,   777,    -1,   498,   124,    -1,    -1,    54,
-    -1,    56,    57,   787,   788,    38,    39,   510,    41,    -1,
-   107,   108,    56,    57,    -1,    70,     3,     4,     5,    -1,
-   148,    54,   611,    56,    57,    80,    -1,    -1,   617,    -1,
-   814,    -1,   412,    88,  1058,   819,    -1,    -1,    93,  1063,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   550,   551,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   841,   647,    -1,
-    -1,    -1,  1086,    -1,  1088,   654,    -1,    54,    -1,    56,
-    57,    -1,    -1,  1370,  1371,  1372,    -1,    -1,    -1,    -1,
-   583,    -1,   585,    -1,    -1,   588,   589,    -1,   591,   592,
-   593,   594,   595,   596,   597,   598,   599,   600,   601,   602,
-   603,   604,   605,   606,   607,   608,   609,    -1,   611,    -1,
-   238,   239,    -1,    -1,   617,    -1,    -1,    -1,    -1,  1143,
-    -1,    -1,   502,   251,     3,     4,     5,     6,     7,     8,
-     9,     3,     4,     5,     6,    14,    -1,    -1,    -1,    -1,
-    -1,     3,     4,     5,   647,    -1,    -1,    -1,    -1,    -1,
-    -1,   654,    31,   937,   938,   939,    -1,    36,  1455,  1456,
-    -1,    -1,    41,    -1,    -1,    -1,    45,   547,    47,    41,
-     3,     4,     5,   676,   677,    54,    48,    56,    57,    -1,
-    -1,     7,     8,     9,    56,    57,    48,    -1,    14,   692,
-    -1,    70,   976,   321,    56,    57,    -1,   981,   982,   983,
-    -1,    80,    -1,   637,   638,    31,    -1,    -1,    80,    88,
-    36,    90,    -1,    -1,    93,    94,    88,    -1,    -1,    45,
-    -1,    54,    -1,    56,    57,   895,   896,     7,     8,     9,
-    -1,   901,   329,    -1,    14,   363,    -1,   740,    -1,    -1,
-    -1,    -1,    -1,    -1,   372,   915,  1030,   917,    -1,   919,
-    -1,    31,   841,    -1,   634,    -1,    36,   385,     4,     5,
-    -1,  1285,     8,     9,    -1,    45,    -1,    -1,    14,    -1,
-   650,   705,    -1,   707,   708,    -1,   710,  1574,     3,     4,
-     5,     6,    -1,  1067,  1068,    -1,  1070,  1071,    -1,  1073,
-    36,    -1,    -1,    -1,   797,   965,    -1,    -1,    -1,    45,
-    -1,    47,    -1,    -1,    -1,   402,   895,   896,    54,    -1,
-    56,    57,   901,    -1,    -1,    -1,    41,    -1,   752,    -1,
-   823,   824,    47,   826,    70,    -1,   915,    -1,   917,    54,
-   919,    56,    57,    -1,    80,    -1,    -1,    -1,   841,  1363,
-  1364,  1011,    -1,    -1,    90,    70,    -1,    93,    94,    -1,
-    -1,    -1,    -1,  1377,  1378,    80,    -1,     3,     4,     5,
-   863,     7,    -1,    88,    -1,    90,    -1,    -1,    93,    94,
-  1394,   468,    -1,    -1,   502,    -1,   965,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    30,    -1,  1170,  1171,  1172,  1173,
-  1174,    37,   895,   896,  1178,    -1,    -1,   900,   901,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    54,    -1,
-    56,    57,   915,   847,   917,    -1,   919,  1201,  1202,  1203,
-    -1,    -1,  1011,    -1,    -1,    -1,   806,    71,    72,    73,
-    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-    84,  1030,  1466,  1467,    -1,  1229,  1230,    -1,    -1,    -1,
-    -1,    -1,   955,    -1,    -1,    -1,   553,   585,    -1,   556,
-    -1,    -1,   965,   560,   561,   562,   563,   564,    -1,     3,
-     4,     5,     6,    -1,    -1,     9,   573,   980,    -1,    -1,
-     3,     4,     5,     6,    -1,    -1,   920,    -1,   922,   586,
-   993,    -1,    -1,    -1,    -1,    -1,    -1,    31,    -1,   933,
-    -1,   629,    -1,   937,   938,    -1,    -1,    41,  1011,    -1,
-    -1,  1295,  1296,    47,  1298,    -1,    -1,  1187,    41,  1189,
-    54,  1191,    56,    57,    -1,    48,    -1,  1030,    -1,     3,
-     4,     5,     6,    56,    57,     9,    70,     1,    -1,     3,
-     4,     5,     6,   640,     8,    -1,    80,   981,   982,    -1,
-   647,  1335,  1336,    -1,    88,    -1,    90,    31,    -1,    93,
-    94,    -1,  1065,  1066,   944,    88,   946,    41,    -1,    -1,
-   698,    -1,    -1,    47,    -1,    -1,    -1,    41,    -1,    -1,
-    54,   709,    56,    57,    48,    -1,  1370,  1371,  1372,    -1,
-    54,    -1,    56,    57,    -1,    -1,    70,    -1,  1187,    -1,
-  1189,    -1,  1191,  1106,  1107,    -1,    80,  1110,   988,    -1,
-    -1,    -1,   740,    -1,    88,     4,    90,    -1,    -1,    93,
-    94,    -1,  1292,    -1,    88,    14,    -1,  1130,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    24,    -1,    -1,    -1,    -1,
-    -1,    30,    31,    -1,    33,    -1,    35,    -1,    -1,    -1,
-    -1,    -1,    -1,    42,  1438,    -1,    -1,    -1,    -1,   756,
-    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,    57,    -1,
-    -1,  1455,  1456,    -1,    -1,    -1,    65,    -1,    -1,    -1,
-    -1,    -1,    -1,    72,  1187,   782,  1189,    -1,  1191,    -1,
-    -1,    -1,  1072,    -1,    83,    84,  1199,   794,    -1,    -1,
-    -1,    -1,    -1,  1292,    -1,  1208,  1209,    -1,    -1,    -1,
-  1213,    -1,    -1,    -1,    -1,    -1,    -1,   106,    -1,    -1,
-    -1,  1505,  1506,  1507,    -1,   822,    -1,    -1,    -1,    -1,
-    -1,   828,  1235,    -1,    -1,    -1,  1170,  1171,  1172,  1173,
-     3,     4,     5,     6,  1178,   134,    -1,   136,    -1,    -1,
-    -1,   140,   141,    -1,    -1,    -1,   145,   146,  1261,    -1,
-   149,   150,   151,    -1,    -1,    -1,    -1,  1201,  1202,  1149,
-     3,     4,     5,     6,    -1,    -1,   165,    -1,    41,    -1,
-   169,    -1,    -1,    -1,    -1,    48,   175,   176,    -1,  1292,
-  1574,    -1,    -1,    56,    57,    -1,  1176,    -1,    31,   896,
-    -1,    -1,    -1,    -1,   193,   194,   195,    -1,    41,    -1,
-    -1,    -1,    -1,  1316,    -1,    -1,    -1,    80,    -1,    -1,
-    -1,    54,    -1,    56,    57,    88,     4,     5,    -1,    -1,
-     8,     9,   929,   222,    -1,   963,    14,    70,   935,    -1,
-    -1,    -1,   939,    -1,    -1,    -1,    -1,    80,   976,  1438,
-   239,    -1,    -1,  1356,    -1,    88,   245,    -1,    36,   248,
-    93,  1295,  1296,    -1,  1298,  1368,  1369,    45,    -1,    47,
-   259,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
-   977,    -1,   979,  1386,    -1,    -1,   983,    -1,    82,    -1,
-    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,     4,     5,
-    -1,    -1,    80,     9,    -1,    -1,    -1,    -1,   297,   298,
-    -1,    -1,    90,    -1,    -1,    93,    94,    -1,   193,   194,
-   195,    -1,    -1,    -1,     3,     4,     5,     6,    -1,    -1,
-     9,    -1,    -1,  1030,    -1,  1438,    -1,    -1,    -1,    -1,
-    -1,    47,    -1,    -1,    -1,    -1,  1043,    -1,    54,    -1,
-    56,    57,    31,   342,    -1,    -1,    -1,   346,  1461,   348,
-   349,   350,    41,    -1,    70,   159,    -1,    -1,    -1,    -1,
-   359,    -1,    -1,    -1,    80,    54,    -1,    56,    57,  1107,
-    -1,    -1,    -1,    -1,    90,    -1,  1489,    93,    94,    -1,
-  1087,    70,  1089,    -1,    -1,    -1,    -1,   191,    -1,    -1,
-    -1,    80,    -1,    -1,   393,     3,     4,     5,     6,    88,
-   204,    -1,    -1,   402,    93,   404,   405,    -1,    -1,    -1,
-  1117,    -1,    -1,    -1,    -1,    -1,     4,     5,    -1,    -1,
-   419,     9,    -1,   422,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    41,    -1,   434,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   442,    -1,    -1,    54,    -1,    56,    57,
-     3,     4,     5,     6,    62,  1193,     9,    -1,    -1,    47,
-    -1,  1199,    70,    -1,    -1,    -1,    54,  1174,    56,    57,
-    -1,   470,    80,   472,    -1,   474,   475,   476,    31,    -1,
-    88,   480,    70,    -1,    -1,    93,   485,    -1,    41,   488,
-    -1,    -1,    80,    -1,    47,    -1,  1203,    -1,  1611,    -1,
-    -1,    54,    90,    56,    57,    93,    94,    -1,    -1,   508,
-  1217,    -1,   511,    -1,   513,    -1,    -1,    70,    -1,   518,
-   519,    -1,   521,    -1,    -1,    -1,     1,    80,     3,     4,
-     5,     6,     7,     8,     9,    88,    -1,    90,    -1,    14,
-    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,    -1,
-    -1,    36,   561,   562,   563,   564,    41,    -1,    -1,    -1,
-    45,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,
-    -1,    56,    57,  1321,  1322,   470,    -1,   472,    -1,   474,
-   475,   476,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-   485,    -1,    -1,    -1,    -1,    80,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,
-    -1,    -1,   621,    98,   623,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   518,    -1,    -1,   635,    -1,   637,   638,
-    -1,   640,    -1,    -1,    -1,    -1,  1353,    -1,   647,     4,
-     5,    -1,   651,     8,     9,    -1,    -1,    -1,    -1,    14,
-    -1,    -1,    -1,    -1,  1402,    -1,    -1,   666,    -1,    -1,
-    -1,    -1,    -1,    28,   478,    30,    -1,    -1,    -1,   483,
-    -1,    36,    -1,    -1,    -1,    -1,  1424,  1425,    -1,    -1,
-    45,   690,    47,    -1,    -1,    -1,    -1,    -1,   697,    54,
-    -1,    56,    57,    -1,    -1,    -1,   705,   706,   707,   708,
-   709,   710,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   527,    -1,    80,    -1,    -1,    -1,   533,
-    -1,    -1,    -1,    -1,    -1,    90,    -1,    -1,    93,    94,
-    -1,   545,   546,    -1,   548,    -1,    -1,    -1,    -1,     3,
-     4,     5,     6,   752,    -1,    -1,    -1,   756,    -1,    -1,
-    -1,  1499,    -1,    -1,   763,   764,    -1,   766,     3,     4,
-     5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,    14,
-    -1,    -1,    -1,   782,    -1,    -1,   785,    41,    -1,    -1,
-    -1,    -1,    -1,    -1,    48,   794,    31,    -1,    -1,    -1,
-  1507,    36,    56,    57,    -1,    -1,    41,    -1,   807,    -1,
-    45,    -1,    47,    -1,  1521,    -1,   815,    -1,    -1,    54,
-    -1,    56,    57,   822,    -1,    -1,    -1,    -1,    -1,   828,
-    -1,    -1,    -1,    -1,    88,    70,   835,   836,   837,   643,
-   644,    -1,    -1,    -1,   648,    80,    -1,    -1,   847,    -1,
-    -1,    -1,    -1,    88,    -1,    90,    -1,    -1,    93,    94,
-    -1,    -1,    -1,    -1,    -1,     4,     5,    -1,     7,     8,
-     9,    -1,    -1,    12,    -1,    14,     4,    -1,   763,   764,
-    -1,   766,    -1,    -1,    -1,    -1,    14,    -1,    -1,    28,
-    -1,    30,    31,    -1,    -1,    23,    24,    36,    -1,    -1,
-   785,    -1,    30,    31,    -1,    33,    45,    35,    47,    -1,
-    -1,    -1,    -1,    -1,    42,    54,    -1,    56,    57,    -1,
-    -1,   920,    -1,   922,    -1,    -1,    -1,    55,    -1,    57,
-   929,    70,    -1,    -1,   933,    -1,   935,    65,   937,   938,
-   939,    80,    -1,    -1,    72,    -1,   945,     3,     4,     5,
-     6,    90,    -1,    -1,    93,    94,    84,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
-    -1,    -1,     9,    -1,    -1,    -1,    -1,   781,   977,    -1,
-   979,    -1,   981,   982,   983,    41,    -1,    -1,    -1,   793,
-    -1,    -1,    48,    -1,    31,    -1,    -1,    -1,    -1,    -1,
-    56,    57,    -1,    -1,    41,    -1,    -1,    -1,   136,    -1,
-    -1,    -1,   140,   141,    -1,    -1,    -1,    54,   146,    56,
-    57,   149,   150,   151,    -1,   829,    -1,   831,    -1,    -1,
-    -1,  1030,    88,    70,    -1,    -1,    -1,   165,    -1,    -1,
-    -1,   169,    -1,    80,  1043,    -1,    -1,   175,   176,    -1,
-    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   193,   194,   195,    -1,    -1,
-  1069,    -1,    -1,    -1,    -1,  1074,    -1,    -1,  1077,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1087,    -1,
-  1089,    -1,    -1,    -1,   222,    -1,   981,   982,   983,   903,
-   904,    -1,   906,     4,     5,    -1,    -1,     8,     9,    -1,
-     4,     5,    -1,    14,     8,     9,    -1,   245,  1117,    -1,
-    14,    -1,    -1,  1122,  1123,    -1,  1125,    28,    -1,    30,
-   934,   259,    -1,    -1,    28,    36,    30,    -1,    -1,    -1,
-    -1,    -1,    36,    -1,    45,  1030,    -1,    -1,    -1,    -1,
-    -1,    45,    -1,    54,    -1,    56,    57,    58,    -1,    -1,
-    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,   297,
-   298,  1170,  1171,  1172,  1173,  1174,    -1,    -1,    -1,  1178,
-    -1,   985,    -1,    -1,  1069,    -1,   348,   349,   350,    -1,
-    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,  1201,  1202,  1203,     3,     4,     5,     6,     7,
-     8,     9,    -1,    -1,   342,    -1,    14,    -1,   346,    -1,
-   348,   349,   350,    -1,    -1,    -1,    -1,   355,    -1,    -1,
-    28,   359,    30,    31,    32,    -1,    -1,    -1,    36,    -1,
-    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,
-    48,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
-    -1,    -1,    -1,    -1,    -1,   393,    -1,    -1,    -1,    -1,
-    -1,    -1,    70,    -1,   402,    -1,   404,   405,    -1,    -1,
-    -1,    -1,    80,    -1,    -1,  1170,  1171,  1172,  1173,  1174,
-    88,   419,    -1,  1178,   422,    93,  1295,  1296,    -1,  1298,
-    98,    -1,     3,     4,     5,     6,   434,    -1,     9,    -1,
-    -1,    -1,    -1,    -1,   442,    -1,  1201,  1202,  1203,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    31,    -1,    -1,    -1,  1138,  1334,  1335,  1336,    -1,    -1,
-    41,    -1,   470,    -1,   472,    -1,   474,   475,   476,    -1,
-    -1,    -1,   480,    54,  1353,    56,    57,   485,    -1,     1,
-   488,     3,     4,     5,     6,     7,     8,     9,    -1,    70,
-    -1,    -1,    14,  1177,    -1,    -1,    -1,    -1,    -1,    80,
-   508,    -1,    -1,   511,    -1,   513,    28,    88,    30,    31,
-   518,   519,    93,   521,    36,    -1,    -1,    -1,    -1,    41,
-    -1,    -1,    -1,    45,    -1,    -1,    48,    -1,    -1,    -1,
-  1295,  1296,    54,  1298,    56,    57,    -1,    -1,    60,    -1,
-  1224,    -1,    -1,    -1,  1228,    -1,    -1,    -1,    70,    -1,
-    -1,    -1,    -1,   561,   562,   563,   564,    -1,    80,  1438,
-    -1,    -1,    -1,    -1,  1248,    -1,    88,    -1,  1252,    -1,
-    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,     3,     4,     5,     6,    -1,    -1,     9,    -1,
-    -1,    -1,    -1,    -1,    -1,   637,   638,    -1,   640,    -1,
-    -1,    -1,    -1,  1287,    -1,   647,    -1,    -1,    -1,    -1,
-    31,    -1,    -1,   621,    -1,   623,    -1,    -1,    -1,    -1,
-    41,    -1,    -1,    -1,    -1,    -1,  1505,  1506,  1507,   637,
-   638,    -1,   640,    54,    -1,    56,    57,    -1,    -1,   647,
-    -1,    -1,  1521,    -1,    -1,    -1,    -1,  1526,    -1,    70,
-    -1,    -1,   660,     3,     4,     5,     6,    -1,   666,    80,
-    -1,    -1,    -1,   705,    -1,   707,   708,    88,   710,    -1,
-    -1,    -1,    93,  1438,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    31,   690,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   698,    41,    -1,    -1,    -1,  1379,  1380,   705,   706,   707,
-   708,   709,   710,    -1,    54,    -1,    56,    57,    -1,    -1,
-   752,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,   733,    -1,    -1,    -1,    -1,
-    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
-  1505,  1506,  1507,    93,   752,    -1,    -1,    -1,   756,    -1,
-    -1,    -1,    -1,    -1,    -1,   763,   764,    -1,   766,    -1,
-    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,     8,
-     9,    -1,   780,    12,   782,    14,    -1,   785,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   794,    -1,    -1,    28,
-    -1,    30,    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,
-    -1,    -1,    41,    -1,    -1,   847,    45,   815,    47,    -1,
-    -1,    -1,    -1,    -1,   822,    54,    -1,    56,    57,    -1,
-   828,    -1,    -1,    -1,    -1,    -1,    -1,   835,   836,   837,
-    -1,    70,     3,     4,     5,     6,     7,     8,     9,   847,
-    -1,    80,    -1,    14,    -1,    -1,    -1,    -1,    -1,    88,
-    -1,    90,    -1,    -1,    93,    94,    -1,    28,    -1,    30,
-    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
-    41,    -1,    -1,    -1,    45,    -1,    47,    -1,   920,    -1,
-   922,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,
-    -1,   933,    -1,    -1,    -1,   937,   938,   939,    -1,    70,
-     3,     4,     5,     6,     7,     8,     9,    -1,    -1,    80,
-    -1,    14,   920,    -1,   922,    -1,    -1,    88,    -1,    90,
-    -1,   929,    93,    94,    -1,   933,    -1,   935,    31,   937,
-   938,   939,    -1,    36,    -1,    -1,    -1,   945,    41,   981,
-   982,   983,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
-    -1,    54,    -1,    56,    57,     4,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,   977,
-    -1,   979,    -1,   981,   982,   983,    -1,    80,    -1,    -1,
-    -1,    30,    31,    -1,    33,    88,    35,    -1,  1030,    -1,
-    93,    -1,    -1,    42,    73,    74,    75,    76,    77,    78,
-    79,    80,    81,    82,    83,    84,    55,    -1,    57,     3,
-     4,     5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,
-    14,    -1,  1030,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    80,    -1,    -1,    28,  1043,    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,  1069,    56,    57,    -1,    -1,  1074,    -1,    62,  1077,
-    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,  1087,
-    -1,  1089,    -1,    -1,   133,   134,    80,   136,    -1,    -1,
-    -1,   140,   141,    -1,    88,   144,    -1,   146,    -1,    93,
-   149,   150,   151,    -1,    -1,    -1,    -1,   156,    -1,  1117,
-    -1,    -1,    -1,    -1,  1122,  1123,   165,  1125,    -1,    -1,
-   169,    -1,    -1,    -1,    -1,    -1,   175,   176,  1170,  1171,
-  1172,  1173,  1174,    -1,    -1,    -1,  1178,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   193,   194,   195,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   203,    -1,    -1,    -1,    -1,  1201,
-  1202,  1203,  1170,  1171,  1172,  1173,  1174,    -1,    -1,    -1,
-  1178,    -1,    -1,   222,    -1,    -1,     1,  1185,     3,     4,
-     5,     6,     7,     8,     9,    -1,    -1,    -1,    -1,    14,
-    -1,    -1,    -1,  1201,  1202,  1203,   245,    -1,    -1,    -1,
-    -1,    -1,    -1,    28,    -1,    30,    31,    32,    -1,    -1,
-   259,    36,    37,    -1,  1222,    -1,    41,    -1,    -1,    -1,
-    45,    46,    -1,    48,     3,     4,     5,     6,    -1,    54,
-     9,    56,    57,    -1,    -1,    60,    -1,    62,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-    -1,    -1,    31,  1295,  1296,    80,  1298,    -1,    -1,    -1,
-    -1,    -1,    41,    88,    -1,    -1,    -1,    -1,    93,    -1,
-    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
-   329,    -1,    -1,    -1,   109,    -1,    -1,  1295,  1296,    -1,
-  1298,    70,    -1,    -1,    -1,    -1,    -1,   346,    -1,    -1,
-    -1,    80,    -1,    -1,    -1,   354,    -1,    -1,    -1,    88,
-   359,    -1,    -1,    -1,    93,  1323,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1334,  1335,  1336,    70,
-    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,    83,    84,   393,  1353,    -1,    -1,    -1,    -1,
-    -1,  1359,    -1,    -1,    -1,   404,    -1,    -1,    -1,     1,
+   174,   348,     4,   175,   401,   401,   176,   161,   715,   209,
+     4,    23,   126,     4,    80,   459,   303,   304,   156,    14,
+   354,   481,   621,   250,   714,    42,     4,   134,   690,   628,
+    35,  1386,    80,    35,   564,   354,   372,    42,   401,    55,
+    42,    35,    84,   697,    35,    42,   246,   859,    42,   336,
+   209,     4,    57,   217,   218,   133,   134,    35,   767,   218,
+   769,   439,   601,  1302,    42,   644,   454,    72,   777,    46,
+   124,   761,   133,  1476,  1475,   783,    11,  1312,    54,    84,
+    11,   789,    35,    88,  1319,    90,    42,    92,    83,    42,
+   149,   150,     1,    33,    42,   295,   144,  1477,     4,    76,
+     1,    60,   107,   108,   502,    47,    84,    59,     0,  1499,
+    54,   106,    37,    59,    11,    62,     4,     1,    62,   698,
+  1521,    59,    42,    74,    30,    31,    54,   354,    57,    35,
+  1520,   136,   137,     0,   139,    12,    42,    75,    33,    59,
+     9,    58,    83,    84,   355,   356,    74,    35,   348,    58,
+   109,    93,   169,    62,    42,   203,   108,    58,   136,   175,
+   165,    62,   622,   109,   169,    62,   108,   169,   165,   109,
+   558,   176,   169,   108,    58,   169,  1556,   108,    84,   155,
+    60,    98,    59,   136,   109,    62,    95,   165,   896,   536,
+  1580,   169,    61,   140,    95,   261,   407,   408,     4,     5,
+    47,    27,  1605,   305,   306,    31,  1561,   136,     4,   156,
+    12,   108,   165,   169,    62,    74,   169,     4,     5,   321,
+  1621,   169,   324,     7,   200,   327,    74,    59,   330,   109,
+   136,   108,   334,    60,    60,     4,   213,  1476,    64,    35,
+   342,     4,    48,   149,   150,  1480,    93,   176,   136,   169,
+    56,    57,   247,    37,   149,   150,   151,    59,   912,   165,
+    62,   915,    64,   169,    47,   212,    35,   345,   489,    56,
+    57,    59,    35,   220,    80,   937,   108,   165,     4,    42,
+    38,   169,   109,   109,   345,   392,   507,   193,   194,   209,
+   237,   296,    55,   447,    57,  1530,    54,   217,   218,   341,
+   195,   900,   956,   957,    59,    60,    25,   641,    27,    35,
+    93,    94,  1020,     3,     4,     5,     6,   680,    48,   858,
+   108,   485,   486,   328,  1032,   108,   246,   486,   716,   493,
+   384,   709,   710,    47,   670,    12,   341,     4,     5,    58,
+   737,   737,   506,    62,   349,   944,  1581,    47,    54,    47,
+    64,    41,   357,   358,  1205,  1206,    62,    14,  1066,   354,
+  1068,   525,    93,   341,    54,    22,    56,    57,    74,    93,
+    59,  1222,    60,   136,    60,   295,    95,   140,  1524,    93,
+   358,    48,    59,   610,    54,    62,   733,   403,     9,    56,
+    57,    12,   991,    93,     3,    93,   401,     6,    88,   404,
+    47,    93,   165,    47,    74,   358,   169,   401,    65,    47,
+   108,   941,   175,   176,   473,   474,    74,   861,    90,   108,
+    92,   109,    31,   401,   441,    54,    47,  1573,   348,   358,
+  1009,    25,    41,  1245,   645,   341,   441,   897,    59,   505,
+    61,    62,    74,    64,   441,    74,    93,    56,    57,    93,
+   552,   553,   358,    93,    75,    93,    77,     4,     5,   222,
+    60,    70,   467,   441,    58,   137,    54,   124,    62,    47,
+   358,    80,    93,    94,  1164,   479,    47,  1131,  1132,    88,
+    59,    60,    47,   487,    93,   405,    74,   108,   441,   467,
+   107,   148,   497,    64,    54,   401,  1347,     3,     4,     5,
+   505,    95,   449,   505,    54,  1356,  1357,    54,  1359,    56,
+    57,  1201,  1221,    62,    74,    93,    94,    25,   495,    62,
+    54,   441,    93,    70,    74,    74,   531,   505,    93,   534,
+   108,    74,   537,    80,   708,   441,   541,   542,   543,   544,
+   545,   938,   938,    47,    75,   492,    77,    94,    47,   554,
+    56,    57,   505,   441,  1153,    31,    47,     4,     5,   564,
+   602,   467,   567,  1375,   671,   485,   486,   473,   474,     4,
+     5,   678,   906,   493,    80,   938,   505,    33,   473,   474,
+   475,   238,   239,  1182,    62,    58,   506,   906,   799,    93,
+    94,   755,   980,   250,    93,   358,    74,   602,   109,   505,
+   678,    48,    93,    94,   108,   525,     4,     5,   808,    56,
+    57,    47,  1010,    74,  1012,   902,   621,   505,  1016,    54,
+    47,    56,    57,   628,   602,    47,    54,     3,     4,     5,
+     6,   647,    54,    80,     3,     4,     5,   632,    59,    60,
+   403,  1085,  1086,   621,  1334,  1105,     3,     4,     5,     6,
+   628,    58,    74,    93,  1505,  1506,    58,    93,    56,    57,
+    54,    47,    64,   320,    47,    41,    93,   679,   673,    54,
+   686,    93,   688,   689,    54,    47,    75,   108,   441,   906,
+    56,    57,   687,    47,    41,   357,   691,    56,    57,   107,
+   108,    48,    47,   149,   150,   151,   602,     4,     5,    56,
+    57,   767,   714,   769,    25,   362,    27,    93,    47,   775,
+    93,   777,   618,   619,   371,   621,   479,   733,    59,    60,
+   931,    93,   628,    80,   487,    64,   108,   384,   648,    93,
+    94,    88,   737,    94,  1178,    47,    11,    58,    93,   195,
+    47,    62,   505,  1187,  1188,    59,    60,    54,  1192,    56,
+    57,   109,    47,  1100,    93,    94,     4,     5,   774,   737,
+   108,     9,   767,    70,   769,   767,   904,   769,   870,   689,
+   775,    47,   777,    80,    95,   777,   108,    47,   783,   784,
+   785,    93,   787,    90,   789,    98,    93,    94,    47,   767,
+   964,   769,  1236,   770,   771,    54,   898,   899,    93,   777,
+  1198,  1199,  1200,   780,    60,   783,    54,    62,    56,    57,
+    93,   789,    47,   733,   767,    74,   769,    93,    94,    54,
+     4,     5,    70,    93,   777,   497,    58,     3,    62,    60,
+    62,   737,    80,   111,    93,   755,    59,    60,   767,    74,
+   769,   796,   797,   798,   501,   774,   775,    74,   777,  1060,
+  1061,  1062,   857,   108,    62,     4,     5,   862,    93,   531,
+     9,   767,    62,   769,    48,   979,    94,    12,     7,     8,
+     9,   777,    56,    57,   108,    14,    94,   783,   111,   767,
+  1587,   769,    27,   789,   647,   890,    31,  1331,   808,   777,
+    93,   896,    31,    59,    60,   900,    80,    36,    93,     4,
+     5,   949,    47,     4,     5,    54,    45,    56,    57,   566,
+   328,   906,    54,    59,    59,    60,    74,    62,   896,    64,
+    62,    70,   900,   686,   687,   688,   689,    44,  1372,    59,
+    60,    80,    74,   938,    74,   940,   941,    54,    54,   944,
+    57,    59,    60,    48,   938,    94,    62,    48,    93,    94,
+    27,    56,    57,   610,    31,    56,    57,   904,    74,    74,
+   938,    54,    74,   108,  1311,    54,   944,    59,    60,    62,
+   733,    31,    11,    62,   737,    80,     4,     5,  1044,    80,
+   109,    74,    59,    60,   108,    74,   991,  1053,  1101,  1102,
+   896,  1104,   898,   899,   900,    59,  1044,   108,    25,  1004,
+    27,   673,     8,     9,   767,  1107,   769,  1023,    14,  1397,
+   108,   774,   775,   991,   777,  1020,    74,   473,   474,   475,
+    48,   182,   679,   108,    54,  1413,    74,  1032,    56,    57,
+    36,    58,   938,   690,    74,    62,   942,   943,   944,    45,
+   108,    47,  1020,   109,    59,  1256,   464,   109,  1053,   944,
+   111,  1053,    80,   108,  1032,     3,     4,     5,   111,  1036,
+    75,  1066,    77,  1068,   721,  1042,  1043,    59,    95,  1046,
+  1047,    27,    64,  1050,    74,  1053,    74,    54,  1180,  1181,
+    74,   141,    74,    75,   108,   991,   146,    93,  1066,   111,
+  1068,  1096,  1151,  1152,  1023,   111,   991,   108,   108,    47,
+  1053,    58,    54,   108,  1109,     8,    54,  1155,    56,    57,
+   111,  1499,   784,   785,  1020,   787,   534,  1514,  1514,   537,
+    93,  1180,  1181,   541,  1053,    47,  1032,    64,    59,    93,
+     4,     5,  1520,   109,   194,    54,   554,  1309,    36,  1311,
+  1310,    25,    60,    27,    64,    93,    54,  1053,  1153,   567,
+  1216,    64,  1164,   571,    62,  1221,     3,     4,     5,  1547,
+  1066,   108,  1068,    64,   108,  1053,    74,  1611,     4,     5,
+  1175,  1518,    60,  1175,    58,  1153,    62,  1182,    62,   108,
+    54,   599,    56,    57,  1175,   108,    64,   605,     3,     4,
+     5,  1196,  1580,   108,   108,    64,    70,  1175,   258,    64,
+  1302,     3,     4,     5,  1182,   111,    80,    54,    44,    56,
+    57,    95,    75,  1601,   108,    30,  1221,   108,    54,  1221,
+    56,    57,  1175,   108,    75,   108,     1,   108,     3,     4,
+     5,     6,    75,     8,    75,    30,    31,    75,    33,    54,
+   108,    56,    57,  1221,   108,  1151,  1152,  1153,    62,    62,
+     3,     4,     5,     6,    56,    57,  1151,  1152,  1153,    59,
+  1023,    62,    57,   108,    59,   111,    41,   924,  1221,  1175,
+    65,     8,     9,    48,  1180,  1181,  1182,    14,   108,    54,
+   937,    56,    57,   108,    94,  1180,  1181,  1182,    41,   111,
+  1053,    88,  1221,  1309,    74,  1311,    47,  1302,   109,    36,
+  1302,   108,   108,    56,    57,  1310,   111,  1312,    45,    59,
+  1312,   109,   111,    88,  1319,  1221,   108,  1319,  1518,   108,
+   108,  1312,   108,  1328,  1302,    60,    64,    93,  1319,     3,
+     4,     5,    59,  1221,  1312,    88,    64,  1491,    59,    59,
+    62,  1319,    33,    59,   108,   108,   141,    74,    75,  1302,
+    77,   146,    93,    93,   149,   150,   151,    93,   418,  1312,
+    93,   421,     3,     4,     5,   109,  1319,     4,     5,   460,
+   109,    27,     9,   433,   108,    31,   467,  1354,  1355,   108,
+    54,   176,    56,    57,    58,   108,   111,   182,     8,    33,
+   108,  1311,  1494,  1495,  1568,   108,  1302,   108,   193,   194,
+   195,   108,   111,    59,    60,   109,  1312,    48,    64,   469,
+    47,   471,   108,  1319,   209,    56,    57,    54,   108,    56,
+    57,   108,   217,   218,   484,   108,    64,   108,    54,  1086,
+    88,   108,    90,    70,    92,  1494,  1495,  1109,     7,     8,
+     9,   532,   108,    80,    62,    14,  1423,   111,   866,    47,
+  1213,   108,    62,    90,   108,  1218,    93,    94,  1221,   150,
+   151,   108,    31,   258,    96,  1470,    62,    36,    60,    60,
+  1475,  1476,  1477,  1475,  1476,  1480,    45,     9,  1480,   137,
+    60,   139,   900,    16,  1475,   108,   108,   108,   944,  1480,
+    93,  1496,  1470,   108,   108,   108,   108,  1475,  1476,  1477,
+   108,   592,  1480,  1519,   195,    93,    60,   598,    60,  1514,
+    54,    64,     3,     4,     5,  1172,  1521,    93,   111,  1521,
+    93,  1178,  1475,  1476,    17,  1530,    60,  1480,  1530,  1424,
+  1521,    54,    60,   328,   108,   991,  1514,   108,    97,  1530,
+   107,    11,   108,  1521,   635,   108,  1309,  1310,  1311,    60,
+    60,  1556,  1530,     3,     4,     5,    60,     7,     8,     9,
+    59,    64,    93,   108,  1470,    56,    57,    58,  1521,  1475,
+  1476,  1477,  1549,    60,  1480,    11,  1581,  1530,  1556,  1581,
+    60,    31,     3,     4,     5,     6,    36,   108,  1494,  1495,
+  1581,     3,     4,     5,   108,     7,    11,   758,  1518,  1494,
+  1495,  1496,    60,  1581,     0,     0,    56,    57,  1514,   404,
+   405,     3,     4,     5,     6,  1521,  1621,     0,    30,  1621,
+    41,   170,     2,   418,  1530,    37,   421,    48,  1581,    35,
+  1621,  1411,   427,   428,   429,    56,    57,   328,   433,  1296,
+  1297,   938,    54,  1621,    56,    57,    38,    39,   671,    41,
+  1556,     3,     4,     5,   169,     3,     4,     5,     6,    80,
+   441,   319,    54,   165,    56,    57,   775,    88,  1621,    80,
+    81,    82,    83,    84,   469,  1581,   471,  1567,   473,   474,
+   475,  1164,   401,   478,   744,   745,    94,   747,   238,   484,
+   485,   486,   139,    41,   489,  1151,  1152,  1153,   493,   357,
+  1396,  1246,    54,  1621,    56,    57,    54,   924,    56,    57,
+   919,   298,   507,   721,    62,  1621,   243,  1201,  1334,  1053,
+  1218,   775,    70,   917,  1180,  1181,  1182,     3,     4,     5,
+   654,  1388,    80,   200,   345,   602,   124,   428,   429,   534,
+    88,  1601,   537,  1312,  1176,    93,  1587,  1597,   467,  1535,
+     3,     4,     5,  1410,  1411,  1599,  1519,   552,   553,   554,
+   999,  1328,    -1,    -1,  1182,   856,   857,     3,     4,     5,
+     6,   862,   567,     9,     3,     4,     5,     6,  1196,    -1,
+    56,    57,    -1,   474,   475,   876,    -1,   878,    -1,   880,
+    -1,    -1,    -1,    -1,    -1,    31,     3,     4,     5,    -1,
+    -1,   459,   460,    56,    57,    41,    -1,    -1,    -1,   467,
+    -1,    47,    41,    -1,  1232,  1233,  1234,  1235,    54,    48,
+    56,    57,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,
+    -1,  1488,    -1,   628,    70,   926,     3,     4,     5,   497,
+     7,     8,     9,   534,    80,    -1,   537,    -1,    -1,    56,
+    57,    80,    88,   648,    90,    -1,    -1,    93,    94,    88,
+    -1,    -1,   553,   554,  1025,  1026,    78,    79,    80,    81,
+    82,    83,    84,   531,   532,    -1,   567,  1295,    -1,    -1,
+    -1,   972,    -1,   943,    -1,    -1,    -1,    -1,    -1,    56,
+    57,  1052,   687,    -1,   689,   690,  1057,    -1,    -1,    -1,
+    -1,    -1,   621,     3,     4,     5,   564,    -1,   566,   628,
+    -1,   569,   570,    -1,   572,   573,   574,   575,   576,   577,
+   578,   579,   580,   581,   582,   583,   584,   585,   586,   587,
+   588,   589,   590,    -1,   592,    -1,    -1,   628,   733,    -1,
+   598,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,   744,
+   745,    -1,   747,    -1,    -1,  1373,    56,    57,    -1,    -1,
+   755,    -1,    -1,   758,    47,    -1,    -1,    -1,  1424,    -1,
+   628,    -1,    -1,     3,     4,     5,    -1,   635,    -1,    -1,
+   775,    -1,    -1,    -1,    -1,   193,   194,   195,  1406,    -1,
+    -1,    -1,     3,     4,     5,   753,     7,     8,     9,   657,
+   658,    -1,    -1,    86,    87,    -1,    -1,   802,    91,    92,
+    93,    94,     3,     4,     5,   673,    -1,    -1,   737,    -1,
+    31,    -1,    -1,    -1,   782,    36,    56,    57,    -1,    -1,
+   788,    -1,    -1,     3,     4,     5,     6,    -1,  1494,  1495,
+  1496,    -1,    -1,    54,    -1,    56,    57,    58,    80,    -1,
+  1211,  1212,  1470,  1214,  1215,    -1,  1217,    -1,  1476,  1477,
+    -1,    31,    -1,   721,   783,    56,    57,    -1,    -1,    -1,
+   789,    41,   104,    -1,    -1,  1166,    -1,  1168,  1496,  1170,
+    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,  1149,
+  1150,    -1,   103,   104,   105,    -1,    -1,  1157,    -1,    -1,
+    70,   133,    -1,   898,   899,   900,    -1,    -1,   766,    -1,
+    80,   802,   144,    -1,    -1,    -1,    -1,    -1,    88,    -1,
+    -1,    -1,    -1,    93,    -1,    -1,   784,   785,    -1,   787,
+    -1,    -1,    -1,   891,    -1,   893,    -1,    -1,  1556,    -1,
+    -1,    -1,   937,    -1,   802,    -1,    -1,   942,   943,   944,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1575,    -1,    -1,
+    -1,    -1,     4,     5,    -1,    -1,   824,     9,    -1,    -1,
+    -1,   203,    -1,    -1,    -1,    -1,  1267,   896,  1596,    -1,
+    -1,   900,    -1,  1344,  1345,    -1,    -1,  1605,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   991,    -1,   856,   857,
+    -1,    -1,    -1,   861,   862,    47,   238,    -1,   899,   900,
+  1270,  1271,    54,  1273,    56,    57,    -1,    -1,   876,   938,
+   878,    -1,   880,    -1,    -1,   944,    -1,    -1,    70,   261,
+  1025,  1026,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,
+    -1,     3,     4,     5,     6,    -1,    -1,     9,    90,    -1,
+    -1,    93,    94,   944,    -1,    -1,    -1,  1052,   916,    -1,
+    -1,   469,  1057,   471,    -1,   473,   474,   475,   926,    31,
+    -1,    -1,   991,    -1,    -1,    -1,   484,    -1,    -1,    41,
+    -1,    -1,    -1,   941,    -1,  1446,  1447,  1448,    -1,    -1,
+    -1,    -1,    54,    -1,    56,    57,   954,    -1,    -1,    -1,
+   991,  1020,    -1,    -1,    -1,    -1,    -1,  1065,    70,  1067,
+     7,     8,     9,  1032,   972,    -1,    -1,    14,    80,    -1,
+    -1,   353,     3,     4,     5,     6,    88,    -1,     9,    -1,
+    -1,    93,    -1,   991,    31,    -1,    -1,    -1,    -1,    36,
+    -1,  1502,  1503,    -1,    -1,    -1,    -1,  1066,    45,  1068,
+    31,    -1,    -1,    -1,  1149,  1150,  1151,  1152,  1153,    -1,
+    41,    -1,  1157,    60,  1122,    -1,    47,    -1,    -1,    -1,
+    -1,    -1,    -1,    54,    -1,    56,    57,  1035,    -1,   411,
+    -1,    -1,    -1,    -1,    -1,  1180,  1181,  1182,    -1,    70,
+    -1,    -1,    -1,    -1,     7,     8,     9,    -1,    -1,    80,
+    -1,    14,    -1,    -1,    -1,    -1,    -1,    88,    -1,    90,
+    -1,  1572,    93,    94,    -1,    -1,  1211,  1212,    31,  1214,
+  1215,    -1,  1217,    36,    -1,    -1,     4,  1085,  1086,    -1,
+    -1,  1089,    45,    -1,  1153,    -1,    14,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,  1202,    -1,    24,    60,    -1,  1207,
+    -1,  1109,    30,    31,    -1,    33,    -1,    35,    -1,    -1,
+    -1,  1152,  1153,  1182,    42,    -1,    -1,    -1,    -1,   501,
+    -1,    -1,    -1,    -1,    -1,  1270,  1271,    55,  1273,    57,
+    -1,    -1,   460,    -1,    -1,    -1,    -1,    65,    -1,   467,
+  1181,  1182,    -1,    -1,    72,    -1,   528,    -1,    -1,    -1,
+    -1,    -1,  1260,    -1,    -1,    83,    84,    -1,  1166,    -1,
+  1168,    -1,  1170,    -1,    -1,  1310,  1311,    -1,    -1,    -1,
+  1178,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   106,  1187,
+  1188,    -1,    -1,    -1,  1192,    -1,   744,   745,    -1,   747,
+    -1,     3,     4,     5,     6,    -1,    -1,     9,    -1,  1344,
+  1345,  1209,  1210,    -1,   532,    -1,   134,    -1,   136,    -1,
+    -1,    -1,   140,   141,    -1,    -1,   774,   145,   146,    31,
+    -1,   149,   150,   151,    -1,    -1,    -1,    -1,  1236,    41,
+    -1,    -1,    -1,   615,    -1,    47,    -1,   165,    -1,    -1,
+    -1,   169,    54,    -1,    56,    57,    -1,   175,   176,   631,
+    -1,     3,     4,     5,     6,  1363,  1364,    -1,    70,  1267,
+    -1,    -1,    -1,    -1,   592,   193,   194,   195,    80,    -1,
+   598,    -1,  1380,    -1,    -1,    -1,    88,    -1,    90,  1424,
+    -1,    93,    94,  1291,    -1,    -1,    -1,    -1,    -1,    41,
+    -1,    -1,    -1,    -1,   222,    -1,    48,    -1,    -1,    -1,
+   628,  1446,  1447,  1448,    56,    57,    -1,   635,    -1,    -1,
+    -1,   239,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   247,
+    -1,    -1,    -1,  1331,    -1,    -1,    -1,    -1,    80,    -1,
+   258,  1439,  1440,    -1,    -1,    -1,    88,    -1,     3,     4,
+     5,     6,  1350,    -1,     9,    -1,    -1,  1455,  1456,  1494,
+  1495,  1496,    -1,    -1,    -1,    -1,    -1,  1502,  1503,    -1,
+    -1,    -1,    -1,    -1,  1372,    -1,    31,    -1,   296,   297,
+    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
+    -1,    -1,    47,  1424,   942,   943,   944,    -1,    -1,    54,
+    -1,    56,    57,    -1,    -1,    -1,     4,     5,    -1,    -1,
+    -1,     9,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   341,    -1,    80,  1424,   345,    -1,   347,
+   348,   349,    -1,    88,    -1,    90,    -1,  1572,    93,    94,
+   358,    -1,    -1,   991,    -1,    -1,  1444,  1445,    -1,    47,
+    -1,     3,     4,     5,     6,  1514,    54,     9,    56,    57,
+     3,     4,     5,     6,  1495,  1496,     9,    -1,    -1,    82,
+    -1,    -1,    70,    -1,   392,  1023,    -1,    -1,    -1,    31,
+  1478,    -1,    80,   401,   802,   403,   404,    -1,    31,    41,
+    -1,    -1,    90,    -1,    -1,    93,    94,    -1,    41,    -1,
+   418,    -1,    54,   421,    56,    57,    -1,    -1,    -1,    -1,
+  1508,    54,    -1,    56,    57,   433,    -1,    -1,    70,    -1,
+    -1,    -1,    -1,   441,    -1,    -1,    -1,    70,    80,     3,
+     4,     5,     6,   905,    -1,   907,    88,    80,   856,   857,
+    -1,    93,    -1,    -1,   862,    88,   159,    -1,    -1,    -1,
+    93,   469,    -1,   471,    -1,   473,   474,   475,   876,    -1,
+   878,   479,   880,    -1,    -1,    -1,   484,    41,    -1,   487,
+    -1,    -1,    -1,    47,    -1,    -1,    -1,   949,   191,    -1,
+    54,    -1,    56,    57,    -1,    -1,    -1,   505,    -1,    -1,
+    -1,   204,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,
+    -1,  1149,  1150,  1151,  1152,  1153,    80,    -1,   926,  1157,
+    -1,    -1,    -1,  1611,    88,    -1,    90,    -1,    -1,    93,
+    94,    -1,    -1,    -1,   542,   543,   544,   545,    -1,    -1,
+    -1,    -1,  1180,  1181,  1182,    -1,    -1,    -1,    -1,    -1,
     -1,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
-   419,    -1,    14,   422,    -1,    -1,    -1,    -1,    -1,   428,
-   429,   430,    -1,    -1,    -1,   434,    28,    -1,    30,    31,
-    32,    -1,    -1,   442,    36,    37,    -1,    -1,    -1,    41,
+    12,    -1,    14,    -1,   972,    -1,    -1,    -1,    -1,     3,
+     4,     5,     6,    -1,    -1,  1213,    28,    -1,    30,    31,
+    -1,    -1,  1044,   991,    36,    -1,    -1,    -1,    -1,    41,
+    -1,    -1,    -1,    45,   602,    47,   604,    -1,    -1,    -1,
+    -1,    -1,    54,    -1,    56,    57,    -1,    41,   616,    -1,
+   618,   619,    -1,   621,    48,    -1,    -1,    -1,    70,    -1,
+   628,    -1,    56,    57,   632,    -1,    -1,    -1,    80,    -1,
+    -1,    -1,  1270,  1271,    -1,  1273,    88,    -1,    90,   647,
+    -1,    93,    94,    -1,    -1,    -1,    80,    -1,    -1,    -1,
+     3,     4,     5,     6,    88,    -1,     3,     4,     5,     6,
+     7,     8,     9,   671,    -1,    -1,  1128,    14,    -1,    -1,
+   678,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   686,   687,
+   688,   689,   690,   691,    31,    -1,    -1,    -1,    41,    36,
+    -1,    -1,    -1,  1155,    41,    48,    -1,    -1,    45,    -1,
+    47,    -1,    -1,    56,    57,    -1,    -1,    54,    -1,    56,
+    57,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
+     6,    -1,    -1,    70,    -1,   733,    -1,    -1,    -1,   737,
+    -1,    -1,    -1,    80,    -1,    88,   744,   745,    -1,   747,
+    -1,    88,    -1,    90,    -1,    31,    93,    94,    -1,    -1,
+    -1,    -1,    -1,    -1,  1216,    41,   764,    -1,  1166,   767,
+  1168,   769,  1170,    -1,    -1,    -1,   774,   775,    54,   777,
+    56,    57,    -1,    -1,   477,   783,    -1,    -1,    -1,   482,
+    -1,   789,    -1,    -1,    70,    -1,  1424,    -1,   796,   797,
+   798,    -1,    -1,    -1,    80,    -1,     3,     4,     5,     6,
+   808,    -1,    88,    -1,    -1,   508,    -1,    93,    -1,     4,
+    -1,   514,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    14,
+    -1,    -1,    -1,   526,   527,    -1,   529,    -1,    23,    24,
+    -1,    -1,    -1,    -1,    41,    30,    31,    -1,    33,    -1,
+    35,    48,    -1,    -1,    -1,    -1,    -1,    42,    -1,    56,
+    57,    -1,    -1,    -1,    -1,    -1,  1494,  1495,  1496,  1267,
+    55,    -1,    57,     3,     4,     5,     6,    -1,    -1,    -1,
+    65,    -1,    -1,   881,    -1,   883,    -1,    72,    -1,    -1,
+    -1,    88,   890,    -1,    -1,    -1,   894,    -1,   896,    84,
+   898,   899,   900,    -1,    -1,    -1,    -1,    -1,   906,    -1,
+    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,
+    -1,    -1,     3,     4,     5,     6,    56,    57,     9,    -1,
+    -1,   624,   625,    -1,    -1,    -1,   629,   347,   348,   349,
+   938,    -1,   940,    -1,   942,   943,   944,    -1,    -1,    -1,
+    31,   136,    -1,    -1,    -1,   140,   141,    -1,    88,    -1,
+    41,   146,    -1,    -1,   149,   150,   151,    -1,    -1,    -1,
+    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,
+   165,    -1,    -1,    -1,   169,    -1,    -1,    -1,    -1,    70,
+   175,   176,    -1,   991,    -1,    -1,    -1,    -1,    -1,    80,
+    -1,    -1,    -1,    -1,    -1,    -1,  1004,    88,   193,   194,
+   195,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,     4,
+     5,    -1,  1020,     8,     9,  1023,  1424,    -1,    -1,    14,
+    -1,    -1,    -1,    -1,  1032,    -1,    -1,   222,    -1,    -1,
+    -1,    -1,    -1,    28,    -1,    30,    -1,  1045,    -1,    -1,
+    -1,    36,    -1,    -1,    -1,  1053,    -1,    -1,    -1,    -1,
+    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1066,    54,
+  1068,    56,    57,   258,    -1,    -1,    -1,    -1,     1,    -1,
+     3,     4,     5,     6,     7,     8,     9,    -1,    -1,    -1,
+    -1,    14,    -1,    -1,    -1,    -1,    -1,   790,  1096,   792,
+    -1,    -1,    -1,  1101,  1102,    28,  1104,    30,    31,    32,
+    -1,   296,   297,    36,    37,    -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,   347,   348,   349,    -1,    -1,    -1,    70,    -1,    -1,
+    -1,  1149,  1150,  1151,  1152,  1153,   341,    80,    -1,  1157,
+   345,    -1,   347,   348,   349,    88,    -1,    -1,    -1,   354,
+    93,   864,   865,   358,   867,     3,     4,     5,     6,    -1,
+    -1,     9,  1180,  1181,  1182,    -1,   109,    -1,    -1,    -1,
+    -1,    -1,     3,     4,     5,     6,    -1,    -1,    -1,    -1,
+    -1,    -1,   895,    31,    -1,    -1,    -1,   392,   618,   619,
+    -1,    -1,    -1,    41,    -1,  1213,   401,    -1,   403,   404,
+  1218,    -1,    -1,  1221,    -1,    -1,    54,    -1,    56,    57,
+    41,    -1,    -1,   418,    -1,    -1,   421,    -1,    -1,    -1,
+    -1,    -1,    70,    54,    -1,    56,    57,    -1,   433,    60,
+    -1,    62,    80,   946,    -1,    -1,   441,    -1,    -1,    70,
+    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    80,
+    -1,    -1,  1270,  1271,    -1,  1273,   686,    88,   688,   689,
+    -1,   691,    93,    -1,   469,    -1,   471,    -1,   473,   474,
+   475,    -1,    -1,    -1,   479,    -1,    -1,    -1,    -1,   484,
+    -1,    -1,   487,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,  1309,  1310,  1311,    -1,    -1,    -1,    -1,    -1,    -1,
+   505,    -1,    -1,   733,    -1,    -1,  1019,    -1,    -1,    -1,
+  1328,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1031,    -1,
+    -1,    -1,     4,     5,    -1,     7,     8,     9,    -1,    -1,
+    12,    -1,    14,    -1,    -1,    -1,    -1,   542,   543,   544,
+   545,    -1,    -1,    -1,    -1,    -1,    28,    -1,    30,    31,
+    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    45,    -1,    47,    -1,     3,     4,     5,
+     6,    -1,    54,    -1,    56,    57,    -1,    -1,   808,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    70,    -1,
+    -1,    -1,   618,   619,    -1,   621,    -1,   602,    80,   604,
+    -1,    -1,   628,    -1,  1117,    41,  1424,    -1,    90,    -1,
+    -1,    93,    94,   618,   619,    -1,   621,    -1,    54,    -1,
+    56,    57,    -1,   628,    60,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    70,    -1,   641,    -1,    -1,    -1,
+    -1,    -1,   647,  1156,    80,    -1,    -1,    -1,    -1,    -1,
+    -1,   881,    88,   883,    -1,    -1,    -1,    93,    -1,    -1,
+   686,    -1,   688,   689,   894,   691,   671,    -1,   898,   899,
+     3,     4,     5,     6,   679,    -1,  1494,  1495,  1496,    -1,
+    -1,   686,   687,   688,   689,   690,   691,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,  1514,    -1,    31,    -1,
+    -1,  1519,    -1,    -1,    -1,    -1,    -1,   733,    41,   714,
+  1223,    -1,   942,   943,  1227,    -1,    -1,    -1,    -1,    -1,
+    -1,    54,    -1,    56,    57,    -1,    -1,    -1,   733,    -1,
+    -1,    -1,   737,    -1,    -1,    -1,    -1,    70,    -1,   744,
+   745,    -1,   747,    -1,    -1,    -1,    -1,    80,    -1,  1262,
+    -1,    -1,    -1,    -1,    -1,    88,   761,   107,   108,   764,
+    93,    -1,   767,    -1,   769,    -1,    -1,    -1,    -1,   774,
+   775,    -1,   777,    -1,    -1,    -1,    -1,    -1,   783,    -1,
+    -1,    -1,   808,    -1,   789,    -1,    -1,    -1,    -1,    -1,
+    -1,   796,   797,   798,     3,     4,     5,     6,     7,     8,
+     9,    -1,    -1,   808,    -1,    14,    -1,    -1,    -1,    -1,
+    -1,    -1,     4,    -1,    -1,    -1,    -1,    -1,    -1,    28,
+    -1,    30,    31,    -1,    -1,    -1,  1339,    36,    -1,    -1,
+  1343,    -1,    41,    -1,    -1,    -1,    45,    -1,    30,    31,
+    -1,    33,    -1,    35,    -1,    54,    -1,    56,    57,    -1,
+    42,    60,  1365,  1366,    -1,   881,    -1,   883,    -1,    -1,
+    -1,    70,    -1,    55,    -1,    57,    -1,    -1,   894,    -1,
+    -1,    80,   898,   899,   900,    -1,   881,    -1,   883,    88,
+    -1,    -1,    -1,    -1,    93,   890,    -1,    -1,    80,   894,
+    -1,   896,    -1,   898,   899,   900,    -1,    -1,    -1,    -1,
+    -1,   906,     3,     4,     5,     6,    -1,    -1,     9,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,   942,   943,   944,  1149,
+  1150,  1151,  1152,    -1,    -1,    -1,    -1,  1157,    -1,    -1,
+    31,    -1,    -1,   938,    -1,   940,    -1,   942,   943,   944,
+    41,   133,   134,    -1,   136,    -1,    -1,    -1,   140,   141,
+  1180,  1181,   144,    54,   146,    56,    57,   149,   150,   151,
+    -1,    -1,    -1,    -1,   156,   991,    -1,    -1,    -1,    70,
+    -1,    -1,    -1,   165,    -1,    -1,    -1,   169,   328,    80,
+    -1,    -1,    -1,   175,   176,    -1,   991,    88,    -1,    -1,
+    -1,    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,  1004,
+    -1,   193,   194,   195,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   203,    -1,    -1,    -1,  1020,    -1,    -1,  1023,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1032,    -1,     1,
+   222,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
+  1270,  1271,    14,  1273,    -1,    -1,    -1,    -1,  1053,    -1,
+    -1,   401,    -1,    -1,    -1,    -1,    28,    -1,    30,    31,
+    32,  1066,    -1,  1068,    36,    37,   258,    -1,    -1,    41,
     -1,    -1,    -1,    45,    46,    -1,    48,    -1,    -1,    -1,
     -1,    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,
-    62,   470,    -1,   472,    -1,   474,   475,   476,    70,    -1,
-  1438,   480,    -1,    -1,    -1,    -1,   485,    -1,    80,   488,
-    -1,    -1,     3,     4,     5,     6,    88,    -1,    -1,    -1,
-    -1,    93,    -1,     4,     5,    -1,    -1,     8,     9,    -1,
-    -1,    -1,   511,    14,   513,    -1,    -1,   109,    -1,   518,
-   519,    -1,   521,    -1,    -1,    -1,    -1,    28,    -1,    30,
-    41,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    54,    45,    56,    57,  1505,  1506,  1507,
-    -1,    62,    -1,    54,   553,    56,    57,   556,    -1,    70,
-    -1,    -1,    -1,  1521,    -1,    -1,    -1,    -1,  1526,    80,
-    -1,    -1,   571,   572,   573,    -1,    -1,    88,    -1,     4,
-    -1,    -1,    93,    -1,    -1,    -1,    -1,   586,    -1,    -1,
-    -1,     3,     4,     5,     6,    -1,     1,     9,     3,     4,
-     5,     6,     7,     8,     9,    30,    31,    -1,    33,    14,
-    35,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,    31,
-    -1,    -1,    27,    28,    -1,    30,    31,    32,    -1,    41,
-    55,    36,    57,    -1,    -1,   634,    41,    -1,    -1,    44,
-    45,    46,    54,    48,    56,    57,    -1,    -1,   647,    54,
-    -1,    56,    57,    -1,    -1,    60,    -1,    -1,    70,    -1,
-    -1,    -1,    -1,    -1,    -1,    70,    -1,   666,    80,    -1,
-    -1,    -1,    -1,    -1,    -1,    80,    88,    -1,    -1,    -1,
-    -1,    93,    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,
-    -1,   690,    -1,    98,    -1,    -1,    -1,    33,   697,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   705,   706,   707,   708,
-    -1,   136,    -1,    -1,    -1,   140,   141,    -1,    -1,    55,
-    -1,   146,    -1,    -1,   149,   150,   151,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,    -1,
-   165,    -1,    -1,    -1,   169,     3,     4,     5,     6,    -1,
-   175,   176,    -1,   752,    -1,    -1,    -1,   756,    -1,    -1,
-    -1,    -1,    -1,    -1,   763,   764,    -1,   766,   193,   194,
-   195,    -1,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    41,    -1,    54,   785,    56,    57,    -1,
-    -1,    60,    -1,    62,    -1,    -1,    54,   222,    56,    57,
-    -1,    70,    60,    -1,    -1,    -1,    -1,   806,    -1,    -1,
-    -1,    80,    70,   149,   150,   151,   815,    -1,    -1,    88,
-   245,    -1,    80,    -1,    93,    -1,    -1,    -1,    -1,    -1,
-    88,    -1,    -1,    -1,   259,    93,    -1,    -1,    -1,   175,
-    -1,     1,   841,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    12,    13,    14,    -1,    -1,   193,   194,   195,
-    -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,   222,    -1,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    -1,    -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,    -1,    86,    87,    88,    -1,
-   355,    -1,    -1,    93,   359,    -1,    -1,    -1,   937,   938,
-   939,    -1,    -1,    -1,   943,   944,    -1,    -1,   108,    -1,
-   110,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    -1,    -1,   298,    -1,    14,    72,    73,    74,    75,    76,
-    77,    78,    79,    80,    81,    82,    83,    84,    28,   404,
-    30,    31,   981,   982,   983,    -1,    36,    -1,    -1,   988,
-    -1,    41,    -1,    -1,   419,    45,    -1,   422,    -1,    -1,
-    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,   434,
-    60,    -1,   348,   349,   350,    -1,    -1,   442,    -1,    -1,
-    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    80,  1030,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,
-    -1,    -1,    -1,    93,    -1,   470,    -1,   472,    -1,   474,
-   475,   476,    -1,    -1,    -1,   480,    -1,    -1,    -1,    -1,
-   485,    -1,    -1,   488,    -1,    -1,    -1,    -1,   404,    -1,
-  1069,    -1,    -1,    -1,    -1,  1074,    -1,    -1,  1077,     3,
-     4,     5,     6,     7,     8,     9,   511,    -1,   513,    -1,
-    14,    -1,    -1,   518,   519,    -1,   521,    -1,    -1,    -1,
-    -1,    -1,    -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,   470,    -1,   472,    -1,   474,   475,
-   476,    -1,    -1,    -1,   480,    -1,    70,    -1,    -1,   485,
-  1149,    -1,   488,    -1,    -1,    -1,    80,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,
-    -1,  1170,  1171,  1172,  1173,  1174,    -1,  1176,    -1,  1178,
-    -1,    -1,   518,    -1,     1,    -1,     3,     4,     5,     6,
-    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
-    -1,    -1,  1201,  1202,  1203,    -1,    -1,    -1,    -1,    -1,
-   635,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
-    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
-    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,   666,    -1,    -1,    61,    62,    -1,    -1,    -1,    -1,
-    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    78,    79,    80,    -1,    -1,    55,    -1,    -1,    86,
-    87,    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,
-   705,   706,   707,   708,    -1,    -1,    -1,   623,    -1,    -1,
-    -1,    80,    -1,   110,    83,    -1,  1295,  1296,    -1,  1298,
-    -1,   637,   638,    -1,   640,    -1,    -1,    -1,    -1,    -1,
-    -1,   647,    -1,    -1,    -1,   104,    -1,   106,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   752,    -1,    -1,
-   666,   756,    -1,    -1,    -1,  1334,  1335,  1336,   763,   764,
-    -1,   766,    67,    68,    69,    70,    71,    72,    73,    74,
-    75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-   785,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   705,
-    -1,   707,   708,    -1,   710,    -1,    -1,    -1,    -1,    -1,
-    -1,     3,     4,     5,     6,    -1,   175,     9,    -1,    -1,
-   815,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   193,   194,   195,    -1,    -1,    31,
-    -1,    -1,    -1,    -1,   203,    -1,   752,    -1,    -1,    41,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   763,   764,    -1,
-   766,    -1,    54,   222,    56,    57,    -1,    -1,    -1,  1438,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    70,   785,
-    -1,     3,     4,     5,     6,     7,     8,     9,    80,   248,
-    12,    -1,    14,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-    -1,    93,    -1,   262,    -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,   835,
-   836,   837,    54,    -1,    56,    57,  1505,  1506,  1507,    -1,
-    -1,   847,    -1,    -1,    -1,    -1,    -1,    -1,    70,    -1,
-   945,    -1,    -1,    -1,    -1,    -1,    -1,  1526,    80,    -1,
+    62,  1096,    -1,    -1,    -1,    -1,  1101,  1102,    70,  1104,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    88,   467,    -1,    -1,
+    -1,    93,    -1,  1149,  1150,  1151,  1152,  1153,    -1,    -1,
+    -1,  1157,    -1,    -1,    -1,    -1,   328,   109,    -1,    -1,
+    -1,    -1,    -1,    -1,  1149,  1150,  1151,  1152,  1153,    -1,
+    -1,    -1,  1157,   345,  1180,  1181,  1182,    -1,    -1,  1164,
+    -1,   353,    -1,    -1,    -1,    -1,   358,    -1,    -1,    -1,
+    -1,     3,     4,     5,     6,  1180,  1181,  1182,    -1,    -1,
+    -1,    -1,    -1,    -1,   534,    -1,    -1,   537,    -1,    -1,
+    -1,   541,   542,   543,   544,   545,  1201,    -1,    -1,    -1,
+   392,    -1,    -1,    -1,   554,    -1,    -1,    -1,  1213,    41,
+    -1,   403,    -1,  1218,    -1,    -1,  1221,   567,    -1,    -1,
+    -1,    -1,    54,    -1,    56,    57,   418,    -1,    -1,   421,
+    62,    -1,    -1,    -1,    -1,   427,   428,   429,    70,    -1,
+    -1,   433,    -1,    -1,  1270,  1271,    -1,  1273,    80,   441,
     -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-    -1,    93,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   981,   982,   983,    -1,
-    -1,    -1,    -1,    -1,    -1,   354,   355,    -1,    -1,    -1,
-    -1,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
-    -1,    -1,    14,    -1,   920,    -1,   922,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    28,   933,    30,    31,
-    -1,   937,   938,   939,    36,  1030,    -1,    -1,    -1,    41,
-    -1,    -1,    -1,    45,    -1,   404,    -1,    -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,  1069,   981,   982,   983,    80,  1074,
-    -1,    -1,  1077,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-    -1,    93,    -1,    -1,    -1,     3,     4,     5,     6,     7,
-     8,     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,
-    -1,   470,    -1,   472,    -1,   474,   475,   476,    -1,    -1,
-    28,   480,    30,    31,  1030,    -1,   485,    -1,    36,   488,
-    -1,    -1,    -1,    41,    -1,    -1,    -1,    45,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,
-    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   518,
-    23,    24,    70,  1069,    -1,    -1,    -1,    30,    31,    -1,
-    33,    12,    80,    -1,    -1,  1170,  1171,  1172,  1173,  1174,
-    88,    -1,    -1,  1178,    -1,    93,    69,    70,    71,    72,
+    -1,    93,    -1,    -1,    -1,  1270,  1271,    -1,  1273,    -1,
+    -1,   621,    -1,    -1,    -1,    -1,    -1,   469,   628,   471,
+    -1,   473,   474,   475,     4,     5,    -1,   479,     8,     9,
+    -1,    -1,   484,  1298,    14,   487,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,  1309,  1310,  1311,    -1,    28,    -1,
+    30,    -1,     4,   505,    -1,    -1,    36,    -1,    -1,    -1,
+    -1,    -1,    -1,  1328,    -1,    45,    -1,    -1,    -1,  1334,
+    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    30,    31,
+    -1,    33,   534,    35,    -1,   537,    -1,    -1,    -1,    -1,
+    42,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
+   552,   553,   554,    55,    14,    57,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    93,    -1,   567,    -1,    -1,    28,    -1,
+    30,    31,    32,    -1,    -1,    -1,    36,   737,    -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,  1424,
+    70,    -1,    -1,   615,    -1,    -1,    -1,    -1,    -1,    -1,
+    80,    -1,    -1,   783,    -1,    -1,   628,    -1,    88,   789,
+    -1,    -1,    -1,    93,   136,    33,    -1,    -1,   140,   141,
+    -1,    -1,    -1,    -1,   146,   647,    -1,   149,   150,   151,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,    -1,
+    -1,    -1,    -1,   165,    -1,    -1,    -1,   169,    -1,   671,
+    -1,    -1,    -1,   175,   176,    -1,   678,    -1,    -1,  1494,
+  1495,  1496,    -1,    -1,   686,   687,   688,   689,    -1,    -1,
+    -1,   193,   194,   195,    -1,    -1,    -1,   857,    -1,  1514,
+    -1,    -1,    -1,    -1,  1519,    -1,    -1,    -1,    -1,     3,
+     4,     5,     6,    -1,    -1,     9,    -1,    -1,    -1,    -1,
+   222,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   890,   733,    -1,    -1,    -1,   737,   896,    31,    -1,    -1,
+   900,    -1,   744,   745,    -1,   747,    -1,    41,    -1,    -1,
+    -1,   149,   150,   151,    -1,    -1,   258,    -1,    -1,    -1,
+    54,    -1,    56,    57,    -1,   767,    -1,   769,    -1,    31,
+    -1,    -1,   774,   775,    -1,   777,    70,   175,   938,    -1,
+   940,    -1,    -1,    -1,   944,    -1,    80,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    88,   193,   194,   195,    -1,    93,
+   802,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,    -1,   222,    -1,    -1,    -1,    -1,    -1,
+    -1,   991,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
+     6,     7,     8,     9,  1004,    -1,    -1,    -1,    14,    -1,
+    -1,    -1,   354,    -1,    -1,    -1,   358,    -1,    -1,    -1,
+  1020,    27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,
+    36,    -1,  1032,    -1,    -1,    41,    -1,    -1,    44,    45,
+    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    -1,
+    56,    57,    -1,    -1,    60,    -1,   898,   899,   900,   297,
+    -1,   403,   904,   905,    70,    -1,  1066,    -1,  1068,    -1,
+    -1,    -1,    -1,    -1,    80,    -1,   418,    -1,    -1,   421,
+    -1,    -1,    88,    -1,    -1,    -1,    -1,    93,    -1,    -1,
+    -1,   433,    98,    -1,    -1,    -1,  1096,    -1,    -1,   441,
+   942,   943,   944,    -1,    -1,    -1,    -1,   949,    -1,   347,
+   348,   349,    -1,     3,     4,     5,     6,     7,     8,     9,
+     3,     4,     5,     6,    14,    -1,     9,   469,    -1,   471,
+    -1,   473,   474,   475,    -1,    -1,    -1,   479,    28,    -1,
+    30,    31,   484,    -1,    -1,   487,    36,    -1,    31,   991,
+    -1,    41,    -1,  1153,    -1,    45,    -1,    47,    41,    -1,
+    -1,    -1,    -1,   505,    54,   403,    56,    57,    -1,    -1,
+    -1,    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -1,
+    70,  1023,  1182,    -1,    -1,    -1,    -1,    70,    -1,    -1,
+    80,    -1,    -1,    -1,    -1,    -1,  1196,    80,    88,    -1,
+    90,    -1,  1044,    93,    94,    88,    -1,    -1,    -1,    -1,
+    93,  1053,     3,     4,     5,     6,     7,     8,     9,    -1,
+    -1,    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   469,    -1,   471,    -1,   473,   474,   475,    -1,    -1,
+    31,   479,    -1,    -1,    -1,    36,   484,    -1,    -1,   487,
+    41,    -1,    -1,    -1,    45,    -1,    47,    -1,    -1,    -1,
+    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,   616,    -1,    -1,    -1,    -1,    70,
+    -1,    -1,     3,     4,     5,     6,  1128,    -1,    -1,    80,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    90,
+    -1,    -1,    93,    94,    -1,   647,    -1,  1149,  1150,  1151,
+  1152,  1153,    -1,  1155,    -1,  1157,    -1,    -1,    -1,    -1,
+    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1328,    -1,
+    -1,    -1,    -1,    54,    -1,    56,    57,    -1,  1180,  1181,
+  1182,    62,    -1,    -1,   686,   687,   688,   689,    -1,    70,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,
+    -1,    -1,    -1,    -1,    -1,    -1,   604,    88,    -1,    -1,
+    -1,  1213,    93,    55,    -1,    -1,  1218,    -1,    -1,  1221,
+   618,   619,    -1,   621,    -1,     3,     4,     5,     6,    -1,
+   628,   733,    -1,    -1,    -1,   737,    -1,    -1,    80,    -1,
+    -1,    83,   744,   745,    -1,   747,    -1,    -1,    -1,   647,
     73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-    83,    84,    65,    -1,    -1,    -1,  1201,  1202,  1203,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1122,  1123,    -1,  1125,
+    83,    84,   104,    41,   106,   767,    -1,   769,  1270,  1271,
+    -1,  1273,   774,   775,    -1,   777,    54,    -1,    56,    57,
+    -1,    -1,    60,    -1,    -1,    -1,    -1,    -1,   686,    -1,
+   688,   689,    70,   691,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    80,    -1,    -1,    -1,    -1,  1309,  1310,  1311,
+    88,    -1,    -1,    -1,    -1,    93,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    84,   175,    -1,   733,  1496,     1,    -1,     3,
+     4,     5,     6,     7,     8,     9,   744,   745,    -1,   747,
+    14,   193,   194,   195,  1514,    -1,    -1,    -1,    -1,    -1,
+    -1,   203,    -1,    -1,    28,    -1,    30,    31,    32,    -1,
+    -1,    -1,    36,    -1,    -1,    -1,   774,    41,    -1,    -1,
+   222,    45,    -1,    -1,    48,     3,     4,     5,     6,    -1,
+    54,    -1,    56,    57,    -1,    -1,    -1,    -1,   796,   797,
+   798,    -1,    -1,    -1,   906,   247,    70,    -1,    -1,    -1,
+   808,    -1,    -1,    -1,    -1,    -1,    80,    -1,    -1,   261,
+    -1,    -1,  1424,    41,    88,    -1,    -1,     4,     5,    93,
+    -1,     8,     9,    -1,    98,    -1,    54,    14,    56,    57,
+   942,   943,   944,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    28,    70,    30,    -1,    -1,    -1,    -1,    -1,    36,
+    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,    45,    -1,
+    88,    -1,    -1,    -1,    -1,    93,    -1,    54,    -1,    56,
+    57,    58,    -1,   881,    -1,   883,    -1,    -1,    -1,   991,
+    -1,    -1,  1494,  1495,  1496,    -1,   894,    -1,    -1,    -1,
+   898,   899,   900,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   353,   354,    -1,    -1,    -1,    93,  1519,    -1,    -1,
+    -1,  1023,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
+     6,     7,     8,     9,    10,    11,    -1,    13,    14,    -1,
+    -1,    -1,    -1,    -1,   942,   943,   944,    -1,    -1,    -1,
+    -1,  1053,    28,    29,    30,    31,    32,    -1,    34,    35,
+    36,   403,    38,    39,    40,    41,    42,    43,    -1,    45,
+    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
+    56,    57,    58,    -1,    60,    61,    -1,    -1,    -1,    -1,
+    -1,    67,    -1,   991,    70,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    78,    79,    80,    14,    -1,    -1,    -1,    -1,
+    86,    87,    88,    -1,    23,    24,    -1,    93,    -1,    -1,
+    -1,    30,    31,    -1,    33,  1023,    -1,   469,    -1,   471,
+    -1,   473,   474,   475,   110,    -1,    -1,   479,    -1,    -1,
+    -1,    -1,   484,    -1,    -1,   487,    -1,  1149,  1150,  1151,
+  1152,  1153,    -1,    -1,    -1,  1157,    65,     4,     5,    -1,
+    -1,     8,     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1180,  1181,
+  1182,    28,    -1,    30,    -1,    -1,    -1,    -1,    -1,    36,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    -1,
+    47,    -1,    -1,  1101,  1102,    -1,  1104,    54,    -1,    56,
+    57,  1213,    -1,    -1,    -1,   124,  1218,   126,    -1,  1221,
+    -1,    -1,    -1,    70,   133,   134,    -1,    -1,    -1,    -1,
+    -1,   140,   141,    80,    -1,   144,   145,   146,    -1,   148,
+   149,   150,   151,    90,    -1,    -1,    93,    94,    -1,    -1,
+    -1,  1149,  1150,  1151,  1152,  1153,    -1,    -1,    -1,  1157,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1270,  1271,
+    -1,  1273,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,  1180,  1181,  1182,    -1,    -1,    -1,    -1,   631,
+   632,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+    80,    81,    82,    83,    84,   647,    -1,  1309,  1310,  1311,
+    -1,    -1,    -1,    -1,    -1,  1213,    -1,    -1,     4,     5,
+    -1,    -1,     8,     9,    -1,    -1,    -1,    -1,    14,   238,
+   239,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+    81,    82,    83,    84,   686,    -1,   688,   689,    -1,   258,
+    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,
+    -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,
+    56,    57,  1270,  1271,    -1,  1273,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,   297,    -1,
+    -1,   733,    -1,    -1,    80,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   744,   745,    90,   747,    -1,    93,    94,    -1,
+    -1,  1309,    -1,  1311,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,     1,  1424,     3,     4,     5,     6,    -1,     8,     9,
+    10,    11,   774,    13,    14,    -1,   345,    -1,   347,   348,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
+    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,
+    40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
+    50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
+    -1,    61,    -1,   392,    -1,    -1,    -1,    67,    -1,    -1,
+    70,    -1,  1494,  1495,  1496,    -1,    -1,    -1,    78,    79,
+    80,    -1,   411,    -1,    -1,    -1,    86,    87,    88,   418,
+    -1,    -1,   421,    93,    94,    -1,    -1,  1519,    -1,    -1,
+    -1,    -1,    -1,    -1,   433,    -1,  1424,     4,     5,   109,
+   110,     8,     9,    -1,     4,     5,    -1,    14,     8,     9,
+    -1,    -1,    -1,    -1,    14,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    36,
+    30,    -1,    -1,   905,   906,   907,    36,    -1,    45,    -1,
+    47,    -1,    -1,    -1,    -1,    45,    -1,    54,    -1,    56,
+    57,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    -1,
+    -1,    -1,   501,    70,    -1,    -1,  1494,  1495,  1496,    -1,
+   942,   943,   944,    80,    -1,    -1,    -1,   949,    -1,    -1,
+    -1,    -1,    -1,    90,    -1,    -1,    93,    94,    -1,   528,
+    -1,  1519,    -1,     3,     4,     5,     6,     7,     8,     9,
+    -1,    -1,    -1,    -1,    14,    -1,    -1,   979,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,   991,
+    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,
+    -1,  1023,    -1,    -1,    -1,    -1,    28,    -1,    30,    -1,
+    70,    -1,    -1,    -1,    36,   604,    38,    39,    -1,    -1,
+    80,    -1,  1044,    45,    -1,    47,   615,   616,    88,   618,
+   619,    -1,    54,    93,    56,    57,    -1,    59,    98,    -1,
+    -1,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+    72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+    82,    83,    -1,    -1,    86,    87,    88,    -1,    -1,    91,
+    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,   671,    -1,    -1,    -1,    -1,    -1,   110,   678,
+   679,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   690,    -1,    -1,    -1,    -1,  1128,    -1,    -1,     1,
+    -1,     3,     4,     5,     6,     7,     8,     9,    -1,    -1,
+    -1,    -1,    14,    -1,    -1,   714,    -1,  1149,  1150,  1151,
+  1152,  1153,    -1,  1155,    -1,  1157,    28,    -1,    30,    31,
+    32,    -1,    -1,    -1,    36,    37,    -1,    -1,    -1,    41,
+    -1,    -1,    -1,    45,    46,    -1,    48,    -1,  1180,  1181,
+  1182,    -1,    54,    -1,    56,    57,    -1,    -1,    60,    -1,
+    62,    12,   761,    -1,    -1,   764,    -1,    -1,    70,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,
+    -1,  1213,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
+    -1,    93,    -1,    -1,    -1,    -1,    -1,   796,   797,   798,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,    -1,   808,
     -1,    62,    63,    64,    65,    66,    67,    68,    69,    70,
     71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,    83,    84,    68,    69,    70,    71,    72,    73,
-    74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-    84,   124,    -1,   126,  1170,  1171,  1172,  1173,  1174,    -1,
-   133,   134,  1178,    -1,    -1,    -1,    -1,   140,   141,    -1,
-    -1,   144,   145,   146,    -1,   148,   149,   150,   151,    -1,
-    -1,   650,   651,    -1,    -1,  1201,  1202,  1203,    -1,    -1,
-  1295,  1296,    -1,  1298,    -1,    -1,    -1,   666,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-     5,     6,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1334,
-  1335,  1336,    -1,    -1,    -1,    -1,   705,    -1,   707,   708,
-    -1,    -1,    -1,    -1,    -1,    -1,    41,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,
-    -1,    56,    57,    -1,    -1,   238,   239,    62,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,  1295,
-  1296,    -1,  1298,   752,    -1,    80,   259,    -1,    -1,    -1,
-    -1,    -1,    -1,    88,   763,   764,    -1,   766,    93,    -1,
-    -1,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    12,    13,    14,    -1,   785,    -1,  1334,    -1,
-  1336,    -1,    -1,    -1,    -1,   298,    -1,    -1,    28,    29,
-    30,    31,    32,  1438,    34,    35,    36,   806,    38,    39,
-    40,    41,    42,    43,    -1,    45,    -1,    47,    -1,    49,
+    81,    82,    83,    84,    -1,    -1,    -1,    -1,  1270,  1271,
+    -1,  1273,    -1,     1,    -1,     3,     4,     5,     6,     7,
+     8,     9,    -1,    -1,    12,    -1,    14,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    -1,    27,
+    -1,    -1,    -1,    31,    -1,    -1,    -1,  1309,    36,  1311,
+    -1,    -1,   881,    41,   883,    -1,    -1,    45,    -1,    47,
+    -1,    -1,    -1,    -1,    -1,   894,    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,    59,   111,    -1,    -1,    63,    64,    65,    66,
+    67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+    77,    78,    79,    80,    81,    82,    83,    84,    -1,    -1,
+   979,     1,    -1,     3,     4,     5,     6,     7,     8,     9,
+    10,    11,  1424,    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,
-    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
-    70,    -1,    -1,   346,    -1,   348,   349,    -1,    78,    79,
-    80,     3,     4,     5,     6,    -1,    86,    87,    88,    -1,
-    90,    -1,    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,
-  1505,  1506,  1507,     3,     4,     5,     6,    -1,    -1,    31,
-   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
-   393,  1526,  1438,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    54,    -1,    56,    57,    -1,    -1,    -1,   412,
-    -1,    41,    -1,    -1,    -1,    -1,   419,    -1,    70,   422,
-    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    80,    -1,
-    60,   434,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
-    70,    93,    -1,    -1,    -1,   944,   945,   946,    -1,    -1,
-    80,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,  1505,
-  1506,  1507,    -1,    93,    -1,    -1,    -1,    -1,     4,     5,
-    -1,     7,     8,     9,     3,     4,     5,     6,    14,    -1,
-  1526,    -1,   981,   982,   983,    -1,    -1,    -1,    -1,   988,
-    -1,    -1,    28,    -1,    30,    31,    -1,    -1,    -1,   502,
-    36,    -1,    -1,    -1,    -1,   508,    -1,    -1,    -1,    45,
-    -1,    -1,    41,    -1,    -1,    -1,    -1,    -1,    54,  1018,
-    56,    57,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
-    -1,  1030,     1,    -1,     3,     4,     5,     6,     7,     8,
-     9,    70,    -1,    12,   547,    14,    -1,    -1,    -1,    -1,
-    -1,    80,    -1,    -1,    -1,    -1,    25,    -1,    27,    88,
-    -1,    -1,    31,    -1,    93,    -1,    -1,    36,    -1,    -1,
-  1069,    -1,    41,    -1,    -1,    -1,    45,    -1,    47,    -1,
-    -1,    -1,    -1,    -1,    -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,
-   623,    90,    91,    92,    93,    94,    95,    -1,    97,    -1,
-    -1,   634,   635,   102,   637,   638,    -1,    -1,   107,   108,
-   109,    -1,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-  1149,    -1,    -1,    -1,    -1,    -1,    -1,     4,     5,    -1,
-     7,     8,     9,    -1,    -1,    -1,    -1,    14,    -1,    -1,
-    -1,  1170,  1171,  1172,  1173,  1174,    -1,  1176,    -1,  1178,
-    -1,    28,    -1,    30,    31,    -1,    -1,   690,    -1,    36,
-    -1,    -1,    -1,    -1,   697,   698,    -1,    -1,    45,    -1,
-    -1,    48,  1201,  1202,  1203,    -1,   709,    54,    -1,    56,
-    57,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
-     6,     7,     8,     9,    10,    11,    -1,    13,    14,    15,
-   733,    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,   780,    -1,    -1,
-    -1,    67,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    78,    79,    80,    -1,  1295,  1296,    -1,  1298,
-    86,    87,    88,    -1,   807,    -1,    -1,    93,    -1,    95,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   109,   110,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   835,   836,   837,  1334,    -1,  1336,    -1,    -1,
-    -1,    -1,    -1,    -1,   847,    -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,   920,    -1,   922,
-    -1,    -1,    -1,    78,    79,    80,    31,    -1,    -1,    -1,
-   933,    86,    87,    88,    -1,    -1,    -1,    -1,    93,  1438,
-    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    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,    -1,     4,     5,    -1,     7,     8,
-     9,    -1,    -1,    12,    -1,    14,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1505,  1506,  1507,    28,
-    -1,    30,    31,    -1,    -1,  1018,    -1,    36,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    45,  1526,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,
+    60,    61,    -1,    -1,    -1,    -1,  1045,    67,    -1,    -1,
+    70,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
+    80,    -1,  1494,  1495,  1496,    -1,    86,    87,    88,    -1,
+    -1,    -1,    -1,    93,    -1,    95,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,  1519,    -1,   109,
+   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,  1101,  1102,     1,  1104,     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,  1164,    -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,  1201,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   110,    -1,    -1,    -1,  1216,     1,  1218,
+     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+    13,    14,    -1,    -1,    -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,    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,    -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,   110,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,  1334,    -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,    -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,    -1,    -1,    -1,    -1,  1072,
-    -1,  1074,    -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,  1122,
-  1123,    -1,  1125,    78,    79,    80,    -1,    -1,    -1,    -1,
-    -1,    86,    87,    88,    -1,    90,    -1,    -1,    93,    94,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,   110,     1,    -1,     3,     4,
-     5,     6,     7,     8,     9,    10,    11,    -1,    13,    14,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,  1185,    28,    29,    30,    31,    32,    -1,    34,
+    -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,
-    -1,    56,    57,    58,    -1,    60,    61,    -1,    -1,  1222,
+    -1,    56,    57,    -1,    -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,
-    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,     1,
-    -1,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
-    -1,    13,    14,    -1,    -1,   110,    -1,    -1,    -1,    -1,
+    -1,    86,    87,    88,    -1,    -1,    -1,     1,    93,     3,
+     4,     5,     6,    -1,     8,     9,    10,    11,    -1,    13,
+    14,    -1,    -1,   108,    -1,   110,    -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,    -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,    -1,    86,    87,    88,    -1,    -1,    -1,     1,    93,
+     3,     4,     5,     6,    -1,     8,     9,    10,    11,    -1,
+    13,    14,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    -1,    32,
+    -1,    34,    35,    36,    -1,    38,    39,    40,    41,    42,
+    43,    -1,    45,    -1,    -1,    -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,    -1,    86,    87,    88,    -1,    -1,    -1,    -1,
+    93,    94,     1,    -1,     3,     4,     5,     6,    -1,     8,
+     9,    10,    11,    -1,    13,    14,    -1,   110,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
+    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,    38,
+    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,    -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,    -1,    86,    87,    88,
+    -1,    -1,    -1,     1,    93,     3,     4,     5,     6,    -1,
+     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
+   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    28,    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,
+    38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
+    -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,    -1,    86,    87,
+    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,     6,
+    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
+    -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
+    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
+    -1,    -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,    -1,    86,
+    87,    88,    -1,    -1,    -1,    -1,    93,    -1,     1,    -1,
+     3,     4,     5,     6,   101,     8,     9,    10,    11,    -1,
+    13,    14,    -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,    -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,    -1,    86,    87,    88,    -1,    -1,    -1,     1,
+    93,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,    -1,    -1,   110,    -1,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,    -1,
     32,    -1,    34,    35,    36,    -1,    38,    39,    40,    41,
     42,    43,    -1,    45,    -1,    -1,    -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,    -1,    86,    87,    88,    -1,    -1,    -1,
-    -1,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,  1359,   109,   110,     1,
-    -1,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
-    -1,    13,    14,    -1,    -1,    -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,    -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,    -1,    86,    87,    88,    -1,    -1,    -1,
      1,    93,     3,     4,     5,     6,    -1,     8,     9,    10,
     11,    -1,    13,    14,    -1,    -1,    -1,    -1,   110,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,    30,
     -1,    32,    -1,    34,    35,    36,    -1,    38,    39,    40,
     41,    42,    43,    -1,    45,    -1,    -1,    -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,    -1,    86,    87,    88,    -1,    -1,
-    -1,    -1,    93,    94,     1,    -1,     3,     4,     5,     6,
-    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,   110,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,    36,
-    -1,    38,    39,    40,    41,    42,    43,    -1,    45,    -1,
-    -1,    -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,    -1,    86,
-    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,
-     6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
-    -1,    -1,   109,   110,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,
-    36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
-    -1,    -1,    -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,    -1,
-    86,    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,
-     5,     6,    -1,     8,     9,    10,    11,    -1,    13,    14,
-    -1,    -1,    -1,   109,   110,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
-    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
-    45,    -1,    -1,    -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,
-    -1,    86,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,
-     1,    -1,     3,     4,     5,     6,   101,     8,     9,    10,
-    11,    -1,    13,    14,    -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,    -1,    56,    57,    58,    -1,    -1,
-    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,    70,
+    51,    52,    53,    54,    -1,    56,    57,    -1,    -1,    -1,
+    61,    62,    -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,     3,     4,     5,     6,    -1,     8,     9,
@@ -3328,38 +3309,13 @@ static const short yycheck[] = {     4,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,    29,
     30,    -1,    32,    -1,    34,    35,    36,    -1,    38,    39,
     40,    41,    42,    43,    -1,    45,    -1,    -1,    -1,    49,
-    50,    51,    52,    53,    54,    -1,    56,    57,    58,    -1,
-    -1,    61,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+    50,    51,    52,    53,    54,    -1,    56,    57,    -1,    -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,     3,     4,     5,     6,    -1,     8,
      9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
    110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
-    29,    30,    -1,    32,    -1,    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,    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,     3,     4,     5,     6,    -1,
-     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
-    -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    28,    29,    30,    -1,    32,    -1,    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,    61,    -1,    -1,    -1,    -1,    -1,    67,
-     1,    -1,    70,     4,     5,    -1,    -1,     8,     9,    -1,
-    78,    79,    80,    14,    -1,    -1,    -1,    -1,    86,    87,
-    88,    -1,    -1,    -1,    -1,    93,    -1,    28,    -1,    30,
-    -1,    -1,    -1,    -1,    -1,    36,    -1,    38,    39,    -1,
-   108,    -1,   110,    -1,    45,    -1,    47,    -1,    -1,    -1,
-    -1,    -1,    -1,    54,    -1,    56,    57,    -1,    59,    -1,
-    -1,    -1,    63,    64,    65,    66,    67,    68,    69,    70,
-    71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-    81,    82,    83,    -1,    -1,    86,    87,    88,    -1,    -1,
-    91,    -1,     1,    94,     3,     4,     5,     6,    -1,     8,
-     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,   110,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    28,
     29,    30,    -1,    32,    -1,    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,
@@ -3367,7 +3323,7 @@ static const short yycheck[] = {     4,
     -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,     3,     4,     5,     6,    -1,
-     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
+     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,   108,
     -1,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
     28,    29,    30,    -1,    32,    -1,    34,    35,    36,    -1,
     38,    39,    40,    41,    42,    43,    -1,    45,    -1,    -1,
@@ -3384,172 +3340,13 @@ static const short yycheck[] = {     4,
     57,    -1,    -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,    -1,    86,
-    87,    88,     3,     4,     5,     6,    93,     8,     9,    10,
-    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,    29,    30,
-    -1,    32,    -1,    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,
-    61,    -1,    -1,    -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,    32,
-    -1,    -1,    -1,    36,    37,    -1,    -1,    -1,    41,   110,
-   111,    -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,    -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,    -1,    -1,     3,     4,     5,     6,     7,     8,     9,
-    10,    11,    -1,    13,    14,    15,   109,    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,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
-   110,     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,    -1,    -1,
-    -1,    93,    -1,    95,    -1,     3,     4,     5,     6,     7,
-     8,     9,    10,    11,    -1,    13,    14,    15,   110,    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,     3,
-     4,     5,     6,     7,     8,     9,    10,    11,    -1,    13,
-    14,    15,   110,    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,    -1,    -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,     3,     4,     5,     6,     7,     8,     9,    10,
-    11,    12,    13,    14,    -1,    -1,   110,    -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,    47,    -1,    49,    50,
-    51,    52,    53,    54,    -1,    56,    57,    -1,    -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,    -1,    86,    87,    88,    -1,    90,
-    -1,    -1,    93,    94,     3,     4,     5,     6,     7,     8,
-     9,    10,    11,    12,    13,    14,    -1,    -1,    -1,   110,
-    -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,    47,    -1,
-    49,    50,    51,    52,    53,    54,    -1,    56,    57,    -1,
-    -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,    -1,    86,    87,    88,
-    -1,    90,    -1,    -1,    93,    94,     3,     4,     5,     6,
-    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
-    -1,   110,    -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,
-    47,    -1,    49,    50,    51,    52,    53,    54,    -1,    56,
-    57,    -1,    -1,    -1,    -1,    -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,    90,    -1,    -1,    93,    94,     3,     4,
-     5,     6,    -1,     8,     9,    10,    11,    -1,    13,    14,
-    -1,    -1,    -1,   110,    -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,    47,    -1,    49,    50,    51,    52,    53,    54,
-    -1,    56,    57,    -1,    -1,    -1,    -1,    -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,    90,    -1,    -1,    93,    94,
-     3,     4,     5,     6,    -1,     8,     9,    10,    11,    -1,
-    13,    14,    -1,    -1,    -1,   110,    -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,    -1,    56,    57,    -1,    -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,    -1,    86,    87,    88,     3,     4,     5,     6,
-    93,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,
-    -1,    28,    29,    30,    -1,    32,    -1,    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,    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,     3,     4,     5,
-     6,     7,     8,     9,    10,    11,    -1,    13,    14,    -1,
+    87,    88,    -1,    -1,    -1,     1,    93,     3,     4,     5,
+     6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
     -1,    -1,    -1,   110,    -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,    -1,
-    56,    57,    -1,    -1,    -1,    -1,    -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,     3,     4,     5,     6,    93,     8,     9,
-    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   110,    -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,    -1,    56,    57,    -1,    -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,    -1,    86,    87,    88,     3,
-     4,     5,     6,    93,     8,     9,    10,    11,    -1,    13,
-    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   110,    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,
-    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,    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,     3,     4,     5,     6,    93,
-     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,
-    28,    29,    30,    -1,    32,    -1,    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,    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,     3,     4,     5,     6,    93,     8,     9,    10,    11,
-    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   110,    -1,    -1,    -1,    28,    29,    30,    -1,
-    32,    -1,    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,    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,     3,     4,     5,
-     6,    93,     8,     9,    10,    11,    -1,    13,    14,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,
     -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,    35,
     36,    -1,    38,    39,    40,    41,    42,    43,    -1,    45,
     -1,    -1,    -1,    49,    50,    51,    52,    53,    54,    -1,
-    56,    57,    58,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    56,    57,    -1,    -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,    -1,
     86,    87,    88,     3,     4,     5,     6,    93,     8,     9,
@@ -3558,21 +3355,95 @@ static const short yycheck[] = {     4,
     30,    -1,    32,    -1,    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,
+    -1,    61,    -1,    -1,    -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,
+    32,    -1,    -1,    -1,    36,    37,    -1,    -1,    -1,    41,
+   110,   111,    -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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    80,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    88,    -1,    -1,    -1,
+    -1,    93,    -1,    -1,     3,     4,     5,     6,     7,     8,
+     9,    10,    11,    -1,    13,    14,    15,   109,    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,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+   109,   110,     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,    -1,
+    -1,    -1,    93,    -1,    95,    -1,     3,     4,     5,     6,
+     7,     8,     9,    10,    11,    -1,    13,    14,    15,   110,
+    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,
+     3,     4,     5,     6,     7,     8,     9,    10,    11,    -1,
+    13,    14,    15,   110,    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,    -1,    -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,     3,     4,     5,     6,     7,     8,     9,
+    10,    11,    12,    13,    14,    -1,    -1,   110,    -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,    47,    -1,    49,
+    50,    51,    52,    53,    54,    -1,    56,    57,    -1,    -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,    -1,    86,    87,    88,    -1,
-    -1,    -1,    -1,    93,    94,     3,     4,     5,     6,    -1,
-     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
+    90,    -1,    -1,    93,    94,     3,     4,     5,     6,     7,
+     8,     9,    10,    11,    12,    13,    14,    -1,    -1,    -1,
    110,    -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,
+    38,    39,    40,    41,    42,    43,    -1,    45,    -1,    47,
     -1,    49,    50,    51,    52,    53,    54,    -1,    56,    57,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    67,
+    -1,    -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,    -1,    86,    87,
-    88,     3,     4,     5,     6,    93,     8,     9,    10,    11,
-    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   110,    -1,    -1,    -1,    28,    29,    30,    -1,
+    88,    -1,    90,    -1,    -1,    93,    94,     3,     4,     5,
+     6,    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,
+    -1,    -1,   110,    -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,    47,    -1,    49,    50,    51,    52,    53,    54,    -1,
+    56,    57,    -1,    -1,    -1,    -1,    -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,    90,    -1,    -1,    93,    94,     3,
+     4,     5,     6,    -1,     8,     9,    10,    11,    -1,    13,
+    14,    -1,    -1,    -1,   110,    -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,    47,    -1,    49,    50,    51,    52,    53,
+    54,    -1,    56,    57,    -1,    -1,    -1,    -1,    -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,    90,    -1,    -1,    93,
+    94,     3,     4,     5,     6,    -1,     8,     9,    10,    11,
+    -1,    13,    14,    -1,    -1,    -1,   110,    -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,    -1,    56,    57,    -1,    -1,    -1,    61,
@@ -3581,63 +3452,198 @@ static const short yycheck[] = {     4,
     -1,    -1,    -1,    -1,    86,    87,    88,     3,     4,     5,
      6,    93,     8,     9,    10,    11,    -1,    13,    14,    -1,
     -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,
-    -1,    -1,    28,    29,    30,    31,    32,    -1,    34,    35,
+    -1,    -1,    28,    29,    30,    -1,    32,    -1,    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,
+    56,    57,    -1,    -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,     3,     4,     5,     6,    93,     8,     9,
-    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,    29,
-    30,    -1,    32,    -1,    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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,
-    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,     3,
-     4,     5,     6,    93,     8,     9,    10,    11,    -1,    13,
-    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-   110,    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,
-    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,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,    -1,
-    -1,    -1,    86,    87,    88,     3,     4,     5,     6,    93,
-     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,
-    28,    29,    30,    -1,    32,    -1,    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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    78,    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,
-    88,    -1,    -1,     4,     5,    93,     7,     8,     9,    -1,
-    -1,    12,    -1,    14,    -1,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,   110,    -1,    -1,    -1,    -1,    28,    -1,    30,
-    31,    -1,    -1,    -1,    -1,    36,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    54,    -1,    56,    57,    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,    -1,   111,    -1,    -1,    -1,    -1,
-    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-    59,    -1,    -1,   107,    63,    64,    65,    66,    67,    68,
+    86,    87,    88,    -1,    -1,    -1,    -1,    93,     3,     4,
+     5,     6,     7,     8,     9,    10,    11,    -1,    13,    14,
+    -1,    -1,    -1,    -1,   110,    -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,
+    -1,    56,    57,    -1,    -1,    -1,    -1,    -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,     3,     4,     5,     6,    93,     8,
+     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   110,    -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,    -1,    56,    57,    -1,
+    -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,    -1,    86,    87,    88,
+     3,     4,     5,     6,    93,     8,     9,    10,    11,    -1,
+    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   110,    -1,    -1,    -1,    28,    29,    30,    -1,    32,
+    -1,    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,    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,     3,     4,     5,     6,
+    93,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,
+    -1,    28,    29,    30,    -1,    32,    -1,    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,    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,     3,     4,     5,     6,    93,     8,     9,    10,
+    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,    29,    30,
+    -1,    32,    -1,    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,
+    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,     3,     4,
+     5,     6,    93,     8,     9,    10,    11,    -1,    13,    14,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
+    -1,    -1,    -1,    28,    29,    30,    -1,    32,    -1,    34,
+    35,    36,    -1,    38,    39,    40,    41,    42,    43,    -1,
+    45,    -1,    -1,    -1,    49,    50,    51,    52,    53,    54,
+    -1,    56,    57,    58,    -1,    -1,    -1,    -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,     3,     4,     5,     6,    93,     8,
+     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,
+    29,    30,    -1,    32,    -1,    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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
+    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
+    -1,    -1,    -1,    -1,    93,    94,     3,     4,     5,     6,
+    -1,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
+    -1,   110,    -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,    -1,    56,
+    57,    -1,    -1,    -1,    -1,    -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,     3,     4,     5,     6,    93,     8,     9,    10,
+    11,    -1,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,    29,    30,
+    -1,    32,    -1,    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,
+    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,     3,     4,
+     5,     6,    93,     8,     9,    10,    11,    -1,    13,    14,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
+    -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,
+    -1,    56,    57,    -1,    -1,    -1,    -1,    -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,     3,     4,     5,     6,    93,     8,
+     9,    10,    11,    -1,    13,    14,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,    -1,    28,
+    29,    30,    -1,    32,    -1,    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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
+    79,    80,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,
+     3,     4,     5,     6,    93,     8,     9,    10,    11,    -1,
+    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    -1,   110,    -1,    -1,    -1,    28,    29,    30,    -1,    32,
+    -1,    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,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    -1,    -1,
+    -1,    -1,    -1,    86,    87,    88,     3,     4,     5,     6,
+    93,     8,     9,    10,    11,    -1,    13,    14,    -1,    -1,
+    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,    -1,
+    -1,    28,    29,    30,    -1,    32,    -1,    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,     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,    48,
+    -1,    -1,    -1,    -1,    -1,    54,    -1,    56,    57,    -1,
+    -1,    60,    -1,     3,     4,     5,     6,     7,     8,     9,
+    -1,    70,    12,    -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,    28,    -1,    30,    31,    -1,    88,    -1,
+    -1,    36,    -1,    93,    -1,    -1,    41,    -1,    -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,    -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,    28,    -1,    30,    31,    -1,
+    88,    -1,    -1,    36,    -1,    93,    -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,
+     4,     5,    -1,     7,     8,     9,    -1,    -1,    -1,    -1,
+    14,    -1,    70,     4,     5,    -1,     7,     8,     9,    -1,
+    -1,    12,    80,    14,    28,    -1,    30,    31,    -1,    -1,
+    88,    -1,    36,    -1,    -1,    93,    -1,    28,    -1,    30,
+    31,    45,    -1,    -1,    48,    36,    -1,    -1,    -1,    -1,
+    54,    -1,    56,    57,    45,    -1,    -1,    -1,    -1,    -1,
+    -1,    -1,    -1,    54,    -1,    56,    57,     4,     5,    -1,
+     7,     8,     9,    -1,    -1,    12,    -1,    14,    -1,    -1,
+     4,     5,    -1,     7,     8,     9,    -1,    -1,    -1,    -1,
+    14,    28,    -1,    30,    31,    -1,    -1,    -1,    -1,    36,
+    -1,    -1,    -1,    -1,    28,    -1,    30,    31,    45,    -1,
+    -1,    -1,    36,    -1,    -1,    -1,    -1,    54,    -1,    56,
+    57,    45,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+    54,    -1,    56,    57,    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,    -1,   111,    69,    70,    71,    72,    73,    74,    75,
+    76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
+   107,    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,    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,
+    79,    80,    81,    82,    83,    84,    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
+    84
 };
 /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
-#line 3 "/usr/cygnus/gnupro-98r2/share/bison.simple"
+#line 3 "/usr/lib/bison.simple"
 
 /* Skeleton output parser for bison,
    Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
@@ -3830,7 +3836,7 @@ __yy_memcpy (char *to, char *from, int count)
 #endif
 #endif
 \f
-#line 196 "/usr/cygnus/gnupro-98r2/share/bison.simple"
+#line 196 "/usr/lib/bison.simple"
 
 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
    into yyparse.  The argument should have type void *.
@@ -6100,7 +6106,11 @@ case 477:
                    cp_pedwarn ("using `typename' outside of template"); ;
     break;}
 case 478:
-#line 2143 "parse.y"
+#line 2142 "parse.y"
+{ yyvsp[-1].ttype = begin_class_definition (yyvsp[-1].ttype); ;
+    break;}
+case 479:
+#line 2144 "parse.y"
 { 
                  int semi;
 
@@ -6108,25 +6118,25 @@ case 478:
                    yychar = YYLEX;
                  semi = yychar == ';';
 
-                 yyval.ttype = finish_class_definition (yyvsp[-4].ttype, yyvsp[0].ttype, semi); 
+                 yyval.ttype = finish_class_definition (yyvsp[-5].ttype, yyvsp[0].ttype, semi); 
                ;
     break;}
-case 479:
-#line 2153 "parse.y"
+case 480:
+#line 2154 "parse.y"
 {
                  begin_inline_definitions ();
                ;
     break;}
-case 480:
-#line 2157 "parse.y"
+case 481:
+#line 2158 "parse.y"
 {
                  finish_inline_definitions ();
                  yyval.ftype.t = yyvsp[-3].ttype;
                  yyval.ftype.new_type_flag = 1; 
                ;
     break;}
-case 481:
-#line 2163 "parse.y"
+case 482:
+#line 2164 "parse.y"
 {
                  yyval.ftype.new_type_flag = 0;
                  if (TYPE_BINFO (yyvsp[0].ttype) == NULL_TREE)
@@ -6145,104 +6155,104 @@ case 481:
                    }
                ;
     break;}
-case 485:
-#line 2190 "parse.y"
+case 486:
+#line 2191 "parse.y"
 { if (pedantic && !in_system_header)
                    pedwarn ("comma at end of enumerator list"); ;
     break;}
-case 487:
-#line 2197 "parse.y"
+case 488:
+#line 2198 "parse.y"
 { error ("storage class specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
-case 488:
-#line 2199 "parse.y"
+case 489:
+#line 2200 "parse.y"
 { error ("type specifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
-case 489:
-#line 2201 "parse.y"
+case 490:
+#line 2202 "parse.y"
 { error ("type qualifier `%s' not allowed after struct or class", IDENTIFIER_POINTER (yyvsp[0].ttype)); ;
     break;}
-case 490:
-#line 2203 "parse.y"
+case 491:
+#line 2204 "parse.y"
 { error ("no body nor ';' separates two class, struct or union declarations"); ;
     break;}
-case 491:
-#line 2205 "parse.y"
+case 492:
+#line 2206 "parse.y"
 { yyval.ttype = build_decl_list (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
-case 492:
-#line 2210 "parse.y"
+case 493:
+#line 2211 "parse.y"
 { 
                  current_aggr = yyvsp[-1].ttype; 
                  yyval.ttype = yyvsp[0].ttype; 
                ;
     break;}
-case 493:
-#line 2218 "parse.y"
+case 494:
+#line 2219 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 494:
-#line 2220 "parse.y"
+case 495:
+#line 2221 "parse.y"
 { yyungetc ('{', 1); ;
     break;}
-case 495:
-#line 2222 "parse.y"
+case 496:
+#line 2223 "parse.y"
 { yyungetc (':', 1); ;
     break;}
-case 496:
-#line 2227 "parse.y"
+case 497:
+#line 2228 "parse.y"
 {
                  current_aggr = yyvsp[-2].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
-case 497:
-#line 2232 "parse.y"
+case 498:
+#line 2233 "parse.y"
 {
                  current_aggr = yyvsp[-3].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype);
                ;
     break;}
-case 498:
-#line 2237 "parse.y"
+case 499:
+#line 2238 "parse.y"
 {
                  current_aggr = yyvsp[-2].ttype;
                  yyval.ttype = handle_class_head (yyvsp[-2].ttype, NULL_TREE, yyvsp[0].ttype);
                ;
     break;}
-case 499:
-#line 2242 "parse.y"
-{ current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
-    break;}
 case 500:
-#line 2244 "parse.y"
+#line 2243 "parse.y"
 { current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 501:
-#line 2249 "parse.y"
-{ yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, 1); ;
+#line 2245 "parse.y"
+{ current_aggr = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 502:
-#line 2251 "parse.y"
-{ yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, 0); ;
+#line 2250 "parse.y"
+{ yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, 1); ;
     break;}
 case 503:
-#line 2255 "parse.y"
+#line 2252 "parse.y"
+{ yyval.ttype = xref_tag (current_aggr, yyvsp[0].ttype, 0); ;
+    break;}
+case 504:
+#line 2256 "parse.y"
 { 
                  yyval.ttype = yyvsp[-1].ttype;
                  if (yyvsp[0].ttype)
                     xref_basetypes (current_aggr, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); 
                ;
     break;}
-case 504:
-#line 2261 "parse.y"
+case 505:
+#line 2262 "parse.y"
 { 
                  if (yyvsp[0].ttype != error_mark_node)
                    push_scope (CP_DECL_CONTEXT (yyvsp[0].ttype)); 
                ;
     break;}
-case 505:
-#line 2266 "parse.y"
+case 506:
+#line 2267 "parse.y"
 { 
                  if (yyvsp[-2].ttype != error_mark_node)
                    {
@@ -6267,45 +6277,45 @@ case 505:
                    }
                ;
     break;}
-case 506:
-#line 2293 "parse.y"
+case 507:
+#line 2294 "parse.y"
 { yyval.ttype = xref_tag (yyval.ttype, make_anon_name (), 0);
                  yyungetc ('{', 1); ;
     break;}
-case 509:
-#line 2304 "parse.y"
+case 510:
+#line 2305 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
-case 510:
-#line 2306 "parse.y"
+case 511:
+#line 2307 "parse.y"
 { yyungetc(':', 1); yyval.ttype = NULL_TREE; ;
     break;}
-case 511:
-#line 2308 "parse.y"
+case 512:
+#line 2309 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
-case 513:
-#line 2314 "parse.y"
+case 514:
+#line 2315 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
-case 514:
-#line 2319 "parse.y"
+case 515:
+#line 2320 "parse.y"
 { yyval.ttype = finish_base_specifier (access_default_node, yyvsp[0].ttype,
                                              current_aggr 
                                              == signature_type_node); ;
     break;}
-case 515:
-#line 2323 "parse.y"
+case 516:
+#line 2324 "parse.y"
 { yyval.ttype = finish_base_specifier (yyvsp[-2].ttype, yyvsp[0].ttype, 
                                              current_aggr 
                                              == signature_type_node); ;
     break;}
-case 516:
-#line 2330 "parse.y"
+case 517:
+#line 2331 "parse.y"
 { if (yyval.ttype != error_mark_node) yyval.ttype = TYPE_MAIN_DECL (yyvsp[0].ttype); ;
     break;}
-case 518:
-#line 2333 "parse.y"
+case 519:
+#line 2334 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6327,8 +6337,8 @@ case 518:
                    }
                ;
     break;}
-case 519:
-#line 2354 "parse.y"
+case 520:
+#line 2355 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6350,14 +6360,14 @@ case 519:
                    }
                ;
     break;}
-case 521:
-#line 2379 "parse.y"
+case 522:
+#line 2380 "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 522:
-#line 2383 "parse.y"
+case 523:
+#line 2384 "parse.y"
 {
                  if (yyvsp[-2].ttype != access_default_virtual_node)
                    error ("multiple access specifiers");
@@ -6369,8 +6379,8 @@ case 522:
                    yyval.ttype = access_private_virtual_node;
                ;
     break;}
-case 523:
-#line 2394 "parse.y"
+case 524:
+#line 2395 "parse.y"
 { if (yyvsp[-1].ttype != ridpointers[(int)RID_VIRTUAL])
                    cp_error ("`%D' access", yyvsp[-1].ttype);
                  else if (yyval.ttype == access_public_node)
@@ -6383,12 +6393,8 @@ case 523:
                    error ("multiple `virtual' specifiers");
                ;
     break;}
-case 524:
-#line 2409 "parse.y"
-{ yyvsp[-1].ttype = begin_class_definition (yyvsp[-1].ttype); ;
-    break;}
 case 529:
-#line 2420 "parse.y"
+#line 2416 "parse.y"
 {
                  if (current_aggr == signature_type_node)
                    {
@@ -6400,49 +6406,49 @@ case 529:
                 ;
     break;}
 case 530:
-#line 2435 "parse.y"
+#line 2431 "parse.y"
 { 
                  finish_member_declaration (yyvsp[0].ttype);
                ;
     break;}
 case 531:
-#line 2439 "parse.y"
+#line 2435 "parse.y"
 { 
                  finish_member_declaration (yyvsp[0].ttype);
                ;
     break;}
 case 533:
-#line 2447 "parse.y"
+#line 2443 "parse.y"
 { error ("missing ';' before right brace");
                  yyungetc ('}', 0); ;
     break;}
 case 534:
-#line 2452 "parse.y"
+#line 2448 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 535:
-#line 2454 "parse.y"
+#line 2450 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 536:
-#line 2456 "parse.y"
+#line 2452 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 537:
-#line 2458 "parse.y"
+#line 2454 "parse.y"
 { yyval.ttype = finish_method (yyval.ttype); ;
     break;}
 case 538:
-#line 2460 "parse.y"
+#line 2456 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 539:
-#line 2462 "parse.y"
+#line 2458 "parse.y"
 { yyval.ttype = yyvsp[0].ttype;
                  pedantic = yyvsp[-1].itype; ;
     break;}
 case 540:
-#line 2465 "parse.y"
+#line 2461 "parse.y"
 {  
                  if (yyvsp[0].ttype)
                    yyval.ttype = finish_member_template_decl (yyvsp[0].ttype);
@@ -6454,14 +6460,14 @@ case 540:
                ;
     break;}
 case 541:
-#line 2475 "parse.y"
+#line 2471 "parse.y"
 { 
                  yyval.ttype = finish_member_class_template (yyvsp[-1].ftype.t); 
                  finish_template_decl (yyvsp[-2].ttype);
                ;
     break;}
 case 542:
-#line 2486 "parse.y"
+#line 2482 "parse.y"
 {
                  /* Most of the productions for component_decl only
                     allow the creation of one new member, so we call
@@ -6484,7 +6490,7 @@ case 542:
                ;
     break;}
 case 543:
-#line 2507 "parse.y"
+#line 2503 "parse.y"
 { 
                  if (!yyvsp[0].itype)
                    grok_x_components (yyvsp[-1].ttype);
@@ -6492,45 +6498,45 @@ case 543:
                ;
     break;}
 case 544:
-#line 2513 "parse.y"
+#line 2509 "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 2516 "parse.y"
+#line 2512 "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 546:
-#line 2519 "parse.y"
+#line 2515 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 547:
-#line 2521 "parse.y"
+#line 2517 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 548:
-#line 2532 "parse.y"
+#line 2528 "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 549:
-#line 2537 "parse.y"
+#line 2533 "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 550:
-#line 2540 "parse.y"
+#line 2536 "parse.y"
 { yyval.ttype = do_class_using_decl (yyvsp[0].ttype); ;
     break;}
 case 551:
-#line 2546 "parse.y"
+#line 2542 "parse.y"
 { yyval.itype = 0; ;
     break;}
 case 552:
-#line 2548 "parse.y"
+#line 2544 "parse.y"
 { 
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
                    yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
@@ -6539,7 +6545,7 @@ case 552:
                ;
     break;}
 case 553:
-#line 2555 "parse.y"
+#line 2551 "parse.y"
 { 
                  check_multiple_declarators ();
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
@@ -6549,11 +6555,11 @@ case 553:
                ;
     break;}
 case 554:
-#line 2566 "parse.y"
+#line 2562 "parse.y"
 { yyval.itype = 0; ;
     break;}
 case 555:
-#line 2568 "parse.y"
+#line 2564 "parse.y"
 { 
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
                    yyvsp[0].ttype = finish_member_template_decl (yyvsp[0].ttype);
@@ -6562,7 +6568,7 @@ case 555:
                ;
     break;}
 case 556:
-#line 2575 "parse.y"
+#line 2571 "parse.y"
 { 
                  check_multiple_declarators ();
                  if (PROCESSING_REAL_TEMPLATE_DECL_P ())
@@ -6572,7 +6578,7 @@ case 556:
                ;
     break;}
 case 561:
-#line 2596 "parse.y"
+#line 2592 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
@@ -6580,7 +6586,7 @@ case 561:
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
 case 562:
-#line 2602 "parse.y"
+#line 2598 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
@@ -6588,7 +6594,7 @@ case 562:
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 563:
-#line 2611 "parse.y"
+#line 2607 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
@@ -6596,7 +6602,7 @@ case 563:
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
 case 564:
-#line 2617 "parse.y"
+#line 2613 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
@@ -6604,7 +6610,7 @@ case 564:
                                  build_tree_list (yyvsp[-1].ttype, prefix_attributes)); ;
     break;}
 case 565:
-#line 2623 "parse.y"
+#line 2619 "parse.y"
 { split_specs_attrs (yyvsp[-4].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-4].ttype = current_declspecs;
@@ -6612,7 +6618,7 @@ case 565:
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 566:
-#line 2629 "parse.y"
+#line 2625 "parse.y"
 { split_specs_attrs (yyvsp[-3].ttype, &current_declspecs,
                                     &prefix_attributes);
                  yyvsp[-3].ttype = current_declspecs;
@@ -6620,54 +6626,54 @@ case 566:
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 567:
-#line 2638 "parse.y"
+#line 2634 "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 568:
-#line 2641 "parse.y"
+#line 2637 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 569:
-#line 2647 "parse.y"
+#line 2643 "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 570:
-#line 2650 "parse.y"
+#line 2646 "parse.y"
 { yyval.ttype = grokbitfield (yyval.ttype, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 571:
-#line 2653 "parse.y"
+#line 2649 "parse.y"
 { yyval.ttype = grokbitfield (NULL_TREE, current_declspecs, yyvsp[-1].ttype);
                  cplus_decl_attributes (yyval.ttype, yyvsp[0].ttype, prefix_attributes); ;
     break;}
 case 573:
-#line 2664 "parse.y"
+#line 2660 "parse.y"
 { TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype; yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 574:
-#line 2669 "parse.y"
+#line 2665 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, NULL_TREE, current_enum_type); ;
     break;}
 case 575:
-#line 2671 "parse.y"
+#line 2667 "parse.y"
 { yyval.ttype = build_enumerator (yyval.ttype, yyvsp[0].ttype, current_enum_type); ;
     break;}
 case 576:
-#line 2677 "parse.y"
+#line 2673 "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 577:
-#line 2680 "parse.y"
+#line 2676 "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 578:
-#line 2687 "parse.y"
+#line 2683 "parse.y"
 {
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids array dimensions with parenthesized type in new");
@@ -6677,90 +6683,83 @@ case 578:
                ;
     break;}
 case 579:
-#line 2698 "parse.y"
+#line 2694 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 580:
-#line 2700 "parse.y"
+#line 2696 "parse.y"
 { yyval.ttype = decl_tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 581:
-#line 2705 "parse.y"
+#line 2701 "parse.y"
 { yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE);
                  yyval.ftype.new_type_flag = 0; ;
     break;}
 case 582:
-#line 2708 "parse.y"
+#line 2704 "parse.y"
 { yyval.ftype.t = hash_tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ftype.t); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 583:
-#line 2717 "parse.y"
+#line 2713 "parse.y"
 { yyval.itype = suspend_momentary (); ;
     break;}
 case 584:
-#line 2722 "parse.y"
+#line 2718 "parse.y"
 { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 585:
-#line 2728 "parse.y"
+#line 2724 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 586:
-#line 2730 "parse.y"
+#line 2726 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 587:
-#line 2732 "parse.y"
+#line 2728 "parse.y"
 { resume_momentary ((int) yyvsp[-1].itype); yyval.ttype = empty_parms (); ;
     break;}
 case 588:
-#line 2734 "parse.y"
+#line 2730 "parse.y"
 { resume_momentary ((int) yyvsp[-3].itype); yyval.ttype = NULL_TREE; ;
     break;}
 case 589:
-#line 2741 "parse.y"
+#line 2737 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 590:
-#line 2743 "parse.y"
+#line 2739 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 591:
-#line 2745 "parse.y"
+#line 2741 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 592:
-#line 2747 "parse.y"
+#line 2743 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 593:
-#line 2749 "parse.y"
+#line 2745 "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 595:
-#line 2757 "parse.y"
+#line 2753 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    {
                      yyval.ttype = lookup_name (yyvsp[0].ttype, 1);
-                     if (current_class_type
-                         && TYPE_BEING_DEFINED (current_class_type)
-                         && ! IDENTIFIER_CLASS_VALUE (yyvsp[0].ttype))
-                       {
-                         /* Remember that this name has been used in the class
-                            definition, as per [class.scope0] */
-                         pushdecl_class_level (yyval.ttype);
-                       }
+                     maybe_note_name_used_in_class (yyvsp[0].ttype, yyval.ttype);
                    }
                  else
                    yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
 case 596:
-#line 2774 "parse.y"
+#line 2763 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
@@ -6770,37 +6769,37 @@ case 596:
                ;
     break;}
 case 599:
-#line 2787 "parse.y"
+#line 2776 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 600:
-#line 2792 "parse.y"
+#line 2781 "parse.y"
 { yyval.ttype = get_type_decl (yyvsp[0].ttype); ;
     break;}
 case 601:
-#line 2797 "parse.y"
+#line 2786 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 602:
-#line 2799 "parse.y"
+#line 2788 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 603:
-#line 2801 "parse.y"
+#line 2790 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
 case 604:
-#line 2803 "parse.y"
+#line 2792 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 605:
-#line 2805 "parse.y"
+#line 2794 "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 608:
-#line 2817 "parse.y"
+#line 2806 "parse.y"
 {
                  /* Provide support for '(' attributes '*' declarator ')'
                     etc */
@@ -6808,138 +6807,133 @@ case 608:
                ;
     break;}
 case 609:
-#line 2826 "parse.y"
+#line 2815 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 610:
-#line 2828 "parse.y"
+#line 2817 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 611:
-#line 2830 "parse.y"
+#line 2819 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 612:
-#line 2832 "parse.y"
+#line 2821 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 613:
-#line 2834 "parse.y"
+#line 2823 "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 615:
-#line 2842 "parse.y"
+#line 2831 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 616:
-#line 2844 "parse.y"
+#line 2833 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 617:
-#line 2846 "parse.y"
+#line 2835 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 618:
-#line 2848 "parse.y"
+#line 2837 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 619:
-#line 2850 "parse.y"
+#line 2839 "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 621:
-#line 2858 "parse.y"
+#line 2847 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-2].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 622:
-#line 2860 "parse.y"
+#line 2849 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 623:
-#line 2862 "parse.y"
+#line 2851 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 624:
-#line 2864 "parse.y"
+#line 2853 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
 case 625:
-#line 2866 "parse.y"
+#line 2855 "parse.y"
 { enter_scope_of (yyvsp[0].ttype); ;
     break;}
 case 626:
-#line 2868 "parse.y"
+#line 2857 "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 627:
-#line 2876 "parse.y"
+#line 2865 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 628:
-#line 2879 "parse.y"
+#line 2868 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 629:
-#line 2885 "parse.y"
+#line 2874 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 630:
-#line 2888 "parse.y"
+#line 2877 "parse.y"
 { got_scope = NULL_TREE;
                  yyval.ttype = build_parse_node (SCOPE_REF, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 632:
-#line 2895 "parse.y"
+#line 2884 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 633:
-#line 2900 "parse.y"
+#line 2889 "parse.y"
 { yyval.ttype = build_functional_cast (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
 case 634:
-#line 2902 "parse.y"
+#line 2891 "parse.y"
 { yyval.ttype = reparse_decl_as_expr (yyvsp[-3].ftype.t, yyvsp[-1].ttype); ;
     break;}
 case 635:
-#line 2904 "parse.y"
+#line 2893 "parse.y"
 { yyval.ttype = reparse_absdcl_as_expr (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 640:
-#line 2915 "parse.y"
+#line 2904 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 641:
-#line 2917 "parse.y"
+#line 2906 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 642:
-#line 2924 "parse.y"
+#line 2913 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    {
                      yyval.ttype = lastiddecl;
-                     /* Remember that this name has been used in the class
-                        definition, as per [class.scope0] */
-                     if (current_class_type
-                         && TYPE_BEING_DEFINED (current_class_type)
-                         && ! IDENTIFIER_CLASS_VALUE (yyvsp[-1].ttype))
-                       pushdecl_class_level (yyval.ttype);
+                     maybe_note_name_used_in_class (yyvsp[-1].ttype, yyval.ttype);
                    }
                  got_scope = yyval.ttype = TYPE_MAIN_VARIANT (TREE_TYPE (yyval.ttype));
                ;
     break;}
 case 643:
-#line 2938 "parse.y"
+#line 2922 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
@@ -6947,7 +6941,7 @@ case 643:
                ;
     break;}
 case 644:
-#line 2944 "parse.y"
+#line 2928 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
@@ -6955,15 +6949,15 @@ case 644:
                ;
     break;}
 case 645:
-#line 2950 "parse.y"
+#line 2934 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyvsp[-1].ttype)); ;
     break;}
 case 647:
-#line 2966 "parse.y"
+#line 2950 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 648:
-#line 2971 "parse.y"
+#line 2955 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -6978,26 +6972,26 @@ case 648:
                ;
     break;}
 case 649:
-#line 2984 "parse.y"
+#line 2968 "parse.y"
 { yyval.ttype = TREE_TYPE (yyvsp[0].ttype); ;
     break;}
 case 650:
-#line 2986 "parse.y"
+#line 2970 "parse.y"
 { yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 651:
-#line 2988 "parse.y"
+#line 2972 "parse.y"
 { yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[0].ttype); ;
     break;}
 case 652:
-#line 2993 "parse.y"
+#line 2977 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    cp_error ("`%T' is not a class or namespace", yyvsp[0].ttype);
                ;
     break;}
 case 653:
-#line 2998 "parse.y"
+#line 2982 "parse.y"
 {
                  if (TREE_CODE_CLASS (TREE_CODE (yyvsp[-1].ttype)) == 't')
                    yyval.ttype = make_typename_type (yyvsp[-1].ttype, yyvsp[0].ttype);
@@ -7012,15 +7006,15 @@ case 653:
                ;
     break;}
 case 654:
-#line 3011 "parse.y"
+#line 2995 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
     break;}
 case 655:
-#line 3013 "parse.y"
+#line 2997 "parse.y"
 { got_scope = yyval.ttype = make_typename_type (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 656:
-#line 3018 "parse.y"
+#line 3002 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE)
                    yyvsp[-1].ttype = lastiddecl;
@@ -7034,7 +7028,7 @@ case 656:
                ;
     break;}
 case 657:
-#line 3030 "parse.y"
+#line 3014 "parse.y"
 {
                  if (TREE_CODE (yyvsp[-1].ttype) != IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
@@ -7042,11 +7036,11 @@ case 657:
                ;
     break;}
 case 658:
-#line 3036 "parse.y"
+#line 3020 "parse.y"
 { got_scope = yyval.ttype = complete_type (TREE_TYPE (yyval.ttype)); ;
     break;}
 case 661:
-#line 3040 "parse.y"
+#line 3024 "parse.y"
 {
                  if (TREE_CODE (yyval.ttype) == IDENTIFIER_NODE)
                    yyval.ttype = lastiddecl;
@@ -7054,11 +7048,11 @@ case 661:
                ;
     break;}
 case 662:
-#line 3049 "parse.y"
+#line 3033 "parse.y"
 { yyval.ttype = build_min_nt (TEMPLATE_ID_EXPR, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 663:
-#line 3054 "parse.y"
+#line 3038 "parse.y"
 {
                  if (TREE_CODE (yyvsp[0].ttype) == IDENTIFIER_NODE)
                    yyval.ttype = IDENTIFIER_GLOBAL_VALUE (yyvsp[0].ttype);
@@ -7068,148 +7062,148 @@ case 663:
                ;
     break;}
 case 665:
-#line 3063 "parse.y"
+#line 3047 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 666:
-#line 3068 "parse.y"
+#line 3052 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
 case 667:
-#line 3070 "parse.y"
+#line 3054 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; got_scope = NULL_TREE; ;
     break;}
 case 668:
-#line 3077 "parse.y"
+#line 3061 "parse.y"
 { got_scope = void_type_node; ;
     break;}
 case 669:
-#line 3083 "parse.y"
+#line 3067 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 670:
-#line 3085 "parse.y"
+#line 3069 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 671:
-#line 3087 "parse.y"
+#line 3071 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 672:
-#line 3089 "parse.y"
+#line 3073 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ttype, NULL_TREE); ;
     break;}
 case 673:
-#line 3091 "parse.y"
+#line 3075 "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 674:
-#line 3095 "parse.y"
+#line 3079 "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 676:
-#line 3104 "parse.y"
+#line 3088 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 677:
-#line 3106 "parse.y"
+#line 3090 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 678:
-#line 3112 "parse.y"
+#line 3096 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 679:
-#line 3114 "parse.y"
+#line 3098 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 680:
-#line 3116 "parse.y"
+#line 3100 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
 case 681:
-#line 3118 "parse.y"
+#line 3102 "parse.y"
 { yyval.ttype = make_pointer_declarator (NULL_TREE, NULL_TREE); ;
     break;}
 case 682:
-#line 3120 "parse.y"
+#line 3104 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 683:
-#line 3122 "parse.y"
+#line 3106 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, yyvsp[0].ttype); ;
     break;}
 case 684:
-#line 3124 "parse.y"
+#line 3108 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[0].ftype.t, NULL_TREE); ;
     break;}
 case 685:
-#line 3126 "parse.y"
+#line 3110 "parse.y"
 { yyval.ttype = make_reference_declarator (NULL_TREE, NULL_TREE); ;
     break;}
 case 686:
-#line 3128 "parse.y"
+#line 3112 "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 687:
-#line 3132 "parse.y"
+#line 3116 "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 689:
-#line 3141 "parse.y"
+#line 3125 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 691:
-#line 3145 "parse.y"
+#line 3129 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 692:
-#line 3147 "parse.y"
+#line 3131 "parse.y"
 { yyval.ttype = make_call_declarator (yyval.ttype, empty_parms (), yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 693:
-#line 3149 "parse.y"
+#line 3133 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 694:
-#line 3151 "parse.y"
+#line 3135 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, yyval.ttype, NULL_TREE); ;
     break;}
 case 695:
-#line 3153 "parse.y"
+#line 3137 "parse.y"
 { yyval.ttype = make_call_declarator (NULL_TREE, yyvsp[-3].ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 696:
-#line 3155 "parse.y"
+#line 3139 "parse.y"
 { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 697:
-#line 3157 "parse.y"
+#line 3141 "parse.y"
 { set_quals_and_spec (yyval.ttype, yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 698:
-#line 3159 "parse.y"
+#line 3143 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
     break;}
 case 699:
-#line 3161 "parse.y"
+#line 3145 "parse.y"
 { yyval.ttype = build_parse_node (ARRAY_REF, NULL_TREE, NULL_TREE); ;
     break;}
 case 706:
-#line 3184 "parse.y"
+#line 3168 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids label declarations"); ;
     break;}
 case 709:
-#line 3195 "parse.y"
+#line 3179 "parse.y"
 { tree link;
                  for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
                    {
@@ -7220,181 +7214,181 @@ case 709:
                ;
     break;}
 case 710:
-#line 3209 "parse.y"
+#line 3193 "parse.y"
 {;
     break;}
 case 712:
-#line 3215 "parse.y"
+#line 3199 "parse.y"
 { yyval.ttype = begin_compound_stmt (0); ;
     break;}
 case 713:
-#line 3217 "parse.y"
+#line 3201 "parse.y"
 { yyval.ttype = finish_compound_stmt (0, yyvsp[-1].ttype); ;
     break;}
 case 714:
-#line 3222 "parse.y"
+#line 3206 "parse.y"
 {
                  yyval.ttype = begin_if_stmt ();
                  cond_stmt_keyword = "if";
                ;
     break;}
 case 715:
-#line 3227 "parse.y"
+#line 3211 "parse.y"
 { finish_if_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 716:
-#line 3229 "parse.y"
+#line 3213 "parse.y"
 { yyval.ttype = finish_then_clause (yyvsp[-3].ttype); ;
     break;}
 case 718:
-#line 3234 "parse.y"
+#line 3218 "parse.y"
 { yyval.ttype = begin_compound_stmt (0); ;
     break;}
 case 719:
-#line 3236 "parse.y"
+#line 3220 "parse.y"
 { yyval.ttype = finish_compound_stmt (0, yyvsp[-1].ttype); ;
     break;}
 case 720:
-#line 3241 "parse.y"
+#line 3225 "parse.y"
 {;
     break;}
 case 722:
-#line 3247 "parse.y"
+#line 3231 "parse.y"
 { finish_stmt (); ;
     break;}
 case 723:
-#line 3249 "parse.y"
+#line 3233 "parse.y"
 { finish_expr_stmt (yyvsp[-1].ttype); ;
     break;}
 case 724:
-#line 3251 "parse.y"
+#line 3235 "parse.y"
 { begin_else_clause (); ;
     break;}
 case 725:
-#line 3253 "parse.y"
+#line 3237 "parse.y"
 { 
                  finish_else_clause (yyvsp[-3].ttype); 
                  finish_if_stmt ();
                ;
     break;}
 case 726:
-#line 3258 "parse.y"
+#line 3242 "parse.y"
 { finish_if_stmt (); ;
     break;}
 case 727:
-#line 3260 "parse.y"
+#line 3244 "parse.y"
 {
                  yyval.ttype = begin_while_stmt ();
                  cond_stmt_keyword = "while";
                ;
     break;}
 case 728:
-#line 3265 "parse.y"
+#line 3249 "parse.y"
 { finish_while_stmt_cond (yyvsp[0].ttype, yyvsp[-1].ttype); ;
     break;}
 case 729:
-#line 3267 "parse.y"
+#line 3251 "parse.y"
 { finish_while_stmt (yyvsp[-3].ttype); ;
     break;}
 case 730:
-#line 3269 "parse.y"
+#line 3253 "parse.y"
 { yyval.ttype = begin_do_stmt (); ;
     break;}
 case 731:
-#line 3271 "parse.y"
+#line 3255 "parse.y"
 {
                  finish_do_body (yyvsp[-2].ttype);
                  cond_stmt_keyword = "do";
                ;
     break;}
 case 732:
-#line 3276 "parse.y"
+#line 3260 "parse.y"
 { finish_do_stmt (yyvsp[-1].ttype, yyvsp[-5].ttype); ;
     break;}
 case 733:
-#line 3278 "parse.y"
+#line 3262 "parse.y"
 { yyval.ttype = begin_for_stmt (); ;
     break;}
 case 734:
-#line 3280 "parse.y"
+#line 3264 "parse.y"
 { finish_for_init_stmt (yyvsp[-2].ttype); ;
     break;}
 case 735:
-#line 3282 "parse.y"
+#line 3266 "parse.y"
 { finish_for_cond (yyvsp[-1].ttype, yyvsp[-5].ttype); ;
     break;}
 case 736:
-#line 3284 "parse.y"
+#line 3268 "parse.y"
 { finish_for_expr (yyvsp[-1].ttype, yyvsp[-8].ttype); ;
     break;}
 case 737:
-#line 3286 "parse.y"
+#line 3270 "parse.y"
 { finish_for_stmt (yyvsp[-3].ttype, yyvsp[-10].ttype); ;
     break;}
 case 738:
-#line 3288 "parse.y"
+#line 3272 "parse.y"
 { begin_switch_stmt (); ;
     break;}
 case 739:
-#line 3290 "parse.y"
+#line 3274 "parse.y"
 { yyval.ttype = finish_switch_cond (yyvsp[-1].ttype); ;
     break;}
 case 740:
-#line 3292 "parse.y"
+#line 3276 "parse.y"
 { finish_switch_stmt (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 741:
-#line 3294 "parse.y"
+#line 3278 "parse.y"
 { finish_case_label (yyvsp[-1].ttype, NULL_TREE); ;
     break;}
 case 743:
-#line 3297 "parse.y"
+#line 3281 "parse.y"
 { finish_case_label (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
     break;}
 case 745:
-#line 3300 "parse.y"
+#line 3284 "parse.y"
 { finish_case_label (NULL_TREE, NULL_TREE); ;
     break;}
 case 747:
-#line 3303 "parse.y"
+#line 3287 "parse.y"
 { finish_break_stmt (); ;
     break;}
 case 748:
-#line 3305 "parse.y"
+#line 3289 "parse.y"
 { finish_continue_stmt (); ;
     break;}
 case 749:
-#line 3307 "parse.y"
+#line 3291 "parse.y"
 { finish_return_stmt (NULL_TREE); ;
     break;}
 case 750:
-#line 3309 "parse.y"
+#line 3293 "parse.y"
 { finish_return_stmt (yyvsp[-1].ttype); ;
     break;}
 case 751:
-#line 3311 "parse.y"
+#line 3295 "parse.y"
 { 
                  finish_asm_stmt (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
                                   NULL_TREE); 
                ;
     break;}
 case 752:
-#line 3317 "parse.y"
+#line 3301 "parse.y"
 { 
                  finish_asm_stmt (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
                                   NULL_TREE); 
                ;
     break;}
 case 753:
-#line 3323 "parse.y"
+#line 3307 "parse.y"
 { finish_asm_stmt (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE); ;
     break;}
 case 754:
-#line 3327 "parse.y"
+#line 3311 "parse.y"
 { finish_asm_stmt (yyvsp[-10].ttype, yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype); ;
     break;}
 case 755:
-#line 3329 "parse.y"
+#line 3313 "parse.y"
 { 
                  if (pedantic)
                    pedwarn ("ANSI C++ forbids computed gotos");
@@ -7402,29 +7396,29 @@ case 755:
                ;
     break;}
 case 756:
-#line 3335 "parse.y"
+#line 3319 "parse.y"
 { finish_goto_stmt (yyvsp[-1].ttype); ;
     break;}
 case 757:
-#line 3337 "parse.y"
+#line 3321 "parse.y"
 { finish_stmt (); ;
     break;}
 case 758:
-#line 3339 "parse.y"
+#line 3323 "parse.y"
 { error ("label must be followed by statement");
                  yyungetc ('}', 0);
                  finish_stmt (); ;
     break;}
 case 759:
-#line 3343 "parse.y"
+#line 3327 "parse.y"
 { finish_stmt (); ;
     break;}
 case 762:
-#line 3347 "parse.y"
+#line 3331 "parse.y"
 { do_local_using_decl (yyvsp[0].ttype); ;
     break;}
 case 764:
-#line 3353 "parse.y"
+#line 3337 "parse.y"
 {
                  if (! current_function_parms_stored)
                    store_parm_decls ();
@@ -7432,54 +7426,54 @@ case 764:
                ;
     break;}
 case 765:
-#line 3359 "parse.y"
+#line 3343 "parse.y"
 { 
                   expand_start_all_catch (); 
                 ;
     break;}
 case 766:
-#line 3363 "parse.y"
+#line 3347 "parse.y"
 {
                  expand_end_all_catch ();
                  yyval.itype = yyvsp[-3].itype;
                ;
     break;}
 case 767:
-#line 3371 "parse.y"
+#line 3355 "parse.y"
 { yyval.ttype = begin_try_block (); ;
     break;}
 case 768:
-#line 3373 "parse.y"
+#line 3357 "parse.y"
 { finish_try_block (yyvsp[-1].ttype); ;
     break;}
 case 769:
-#line 3375 "parse.y"
+#line 3359 "parse.y"
 { finish_handler_sequence (yyvsp[-3].ttype); ;
     break;}
 case 772:
-#line 3385 "parse.y"
+#line 3369 "parse.y"
 { yyval.ttype = begin_handler(); ;
     break;}
 case 773:
-#line 3387 "parse.y"
+#line 3371 "parse.y"
 { finish_handler_parms (yyvsp[-1].ttype); ;
     break;}
 case 774:
-#line 3389 "parse.y"
+#line 3373 "parse.y"
 { finish_handler (yyvsp[-3].ttype); ;
     break;}
 case 777:
-#line 3399 "parse.y"
+#line 3383 "parse.y"
 { expand_start_catch_block (NULL_TREE, NULL_TREE); ;
     break;}
 case 778:
-#line 3415 "parse.y"
+#line 3399 "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 779:
-#line 3422 "parse.y"
+#line 3406 "parse.y"
 { tree label;
                do_label:
                  label = define_label (input_filename, lineno, yyvsp[-1].ttype);
@@ -7488,98 +7482,98 @@ case 779:
                ;
     break;}
 case 780:
-#line 3429 "parse.y"
+#line 3413 "parse.y"
 { goto do_label; ;
     break;}
 case 781:
-#line 3431 "parse.y"
+#line 3415 "parse.y"
 { goto do_label; ;
     break;}
 case 782:
-#line 3433 "parse.y"
+#line 3417 "parse.y"
 { goto do_label; ;
     break;}
 case 783:
-#line 3438 "parse.y"
+#line 3422 "parse.y"
 { if (yyvsp[-1].ttype) cplus_expand_expr_stmt (yyvsp[-1].ttype); ;
     break;}
 case 785:
-#line 3441 "parse.y"
+#line 3425 "parse.y"
 { if (pedantic)
                    pedwarn ("ANSI C++ forbids compound statements inside for initializations");
                ;
     break;}
 case 786:
-#line 3450 "parse.y"
+#line 3434 "parse.y"
 { emit_line_note (input_filename, lineno);
                  yyval.ttype = NULL_TREE; ;
     break;}
 case 787:
-#line 3453 "parse.y"
+#line 3437 "parse.y"
 { emit_line_note (input_filename, lineno); ;
     break;}
 case 788:
-#line 3458 "parse.y"
+#line 3442 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 790:
-#line 3461 "parse.y"
+#line 3445 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 791:
-#line 3468 "parse.y"
+#line 3452 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 794:
-#line 3475 "parse.y"
+#line 3459 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, yyvsp[0].ttype); ;
     break;}
 case 795:
-#line 3480 "parse.y"
+#line 3464 "parse.y"
 { yyval.ttype = build_tree_list (yyval.ttype, yyvsp[-1].ttype); ;
     break;}
 case 796:
-#line 3485 "parse.y"
+#line 3469 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyval.ttype, NULL_TREE); ;
     break;}
 case 797:
-#line 3487 "parse.y"
+#line 3471 "parse.y"
 { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyval.ttype); ;
     break;}
 case 798:
-#line 3498 "parse.y"
+#line 3482 "parse.y"
 {
                  yyval.ttype = empty_parms();
                ;
     break;}
 case 800:
-#line 3503 "parse.y"
+#line 3487 "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 801:
-#line 3511 "parse.y"
+#line 3495 "parse.y"
 { yyval.ttype = finish_parmlist (yyval.ttype, 0); ;
     break;}
 case 802:
-#line 3513 "parse.y"
+#line 3497 "parse.y"
 { yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
     break;}
 case 803:
-#line 3516 "parse.y"
+#line 3500 "parse.y"
 { yyval.ttype = finish_parmlist (yyvsp[-1].ttype, 1); ;
     break;}
 case 804:
-#line 3518 "parse.y"
+#line 3502 "parse.y"
 { yyval.ttype = finish_parmlist (build_tree_list (NULL_TREE,
                                                         yyvsp[-1].ftype.t), 1); ;
     break;}
 case 805:
-#line 3521 "parse.y"
+#line 3505 "parse.y"
 { yyval.ttype = finish_parmlist (NULL_TREE, 1); ;
     break;}
 case 806:
-#line 3523 "parse.y"
+#line 3507 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -7591,7 +7585,7 @@ case 806:
                ;
     break;}
 case 807:
-#line 3533 "parse.y"
+#line 3517 "parse.y"
 {
                  /* This helps us recover from really nasty
                     parse errors, for example, a missing right
@@ -7604,99 +7598,99 @@ case 807:
                ;
     break;}
 case 808:
-#line 3548 "parse.y"
+#line 3532 "parse.y"
 { maybe_snarf_defarg (); ;
     break;}
 case 809:
-#line 3550 "parse.y"
+#line 3534 "parse.y"
 { yyval.ttype = yyvsp[0].ttype; ;
     break;}
 case 812:
-#line 3561 "parse.y"
+#line 3545 "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 813:
-#line 3564 "parse.y"
+#line 3548 "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 814:
-#line 3567 "parse.y"
+#line 3551 "parse.y"
 { check_for_new_type ("in a parameter list", yyvsp[0].ftype);
                  yyval.ttype = chainon (yyval.ttype, yyvsp[0].ftype.t); ;
     break;}
 case 815:
-#line 3570 "parse.y"
+#line 3554 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
     break;}
 case 816:
-#line 3572 "parse.y"
+#line 3556 "parse.y"
 { yyval.ttype = chainon (yyval.ttype, build_tree_list (yyvsp[0].ttype, yyvsp[-2].ttype)); ;
     break;}
 case 818:
-#line 3578 "parse.y"
+#line 3562 "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 819:
-#line 3588 "parse.y"
+#line 3572 "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 820:
-#line 3592 "parse.y"
+#line 3576 "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 821:
-#line 3595 "parse.y"
+#line 3579 "parse.y"
 { yyval.ftype.t = build_tree_list (build_decl_list (NULL_TREE, yyvsp[-1].ftype.t),
                                          yyvsp[0].ttype); 
                  yyval.ftype.new_type_flag = yyvsp[-1].ftype.new_type_flag; ;
     break;}
 case 822:
-#line 3599 "parse.y"
+#line 3583 "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 823:
-#line 3603 "parse.y"
+#line 3587 "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 824:
-#line 3607 "parse.y"
+#line 3591 "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 825:
-#line 3614 "parse.y"
+#line 3598 "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 826:
-#line 3617 "parse.y"
+#line 3601 "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 829:
-#line 3628 "parse.y"
+#line 3612 "parse.y"
 { see_typename (); ;
     break;}
 case 830:
-#line 3633 "parse.y"
+#line 3617 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  yyval.ttype = build_tree_list (integer_type_node, NULL_TREE);
                ;
     break;}
 case 831:
-#line 3638 "parse.y"
+#line 3622 "parse.y"
 {
                  error ("type specifier omitted for parameter");
                  if (TREE_CODE (yyval.ttype) == SCOPE_REF
@@ -7707,193 +7701,193 @@ case 831:
                ;
     break;}
 case 832:
-#line 3650 "parse.y"
+#line 3634 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 833:
-#line 3652 "parse.y"
+#line 3636 "parse.y"
 { yyval.ttype = yyvsp[-1].ttype; ;
     break;}
 case 834:
-#line 3654 "parse.y"
+#line 3638 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, NULL_TREE); ;
     break;}
 case 835:
-#line 3659 "parse.y"
+#line 3643 "parse.y"
 { yyval.ttype = build_decl_list (NULL_TREE, groktypename(yyvsp[0].ftype.t)); ;
     break;}
 case 837:
-#line 3665 "parse.y"
+#line 3649 "parse.y"
 {
                  TREE_CHAIN (yyvsp[0].ttype) = yyval.ttype;
                  yyval.ttype = yyvsp[0].ttype;
                ;
     break;}
 case 838:
-#line 3673 "parse.y"
+#line 3657 "parse.y"
 { yyval.ttype = NULL_TREE; ;
     break;}
 case 839:
-#line 3675 "parse.y"
+#line 3659 "parse.y"
 { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 840:
-#line 3677 "parse.y"
+#line 3661 "parse.y"
 { yyval.ttype = make_reference_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
     break;}
 case 841:
-#line 3679 "parse.y"
+#line 3663 "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 842:
-#line 3686 "parse.y"
+#line 3670 "parse.y"
 { got_scope = NULL_TREE; ;
     break;}
 case 843:
-#line 3691 "parse.y"
+#line 3675 "parse.y"
 { yyval.ttype = ansi_opname[MULT_EXPR]; ;
     break;}
 case 844:
-#line 3693 "parse.y"
+#line 3677 "parse.y"
 { yyval.ttype = ansi_opname[TRUNC_DIV_EXPR]; ;
     break;}
 case 845:
-#line 3695 "parse.y"
+#line 3679 "parse.y"
 { yyval.ttype = ansi_opname[TRUNC_MOD_EXPR]; ;
     break;}
 case 846:
-#line 3697 "parse.y"
+#line 3681 "parse.y"
 { yyval.ttype = ansi_opname[PLUS_EXPR]; ;
     break;}
 case 847:
-#line 3699 "parse.y"
+#line 3683 "parse.y"
 { yyval.ttype = ansi_opname[MINUS_EXPR]; ;
     break;}
 case 848:
-#line 3701 "parse.y"
+#line 3685 "parse.y"
 { yyval.ttype = ansi_opname[BIT_AND_EXPR]; ;
     break;}
 case 849:
-#line 3703 "parse.y"
+#line 3687 "parse.y"
 { yyval.ttype = ansi_opname[BIT_IOR_EXPR]; ;
     break;}
 case 850:
-#line 3705 "parse.y"
+#line 3689 "parse.y"
 { yyval.ttype = ansi_opname[BIT_XOR_EXPR]; ;
     break;}
 case 851:
-#line 3707 "parse.y"
+#line 3691 "parse.y"
 { yyval.ttype = ansi_opname[BIT_NOT_EXPR]; ;
     break;}
 case 852:
-#line 3709 "parse.y"
+#line 3693 "parse.y"
 { yyval.ttype = ansi_opname[COMPOUND_EXPR]; ;
     break;}
 case 853:
-#line 3711 "parse.y"
+#line 3695 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 854:
-#line 3713 "parse.y"
+#line 3697 "parse.y"
 { yyval.ttype = ansi_opname[LT_EXPR]; ;
     break;}
 case 855:
-#line 3715 "parse.y"
+#line 3699 "parse.y"
 { yyval.ttype = ansi_opname[GT_EXPR]; ;
     break;}
 case 856:
-#line 3717 "parse.y"
+#line 3701 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 857:
-#line 3719 "parse.y"
+#line 3703 "parse.y"
 { yyval.ttype = ansi_assopname[yyvsp[0].code]; ;
     break;}
 case 858:
-#line 3721 "parse.y"
+#line 3705 "parse.y"
 { yyval.ttype = ansi_opname [MODIFY_EXPR]; ;
     break;}
 case 859:
-#line 3723 "parse.y"
+#line 3707 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 860:
-#line 3725 "parse.y"
+#line 3709 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 861:
-#line 3727 "parse.y"
+#line 3711 "parse.y"
 { yyval.ttype = ansi_opname[POSTINCREMENT_EXPR]; ;
     break;}
 case 862:
-#line 3729 "parse.y"
+#line 3713 "parse.y"
 { yyval.ttype = ansi_opname[PREDECREMENT_EXPR]; ;
     break;}
 case 863:
-#line 3731 "parse.y"
+#line 3715 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_ANDIF_EXPR]; ;
     break;}
 case 864:
-#line 3733 "parse.y"
+#line 3717 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_ORIF_EXPR]; ;
     break;}
 case 865:
-#line 3735 "parse.y"
+#line 3719 "parse.y"
 { yyval.ttype = ansi_opname[TRUTH_NOT_EXPR]; ;
     break;}
 case 866:
-#line 3737 "parse.y"
+#line 3721 "parse.y"
 { yyval.ttype = ansi_opname[COND_EXPR]; ;
     break;}
 case 867:
-#line 3739 "parse.y"
+#line 3723 "parse.y"
 { yyval.ttype = ansi_opname[yyvsp[0].code]; ;
     break;}
 case 868:
-#line 3741 "parse.y"
+#line 3725 "parse.y"
 { yyval.ttype = ansi_opname[COMPONENT_REF]; ;
     break;}
 case 869:
-#line 3743 "parse.y"
+#line 3727 "parse.y"
 { yyval.ttype = ansi_opname[MEMBER_REF]; ;
     break;}
 case 870:
-#line 3745 "parse.y"
+#line 3729 "parse.y"
 { yyval.ttype = ansi_opname[CALL_EXPR]; ;
     break;}
 case 871:
-#line 3747 "parse.y"
+#line 3731 "parse.y"
 { yyval.ttype = ansi_opname[ARRAY_REF]; ;
     break;}
 case 872:
-#line 3749 "parse.y"
+#line 3733 "parse.y"
 { yyval.ttype = ansi_opname[NEW_EXPR]; ;
     break;}
 case 873:
-#line 3751 "parse.y"
+#line 3735 "parse.y"
 { yyval.ttype = ansi_opname[DELETE_EXPR]; ;
     break;}
 case 874:
-#line 3753 "parse.y"
+#line 3737 "parse.y"
 { yyval.ttype = ansi_opname[VEC_NEW_EXPR]; ;
     break;}
 case 875:
-#line 3755 "parse.y"
+#line 3739 "parse.y"
 { yyval.ttype = ansi_opname[VEC_DELETE_EXPR]; ;
     break;}
 case 876:
-#line 3758 "parse.y"
+#line 3742 "parse.y"
 { yyval.ttype = grokoptypename (yyvsp[-1].ftype.t, yyvsp[0].ttype); ;
     break;}
 case 877:
-#line 3760 "parse.y"
+#line 3744 "parse.y"
 { yyval.ttype = ansi_opname[ERROR_MARK]; ;
     break;}
 }
    /* the action file gets copied in in place of this dollarsign */
-#line 498 "/usr/cygnus/gnupro-98r2/share/bison.simple"
+#line 498 "/usr/lib/bison.simple"
 \f
   yyvsp -= yylen;
   yyssp -= yylen;
@@ -8089,7 +8083,7 @@ yyerrhandle:
   yystate = yyn;
   goto yynewstate;
 }
-#line 3763 "parse.y"
+#line 3747 "parse.y"
 
 
 #ifdef SPEW_DEBUG
index d5dee42efda5b47478106e6657370535aaf03c90..476fdcf9f92ea34a3a33a5327cee721f9c6f5941 100644 (file)
@@ -2138,7 +2138,8 @@ structsp:
                  if (!processing_template_decl)
                    cp_pedwarn ("using `typename' outside of template"); }
        /* C++ extensions, merged with C to avoid shift/reduce conflicts */
-       | class_head left_curly 
+       | class_head '{'
+                { $<ttype>1 = begin_class_definition ($<ttype>1); }
           opt.component_decl_list '}' maybe_attribute
                { 
                  int semi;
@@ -2147,7 +2148,7 @@ structsp:
                    yychar = YYLEX;
                  semi = yychar == ';';
 
-                 $<ttype>$ = finish_class_definition ($1, $5, semi); 
+                 $<ttype>$ = finish_class_definition ($1, $6, semi); 
                }
          pending_defargs
                 {
@@ -2156,7 +2157,7 @@ structsp:
          pending_inlines
                 {
                  finish_inline_definitions ();
-                 $$.t = $<ttype>6;
+                 $$.t = $<ttype>7;
                  $$.new_type_flag = 1; 
                }
        | class_head  %prec EMPTY
@@ -2404,11 +2405,6 @@ base_class_access_list:
                }
        ;
 
-left_curly:
-         '{'
-                { $<ttype>0 = begin_class_definition ($<ttype>0); }
-       ;
-
 opt.component_decl_list:
        | component_decl_list
        | opt.component_decl_list access_specifier component_decl_list
@@ -2758,14 +2754,7 @@ nonnested_type:
                  if (TREE_CODE ($1) == IDENTIFIER_NODE)
                    {
                      $$ = lookup_name ($1, 1);
-                     if (current_class_type
-                         && TYPE_BEING_DEFINED (current_class_type)
-                         && ! IDENTIFIER_CLASS_VALUE ($1))
-                       {
-                         /* Remember that this name has been used in the class
-                            definition, as per [class.scope0] */
-                         pushdecl_class_level ($$);
-                       }
+                     maybe_note_name_used_in_class ($1, $$);
                    }
                  else
                    $$ = $1;
@@ -2925,12 +2914,7 @@ nested_name_specifier_1:
                  if (TREE_CODE ($1) == IDENTIFIER_NODE)
                    {
                      $$ = lastiddecl;
-                     /* Remember that this name has been used in the class
-                        definition, as per [class.scope0] */
-                     if (current_class_type
-                         && TYPE_BEING_DEFINED (current_class_type)
-                         && ! IDENTIFIER_CLASS_VALUE ($1))
-                       pushdecl_class_level ($$);
+                     maybe_note_name_used_in_class ($1, $$);
                    }
                  got_scope = $$ = TYPE_MAIN_VARIANT (TREE_TYPE ($$));
                }
index a3c3a32836c59eaeb58198bda65bfb218c79ba89..28161b11c31f740c042064ee040d85ab62d8dc04 100644 (file)
@@ -1304,16 +1304,6 @@ check_explicit_specialization (declarator, decl, template_count, flags)
       if (declarator == error_mark_node)
        return error_mark_node;
 
-      if (TREE_CODE (TREE_OPERAND (declarator, 0)) == LOOKUP_EXPR)
-       {
-         /* A friend declaration.  We can't do much, because we don't
-          know what this resolves to, yet.  */
-         my_friendly_assert (is_friend != 0, 0);
-         my_friendly_assert (!explicit_instantiation, 0);
-         SET_DECL_IMPLICIT_INSTANTIATION (decl);
-         return decl;
-       } 
-
       if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype))
        {
          if (!explicit_instantiation)
@@ -1340,6 +1330,15 @@ check_explicit_specialization (declarator, decl, template_count, flags)
 
          return decl;
        }
+      else if (TREE_CODE (TREE_OPERAND (declarator, 0)) == LOOKUP_EXPR)
+       {
+         /* A friend declaration.  We can't do much, because we don't
+          know what this resolves to, yet.  */
+         my_friendly_assert (is_friend != 0, 0);
+         my_friendly_assert (!explicit_instantiation, 0);
+         SET_DECL_IMPLICIT_INSTANTIATION (decl);
+         return decl;
+       } 
       else if (ctype != NULL_TREE 
               && (TREE_CODE (TREE_OPERAND (declarator, 0)) ==
                   IDENTIFIER_NODE))
@@ -1598,7 +1597,11 @@ void
 check_template_shadow (decl)
      tree decl;
 {
-  tree olddecl = IDENTIFIER_VALUE (DECL_NAME (decl));
+  tree olddecl;
+
+  if (TREE_CODE (decl) == OVERLOAD)
+    decl = OVL_CURRENT (decl);
+  olddecl = IDENTIFIER_VALUE (DECL_NAME (decl));
 
   if (current_template_parms && olddecl)
     {
@@ -1888,8 +1891,8 @@ build_template_decl (decl, parms)
   if (DECL_LANG_SPECIFIC (decl))
     {
       DECL_CLASS_CONTEXT (tmpl) = DECL_CLASS_CONTEXT (decl);
-      DECL_STATIC_FUNCTION_P (tmpl) = 
-       DECL_STATIC_FUNCTION_P (decl);
+      DECL_STATIC_FUNCTION_P (tmpl) = DECL_STATIC_FUNCTION_P (decl);
+      DECL_CONSTRUCTOR_P (tmpl) = DECL_CONSTRUCTOR_P (decl);
     }
 
   return tmpl;
index c4c365b147c8d373c85a22c5b3dd0a6d4955d2ff..5f4a76fe6cc19c5605ad0dd3ba921e4ce6564a8c 100644 (file)
@@ -89,7 +89,6 @@ static int hides PROTO((tree, tree));
 static tree virtual_context PROTO((tree, tree, tree));
 static tree dfs_check_overlap PROTO((tree, void *));
 static tree dfs_no_overlap_yet PROTO((tree, void *));
-static void envelope_add_decl PROTO((tree, tree, tree *));
 static int get_base_distance_recursive
        PROTO((tree, int, int, int, int *, tree *, tree,
               int, int *, int, int));
@@ -111,8 +110,8 @@ static tree dfs_find_vbases PROTO((tree, void *));
 static tree dfs_clear_vbase_slots PROTO((tree, void *));
 static tree dfs_init_vbase_pointers PROTO((tree, void *));
 static tree dfs_get_vbase_types PROTO((tree, void *));
-static tree dfs_pushdecls PROTO((tree, void *));
-static tree dfs_compress_decls PROTO((tree, void *));
+static tree dfs_push_type_decls PROTO((tree, void *));
+static tree dfs_push_decls PROTO((tree, void *));
 static tree dfs_unuse_fields PROTO((tree, void *));
 static tree add_conversions PROTO((tree, void *));
 static tree get_virtuals_named_this PROTO((tree, tree));
@@ -150,6 +149,8 @@ static tree dfs_assert_unmarked_p PROTO ((tree, void *));
 static void assert_canonical_unmarked PROTO ((tree));
 static int protected_accessible_p PROTO ((tree, tree, tree, tree));
 static int friend_accessible_p PROTO ((tree, tree, tree, tree));
+static void setup_class_bindings PROTO ((tree, int));
+static int template_self_reference_p PROTO ((tree, tree));
 
 /* Allocate a level of searching.  */
 
@@ -1175,6 +1176,25 @@ lookup_field_queue_p (binfo, data)
     return binfo;
 }
 
+/* Within the scope of a template class, you can refer to the
+   particular to the current specialization with the name of the
+   template itself.  For example:
+   
+     template <typename T> struct S { S* sp; }
+
+   Returns non-zero if DECL is such a declaration in a class TYPE.  */
+
+static int
+template_self_reference_p (type, decl)
+     tree type;
+     tree decl;
+{
+  return  (CLASSTYPE_USE_TEMPLATE (type)
+          && TREE_CODE (decl) == TYPE_DECL
+          && DECL_ARTIFICIAL (decl)
+          && DECL_NAME (decl) == constructor_name (type));
+}
+
 /* DATA is really a struct lookup_field_info.  Look for a field with
    the name indicated there in BINFO.  If this function returns a
    non-NULL value it is the result of the lookup.  Called from
@@ -1206,6 +1226,11 @@ lookup_field_r (binfo, data)
   if (!nval)
     return NULL_TREE;
 
+  /* You must name a template base class with a template-id.  */
+  if (!same_type_p (type, lfi->type) 
+      && template_self_reference_p (type, nval))
+    return NULL_TREE;
+
   from_dep_base_p = dependent_base_p (binfo);
   if (lfi->from_dep_base_p && !from_dep_base_p)
     {
@@ -1266,7 +1291,12 @@ lookup_field_r (binfo, data)
        {
          nval = purpose_member (lfi->name, CLASSTYPE_TAGS (type));
          if (nval)
-           nval = TYPE_MAIN_DECL (TREE_VALUE (nval));
+           {
+             nval = TYPE_MAIN_DECL (TREE_VALUE (nval));
+             if (!same_type_p (type, lfi->type)
+                 && template_self_reference_p (type, nval))
+               nval = NULL_TREE;
+           }
        }
 
       if (nval)
@@ -1300,13 +1330,15 @@ lookup_field_r (binfo, data)
 }
 
 /* Look for a memer named NAME in an inheritance lattice dominated by
-   XBASETYPE.  PROTECT is zero if we can avoid computing access
-   information, otherwise it is 1.  WANT_TYPE is 1 when we should only
-   return TYPE_DECLs, if no TYPE_DECL can be found return NULL_TREE.
+   XBASETYPE.  PROTECT is 0 or two, we do not check access.  If it is
+   1, we enforce accessibility.  If PROTECT is zero, then, for an
+   ambiguous lookup, we return NULL.  If PROTECT is 1, we issue an
+   error message.  If PROTECT is two 2, we return a TREE_LIST whose
+   TREE_PURPOSE is error_mark_node and whose TREE_VALUE is the list of
+   ambiguous candidates.
 
-   It was not clear what should happen if WANT_TYPE is set, and an
-   ambiguity is found.  At least one use (lookup_name) to not see
-   the error.  */
+   WANT_TYPE is 1 when we should only return TYPE_DECLs, if no
+   TYPE_DECL can be found return NULL_TREE.  */
 
 tree
 lookup_member (xbasetype, name, protect, want_type)
@@ -1324,13 +1356,6 @@ lookup_member (xbasetype, name, protect, want_type)
      checks.  Whereas rval is only set if a proper (not hidden)
      non-function member is found.  */
 
-  /* rval_binfo_h and binfo_h are binfo values used when we perform the
-     hiding checks, as virtual base classes may not be shared.  The strategy
-     is we always go into the binfo hierarchy owned by TYPE_BINFO of
-     virtual base classes, as we cross virtual base class lines.  This way
-     we know that binfo of a virtual base class will always == itself when
-     found along any line.  (mrs)  */
-
   const char *errstr = 0;
 
   if (xbasetype == current_class_type && TYPE_BEING_DEFINED (xbasetype)
@@ -1379,6 +1404,21 @@ lookup_member (xbasetype, name, protect, want_type)
   if (!protect && lfi.ambiguous)
     return NULL_TREE;
   
+  if (protect == 2) 
+    {
+      if (lfi.ambiguous)
+       {
+         /* This flag tells hack_identifier that the lookup is
+            ambiguous.  */
+         TREE_NONLOCAL_FLAG (lfi.ambiguous) = 1;
+         return scratch_tree_cons (error_mark_node,
+                                   lfi.ambiguous,
+                                   NULL_TREE);
+       }
+      else
+       protect = 0;
+    }
+
   /* [class.access]
 
      In the case of overloaded function names, access control is
@@ -2814,107 +2854,6 @@ note_debug_info_needed (type)
 \f
 /* Subroutines of push_class_decls ().  */
 
-/* Add in a decl to the envelope.  */
-static void
-envelope_add_decl (type, decl, values)
-     tree type, decl, *values;
-{
-  tree context, *tmp;
-  tree name = DECL_NAME (decl);
-  int dont_add = 0;
-
-  /* Yet Another Implicit Typename Kludge:  Since we don't tsubst
-     the members for partial instantiations, DECL_CONTEXT (decl) is wrong.
-     But pretend it's right for this function.  */
-  if (processing_template_decl)
-    type = DECL_REAL_CONTEXT (decl);
-
-  /* virtual base names are always unique.  */
-  if (VBASE_NAME_P (name))
-    *values = NULL_TREE;
-
-  /* Possible ambiguity.  If its defining type(s)
-     is (are all) derived from us, no problem.  */
-  else if (*values && TREE_CODE (*values) != TREE_LIST)
-    {
-      tree value = *values;
-      /* Only complain if we shadow something we can access.  */
-      if (warn_shadow && TREE_CODE (decl) == FUNCTION_DECL
-         && ((DECL_LANG_SPECIFIC (*values)
-              && DECL_CLASS_CONTEXT (value) == current_class_type)
-             || ! TREE_PRIVATE (value)))
-       /* Should figure out access control more accurately.  */
-       {
-         cp_warning_at ("member `%#D' is shadowed", value);
-         cp_warning_at ("by member function `%#D'", decl);
-         warning ("in this context");
-       }
-
-      context = DECL_REAL_CONTEXT (value);
-
-      if (context == type)
-       {
-         if (TREE_CODE (value) == TYPE_DECL
-             && DECL_ARTIFICIAL (value))
-           *values = NULL_TREE;
-         else
-           dont_add = 1;
-       }
-      else if (type == current_class_type
-              || DERIVED_FROM_P (context, type))
-       {
-         /* Don't add in *values to list */
-         *values = NULL_TREE;
-       }
-      else
-       *values = build_tree_list (NULL_TREE, value);
-    }
-  else
-    for (tmp = values; *tmp;)
-      {
-       tree value = TREE_VALUE (*tmp);
-       my_friendly_assert (TREE_CODE (value) != TREE_LIST, 999);
-       context = (TREE_CODE (value) == FUNCTION_DECL
-                  && DECL_VIRTUAL_P (value))
-         ? DECL_CLASS_CONTEXT (value)
-           : DECL_CONTEXT (value);
-
-       if (type == current_class_type
-           || DERIVED_FROM_P (context, type))
-         {
-           /* remove *tmp from list */
-           *tmp = TREE_CHAIN (*tmp);
-         }
-       else
-         tmp = &TREE_CHAIN (*tmp);
-      }
-
-  if (! dont_add)
-    {
-      /* Put the new contents in our envelope.  */
-      if (TREE_CODE (decl) == FUNCTION_DECL)
-       {
-         *values = tree_cons (name, decl, *values);
-         TREE_NONLOCAL_FLAG (*values) = 1;
-         TREE_TYPE (*values) = unknown_type_node;
-       }
-      else
-       {
-         if (*values)
-           {
-             *values = tree_cons (NULL_TREE, decl, *values);
-             /* Mark this as a potentially ambiguous member.  */
-             /* Leaving TREE_TYPE blank is intentional.
-                We cannot use `error_mark_node' (lookup_name)
-                or `unknown_type_node' (all member functions use this).  */
-             TREE_NONLOCAL_FLAG (*values) = 1;
-           }
-         else
-           *values = decl;
-       }
-    }
-}
-
 /* Returns 1 iff BINFO is a base we shouldn't really be able to see into,
    because it (or one of the intermediate bases) depends on template parms.  */
 
@@ -2932,182 +2871,133 @@ dependent_base_p (binfo)
   return 0;
 }
 
-/* Add the instance variables which this class contributed to the
-   current class binding contour.  When a redefinition occurs, if the
-   redefinition is strictly within a single inheritance path, we just
-   overwrite the old declaration with the new.  If the fields are not
-   within a single inheritance path, we must cons them.
-
-   In order to know what decls are new (stemming from the current
-   invocation of push_class_decls) we enclose them in an "envelope",
-   which is a TREE_LIST node where the TREE_PURPOSE slot contains the
-   new decl (or possibly a list of competing ones), the TREE_VALUE slot
-   points to the old value and the TREE_CHAIN slot chains together all
-   envelopes which needs to be "opened" in push_class_decls.  Opening an
-   envelope means: push the old value onto the class_shadowed list,
-   install the new one and if it's a TYPE_DECL do the same to the
-   IDENTIFIER_TYPE_VALUE.  Such an envelope is recognized by seeing that
-   the TREE_PURPOSE slot is non-null, and that it is not an identifier.
-   Because if it is, it could be a set of overloaded methods from an
-   outer scope.  */
-
-static tree
-dfs_pushdecls (binfo, data)
-     tree binfo;
-     void *data;
+static void
+setup_class_bindings (name, type_binding_p)
+     tree name;
+     int type_binding_p;
 {
-  tree *closed_envelopes = (tree *) data;
-  tree type = BINFO_TYPE (binfo);
-  tree fields;
-  tree method_vec;
-  int dummy = 0;
+  tree type_binding = NULL_TREE;
+  tree value_binding;
 
-  /* Only record types if we're a template base.  */
-  if (processing_template_decl && type != current_class_type
-      && dependent_base_p (binfo))
-    dummy = 1;
+  /* If we've already done the lookup for this declaration, we're
+     done.  */
+  if (IDENTIFIER_CLASS_VALUE (name))
+    return;
 
-  for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
+  /* First, deal with the type binding.  */
+  if (type_binding_p)
     {
-      if (dummy && TREE_CODE (fields) != TYPE_DECL)
-       continue;
-
-      /* Unmark so that if we are in a constructor, and then find that
-        this field was initialized by a base initializer,
-        we can emit an error message.  */
-      if (TREE_CODE (fields) == FIELD_DECL)
-       TREE_USED (fields) = 0;
-
-      /* Recurse into anonymous unions.  */
-      if (DECL_NAME (fields) == NULL_TREE
-         && TREE_CODE (TREE_TYPE (fields)) == UNION_TYPE)
-       {
-         dfs_pushdecls (TYPE_BINFO (TREE_TYPE (fields)), data);
-         continue;
-       }
-
-      if (DECL_NAME (fields))
-       {
-         tree name = DECL_NAME (fields);
-         tree 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.  */
-         maybe_push_cache_obstack ();
-         if (class_value == NULL_TREE || TREE_CODE (class_value) != TREE_LIST
-             || TREE_PURPOSE (class_value) == NULL_TREE
-             || TREE_CODE (TREE_PURPOSE (class_value)) == IDENTIFIER_NODE)
-           {
-             /* See comment above for a description of envelopes.  */
-             *closed_envelopes = tree_cons (NULL_TREE, class_value,
-                                            *closed_envelopes);
-             IDENTIFIER_CLASS_VALUE (name) = *closed_envelopes;
-             class_value = IDENTIFIER_CLASS_VALUE (name);
-           }
-
-         envelope_add_decl (type, fields, &TREE_PURPOSE (class_value));
-         pop_obstacks ();
-       }
+      type_binding = lookup_member (current_class_type, name,
+                                   /*protect=*/2,
+                                   /*want_type=*/1);
+      if (TREE_CODE (type_binding) == TREE_LIST 
+         && TREE_PURPOSE (type_binding) == error_mark_node)
+       /* NAME is ambiguous.  */
+       push_class_level_binding (name, TREE_VALUE (type_binding));
+      else
+       pushdecl_class_level (type_binding);
     }
 
-  method_vec = CLASS_TYPE_P (type) ? CLASSTYPE_METHOD_VEC (type) : NULL_TREE;
-  if (method_vec && ! dummy)
+  /* Now, do the value binding.  */
+  value_binding = lookup_member (current_class_type, name,
+                                /*protect=*/2,
+                                /*want_type=*/0);
+
+  if (type_binding_p
+      && (TREE_CODE (value_binding) == TYPE_DECL
+         || (TREE_CODE (value_binding) == TREE_LIST
+             && TREE_PURPOSE (value_binding) == error_mark_node
+             && (TREE_CODE (TREE_VALUE (TREE_VALUE (value_binding)))
+                 == TYPE_DECL))))
+    /* We found a type-binding, even when looking for a non-type
+       binding.  This means that we already processed this binding
+       above.  */
+    my_friendly_assert (type_binding_p, 19990401);
+  else
     {
-      tree *methods;
-      tree *end;
-
-      /* Farm out constructors and destructors.  */
-      end = TREE_VEC_END (method_vec);
-
-      for (methods = &TREE_VEC_ELT (method_vec, 2);
-          *methods && methods != end;
-          methods++)
+      if (TREE_CODE (value_binding) == TREE_LIST 
+         && TREE_PURPOSE (value_binding) == error_mark_node)
+       /* NAME is ambiguous.  */
+       push_class_level_binding (name, TREE_VALUE (value_binding));
+      else
        {
-         /* This will cause lookup_name to return a pointer
-            to the tree_list of possible methods of this name.  */
-         tree name;
-         tree class_value;
-
-         
-         name = DECL_NAME (OVL_CURRENT (*methods));
-         class_value = IDENTIFIER_CLASS_VALUE (name);
+         if (TREE_CODE (value_binding) == TREE_LIST)
+           /* NAME is some overloaded functions.  */
+           value_binding = TREE_VALUE (value_binding);
+         pushdecl_class_level (value_binding);
+       }
+    }
+}
 
-         maybe_push_cache_obstack ();
+/* Push class-level declarations for any names appearing in BINFO that
+   are TYPE_DECLS.  */
 
-         /* If the class value is not an envelope of the kind described in
-            the comment above, we create a new envelope.  */
-         if (class_value == NULL_TREE || TREE_CODE (class_value) != TREE_LIST
-             || TREE_PURPOSE (class_value) == NULL_TREE
-             || TREE_CODE (TREE_PURPOSE (class_value)) == IDENTIFIER_NODE)
-           {
-             /* See comment above for a description of envelopes.  */
-             *closed_envelopes = tree_cons (NULL_TREE, class_value,
-                                            *closed_envelopes);
-             IDENTIFIER_CLASS_VALUE (name) = *closed_envelopes;
-             class_value = IDENTIFIER_CLASS_VALUE (name);
-           }
+static tree
+dfs_push_type_decls (binfo, data)
+     tree binfo;
+     void *data ATTRIBUTE_UNUSED;
+{
+  tree type;
+  tree fields;
 
-         /* Here we try to rule out possible ambiguities.
-            If we can't do that, keep a TREE_LIST with possibly ambiguous
-            decls in there.  */
-         /* Arbitrarily choose the first function in the list.  This is OK
-            because this is only used for initial lookup; anything that
-            actually uses the function will look it up again.  */
-         envelope_add_decl (type, OVL_CURRENT (*methods),
-                            &TREE_PURPOSE (class_value));
-         pop_obstacks ();
-       }
-    }
+  type = BINFO_TYPE (binfo);
+  for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
+    if (DECL_NAME (fields) && TREE_CODE (fields) == TYPE_DECL
+       && !template_self_reference_p (type, fields))
+      setup_class_bindings (DECL_NAME (fields), /*type_binding_p=*/1);
 
   /* We can't just use BINFO_MARKED because envelope_add_decl uses
      DERIVED_FROM_P, which calls get_base_distance.  */
   SET_BINFO_PUSHDECLS_MARKED (binfo);
-  
+
   return NULL_TREE;
 }
 
-/* Consolidate unique (by name) member functions.  */
+/* Push class-level declarations for any names appearing in BINFO that
+   are not TYPE_DECLS.  */
 
 static tree
-dfs_compress_decls (binfo, data)
+dfs_push_decls (binfo, data)
      tree binfo;
-     void *data ATTRIBUTE_UNUSED;
+     void *data;
 {
-  tree type = BINFO_TYPE (binfo);
-  tree method_vec 
-    = CLASS_TYPE_P (type) ? CLASSTYPE_METHOD_VEC (type) : NULL_TREE;
+  tree type;
+  tree method_vec;
+  int dep_base_p;
 
-  if (processing_template_decl && type != current_class_type
-      && dependent_base_p (binfo))
-    /* We only record types if we're a template base.  */;
-  else if (method_vec != 0)
+  type = BINFO_TYPE (binfo);
+  dep_base_p = (processing_template_decl && type != current_class_type
+               && dependent_base_p (binfo));
+  if (!dep_base_p)
     {
-      /* Farm out constructors and destructors.  */
-      tree *methods;
-      tree *end = TREE_VEC_END (method_vec);
-
-      for (methods = &TREE_VEC_ELT (method_vec, 2); 
-          methods != end && *methods; methods++)
+      tree fields;
+      for (fields = TYPE_FIELDS (type); fields; fields = TREE_CHAIN (fields))
+       if (DECL_NAME (fields) 
+           && TREE_CODE (fields) != TYPE_DECL
+           && TREE_CODE (fields) != USING_DECL)
+         setup_class_bindings (DECL_NAME (fields), /*type_binding_p=*/0);
+       else if (TREE_CODE (fields) == FIELD_DECL
+                && ANON_UNION_TYPE_P (TREE_TYPE (fields)))
+         dfs_push_decls (TYPE_BINFO (TREE_TYPE (fields)), data);
+         
+      method_vec = (CLASS_TYPE_P (type) 
+                   ? CLASSTYPE_METHOD_VEC (type) : NULL_TREE);
+      if (method_vec)
        {
-         /* This is known to be an envelope of the kind described before
-            dfs_pushdecls.  */
-         tree class_value = 
-           IDENTIFIER_CLASS_VALUE (DECL_NAME (OVL_CURRENT (*methods)));
-         tree tmp = TREE_PURPOSE (class_value);
-
-         /* This was replaced in scope by somebody else.  Just leave it
-            alone.  */
-         if (TREE_CODE (tmp) != TREE_LIST)
-           continue;
-
-         if (TREE_CHAIN (tmp) == NULL_TREE
-             && TREE_VALUE (tmp)
-             && OVL_NEXT (TREE_VALUE (tmp)) == NULL_TREE)
-           {
-             TREE_PURPOSE (class_value) = TREE_VALUE (tmp);
-           }
+         tree *methods;
+         tree *end;
+
+         /* Farm out constructors and destructors.  */
+         end = TREE_VEC_END (method_vec);
+
+         for (methods = &TREE_VEC_ELT (method_vec, 2);
+              *methods && methods != end;
+              methods++)
+           setup_class_bindings (DECL_NAME (OVL_CURRENT (*methods)), 
+                                 /*type_binding_p=*/0);
        }
     }
+
   CLEAR_BINFO_PUSHDECLS_MARKED (binfo);
 
   return NULL_TREE;
@@ -3125,7 +3015,6 @@ push_class_decls (type)
      tree type;
 {
   struct obstack *ambient_obstack = current_obstack;
-  tree closed_envelopes = NULL_TREE;
   search_stack = push_search_level (search_stack, &search_obstack);
 
   /* Build up all the relevant bindings and such on the cache
@@ -3134,75 +3023,12 @@ push_class_decls (type)
   maybe_push_cache_obstack ();
 
   /* Push class fields into CLASS_VALUE scope, and mark.  */
-  dfs_walk (TYPE_BINFO (type), dfs_pushdecls, unmarked_pushdecls_p, 
-           &closed_envelopes);
+  dfs_walk (TYPE_BINFO (type), dfs_push_type_decls, unmarked_pushdecls_p, 0);
 
   /* Compress fields which have only a single entry
      by a given name, and unmark.  */
-  dfs_walk (TYPE_BINFO (type), dfs_compress_decls, marked_pushdecls_p,
-           0);
+  dfs_walk (TYPE_BINFO (type), dfs_push_decls, marked_pushdecls_p, 0);
 
-  /* Open up all the closed envelopes and push the contained decls into
-     class scope.  */
-  while (closed_envelopes)
-    {
-      tree new = TREE_PURPOSE (closed_envelopes);
-      tree id;
-
-      /* This is messy because the class value may be a *_DECL, or a
-        TREE_LIST of overloaded *_DECLs or even a TREE_LIST of ambiguous
-        *_DECLs.  The name is stored at different places in these three
-        cases.  */
-      if (TREE_CODE (new) == TREE_LIST)
-       {
-         if (TREE_PURPOSE (new) != NULL_TREE)
-           id = TREE_PURPOSE (new);
-         else
-           {
-             tree node = TREE_VALUE (new);
-
-             if (TREE_CODE (node) == TYPE_DECL
-                 && DECL_ARTIFICIAL (node)
-                 && IS_AGGR_TYPE (TREE_TYPE (node))
-                 && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (node)))
-               {
-                 tree t = CLASSTYPE_TI_TEMPLATE (TREE_TYPE (node));
-                 tree n = new;
-
-                 for (; n; n = TREE_CHAIN (n))
-                   {
-                     tree d = TREE_VALUE (n);
-                     if (TREE_CODE (d) == TYPE_DECL
-                         && DECL_ARTIFICIAL (node)
-                         && IS_AGGR_TYPE (TREE_TYPE (d))
-                         && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (d))
-                         && CLASSTYPE_TI_TEMPLATE (TREE_TYPE (d)) == t)
-                       /* OK */;
-                     else
-                       break;
-                   }
-
-                 if (n == NULL_TREE)
-                   new = t;
-               }
-             else while (TREE_CODE (node) == TREE_LIST)
-               node = TREE_VALUE (node);
-             id = DECL_NAME (node);
-           }
-       }
-      else
-       id = DECL_NAME (new);
-
-      /* Install the original class value in order to make
-        pushdecl_class_level work correctly.  */
-      IDENTIFIER_CLASS_VALUE (id) = TREE_VALUE (closed_envelopes);
-      if (TREE_CODE (new) == TREE_LIST)
-       push_class_level_binding (id, new);
-      else
-       pushdecl_class_level (new);
-      closed_envelopes = TREE_CHAIN (closed_envelopes);
-    }
-  
   /* Undo the call to maybe_push_cache_obstack above.  */
   pop_obstacks ();
 
index 0bbb1195da616576832e6b1597de41caa8748fcb..c0716d6c84a506ca700ab894a0de1c772965910d 100644 (file)
@@ -1295,7 +1295,7 @@ begin_class_definition (t)
       && TYPE_CONTEXT (t) && TYPE_P (TYPE_CONTEXT (t))
       && ! current_class_type)
     push_template_decl (TYPE_STUB_DECL (t));
-  pushclass (t, 0);
+  pushclass (t, 1);
   TYPE_BEING_DEFINED (t) = 1;
   /* Reset the interface data, at the earliest possible
      moment, as it might have been set via a class foo;
@@ -1419,6 +1419,10 @@ finish_member_declaration (decl)
          TREE_CHAIN (decl) = TYPE_FIELDS (current_class_type);
          TYPE_FIELDS (current_class_type) = decl;
        }
+
+      /* Enter the DECL into the scope of the class.  */
+      if (TREE_CODE (decl) != USING_DECL)
+       pushdecl_class_level (decl);
     }
 }
 
index 2601ce25edacbaa86a92d4a6c646a41b6c5cb733..e0b9eec7897075db0755f09a6a8cf49ab9070bef 100644 (file)
@@ -40,7 +40,7 @@ struct __class_type_info : public __user_type_info {
     const __user_type_info *base;
     USItype offset: 29;
     bool is_virtual: 1;
-    access access: 2;
+    enum access access: 2;
   };
 
   const base_info *base_list;
index 77cdf05674482d3d1768825e551f7c0eedd2b133..6016d91df0816f45b6f0e65a5c4d60c57172ab48 100644 (file)
@@ -2191,7 +2191,7 @@ build_component_ref (datum, component, basetype_path, protect)
                }
 
              ref = build (COMPONENT_REF, unknown_type_node,
-                          datum, fndecls);
+                          datum, TREE_VALUE (fndecls));
              return ref;
            }
 
@@ -2616,6 +2616,8 @@ build_x_function_call (function, params, decl)
                && current_class_type != NULL_TREE
                && (IDENTIFIER_CLASS_VALUE (TREE_PURPOSE (function))
                    == function))
+              || (TREE_CODE (function) == OVERLOAD
+                  && DECL_FUNCTION_MEMBER_P (OVL_CURRENT (function)))
               || TREE_CODE (function) == IDENTIFIER_NODE
               || TREE_CODE (type) == METHOD_TYPE
               || TYPE_PTRMEMFUNC_P (type));
@@ -2629,6 +2631,9 @@ build_x_function_call (function, params, decl)
     {
       tree basetype = NULL_TREE;
 
+      if (TREE_CODE (function) == OVERLOAD)
+       function = OVL_CURRENT (function);
+
       if (TREE_CODE (function) == FUNCTION_DECL
          || DECL_FUNCTION_TEMPLATE_P (function))
        {
@@ -2700,7 +2705,14 @@ build_x_function_call (function, params, decl)
       /* Undo what we did in build_component_ref.  */
       decl = TREE_OPERAND (function, 0);
       function = TREE_OPERAND (function, 1);
-      function = DECL_NAME (OVL_CURRENT (TREE_VALUE (function)));
+      function = DECL_NAME (OVL_CURRENT (function));
+
+      if (template_id)
+       {
+         TREE_OPERAND (template_id, 0) = function;
+         function = template_id;
+       }
+
       return build_method_call (decl, function, params,
                                NULL_TREE, LOOKUP_NORMAL);
     }
index abb956f87976bf2a0d12fa9911a71a66ce077d00..0e4c389b5060a16bfe4a32c1304bb5e1fbcc26a3 100644 (file)
@@ -123,7 +123,7 @@ public:
   template <class U>
   friend bool fooy(U u);
 
-  template <class T161> // ERROR - .*
+  template <class T161>
   friend bool foo(T161 u)
     {
       Xseven<T161, 5, int> obj;
diff --git a/gcc/testsuite/g++.old-deja/g++.other/lookup12.C b/gcc/testsuite/g++.old-deja/g++.other/lookup12.C
new file mode 100644 (file)
index 0000000..5c3143c
--- /dev/null
@@ -0,0 +1,21 @@
+// Build don't link:
+// Origin: Mark Mitchell <mark@codesourcery.com>
+
+struct B {
+  struct X {};
+};
+
+
+struct D : public B {
+  void X();
+
+  struct X x;
+
+  void f();
+};
+
+
+void D::f() 
+{
+  struct X y;
+}
index 57a9507b0b37f13f266c347b2874326f35d9c0bf..65dc9522a76dadc8f33621b54f8e5cd95a9bc05a 100644 (file)
@@ -3,8 +3,6 @@
 // Based on bug report by Klaus-Georg Adams
 // <Klaus-Georg.Adams@chemie.uni-karlsruhe.de>
 
-// crash test - XFAIL *-*-*
-
 struct bar {
   typedef bar t;
 };
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/lookup7.C b/gcc/testsuite/g++.old-deja/g++.pt/lookup7.C
new file mode 100644 (file)
index 0000000..9cc0d61
--- /dev/null
@@ -0,0 +1,14 @@
+// Build don't link:
+// Origin: Jason Merrill <jason@cygnus.com>
+
+struct A { typedef int B; };
+template <int B> struct C : public A { 
+  B b; 
+  void f();
+};
+
+
+template <int B>
+void C<B>::f() {
+  B b;
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/lookup8.C b/gcc/testsuite/g++.old-deja/g++.pt/lookup8.C
new file mode 100644 (file)
index 0000000..cc562bf
--- /dev/null
@@ -0,0 +1,15 @@
+// Build don't link:
+// Origin: Mark Mitchell <mark@codesourcery.com>
+
+template <class T>
+class X{};
+
+class Y : public X<int>
+{
+  void f();
+};
+
+void Y::f()
+{
+  X x; // ERROR - X is not a type.
+}