diff tests/agcl/examples/good/jrc.cpp @ 0:13d2b8934445

Import AnaGram (near-)release tree into Mercurial.
author David A. Holland
date Sat, 22 Dec 2007 17:52:45 -0500
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/agcl/examples/good/jrc.cpp	Sat Dec 22 17:52:45 2007 -0500
@@ -0,0 +1,2005 @@
+/*
+
+    Copyright (C) 1989,1990 James A. Roskind, All rights reserved.
+
+    This grammar was developed  and  written  by  James  A.  Roskind.
+    Copying  of  this  grammar  description, as a whole, is permitted
+    providing this notice is intact and applicable  in  all  complete
+    copies.   Translations as a whole to other parser generator input
+    languages  (or  grammar  description  languages)   is   permitted
+    provided  that  this  notice is intact and applicable in all such
+    copies,  along  with  a  disclaimer  that  the  contents  are   a
+    translation.   The reproduction of derived text, such as modified
+    versions of this grammar, or the output of parser generators,  is
+    permitted,  provided  the  resulting  work includes the copyright
+    notice "Portions Copyright (c)  1989,  1990  James  A.  Roskind".
+    Derived products, such as compilers, translators, browsers, etc.,
+    that  use  this  grammar,  must also provide the notice "Portions
+    Copyright  (c)  1989,  1990  James  A.  Roskind"  in   a   manner
+    appropriate  to  the  utility,  and in keeping with copyright law
+    (e.g.: EITHER displayed when first invoked/executed; OR displayed
+    continuously on display terminal; OR via placement in the  object
+    code  in  form  readable in a printout, with or near the title of
+    the work, or at the end of the file).  No royalties, licenses  or
+    commissions  of  any  kind are required to copy this grammar, its
+    translations, or derivative products, when the copies are made in
+    compliance with this notice. Persons or corporations that do make
+    copies in compliance with this notice may charge  whatever  price
+    is  agreeable  to  a  buyer, for such copies or derivative works.
+    THIS GRAMMAR IS PROVIDED ``AS IS'' AND  WITHOUT  ANY  EXPRESS  OR
+    IMPLIED  WARRANTIES,  INCLUDING,  WITHOUT LIMITATION, THE IMPLIED
+    WARRANTIES  OF  MERCHANTABILITY  AND  FITNESS  FOR  A  PARTICULAR
+    PURPOSE.
+
+    James A. Roskind
+    Independent Consultant
+    516 Latania Palm Drive
+    Indialantic FL, 32903
+    (407)729-4348
+    jar@ileaf.com
+    or ...!uunet!leafusa!jar
+
+
+ ******************************************************************************
+
+ Translation to AnaGram and Interfacing
+ Copyright 1993 Parsifal Software. All rights reserved.
+
+ This software is provided 'as-is', without any express or implied
+ warranty.  In no event will the authors be held liable for any damages
+ arising from the use of this software.
+
+ Permission is granted to anyone to use this software for any purpose,
+ including commercial applications, and to alter it and redistribute it
+ freely, subject to the following restrictions:
+
+ 1. The origin of this software must not be misrepresented; you must not
+    claim that you wrote the original software. If you use this software
+    in a product, an acknowledgment in the product documentation would be
+    appreciated but is not required.
+ 2. Altered source versions must be plainly marked as such, and must not be
+    misrepresented as being the original software.
+ 3. This notice may not be removed or altered from any source distribution.
+
+ ******************************************************************************
+
+*/
+
+#include "mpp.h"
+
+
+/*
+ * AnaGram, A System for Syntax Directed Programming
+ * File generated by: ...
+ *
+ * AnaGram Parsing Engine
+ * Copyright 1993-2002 Parsifal Software. All Rights Reserved.
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.  In no event will the authors be held liable for any damages
+ * arising from the use of this software.
+ *
+ * Permission is granted to anyone to use this software for any purpose,
+ * including commercial applications, and to alter it and redistribute it
+ * freely, subject to the following restrictions:
+ *
+ * 1. The origin of this software must not be misrepresented; you must not
+ *    claim that you wrote the original software. If you use this software
+ *    in a product, an acknowledgment in the product documentation would be
+ *    appreciated but is not required.
+ * 2. Altered source versions must be plainly marked as such, and must not be
+ *    misrepresented as being the original software.
+ * 3. This notice may not be removed or altered from any source distribution.
+ */
+
+#ifndef JRC_H
+#include "jrc.h"
+#endif
+
+#ifndef JRC_H
+#error Mismatched header file
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+
+#define RULE_CONTEXT (&((PCB).cs[(PCB).ssx]))
+#define ERROR_CONTEXT ((PCB).cs[(PCB).error_frame_ssx])
+#define CONTEXT ((PCB).cs[(PCB).ssx])
+
+
+
+cc_pcb_type cc_pcb;
+#define PCB cc_pcb
+#define CHANGE_REDUCTION(x) cc_change_reduction(cc_##x##_token)
+int cc_change_reduction(cc_token_type);
+
+#define INPUT_VALUE(type) *(type *) &(PCB).input_value
+
+#line - "jrc.syn"
+                                           // Embedded C
+
+#define SYNTAX_ERROR syntax_error(PCB.error_message)
+#define INPUT_CODE(T) (T).id
+
+static int typedef_flag = 0;
+static int use_count = 0;
+
+symbol_type_enum symbol_table[N_SYMBOLS];
+
+
+static void do_typedef(token t) {
+  if (typedef_flag == 0) return;
+  typedef_flag = 0;
+  symbol_table[t.handle] = typedef_name;
+}
+
+static token check_typedef(token t) {
+  if (symbol_table[t.handle] == typedef_name)
+    CHANGE_REDUCTION(TYPEDEFname);
+  return t;
+}
+
+// Member Functions for Class c_parser
+
+// Constructor
+
+/*
+  This parser has no provisions for multiple simultaneous parses or for
+  recursion. The purpose of use_count is to make sure that there is only one
+  copy of the parser active at any time.
+*/
+
+
+c_parser::c_parser() {
+  assert(use_count == 0);
+  use_count++;
+  typedef_flag = 0;
+  memset(symbol_table, 0, sizeof(symbol_table));
+  init_cc();                                // init parse
+}
+
+
+// Destructor
+
+c_parser::~c_parser() {
+  use_count--;                              // Makes parser available
+}
+
+
+// Reset Parser
+
+c_parser &reset(c_parser &c) {
+  typedef_flag = 0;
+  memset(symbol_table, 0, sizeof(symbol_table));
+  init_cc();                                // init parse
+  return c;
+}
+
+
+// Transmit token to c_parser
+
+/*
+  The overloaded operator "<<" is used to transmit data to a parser.
+  Newline tokens are filtered out, since they are passed along by the
+  token scanner only in case text output of the preprocessor is
+  required.
+
+  If the parser has encountered an error, there is no point in giving
+  it any further input.
+
+  Otherwise, the input_code and input_value fields of the pcb are set
+  up and cc() is called to deal with the token.
+*/
+
+token_sink &c_parser::operator << (token c) {
+  if (PCB.exit_flag != AG_RUNNING_CODE || (int) c.id == '\n') return *this;
+  PCB.input_code = c.id;
+  PCB.input_value = c;
+  cc();
+  return *this;
+}
+
+token_sink &c_parser::operator << (token *s) {
+  while (s->id != END_OF_FILE && PCB.exit_flag == AG_RUNNING_CODE) {
+    if ((int) s->id == 10) continue;
+    PCB.input_code = s->id;
+    PCB.input_value = *s++;
+    cc();
+  }
+  return *this;
+}
+
+#line - "jrc.cpp"
+
+#ifndef CONVERT_CASE
+#define CONVERT_CASE(c) (c)
+#endif
+#ifndef TAB_SPACING
+#define TAB_SPACING 8
+#endif
+
+static void ag_rp_1(void) {
+#line - "jrc.syn"
+  typedef_flag = 1;
+#line - "jrc.cpp"
+}
+
+static void ag_rp_2(int f) {
+#line - "jrc.syn"
+  typedef_flag = f;
+#line - "jrc.cpp"
+}
+
+static int ag_rp_3(void) {
+#line - "jrc.syn"
+int f = typedef_flag; typedef_flag = 0; return f;
+#line - "jrc.cpp"
+}
+
+static void ag_rp_4(token s) {
+#line - "jrc.syn"
+  do_typedef(s);
+#line - "jrc.cpp"
+}
+
+static token ag_rp_5(token t) {
+#line - "jrc.syn"
+  return check_typedef(t);
+#line - "jrc.cpp"
+}
+
+
+#ifndef AG_TRACE_FILE_NAME
+#define AG_TRACE_FILE_NAME "jrc.etr"
+#endif
+
+static void ag_trace_error(void) {
+  FILE *ag_file = fopen(AG_TRACE_FILE_NAME, "w");
+  int i;
+  if (ag_file == NULL) return;
+  fprintf(ag_file, "%d\n", (PCB).ssx);
+  for (i = 0; i < (PCB).ssx; i++) fprintf(ag_file, "%d\n", (PCB).ss[i]);
+  fprintf(ag_file, "%d\n", (PCB).sn);
+  fprintf(ag_file, "%d\n", (PCB).token_number);
+  fclose(ag_file);
+}
+
+
+#define READ_COUNTS 
+#define WRITE_COUNTS 
+#undef V
+#define V(i,t) (*t (&(PCB).vs[(PCB).ssx + i]))
+#undef VS
+#define VS(i) (PCB).vs[(PCB).ssx + i]
+
+#ifndef GET_CONTEXT
+#define GET_CONTEXT CONTEXT = (PCB).input_context
+#endif
+
+typedef enum {
+  ag_action_1,
+  ag_action_2,
+  ag_action_3,
+  ag_action_4,
+  ag_action_5,
+  ag_action_6,
+  ag_action_7,
+  ag_action_8,
+  ag_action_9,
+  ag_action_10,
+  ag_action_11,
+  ag_action_12
+} ag_parser_action;
+
+
+#ifndef NULL_VALUE_INITIALIZER
+#define NULL_VALUE_INITIALIZER = { 0 }
+#endif
+
+static cc_vs_type const ag_null_value NULL_VALUE_INITIALIZER;
+
+static const unsigned char far ag_rpx[] = {
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  2,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  5
+};
+
+#define AG_TCV(x) ag_tcv[(x)]
+
+static const unsigned char far ag_tcv[] = {
+    5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 40,  0,  0,
+    0, 43, 35,  0, 16, 18, 36, 37, 29, 38, 23, 42,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0, 67, 84, 49, 69, 50, 66,  0, 62, 77, 25,  0, 27, 71,142,
+   54, 78, 52, 26, 51, 46, 75, 72, 74, 70, 55, 79, 64, 73, 47, 76, 11, 13,
+    0, 20,  0, 21, 58,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,125, 60,127,
+   39,  0,  0, 10,  9,  8,  7,186,110,167,155,113,102,166,156,163,118,160,
+  137,108,117,164,165,159,115,116,111,168,114,119, 33,109,128,161,107,129,
+  120,112,103,162,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+    0,  0,  0,  0
+};
+
+#ifndef SYNTAX_ERROR
+#define SYNTAX_ERROR fprintf(stderr,"%s, line %d, column %d\n", \
+  (PCB).error_message, (PCB).line, (PCB).column)
+#endif
+
+#ifndef FIRST_LINE
+#define FIRST_LINE 1
+#endif
+
+#ifndef FIRST_COLUMN
+#define FIRST_COLUMN 1
+#endif
+
+#ifndef PARSER_STACK_OVERFLOW
+#define PARSER_STACK_OVERFLOW {fprintf(stderr, \
+   "\nParser stack overflow, line %d, column %d\n",\
+   (PCB).line, (PCB).column);}
+#endif
+
+#ifndef REDUCTION_TOKEN_ERROR
+#define REDUCTION_TOKEN_ERROR {fprintf(stderr, \
+    "\nReduction token error, line %d, column %d\n", \
+    (PCB).line, (PCB).column);}
+#endif
+
+
+#ifndef AG_NEWLINE
+#define AG_NEWLINE 10
+#endif
+
+#ifndef AG_RETURN
+#define AG_RETURN 13
+#endif
+
+#ifndef AG_FORMFEED
+#define AG_FORMFEED 12
+#endif
+
+#ifndef AG_TABCHAR
+#define AG_TABCHAR 9
+#endif
+
+static void ag_track(void) {
+  switch ((PCB).input_code) {
+  case AG_NEWLINE:
+    (PCB).column = 1, (PCB).line++;
+  case AG_RETURN:
+  case AG_FORMFEED:
+    break;
+  case AG_TABCHAR:
+    (PCB).column += (TAB_SPACING) - ((PCB).column - 1) % (TAB_SPACING);
+    break;
+  default:
+    (PCB).column++;
+  }
+  (PCB).read_flag = 1;
+}
+
+
+static void ag_prot(void) {
+  int ag_k;
+  ag_k = 128 - ++(PCB).btsx;
+  if (ag_k <= (PCB).ssx) {
+    ag_trace_error();
+    (PCB).exit_flag = AG_STACK_ERROR_CODE;
+    PARSER_STACK_OVERFLOW;
+    return;
+  }
+  (PCB).bts[(PCB).btsx] = (PCB).sn;
+  (PCB).bts[ag_k] = (PCB).ssx;
+  (PCB).vs[ag_k] = (PCB).vs[(PCB).ssx];
+  (PCB).ss[ag_k] = (PCB).ss[(PCB).ssx];
+}
+
+static void ag_undo(void) {
+  if ((PCB).drt == -1) return;
+  while ((PCB).btsx) {
+    int ag_k = 128 - (PCB).btsx;
+    (PCB).sn = (PCB).bts[(PCB).btsx--];
+    (PCB).ssx = (PCB).bts[ag_k];
+    (PCB).vs[(PCB).ssx] = (PCB).vs[ag_k];
+    (PCB).ss[(PCB).ssx] = (PCB).ss[ag_k];
+  }
+  (PCB).token_number = (cc_token_type) (PCB).drt;
+  (PCB).ssx = (PCB).dssx;
+  (PCB).sn = (PCB).dsn;
+  (PCB).drt = -1;
+}
+
+
+
+static const int far ag_rtt[] = {
+   15,106,  0
+};
+
+static const unsigned char far ag_tstt[] = {
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,36,16,5,0,1,3,4,15,82,83,85,86,87,88,89,91,92,94,95,96,97,98,99,101,
+  104,105,106,121,123,169,170,171,179,180,181,182,
+186,125,0,15,24,106,
+129,128,0,122,124,
+186,36,16,0,15,171,179,180,181,182,
+186,103,102,36,16,0,15,89,91,101,171,179,180,181,182,
+111,110,109,108,107,103,102,0,99,101,
+120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,102,0,99,101,
+  104,
+111,110,109,108,107,103,102,0,99,100,101,
+120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,102,0,99,100,
+  101,104,
+20,16,0,174,185,
+84,29,0,
+84,29,0,
+111,110,109,108,107,103,102,84,0,99,101,
+111,110,109,108,107,103,102,84,0,99,100,101,
+186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107,
+  103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121,
+  123,150,157,
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,36,16,0,15,89,99,101,104,105,106,121,123,171,179,180,181,182,
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,36,16,0,15,89,99,100,101,104,105,106,121,123,171,179,180,181,182,
+186,36,16,0,15,89,93,106,145,171,172,173,175,176,177,179,180,181,182,
+186,36,16,0,15,89,93,106,145,171,172,173,175,176,177,179,180,181,182,
+125,84,0,150,
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,36,16,5,0,15,82,83,85,86,87,88,89,91,92,94,95,96,97,98,99,101,104,
+  105,106,121,123,169,170,171,179,180,181,182,
+5,0,
+125,0,
+186,0,15,24,106,138,
+186,125,0,15,24,106,
+18,0,
+20,18,16,0,174,185,
+18,0,
+186,103,102,36,16,0,15,89,101,171,179,180,181,182,
+186,40,39,38,37,36,35,33,27,26,21,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,
+  32,41,44,45,48,53,56,57,59,61,63,65,80,
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,18,0,15,83,85,88,91,92,94,95,96,97,98,99,101,104,105,106,121,123,
+  140,141,143,146,
+20,0,
+186,36,16,0,15,89,179,180,181,
+186,36,16,0,15,89,93,106,145,172,173,175,176,177,179,180,181,
+186,36,16,0,15,89,93,106,145,172,173,175,176,177,179,180,181,
+186,36,16,0,15,89,93,106,145,172,173,175,176,177,179,180,181,
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,36,16,0,15,89,99,101,104,105,106,121,123,179,180,181,
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,36,16,0,15,89,99,100,101,104,105,106,121,123,179,180,181,
+186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107,
+  103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121,
+  123,150,
+186,168,167,166,165,164,163,162,161,159,156,155,137,129,128,127,125,120,119,
+  118,117,116,115,114,113,112,111,110,109,108,107,103,102,84,40,39,38,37,
+  36,35,33,27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,
+  44,45,48,53,56,57,59,61,63,65,81,82,83,85,86,87,88,91,92,94,95,96,97,98,
+  99,101,104,105,106,121,123,149,150,151,152,153,154,157,158,
+186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107,
+  103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121,
+  123,150,157,
+125,84,69,29,0,90,150,
+186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107,
+  103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121,
+  123,150,157,
+125,84,69,29,0,90,150,
+186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107,
+  103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121,
+  123,150,157,
+186,36,16,0,15,106,171,173,175,176,177,178,179,180,181,182,
+20,16,0,174,185,
+186,103,102,36,16,0,15,89,91,101,106,145,171,173,175,176,177,179,180,181,
+  182,
+125,0,150,
+84,69,29,0,90,
+186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107,
+  103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121,
+  123,150,157,
+125,0,150,
+84,69,29,0,90,
+186,0,15,24,106,138,
+127,69,29,0,139,
+127,29,0,
+125,0,
+186,137,129,128,120,119,118,117,116,115,114,113,112,103,102,0,85,91,94,97,
+  98,101,104,105,106,121,123,126,130,131,132,
+20,16,0,174,185,
+20,16,0,174,185,
+13,0,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,
+27,26,25,23,20,16,0,
+186,137,129,128,120,119,118,117,116,115,114,113,112,103,102,40,39,38,37,36,
+  35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30,31,32,34,41,44,
+  45,48,53,56,57,59,61,63,65,85,91,94,97,98,101,104,105,106,121,123,
+43,42,36,0,
+38,37,0,
+47,46,0,
+52,51,50,49,0,
+55,54,0,
+35,0,
+58,0,
+60,0,
+62,0,
+66,64,0,
+21,0,
+111,110,109,108,107,103,102,0,99,101,
+111,110,109,108,107,103,102,0,99,100,101,
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,36,29,20,18,16,0,15,89,99,101,104,105,106,121,123,144,174,179,180,
+  181,183,184,185,
+186,36,20,16,0,15,89,106,144,145,174,175,176,179,180,181,183,184,185,
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,36,29,20,18,16,0,15,89,99,100,101,104,105,106,121,123,144,174,179,
+  180,181,183,184,185,
+186,36,20,16,0,15,89,106,144,145,174,175,176,179,180,181,183,184,185,
+29,0,
+18,0,
+29,18,0,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,48,53,56,57,59,61,63,65,80,
+186,36,16,0,15,179,180,181,
+186,103,102,36,16,0,15,89,91,101,179,180,181,
+20,16,0,174,185,
+84,69,29,0,90,
+186,36,16,0,15,106,173,175,176,177,178,179,180,181,
+186,103,102,36,16,0,15,89,91,101,106,145,173,175,176,177,179,180,181,
+84,69,29,0,90,
+84,69,29,0,90,
+84,69,29,0,90,
+79,78,77,76,75,74,73,72,71,70,69,0,68,
+29,0,
+84,79,78,77,76,75,74,73,72,71,70,69,67,66,64,62,60,58,55,54,52,51,50,49,47,
+  46,43,42,38,37,36,35,29,27,26,25,23,20,16,0,
+186,84,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,
+  30,31,32,41,44,45,48,53,56,57,59,61,63,65,81,
+84,0,
+84,0,
+186,0,15,24,106,
+16,0,
+186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33,
+  27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48,
+  53,56,57,59,61,63,65,81,106,149,150,151,152,153,154,
+16,0,
+16,0,
+16,0,
+84,0,
+67,0,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,48,53,56,57,59,61,63,65,80,
+67,0,
+186,168,167,166,165,164,163,162,161,159,156,155,127,125,84,40,39,38,37,36,
+  35,33,27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,
+  45,48,53,56,57,59,61,63,65,81,106,149,150,151,152,153,154,
+186,111,110,109,108,107,103,102,67,36,16,0,
+186,168,167,166,165,164,163,162,161,159,156,155,137,129,128,127,125,120,119,
+  118,117,116,115,114,113,112,111,110,109,108,107,103,102,84,40,39,38,37,
+  36,35,33,27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,
+  44,45,48,53,56,57,59,61,63,65,81,82,83,85,86,87,88,91,92,94,95,96,97,98,
+  99,101,104,105,106,121,123,149,150,151,152,153,154,158,
+186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107,
+  103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121,
+  123,150,
+186,125,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,28,30,
+  31,32,41,44,45,48,53,56,57,59,61,63,65,147,
+186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107,
+  103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121,
+  123,150,
+186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107,
+  103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121,
+  123,150,
+20,16,0,174,185,
+18,0,
+186,36,16,0,15,106,171,173,175,176,177,178,179,180,181,182,
+18,0,
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,18,0,83,85,88,91,92,94,95,96,97,98,99,101,104,105,106,121,123,140,
+  141,143,
+186,103,102,36,16,0,15,89,101,106,145,171,173,175,176,177,179,180,181,182,
+186,36,16,0,15,106,171,173,175,176,177,178,179,180,181,182,
+186,137,129,128,125,120,119,118,117,116,115,114,113,112,111,110,109,108,107,
+  103,102,0,82,83,85,86,87,88,91,92,94,95,96,97,98,99,101,104,105,106,121,
+  123,150,
+127,29,0,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,48,53,56,57,59,61,63,65,80,
+186,0,15,24,106,
+186,137,129,128,120,119,118,117,116,115,114,113,112,103,102,0,85,91,94,97,
+  98,101,104,105,106,121,123,126,130,131,132,
+103,102,0,101,
+103,102,0,101,
+120,119,118,117,116,115,114,113,112,103,102,0,101,104,
+186,137,129,128,120,119,118,117,116,115,114,113,112,103,102,67,36,16,0,15,
+  89,101,104,105,106,121,123,133,136,179,180,181,
+186,67,36,16,0,15,89,93,106,134,136,145,172,173,175,176,177,179,180,181,
+84,29,0,
+84,29,0,
+186,137,129,128,127,120,119,118,117,116,115,114,113,112,103,102,0,85,91,94,
+  97,98,101,104,105,106,121,123,130,131,132,
+186,137,129,128,120,119,118,117,116,115,114,113,112,103,102,40,39,38,37,36,
+  35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30,31,32,34,41,44,
+  45,48,53,56,57,59,61,63,65,85,91,94,97,98,101,104,105,106,121,123,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30,
+  31,32,41,44,45,48,53,56,57,59,61,63,65,
+186,0,15,24,106,
+186,0,15,24,106,
+186,40,39,38,37,36,35,33,27,26,18,16,13,11,10,9,8,7,0,6,12,14,15,19,22,28,
+  30,31,32,41,44,45,48,53,56,57,59,61,63,65,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30,
+  31,32,41,44,45,48,53,56,57,59,61,63,65,
+186,137,129,128,120,119,118,117,116,115,114,113,112,103,102,36,20,18,16,0,
+  101,104,105,106,121,123,144,174,183,184,185,
+36,20,16,0,144,174,183,184,185,
+18,0,
+29,18,0,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,48,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,48,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,48,53,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,48,53,56,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,48,53,56,57,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,48,53,56,57,59,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30,
+  31,32,41,44,45,48,53,56,57,59,61,63,65,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,48,53,56,57,59,61,
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,36,20,18,16,0,15,83,85,88,91,92,94,95,96,97,98,99,101,104,105,106,
+  121,123,140,141,143,174,179,180,181,183,184,185,
+186,103,102,36,20,16,0,15,89,91,101,144,174,179,180,181,183,184,185,
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,36,20,18,16,0,15,83,85,88,91,92,94,95,96,97,98,99,101,104,105,106,
+  121,123,140,141,143,174,175,176,179,180,181,183,184,185,
+186,103,102,36,20,16,0,15,89,91,101,106,144,145,174,175,176,179,180,181,183,
+  184,185,
+186,142,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,
+  103,102,0,83,85,88,91,92,94,95,96,97,98,99,101,104,105,106,121,123,143,
+186,0,15,
+21,0,
+20,18,16,0,174,185,
+186,103,102,36,16,0,15,89,101,179,180,181,
+186,36,16,0,15,106,173,175,176,177,178,179,180,181,
+186,103,102,36,16,0,15,89,101,106,145,173,175,176,177,179,180,181,
+186,36,16,0,15,106,173,175,176,177,178,179,180,181,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,28,30,31,
+  32,41,44,45,48,53,56,57,59,61,63,65,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,28,30,31,
+  32,41,44,45,48,53,56,57,59,61,63,65,
+84,0,
+84,0,
+186,84,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,
+  30,31,32,41,44,45,48,53,56,57,59,61,63,65,81,
+162,0,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30,
+  31,32,41,44,45,48,53,56,57,59,61,63,65,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30,
+  31,32,41,44,45,48,53,56,57,59,61,63,65,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30,
+  31,32,41,44,45,48,53,56,57,59,61,63,65,
+186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33,
+  27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48,
+  53,56,57,59,61,63,65,81,106,149,150,151,152,153,154,
+67,0,
+186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33,
+  27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48,
+  53,56,57,59,61,63,65,81,106,149,150,151,152,153,154,
+186,168,167,166,165,164,163,162,161,159,156,155,127,125,84,40,39,38,37,36,
+  35,33,27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,
+  45,48,53,56,57,59,61,63,65,81,106,149,150,151,152,153,154,
+186,125,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,28,30,
+  31,32,41,44,45,48,53,56,57,59,61,63,65,147,148,
+18,0,
+20,16,0,174,185,
+20,18,16,0,174,185,
+20,16,0,174,185,
+186,36,16,0,15,106,171,173,175,176,177,178,179,180,181,182,
+20,18,16,0,174,185,
+127,69,29,0,139,
+186,137,129,128,127,120,119,118,117,116,115,114,113,112,103,102,0,85,91,94,
+  97,98,101,104,105,106,121,123,130,131,132,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,48,53,56,57,59,61,63,65,80,
+84,67,29,0,135,136,
+84,67,29,0,135,136,
+186,67,36,16,0,15,89,133,136,179,180,181,
+186,67,36,16,0,15,89,93,106,134,136,145,172,173,175,176,177,179,180,181,
+18,0,
+29,18,0,
+29,21,0,
+186,137,129,128,120,119,118,117,116,115,114,113,112,111,110,109,108,107,103,
+  102,36,20,18,16,0,83,85,88,91,92,94,95,96,97,98,99,101,104,105,106,121,
+  123,140,141,143,174,183,184,185,
+103,102,36,20,16,0,91,101,144,174,183,184,185,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+43,42,36,0,
+43,42,36,0,
+38,37,0,
+38,37,0,
+47,46,0,
+47,46,0,
+47,46,0,
+47,46,0,
+52,51,50,49,0,
+52,51,50,49,0,
+55,54,0,
+35,0,
+58,0,
+60,0,
+67,29,0,
+62,0,
+18,0,
+18,0,
+18,0,
+186,103,102,36,20,16,0,15,89,101,144,174,179,180,181,183,184,185,
+186,103,102,36,20,16,0,15,89,101,106,144,145,174,175,176,179,180,181,183,
+  184,185,
+186,36,16,0,15,106,173,175,176,177,178,179,180,181,
+84,0,
+16,0,
+29,18,0,
+29,18,0,
+29,18,0,
+186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33,
+  27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48,
+  53,56,57,59,61,63,65,81,106,149,150,151,152,153,154,
+127,29,0,
+20,18,16,0,174,185,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,28,30,31,
+  32,41,44,45,48,53,56,57,59,61,63,65,
+103,102,36,20,16,0,101,144,174,183,184,185,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,30,31,32,
+  41,44,45,48,53,56,57,59,61,63,65,
+20,16,0,174,185,
+186,84,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,
+  30,31,32,41,44,45,48,53,56,57,59,61,63,65,81,
+186,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,30,
+  31,32,41,44,45,48,53,56,57,59,61,63,65,
+186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33,
+  27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48,
+  53,56,57,59,61,63,65,81,106,149,150,151,152,153,154,
+186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33,
+  27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48,
+  53,56,57,59,61,63,65,81,106,149,150,151,152,153,154,
+186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33,
+  27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48,
+  53,56,57,59,61,63,65,81,106,149,150,151,152,153,154,
+186,127,125,40,39,38,37,36,35,33,27,26,16,13,11,10,9,8,7,0,6,12,14,15,19,28,
+  30,31,32,41,44,45,48,53,56,57,59,61,63,65,147,
+84,0,
+29,18,0,
+160,0,
+186,40,39,38,37,36,35,33,27,26,18,16,13,11,10,9,8,7,0,6,12,14,15,17,19,28,
+  30,31,32,41,44,45,48,53,56,57,59,61,63,65,81,
+84,0,
+186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33,
+  27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48,
+  53,56,57,59,61,63,65,81,106,149,150,151,152,153,154,
+18,0,
+186,168,167,166,165,164,163,162,161,159,156,155,125,84,40,39,38,37,36,35,33,
+  27,26,16,13,11,10,9,8,7,0,2,6,12,14,15,17,19,24,28,30,31,32,41,44,45,48,
+  53,56,57,59,61,63,65,81,106,149,150,151,152,153,154,
+  0
+};
+
+
+static unsigned const char far ag_astt[5043] = {
+  2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,8,7,0,1,1,2,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,7,1,1,1,1,1,7,2,1,2,1,1,7,2,1,1,
+  1,1,1,2,1,1,1,1,7,2,3,1,1,3,3,1,3,3,3,3,3,3,2,9,9,5,3,3,9,9,9,9,9,9,9,9,9,
+  3,3,3,3,2,9,9,5,3,3,3,9,9,9,9,2,9,9,5,3,3,3,9,9,9,9,9,9,9,9,9,9,9,9,9,2,9,
+  9,5,3,3,3,3,1,1,5,3,1,3,1,7,3,1,7,3,3,3,3,2,9,9,3,5,3,3,9,9,9,9,2,9,9,3,5,
+  3,3,3,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,3,1,2,1,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,9,9,1,1,7,2,1,3,3,
+  3,3,3,1,3,1,1,1,1,1,2,1,4,4,3,3,3,3,3,3,3,3,3,9,9,9,9,2,9,9,1,1,7,2,1,3,3,
+  3,3,3,3,1,3,1,1,1,1,1,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,2,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,3,7,3,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,
+  1,5,7,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,1,1,1,1,3,7,1,5,2,
+  7,1,1,1,1,2,1,7,1,1,1,1,7,1,3,1,7,3,1,1,7,2,9,9,1,1,7,2,3,3,3,3,1,3,3,2,1,
+  1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,3,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,5,2,1,1,7,2,1,1,1,1,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,
+  1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,4,4,3,
+  3,3,3,3,3,3,3,3,3,3,3,3,2,9,9,1,1,7,2,1,3,3,3,3,3,1,3,1,1,1,2,1,4,4,3,3,3,
+  3,3,3,3,3,3,9,9,9,9,2,9,9,1,1,7,2,1,3,3,3,3,3,3,1,3,1,1,1,2,1,4,4,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,2,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,1,
+  1,1,1,1,1,1,1,1,1,1,1,4,4,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,8,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,4,4,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,2,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,5,1,
+  5,7,3,3,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,3,1,1,5,1,5,7,3,3,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
+  1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,2,1,1,7,2,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,5,3,1,2,1,1,1,1,7,2,3,1,1,1,3,3,3,3,3,3,3,1,3,3,1,5,3,5,1,5,7,
+  3,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,3,1,1,5,3,5,1,5,7,3,2,7,1,1,1,1,5,1,5,7,3,3,1,7,1,5,2,1,4,4,1,
+  1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,3,1,1,1,5,3,1,9,
+  5,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,2,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,7,1,1,1,1,1,3,1,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,
+  1,3,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,9,9,1,1,1,1,5,2,1,
+  4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,5,1,1,5,1,
+  1,1,1,5,1,1,5,1,5,1,5,1,5,1,5,1,1,5,3,7,3,3,3,3,2,9,9,5,3,3,9,9,9,9,2,9,9,
+  5,3,3,3,2,1,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,9,9,1,5,1,5,1,7,2,3,3,3,3,3,3,
+  1,3,3,3,3,1,3,3,3,1,2,1,1,1,5,2,3,1,3,3,3,3,3,3,1,3,3,3,1,2,1,4,4,3,3,3,3,
+  3,3,3,3,3,9,9,9,9,2,9,9,1,5,1,5,1,7,2,3,3,3,3,3,3,3,1,3,3,3,3,1,3,3,3,1,2,
+  1,1,1,5,2,3,1,3,3,3,3,3,3,1,3,3,3,1,1,5,3,7,1,3,7,2,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,2,1,1,1,2,1,1,
+  1,1,7,2,3,1,1,3,1,3,1,1,5,3,1,5,1,5,7,3,2,1,1,7,2,1,1,1,1,1,1,1,1,1,2,1,1,
+  1,1,7,2,3,1,1,1,3,3,3,3,3,3,1,3,5,1,5,7,3,5,1,5,7,3,5,1,5,7,3,1,1,1,1,1,1,
+  1,1,1,1,1,5,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  5,5,5,5,5,5,5,5,5,5,5,7,2,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,7,3,7,2,7,1,1,1,1,7,2,1,1,1,1,1,1,1,1,1,
+  1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,7,1,7,3,7,1,7,2,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,1,1,1,1,1,1,1,
+  1,1,1,3,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,5,5,5,5,5,5,5,5,5,5,5,7,2,1,1,1,1,1,1,1,
+  1,1,1,1,1,4,4,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,8,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,2,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,2,1,4,4,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,2,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,1,
+  4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,3,1,1,7,1,1,1,7,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,4,4,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,2,1,1,3,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,9,9,
+  1,1,7,2,3,3,1,3,3,3,3,3,3,3,1,3,3,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,2,1,4,4,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,3,3,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,3,3,2,7,1,1,1,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,9,9,5,3,9,9,5,3,9,9,9,9,9,9,9,9,9,9,9,5,3,3,2,1,4,4,3,3,3,3,3,3,
+  3,3,3,9,9,1,1,1,7,2,1,3,3,3,3,1,3,3,3,1,1,1,2,1,1,1,7,2,1,1,1,3,3,1,1,1,1,
+  1,1,1,1,1,3,1,7,3,1,7,2,1,4,4,3,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,
+  1,1,3,1,1,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,
+  3,3,3,2,7,3,3,3,2,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,4,4,3,3,3,3,3,3,3,3,3,9,9,1,1,5,1,7,3,3,3,3,
+  1,3,3,3,3,3,1,1,1,1,5,3,3,3,3,1,1,7,1,3,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,7,1,1,1,1,1,3,1,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,3,2,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,3,2,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,
+  1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,2,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,
+  1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,
+  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,4,
+  4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,3,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,5,2,3,1,1,3,3,3,1,3,3,3,1,2,1,4,4,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,3,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,5,2,3,1,1,1,3,3,3,3,3,3,1,3,3,3,1,2,
+  3,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,3,2,7,3,3,7,1,3,1,7,3,1,2,9,9,1,1,7,2,3,3,3,1,3,2,1,1,7,2,1,1,1,1,1,1,1,
+  1,1,2,9,9,1,1,7,2,3,3,1,3,3,3,3,3,3,1,3,2,1,1,7,2,1,1,1,1,1,1,1,1,1,2,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,2,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,
+  7,3,7,2,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,8,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,
+  3,3,3,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,2,1,1,1,1,1,1,
+  1,1,1,1,1,3,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,7,1,1,5,3,1,1,3,1,7,1,1,1,
+  1,5,3,1,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,3,1,7,1,1,5,1,5,7,3,2,1,4,4,3,1,
+  1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,3,1,1,2,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,5,1,5,7,3,3,5,1,5,7,3,
+  3,2,1,1,1,7,2,1,3,3,1,1,1,2,1,1,1,7,2,1,1,1,3,3,1,1,1,1,1,1,1,1,1,3,7,1,3,
+  7,1,3,7,2,1,4,4,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,3,1,7,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,3,3,3,3,1,2,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,3,1,1,1,5,1,1,1,5,1,1,5,1,1,5,1,1,5,1,1,
+  5,1,1,5,1,1,5,1,1,1,1,5,1,1,1,1,5,1,1,5,1,5,1,5,1,5,1,1,7,1,5,3,7,3,7,1,7,
+  2,9,9,1,1,1,5,2,3,3,3,3,3,1,3,3,3,1,2,9,9,1,1,1,5,2,3,3,1,3,3,3,3,3,3,1,3,
+  3,3,1,2,1,1,7,2,1,1,1,1,1,1,1,1,1,1,7,1,7,1,1,7,1,1,7,1,1,7,2,1,1,1,1,1,1,
+  1,1,1,1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,1,7,1,3,1,7,1,1,2,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,7,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,9,9,1,1,1,5,3,3,3,
+  3,3,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,3,1,1,5,3,1,2,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,8,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,
+  3,3,2,1,1,1,1,1,1,1,1,1,1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,2,1,1,1,1,1,1,1,1,1,
+  1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,
+  1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,1,7,1,1,7,1,5,2,1,1,1,1,1,1,1,1,1,8,
+  1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,7,2,1,1,1,1,
+  1,1,1,1,1,1,1,1,8,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,3,3,3,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1,8,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,3,3,3,3,3,3,11
+};
+
+
+static const unsigned short far ag_pstt[] = {
+312,1,148,148,6,6,6,6,6,6,6,6,6,16,16,16,16,132,15,15,4,3,21,0,0,20,21,287,
+  20,13,12,11,10,16,19,15,18,17,8,7,6,5,16,15,6,12,5,2,12,20,20,14,19,9,
+  19,14,
+312,23,1,22,22,22,
+24,24,2,146,24,
+312,4,3,3,287,25,27,26,27,25,
+312,28,28,4,3,4,287,282,28,28,290,282,9,282,290,
+126,126,126,126,132,131,131,102,126,131,
+119,119,119,119,119,119,119,119,119,112,112,112,112,132,118,118,100,112,118,
+  119,
+128,128,128,128,132,128,128,99,128,128,128,
+115,115,115,115,115,115,115,115,115,114,114,114,114,132,114,114,97,114,114,
+  114,115,
+29,30,280,284,31,
+90,32,10,
+89,33,11,
+120,120,120,120,132,125,125,88,101,120,125,
+122,122,122,122,132,122,122,87,98,122,122,122,
+312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,14,38,13,12,11,10,
+  37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,247,38,
+312,1,148,148,117,117,117,117,117,117,117,117,117,104,104,104,104,132,107,
+  107,4,3,15,287,41,104,107,117,124,130,2,124,40,41,9,41,40,
+312,1,148,148,113,113,113,113,113,113,113,113,113,105,105,105,105,132,105,
+  105,4,3,16,287,43,105,105,105,113,121,127,2,121,42,43,9,43,42,
+312,47,45,17,287,48,49,46,49,44,49,49,49,49,49,48,9,48,44,
+312,47,45,18,287,51,52,46,52,50,52,52,52,52,52,51,9,51,50,
+39,241,19,242,
+312,1,148,148,6,6,6,6,6,6,6,6,6,16,16,16,16,132,15,15,4,3,2,20,287,238,13,
+  12,11,10,16,19,15,18,17,8,7,6,5,16,15,6,12,5,2,12,238,238,14,19,9,19,14,
+3,21,
+53,171,
+312,23,54,54,54,55,
+312,57,24,56,56,56,
+58,25,
+29,288,30,26,284,31,
+59,27,
+312,107,107,4,3,28,287,283,107,291,283,9,283,291,
+312,62,62,62,62,62,62,61,63,64,301,66,60,65,65,65,65,65,29,65,60,65,65,65,
+  67,62,67,67,68,69,70,71,72,73,74,75,76,77,77,
+312,1,148,148,6,6,6,6,6,6,6,6,6,82,82,82,82,132,80,80,299,30,86,79,78,82,80,
+  83,81,8,7,6,5,82,80,6,78,5,2,78,85,84,84,86,
+87,298,
+312,89,88,32,287,91,91,90,91,
+312,93,92,33,287,94,94,46,94,94,94,94,94,94,94,90,94,
+312,93,92,34,287,49,49,46,49,49,49,49,49,49,49,90,49,
+312,93,92,35,287,52,52,46,52,52,52,52,52,52,52,90,52,
+312,1,148,148,117,117,117,117,117,117,117,117,117,104,104,104,104,132,107,
+  107,89,88,36,287,95,104,107,117,124,130,2,124,95,90,95,
+312,1,148,148,113,113,113,113,113,113,113,113,113,105,105,105,105,132,105,
+  105,89,88,37,287,96,105,105,105,113,121,127,2,121,96,90,96,
+312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,38,223,13,12,11,10,
+  37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,252,
+312,100,101,102,103,104,105,106,107,108,110,111,1,148,148,218,39,6,6,6,6,6,
+  6,6,6,6,37,37,37,37,132,36,36,109,62,62,62,62,62,62,61,63,64,66,60,65,
+  65,65,65,65,39,113,65,60,65,99,98,65,112,98,97,62,67,67,68,69,70,71,72,
+  73,74,75,76,98,109,115,13,12,11,10,37,36,35,34,8,7,6,5,37,36,6,12,114,2,
+  12,113,113,113,113,113,113,115,113,
+312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,40,116,13,12,11,10,
+  37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,251,116,
+39,202,117,202,41,92,246,
+312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,42,118,13,12,11,10,
+  37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,250,118,
+39,202,117,202,43,91,245,
+312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,44,119,13,12,11,10,
+  37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,249,119,
+312,47,122,45,287,120,25,121,123,123,121,120,27,26,27,25,
+29,124,261,262,31,
+312,125,125,47,126,47,287,282,125,125,46,265,290,272,265,265,272,282,9,282,
+  290,
+39,258,244,
+202,117,202,49,95,
+312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,50,127,13,12,11,10,
+  37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,248,127,
+39,258,243,
+202,117,202,52,94,
+312,53,54,54,54,128,
+174,129,174,54,172,
+169,130,55,
+131,151,
+312,1,148,148,134,134,134,134,134,134,134,134,134,135,135,57,133,135,136,
+  134,132,135,134,133,132,2,133,139,139,138,137,
+29,124,293,294,31,
+29,124,285,286,31,
+10,13,
+312,62,62,62,62,62,62,61,63,64,140,60,65,65,65,65,65,61,65,60,65,65,65,29,
+  62,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,62,65,60,65,65,65,28,62,
+  28,
+312,62,62,62,62,62,62,61,63,64,141,60,65,65,65,65,65,63,65,60,65,65,65,27,
+  62,
+312,62,62,62,62,62,62,61,63,64,141,60,65,65,65,65,65,64,65,60,65,65,65,26,
+  62,
+22,21,142,143,145,144,25,
+312,1,148,148,134,134,134,134,134,134,134,134,134,146,146,62,62,62,62,62,62,
+  61,63,64,66,60,65,65,65,65,65,66,65,60,65,65,149,65,149,97,62,67,148,67,
+  68,69,70,71,72,73,74,75,76,149,133,146,147,134,132,146,134,133,132,2,
+  133,
+150,151,152,43,
+153,154,46,
+155,156,49,
+157,158,159,160,54,
+161,162,57,
+163,59,
+164,61,
+165,63,
+166,65,
+167,168,67,
+302,77,
+120,120,120,120,132,125,125,101,120,125,
+122,122,122,122,132,122,122,98,122,122,122,
+312,1,148,148,117,117,117,117,117,117,117,117,117,104,104,104,104,132,107,
+  107,170,191,29,191,169,80,287,193,104,107,117,124,130,2,124,192,192,193,
+  90,193,192,192,31,
+312,172,29,171,187,287,189,46,188,190,188,190,190,189,90,189,188,188,31,
+312,1,148,148,113,113,113,113,113,113,113,113,113,105,105,105,105,132,105,
+  105,170,184,29,184,169,82,287,186,105,105,105,113,121,127,2,121,185,185,
+  186,90,186,185,185,31,
+312,172,29,171,180,287,182,46,181,183,181,183,183,182,90,182,181,181,31,
+173,176,
+300,85,
+174,292,86,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,87,65,60,65,65,65,67,62,
+  67,67,68,69,70,71,72,73,74,75,76,175,175,
+312,89,88,88,287,27,176,27,
+312,177,177,89,88,89,287,282,177,177,282,90,282,
+29,124,280,284,31,
+202,117,202,91,93,
+312,93,178,92,287,120,121,123,123,121,120,27,176,27,
+312,179,179,93,180,93,287,282,179,179,46,265,272,265,265,272,282,90,282,
+202,117,202,94,96,
+202,117,202,95,92,
+202,117,202,96,91,
+181,181,181,181,181,181,181,181,181,181,181,37,181,
+182,86,
+11,11,11,11,11,11,11,11,11,11,11,11,196,11,11,11,11,11,11,11,11,11,11,11,11,
+  11,11,11,11,11,11,11,11,11,11,11,11,11,11,99,
+312,183,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,100,65,60,65,65,98,
+  65,98,97,62,67,67,68,69,70,71,72,73,74,75,76,98,183,
+235,101,
+234,102,
+312,103,184,184,184,
+185,104,
+312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61,
+  63,64,66,60,65,65,65,65,65,105,186,65,60,65,99,98,65,112,98,97,62,67,67,
+  68,69,70,71,72,73,74,75,76,98,109,112,186,186,186,186,186,186,
+187,106,
+188,107,
+189,108,
+226,109,
+190,110,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,111,65,60,65,65,65,67,
+  62,67,67,68,69,70,71,72,73,74,75,76,191,191,
+192,112,
+312,100,101,102,103,104,105,106,107,108,110,111,220,39,109,62,62,62,62,62,
+  62,61,63,64,66,60,65,65,65,65,65,113,225,65,60,65,99,98,65,112,98,97,62,
+  67,67,68,69,70,71,72,73,74,75,76,98,109,112,225,225,225,225,225,225,
+129,129,129,129,129,129,129,129,197,129,129,114,
+312,100,101,102,103,104,105,106,107,108,110,111,1,148,148,219,39,6,6,6,6,6,
+  6,6,6,6,37,37,37,37,132,36,36,109,62,62,62,62,62,62,61,63,64,66,60,65,
+  65,65,65,65,115,193,65,60,65,99,98,65,112,98,97,62,67,67,68,69,70,71,72,
+  73,74,75,76,98,109,223,13,12,11,10,37,36,35,34,8,7,6,5,37,36,6,12,114,2,
+  12,193,193,193,193,193,193,193,
+312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,116,223,13,12,11,
+  10,37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,256,
+312,194,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,117,65,60,65,65,65,
+  203,97,62,67,67,68,69,70,71,72,73,74,75,76,203,203,
+312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,118,223,13,12,11,
+  10,37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,255,
+312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,119,223,13,12,11,
+  10,37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,254,
+29,124,120,195,31,
+196,121,
+312,47,122,122,287,197,25,121,123,123,121,197,27,26,27,25,
+198,123,
+312,1,148,148,6,6,6,6,6,6,6,6,6,82,82,82,82,132,80,80,299,124,79,78,82,80,
+  83,81,8,7,6,5,82,80,6,78,5,2,78,85,84,84,
+312,107,107,47,199,125,287,283,107,46,266,291,273,266,266,273,283,9,283,291,
+312,47,122,126,287,200,25,121,123,123,121,200,27,26,27,25,
+312,1,148,148,39,6,6,6,6,6,6,6,6,6,37,37,37,37,132,36,36,127,223,13,12,11,
+  10,37,36,35,34,8,7,6,5,37,36,6,12,5,2,12,253,
+170,130,128,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,129,65,60,65,65,65,67,
+  62,67,67,68,69,70,71,72,73,74,75,76,175,175,
+312,130,201,201,201,
+312,1,148,148,134,134,134,134,134,134,134,134,134,135,135,131,133,135,136,
+  134,132,135,134,133,132,2,133,202,202,138,137,
+131,131,102,131,
+125,125,101,125,
+119,119,119,119,119,119,119,119,119,118,118,100,118,119,
+312,1,148,148,117,117,117,117,117,117,117,117,117,107,107,203,89,88,135,287,
+  204,107,117,124,130,2,124,158,158,204,90,204,
+312,203,93,92,136,287,205,205,46,160,160,205,205,205,205,205,205,205,90,205,
+157,206,137,
+156,207,138,
+312,1,148,148,149,134,134,134,134,134,134,134,134,134,135,135,139,133,135,
+  136,134,132,135,134,133,132,2,133,155,138,137,
+312,1,148,148,134,134,134,134,134,134,134,134,134,146,146,62,62,62,62,62,62,
+  61,63,64,66,60,65,65,65,65,65,140,65,60,65,65,149,65,149,97,62,67,208,
+  67,68,69,70,71,72,73,74,75,76,149,133,146,147,134,132,146,134,133,132,2,
+  133,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,141,65,60,65,65,149,65,
+  149,97,62,67,67,68,69,70,71,72,73,74,75,76,149,
+312,142,20,20,20,
+312,143,19,19,19,
+312,62,62,62,62,62,62,61,63,64,17,66,60,65,65,65,65,65,144,65,60,65,65,65,
+  209,209,97,62,67,67,68,69,70,71,72,73,74,75,76,209,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,145,65,60,65,65,210,65,
+  210,97,62,67,67,68,69,70,71,72,73,74,75,76,210,
+312,1,148,148,117,117,117,117,117,117,117,117,117,107,107,212,29,200,211,
+  146,107,117,124,130,2,124,201,201,201,201,31,
+212,29,211,198,199,199,199,199,31,
+213,148,
+182,14,149,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,150,65,60,65,65,65,42,
+  62,42,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,151,65,60,65,65,65,41,
+  62,41,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,152,65,60,65,65,65,40,
+  62,40,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,153,65,60,65,65,65,214,
+  62,214,214,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,154,65,60,65,65,65,215,
+  62,215,215,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,155,65,60,65,65,65,67,
+  62,67,67,216,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,156,65,60,65,65,65,67,
+  62,67,67,217,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,157,65,60,65,65,65,67,
+  62,67,67,68,218,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,158,65,60,65,65,65,67,
+  62,67,67,68,219,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,159,65,60,65,65,65,67,
+  62,67,67,68,220,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,160,65,60,65,65,65,67,
+  62,67,67,68,221,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,161,65,60,65,65,65,67,
+  62,67,67,68,69,222,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,162,65,60,65,65,65,67,
+  62,67,67,68,69,223,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,163,65,60,65,65,65,67,
+  62,67,67,68,69,70,224,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,164,65,60,65,65,65,67,
+  62,67,67,68,69,70,71,225,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,165,65,60,65,65,65,67,
+  62,67,67,68,69,70,71,72,226,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,166,65,60,65,65,65,67,
+  62,67,67,68,69,70,71,72,73,227,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,167,65,60,65,65,228,65,
+  228,97,62,67,67,68,69,70,71,72,73,74,75,76,228,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,168,65,60,65,65,65,67,
+  62,67,67,68,69,70,71,72,73,74,229,
+312,1,148,148,6,6,6,6,6,6,6,6,6,82,82,82,82,132,80,80,170,29,299,169,169,
+  287,79,78,82,80,83,81,8,7,6,5,82,80,6,78,5,2,78,85,84,84,230,27,176,27,
+  232,231,31,
+312,233,233,170,29,169,304,287,282,233,233,306,306,282,90,282,306,306,31,
+312,1,148,148,6,6,6,6,6,6,6,6,6,82,82,82,82,132,80,80,172,29,299,171,171,
+  287,79,78,82,80,83,81,8,7,6,5,82,80,6,78,5,2,78,85,84,84,230,123,123,27,
+  176,27,232,231,31,
+312,234,234,172,29,171,304,287,282,234,234,46,306,265,306,265,265,282,90,
+  282,306,306,31,
+312,177,1,148,148,6,6,6,6,6,6,6,6,6,82,82,82,82,132,80,80,173,79,78,82,80,
+  83,81,8,7,6,5,82,80,6,78,5,2,78,179,
+312,174,195,
+303,175,
+29,288,124,176,284,31,
+312,107,107,89,88,177,287,283,107,283,90,283,
+312,93,178,178,287,197,121,123,123,121,197,27,176,27,
+312,107,107,93,235,179,287,283,107,46,266,273,266,266,273,283,90,283,
+312,93,178,180,287,200,121,123,123,121,200,27,176,27,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,181,65,60,65,65,65,70,
+  97,62,67,67,68,69,70,71,72,73,74,75,76,70,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,182,65,60,65,65,65,83,
+  97,62,67,67,68,69,70,71,72,73,74,75,76,83,
+236,183,
+233,184,
+312,236,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,185,65,60,65,65,98,
+  65,98,97,62,67,67,68,69,70,71,72,73,74,75,76,98,236,
+237,186,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,187,65,60,65,65,238,65,
+  238,97,62,67,67,68,69,70,71,72,73,74,75,76,238,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,188,65,60,65,65,239,65,
+  239,97,62,67,67,68,69,70,71,72,73,74,75,76,239,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,189,65,60,65,65,240,65,
+  240,97,62,67,67,68,69,70,71,72,73,74,75,76,240,
+312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61,
+  63,64,66,60,65,65,65,65,65,190,217,65,60,65,99,98,65,112,98,97,62,67,67,
+  68,69,70,71,72,73,74,75,76,98,109,112,217,217,217,217,217,217,
+241,191,
+312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61,
+  63,64,66,60,65,65,65,65,65,192,215,65,60,65,99,98,65,112,98,97,62,67,67,
+  68,69,70,71,72,73,74,75,76,98,109,112,215,215,215,215,215,215,
+312,100,101,102,103,104,105,106,107,108,110,111,221,39,109,62,62,62,62,62,
+  62,61,63,64,66,60,65,65,65,65,65,193,225,65,60,65,99,98,65,112,98,97,62,
+  67,67,68,69,70,71,72,73,74,75,76,98,109,112,225,225,225,225,225,225,
+312,194,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,194,65,60,65,65,65,
+  242,97,62,67,67,68,69,70,71,72,73,74,75,76,242,242,242,
+275,195,
+29,124,274,276,31,
+29,278,124,197,195,31,
+29,124,267,268,31,
+312,47,122,199,287,243,25,121,123,123,121,243,27,26,27,25,
+29,270,124,200,195,31,
+174,129,174,201,173,
+312,1,148,148,150,134,134,134,134,134,134,134,134,134,135,135,202,133,135,
+  136,134,132,135,134,133,132,2,133,155,138,137,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,203,65,60,65,65,65,67,
+  62,67,67,68,69,70,71,72,73,74,75,76,168,168,
+166,203,166,204,164,164,
+166,203,166,205,162,162,
+312,203,89,88,206,287,204,159,159,204,90,204,
+312,203,93,92,207,287,205,205,46,161,161,205,205,205,205,205,205,205,90,205,
+30,208,
+244,18,209,
+182,16,210,
+312,1,148,148,6,6,6,6,6,6,6,6,6,82,82,82,82,132,80,80,212,29,299,211,211,79,
+  78,82,80,83,81,8,7,6,5,82,80,6,78,5,2,78,85,84,84,230,232,231,31,
+245,245,212,29,211,304,245,245,306,306,306,306,31,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,213,65,60,65,65,65,38,
+  62,38,
+150,151,152,45,
+150,151,152,44,
+153,154,48,
+153,154,47,
+155,156,53,
+155,156,52,
+155,156,51,
+155,156,50,
+157,158,159,160,56,
+157,158,159,160,55,
+161,162,58,
+163,60,
+164,62,
+165,64,
+246,182,228,
+166,66,
+310,230,
+309,231,
+247,232,
+312,107,107,170,29,169,305,287,283,107,307,307,283,90,283,307,307,31,
+312,107,107,172,29,171,305,287,283,107,46,307,266,307,266,266,283,90,283,
+  307,307,31,
+312,93,178,235,287,243,121,123,123,121,243,27,176,27,
+248,236,
+249,237,
+182,250,238,
+182,251,239,
+182,252,240,
+312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61,
+  63,64,66,60,65,65,65,65,65,241,216,65,60,65,99,98,65,112,98,97,62,67,67,
+  68,69,70,71,72,73,74,75,76,98,109,112,216,216,216,216,216,216,
+204,253,242,
+29,271,124,243,195,31,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,244,65,60,65,65,65,24,
+  97,62,67,67,68,69,70,71,72,73,74,75,76,24,
+107,107,212,29,211,305,107,307,307,307,307,31,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,246,65,60,65,65,65,67,
+  62,67,67,68,69,70,71,72,73,74,75,76,68,
+29,124,308,311,31,
+312,254,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,248,65,60,65,65,98,
+  65,98,97,62,67,67,68,69,70,71,72,73,74,75,76,98,254,
+312,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,249,65,60,65,65,255,65,
+  255,97,62,67,67,68,69,70,71,72,73,74,75,76,255,
+312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61,
+  63,64,66,60,65,65,65,65,65,250,230,65,60,65,99,98,65,112,98,97,62,67,67,
+  68,69,70,71,72,73,74,75,76,98,109,112,230,230,230,230,230,230,
+312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61,
+  63,64,66,60,65,65,65,65,65,251,229,65,60,65,99,98,65,112,98,97,62,67,67,
+  68,69,70,71,72,73,74,75,76,98,109,112,229,229,229,229,229,229,
+312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61,
+  63,64,66,60,65,65,65,65,65,252,256,65,60,65,99,98,65,112,98,97,62,67,67,
+  68,69,70,71,72,73,74,75,76,98,109,112,256,256,256,256,256,256,
+312,205,194,62,62,62,62,62,62,61,63,64,66,60,65,65,65,65,65,253,65,60,65,65,
+  65,208,97,62,67,67,68,69,70,71,72,73,74,75,76,208,208,
+257,254,
+182,258,255,
+259,227,
+312,62,62,62,62,62,62,61,63,64,260,66,60,65,65,65,65,65,257,65,60,65,65,98,
+  65,98,97,62,67,67,68,69,70,71,72,73,74,75,76,98,260,
+231,258,
+312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61,
+  63,64,66,60,65,65,65,65,65,259,228,65,60,65,99,98,65,112,98,97,62,67,67,
+  68,69,70,71,72,73,74,75,76,98,109,112,228,228,228,228,228,228,
+261,260,
+312,100,101,102,103,104,105,106,107,108,110,111,39,109,62,62,62,62,62,62,61,
+  63,64,66,60,65,65,65,65,65,261,232,65,60,65,99,98,65,112,98,97,62,67,67,
+  68,69,70,71,72,73,74,75,76,98,109,112,232,232,232,232,232,232,
+  0
+};
+
+
+static const unsigned short far ag_sbt[] = {
+     0,  56,  62,  67,  77,  92, 102, 122, 133, 154, 159, 162, 165, 176,
+   188, 232, 269, 307, 326, 345, 349, 402, 404, 406, 412, 418, 420, 426,
+   428, 442, 481, 525, 527, 536, 553, 570, 587, 622, 658, 701, 804, 848,
+   855, 899, 906, 950, 966, 971, 992, 995,1000,1044,1047,1052,1058,1063,
+  1066,1068,1099,1104,1109,1111,1136,1162,1187,1212,1219,1284,1288,1291,
+  1294,1299,1302,1304,1306,1308,1310,1313,1315,1325,1336,1379,1398,1442,
+  1461,1463,1465,1468,1506,1514,1527,1532,1537,1551,1570,1575,1580,1585,
+  1598,1600,1640,1681,1683,1685,1690,1692,1754,1756,1758,1760,1762,1764,
+  1802,1804,1867,1879,1981,2024,2064,2107,2150,2155,2157,2173,2175,2217,
+  2237,2253,2296,2299,2337,2342,2373,2377,2381,2395,2427,2447,2450,2453,
+  2484,2549,2588,2593,2598,2638,2677,2708,2717,2719,2722,2748,2774,2800,
+  2827,2854,2882,2910,2939,2968,2997,3026,3056,3086,3117,3149,3182,3216,
+  3255,3290,3343,3362,3417,3440,3480,3483,3485,3491,3503,3517,3535,3549,
+  3587,3625,3627,3629,3670,3672,3711,3750,3789,3851,3853,3915,3978,4019,
+  4021,4026,4032,4037,4053,4059,4064,4095,4133,4139,4145,4157,4177,4179,
+  4182,4185,4234,4247,4273,4277,4281,4284,4287,4290,4293,4296,4299,4304,
+  4309,4312,4314,4316,4318,4321,4323,4325,4327,4329,4347,4369,4383,4385,
+  4387,4390,4393,4396,4458,4461,4467,4505,4517,4554,4559,4600,4639,4701,
+  4763,4825,4866,4868,4871,4873,4914,4916,4978,4980,5042
+};
+
+
+static const unsigned short far ag_sbe[] = {
+    23,  58,  64,  70,  82,  99, 118, 129, 149, 156, 161, 164, 173, 184,
+   209, 254, 291, 310, 329, 347, 372, 403, 405, 407, 414, 419, 423, 427,
+   433, 460, 502, 526, 530, 539, 556, 573, 609, 644, 679, 751, 825, 852,
+   876, 903, 927, 953, 968, 976, 993, 998,1021,1045,1050,1053,1061,1065,
+  1067,1083,1101,1106,1110,1128,1153,1179,1204,1218,1250,1287,1290,1293,
+  1298,1301,1303,1305,1307,1309,1312,1314,1322,1332,1361,1383,1423,1446,
+  1462,1464,1467,1485,1509,1519,1529,1535,1540,1556,1573,1578,1583,1596,
+  1599,1639,1658,1682,1684,1686,1691,1722,1755,1757,1759,1761,1763,1781,
+  1803,1835,1878,1929,2002,2042,2085,2128,2152,2156,2160,2174,2196,2222,
+  2240,2274,2298,2316,2338,2357,2375,2379,2392,2413,2431,2449,2452,2469,
+  2515,2566,2589,2594,2616,2655,2696,2711,2718,2721,2739,2765,2791,2817,
+  2844,2871,2899,2927,2956,2985,3014,3043,3073,3103,3134,3166,3199,3233,
+  3272,3314,3349,3386,3423,3461,3481,3484,3488,3496,3506,3522,3538,3566,
+  3604,3626,3628,3647,3671,3689,3728,3767,3819,3852,3883,3946,3996,4020,
+  4023,4029,4034,4040,4056,4062,4080,4112,4136,4142,4149,4161,4178,4181,
+  4184,4209,4239,4264,4276,4280,4283,4286,4289,4292,4295,4298,4303,4308,
+  4311,4313,4315,4317,4320,4322,4324,4326,4328,4335,4353,4372,4384,4386,
+  4389,4392,4395,4426,4460,4464,4484,4510,4534,4556,4577,4617,4669,4731,
+  4793,4844,4867,4870,4872,4891,4915,4946,4979,5010,5042
+};
+
+
+static const unsigned char far ag_fl[] = {
+  1,0,1,2,1,1,1,1,1,1,2,1,1,1,3,1,4,3,4,3,3,2,2,1,3,1,2,2,2,2,4,1,1,1,1,
+  1,1,1,4,1,3,3,3,1,3,3,1,3,3,1,3,3,3,3,1,3,3,1,3,1,3,1,3,1,3,1,3,1,5,1,
+  3,1,1,1,1,1,1,1,1,1,1,1,1,3,1,0,1,2,2,2,2,3,3,4,3,3,4,1,1,1,1,1,1,1,2,
+  2,1,2,1,1,1,1,2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,2,1,0,4,5,2,1,1,1,2,2,2,2,3,2,3,2,1,2,1,0,1,2,4,5,2,2,4,0,
+  2,1,3,1,3,1,2,2,2,1,2,2,1,2,2,2,1,2,2,1,3,1,1,1,2,1,2,0,2,3,4,1,1,3,1,
+  1,1,1,1,1,3,4,3,2,3,3,4,1,2,1,2,2,5,7,5,5,7,9,3,2,2,3,1,2,1,1,2,2,3,3,
+  3,3,2,3,3,3,3,3,4,4,4,4,1,1,1,1,1,2,1,1,2,3,3,4,1,4,5,2,3,3,4,4,1,3,1,
+  1,1,2,3,2,3,4,1,3,1,2,3,4,3,4,1,1,1,1,2,3,2,3,4,1,2,2,3,3,3,3,4,1
+};
+
+static const unsigned char far ag_ptt[] = {
+    0,  4,  4,  1,  6,  6,  6,  6,  6, 12, 12, 14, 14, 14, 14, 19, 19, 19,
+   19, 19, 19, 19, 19, 22, 22, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31,
+   31, 32, 32, 41, 41, 41, 41, 44, 44, 44, 45, 45, 45, 48, 48, 48, 48, 48,
+   53, 53, 53, 56, 56, 57, 57, 59, 59, 61, 61, 63, 63, 65, 65, 28, 28, 68,
+   68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 17, 17, 80, 81, 81, 82, 82, 82,
+   82, 87, 87, 87, 86, 86, 86, 92, 92, 92, 94, 94, 94, 88, 88, 88, 91, 91,
+  100,100,101,101, 95, 95, 95, 95, 97, 97, 97, 97, 83, 83, 83, 85, 85, 85,
+   96, 96, 96, 98, 98, 98, 99, 99, 99, 99, 99,104,104,104,104,104,104,104,
+  104,104,105,105,121,122,122,122,124,124,126,126,130,130,132,132,131,131,
+  134,134,133,133,135,135,136,123,123,123,138,138,139,139,140,140,141,141,
+  143,143,143,143,143,143,143,143,143,143,143,143,143,143,146,146, 24, 24,
+   34, 34, 34, 34, 90, 90,147,147,147,148,148,  2,  2,  2,  2,  2,  2,149,
+  149,149,150,150,150,150,157,157,158,158,151,152,152,152,153,153,153,154,
+  154,154,154,  3,  3,169,169,169,170,170,170,170,170,170,170,170,170,170,
+  170,170,170,170,170, 93, 93,172,172,145,145,145,175,175,175,176,176,173,
+  173,173,173,173,177,177,177,178,178, 89, 89,179,179,179,181,181,181,180,
+  180,171,171,171,182,182,182,144,144,144,174,174,174,185,185,185,183,183,
+  183,183,184,184,184,184, 15
+};
+
+static const unsigned char far  *ag_valid(int ag_k) {
+  const unsigned char far  *ag_tp = &ag_tstt[ag_sbt[(PCB).sn+1]];
+  while (*--ag_tp != (unsigned char) ag_k) if (*ag_tp == 0) return NULL;
+  return ag_tp;
+}
+
+int cc_change_reduction(cc_token_type ag_k) {
+  if (!ag_valid(ag_k)) return 0;
+  (PCB).reduction_token = ag_k;
+  return 1;
+}
+
+static void ag_default(const  int *ag_tp) {
+  (PCB).ag_dsn = (PCB).sn;
+  (PCB).ag_dtl = ag_tp;
+  while (!ag_valid((cc_token_type) *ag_tp)) ag_tp++;
+  (PCB).reduction_token = (cc_token_type) *ag_tp;
+}
+
+
+
+static void ag_ra(void)
+{
+  switch(ag_rpx[(PCB).ag_ap]) {
+    case 1: ag_rp_1(); break;
+    case 2: ag_rp_2(V(0,(int *))); break;
+    case 3: V(0,(int *)) = ag_rp_3(); break;
+    case 4: ag_rp_4(V(0,(token *))); break;
+    case 5: ag_default(&ag_rtt[0]); V(0,(token *)) = ag_rp_5(V(0,(token *))); break;
+  }
+}
+
+#define TOKEN_NAMES cc_token_names
+const char *const cc_token_names[187] = {
+  "prog start",
+  "prog start",
+  "statement",
+  "translation unit",
+  "",
+  "eof",
+  "constant",
+  "FLOATINGconstant",
+  "INTEGERconstant",
+  "OCTALconstant",
+  "HEXconstant",
+  "CHARACTERconstant",
+  "string literal list",
+  "STRINGliteral",
+  "primary expression",
+  "IDENTIFIER",
+  "'('",
+  "expression",
+  "')'",
+  "postfix expression",
+  "'['",
+  "']'",
+  "argument expression list",
+  "'.'",
+  "identifier or typedef name",
+  "ARROW",
+  "ICR",
+  "DECR",
+  "assignment expression",
+  "','",
+  "unary expression",
+  "unary operator",
+  "cast expression",
+  "SIZEOF",
+  "type name",
+  "'&'",
+  "'*'",
+  "'+'",
+  "'-'",
+  "'~'",
+  "'!'",
+  "multiplicative expression",
+  "'/'",
+  "'%'",
+  "additive expression",
+  "shift expression",
+  "LS",
+  "RS",
+  "relational expression",
+  "'<'",
+  "'>'",
+  "LE",
+  "GE",
+  "equality expression",
+  "EQ",
+  "NE",
+  "AND expression",
+  "exclusive OR expression",
+  "'^'",
+  "inclusive OR expression",
+  "'|'",
+  "logical AND expression",
+  "ANDAND",
+  "logical OR expression",
+  "OROR",
+  "conditional expression",
+  "'\\?'",
+  "':'",
+  "assignment operator",
+  "'='",
+  "MULTassign",
+  "DIVassign",
+  "MODassign",
+  "PLUSassign",
+  "MINUSassign",
+  "LSassign",
+  "RSassign",
+  "ANDassign",
+  "ERassign",
+  "ORassign",
+  "constant expression",
+  "expression opt",
+  "declaration",
+  "sue declaration specifier",
+  "';'",
+  "sue type specifier",
+  "declaring list",
+  "default declaring list",
+  "declaration qualifier list",
+  "identifier declarator",
+  "initializer opt",
+  "type qualifier list",
+  "declaration specifier",
+  "declarator",
+  "type specifier",
+  "basic declaration specifier",
+  "typedef declaration specifier",
+  "basic type specifier",
+  "typedef type specifier",
+  "storage class",
+  "declaration qualifier",
+  "type qualifier",
+  "CONST",
+  "VOLATILE",
+  "basic type name",
+  "elaborated type name",
+  "TYPEDEFname",
+  "TYPEDEF",
+  "EXTERN",
+  "STATIC",
+  "AUTO",
+  "REGISTER",
+  "VOID",
+  "CHAR",
+  "SHORT",
+  "INT",
+  "LONG",
+  "FLOAT",
+  "DOUBLE",
+  "SIGNED",
+  "UNSIGNED",
+  "save flag",
+  "struct or union specifier",
+  "enum specifier",
+  "struct or union",
+  "'{'",
+  "struct declaration list",
+  "'}'",
+  "STRUCT",
+  "UNION",
+  "struct declaration",
+  "struct declaring list",
+  "struct default declaring list",
+  "struct identifier declarator",
+  "struct declarator",
+  "bit field size opt",
+  "bit field size",
+  "ENUM",
+  "enumerator list",
+  "enumerator value opt",
+  "parameter type list",
+  "parameter list",
+  "ELLIPSIS",
+  "parameter declaration",
+  "abstract declarator",
+  "parameter typedef declarator",
+  "identifier list",
+  "initializer",
+  "initializer list",
+  "labeled statement",
+  "compound statement",
+  "expression statement",
+  "selection statement",
+  "iteration statement",
+  "jump statement",
+  "CASE",
+  "DEFAULT",
+  "declaration list",
+  "statement list",
+  "IF",
+  "ELSE",
+  "SWITCH",
+  "WHILE",
+  "DO",
+  "FOR",
+  "GOTO",
+  "CONTINUE",
+  "BREAK",
+  "RETURN",
+  "external definition",
+  "function definition",
+  "old function declarator",
+  "typedef declarator",
+  "paren typedef declarator",
+  "postfixing abstract declarator",
+  "clean typedef declarator",
+  "clean postfix typedef declarator",
+  "paren postfix typedef declarator",
+  "simple paren typedef declarator",
+  "unary identifier declarator",
+  "paren identifier declarator",
+  "postfix identifier declarator",
+  "postfix old function declarator",
+  "unary abstract declarator",
+  "postfix abstract declarator",
+  "array abstract declarator",
+  "NAME",
+
+};
+
+#ifndef MISSING_FORMAT
+#define MISSING_FORMAT "Missing %s"
+#endif
+#ifndef UNEXPECTED_FORMAT
+#define UNEXPECTED_FORMAT "Unexpected %s"
+#endif
+#ifndef UNNAMED_TOKEN
+#define UNNAMED_TOKEN "input"
+#endif
+
+
+static void ag_diagnose(void) {
+  int ag_snd = (PCB).sn;
+  int ag_k = ag_sbt[ag_snd];
+
+  if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) {
+    sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
+  }
+  else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8
+          && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1
+          && *TOKEN_NAMES[ag_tstt[ag_k]]) {
+    sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]);
+  }
+  else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) {
+    sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]);
+  }
+  else if (isprint(((PCB).input_code)) && ((PCB).input_code) != '\\') {
+    char buf[20];
+    sprintf(buf, "\'%c\'", (char) ((PCB).input_code));
+    sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf);
+  }
+  else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN);
+  (PCB).error_message = (PCB).ag_msg;
+
+
+}
+static int ag_action_1_r_proc(void);
+static int ag_action_2_r_proc(void);
+static int ag_action_3_r_proc(void);
+static int ag_action_4_r_proc(void);
+static int ag_action_1_s_proc(void);
+static int ag_action_3_s_proc(void);
+static int ag_action_1_proc(void);
+static int ag_action_2_proc(void);
+static int ag_action_3_proc(void);
+static int ag_action_4_proc(void);
+static int ag_action_5_proc(void);
+static int ag_action_6_proc(void);
+static int ag_action_7_proc(void);
+static int ag_action_8_proc(void);
+static int ag_action_9_proc(void);
+static int ag_action_10_proc(void);
+static int ag_action_11_proc(void);
+static int ag_action_8_proc(void);
+
+
+static int (*const  ag_r_procs_scan[])(void) = {
+  ag_action_1_r_proc,
+  ag_action_2_r_proc,
+  ag_action_3_r_proc,
+  ag_action_4_r_proc
+};
+
+static int (*const  ag_s_procs_scan[])(void) = {
+  ag_action_1_s_proc,
+  ag_action_2_r_proc,
+  ag_action_3_s_proc,
+  ag_action_4_r_proc
+};
+
+static int (*const  ag_gt_procs_scan[])(void) = {
+  ag_action_1_proc,
+  ag_action_2_proc,
+  ag_action_3_proc,
+  ag_action_4_proc,
+  ag_action_5_proc,
+  ag_action_6_proc,
+  ag_action_7_proc,
+  ag_action_8_proc,
+  ag_action_9_proc,
+  ag_action_10_proc,
+  ag_action_11_proc,
+  ag_action_8_proc
+};
+
+
+static int ag_action_10_proc(void) {
+  (PCB).btsx = 0, (PCB).drt = -1;
+  ag_track();
+  return 0;
+}
+
+static int ag_action_11_proc(void) {
+  (PCB).btsx = 0, (PCB).drt = -1;
+  (*(token *) &(PCB).vs[(PCB).ssx]) = (PCB).input_value;
+  (PCB).ssx--;
+  ag_ra();
+  (PCB).ssx++;
+  ag_track();
+  return 0;
+}
+
+static int ag_action_3_r_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  (PCB).btsx = 0, (PCB).drt = -1;
+  (PCB).reduction_token = (cc_token_type) ag_ptt[(PCB).ag_ap];
+  ag_ra();
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_3_s_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  (PCB).btsx = 0, (PCB).drt = -1;
+  (PCB).reduction_token = (cc_token_type) ag_ptt[(PCB).ag_ap];
+  ag_ra();
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_4_r_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  (PCB).reduction_token = (cc_token_type) ag_ptt[(PCB).ag_ap];
+  return 1;
+}
+
+static int ag_action_2_proc(void) {
+  (PCB).btsx = 0, (PCB).drt = -1;
+  if ((PCB).ssx >= 128) {
+    ag_trace_error();
+    (PCB).exit_flag = AG_STACK_ERROR_CODE;
+    PARSER_STACK_OVERFLOW;
+  }
+  (*(token *) &(PCB).vs[(PCB).ssx]) = (PCB).input_value;
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  (PCB).ssx++;
+  (PCB).sn = (PCB).ag_ap;
+  ag_track();
+  return 0;
+}
+
+static int ag_action_9_proc(void) {
+  if ((PCB).drt == -1) {
+    (PCB).drt=(PCB).token_number;
+    (PCB).dssx=(PCB).ssx;
+    (PCB).dsn=(PCB).sn;
+  }
+  ag_prot();
+  (PCB).ss[(PCB).ssx] = (PCB).sn;
+  (PCB).ssx++;
+  (PCB).sn = (PCB).ag_ap;
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_2_r_proc(void) {
+  (PCB).ssx++;
+  (PCB).sn = (PCB).ag_ap;
+  return 0;
+}
+
+static int ag_action_7_proc(void) {
+  --(PCB).ssx;
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  return 0;
+}
+
+static int ag_action_1_proc(void) {
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  ag_track();
+  return 0;
+}
+
+static int ag_action_1_r_proc(void) {
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  return 0;
+}
+
+static int ag_action_1_s_proc(void) {
+  (PCB).exit_flag = AG_SUCCESS_CODE;
+  return 0;
+}
+
+static int ag_action_4_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  (PCB).reduction_token = (cc_token_type) ag_ptt[(PCB).ag_ap];
+  (PCB).btsx = 0, (PCB).drt = -1;
+  (*(token *) &(PCB).vs[(PCB).ssx]) = (PCB).input_value;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  else (PCB).ss[(PCB).ssx] = (PCB).sn;
+  ag_track();
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
+    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    if (ag_tstt[ag_t1] != (PCB).reduction_token) {
+      (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; ag_trace_error();
+      REDUCTION_TOKEN_ERROR; break;}
+      (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+  return 0;
+}
+
+static int ag_action_3_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
+  (PCB).btsx = 0, (PCB).drt = -1;
+  (*(token *) &(PCB).vs[(PCB).ssx]) = (PCB).input_value;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  else (PCB).ss[(PCB).ssx] = (PCB).sn;
+  ag_track();
+  (PCB).reduction_token = (cc_token_type) ag_ptt[(PCB).ag_ap];
+  ag_ra();
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
+    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    if (ag_tstt[ag_t1] != (PCB).reduction_token) {
+      (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; ag_trace_error();
+      REDUCTION_TOKEN_ERROR; break;}
+      (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+  return 0;
+}
+
+static int ag_action_8_proc(void) {
+  ag_undo();
+  ag_trace_error();
+  (PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
+  ag_diagnose();
+  SYNTAX_ERROR;
+  ag_track();
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_5_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap];
+  (PCB).btsx = 0, (PCB).drt = -1;
+  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  else {
+    (PCB).ss[(PCB).ssx] = (PCB).sn;
+  }
+  (PCB).reduction_token = (cc_token_type) ag_ptt[(PCB).ag_ap];
+  ag_ra();
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
+    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    if (ag_tstt[ag_t1] != (PCB).reduction_token) {
+      (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; ag_trace_error();
+      REDUCTION_TOKEN_ERROR; break;}
+      (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+static int ag_action_6_proc(void) {
+  int ag_sd = ag_fl[(PCB).ag_ap];
+  (PCB).reduction_token = (cc_token_type) ag_ptt[(PCB).ag_ap];
+  if ((PCB).drt == -1) {
+    (PCB).drt=(PCB).token_number;
+    (PCB).dssx=(PCB).ssx;
+    (PCB).dsn=(PCB).sn;
+  }
+  if (ag_sd) {
+    (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
+  }
+  else {
+    ag_prot();
+    (PCB).vs[(PCB).ssx] = ag_null_value;
+    (PCB).ss[(PCB).ssx] = (PCB).sn;
+  }
+  while ((PCB).exit_flag == AG_RUNNING_CODE) {
+    unsigned ag_t1 = ag_sbe[(PCB).sn] + 1;
+    unsigned ag_t2 = ag_sbt[(PCB).sn+1] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] < (unsigned char)(PCB).reduction_token) ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    if (ag_tstt[ag_t1] != (PCB).reduction_token) {
+      (PCB).exit_flag = AG_REDUCTION_ERROR_CODE; ag_trace_error();
+      REDUCTION_TOKEN_ERROR; break;}
+      (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+  return (PCB).exit_flag == AG_RUNNING_CODE;
+}
+
+
+void init_cc(void) {
+  unsigned ag_t1;
+  ag_t1 = 0;
+  (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0;
+  (PCB).exit_flag = AG_RUNNING_CODE;
+  (PCB).line = FIRST_LINE;
+  (PCB).column = FIRST_COLUMN;
+  (PCB).btsx = 0, (PCB).drt = -1;
+  while (ag_tstt[ag_t1] == 0) {
+    (PCB).ag_ap = ag_pstt[ag_t1];
+    (ag_gt_procs_scan[ag_astt[ag_t1]])();
+    ag_t1 = ag_sbt[(PCB).sn];
+  }
+}
+
+void cc(void) {
+  (PCB).token_number = (cc_token_type) AG_TCV((PCB).input_code);
+  while (1) {
+    unsigned ag_t1 = ag_sbt[(PCB).sn];
+    unsigned ag_t2 = ag_sbe[(PCB).sn] - 1;
+    do {
+      unsigned ag_tx = (ag_t1 + ag_t2)/2;
+      if (ag_tstt[ag_tx] > (unsigned char)(PCB).token_number)
+        ag_t1 = ag_tx + 1;
+      else ag_t2 = ag_tx;
+    } while (ag_t1 < ag_t2);
+    if (ag_tstt[ag_t1] != (unsigned char)(PCB).token_number)
+      ag_t1 = ag_sbe[(PCB).sn];
+    (PCB).ag_ap = ag_pstt[ag_t1];
+    if ((ag_gt_procs_scan[ag_astt[ag_t1]])() == 0) break;
+  }
+}
+
+