view tests/agcl/oldagsrc/good/xvmc.cpp @ 22:5581ef01f993

Regen all the AG output. This also fixes the line number output in the tools (cgbigen/helpgen/help2html), apparently because those files weren't regenerated last go.
author David A. Holland
date Mon, 13 Jun 2022 00:06:39 -0400
parents 13d2b8934445
children
line wrap: on
line source

/*
 XVMC.SYN

 Extensible Scripting Language
 Copyright (c) 1998 Parsifal Software, All Rights Reserved.

 The expression syntax is borrowed from C but with the
 addition of the FORTRAN exponentiation operator (**).

 The supported operations are:
   Assignment operators:        =, +=, -=, *=, /=, %=, , &=, |=, ^=>>=, <<=
   Conditional expressions:     ? :
   Logical operators:           !, &&, ||
   Bitwise logical operators:   &, |, ^, ~
   Comparison operators:        ==, !=, <, <=, >, >=
   Shift operators:             <<, >>
   Binary arithmetic operators: +, -, *, /, %
   Unary arithmetic operators:  +, -
   Exponentiation:              **
   Autoincrement operators:     ++, --;
   Cast operators               (<type name>)
   Parentheses
   Function calls
   Object method calls

 Built in data types are int, double and String.

 Statements may include variable declarations, expression statements,
 blocks, if/else statements, while , do/while, or for statements,
 following the rules of C.

 The statement syntax has been written to avoid the conventional
 if/else ambiguity.

 Input strings may contain any number of statements. White space may be
 used freely, including both C and C++ style comments.

 xvmc.syn is compiled with the AnaGram parser generator
 yielding xvm.h and xvm.cpp.

 For information about AnaGram, visit http://www.parsifalsoft.com.
*/

#include <math.h>
#include "xvm.h"                  // defines external interface
#include "integer.h"
#include "double.h"
#include "xstring.h"

static VirtualMachine *vm;

typedef VirtualMachine::CodeSeg Code;             // For the sake of readability


/*
 * 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 XVMC_H
#include "xvmc.h"
#endif

#ifndef XVMC_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])



vmCompile_pcb_type vmCompile_pcb;
#define PCB vmCompile_pcb
#define CHANGE_REDUCTION(x) vmCompile_change_reduction(vmCompile_##x##_token)
int vmCompile_change_reduction(vmCompile_token_type);


Code vmCompile_value(void);


#line - "xvmc.syn"
 // begin embedded C

#include <string.h>


ErrorRecord::ErrorRecord(char *msg) : message(msg), line(PCB.line), column(PCB.column)
{/* Initializers do it all */}

ErrorLog errorLog;

#define SYNTAX_ERROR errorLog.add(PCB.error_message)

int VirtualMachine::compile(char *text) {
  vm = this;
  resetCharStack();
  vmCompile_pcb.pointer = (unsigned char *) text;
  vmCompile();
  {
    Code program = vmCompile_value() << EXIT;
    int n = program.size();
    codeStore = new int[n];
    while (n--) codeStore[n] = program[n];
  }

  return vmCompile_pcb.exit_flag != AG_SUCCESS_CODE;
}

Code VirtualMachine::codeWhile(Code x, Code s) {
  Code branch(VirtualMachine::BR);
  branch << 0;
  //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined");
  x << VirtualMachine::BRF << (s.size() + branch.size());
  int blockLength = s.size() + x.size() + branch.size();
  x << s << VirtualMachine::BR << -blockLength;
  return x;
}

Code VirtualMachine::codeDoWhile(Code s, Code x) {
  Code branch(VirtualMachine::BR);
  branch << 0;
  int blockLength = s.size() + x.size() + branch.size();
  //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined");
  s << x << VirtualMachine::BRT << -blockLength;
  return s;
}

Code VirtualMachine::codeFor(Code init, Code cond, Code inc, Code s) {
  s << inc;               // append increment code to end of body of for loop
  //if (!cond.type->isTruthDefined()) errorLog.add("True/False not defined");
  init << codeWhile(cond, s);
  return init;
}

#line - "xvmc.cpp"

#ifndef CONVERT_CASE
#define CONVERT_CASE(c) (c)
#endif
#ifndef TAB_SPACING
#define TAB_SPACING 8
#endif
Code vmCompile_value(void) {
  Code returnValue;
  returnValue = (*(Code *) &(PCB).vs[(PCB).ssx]);
  return returnValue;
}

static Code ag_rp_1(void) {
#line - "xvmc.syn"
  return Code();
#line - "xvmc.cpp"
}

static Code ag_rp_2(Code x) {
#line - "xvmc.syn"
  return x;
#line - "xvmc.cpp"
}

static Code ag_rp_3(Code x) {
#line - "xvmc.syn"
  return x;
#line - "xvmc.cpp"
}

static Code ag_rp_4(void) {
#line - "xvmc.syn"
  return errorLog.add("Continuing scan"), Code();
#line - "xvmc.cpp"
}

static Code ag_rp_5(int t, int n) {
#line - "xvmc.syn"
  return vm->declareVariable(t,n), Code();
#line - "xvmc.cpp"
}

static Code ag_rp_6(int t, int n, Code x) {
#line - "xvmc.syn"
    int name = vm->declareVariable(t,n);
    return Code(VirtualMachine::PUSHV) << name << x << VirtualMachine::ASSIGN << VirtualMachine::POP;
 
#line - "xvmc.cpp"
}

static Code ag_rp_7(int t, int n, Code size) {
#line - "xvmc.syn"
  return vm->declareArray(t,n, size);
#line - "xvmc.cpp"
}

static Code ag_rp_8(int t, int n, Code args) {
#line - "xvmc.syn"
  return vm->declareObject(t,n,args);
#line - "xvmc.cpp"
}

static Code ag_rp_9(void) {
#line - "xvmc.syn"
  return Code();
#line - "xvmc.cpp"
}

static Code ag_rp_10(Code x) {
#line - "xvmc.syn"
  return x;
#line - "xvmc.cpp"
}

static Code ag_rp_11(Code x) {
#line - "xvmc.syn"
  return x.initList();
#line - "xvmc.cpp"
}

static Code ag_rp_12(Code list, Code x) {
#line - "xvmc.syn"
  return list.append(x);
#line - "xvmc.cpp"
}

static Code ag_rp_13(Code x) {
#line - "xvmc.syn"
  return x;
#line - "xvmc.cpp"
}

static Code ag_rp_14(Code x, Code s) {
#line - "xvmc.syn"
  return x << s;
#line - "xvmc.cpp"
}

static Code ag_rp_15(Code x) {
#line - "xvmc.syn"
  return x << VirtualMachine::POP;
#line - "xvmc.cpp"
}

static Code ag_rp_16(void) {
#line - "xvmc.syn"
  return Code();
#line - "xvmc.cpp"
}

static Code ag_rp_17(void) {
#line - "xvmc.syn"
  return Code();
#line - "xvmc.cpp"
}

static Code ag_rp_18(Code s) {
#line - "xvmc.syn"
  return s;
#line - "xvmc.cpp"
}

static Code ag_rp_19(Code s) {
#line - "xvmc.syn"
  return errorLog.add("Continuing scan"), s;
#line - "xvmc.cpp"
}

static Code ag_rp_20(Code s, Code x) {
#line - "xvmc.syn"
  return vm->codeDoWhile(s,x);
#line - "xvmc.cpp"
}

static Code ag_rp_21(Code x, Code s) {
#line - "xvmc.syn"
  return vm->codeWhile(x,s);
#line - "xvmc.cpp"
}

static Code ag_rp_22(Code init, Code cond, Code inc, Code s) {
#line - "xvmc.syn"
  return vm->codeFor(init, cond, inc, s);
#line - "xvmc.cpp"
}

static Code ag_rp_23(void) {
#line - "xvmc.syn"
  return Code();
#line - "xvmc.cpp"
}

static Code ag_rp_24(Code x) {
#line - "xvmc.syn"
  return x << VirtualMachine::POP;
#line - "xvmc.cpp"
}

static Code ag_rp_25(Code list, Code x) {
#line - "xvmc.syn"
  return list << x << VirtualMachine::POP;
#line - "xvmc.cpp"
}

static Code ag_rp_26(Code x) {
#line - "xvmc.syn"
  return x;
#line - "xvmc.cpp"
}

static Code ag_rp_27(Code x, Code s) {
#line - "xvmc.syn"
  return vm->codeWhile(x,s);
#line - "xvmc.cpp"
}

static Code ag_rp_28(Code init, Code cond, Code inc, Code s) {
#line - "xvmc.syn"
  return vm->codeFor(init, cond, inc, s);
#line - "xvmc.cpp"
}

static Code ag_rp_29(Code x, Code s) {
#line - "xvmc.syn"
  return x << VirtualMachine::BRF << s.size() << s;
#line - "xvmc.cpp"
}

static Code ag_rp_30(Code x, Code s1, Code s2) {
#line - "xvmc.syn"
      s1 << VirtualMachine::BR << s2.size();
      x << VirtualMachine::BRF << s1.size() << s1 << s2;
      return x;
    
#line - "xvmc.cpp"
}

static Code ag_rp_31(Code x) {
#line - "xvmc.syn"
  return x;
#line - "xvmc.cpp"
}

static Code ag_rp_32(Code x) {
#line - "xvmc.syn"
  return x.testOK();
#line - "xvmc.cpp"
}

static Code ag_rp_33(Code k, Code x) {
#line - "xvmc.syn"
  return k << x << VirtualMachine::ASSIGN;
#line - "xvmc.cpp"
}

static Code ag_rp_34(Code k, Code x) {
#line - "xvmc.syn"
  return k << x << VirtualMachine::ADD_EQ;
#line - "xvmc.cpp"
}

static Code ag_rp_35(Code k, Code x) {
#line - "xvmc.syn"
  return k << x << VirtualMachine::SUB_EQ;
#line - "xvmc.cpp"
}

static Code ag_rp_36(Code k, Code x) {
#line - "xvmc.syn"
  return k << x << VirtualMachine::MULT_EQ;
#line - "xvmc.cpp"
}

static Code ag_rp_37(Code k, Code x) {
#line - "xvmc.syn"
  return k << x << VirtualMachine::DIV_EQ;
#line - "xvmc.cpp"
}

static Code ag_rp_38(Code k, Code x) {
#line - "xvmc.syn"
  return k << x << VirtualMachine::MOD_EQ;
#line - "xvmc.cpp"
}

static Code ag_rp_39(Code k, Code x) {
#line - "xvmc.syn"
  return k << x << VirtualMachine::OR_EQ;
#line - "xvmc.cpp"
}

static Code ag_rp_40(Code k, Code x) {
#line - "xvmc.syn"
  return k << x << VirtualMachine::AND_EQ;
#line - "xvmc.cpp"
}

static Code ag_rp_41(Code k, Code x) {
#line - "xvmc.syn"
  return k << x << VirtualMachine::XOR_EQ;
#line - "xvmc.cpp"
}

static Code ag_rp_42(Code k, Code x) {
#line - "xvmc.syn"
  return k << x << VirtualMachine::LS_EQ;
#line - "xvmc.cpp"
}

static Code ag_rp_43(Code k, Code x) {
#line - "xvmc.syn"
  return k << x << VirtualMachine::RS_EQ;
#line - "xvmc.cpp"
}

static Code ag_rp_44(int k) {
#line - "xvmc.syn"
  return Code(VirtualMachine::PUSHV).setType(vm->symbolTable[k].type) << k;
#line - "xvmc.cpp"
}

static Code ag_rp_45(Code k, Code x) {
#line - "xvmc.syn"
  return k.setType(k.type->element) << x << VirtualMachine::SUBSCRIPT;
#line - "xvmc.cpp"
}

static Code ag_rp_46(Code c, Code x, Code y) {
#line - "xvmc.syn"
      //if (!c.type->isTruthDefined()) errorLog.add("True/False not defined");
      x << VirtualMachine::BR << y.size();
      c << VirtualMachine::BRF << x.size() << x << y;
      return c;
    
#line - "xvmc.cpp"
}

static Code ag_rp_47(Code x) {
#line - "xvmc.syn"
  return x.testOK();
#line - "xvmc.cpp"
}

static Code ag_rp_48(Code x, Code y) {
#line - "xvmc.syn"
      //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined");
      return x << VirtualMachine::OR << y.size() << y;
    
#line - "xvmc.cpp"
}

static Code ag_rp_49(Code x, Code y) {
#line - "xvmc.syn"
      //if (!x.type->isTruthDefined()) errorLog.add("True/False not defined");
      return x << VirtualMachine::AND << y.size() << y;
    
#line - "xvmc.cpp"
}

static Code ag_rp_50(Code x) {
#line - "xvmc.syn"
  return x.testOK();
#line - "xvmc.cpp"
}

static Code ag_rp_51(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::BITOR,y);
#line - "xvmc.cpp"
}

static Code ag_rp_52(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::XOR,y);
#line - "xvmc.cpp"
}

static Code ag_rp_53(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::BITAND,y);
#line - "xvmc.cpp"
}

static Code ag_rp_54(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::EQ,y);
#line - "xvmc.cpp"
}

static Code ag_rp_55(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::NE,y);
#line - "xvmc.cpp"
}

static Code ag_rp_56(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::LT,y);
#line - "xvmc.cpp"
}

static Code ag_rp_57(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::LE,y);
#line - "xvmc.cpp"
}

static Code ag_rp_58(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::GT,y);
#line - "xvmc.cpp"
}

static Code ag_rp_59(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::GE,y);
#line - "xvmc.cpp"
}

static Code ag_rp_60(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::LS,y);
#line - "xvmc.cpp"
}

static Code ag_rp_61(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::RS,y);
#line - "xvmc.cpp"
}

static Code ag_rp_62(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::ADD,y);
#line - "xvmc.cpp"
}

static Code ag_rp_63(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::SUB,y);
#line - "xvmc.cpp"
}

static Code ag_rp_64(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::MULT,y);
#line - "xvmc.cpp"
}

static Code ag_rp_65(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::DIV,y);
#line - "xvmc.cpp"
}

static Code ag_rp_66(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::MOD,y);
#line - "xvmc.cpp"
}

static Code ag_rp_67(int t, Code x) {
#line - "xvmc.syn"
  return x.cast((VirtualMachine::Type::Id) t) << VirtualMachine::CAST << t;
#line - "xvmc.cpp"
}

static Code ag_rp_68(Code x) {
#line - "xvmc.syn"
  return x << VirtualMachine::INCR;
#line - "xvmc.cpp"
}

static Code ag_rp_69(Code x) {
#line - "xvmc.syn"
  return x << VirtualMachine::INCR;
#line - "xvmc.cpp"
}

static Code ag_rp_70(Code x) {
#line - "xvmc.syn"
  return x << VirtualMachine::NEG;
#line - "xvmc.cpp"
}

static Code ag_rp_71(Code x) {
#line - "xvmc.syn"
  return x;
#line - "xvmc.cpp"
}

static Code ag_rp_72(Code x) {
#line - "xvmc.syn"
  return vm->list(stdout), x << VirtualMachine::NOT;
#line - "xvmc.cpp"
}

static Code ag_rp_73(Code x) {
#line - "xvmc.syn"
  return x << VirtualMachine::COMPL;
#line - "xvmc.cpp"
}

static Code ag_rp_74(Code x, Code y) {
#line - "xvmc.syn"
  return x.binop(VirtualMachine::POW,y);
#line - "xvmc.cpp"
}

static Code ag_rp_75(double x) {
#line - "xvmc.syn"
  return vm->doubleList.push(x), Code(VirtualMachine::PUSHD).setType(&DoubleType::doubleType) << (int)(vm->doubleList.size() - 1);
#line - "xvmc.cpp"
}

static Code ag_rp_76(int x) {
#line - "xvmc.syn"
  return Code(VirtualMachine::PUSHI).setType(&IntegerType::intType) << x;
#line - "xvmc.cpp"
}

static Code ag_rp_77(int k) {
#line - "xvmc.syn"
  return Code(VirtualMachine::PUSHS).setType(&StringType::stringType) << k;
#line - "xvmc.cpp"
}

static Code ag_rp_78(Code k) {
#line - "xvmc.syn"
  return k;
#line - "xvmc.cpp"
}

static Code ag_rp_79(Code k) {
#line - "xvmc.syn"
  return k << VirtualMachine::PUSH << VirtualMachine::INCR << VirtualMachine::POP;
#line - "xvmc.cpp"
}

static Code ag_rp_80(Code k) {
#line - "xvmc.syn"
  return k << VirtualMachine::PUSH << VirtualMachine::DECR << VirtualMachine::POP;
#line - "xvmc.cpp"
}

static Code ag_rp_81(int n, Code args) {
#line - "xvmc.syn"
  return vm->invokeFunction(n, args);
#line - "xvmc.cpp"
}

static Code ag_rp_82(Code k, int n, Code args) {
#line - "xvmc.syn"
  return vm->invokeMethod(k, n, args);
#line - "xvmc.cpp"
}

static Code ag_rp_83(Code x) {
#line - "xvmc.syn"
  return x;
#line - "xvmc.cpp"
}

static double ag_rp_84(double x, int e) {
#line - "xvmc.syn"
  return x*pow(10,e);
#line - "xvmc.cpp"
}

static double ag_rp_85(double x, int e) {
#line - "xvmc.syn"
  return x*pow(10,-e);
#line - "xvmc.cpp"
}

static double ag_rp_86(int i, double f) {
#line - "xvmc.syn"
  return i+f;
#line - "xvmc.cpp"
}

static double ag_rp_87(int i) {
#line - "xvmc.syn"
  return i;
#line - "xvmc.cpp"
}

static double ag_rp_88(double f) {
#line - "xvmc.syn"
  return f;
#line - "xvmc.cpp"
}

static int ag_rp_89(int d) {
#line - "xvmc.syn"
  return d-'0';
#line - "xvmc.cpp"
}

static int ag_rp_90(int x, int d) {
#line - "xvmc.syn"
  return 10*x + d-'0';
#line - "xvmc.cpp"
}

static double ag_rp_91(int d) {
#line - "xvmc.syn"
  return (d-'0')/10.;
#line - "xvmc.cpp"
}

static double ag_rp_92(int d, double f) {
#line - "xvmc.syn"
  return (d-'0' + f)/10.;
#line - "xvmc.cpp"
}

static int ag_rp_93(int d) {
#line - "xvmc.syn"
  return d-'0';
#line - "xvmc.cpp"
}

static int ag_rp_94(int x, int d) {
#line - "xvmc.syn"
  return 10*x + d-'0';
#line - "xvmc.cpp"
}

static int ag_rp_95(int k) {
#line - "xvmc.syn"
    char *name = popString(k);
    VirtualMachine::Type::Id id = VirtualMachine::Type::idType(name);
    if (id != VirtualMachine::Type::UNDEFINED) return (int) id;
    CHANGE_REDUCTION(variable_name);
    return vm->locateVariable(name);
 
#line - "xvmc.cpp"
}

static int ag_rp_96(int c) {
#line - "xvmc.syn"
  return pushChar(c), 1;
#line - "xvmc.cpp"
}

static int ag_rp_97(int k, int c) {
#line - "xvmc.syn"
  return pushChar(c), k+1;
#line - "xvmc.cpp"
}

static int ag_rp_98(int c) {
#line - "xvmc.syn"
  return c;
#line - "xvmc.cpp"
}

static int ag_rp_99(int k) {
#line - "xvmc.syn"
  return vm->stringList.push(CharString(popString(k))), vm->stringList.size() - 1;
#line - "xvmc.cpp"
}

static int ag_rp_100(void) {
#line - "xvmc.syn"
  return 0;
#line - "xvmc.cpp"
}

static int ag_rp_101(int k, int c) {
#line - "xvmc.syn"
  return pushChar(c), k+1;
#line - "xvmc.cpp"
}

static int ag_rp_102(void) {
#line - "xvmc.syn"
  return '\a';
#line - "xvmc.cpp"
}

static int ag_rp_103(void) {
#line - "xvmc.syn"
  return '\b';
#line - "xvmc.cpp"
}

static int ag_rp_104(void) {
#line - "xvmc.syn"
  return '\f';
#line - "xvmc.cpp"
}

static int ag_rp_105(void) {
#line - "xvmc.syn"
  return '\n';
#line - "xvmc.cpp"
}

static int ag_rp_106(void) {
#line - "xvmc.syn"
  return '\r';
#line - "xvmc.cpp"
}

static int ag_rp_107(void) {
#line - "xvmc.syn"
  return '\t';
#line - "xvmc.cpp"
}

static int ag_rp_108(void) {
#line - "xvmc.syn"
  return '\v';
#line - "xvmc.cpp"
}

static int ag_rp_109(void) {
#line - "xvmc.syn"
  return '\\';
#line - "xvmc.cpp"
}

static int ag_rp_110(void) {
#line - "xvmc.syn"
  return '\?';
#line - "xvmc.cpp"
}

static int ag_rp_111(void) {
#line - "xvmc.syn"
  return '\'';
#line - "xvmc.cpp"
}

static int ag_rp_112(void) {
#line - "xvmc.syn"
  return '"';
#line - "xvmc.cpp"
}

static int ag_rp_113(int d) {
#line - "xvmc.syn"
  return d-'0';
#line - "xvmc.cpp"
}

static int ag_rp_114(int n, int d) {
#line - "xvmc.syn"
  return 8*n + d-'0';
#line - "xvmc.cpp"
}

static int ag_rp_115(int n, int d) {
#line - "xvmc.syn"
  return 8*n + d-'0';
#line - "xvmc.cpp"
}

static int ag_rp_116(int d) {
#line - "xvmc.syn"
  return d;
#line - "xvmc.cpp"
}

static int ag_rp_117(int n, int d) {
#line - "xvmc.syn"
  return 16*n + d;
#line - "xvmc.cpp"
}

static int ag_rp_118(int d) {
#line - "xvmc.syn"
  return (d&7) + 9;
#line - "xvmc.cpp"
}


#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 vmCompile_vs_type const ag_null_value NULL_VALUE_INITIALIZER;

static const unsigned char ag_rpx[] = {
    0,  1,  2,  0,  0,  0,  0,  3,  0,  0,  4,  5,  6,  7,  8,  9, 10, 11,
   12,  0,  0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,  0, 24, 25, 26,
   27, 28, 29, 30, 31, 32,  0, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
   44, 45,  0, 46, 47,  0, 48,  0, 49, 50,  0, 51,  0, 52,  0, 53,  0, 54,
   55,  0, 56, 57, 58, 59,  0, 60, 61,  0, 62, 63,  0, 64, 65, 66,  0, 67,
    0, 68, 69, 70, 71, 72, 73,  0, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 84, 85, 86, 87,
   88,  0,  0, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,  0,  0, 99,100,101,
    0,  0,102,103,104,105,106,107,108,109,110,111,112,  0,  0,  0,  0,  0,
  113,114,115,116,117,  0,118
};

static const unsigned char ag_key_itt[] = {
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1,
 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 0
};

static const unsigned short ag_key_pt[] = {
  0,164,  0,165,  0,166,  0,167,  0,168,0
};

static const unsigned char ag_key_ch[] = {
    0, 42, 47,255, 43, 45, 47,100,102,105,119,255, 42,255, 38, 61,255, 42,
   61,255, 43, 61,255, 45, 61,255, 42, 47, 61,255, 61,255, 60, 61,255, 61,
  255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, 45, 47, 60, 61, 62, 94,
  100,101,102,105,119,124,255, 43, 45,100,102,105,119,255, 34, 39, 63, 92,
   97, 98,102,110,114,116,118,120,255, 92,255, 42, 47,255, 60, 61,255, 61,
   62,255, 33, 38, 42, 47, 60, 61, 62,124,255, 42, 47,255, 43, 45, 47,255,
   42, 47,255, 60, 61,255, 61, 62,255, 33, 38, 42, 43, 45, 47, 60, 61, 62,
  124,255, 60, 61,255, 61, 62,255, 33, 38, 42, 60, 61, 62,124,255, 43, 45,
  255, 60, 61,255, 61, 62,255, 33, 38, 60, 61, 62,124,255, 33, 38, 60, 61,
   62,124,255, 33, 38, 61,124,255, 38,124,255, 38,255, 42, 47,255, 47,255,
  124,255, 38, 61,255, 42, 61,255, 43, 61,255, 45, 61,255, 42, 47, 61,255,
   61,255, 60, 61,255, 61,255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43,
   45, 47, 60, 61, 62, 94,124,255, 42, 47,255, 43, 45, 47,100,101,102,105,
  119,255, 38, 61,255, 42, 61,255, 43, 61,255, 45, 61,255, 61,255, 60, 61,
  255, 61,255, 61, 62,255, 61,124,255, 33, 37, 38, 42, 43, 45, 47, 60, 61,
   62, 94,124,255, 60, 61,255, 61, 62,255, 33, 38, 42, 43, 45, 60, 61, 62,
  124,255, 43, 45,100,101,102,105,119,255,119,255, 42, 47,255, 60, 61,255,
   61, 62,255, 33, 38, 42, 43, 45, 47, 60, 61, 62,100,102,105,119,124,255
};

static const unsigned char ag_key_act[] = {
  0,0,0,4,3,3,2,7,7,7,7,4,3,4,0,0,4,0,0,4,0,0,4,0,0,4,0,0,0,4,0,4,1,0,4,
  0,4,0,1,4,0,0,4,3,3,2,2,2,2,2,2,3,2,3,7,7,7,7,7,2,4,3,3,7,7,7,7,4,0,0,
  0,0,0,0,0,0,0,0,0,0,4,2,4,0,0,4,0,0,4,0,0,4,3,3,3,2,2,3,2,3,4,0,0,4,3,
  3,2,4,0,0,4,0,0,4,0,0,4,3,3,3,3,3,2,2,3,2,3,4,0,0,4,0,0,4,3,3,3,2,3,2,
  3,4,3,3,4,0,0,4,0,0,4,3,3,2,3,2,3,4,3,3,3,3,3,3,4,3,3,3,3,4,3,3,4,3,4,
  0,0,4,2,4,3,4,0,0,4,0,0,4,0,0,4,0,0,4,0,0,0,4,0,4,1,0,4,0,4,0,1,4,0,0,
  4,3,3,2,2,2,2,2,2,3,2,3,2,4,0,0,4,3,3,2,7,7,7,7,7,4,0,0,4,0,0,4,0,0,4,
  0,0,4,0,4,1,0,4,0,4,0,1,4,0,0,4,3,3,2,2,2,2,3,2,3,2,3,2,4,0,0,4,0,0,4,
  3,3,3,3,3,2,3,2,3,4,3,3,7,7,7,7,7,4,7,4,0,0,4,0,0,4,0,0,4,3,3,3,3,3,2,
  2,3,2,7,7,7,7,3,4
};

static const unsigned char ag_key_parm[] = {
    0, 98,103,  0,199,200,  0,  0,  2,  8,  4,  0,102,  0,182,175,  0,203,
  171,  0,199,169,  0,200,170,  0, 98,103,172,  0,177,  0,192,189,  0,178,
    0,191,193,  0,174,181,  0,187,173,  0,  0,  0,  0,  0,  0,186,  0,176,
    0,  6,  2,  8,  4,  0,  0,199,200,  0,  2,  8,  4,  0,135,134,133,132,
  125,126,127,128,129,130,131,143,  0,  0,  0, 98,103,  0,192,189,  0,191,
  193,  0,187,182,203,  0,  0,186,  0,181,  0, 98,103,  0,199,200,  0,  0,
   98,103,  0,192,189,  0,191,193,  0,187,182,203,199,200,  0,  0,186,  0,
  181,  0,192,189,  0,191,193,  0,187,182,203,  0,186,  0,181,  0,199,200,
    0,192,189,  0,191,193,  0,187,182,  0,186,  0,181,  0,187,182,189,186,
  191,181,  0,187,182,186,181,  0,182,181,  0,182,  0, 98,103,  0,  0,  0,
  181,  0,182,175,  0,203,171,  0,199,169,  0,200,170,  0, 98,103,172,  0,
  177,  0,192,189,  0,178,  0,191,193,  0,174,181,  0,187,173,  0,  0,  0,
    0,  0,  0,186,  0,176,  0,  0, 98,103,  0,199,200,  0,  0,  6,  2,  8,
    4,  0,182,175,  0,203,171,  0,199,169,  0,200,170,  0,177,  0,192,189,
    0,178,  0,191,193,  0,174,181,  0,187,173,  0,  0,  0,  0,172,  0,186,
    0,176,  0,  0,192,189,  0,191,193,  0,187,182,203,199,200,  0,186,  0,
  181,  0,199,200,  0,  6,  2,  8,  4,  0,  4,  0, 98,103,  0,192,189,  0,
  191,193,  0,187,182,203,199,200,  0,  0,186,  0,  0,  2,  8,  4,181,  0
};

static const unsigned short ag_key_jmp[] = {
    0,  0,  0,  0,  0,  2,  1,  4,  6,  9, 11,  0, 16,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0,  0,  0,
    0,  0, 35,  0,  0,  0,  0, 18, 20, 14, 17, 20, 23, 26, 32, 22, 37, 24,
   26, 28, 32, 35, 37, 40,  0, 42, 44, 46, 48, 51, 53,  0,  0,  0,  0,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0, 68,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0, 58, 60, 62, 83, 86, 64, 89, 66,  0,  0,  0,  0, 68, 70,101,  0,
    0,  0,  0,  0,  0,  0,  0,  0,  0, 72, 74, 76, 78, 80,108,111, 82,114,
   84,  0,  0,  0,  0,  0,  0,  0, 86, 88, 90,128, 92,131, 94,  0, 96, 98,
    0,  0,  0,  0,  0,  0,  0,100,102,145,104,148,106,  0,108,110,112,114,
  116,118,  0,120,122,124,126,  0,128,130,  0,132,  0,  0,  0,  0,175,  0,
  134,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
    0,  0,198,  0,  0,  0,  0,  0,203,  0,  0,  0,  0,136,138,182,185,188,
  191,194,200,140,205,142,208,  0,  0,  0,  0,144,146,224,148,150,154,157,
  159,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,  0,
    0,  0,  0,  0,253,  0,  0,  0,  0,164,166,236,239,242,245,168,250,170,
  255,172,258,  0,  0,  0,  0,  0,  0,  0,174,176,178,180,182,274,184,277,
  186,  0,188,190,192,194,198,201,203,  0,208,  0,  0,  0,  0,  0,  0,  0,
    0,  0,  0,213,215,217,219,221,300,303,223,306,225,227,230,232,237,  0
};

static const unsigned short ag_key_index[] = {
    4,  0, 12, 43, 61,  0,  0, 12, 12, 81,  0, 81, 92, 92, 92, 92, 92,104,
  104,104,104,117,117,134,104,142,142,142,142,142,142,142,151,151,151,158,
  165,170,170,173,170,170,178,178,180,180,211,  0,178,  0,  4,  4,227,261,
  261, 61,  0, 61, 61, 61,  0,  0,  0,  0, 61,  0,  0, 81, 81, 81,  0, 92,
   92,  0,104,142,142,280,  0,  0,104,142,104,142,104,142,142,142,104,142,
  104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,
  104,142,104,142,104,142,104,142,142,142,178,  0,104,142,104,142,104,142,
  104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,104,142,
  142,290,142,298, 61,227,  0,211,178,178,178,178,104,178,178,104,309,178,
  178,178,  0,  0,  0,  0,  0,142,151,151,151,151,151,151,151,151,158,158,
  165,170,170,170,170,  0,  0,  0,  0,  0,  0,  0,  4, 61,  0,  0,  0,  0,
  142,142,142,  0, 92, 92,142,142,142,142,142,  0,  0,  0,  0,  0,142,  0,
   61
};

static const unsigned char ag_key_ends[] = {
43,0, 45,0, 111,0, 111,114,0, 102,0, 104,105,108,101,0, 47,0, 
61,0, 61,0, 61,0, 61,0, 111,0, 108,115,101,0, 111,114,0, 102,0, 
104,105,108,101,0, 43,0, 45,0, 111,0, 111,114,0, 102,0, 
104,105,108,101,0, 61,0, 38,0, 42,0, 61,0, 124,0, 43,0, 45,0, 
61,0, 38,0, 42,0, 43,0, 45,0, 61,0, 124,0, 61,0, 38,0, 42,0, 
61,0, 124,0, 43,0, 45,0, 61,0, 38,0, 61,0, 124,0, 61,0, 
38,0, 61,0, 61,0, 61,0, 124,0, 61,0, 38,0, 61,0, 124,0, 
38,0, 124,0, 38,0, 124,0, 61,0, 61,0, 61,0, 61,0, 43,0, 
45,0, 111,0, 108,115,101,0, 111,114,0, 102,0, 104,105,108,101,0, 
61,0, 61,0, 61,0, 61,0, 61,0, 61,0, 38,0, 42,0, 43,0, 45,0, 
61,0, 124,0, 43,0, 45,0, 111,0, 108,115,101,0, 111,114,0, 
102,0, 104,105,108,101,0, 104,105,108,101,0, 61,0, 38,0, 42,0, 
43,0, 45,0, 61,0, 111,0, 111,114,0, 102,0, 104,105,108,101,0, 
124,0, 
};

#define AG_TCV(x) ag_tcv[(x)]

static const unsigned char ag_tcv[] = {
    7,208,208,208,208,208,208,208,208,151,107,151,151,151,208,208,208,208,
  208,208,208,208,208,208,208,208,208,208,208,208,208,208,151,201,209,208,
  208,198,185,210,160,159,196,194,161,195,206,197,211,211,211,211,211,211,
  211,211,212,212,179,154,188,156,190,180,208,213,213,213,213,214,213,215,
  215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,
  215,158,216,157,184,215,208,213,213,213,213,214,213,215,215,215,215,215,
  215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,163,183,162,
  202,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
  208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
  208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
  208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
  208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
  208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
  208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,
  208,208,208,208
};

#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 INPUT_CODE
#define INPUT_CODE(T) (T)
#endif

typedef enum
  {ag_accept_key, ag_set_key, ag_jmp_key, ag_end_key, ag_no_match_key,
   ag_cf_accept_key, ag_cf_set_key, ag_cf_end_key} key_words;

static void ag_get_key_word(int ag_k) {
  int ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
  const  unsigned char *ag_p;
  int ag_ch;
  while (1) {
    switch (ag_key_act[ag_k]) {
    case ag_cf_end_key: {
      const  unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
      do {
        if ((ag_ch = *sp++) == 0) {
          int ag_k1 = ag_key_parm[ag_k];
          int ag_k2 = ag_key_pt[ag_k1];
          if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) goto ag_fail;
          (PCB).token_number = (vmCompile_token_type) ag_key_pt[ag_k1 + 1];
          return;
        }
      } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
      goto ag_fail;
    }
    case ag_end_key: {
      const  unsigned char *sp = ag_key_ends + ag_key_jmp[ag_k];
      do {
        if ((ag_ch = *sp++) == 0) {
          (PCB).token_number = (vmCompile_token_type) ag_key_parm[ag_k];
          return;
        }
      } while (CONVERT_CASE(*(PCB).la_ptr++) == ag_ch);
    }
    case ag_no_match_key:
ag_fail:
      (PCB).la_ptr = (PCB).pointer + ag_save;
      return;
    case ag_cf_set_key: {
      int ag_k1 = ag_key_parm[ag_k];
      int ag_k2 = ag_key_pt[ag_k1];
      ag_k = ag_key_jmp[ag_k];
      if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)]) break;
      ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
      (PCB).token_number = (vmCompile_token_type) ag_key_pt[ag_k1+1];
      break;
    }
    case ag_set_key:
      ag_save = (int) ((PCB).la_ptr - (PCB).pointer);
      (PCB).token_number = (vmCompile_token_type) ag_key_parm[ag_k];
    case ag_jmp_key:
      ag_k = ag_key_jmp[ag_k];
      break;
    case ag_accept_key:
      (PCB).token_number = (vmCompile_token_type) ag_key_parm[ag_k];
      return;
    case ag_cf_accept_key: {
      int ag_k1 = ag_key_parm[ag_k];
      int ag_k2 = ag_key_pt[ag_k1];
      if (ag_key_itt[ag_k2 + CONVERT_CASE(*(PCB).la_ptr)])
        (PCB).la_ptr = (PCB).pointer + ag_save;
      else (PCB).token_number = (vmCompile_token_type) ag_key_pt[ag_k1+1];
      return;
    }
    }
    ag_ch = CONVERT_CASE(*(PCB).la_ptr++);
    ag_p = &ag_key_ch[ag_k];
    if (ag_ch <= 255) while (*ag_p < ag_ch) ag_p++;
    if (ag_ch > 255 || *ag_p != ag_ch) {
      (PCB).la_ptr = (PCB).pointer + ag_save;
      return;
    }
    ag_k = (int) (ag_p - ag_key_ch);
  }
}


#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) {
  int ag_k = (int) ((PCB).la_ptr - (PCB).pointer);
  while (ag_k--) {
    switch (*(PCB).pointer++) {
    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++;
    }
  }
}


static void ag_prot(void) {
  int ag_k;
  ag_k = 128 - ++(PCB).btsx;
  if (ag_k <= (PCB).ssx) {
    (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 = (vmCompile_token_type) (PCB).drt;
  (PCB).ssx = (PCB).dssx;
  (PCB).sn = (PCB).dsn;
  (PCB).drt = -1;
}



static const int ag_rtt[] = {
   17, 53,  0
};

static const unsigned char ag_tstt[] = {
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
  160,154,151,107,103,98,7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,0,105,
  106,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,102,0,
  100,101,
151,107,103,98,0,1,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
  160,154,9,7,0,2,3,4,5,6,8,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38,
  40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,
  92,93,95,108,112,114,121,155,204,205,207,217,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,0,
107,0,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,0,
102,0,
216,215,214,213,212,211,209,208,206,202,201,198,197,196,195,194,190,188,185,
  184,183,180,179,163,162,161,160,159,158,157,156,154,151,143,135,134,133,
  132,131,130,129,128,127,126,125,0,118,120,136,137,138,139,140,
212,211,0,113,114,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,143,135,134,
  133,132,131,130,129,128,127,126,125,0,120,123,136,137,138,139,140,
203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,
  180,179,161,159,157,154,151,107,103,98,0,1,152,153,
212,211,206,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,
  183,182,181,180,179,161,159,157,154,151,107,103,98,0,1,114,152,153,
214,0,
203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,
  180,179,161,159,157,154,151,107,103,98,0,1,152,153,
203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,
  180,179,161,159,157,154,151,107,103,98,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,203,202,201,200,199,198,197,196,195,194,193,
  192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,160,159,157,
  154,151,107,103,98,0,1,152,153,
215,214,213,212,211,210,209,206,203,202,201,200,199,198,197,196,195,194,193,
  192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,160,159,157,
  154,151,107,103,98,0,1,152,153,
203,0,94,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,17,19,
  22,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,
  92,93,95,108,112,114,121,155,204,205,207,217,
198,197,196,0,84,85,86,
195,194,0,81,82,
193,192,0,78,79,
191,190,189,188,0,73,74,75,76,
187,186,0,70,71,
185,0,68,
184,0,66,
182,0,62,
183,0,64,
182,181,180,179,161,159,157,154,0,
160,151,107,103,98,0,1,152,153,
160,151,107,103,98,0,1,152,153,
181,180,0,56,59,
181,180,179,161,159,157,154,0,
215,214,213,212,211,206,203,200,199,198,197,196,195,194,193,192,191,190,189,
  188,187,186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,
  170,169,161,160,159,158,157,156,154,151,107,103,98,0,1,152,153,
160,0,22,
160,151,107,103,98,0,1,152,153,
160,0,22,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
  160,154,151,107,103,98,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,168,166,165,164,163,162,161,160,159,158,157,
  156,154,151,107,103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,167,166,165,164,
  163,162,160,159,154,151,107,103,98,7,0,1,152,153,
206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,
  183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,161,159,158,
  157,156,154,0,18,20,43,44,45,46,47,48,49,50,51,52,89,90,96,
215,214,213,206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187,
  186,185,184,183,182,181,180,179,178,177,176,175,174,173,172,171,170,169,
  161,160,159,158,157,156,154,0,22,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
  160,154,0,2,3,4,5,14,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,
  58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,
  114,121,155,204,205,207,217,
160,0,22,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
  160,154,0,2,3,4,5,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,58,
  60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,
  121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
  160,154,0,2,3,4,5,14,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,
  58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,
  114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
  162,160,154,9,0,2,3,4,5,8,13,14,15,16,17,19,22,27,28,29,30,31,32,33,37,
  38,40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,
  91,92,93,95,108,112,114,121,155,204,205,207,217,
154,0,16,
215,214,213,0,3,155,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,161,160,159,158,157,156,154,0,11,12,18,20,21,22,
  24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,141,
  142,147,148,149,150,
154,0,16,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
  160,154,9,7,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38,40,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
211,0,
214,213,212,211,0,144,
211,0,
211,0,
214,213,212,211,0,144,
210,0,
214,212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,
  183,182,181,180,179,161,159,157,154,151,107,103,98,0,113,114,
214,212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,
  183,182,181,180,179,161,159,157,154,151,107,103,98,0,113,114,
212,211,195,194,0,110,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,81,82,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
206,203,200,199,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,
  183,182,181,180,179,161,159,158,157,154,0,20,89,90,96,
159,0,24,
159,0,24,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,
  217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,
  217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,
  207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,
  207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,
  205,207,217,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,
  205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,
  205,207,217,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,
  205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,
  205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,
  205,207,217,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,
  204,205,207,217,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,
  155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,60,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,
  121,155,204,205,207,217,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,
  121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,
  112,114,121,155,204,205,207,217,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,
  92,93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,
  92,93,95,108,112,114,121,155,204,205,207,217,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
  7,0,1,152,153,
215,214,213,0,3,155,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,151,107,103,98,
  0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5,
  19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,
  89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
167,0,39,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,154,0,2,3,4,5,
  19,22,34,36,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,
  89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
166,0,32,37,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
  162,160,154,9,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,30,31,32,33,37,38,
  40,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,
  92,93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,167,166,165,164,
  163,162,160,154,151,107,103,98,7,0,1,152,153,
160,158,156,154,0,18,20,22,
216,215,214,213,212,211,210,209,208,206,203,202,201,200,199,198,197,196,195,
  194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,178,177,
  176,175,174,173,172,171,170,169,163,162,161,160,159,158,157,156,154,151,
  107,103,98,7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
  7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
  7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
  7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
  7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
  7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
  7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,200,199,198,197,196,195,194,
  190,188,185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,
  103,98,7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,203,202,201,200,199,198,197,196,195,
  194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,168,166,
  165,164,163,162,161,160,159,158,157,156,154,151,107,103,98,7,0,1,152,
  153,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
  7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
  7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,151,107,103,98,
  7,0,1,152,153,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,161,160,159,158,157,156,0,18,20,21,22,24,26,29,
  56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,141,142,147,
  148,149,150,
154,0,16,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,161,160,159,158,157,156,154,7,0,11,12,18,20,21,
  22,24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,
  141,142,147,148,149,150,
212,211,0,111,114,
212,211,0,111,114,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,42,
  53,81,82,83,87,88,89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,
  179,161,159,157,154,0,84,85,86,
198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,
  179,161,159,157,154,0,84,85,86,
195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,
  157,154,0,81,82,
195,194,193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,
  157,154,0,81,82,
193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,
  0,78,79,
193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,
  0,78,79,
193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,
  0,78,79,
193,192,191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,
  0,78,79,
191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,0,73,74,
  75,76,
191,190,189,188,187,186,185,184,183,182,181,180,179,161,159,157,154,0,73,74,
  75,76,
187,186,185,184,183,182,181,180,179,161,159,157,154,0,70,71,
185,184,183,182,181,180,179,161,159,157,154,0,68,
183,182,181,180,179,161,159,157,154,0,64,
184,183,182,181,180,179,161,159,157,154,0,66,
182,181,180,179,161,159,157,154,0,
179,0,57,
159,0,24,
159,0,24,
160,0,22,
157,0,21,
161,159,0,26,
159,0,24,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
  160,154,151,107,103,98,0,1,152,153,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
  160,154,9,0,2,3,4,5,13,14,15,16,17,19,22,27,28,29,31,32,33,37,38,40,41,
  42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,
  95,108,112,114,121,155,204,205,207,217,
161,0,26,
154,0,16,
154,0,16,
216,215,214,213,212,211,210,209,208,206,202,201,198,197,196,195,194,190,188,
  185,184,183,180,179,163,162,161,160,159,158,157,156,154,0,11,12,18,20,
  21,22,24,26,29,56,57,64,66,68,73,75,81,82,84,85,86,91,92,96,109,117,122,
  141,142,147,148,149,150,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5,
  19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,
  89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
154,7,0,16,
212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,
  182,181,180,179,161,159,157,154,151,107,103,98,0,114,
212,211,203,198,197,196,195,194,193,192,191,190,189,188,187,186,185,184,183,
  182,181,180,179,161,159,157,154,151,107,103,98,0,114,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,22,41,
  42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,
  95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5,
  19,22,23,25,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,
  89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,
  93,95,108,112,114,121,155,204,205,207,217,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,0,2,3,4,5,19,22,
  35,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,
  92,93,95,108,112,114,121,155,204,205,207,217,
162,154,0,16,30,
159,0,24,
157,0,21,
159,0,24,
154,0,16,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,160,159,0,2,3,4,5,
  19,22,34,36,41,42,53,54,55,58,60,61,63,65,67,69,72,77,80,81,82,83,87,88,
  89,90,91,92,93,95,108,112,114,121,155,204,205,207,217,
159,0,24,
215,214,213,212,211,210,209,206,202,201,200,199,195,194,168,166,165,164,163,
  160,154,0,2,3,4,5,16,19,22,27,28,29,31,32,33,37,38,40,41,42,53,54,55,58,
  60,61,63,65,67,69,72,77,80,81,82,83,87,88,89,90,91,92,93,95,108,112,114,
  121,155,204,205,207,217,

};


static unsigned const char ag_astt[7073] = {
  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,1,1,1,8,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,8,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,8,7,1,1,9,9,1,1,
  5,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,7,2,1,2,2,0,1,2,2,1,2,1,
  1,1,2,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,1,1,1,1,1,1,2,
  1,2,2,1,1,1,1,1,1,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
  9,9,9,9,9,9,5,3,7,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
  9,9,9,9,9,9,9,5,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,1,1,1,1,
  1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,7,1,1,1,1,1,1,1,1,1,7,2,1,1,10,10,10,
  10,10,10,2,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,
  10,10,10,10,10,1,2,2,2,2,2,2,2,2,2,2,2,7,2,2,2,1,1,1,2,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,1,1,1,1,7,1,1,3,10,10,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,1,1,1,1,7,1,2,1,3,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,1,1,1,1,7,1,1,3,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,1,1,1,1,7,1,1,3,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,1,1,1,1,5,7,1,1,3,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,1,1,1,1,5,7,1,1,3,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,1,1,1,1,5,7,1,
  1,3,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,
  1,1,1,1,5,7,1,1,3,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,1,1,1,1,7,1,1,3,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,1,1,1,1,7,1,1,3,1,5,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,1,1,1,1,5,7,1,1,3,
  2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,
  1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,
  2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,
  1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,
  2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,
  1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,
  1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,
  1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,1,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,2,1,2,2,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,5,1,1,1,1,5,1,1,1,1,1,1,5,1,
  1,1,1,1,1,5,1,1,1,5,1,1,5,1,1,7,1,1,5,1,4,5,5,5,5,5,5,5,7,5,1,1,1,1,7,1,1,
  3,5,1,1,1,1,7,1,1,3,1,1,7,1,1,4,4,5,5,5,5,5,7,10,10,10,10,10,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,5,1,1,1,
  1,7,1,1,3,1,7,1,5,1,1,1,1,7,1,1,3,1,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,1,1,1,1,7,1,1,3,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,1,1,1,1,5,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,1,4,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
  4,4,4,4,4,4,1,1,1,1,1,1,1,1,1,1,4,4,1,4,1,4,7,1,1,1,1,1,1,1,1,1,1,1,1,2,2,
  1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
  4,4,1,4,4,4,4,4,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2,
  2,1,1,1,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,1,1,1,1,1,1,
  2,1,2,2,1,1,1,1,1,1,1,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,
  2,2,2,1,1,2,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,1,1,1,1,
  1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,
  2,1,2,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,1,1,1,1,
  1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,
  1,2,2,1,2,2,1,2,1,1,1,2,2,1,2,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,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,7,2,2,2,2,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,8,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,7,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,2,7,2,1,2,2,2,2,1,2,1,1,1,2,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,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,7,2,2,2,2,7,2,2,
  5,2,5,2,2,10,10,5,2,2,7,4,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
  4,4,4,4,4,4,4,7,2,1,4,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
  4,4,4,4,4,7,2,1,8,8,1,1,7,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,
  2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,1,1,1,1,1,2,1,2,2,1,
  1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,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,2,1,2,2,1,1,1,1,1,1,1,4,1,1,4,4,4,4,4,4,4,4,
  4,4,4,4,4,4,4,4,4,4,4,4,4,4,1,4,4,7,1,2,2,1,1,7,2,1,7,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,1,1,1,1,5,7,1,1,3,2,2,
  2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1,
  1,1,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,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,2,
  2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,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,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,
  1,1,7,2,1,2,2,1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,
  1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,
  2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,
  2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,
  1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,
  1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,
  1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,
  2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,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,1,1,1,1,5,7,1,1,3,2,2,2,
  2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,
  1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,
  1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,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,1,
  1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,
  1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,
  1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,
  2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
  1,2,2,1,1,1,1,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,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,
  1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,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,1,1,1,1,5,7,1,1,3,2,2,2,
  2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
  1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,
  1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,
  1,2,2,1,1,1,1,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,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,
  1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,
  5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,
  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,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,1,1,1,1,5,7,1,1,
  3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,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,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,
  2,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,
  1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,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,1,1,1,1,5,7,1,1,3,2,2,2,7,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,1,1,
  1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,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,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,
  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,
  2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,
  1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,
  1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,
  2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,
  2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,
  2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,
  1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,
  5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,5,5,5,5,5,
  5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,
  2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,
  1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,
  1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,
  2,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,3,2,2,2,2,2,1,2,
  1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,2,1,2,2,1,1,1,1,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,1,1,1,1,5,7,1,1,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,
  1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,
  1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,5,1,2,2,2,2,2,1,2,1,
  1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,7,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,7,2,1,2,2,2,2,1,2,1,1,1,2,2,1,2,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,1,1,1,1,1,1,2,1,2,2,1,1,1,1,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,1,1,1,1,5,7,1,1,3,1,1,1,4,7,1,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,5,5,5,5,5,5,
  5,5,5,5,5,5,5,5,1,1,1,1,5,7,1,1,3,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,1,1,1,1,5,7,1,1,3,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,1,1,1,1,5,7,1,1,3,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,1,1,1,1,5,7,1,1,3,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,1,1,1,1,5,7,1,1,3,
  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,1,1,
  1,1,5,7,1,1,3,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,1,1,1,1,5,7,1,1,3,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,1,1,1,1,5,7,1,1,3,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,1,1,1,1,5,7,1,1,3,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,5,5,5,5,5,5,5,5,1,1,
  1,1,5,7,1,1,3,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,1,1,1,1,5,7,1,1,3,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,1,1,1,1,5,7,1,1,3,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,1,1,1,1,5,7,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,1,1,1,1,1,5,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,
  3,3,3,3,3,3,3,3,3,3,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,1,1,8,8,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,2,7,1,2,2,2,7,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,
  1,1,2,1,1,2,2,2,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,
  4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
  4,7,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,
  4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,
  1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,
  4,4,4,4,4,7,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,4,4,4,
  4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,1,1,1,1,4,4,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,1,
  1,1,4,4,4,4,4,4,4,4,4,4,4,7,1,1,1,4,4,4,4,4,4,4,4,4,4,7,1,1,4,4,4,4,4,4,4,
  4,7,1,1,4,4,4,4,4,4,4,4,4,7,1,4,4,4,4,4,4,4,4,7,1,7,1,1,7,2,1,7,2,1,7,1,1,
  7,2,1,4,7,1,1,7,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,7,1,1,
  3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2,2,1,2,1,1,1,2,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,1,1,1,1,1,1,2,1,2,2,1,
  1,1,1,1,1,1,5,1,1,7,1,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,8,1,1,1,1,1,1,8,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,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,
  1,1,1,1,1,1,1,1,7,2,1,2,2,1,1,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,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,
  2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,2,7,2,
  10,10,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,2,10,10,
  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,7,2,2,2,2,2,2,1,
  2,1,1,1,1,1,1,1,1,7,2,1,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,
  1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,
  2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,
  2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,
  1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,1,2,1,2,1,1,1,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,7,2,2,1,7,2,1,7,2,1,7,2,
  1,7,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,4,7,2,1,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,7,1,2,2,2,2,2,1,2,1,
  1,1,1,1,1,1,1,1,1,1,1,1,1,7,2,1,2,2,2,1,1,2,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,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1
};


static const unsigned short ag_pstt[] = {
4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,1,2,4,0,3,3,4,
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,6,1,5,6,
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,2,7,
  8,
349,349,1,2,351,349,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,62,1,4,
  99,54,101,100,0,64,21,21,63,24,61,60,31,21,21,59,58,57,56,49,55,47,60,
  53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,
  100,14,100,129,11,46,16,15,12,13,
115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
  115,115,115,115,115,115,115,115,115,115,115,115,115,115,115,117,
118,6,
110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
  110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,110,112,
113,8,
65,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,70,
  70,70,70,70,70,70,70,70,66,156,155,154,153,152,151,150,149,148,147,146,
  9,70,70,70,69,68,67,70,
71,71,10,126,71,
65,143,143,143,143,143,143,141,143,143,143,143,143,143,143,143,143,143,143,
  143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,66,156,155,
  154,153,152,151,150,149,148,147,146,11,143,143,143,69,68,67,143,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,3,3,1,2,12,3,3,405,
130,130,72,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,3,3,1,2,13,3,130,3,415,
73,119,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,3,3,1,2,15,3,3,403,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,3,3,1,2,16,3,3,402,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,17,3,3,400,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,18,3,3,399,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,19,3,3,392,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,20,3,3,393,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,3,3,1,2,21,3,3,398,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,3,3,1,2,22,3,3,397,
74,97,75,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,24,3,3,358,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,25,99,54,101,100,76,77,54,
  27,28,96,96,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,26,99,54,101,100,76,77,54,
  27,28,95,95,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,27,99,54,101,100,76,77,54,
  27,28,94,94,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,28,99,54,101,100,76,77,54,
  27,28,93,93,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,29,99,54,101,100,76,77,54,
  27,28,92,92,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,30,99,54,101,100,76,77,54,
  27,28,91,91,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,99,54,101,100,79,78,31,
  78,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
80,82,84,81,85,83,81,
20,19,78,87,86,
88,90,73,91,89,
92,94,96,98,70,99,97,95,93,
100,102,68,103,101,
104,66,105,
106,64,107,
108,39,109,
110,61,111,
63,59,59,59,59,59,59,59,41,
350,3,3,1,2,42,3,3,366,
350,3,3,1,2,43,3,3,364,
112,114,44,115,113,
58,58,56,56,56,56,56,45,
137,137,137,137,137,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,3,3,1,2,46,3,3,353,
24,47,116,
350,3,3,1,2,48,3,3,363,
24,49,117,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,3,3,1,2,50,3,3,362,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,3,3,1,2,350,51,3,3,361,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,3,3,1,2,350,52,3,3,352,
118,102,21,22,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
  102,102,102,102,102,122,124,126,128,130,132,134,136,138,140,102,102,120,
  102,142,102,53,143,121,141,139,137,135,133,131,129,127,125,123,103,104,
  119,
135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
  135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
  135,24,135,135,135,135,135,54,144,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,55,99,
  54,101,100,38,24,60,31,145,38,59,58,57,56,49,55,47,60,53,54,45,44,41,40,
  39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,
  46,16,15,12,13,
24,56,146,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,57,99,
  54,101,100,24,60,31,29,36,59,58,57,56,49,55,47,60,53,54,45,44,41,40,39,
  38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,
  16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,58,99,
  54,101,100,147,24,60,31,147,147,59,58,57,56,49,55,47,60,53,54,45,44,41,
  40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,
  11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,149,24,52,62,
  59,99,54,101,100,148,21,21,63,24,61,60,31,21,21,59,25,58,57,56,49,55,47,
  60,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
52,60,23,
136,136,136,61,150,46,
152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106,
  110,114,156,51,159,24,160,120,151,142,165,62,164,165,164,164,164,164,
  164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
  164,164,164,164,164,164,164,164,164,
52,63,9,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,166,2,
  64,99,54,101,100,22,22,63,24,61,60,31,22,22,59,58,57,56,49,55,47,60,53,
  54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,
  100,14,100,129,11,46,16,15,12,13,
162,65,
168,168,165,165,66,165,
164,160,
163,159,
168,168,166,166,158,166,
138,70,
131,71,71,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,
  131,131,131,131,131,131,131,131,131,131,131,131,131,71,132,71,
125,71,71,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,
  125,125,125,125,125,125,125,125,125,125,125,125,125,72,124,71,
168,168,167,168,73,168,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,74,3,3,
  401,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,75,99,54,101,100,76,77,54,
  27,28,98,98,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,76,99,54,101,100,78,31,78,
  53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,
  100,14,100,129,11,46,16,15,12,13,
118,102,21,22,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
  102,102,102,102,102,102,102,120,102,102,77,121,103,104,119,
160,78,107,
160,79,169,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,80,3,3,396,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,81,99,54,101,100,31,77,54,
  27,28,87,87,87,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,82,3,3,395,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,83,99,54,101,100,31,77,54,
  27,28,86,86,86,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,84,3,3,394,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,85,99,54,101,100,31,77,54,
  27,28,85,85,85,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,86,99,54,101,100,31,77,54,
  170,27,28,170,170,170,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,87,99,54,101,100,31,77,54,
  171,27,28,171,171,171,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,88,3,3,
  391,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,89,99,54,101,100,31,77,54,
  172,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,90,3,3,
  390,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,91,99,54,101,100,31,77,54,
  173,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,92,3,3,
  389,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,93,99,54,101,100,31,77,54,
  174,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,
  13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,94,3,3,388,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,95,99,54,101,100,31,77,54,
  175,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,
  13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,96,3,3,
  387,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,97,99,54,101,100,31,77,54,
  176,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,
  13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,98,3,3,386,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,99,99,54,101,100,31,77,54,
  177,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,15,12,
  13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,100,3,3,
  385,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,101,99,54,101,100,31,77,
  54,178,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,
  15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,102,3,3,
  384,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,103,99,54,101,100,31,77,
  54,179,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,16,
  15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,104,3,3,383,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,105,99,54,101,100,31,77,
  54,180,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,
  16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,106,3,3,382,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,107,99,54,101,100,31,77,
  54,181,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,
  46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,108,3,3,
  380,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,109,99,54,101,100,31,77,
  54,182,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,
  129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,110,3,3,381,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,111,99,54,101,100,31,77,
  54,183,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,
  11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,112,3,3,
  379,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,113,99,54,101,100,31,77,
  54,184,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,
  100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,114,3,3,378,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,115,99,54,101,100,185,31,
  185,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,
  25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,116,99,54,101,100,41,31,
  186,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,
  26,25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,117,99,54,101,100,41,31,
  187,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,
  26,25,23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,118,
  3,3,404,
136,136,136,119,188,46,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,120,3,3,356,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,121,99,54,101,100,189,31,
  189,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,
  25,23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,122,3,3,
  376,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,123,99,54,101,100,53,31,
  53,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,124,3,3,
  375,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,125,99,54,101,100,52,31,
  52,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,126,3,3,
  374,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,127,99,54,101,100,51,31,
  51,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,128,3,3,
  373,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,129,99,54,101,100,50,31,
  50,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,130,3,3,
  372,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,131,99,54,101,100,49,31,
  49,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,132,3,3,
  371,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,133,99,54,101,100,48,31,
  48,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,134,3,3,
  370,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,135,99,54,101,100,47,31,
  47,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,136,3,3,
  369,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,137,99,54,101,100,46,31,
  46,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,138,3,3,
  368,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,139,99,54,101,100,45,31,
  45,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,140,3,3,
  367,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,141,99,54,101,100,44,31,
  44,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,142,3,3,354,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,143,99,54,101,100,43,31,
  43,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,144,99,54,101,100,17,
  31,191,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,
  30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
192,19,193,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,146,99,54,101,100,33,
  31,195,194,33,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,
  30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
43,147,196,49,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,149,24,52,197,
  148,99,54,101,100,22,22,63,24,61,60,31,22,22,59,26,58,57,56,49,55,47,60,
  53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,
  100,14,100,129,11,46,16,15,12,13,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,3,3,1,2,350,149,3,3,360,
24,120,142,11,150,200,199,198,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,
  1,2,350,151,3,3,355,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,152,
  3,3,414,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,153,
  3,3,413,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,154,
  3,3,412,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,155,
  3,3,411,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,156,3,3,377,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,157,
  3,3,410,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,158,
  3,3,409,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,
  350,159,3,3,359,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,160,3,3,357,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,161,
  3,3,408,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,162,
  3,3,407,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,350,350,350,350,350,350,350,350,350,350,350,350,3,3,1,2,350,163,
  3,3,406,
152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106,
  110,114,156,51,159,24,160,120,151,142,6,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
52,165,10,
152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106,
  110,114,156,51,159,24,160,120,151,142,201,201,166,164,201,164,164,164,
  164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
  164,164,164,164,164,164,164,164,164,164,
133,133,167,202,133,
133,133,168,203,133,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,169,99,54,101,100,31,77,
  54,27,28,89,89,89,30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
80,82,84,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,170,
  85,83,81,
80,82,84,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,82,171,
  85,83,81,
20,19,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,172,87,86,
20,19,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,79,173,87,86,
88,90,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,77,174,91,89,
88,90,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,76,175,91,89,
88,90,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,75,176,91,89,
88,90,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,177,91,89,
92,94,96,98,72,72,72,72,72,72,72,72,72,72,72,72,72,178,99,97,95,93,
92,94,96,98,71,71,71,71,71,71,71,71,71,71,71,71,71,179,99,97,95,93,
100,102,69,69,69,69,69,69,69,69,69,69,69,180,103,101,
104,67,67,67,67,67,67,67,67,67,67,181,105,
110,62,62,62,62,62,62,62,62,182,111,
106,65,65,65,65,65,65,65,65,65,183,107,
63,60,60,60,60,60,60,60,184,
156,185,204,
160,186,40,
160,187,35,
24,188,205,
151,189,55,
159,16,190,206,
160,191,105,
350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
  350,350,3,3,1,2,192,3,3,365,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,62,193,
  99,54,101,100,39,39,63,24,61,60,31,39,39,59,58,57,56,49,55,47,60,53,54,
  45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,
  14,100,129,11,46,16,15,12,13,
159,32,207,
52,195,208,
52,196,28,
152,153,154,155,157,158,161,162,163,118,17,18,80,82,84,20,19,94,98,104,106,
  110,114,156,51,209,159,24,160,120,151,142,209,197,164,209,164,164,164,
  164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,
  164,164,164,164,164,164,164,164,164,164,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,198,99,54,101,100,17,
  31,210,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,
  30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,199,99,54,101,100,211,31,
  211,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,
  25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,200,99,54,101,100,12,31,
  12,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
52,7,201,10,
134,134,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,
  123,123,123,123,123,123,123,123,123,123,123,123,202,134,
134,134,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
  122,122,122,122,122,122,122,122,122,122,122,122,203,134,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,204,99,54,101,100,31,57,
  77,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,
  100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,15,205,99,54,101,100,17,
  31,212,190,17,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,
  30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,206,99,54,101,100,18,31,
  18,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,207,99,54,101,100,34,31,
  34,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,
  23,100,14,100,129,11,46,16,15,12,13,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,208,99,54,101,100,41,31,
  213,41,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,30,29,
  26,25,23,100,14,100,129,11,46,16,15,12,13,
149,52,209,10,27,
160,210,14,
151,211,13,
160,212,106,
52,213,214,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,24,31,214,99,54,101,100,33,
  31,215,194,33,53,54,45,44,41,40,39,38,37,36,35,34,33,32,27,28,32,32,32,
  30,29,26,25,23,100,14,100,129,11,46,16,15,12,13,
160,215,216,
136,136,136,129,129,9,142,10,17,18,21,22,20,19,42,43,48,50,51,24,52,216,99,
  54,101,100,24,60,31,30,37,59,58,57,56,49,55,47,60,53,54,45,44,41,40,39,
  38,37,36,35,34,33,32,27,28,32,32,32,30,29,26,25,23,100,14,100,129,11,46,
  16,15,12,13,

};


static const unsigned short ag_sbt[] = {
     0,  30,  68, 107, 113, 194, 229, 231, 267, 269, 322, 327, 381, 414,
   451, 453, 486, 519, 563, 607, 651, 695, 741, 787, 790, 834, 876, 918,
   960,1002,1044,1086,1144,1151,1156,1161,1170,1175,1178,1181,1184,1187,
  1196,1205,1214,1219,1227,1281,1284,1293,1296,1325,1373,1406,1462,1508,
  1582,1585,1658,1732,1813,1816,1822,1888,1891,1970,1972,1978,1980,1982,
  1988,1990,2025,2060,2066,2089,2131,2188,2222,2225,2228,2272,2315,2359,
  2402,2446,2489,2533,2577,2600,2645,2668,2713,2736,2782,2826,2872,2895,
  2941,2985,3031,3054,3101,3124,3171,3215,3263,3307,3356,3379,3430,3474,
  3524,3547,3600,3644,3701,3759,3817,3859,3865,3909,3966,3989,4046,4069,
  4126,4149,4206,4229,4286,4309,4366,4389,4446,4469,4526,4549,4606,4629,
  4686,4709,4766,4810,4867,4927,4930,4990,4994,5074,5106,5114,5177,5219,
  5261,5303,5345,5389,5431,5473,5517,5574,5616,5658,5700,5763,5766,5833,
  5838,5843,5886,5914,5942,5966,5990,6012,6034,6056,6078,6100,6122,6138,
  6151,6162,6174,6183,6186,6189,6192,6195,6198,6202,6205,6234,6312,6315,
  6318,6321,6388,6448,6505,6562,6566,6599,6632,6688,6748,6805,6862,6920,
  6925,6928,6931,6934,6937,6997,7000,7073
};


static const unsigned short ag_sbe[] = {
    26,  65, 104, 111, 136, 228, 230, 266, 268, 314, 324, 373, 410, 446,
   452, 482, 515, 559, 603, 647, 691, 737, 783, 788, 830, 849, 891, 933,
   975,1017,1059,1101,1147,1153,1158,1165,1172,1176,1179,1182,1185,1195,
  1201,1210,1216,1226,1277,1282,1289,1294,1321,1369,1402,1446,1506,1529,
  1583,1606,1679,1755,1814,1819,1854,1889,1914,1971,1976,1979,1981,1986,
  1989,2022,2057,2064,2085,2104,2146,2217,2223,2226,2268,2287,2355,2374,
  2442,2461,2504,2548,2596,2615,2664,2683,2732,2751,2822,2841,2891,2910,
  2981,3000,3050,3069,3120,3139,3211,3230,3303,3322,3375,3394,3470,3489,
  3543,3562,3640,3659,3716,3774,3855,3862,3905,3924,3985,4004,4065,4084,
  4145,4164,4225,4244,4305,4324,4385,4404,4465,4484,4545,4564,4625,4644,
  4705,4724,4806,4825,4883,4928,4946,4991,5017,5102,5110,5173,5215,5257,
  5299,5341,5385,5427,5469,5513,5570,5612,5654,5696,5731,5764,5799,5835,
  5840,5858,5910,5938,5963,5987,6009,6031,6053,6075,6095,6117,6135,6149,
  6160,6172,6182,6184,6187,6190,6193,6196,6200,6203,6230,6256,6313,6316,
  6319,6354,6404,6463,6520,6564,6597,6630,6647,6704,6763,6820,6877,6922,
  6926,6929,6932,6935,6953,6998,7021,7073
};


static const unsigned char ag_fl[] = {
  2,1,2,1,2,0,1,4,1,2,3,2,4,5,5,0,1,1,3,1,1,1,2,2,1,2,3,5,4,2,9,0,1,1,3,
  4,2,9,2,4,4,1,1,3,3,3,3,3,3,3,3,3,3,3,1,4,1,5,1,1,3,1,3,1,1,3,1,3,1,3,
  1,3,3,1,3,3,3,3,1,3,3,1,3,3,1,3,3,3,1,4,1,2,2,2,2,2,2,1,3,1,1,1,1,2,2,
  4,6,3,1,1,2,0,1,3,1,2,0,1,3,1,0,1,4,4,3,2,2,1,1,1,2,1,2,1,2,1,1,2,3,1,
  1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,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,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,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,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,
  0,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
};

static const unsigned char ag_ptt[] = {
    0,  6,  6, 11, 11, 12, 12,  6, 13, 13, 13, 15, 15, 15, 15, 23, 23, 25,
   25, 14, 14,  8,  8, 27, 27, 27, 27, 27, 27, 27, 27, 34, 34, 36, 36, 32,
   28, 28, 28, 28, 38, 35, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19,
   42, 42, 41, 41, 55, 54, 54, 58, 58, 61, 60, 60, 63, 63, 65, 65, 67, 67,
   67, 69, 69, 69, 69, 69, 72, 72, 72, 77, 77, 77, 80, 80, 80, 80, 83, 83,
   87, 87, 87, 87, 87, 87, 87, 88, 88, 93, 93, 93, 93, 93, 93, 93, 93, 93,
    1,100,100,101,101,  1,105,105,106,106,  1,204,110,110,204,204,108,108,
  108, 95, 95,217,217,113,113,111,111, 17,155,155,207,118,118,205,121,121,
  123,123,120,120,120,120,120,120,120,120,120,120,120,120,120,136,136,136,
  138,139,140,137,137,144,144,114, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
   10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
   10, 10, 10, 97, 97, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
   99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,
   99, 99, 99, 99,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
  104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,
  104,104,115,115,115,116,116,116,116,116,119,119,119,119,119,119,119,119,
  119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,
  119,119,119,119,119,119,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,
  124,124,145,145,146,146,152,152,153,153, 16,  3, 18, 21, 20, 24, 22, 26,
   30, 29, 31, 33, 37, 39, 40, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 57,
   56, 59, 62, 64, 66, 68, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82, 84, 85,
   86, 89, 90, 91, 92, 94,  2,  4, 96,  5,147,122,117,142,148,149,109,150,
  141,112
};

static const unsigned char  *ag_valid(int ag_k) {
  const unsigned char  *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 vmCompile_change_reduction(vmCompile_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((vmCompile_token_type) *ag_tp)) ag_tp++;
  (PCB).reduction_token = (vmCompile_token_type) *ag_tp;
}



static void ag_ra(void)
{
  switch(ag_rpx[(PCB).ag_ap]) {
    case 1: V(0,(Code *)) = ag_rp_1(); break;
    case 2: V(0,(Code *)) = ag_rp_2(V(0,(Code *))); break;
    case 3: V(0,(Code *)) = ag_rp_3(V(0,(Code *))); break;
    case 4: V(0,(Code *)) = ag_rp_4(); break;
    case 5: V(0,(Code *)) = ag_rp_5(V(0,(int *)), V(1,(int *))); break;
    case 6: V(0,(Code *)) = ag_rp_6(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break;
    case 7: V(0,(Code *)) = ag_rp_7(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break;
    case 8: V(0,(Code *)) = ag_rp_8(V(0,(int *)), V(1,(int *)), V(3,(Code *))); break;
    case 9: V(0,(Code *)) = ag_rp_9(); break;
    case 10: V(0,(Code *)) = ag_rp_10(V(0,(Code *))); break;
    case 11: V(0,(Code *)) = ag_rp_11(V(0,(Code *))); break;
    case 12: V(0,(Code *)) = ag_rp_12(V(0,(Code *)), V(2,(Code *))); break;
    case 13: V(0,(Code *)) = ag_rp_13(V(0,(Code *))); break;
    case 14: V(0,(Code *)) = ag_rp_14(V(0,(Code *)), V(1,(Code *))); break;
    case 15: V(0,(Code *)) = ag_rp_15(V(0,(Code *))); break;
    case 16: V(0,(Code *)) = ag_rp_16(); break;
    case 17: V(0,(Code *)) = ag_rp_17(); break;
    case 18: V(0,(Code *)) = ag_rp_18(V(1,(Code *))); break;
    case 19: V(0,(Code *)) = ag_rp_19(V(1,(Code *))); break;
    case 20: V(0,(Code *)) = ag_rp_20(V(1,(Code *)), V(2,(Code *))); break;
    case 21: V(0,(Code *)) = ag_rp_21(V(0,(Code *)), V(1,(Code *))); break;
    case 22: V(0,(Code *)) = ag_rp_22(V(2,(Code *)), V(4,(Code *)), V(6,(Code *)), V(8,(Code *))); break;
    case 23: V(0,(Code *)) = ag_rp_23(); break;
    case 24: V(0,(Code *)) = ag_rp_24(V(0,(Code *))); break;
    case 25: V(0,(Code *)) = ag_rp_25(V(0,(Code *)), V(2,(Code *))); break;
    case 26: V(0,(Code *)) = ag_rp_26(V(2,(Code *))); break;
    case 27: V(0,(Code *)) = ag_rp_27(V(0,(Code *)), V(1,(Code *))); break;
    case 28: V(0,(Code *)) = ag_rp_28(V(2,(Code *)), V(4,(Code *)), V(6,(Code *)), V(8,(Code *))); break;
    case 29: V(0,(Code *)) = ag_rp_29(V(0,(Code *)), V(1,(Code *))); break;
    case 30: V(0,(Code *)) = ag_rp_30(V(0,(Code *)), V(1,(Code *)), V(3,(Code *))); break;
    case 31: V(0,(Code *)) = ag_rp_31(V(2,(Code *))); break;
    case 32: V(0,(Code *)) = ag_rp_32(V(0,(Code *))); break;
    case 33: V(0,(Code *)) = ag_rp_33(V(0,(Code *)), V(2,(Code *))); break;
    case 34: V(0,(Code *)) = ag_rp_34(V(0,(Code *)), V(2,(Code *))); break;
    case 35: V(0,(Code *)) = ag_rp_35(V(0,(Code *)), V(2,(Code *))); break;
    case 36: V(0,(Code *)) = ag_rp_36(V(0,(Code *)), V(2,(Code *))); break;
    case 37: V(0,(Code *)) = ag_rp_37(V(0,(Code *)), V(2,(Code *))); break;
    case 38: V(0,(Code *)) = ag_rp_38(V(0,(Code *)), V(2,(Code *))); break;
    case 39: V(0,(Code *)) = ag_rp_39(V(0,(Code *)), V(2,(Code *))); break;
    case 40: V(0,(Code *)) = ag_rp_40(V(0,(Code *)), V(2,(Code *))); break;
    case 41: V(0,(Code *)) = ag_rp_41(V(0,(Code *)), V(2,(Code *))); break;
    case 42: V(0,(Code *)) = ag_rp_42(V(0,(Code *)), V(2,(Code *))); break;
    case 43: V(0,(Code *)) = ag_rp_43(V(0,(Code *)), V(2,(Code *))); break;
    case 44: V(0,(Code *)) = ag_rp_44(V(0,(int *))); break;
    case 45: V(0,(Code *)) = ag_rp_45(V(0,(Code *)), V(2,(Code *))); break;
    case 46: V(0,(Code *)) = ag_rp_46(V(0,(Code *)), V(2,(Code *)), V(4,(Code *))); break;
    case 47: V(0,(Code *)) = ag_rp_47(V(0,(Code *))); break;
    case 48: V(0,(Code *)) = ag_rp_48(V(0,(Code *)), V(2,(Code *))); break;
    case 49: V(0,(Code *)) = ag_rp_49(V(0,(Code *)), V(2,(Code *))); break;
    case 50: V(0,(Code *)) = ag_rp_50(V(0,(Code *))); break;
    case 51: V(0,(Code *)) = ag_rp_51(V(0,(Code *)), V(2,(Code *))); break;
    case 52: V(0,(Code *)) = ag_rp_52(V(0,(Code *)), V(2,(Code *))); break;
    case 53: V(0,(Code *)) = ag_rp_53(V(0,(Code *)), V(2,(Code *))); break;
    case 54: V(0,(Code *)) = ag_rp_54(V(0,(Code *)), V(2,(Code *))); break;
    case 55: V(0,(Code *)) = ag_rp_55(V(0,(Code *)), V(2,(Code *))); break;
    case 56: V(0,(Code *)) = ag_rp_56(V(0,(Code *)), V(2,(Code *))); break;
    case 57: V(0,(Code *)) = ag_rp_57(V(0,(Code *)), V(2,(Code *))); break;
    case 58: V(0,(Code *)) = ag_rp_58(V(0,(Code *)), V(2,(Code *))); break;
    case 59: V(0,(Code *)) = ag_rp_59(V(0,(Code *)), V(2,(Code *))); break;
    case 60: V(0,(Code *)) = ag_rp_60(V(0,(Code *)), V(2,(Code *))); break;
    case 61: V(0,(Code *)) = ag_rp_61(V(0,(Code *)), V(2,(Code *))); break;
    case 62: V(0,(Code *)) = ag_rp_62(V(0,(Code *)), V(2,(Code *))); break;
    case 63: V(0,(Code *)) = ag_rp_63(V(0,(Code *)), V(2,(Code *))); break;
    case 64: V(0,(Code *)) = ag_rp_64(V(0,(Code *)), V(2,(Code *))); break;
    case 65: V(0,(Code *)) = ag_rp_65(V(0,(Code *)), V(2,(Code *))); break;
    case 66: V(0,(Code *)) = ag_rp_66(V(0,(Code *)), V(2,(Code *))); break;
    case 67: V(0,(Code *)) = ag_rp_67(V(1,(int *)), V(3,(Code *))); break;
    case 68: V(0,(Code *)) = ag_rp_68(V(1,(Code *))); break;
    case 69: V(0,(Code *)) = ag_rp_69(V(1,(Code *))); break;
    case 70: V(0,(Code *)) = ag_rp_70(V(1,(Code *))); break;
    case 71: V(0,(Code *)) = ag_rp_71(V(1,(Code *))); break;
    case 72: V(0,(Code *)) = ag_rp_72(V(1,(Code *))); break;
    case 73: V(0,(Code *)) = ag_rp_73(V(1,(Code *))); break;
    case 74: V(0,(Code *)) = ag_rp_74(V(0,(Code *)), V(2,(Code *))); break;
    case 75: V(0,(Code *)) = ag_rp_75(V(0,(double *))); break;
    case 76: V(0,(Code *)) = ag_rp_76(V(0,(int *))); break;
    case 77: V(0,(Code *)) = ag_rp_77(V(0,(int *))); break;
    case 78: V(0,(Code *)) = ag_rp_78(V(0,(Code *))); break;
    case 79: V(0,(Code *)) = ag_rp_79(V(0,(Code *))); break;
    case 80: V(0,(Code *)) = ag_rp_80(V(0,(Code *))); break;
    case 81: V(0,(Code *)) = ag_rp_81(V(0,(int *)), V(2,(Code *))); break;
    case 82: V(0,(Code *)) = ag_rp_82(V(0,(Code *)), V(2,(int *)), V(4,(Code *))); break;
    case 83: V(0,(Code *)) = ag_rp_83(V(1,(Code *))); break;
    case 84: V(0,(double *)) = ag_rp_84(V(0,(double *)), V(3,(int *))); break;
    case 85: V(0,(double *)) = ag_rp_85(V(0,(double *)), V(3,(int *))); break;
    case 86: V(0,(double *)) = ag_rp_86(V(0,(int *)), V(2,(double *))); break;
    case 87: V(0,(double *)) = ag_rp_87(V(0,(int *))); break;
    case 88: V(0,(double *)) = ag_rp_88(V(1,(double *))); break;
    case 89: V(0,(int *)) = ag_rp_89(V(0,(int *))); break;
    case 90: V(0,(int *)) = ag_rp_90(V(0,(int *)), V(1,(int *))); break;
    case 91: V(0,(double *)) = ag_rp_91(V(0,(int *))); break;
    case 92: V(0,(double *)) = ag_rp_92(V(0,(int *)), V(1,(double *))); break;
    case 93: V(0,(int *)) = ag_rp_93(V(0,(int *))); break;
    case 94: V(0,(int *)) = ag_rp_94(V(0,(int *)), V(1,(int *))); break;
    case 95: ag_default(&ag_rtt[0]); V(0,(int *)) = ag_rp_95(V(0,(int *))); break;
    case 96: V(0,(int *)) = ag_rp_96(V(0,(int *))); break;
    case 97: V(0,(int *)) = ag_rp_97(V(0,(int *)), V(1,(int *))); break;
    case 98: V(0,(int *)) = ag_rp_98(V(1,(int *))); break;
    case 99: V(0,(int *)) = ag_rp_99(V(0,(int *))); break;
    case 100: V(0,(int *)) = ag_rp_100(); break;
    case 101: V(0,(int *)) = ag_rp_101(V(0,(int *)), V(1,(int *))); break;
    case 102: V(0,(int *)) = ag_rp_102(); break;
    case 103: V(0,(int *)) = ag_rp_103(); break;
    case 104: V(0,(int *)) = ag_rp_104(); break;
    case 105: V(0,(int *)) = ag_rp_105(); break;
    case 106: V(0,(int *)) = ag_rp_106(); break;
    case 107: V(0,(int *)) = ag_rp_107(); break;
    case 108: V(0,(int *)) = ag_rp_108(); break;
    case 109: V(0,(int *)) = ag_rp_109(); break;
    case 110: V(0,(int *)) = ag_rp_110(); break;
    case 111: V(0,(int *)) = ag_rp_111(); break;
    case 112: V(0,(int *)) = ag_rp_112(); break;
    case 113: V(0,(int *)) = ag_rp_113(V(1,(int *))); break;
    case 114: V(0,(int *)) = ag_rp_114(V(0,(int *)), V(1,(int *))); break;
    case 115: V(0,(int *)) = ag_rp_115(V(0,(int *)), V(1,(int *))); break;
    case 116: V(0,(int *)) = ag_rp_116(V(1,(int *))); break;
    case 117: V(0,(int *)) = ag_rp_117(V(0,(int *)), V(1,(int *))); break;
    case 118: V(0,(int *)) = ag_rp_118(V(0,(int *))); break;
  }
  (PCB).la_ptr = (PCB).pointer;
}

#define TOKEN_NAMES vmCompile_token_names
const char *const vmCompile_token_names[218] = {
  "input string",
  "white space",
  "real",
  "name string",
  "string literal",
  "character constant",
  "input string",
  "eof",
  "statements",
  "error",
  "",
  "",
  "",
  "statement",
  "executable statement",
  "declaration",
  "';'",
  "type name",
  "'='",
  "expression",
  "'['",
  "']'",
  "'('",
  "expression list",
  "')'",
  "expressions",
  "','",
  "unconditional statement",
  "conditional statement",
  "'{'",
  "'}'",
  "\"do\"",
  "while clause",
  "\"for\"",
  "for exprs",
  "condition",
  "for expr list",
  "\"while\"",
  "if clause",
  "\"else\"",
  "\"if\"",
  "conditional expression",
  "lvalue",
  "\"+=\"",
  "\"-=\"",
  "\"*=\"",
  "\"/=\"",
  "\"%=\"",
  "\"|=\"",
  "\"&=\"",
  "\"^=\"",
  "\"<<=\"",
  "\">>=\"",
  "variable name",
  "logical or expression",
  "logical or condition",
  "'\\?'",
  "':'",
  "logical and expression",
  "\"||\"",
  "bitwise or expression",
  "logical and condition",
  "\"&&\"",
  "bitwise xor expression",
  "'|'",
  "bitwise and expression",
  "'^'",
  "equality expression",
  "'&'",
  "relational expression",
  "\"==\"",
  "\"!=\"",
  "shift expression",
  "'<'",
  "\"<=\"",
  "'>'",
  "\">=\"",
  "additive expression",
  "\"<<\"",
  "\">>\"",
  "multiplicative expression",
  "'+'",
  "'-'",
  "cast expression",
  "'*'",
  "'/'",
  "'%'",
  "unary expression",
  "power expression",
  "\"++\"",
  "\"--\"",
  "'!'",
  "'~'",
  "primary",
  "\"**\"",
  "integer constant",
  "'.'",
  "space",
  "\"/*\"",
  "",
  "",
  "",
  "\"*/\"",
  "\"//\"",
  "",
  "",
  "",
  "'\\n'",
  "simple real",
  "",
  "",
  "exponent",
  "integer",
  "fraction part",
  "digit",
  "letter",
  "",
  "'\\''",
  "char constant element",
  "not single quote",
  "escape sequence",
  "string chars",
  "'\\\"'",
  "string char",
  "not double quote",
  "\"\\\\a\"",
  "\"\\\\b\"",
  "\"\\\\f\"",
  "\"\\\\n\"",
  "\"\\\\r\"",
  "\"\\\\t\"",
  "\"\\\\v\"",
  "\"\\\\\\\\\"",
  "\"\\\\?\"",
  "\"\\\\\\'\"",
  "\"\\\\\\\"\"",
  "octal escape",
  "hex escape",
  "one octal",
  "two octal",
  "three octal",
  "'\\\\'",
  "",
  "\"\\\\x\"",
  "hex digit",
  "",
  "",
  "",
  "",
  "",
  "",
  "",
  "",
  "",
  "';'",
  "name string",
  "'='",
  "']'",
  "'['",
  "')'",
  "'('",
  "','",
  "'}'",
  "'{'",
  "\"do\"",
  "\"for\"",
  "\"while\"",
  "\"else\"",
  "\"if\"",
  "\"+=\"",
  "\"-=\"",
  "\"*=\"",
  "\"/=\"",
  "\"%=\"",
  "\"|=\"",
  "\"&=\"",
  "\"^=\"",
  "\"<<=\"",
  "\">>=\"",
  "':'",
  "'\\?'",
  "\"||\"",
  "\"&&\"",
  "'|'",
  "'^'",
  "'&'",
  "\"==\"",
  "\"!=\"",
  "'<'",
  "\"<=\"",
  "'>'",
  "\">=\"",
  "\"<<\"",
  "\">>\"",
  "'+'",
  "'-'",
  "'*'",
  "'/'",
  "'%'",
  "\"++\"",
  "\"--\"",
  "'!'",
  "'~'",
  "\"**\"",
  "real",
  "string literal",
  "'.'",
  "character constant",
  "",
  "'\\\"'",
  "'\\''",
  "",
  "",
  "",
  "",
  "",
  "'\\\\'",
  "integer",

};

#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(INPUT_CODE((*(PCB).pointer))) && INPUT_CODE((*(PCB).pointer)) != '\\') {
    char buf[20];
    sprintf(buf, "\'%c\'", (char) INPUT_CODE((*(PCB).pointer)));
    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_1_er_proc(void);
static int ag_action_2_er_proc(void);
static int ag_action_3_er_proc(void);
static int ag_action_4_er_proc(void);

static int (*const  ag_er_procs_scan[])(void) = {
  ag_action_1_er_proc,
  ag_action_2_er_proc,
  ag_action_3_er_proc,
  ag_action_4_er_proc
};


static void ag_error_resynch(void) {
  int ag_k;
  int ag_ssx = (PCB).ssx;

  ag_diagnose();
  SYNTAX_ERROR;
  if ((PCB).exit_flag != AG_RUNNING_CODE) return;
  while (1) {
    ag_k = ag_sbt[(PCB).sn];
    while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++;
    if (ag_tstt[ag_k] || (PCB).ssx == 0) break;
    (PCB).sn = (PCB).ss[--(PCB).ssx];
  }
  if (ag_tstt[ag_k] == 0) {
    (PCB).sn = PCB.ss[(PCB).ssx = ag_ssx];
    (PCB).exit_flag = AG_SYNTAX_ERROR_CODE;
    return;
  }
  ag_k = ag_sbt[(PCB).sn];
  while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++;
  (PCB).ag_ap = ag_pstt[ag_k];
  (ag_er_procs_scan[ag_astt[ag_k]])();
  while (1) {
    ag_k = ag_sbt[(PCB).sn];
    while (ag_tstt[ag_k] != (unsigned char) (PCB).token_number && ag_tstt[ag_k])
      ag_k++;
    if (ag_tstt[ag_k] && ag_astt[ag_k] != ag_action_10) break;
    if ((PCB).token_number == 7)
       {(PCB).exit_flag = AG_SYNTAX_ERROR_CODE; return;}
    {(PCB).la_ptr = (PCB).pointer + 1; ag_track();}
    (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
    (PCB).la_ptr++;
    if (ag_key_index[(PCB).sn]) {
      unsigned ag_k = ag_key_index[(PCB).sn];
      int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
      if (ag_ch <= 255) {
        while (ag_key_ch[ag_k] < ag_ch) ag_k++;
        if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
      }
    }
  }
  (PCB).la_ptr =  (PCB).pointer;
}


static int ag_action_10_proc(void) {
  int ag_t = (PCB).token_number;
  (PCB).btsx = 0, (PCB).drt = -1;
  do {
    ag_track();
    (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
    (PCB).la_ptr++;
    if (ag_key_index[(PCB).sn]) {
      unsigned ag_k = ag_key_index[(PCB).sn];
      int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
      if (ag_ch <= 255) {
        while (ag_key_ch[ag_k] < ag_ch) ag_k++;
        if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
      }
    }
  } while ((PCB).token_number == (vmCompile_token_type) ag_t);
  (PCB).la_ptr =  (PCB).pointer;
  return 1;
}

static int ag_action_11_proc(void) {
  int ag_t = (PCB).token_number;

  (PCB).btsx = 0, (PCB).drt = -1;
  do {
    (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
    (PCB).ssx--;
    ag_track();
    ag_ra();
    if ((PCB).exit_flag != AG_RUNNING_CODE) return 0;
    (PCB).ssx++;
    (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
    (PCB).la_ptr++;
    if (ag_key_index[(PCB).sn]) {
      unsigned ag_k = ag_key_index[(PCB).sn];
      int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
      if (ag_ch <= 255) {
        while (ag_key_ch[ag_k] < ag_ch) ag_k++;
        if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
      }
    }
  }
  while ((PCB).token_number == (vmCompile_token_type) ag_t);
  (PCB).la_ptr =  (PCB).pointer;
  return 1;
}

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 = (vmCompile_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 = (vmCompile_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 = (vmCompile_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) {
    (PCB).exit_flag = AG_STACK_ERROR_CODE;
    PARSER_STACK_OVERFLOW;
  }
  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
  (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).vs[(PCB).ssx] = ag_null_value;
  (PCB).ss[(PCB).ssx] = (PCB).sn;
  (PCB).ssx++;
  (PCB).sn = (PCB).ag_ap;
  (PCB).la_ptr =  (PCB).pointer;
  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).la_ptr =  (PCB).pointer;
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_1_proc(void) {
  ag_track();
  (PCB).exit_flag = AG_SUCCESS_CODE;
  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 = (vmCompile_token_type) ag_ptt[(PCB).ag_ap];
  (PCB).btsx = 0, (PCB).drt = -1;
  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
  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; 
      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;
  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  else (PCB).ss[(PCB).ssx] = (PCB).sn;
  ag_track();
  (PCB).reduction_token = (vmCompile_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; 
      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) {
  int ag_k = ag_sbt[(PCB).sn];
  while (ag_tstt[ag_k] != 9 && ag_tstt[ag_k]) ag_k++;
  if (ag_tstt[ag_k] == 0) ag_undo();
  (PCB).la_ptr =  (PCB).pointer;
  ag_error_resynch();
  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).la_ptr =  (PCB).pointer;
  (PCB).reduction_token = (vmCompile_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; 
      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 = (vmCompile_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;
  }
  (PCB).la_ptr =  (PCB).pointer;
  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; 
      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_2_er_proc(void) {
  (PCB).btsx = 0, (PCB).drt = -1;
  (*(int *) &(PCB).vs[(PCB).ssx]) = *(PCB).pointer;
  (PCB).ssx++;
  (PCB).sn = (PCB).ag_ap;
  return 0;
}

static int ag_action_1_er_proc(void) {
  (PCB).btsx = 0, (PCB).drt = -1;
  (PCB).exit_flag = AG_SUCCESS_CODE;
  return 0;
}

static int ag_action_4_er_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
  (PCB).btsx = 0, (PCB).drt = -1;
  (PCB).reduction_token = (vmCompile_token_type) ag_ptt[(PCB).ag_ap];
  if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd];
  else (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; 
      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_er_proc(void) {
  int ag_sd = ag_fl[(PCB).ag_ap] - 1;
  (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 = (vmCompile_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; 
      REDUCTION_TOKEN_ERROR; break;}
      (PCB).ag_ap = ag_pstt[ag_t1];
    if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break;
  }
  return 0;
}


void init_vmCompile(void) {
  (PCB).la_ptr = (PCB).pointer;
  (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;
}

void vmCompile(void) {
  init_vmCompile();
  (PCB).exit_flag = AG_RUNNING_CODE;
  while ((PCB).exit_flag == AG_RUNNING_CODE) {
    unsigned ag_t1 = ag_sbt[(PCB).sn];
    if (ag_tstt[ag_t1]) {
      unsigned ag_t2 = ag_sbe[(PCB).sn] - 1;
      (PCB).token_number = (vmCompile_token_type) AG_TCV(INPUT_CODE(*(PCB).la_ptr));
      (PCB).la_ptr++;
      if (ag_key_index[(PCB).sn]) {
        unsigned ag_k = ag_key_index[(PCB).sn];
        int ag_ch = CONVERT_CASE(INPUT_CODE(*(PCB).pointer));
        if (ag_ch <= 255) {
          while (ag_key_ch[ag_k] < ag_ch) ag_k++;
          if (ag_key_ch[ag_k] == ag_ch) ag_get_key_word(ag_k);
        }
      }
      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];
    (ag_gt_procs_scan[ag_astt[ag_t1]])();
  }
}