Mercurial > ~dholland > hg > ag > index.cgi
diff tests/agcl/contrib/good/plm.c @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/agcl/contrib/good/plm.c Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,2872 @@ +/* + * YACC grammar of PL/M + */ +#include <stdio.h> +#include <stdlib.h> +#include "plm-manifest.h" +#include "scope.h" + +void yyerror (); + +/* Cause the `yydebug' variable to be defined. */ +#define YYDEBUG (1) + + + +/* + * 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 PLM_H +#include "plm.h" +#endif + +#ifndef PLM_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]) + + + +plm_pcb_type plm_pcb; +#define PCB plm_pcb + +/* Line -, plm.syn */ +void +yyerror(char * s) +{ + fprintf (stderr, "error at line %d: %s\n", lineno, s); +} + +main() +{ + init_scope(); + return yyparse(); +} + + +#ifndef CONVERT_CASE + +static const char agCaseTable[31] = { + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 +}; + +static int agConvertCase(int c) { + if (c >= 'a' && c <= 'z') return c ^= 0x20; + if (c >= 0xe0 && c < 0xff) c ^= agCaseTable[c-0xe0]; + return c; +} + +#define CONVERT_CASE(c) agConvertCase(c) + +#endif + + +#ifndef TAB_SPACING +#define TAB_SPACING 8 +#endif + +static void ag_rp_1(void) { +/* Line -, plm.syn */ + push_scope(); + +} + +static void ag_rp_2(void) { +/* Line -, plm.syn */ + push_scope(); + +} + +static void ag_rp_3(void) { +/* Line -, plm.syn */ + pop_scope(); + +} + +static void ag_rp_4(void) { +/* Line -, plm.syn */ + push_scope(); + +} + +static void ag_rp_5(void) { +/* Line -, plm.syn */ + enter_literal ($1, $3); + +} + +static void ag_rp_6(void) { +/* Line -, plm.syn */ + push_scope(); + +} + +static void ag_rp_7(void) { +/* Line -, plm.syn */ + push_scope(); + +} + + +#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 int const ag_null_value NULL_VALUE_INITIALIZER; + +static const unsigned char ag_rpx[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 7 +}; + +static const unsigned char ag_key_itt[] = { + 0 +}; + +static const unsigned short ag_key_pt[] = { +0 +}; + +static const unsigned char ag_key_ch[] = { + 0, 47,255, 42,255, 61, 62,255, 68, 78, 84,255, 84,255, 65, 89,255, 76, + 83, 85,255, 65, 72,255, 65, 69, 73, 79, 87,255, 65, 68,255, 76, 78, 79, + 88,255, 84,255, 79,255, 65, 87,255, 71, 82,255, 69,255, 73, 84,255, 70, + 78,255, 65, 73, 79,255, 73, 79,255, 70, 82,255, 76, 79, 82, 85,255, 65, + 69, 84,255, 69,255, 69, 72, 84,255, 72, 79,255, 72, 79,255, 47, 58, 60, + 62, 65, 66, 67, 68, 69, 71, 72, 73, 76, 77, 78, 79, 80, 81, 82, 83, 84, + 87, 88,255, 61, 62,255, 47, 58, 60, 62,255, 69,255, 76, 85,255, 65, 72, + 255, 73, 79, 87,255, 65, 68,255, 78,255, 84,255, 79,255, 65, 87,255, 70, + 78,255, 79, 82,255, 65, 84,255, 69,255, 69, 72,255, 47, 65, 66, 67, 68, + 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 68,255, 47, 67, 87,255, + 76, 85,255, 65, 72,255, 69, 73, 79, 87,255, 65, 68,255, 78,255, 84,255, + 79,255, 65, 87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 65, 66, + 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 76, 85,255, 65, + 72,255, 69, 73, 79, 87,255, 65, 68,255, 76, 78, 79,255, 84,255, 79,255, + 65, 87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 47, 65, 66, 67, + 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 73, 84,255, 78,255, + 47, 65, 68, 69, 73, 80, 82,255, 69, 72,255, 47, 65, 66, 67, 68, 72, 73, + 76, 78, 79, 80, 81, 82, 83, 87,255, 47, 84,255, 67, 87,255, 69, 72,255, + 65, 66, 67, 68, 72, 73, 76, 78, 79, 80, 81, 82, 83, 87,255, 84,255, 76, + 85,255, 65, 72,255, 73, 79, 87,255, 65, 68,255, 78,255, 84,255, 79,255, + 65, 87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 65, 66, 67, 68, + 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 76, 85,255, 65, 72,255, + 73, 79, 87,255, 84,255, 79,255, 65, 87,255, 70, 78,255, 65, 84,255, 69, + 255, 69, 72,255, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, + 87,255, 76, 85,255, 65, 72,255, 73, 79, 87,255, 65, 68,255, 78,255, 84, + 255, 79,255, 65, 87,255, 70, 78,255, 79, 82,255, 65, 84,255, 69,255, 69, + 72,255, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, + 69, 72, 84,255, 47, 65, 66, 67, 68, 72, 73, 76, 78, 79, 80, 81, 82, 83, + 87,255, 69, 72, 84,255, 65, 66, 67, 68, 72, 73, 76, 79, 80, 81, 82, 83, + 87,255, 65, 89,255, 65, 73, 79,255, 69, 72, 84,255, 65, 66, 67, 68, 72, + 73, 76, 79, 80, 81, 82, 83, 87,255, 61, 62,255, 73, 79,255, 72, 79,255, + 47, 60, 62, 77, 79, 80, 84, 88,255, 61, 62,255, 73, 79,255, 72, 79,255, + 47, 60, 62, 77, 80, 84, 88,255, 69, 72,255, 47, 65, 66, 67, 68, 72, 73, + 76, 79, 80, 81, 82, 83, 87,255, 39,255, 61, 62,255, 73, 79,255, 72, 79, + 255, 47, 60, 62, 65, 66, 77, 79, 80, 84, 88,255, 69, 72,255, 65, 66, 67, + 68, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 61, 62,255, 73, 79,255, 72, + 79,255, 60, 62, 65, 66, 77, 79, 80, 84, 88,255, 61, 62,255, 72, 79,255, + 60, 62, 65, 66, 77, 79, 80, 84, 88,255, 61, 62,255, 73, 79,255, 72, 79, + 255, 58, 60, 62, 65, 66, 77, 79, 80, 84, 88,255, 72, 79,255, 65, 66, 79, + 84, 88,255, 72, 79,255, 66, 79, 84, 88,255, 84,255, 69,255, 76, 85,255, + 65, 72,255, 73, 79, 87,255, 65, 68,255, 76, 78,255, 84,255, 79,255, 65, + 87,255, 70, 78,255, 65, 84,255, 69,255, 69, 72,255, 65, 66, 67, 68, 69, + 71, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 71, 82,255, 69,255, 84,255, + 78,255, 79, 85,255, 65, 69,255, 69,255, 69, 72,255, 47, 65, 66, 67, 68, + 69, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 71, 82,255, 69,255, 84,255, + 78,255, 79, 85,255, 65, 69,255, 69,255, 69, 72,255, 65, 66, 67, 68, 69, + 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 47, 69, 80,255, 69, 80,255, 66, + 255, 66,255, 61, 62,255, 73, 79,255, 76, 85,255, 72, 79,255, 47, 60, 62, + 77, 79, 80, 84, 88,255, 61, 62,255, 73, 79,255, 76, 85,255, 72, 79,255, + 47, 60, 62, 77, 80, 84, 88,255, 47, 80,255, 76, 85,255, 65, 72,255, 73, + 79, 87,255, 84,255, 79,255, 65, 87,255, 70, 78,255, 65, 84,255, 69,255, + 69, 72,255, 47, 65, 66, 67, 68, 69, 71, 72, 73, 76, 79, 80, 81, 82, 83, + 87,255, 65, 68, 69, 73, 80,255, 47, 68, 69, 73, 80, 82,255, 61, 62,255, + 68, 78, 84,255, 84,255, 89,255, 65, 87,255, 71, 82,255, 69,255, 73, 84, + 255, 78,255, 65, 79,255, 73, 79,255, 70, 82,255, 76, 79, 85,255, 65, 69, + 255, 69,255, 69, 72, 84,255, 72, 79,255, 47, 58, 60, 62, 65, 66, 67, 68, + 69, 72, 73, 76, 77, 79, 80, 81, 82, 83, 84, 87, 88,255, 65, 79,255, 69, + 72, 84,255, 65, 66, 67, 68, 72, 73, 76, 79, 80, 81, 82, 83, 87,255, 72, + 79,255, 65, 66, 77, 79, 80, 84, 88,255, 69, 73, 80, 82,255, 83,255, 68, + 73,255, 65, 68, 73,255, 68,255, 47, 69, 73, 80, 82,255 +}; + +static const unsigned char ag_key_act[] = { + 0,3,4,3,4,0,0,4,3,3,0,4,3,4,3,1,4,3,3,3,4,2,3,4,3,3,3,0,3,4,3,0,4,3,2, + 3,3,4,3,4,1,4,3,3,4,3,3,4,2,4,3,2,4,0,2,4,3,3,3,4,3,3,4,3,0,4,3,3,3,3, + 4,3,3,3,4,2,4,3,3,3,4,3,0,4,3,3,4,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3, + 2,2,2,2,3,4,0,0,4,3,3,2,3,4,3,4,3,3,4,2,3,4,3,0,3,4,3,0,4,2,4,3,4,1,4, + 3,3,4,0,3,4,3,3,4,3,3,4,2,4,3,3,4,3,3,3,2,2,2,2,2,2,3,3,2,3,2,2,3,4,3, + 4,3,3,3,4,3,3,4,2,3,4,3,3,0,3,4,3,0,4,2,4,3,4,1,4,3,3,4,0,3,4,3,3,4,2, + 4,3,3,4,3,3,2,2,2,2,2,2,3,3,3,3,2,2,3,4,3,3,4,2,3,4,3,3,0,3,4,3,0,4,3, + 2,3,4,3,4,1,4,3,3,4,0,3,4,3,3,4,2,4,3,3,4,3,3,3,2,2,2,2,2,2,3,3,3,3,2, + 2,3,4,3,3,4,2,4,3,3,3,3,2,3,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,4, + 3,3,4,3,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,4,3,4,3,3,4,2,3,4,3,0,3, + 4,3,0,4,2,4,3,4,1,4,3,3,4,0,3,4,3,3,4,2,4,3,3,4,3,3,2,2,2,2,2,2,3,3,3, + 3,2,2,3,4,3,3,4,2,3,4,3,0,3,4,3,4,1,4,3,3,4,0,3,4,3,3,4,2,4,3,3,4,3,3, + 2,2,3,2,2,2,3,3,3,3,2,2,3,4,3,3,4,2,3,4,3,0,3,4,3,0,4,2,4,3,4,1,4,3,3, + 4,0,3,4,3,3,4,3,3,4,2,4,3,3,4,3,3,2,2,2,2,2,2,3,3,2,3,2,2,3,4,3,3,3,4, + 3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,4,3, + 3,4,3,3,3,4,3,3,3,4,3,2,3,3,3,3,2,3,3,3,3,2,3,4,0,0,4,3,3,4,3,0,4,3,2, + 3,2,3,3,2,3,4,0,0,4,3,3,4,3,0,4,3,2,3,2,3,2,3,4,3,3,4,3,3,3,3,3,3,3,3, + 3,3,3,3,2,3,4,3,4,0,0,4,3,3,4,3,0,4,3,2,3,3,3,2,3,3,2,3,4,3,3,4,3,3,3, + 3,3,3,3,3,3,3,3,2,3,4,0,0,4,3,3,4,3,0,4,2,3,3,3,2,3,3,2,3,4,0,0,4,3,0, + 4,2,3,3,3,3,3,3,2,3,4,0,0,4,3,3,4,3,0,4,3,2,3,3,3,2,3,3,2,3,4,3,0,4,3, + 3,3,2,3,4,3,0,4,3,3,2,3,4,3,4,3,4,3,3,4,2,3,4,3,0,3,4,3,0,4,3,2,4,3,4, + 1,4,3,3,4,0,3,4,3,3,4,2,4,3,3,4,3,3,2,2,2,2,2,2,3,3,3,3,2,2,3,4,3,3,4, + 2,4,2,4,2,4,3,3,4,3,3,4,2,4,3,3,4,3,3,3,3,3,3,3,2,3,3,2,3,2,2,3,4,3,3, + 4,2,4,2,4,2,4,3,3,4,3,3,4,2,4,3,3,4,3,3,3,3,3,3,2,3,3,2,3,2,2,3,4,3,3, + 3,4,3,3,4,3,4,3,4,0,0,4,3,3,4,3,3,4,3,0,4,3,2,3,2,3,2,2,3,4,0,0,4,3,3, + 4,3,3,4,3,0,4,3,2,3,2,2,2,3,4,3,3,4,3,3,4,2,3,4,3,0,3,4,3,4,1,4,3,3,4, + 0,3,4,3,3,4,2,4,3,3,4,3,3,3,2,2,3,2,2,2,3,3,3,3,2,2,3,4,3,3,3,3,3,4,3, + 3,3,3,3,3,4,0,0,4,3,3,0,4,3,4,1,4,3,3,4,3,3,4,2,4,3,2,4,2,4,3,3,4,3,3, + 4,3,0,4,3,3,3,4,3,3,4,2,4,3,3,3,4,3,0,4,3,3,2,3,2,2,3,2,3,3,2,2,2,2,2, + 3,2,2,2,3,3,4,3,3,4,3,3,3,4,3,3,3,3,3,3,2,3,3,3,3,2,3,4,3,0,4,3,3,3,3, + 3,2,3,4,3,3,3,3,4,3,4,3,3,4,3,3,3,4,3,4,3,3,3,3,3,4 +}; + +static const unsigned short ag_key_parm[] = { + 0, 63, 0, 67, 0,324,326, 0,268,263,312, 0,269, 0,329,282, 0,283, + 293,284, 0, 0,270, 0,289,291,292,294,271, 0,297,298, 0,286, 0,285, + 316, 0,300, 0,302, 0,303,272, 0,273,309, 0, 0, 0,308, 0, 0,306, + 0, 0,299,310,274, 0,260,314, 0,275,318, 0,261,276,321,317, 0,278, + 320,328, 0, 0, 0,279,280,327, 0,305,301, 0,295,281, 0, 63,296, 0, + 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,313, 0, 0,277, 0, 0, 0, + 0,319, 0,324,326, 0, 63,296, 0,322, 0,285, 0,283,284, 0, 0,270, + 0,292,294,271, 0,297,298, 0, 0, 0,300, 0,302, 0,303,272, 0,306, + 273, 0,276,321, 0,278,328, 0, 0, 0,279,280, 0, 63,268,269, 0, 0, + 0, 0, 0, 0,274,275, 0,277, 0, 0,281, 0,294, 0, 63,293,295, 0, + 283,284, 0, 0,270, 0,291,292,294,271, 0,297,298, 0, 0, 0,300, 0, + 302, 0,303,272, 0,306,273, 0,278,328, 0, 0, 0,279,280, 0,268,269, + 0, 0, 0, 0, 0, 0,274,275,276,277, 0, 0,281, 0,283,284, 0, 0, + 270, 0,291,292,294,271, 0,297,298, 0,286, 0,285, 0,300, 0,302, 0, + 303,272, 0,306,273, 0,278,328, 0, 0, 0,279,280, 0, 63,268,269, 0, + 0, 0, 0, 0, 0,274,275,276,277, 0, 0,281, 0,308,309, 0, 0, 0, + 63,312,289,316, 0,317,320, 0,279,280, 0, 63,268,269,270,271,272,273, + 274,313,275,276,277,278, 0,281, 0, 63,301, 0,293,295, 0,279,280, 0, + 268,269,270,271,272,273,274,313,275,276,277,278, 0,281, 0,301, 0,283, + 284, 0, 0,270, 0,292,294,271, 0,297,298, 0, 0, 0,300, 0,302, 0, + 303,272, 0,306,273, 0,278,328, 0, 0, 0,279,280, 0,268,269, 0, 0, + 0, 0, 0, 0,274,275,276,277, 0, 0,281, 0,283,284, 0, 0,270, 0, + 292,294,271, 0,300, 0,302, 0,303,272, 0,306,273, 0,278,328, 0, 0, + 0,279,280, 0,268,269, 0, 0,297, 0, 0, 0,274,275,276,277, 0, 0, + 281, 0,283,284, 0, 0,270, 0,292,294,271, 0,297,298, 0, 0, 0,300, + 0,302, 0,303,272, 0,306,273, 0,276,321, 0,278,328, 0, 0, 0,279, + 280, 0,268,269, 0, 0, 0, 0, 0, 0,274,275, 0,277, 0, 0,281, 0, + 279,280,327, 0, 63,268,269,270,271,272,273,274,313,275,276,277,278, 0, + 281, 0,279,280,327, 0,268,269,270,271,272,273,274,275,276,277,278, 0, + 281, 0,329,269, 0,299,310,274, 0,279,280,327, 0,268, 0,270,271,272, + 273, 0,275,276,277,278, 0,281, 0,324,326, 0,260,314, 0,305,301, 0, + 63, 0,322, 0,318,261, 0,319, 0,324,326, 0,260,314, 0,305,301, 0, + 63, 0,322, 0,261, 0,319, 0,279,280, 0, 63,268,269,270,271,272,273, + 274,275,276,277,278, 0,281, 0,245, 0,324,326, 0,260,314, 0,305,301, + 0, 63, 0,322,263,282, 0,318,261, 0,319, 0,279,280, 0,268,269,270, + 271,272,273,274,275,276,277,278, 0,281, 0,324,326, 0,260,314, 0,305, + 301, 0, 0,322,263,282, 0,318,261, 0,319, 0,324,326, 0,305,301, 0, + 0,322,263,282,260,318,261, 0,319, 0,324,326, 0,260,314, 0,305,301, + 0,296, 0,322,263,282, 0,318,261, 0,319, 0,305,301, 0,263,282,318, + 0,319, 0,305,301, 0,282,318, 0,319, 0,305, 0,286, 0,283,284, 0, + 0,270, 0,292,294,271, 0,297,298, 0,286, 0, 0,300, 0,302, 0,303, + 272, 0,306,273, 0,278,328, 0, 0, 0,279,280, 0,268,269, 0, 0, 0, + 0, 0, 0,274,275,276,277, 0, 0,281, 0,273,309, 0, 0, 0, 0, 0, + 0, 0,276,317, 0,278,320, 0, 0, 0,279,280, 0, 63,268,269,270,271, + 316,272, 0,274,275, 0,277, 0, 0,281, 0,273,309, 0, 0, 0, 0, 0, + 0, 0,276,317, 0,278,320, 0, 0, 0,279,280, 0,268,269,270,271,316, + 272, 0,274,275, 0,277, 0, 0,281, 0, 63,316,317, 0,316,317, 0,329, + 0,282, 0,324,326, 0,260,314, 0,261,317, 0,305,301, 0, 63, 0,322, + 0,318, 0, 0,319, 0,324,326, 0,260,314, 0,261,317, 0,305,301, 0, + 63, 0,322, 0, 0, 0,319, 0, 63,317, 0,283,284, 0, 0,270, 0,292, + 294,271, 0,300, 0,302, 0,303,272, 0,306,273, 0,278,328, 0, 0, 0, + 279,280, 0, 63,268,269, 0, 0,297, 0, 0, 0,274,275,276,277, 0, 0, + 281, 0,312,289,316,308,317, 0, 63,289,316,309,317,320, 0,324,326, 0, + 268,263,312, 0,269, 0,282, 0,289,271, 0,273,309, 0, 0, 0,308, 0, + 0, 0, 0,299,274, 0,260,314, 0,275,318, 0,261,276,317, 0,278,320, + 0, 0, 0,279,280,327, 0,305,301, 0, 63,296, 0,322, 0, 0,270, 0, + 316,272, 0, 0, 0, 0, 0,277, 0, 0, 0,281,319, 0,299,274, 0,279, + 280,327, 0,268,269,270,271,272,273, 0,275,276,277,278, 0,281, 0,305, + 301, 0,263,282,260,318,261, 0,319, 0,316,309,317,320, 0,327, 0,289, + 308, 0,312,289,308, 0,289, 0, 63,316,309,317,320, 0 +}; + +static const unsigned short ag_key_jmp[] = { + 0, 0, 0, 2, 0, 0, 0, 0, 10, 16, 0, 0, 22, 0, 18, 12, 0, 24, + 26, 28, 0, 17, 40, 0, 46, 49, 55, 0, 61, 0, 68, 0, 0, 65, 30, 72, + 74, 0, 81, 0, 38, 0, 83, 86, 0, 95, 98, 0, 45, 0, 90, 48, 0, 0, + 50, 0,102,106,114, 0,120,124, 0,129, 0, 0,134,137,143,151, 0,161, + 163,170, 0, 71, 0,174,181,188, 0,196, 0, 0,199,203, 0, 4, 6, 5, + 8, 8, 14, 21, 24, 33, 40, 42, 53, 56, 60,126, 63, 66,156, 75, 77, 81, + 84,206, 0, 0, 0, 0,209,211,111,213, 0,215, 0,231,233, 0,121,245, + 0,251, 0,257, 0,261, 0, 0,131, 0,265, 0,136, 0,267,270, 0, 0, + 274, 0,293,299, 0,312,314, 0,149, 0,318,325, 0,218,220,227,124,127, + 134,138,140,143,280,287,146,307,152,154,332, 0,336, 0,338,340,344, 0, + 360,362, 0,180,374, 0,380,386, 0,392, 0,396, 0, 0,191, 0,400, 0, + 196, 0,402,405, 0, 0,409, 0,440,442, 0,206, 0,446,453, 0,349,356, + 183,186,194,198,200,203,415,422,428,435,209,211,460, 0,477,479, 0,230, + 491, 0,497,503, 0,509, 0,516, 0, 0,513,241,520, 0,522, 0,248, 0, + 524,527, 0, 0,531, 0,562,564, 0,258, 0,568,575, 0,464,466,473,233, + 236,244,250,252,255,537,544,550,557,261,263,582, 0,602,607, 0,283, 0, + 586,588,590,594,286,613,619, 0,697,704, 0,628,630,637,641,648,653,658, + 665,672,675,681,688,693,296,711, 0,715,717, 0,719,723, 0,795,802, 0, + 728,735,739,746,751,756,763,770,773,779,786,791,321,809, 0,813, 0,826, + 828, 0,341,840, 0,846, 0,852, 0,856, 0, 0,351, 0,860, 0,356, 0, + 862,865, 0, 0,869, 0,900,902, 0,366, 0,906,913, 0,815,822,344,347, + 354,358,360,363,875,882,888,895,369,371,920, 0,935,937, 0,390,949, 0, + 955, 0,961, 0,971, 0,400, 0,973,976, 0, 0,980, 0,1011,1013, 0, + 410, 0,1017,1024, 0,924,931,393,396,965,402,404,407,986,993,999,1006, + 413,415,1031, 0,1046,1048, 0,434,1060, 0,1066, 0,1072, 0,1076, 0, + 0,444, 0,1080, 0,449, 0,1082,1085, 0, 0,1089, 0,1108,1114, 0, + 1127,1129, 0,462, 0,1133,1140, 0,1035,1042,437,440,447,451,453,456, + 1095,1102,459,1122,465,467,1147, 0,1220,1227,1234, 0,1151,1153,1160, + 1164,1171,1176,1181,1188,1195,1198,1204,1211,1216,486,1242, 0,1310,1317, + 1324, 0,1246,1253,1257,1264,1269,1274,1281,1288,1294,1301,1306,506,1332, + 0,1343,1347, 0,1374,1378,1386, 0,1414,1421,1428, 0,1336,524,1350, + 1357,1362,1367,527,1392,1398,1405,1410,531,1436, 0, 0, 0, 0,1444,1448, + 0,1456, 0, 0,1440,549,1442,552,1450,1452,555,1459, 0, 0, 0, 0, + 1466,1470, 0,1476, 0, 0,1462,567,1464,570,1472,573,1479, 0,1548,1555, + 0,1482,1484,1491,1495,1502,1507,1512,1519,1526,1532,1539,1544,584,1562, + 0,1566, 0, 0, 0, 0,1577,1581, 0,1589, 0, 0,1568,604,1570,1572, + 1575,607,1583,1585,610,1592, 0,1659,1666, 0,1595,1602,1606,1613,1618, + 1623,1630,1637,1643,1650,1655,624,1673, 0, 0, 0, 0,1684,1688, 0,1696, + 0, 0,641,1677,1679,1682,644,1690,1692,647,1699, 0, 0, 0, 0,1720, + 0, 0,660,1702,1704,1707,1709,1714,1716,663,1723, 0, 0, 0, 0,1735, + 1739, 0,1747, 0, 0,1726,676,1728,1730,1733,679,1741,1743,682,1750, 0, + 1760, 0, 0,1753,1756,1758,696,1763, 0,1770, 0, 0,1766,1768,705,1773, + 0,1776, 0,1780, 0,1795,1797, 0,717,1809, 0,1815, 0,1821, 0,1828, + 0, 0,1825,727, 0,1832, 0,733, 0,1834,1837, 0, 0,1841, 0,1872, + 1874, 0,743, 0,1878,1885, 0,1784,1791,720,723,730,735,737,740,1847, + 1854,1860,1867,746,748,1892, 0,1934,1937, 0,767, 0,770, 0,772, 0, + 1954,1960, 0,1970,1972, 0,779, 0,1979,1986, 0,1896,1898,1905,1909, + 1916,1921,1929,774,1941,1948,776,1965,782,784,1993, 0,2033,2036, 0,803, + 0,806, 0,808, 0,2053,2059, 0,2069,2071, 0,815, 0,2078,2085, 0, + 1997,2004,2008,2015,2020,2028,810,2040,2047,812,2064,818,820,2092, 0, + 2096,2098,2106, 0,2112,2120, 0,2126, 0,2131, 0, 0, 0, 0,2137,2141, + 0,2145,2148, 0,2153, 0, 0,2133,849,2135,852,2143,855,858,2156, 0, + 0, 0, 0,2163,2167, 0,2169,2172, 0,2177, 0, 0,2159,870,2161,873, + 876,879,2180, 0,2183,2185, 0,2204,2206, 0,893,2218, 0,2224, 0,2230, + 0,2240, 0,903, 0,2242,2245, 0, 0,2249, 0,2280,2282, 0,913, 0, + 2286,2293, 0,2191,2193,2200,896,899,2234,905,907,910,2255,2262,2268,2275, + 916,918,2300, 0,2304,2306,2310,2318,2325, 0,2331,2333,2337,2345,2353, + 2359, 0, 0, 0, 0,2374,2380, 0, 0,2382, 0,958, 0,2391,2394, 0, + 2416,2419, 0,965, 0,2411,968, 0,970, 0,2423,2427, 0,2433,2437, 0, + 2439, 0, 0,2444,2447,2453, 0,2463,2465, 0,988, 0,2472,2479,2486, 0, + 2494, 0, 0,2368,2370,951,2372,954,960,2384,962,2398,2406,973,975,978, + 981,984,2458,991,993,997,2497,2501, 0,2539,2543, 0,2571,2578,2585, 0, + 2504,2511,2515,2522,2527,2532,1022,2549,2555,2562,2567,1025,2593, 0,2613, + 0, 0,2597,2600,2602,2607,2609,1043,2616, 0,2619,2627,2635,2641, 0, + 2650, 0,2659,2663, 0,2670,2672,2676, 0,2683, 0,2687,2689,2697,2705, + 2711, 0 +}; + +static const unsigned short ag_key_index[] = { + 1, 3, 87, 0, 3, 3,114, 0,119,157,174, 1, 0,176, 0,214,266, 1, + 214, 0,214,288,288,288,288,288,288,288,288,288,288,288,288,288,288, 0, + 299, 1, 1, 1, 1,315, 1,318,299,324, 0, 0, 0, 0,339, 1, 0,374, + 374,374,324, 0, 0, 0,418,374, 0,470, 1, 0,374,374,214,490,510,535, + 0, 0,374,324, 0, 0,339,299,324,299,324,558,576,576,587,602,587,587, + 587,613,613,324,627,627,627,650,587,666,627,685,699,685,708, 0, 0,299, + 490,627,374,374,374,713, 0, 0,299,324,715,751,751,418,324,685, 0,685, + 787,823, 0,374, 0,510, 1, 0, 1, 0,838,842,845, 0, 0, 0, 0,324, + 324,847, 0, 0,613, 0,558,861,861,576,882,861,576,882,602, 0, 0, 0, + 0,587,587,587,627,587,587,587,587,587,627,587,587,627,299,324,299,324, + 299,299,324,890,890,890,838, 0,921,324, 0, 0,921,418, 0,685,685, 0, + 823, 0, 0, 1, 0,938,510,288,944, 0,1000,1029,299,324, 0, 0, 0, + 0,861,882,882, 0, 0,1046,650,708,699, 0, 0,418,324, 0,1054,1059, + 1, 1, 1, 0, 0, 0,1061,1064,1068, 0, 0,510,842,613,613, 0, 0, + 838,842,1070,842,1054, 0,510, 0, 0,324,324,324,938,510, 0,1059, 0, + 0, 0, 0,510,324,510 +}; + +static const unsigned char ag_key_ends[] = { +42,0, 47,0, 42,0, 61,0, 61,0, 68,82,69,83,83,0, 68,0, +83,69,68,0, 69,0, 76,0, 69,0, 83,69,73,78,84,69,82,82,85,80,84,0, +65,82,73,78,84,0, 84,65,0, 67,76,65,82,69,0, 83,65,66,76,69,0, +79,82,68,0, 83,69,0, 66,76,69,0, 70,0, 84,69,82,78,65,76,0, +79,0, 76,84,0, 79,82,68,0, 84,73,65,76,0, 69,82,0, 85,80,84,0, +66,69,76,0, 84,69,82,65,76,76,89,0, 78,71,73,78,84,0, 78,85,83,0, +68,0, 79,84,0, 70,83,69,84,0, 85,83,0, 73,78,84,69,82,0, +79,67,69,68,85,82,69,0, 66,76,73,67,0, 87,79,82,68,0, 76,0, +78,84,82,65,78,84,0, 85,82,78,0, 76,69,67,84,79,82,0, +79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 69,78,0, 73,76,69,0, +82,68,0, 79,82,0, 42,0, 61,0, 61,0, 79,70,0, 42,0, +68,68,82,69,83,83,0, 89,84,69,0, 76,0, +83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, +83,65,66,76,69,0, 79,82,68,0, 66,76,69,0, 79,0, 76,84,0, +79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, +70,70,83,69,84,0, 73,78,84,69,82,0, 79,67,69,68,85,82,69,0, +87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, +79,82,84,73,78,84,0, 79,82,68,0, 79,0, 42,0, 65,83,69,0, +72,73,76,69,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, +83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, +67,76,65,82,69,0, 83,65,66,76,69,0, 79,82,68,0, 66,76,69,0, 79,0, +76,84,0, 79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, +70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, +85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, +42,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, +83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, +67,76,65,82,69,0, 83,65,66,76,69,0, 79,82,68,0, 83,69,0, +66,76,69,0, 70,0, 79,0, 76,84,0, 79,82,68,0, 84,69,71,69,82,0, +79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, +87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, +79,82,84,73,78,84,0, 79,82,68,0, 42,0, 84,0, 65,84,65,0, +88,84,69,82,78,65,76,0, 84,73,65,76,0, 69,82,85,80,84,0, +85,66,76,73,67,0, 69,69,78,84,82,65,78,84,0, 42,0, +68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, +87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, +79,78,71,73,78,84,0, 79,84,0, 70,70,83,69,84,0, +79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, +76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 42,0, 79,0, +65,83,69,0, 72,73,76,69,0, 68,68,82,69,83,83,0, 89,84,69,0, +72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, +78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 79,84,0, +70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, +76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 79,0, +68,68,82,69,83,83,0, 89,84,69,0, 76,0, +83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, +83,65,66,76,69,0, 79,82,68,0, 66,76,69,0, 79,0, 76,84,0, +79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, +70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, +85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, +68,68,82,69,83,83,0, 89,84,69,0, 76,0, +83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, +83,65,66,76,69,0, 79,82,68,0, 78,65,66,76,69,0, 79,0, 76,84,0, +79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, +70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, +85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, +68,68,82,69,83,83,0, 89,84,69,0, 76,0, +83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, +83,65,66,76,69,0, 79,82,68,0, 66,76,69,0, 79,0, 76,84,0, +79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, +70,70,83,69,84,0, 73,78,84,69,82,0, 79,67,69,68,85,82,69,0, +87,79,82,68,0, 76,0, 85,82,78,0, 76,69,67,84,79,82,0, +79,82,84,73,78,84,0, 79,82,68,0, 42,0, 68,68,82,69,83,83,0, +89,84,69,0, 72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, +78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 79,84,0, +70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, +76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, +79,82,68,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, +87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, +79,78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, +87,79,82,68,0, 69,65,76,0, 76,69,67,84,79,82,0, +79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 79,82,68,0, +68,68,82,69,83,83,0, 83,69,68,0, 84,69,0, 72,65,82,73,78,84,0, +87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 66,69,76,0, +84,69,82,65,76,76,89,0, 78,71,73,78,84,0, 70,70,83,69,84,0, +79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, +76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, +79,82,68,0, 42,0, 61,0, 78,85,83,0, 68,0, 82,0, 76,85,83,0, +69,78,0, 79,82,0, 42,0, 61,0, 78,85,83,0, 68,0, 76,85,83,0, +69,78,0, 79,82,0, 42,0, 68,68,82,69,83,83,0, 89,84,69,0, +72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, +78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, +79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, +76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 39,0, 42,0, +61,0, 78,68,0, 89,0, 78,85,83,0, 68,0, 82,0, 76,85,83,0, +69,78,0, 79,82,0, 68,68,82,69,83,83,0, 89,84,69,0, +72,65,82,73,78,84,0, 87,79,82,68,0, 87,79,82,68,0, +78,84,69,71,69,82,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, +79,73,78,84,69,82,0, 87,79,82,68,0, 69,65,76,0, +76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, 61,0, +78,68,0, 89,0, 78,85,83,0, 68,0, 82,0, 76,85,83,0, 69,78,0, +79,82,0, 61,0, 78,68,0, 89,0, 73,78,85,83,0, 82,0, 76,85,83,0, +69,78,0, 79,82,0, 61,0, 61,0, 78,68,0, 89,0, 78,85,83,0, 68,0, +82,0, 76,85,83,0, 69,78,0, 79,82,0, 78,68,0, 89,0, 82,0, +69,78,0, 79,82,0, 89,0, 82,0, 69,78,0, 79,82,0, 72,69,78,0, +76,83,69,0, 68,68,82,69,83,83,0, 89,84,69,0, 76,0, +83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, +83,65,66,76,69,0, 79,82,68,0, 83,69,0, 66,76,69,0, 79,0, +76,84,0, 79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, +70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, +85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, +42,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, +87,79,82,68,0, 88,84,69,82,78,65,76,0, 87,79,82,68,0, 69,82,0, +85,80,84,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, +73,78,84,69,82,0, 66,76,73,67,0, 87,79,82,68,0, 76,0, +78,84,82,65,78,84,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, +79,82,68,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, +87,79,82,68,0, 88,84,69,82,78,65,76,0, 87,79,82,68,0, 69,82,0, +85,80,84,0, 79,78,71,73,78,84,0, 70,70,83,69,84,0, +73,78,84,69,82,0, 66,76,73,67,0, 87,79,82,68,0, 76,0, +78,84,82,65,78,84,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, +79,82,68,0, 42,0, 88,84,69,82,78,65,76,0, 85,66,76,73,67,0, +88,84,69,82,78,65,76,0, 85,66,76,73,67,0, 65,83,69,68,0, 89,0, +42,0, 61,0, 78,85,83,0, 68,0, 82,0, 85,83,0, 66,76,73,67,0, +69,78,0, 79,82,0, 42,0, 61,0, 78,85,83,0, 68,0, 85,83,0, +66,76,73,67,0, 69,78,0, 79,82,0, 42,0, 85,66,76,73,67,0, 42,0, +68,68,82,69,83,83,0, 89,84,69,0, 76,0, +83,69,73,78,84,69,82,82,85,80,84,0, 65,82,73,78,84,0, +83,65,66,76,69,0, 79,82,68,0, 78,65,66,76,69,0, 79,0, 76,84,0, +79,82,68,0, 84,69,71,69,82,0, 79,78,71,73,78,84,0, +70,70,83,69,84,0, 79,73,78,84,69,82,0, 87,79,82,68,0, 76,0, +85,82,78,0, 76,69,67,84,79,82,0, 79,82,84,73,78,84,0, 79,82,68,0, +84,0, 65,84,65,0, 88,84,69,82,78,65,76,0, 78,73,84,73,65,76,0, +85,66,76,73,67,0, 42,0, 65,84,65,0, 88,84,69,82,78,65,76,0, +78,84,69,82,85,80,84,0, 85,66,76,73,67,0, +69,69,78,84,82,65,78,84,0, 42,0, 61,0, 61,0, 68,82,69,83,83,0, +68,0, 69,0, 72,65,82,73,78,84,0, 84,65,0, 79,82,68,0, +88,84,69,82,78,65,76,0, 87,79,82,68,0, 84,73,65,76,0, 69,82,0, +85,80,84,0, 66,69,76,0, 78,71,73,78,84,0, 78,85,83,0, 68,0, +70,83,69,84,0, 85,83,0, 73,78,84,69,82,0, 66,76,73,67,0, +87,79,82,68,0, 76,0, 78,84,82,65,78,84,0, 76,69,67,84,79,82,0, +79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 69,78,0, 79,82,68,0, +79,82,0, 68,68,82,69,83,83,0, 89,84,69,0, 72,65,82,73,78,84,0, +87,79,82,68,0, 87,79,82,68,0, 78,84,69,71,69,82,0, 66,69,76,0, +78,71,73,78,84,0, 70,70,83,69,84,0, 79,73,78,84,69,82,0, +87,79,82,68,0, 69,65,76,0, 76,69,67,84,79,82,0, +79,82,84,73,78,84,0, 82,85,67,84,85,82,69,0, 79,82,68,0, 78,68,0, +89,0, 73,78,85,83,0, 82,0, 76,85,83,0, 69,78,0, 79,82,0, +88,84,69,82,78,65,76,0, 78,84,69,82,85,80,84,0, 85,66,76,73,67,0, +69,69,78,84,82,65,78,84,0, 84,82,85,67,84,85,82,69,0, 65,84,65,0, +78,73,84,73,65,76,0, 84,0, 65,84,65,0, 78,73,84,73,65,76,0, +65,84,65,0, 42,0, 88,84,69,82,78,65,76,0, 78,84,69,82,85,80,84,0, +85,66,76,73,67,0, 69,69,78,84,82,65,78,84,0, +}; +#define AG_TCV(x) (((int)(x) >= -1 && (int)(x) <= 255) ? ag_tcv[(x) + 1] : 0) + +static const unsigned short ag_tcv[] = { + 103,103,249,249,249,103,249,249,249,249, 62, 62, 62, 62, 62,249,249,249, + 249,249,249,249,249,249,249,249,249,103,249,249,249,249,249, 62,249,249, + 249,225,249,249,243,259,258,307,262,290,330,267,315,228,228,250,250,250, + 250,250,250,251,251,304,264,325,265,323,249,311,252,227,252,223,253,252, + 254,233,254,254,254,254,254,254,230,254,230,254,254,254,254,254,254,254, + 254,254,249,249,249,249,255,311,252,227,252,223,253,252,254,233,254,254, + 254,254,254,254,230,254,230,254,254,254,254,254,254,254,254,254,249,249, + 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, + 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, + 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, + 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, + 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, + 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, + 249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249, + 249,249,249,249,249 +}; + +#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 + + +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; + +#ifndef GET_INPUT +#define GET_INPUT ((PCB).input_code = getchar()) +#endif + + +static int ag_look_ahead(void) { + if ((PCB).rx < (PCB).fx) { + return CONVERT_CASE((PCB).lab[(PCB).rx++]); + } + GET_INPUT; + (PCB).fx++; + return CONVERT_CASE((PCB).lab[(PCB).rx++] = (PCB).input_code); +} + +static void ag_get_key_word(int ag_k) { + int save_index = (PCB).rx; + const unsigned char *sp; + int ag_ch; + while (1) { + switch (ag_key_act[ag_k]) { + case ag_cf_end_key: + 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 + ag_look_ahead()]) goto ag_fail; + (PCB).rx--; + (PCB).token_number = (plm_token_type) ag_key_pt[ag_k1 + 1]; + return; + } + } while (ag_look_ahead() == ag_ch); + goto ag_fail; + case ag_end_key: + sp = ag_key_ends + ag_key_jmp[ag_k]; + do { + if ((ag_ch = *sp++) == 0) { + (PCB).token_number = (plm_token_type) ag_key_parm[ag_k]; + return; + } + } while (ag_look_ahead() == ag_ch); + case ag_no_match_key: +ag_fail: + (PCB).rx = save_index; + 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 + (ag_ch = ag_look_ahead())]) break; + save_index = --(PCB).rx; + (PCB).token_number = (plm_token_type) ag_key_pt[ag_k1+1]; + break; + } + case ag_set_key: + save_index = (PCB).rx; + (PCB).token_number = (plm_token_type) ag_key_parm[ag_k]; + case ag_jmp_key: + ag_k = ag_key_jmp[ag_k]; + ag_ch = ag_look_ahead(); + break; + case ag_accept_key: + (PCB).token_number = (plm_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 + ag_look_ahead()]) (PCB).rx = save_index; + else { + (PCB).rx--; + (PCB).token_number = (plm_token_type) ag_key_pt[ag_k1+1]; + } + return; + } + default: + /* not reachable; here to suppress compiler warnings */ + goto ag_fail; + } + if (ag_ch <= 255) while (ag_key_ch[ag_k] < ag_ch) ag_k++; + if (ag_ch > 255 || ag_key_ch[ag_k] != ag_ch) { + (PCB).rx = save_index; + return; + } + } +} + + +#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 = 0; + while (ag_k < (PCB).rx) { + int ag_ch = (PCB).lab[ag_k++]; + switch (ag_ch) { + 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++; + } + } + ag_k = 0; + while ((PCB).rx < (PCB).fx) (PCB).lab[ag_k++] = (PCB).lab[(PCB).rx++]; + (PCB).fx = ag_k; + (PCB).rx = 0; +} + + +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 = (plm_token_type) (PCB).drt; + (PCB).ssx = (PCB).dssx; + (PCB).sn = (PCB).dsn; + (PCB).drt = -1; +} + + +static const unsigned short ag_tstt[] = { +254,253,252,233,230,227,223,63,62,0,58,256,257, +330,325,323,315,311,307,304,290,267,265,264,262,259,258,255,254,253,252,251, + 250,249,243,233,230,228,227,225,223,67,62,0,65,66, +63,62,0,58, +254,253,252,233,230,227,223,0,57,60,102,193,266, +330,325,323,315,311,307,304,290,267,265,264,262,259,258,255,254,253,252,251, + 250,249,243,233,230,228,227,225,223,62,0, +67,0, +330,326,325,324,323,322,315,307,304,296,290,267,265,264,262,259,258,255,254, + 253,252,251,250,233,230,228,227,225,223,63,62,0,58,256,257, +304,0,154, +285,103,0,20, +328,321,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275, + 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,63,62,0,58, + 256,257, +294,0,15,126,214, +103,63,62,0,58,256,257, +103,0, +295,293,264,254,253,252,233,230,227,223,63,62,0,58,256,257, +264,0,85, +328,306,303,302,300,298,297,294,292,291,284,283,281,280,279,278,277,276,275, + 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10, + 11,13,14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81, + 82,85,88,89,90,91,92,93,94,99,100,104,105,113,114,115,116,121,122,123, + 124,125,126,127,128,129,130,132,134,135,137,147,151,152,153,169,172,174, + 207,210,211,214,220,266, +328,306,303,302,300,298,297,294,292,291,286,285,284,283,281,280,279,278,277, + 276,275,274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,103, + 63,62,0,58,256,257, +259,254,253,252,233,230,227,223,63,62,0,58,256,257, +328,306,303,302,300,298,297,294,292,291,284,283,281,280,279,278,277,276,275, + 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10, + 11,13,14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81, + 82,85,88,89,90,91,92,93,94,99,100,104,105,113,114,115,116,121,122,123, + 124,125,126,127,128,129,130,132,134,135,137,147,151,152,153,169,172,174, + 207,210,211,214,220,266, +259,254,253,252,233,230,227,223,0,60,69,117,118,119,120,138,139,173,175,219, + 221,266, +328,306,303,302,300,298,297,294,292,291,284,283,281,280,279,278,277,276,275, + 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10, + 11,13,14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81, + 82,85,88,89,90,91,92,93,94,99,100,104,105,113,114,115,121,122,123,124, + 125,126,127,128,129,130,132,134,135,137,147,151,152,153,169,172,174,207, + 210,211,214,220,266, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +320,317,316,312,309,308,290,289,264,259,258,63,62,0,58,256,257, +259,0,69,191, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,264, + 262,259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +264,63,62,0,58,256,257, +264,63,62,0,58,256,257, +264,63,62,0,58,256,257, +259,63,62,0,58,256,257, +301,63,62,0,58,256,257, +254,253,252,233,230,227,223,63,62,0,58,256,257, +295,293,264,254,253,252,233,230,227,223,0,9,54,60,85,98,156,157,266, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,264, + 262,259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29, + 34,38,39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,85,87,94,99,109, + 131,132,133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217, + 218,240,266,287,288,331, +264,0,85, +264,0,85, +264,0,85, +259,0,69, +301,0,53, +254,253,252,233,230,227,223,63,62,0,58,256,257, +290,0,112, +328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, + 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, + 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, + 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,129, + 130,132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, +328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, + 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, + 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, + 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,129, + 130,132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, +328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, + 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, + 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, + 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,129, + 130,132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, + 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, + 266,287,288,331, +254,253,252,233,230,227,223,0,60,266, +254,253,252,233,230,227,223,0,60,98,266, +265,0,83, +328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273, + 272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,14,15, + 16,18,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,88,89,90, + 91,92,93,94,99,100,104,105,106,107,121,122,123,124,125,126,127,130,132, + 134,137,147,151,152,153,169,172,174,210,211,214,216,220,266, +328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, + 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, + 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, + 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, + 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, +304,267,259,0,69,87,154,190,192,215, +321,0,43, +264,254,253,252,233,230,227,223,63,62,0,58,256,257, +264,254,253,252,233,230,227,223,0,60,136,266, +328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, + 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, + 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, + 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,130,132, + 134,135,151,152,153,169,172,174,210,211,214,220,266, +328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, + 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, + 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, + 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, + 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, +328,306,303,302,300,298,297,294,292,291,284,283,281,280,279,278,277,276,275, + 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10, + 11,13,14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81, + 82,85,88,89,90,91,92,93,94,99,100,104,105,113,114,115,121,122,123,124, + 125,126,127,128,129,130,132,134,135,137,147,151,152,153,169,172,174,207, + 210,211,214,220,266, +330,327,313,311,307,281,280,279,278,277,276,275,274,273,272,271,270,269,268, + 267,262,259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256, + 257, +327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,0,69,78,79, + 80,197, +329,310,299,0,5,31,33, +254,253,252,233,230,227,223,0,60,140,221,266, +290,264,0,85,112, +328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, + 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, + 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, + 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, + 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, + 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, + 266,287,288,331, +267,0,87, +265,0,83, +301,0,53,170, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, + 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, + 266,287,288,331, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, + 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, + 266,287,288,331, +330,326,325,324,323,322,319,318,315,314,307,305,301,290,267,265,264,262,261, + 260,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232,235,236, +330,326,325,324,323,322,319,315,314,307,305,301,290,267,265,264,262,261,260, + 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232,235,236, +330,326,325,324,323,322,319,315,314,307,305,301,290,267,265,264,262,261,260, + 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232,235, + 236, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,325,323,315,311,307,304,290,267,265,264,262,259,258,255,254,253,252,251, + 250,249,245,243,233,230,228,227,225,223,62,0,246,247,248, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,254,253,252,233, + 230,227,223,63,62,0,58,256,257, +281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,254,253,252,233, + 230,227,223,63,62,0,58,256,257, +330,326,325,324,323,322,319,318,315,314,307,305,301,290,282,265,264,263,262, + 261,260,258,63,62,0,58,256,257, +330,326,325,324,323,322,319,318,315,314,307,305,301,290,282,265,264,263,262, + 261,260,258,63,62,0,58,256,257, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, + 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, + 266,287,288,331, +281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,254,253,252,233, + 230,227,223,0,1,7,11,16,26,29,34,39,42,45,46,49,50,55,60,69,94,99,132, + 266, +281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,254,253,252,233, + 230,227,223,0,1,7,11,16,26,29,34,39,42,45,46,49,50,55,60,69,94,99,132, + 266, +311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,259,254,253, + 252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42,45,46,49, + 50,55,59,60,61,69,87,94,99,109,132,162,163,164,165,176,177,196,204,205, + 266,287,288,331, +315,314,307,0,36,155,194,195, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,326,325,324,323,322,265,262,261,260,0,22,32,35,37,41,72,73,74,83,184, + 208,209,240, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42, + 45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,162,163,164,165, + 176,177,183,196,204,205,212,213,217,218,240,266,287,288,331, +267,259,0,69,87,190,192,215, +263,0,2,75, +296,0,3, +319,318,0,40,56,181, +264,0,85, +251,250,228,0,101,162,163,164,165,331, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,327,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267, + 262,259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +281,280,279,278,277,276,275,274,273,272,271,270,269,268,254,253,252,233,230, + 227,223,0,1,7,11,16,26,29,34,39,42,45,46,49,50,55,60,94,99,132,266, +328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, + 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, + 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, + 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, + 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, +328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, + 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, + 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, + 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, + 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, +328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, + 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, + 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, + 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, + 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, +305,0,52, +264,0,85, +264,259,0,68,69,85, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, + 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, + 266,287,288,331, +286,0,17, +328,306,303,302,300,298,297,294,292,286,284,283,281,280,279,278,277,276,275, + 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0, +328,306,303,302,300,298,297,294,292,286,284,283,281,280,279,278,277,276,275, + 274,273,272,271,270,269,268,264,254,253,252,233,230,227,223,0, +328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273, + 272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,14,15, + 16,18,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,88,89,90, + 91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,130,132,134,151, + 152,153,169,172,174,210,211,214,216,220,266, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,70,73,74,76,77,84,87,94,99,109,131,132, + 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, + 266,287,288,331, +267,0,87,190,192, +254,253,252,233,230,227,223,0,60,189,266, +267,0,87,190, +320,317,316,309,281,280,279,278,277,276,275,274,273,272,271,270,269,268,264, + 259,63,62,0,58,256,257, +320,317,316,309,281,280,279,278,277,276,275,274,273,272,271,270,269,268,264, + 259,0,69,150,198, +264,0,85, +328,306,303,302,300,298,297,294,292,284,283,281,280,279,278,277,276,275,274, + 273,272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11, + 14,15,16,18,19,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85, + 88,89,90,91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,128,130, + 132,134,135,137,147,151,152,153,169,172,174,210,211,214,220,266, +307,251,250,228,0,59,155,162,163,164,165,196,288,331, +327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,0,1,7,11,16,26, + 29,34,39,42,45,46,49,50,51,55,94,145,186, +254,253,252,233,230,227,223,63,62,0,58,256,257, +254,253,252,233,230,227,223,0,60,86,266, +243,63,62,0,58,256,257, +243,0,61,287, +317,316,290,264,63,62,0,58,256,257, +317,316,290,264,0,21,44,141, +329,0,5, +290,258,0,71,112, +259,254,253,252,233,230,227,223,0,60,69,117,118,119,138,139,173,175,219,221, + 266, +258,0,71, +254,253,252,233,230,227,223,0,60,266, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, + 133,158,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218, + 240,266,287,288,331, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,95,99,109,131,132, + 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, + 266,287,288,331, +282,264,0,6,96,171, +264,0,85, +264,0,85, +330,262,253,251,250,228,0,237, +253,252,251,250,233,228,227,225,223,0,232, +330,326,325,324,323,322,319,318,315,314,307,305,301,290,267,265,264,262,261, + 260,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232,235,236, +330,326,325,324,323,322,319,318,317,315,314,307,305,301,290,265,264,262,261, + 260,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232, +253,252,251,250,233,228,227,225,223,0,232, +330,326,325,324,323,322,319,315,314,307,305,301,290,267,265,264,262,261,260, + 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232,235,236, +330,326,325,324,323,322,319,317,315,314,307,305,301,290,265,264,262,261,260, + 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232, +253,252,251,250,233,228,227,225,223,0,232, +330,326,325,324,323,322,319,315,314,307,305,301,290,267,265,264,262,261,260, + 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232,235, + 236, +330,326,325,324,323,322,319,317,315,314,307,305,301,290,265,264,262,261,260, + 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232, +330,325,323,315,311,307,304,290,267,265,264,262,259,258,255,254,253,252,251, + 250,249,245,233,230,228,227,225,223,62,0,246, +243,0, +258,0,71, +251,250,243,228,0,59,61,109,111,162,163,164,165,196,287,288,331, +251,250,243,228,0,59,61,109,111,162,163,164,165,196,287,288,331, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 258,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42, + 45,46,49,50,55,59,60,61,69,73,74,87,94,99,109,132,162,163,164,165,176, + 177,196,204,205,212,213,217,218,240,266,287,288,331, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42, + 45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,162,163,164,165, + 176,177,196,204,205,212,213,217,218,240,266,287,288,331, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262,259, + 254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,39,42, + 45,46,49,50,55,59,60,61,69,73,74,77,87,94,99,109,132,162,163,164,165, + 176,177,196,204,205,212,213,217,218,240,266,287,288,331, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,162,163, + 164,165,176,177,182,183,196,204,205,212,213,217,218,240,266,287,288,331, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,133,162, + 163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,266,287, + 288,331, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,87,94,99,109,132,162,163, + 164,165,176,177,180,182,183,196,204,205,212,213,217,218,240,266,287,288, + 331, +317,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232, +317,258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232, +317,258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232, +317,316,258,63,62,0,58,256,257, +258,0,71, +328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273, + 272,271,270,269,268,264,254,253,252,233,230,227,223,63,62,0,58,256,257, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,70,73,74,76,77,84,87,94,99,109,131,132, + 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, + 266,287,288,331, +264,0,85, +264,0,85, +328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273, + 272,271,270,269,268,264,254,253,252,233,230,227,223,63,62,0,58,256,257, +328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273, + 272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,14,15, + 16,18,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,88,89,90, + 91,92,93,94,99,100,104,105,108,121,122,123,124,125,126,127,130,132,134, + 137,147,151,152,153,169,172,174,210,211,214,220,266, +290,258,0,71,112, +267,0,87,190, +259,0,69,191, +254,253,252,233,230,227,223,0,60,148,149,266, +320,317,316,309,281,280,279,278,277,276,275,274,273,272,271,270,269,268,264, + 0,1,7,11,16,26,29,34,39,42,45,46,49,50,55,94,201,202, +258,0,71, +258,0,71, +259,63,62,0,58,256,257, +259,0,69, +317,316,312,308,290,289,264,0,4,12,21,28,44,146,161,178,179,203, +267,0,87, +320,317,316,312,309,308,290,289,264,63,62,0,58,256,257, +320,317,316,309,290,289,264,63,62,0,58,256,257, +254,253,252,233,230,227,223,0,60,221,266, +330,327,326,325,324,323,322,320,319,318,317,316,315,314,312,309,308,307,305, + 301,299,296,290,289,282,281,280,279,278,277,276,275,274,273,272,271,270, + 269,268,267,265,264,263,262,261,260,259,258,63,62,0,58,256,257, +327,299,281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,0,31,69, + 79,144, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,63,62,0,58,256,257, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,97,99,109,131,132, + 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, + 266,287,288,331, +264,0,85, +251,250,228,0,239, +251,250,228,0,239, +253,252,251,250,233,228,227,225,223,0,232, +330,326,325,324,323,322,319,318,317,315,314,307,305,301,290,265,264,262,261, + 260,258,253,252,251,250,233,228,227,225,223,63,62,0,222,232, +330,326,325,324,323,322,319,317,315,314,307,305,301,290,265,264,262,261,260, + 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,229,232, +330,326,325,324,323,322,319,317,315,314,307,305,301,290,265,264,262,261,260, + 258,253,252,251,250,233,230,228,227,225,223,63,62,0,222,226,229,232, +290,258,0,71,112, +290,258,0,71,112, +330,262,261,260,0,35,41,72,73,74,240, +315,314,307,0,36,155,194,195, +319,318,0,40,56,181, +263,0,2,75, +264,0,85, +290,258,0,71,112, +328,306,303,302,300,297,294,292,284,283,281,280,279,278,277,276,275,274,273, + 272,271,270,269,268,264,254,253,252,233,230,227,223,0,1,7,8,10,11,14,15, + 16,18,23,24,25,26,27,29,34,39,42,45,46,48,49,50,55,60,81,82,85,88,89,90, + 91,92,93,94,99,100,104,105,121,122,123,124,125,126,127,130,132,134,151, + 152,153,169,172,174,210,211,214,220,266, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, + 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, + 266,287,288,331, +290,258,0,71,112, +320,317,316,309,264,0,21,30,44,47,166,199,200,206, +327,259,254,253,252,233,230,227,223,0,51,60,69,142,185,186,187,188,189,266, +259,63,62,0,58,256,257, +290,264,259,63,62,0,58,256,257, +259,63,62,0,58,256,257, +259,0,69, +259,0,69, +259,0,69, +308,289,0,12,28,161, +312,308,289,0,4,12,28,161,178,179, +289,0,12,110, +254,253,252,233,230,227,223,0,60,266, +251,250,228,0,59,162,163,164,165,196,288,331, +327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,0,1,7,11,16,26, + 29,34,39,42,45,46,49,50,51,55,94,145,186, +317,316,290,264,0,21,44,141, +251,250,228,0, +251,250,228,0, +251,250,243,228,0,59,61,109,162,163,164,165,196,287,288,331, +254,253,252,233,230,227,223,0,60,148,266, +317,316,251,250,228,63,62,0,58,256,257, +317,316,251,250,228,0,101,162,163,164,165,167,168,331, +320,317,316,309,264,63,62,0,58,256,257, +317,316,0,21,44, +320,317,316,309,0,21,30,44,47,166,206, +264,0,85, +327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,0,69,79,144, +254,253,252,233,230,227,223,0,60,143,189,266, +290,258,0,71,112, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, + 133,159,160,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217, + 218,240,266,287,288,331, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, + 133,159,160,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217, + 218,240,266,287,288,331, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, + 133,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218,240, + 266,287,288,331, +317,316,312,308,290,289,264,0,4,12,21,28,44,146,161,178,179,203, +327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,0,1,7,11,16,26, + 29,34,39,42,45,46,49,50,51,55,94,145,186, +290,258,0,71,112, +327,259,254,253,252,233,230,227,223,0,51,60,69,142,185,186,187,189,266, +290,258,0,71,112, +290,258,0,71,112, +258,0,71, +254,253,252,233,230,227,223,0,60,189,266, +327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,259,0,69,79,144, +330,313,311,281,280,279,278,277,276,275,274,273,272,271,270,269,268,267,262, + 259,254,253,252,251,250,243,233,230,228,227,223,0,1,7,11,16,26,29,34,38, + 39,42,45,46,49,50,55,59,60,61,69,73,74,76,77,84,87,94,99,109,131,132, + 133,159,162,163,164,165,176,177,180,182,183,196,204,205,212,213,217,218, + 240,266,287,288,331, +327,281,280,279,278,277,276,275,274,273,272,271,270,269,268,0,1,7,11,16,26, + 29,34,39,42,45,46,49,50,51,55,94,145,186, + +}; + + +static unsigned const char ag_astt[7723] = { + 8,8,8,8,8,8,8,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,8,1,7,1,1,1,9,5,3,1,1,1,1,1,1,1,7,0,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,5,3,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,9,9,9,9,9,9,9,9,9,9,9,9,1,1,7,1,1,3,1,7,1,1,3,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,1,1,7,1,1,3,1,7,1,3,1,5,1,1, + 7,1,1,3,3,7,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,1,7,2,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,3,1,1,1,1,3,1,1,1,1,1,1,1,1,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,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,1,1, + 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,1,1, + 1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1,3,1,1, + 1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5, + 5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5, + 5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5, + 5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1, + 1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1, + 1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5, + 5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,1,7,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,1,1,7,1,1, + 3,5,1,1,7,1,1,3,5,1,1,7,1,1,3,5,1,1,7,1,1,3,5,1,1,7,1,1,3,5,1,1,7,1,1,3,5, + 5,5,5,5,5,5,1,1,7,1,1,3,1,1,1,1,1,1,1,1,1,1,7,1,1,1,2,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,1,1,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,1,7,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,7,3,1,7,3,1,7,3,1,7,1,1,7,3,5,5,5,5,5,5,5,1,1,7,1,1,3,1,5,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,3,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1, + 1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,3,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,7,1,1,1,1,7, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,3,1,3, + 1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,3,1,1,3,3, + 1,3,1,3,1,1,1,1,3,3,1,3,1,1,1,1,5,1,1,3,1,1,1,1,5,1,5,5,5,5,5,5,5,5,1,1,7, + 1,1,3,8,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,1,1,3,3,1,3,3,1,3,1,3,3,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,1,1,1,7,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,1,1,3,3,1, + 3,3,3,3,3,3,1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,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,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,3,1,1,1,1,1,1,1, + 3,1,1,1,1,3,1,1,1,1,1,1,1,1,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,7,1,1,3,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, + 1,7,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3, + 1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,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,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,7,1,1,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,1,1,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,7,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,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,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1, + 5,5,5,5,5,5,1,1,1,1,3,1,1,1,1,5,5,7,3,3,3,1,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5, + 5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,1,5,5,5,5,5,5,5,5,5,5,5,5,5,1, + 5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,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,5,5,5,5,1,1,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,8,1,1,1,1,1,1,1,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,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,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,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,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,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,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,7,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,3,3,1,1,1,1,3,1,1,3,3,1,1,1,1,1,1,1, + 5,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,1,1, + 7,1,1,3,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1, + 1,1,1,5,1,1,1,5,1,1,1,5,1,1,1,1,7,3,1,1,1,7,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,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,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3, + 3,3,1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,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,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,3,1,1,3,3,1,3,1,3, + 1,1,1,1,3,3,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,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3, + 3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,1,3,1,1,7,3, + 1,7,3,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,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,7,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,1,1,1,1,3,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,1,7,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,5,1,3,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,7,1,1,3,5,5,5,5,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,5,1,7,1,1,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,1, + 1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3, + 3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,1,3,1,1,3,3,1,3,1,3,1,1,1,1,3,3,1,3,1,1, + 1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,1,1,7,1,1,3,1,1,1,1,1,1,1,7,1,3,1,5,1,1, + 7,1,1,3,1,7,2,1,5,5,5,5,1,1,7,1,1,3,1,1,5,5,7,3,3,3,1,5,1,1,1,7,1,1,1,1,1, + 1,1,1,1,1,7,1,1,3,3,3,3,3,3,3,3,1,1,1,7,3,1,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,1,1,3,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,1,3,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,8,7,1,1,1,1,7,2,1,7,2,1,1,1,9,9,9,5,3,1, + 1,1,1,3,1,1,1,1,7,3,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5,5,5,1,1,1,1,3,1, + 1,1,1,5,5,7,3,3,3,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,3,1, + 1,1,1,5,5,7,3,3,1,1,1,1,3,1,1,1,1,5,3,5,5,5,5,5,5,5,5,5,5,5,5,5,1,5,5,5,5, + 5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,1,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,1,1,1,1,3,1,1,1,1,5,3,5,5,5,5,5,5,5, + 5,5,5,5,5,5,1,5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,3,1,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,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,3,7,1,7,3,1,1,1,1,7,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,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,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,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,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3, + 1,1,1,1,1,1,3,3,1,1,1,1,3,1,1,3,3,3,1,1,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,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,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,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,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,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,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,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,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,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,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,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,3,3,1,1,1,1,1,1,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,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5, + 5,5,5,5,5,5,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,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,1,1,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,7,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,5,5,1,1,1,1,3,1,1,1,1,5,5,7,3,3,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7, + 3,3,3,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,5,5,5,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,5,5,5,5,5,5,5,5,5,5,5,1,1,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,7,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,7,3,1,7,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,1,1,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,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3,3,3,3,1,1,1,3,1,3,1,3,1,1,1,1,3,3,1,3, + 1,1,1,7,3,1,1,5,1,3,1,5,1,3,1,1,1,1,1,1,1,7,1,1,1,1,8,8,8,8,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,5,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,1,7,3,5,1,1,7,1, + 1,3,1,7,1,1,1,1,1,5,1,5,7,1,1,1,1,1,3,3,1,3,3,1,5,1,5,5,5,5,5,5,5,5,5,1,1, + 7,1,1,3,5,5,5,5,5,5,5,1,1,7,1,1,3,1,1,1,1,1,1,1,7,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,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,1,1,7,1,1,3,8,1,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,7,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,1,1,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,7,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,3,1,1,3,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,7,2,1,1,1,7,1,1,1,1,7,1,1,1,1,1,3,1,1,1,1,7,3,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,3,1,1,1,1,5,5,7,3,3,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,1,1,1,1,3,3,1,1,1,1,5,5,7,3,3,3,3,1,1,7,3,1,1,1,7,3,1,1,1, + 1,1,5,1,1,1,1,1,1,1,1,1,5,1,1,1,1,1,1,5,1,1,1,1,5,1,1,1,7,3,1,1,7,3,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1,3,3,3,3,3,3,3,1,1,3,3,1,3,3,3,3, + 3,3,1,1,1,3,1,3,3,1,3,1,3,3,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,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,1, + 1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,1,1,1,1,1,8, + 7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,5,1,1,7,1,1,3,5, + 5,5,1,1,7,1,1,3,5,1,1,7,1,1,3,1,7,1,1,7,1,1,7,1,1,1,5,1,1,3,1,1,1,5,1,1,1, + 3,1,3,1,5,3,3,1,1,1,1,1,1,1,7,3,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,5,7,3,3,3,9,9,9, + 5,9,9,9,5,1,1,1,1,7,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,3,3,1,5,5,5,5,5, + 1,1,7,1,1,3,5,5,1,1,1,7,3,1,1,1,1,3,3,1,5,5,5,5,5,1,1,7,1,1,3,1,1,7,3,3,1, + 1,1,1,5,3,1,3,3,1,3,1,7,2,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,7,1,1,1,1,1,1,1, + 1,1,1,7,1,1,1,1,1,1,7,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,5,1,5,7,1,1,1,1,1,3,3,1,3,3,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,7,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3,1,1,7,1,1,1,1,1,1,1,1,1, + 1,1,7,1,1,1,3,3,3,3,1,1,1,1,7,3,1,1,1,7,3,1,1,7,3,1,1,1,1,1,1,1,7,3,3,1,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,8,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 3,1,1,1,1,3,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,1,1,1,1,1,7,3,3,3,3,3,3,3,3,3,3,3,3,3,1,3,3,3,3 +}; + + +static const unsigned short ag_pstt[] = { +3,3,3,3,3,3,3,1,2,0,2,2,3, +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,5,4,1,4,5, +1,399,401,399, +6,6,6,6,6,6,6,3,0,7,8,7,6, +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,5, +6,5, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,299,299, + 299,299,299,299,299,299,299,299,299,299,1,2,6,2,2,410, +9,7,10, +11,46,8,12, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,9,2,2, + 448, +13,10,14,156,15, +400,1,2,11,2,2,429, +47,12, +400,400,400,400,400,400,400,400,400,400,1,2,13,2,2,438, +16,14,218, +36,44,37,41,42,64,38,13,39,17,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33, + 34,16,6,6,6,6,6,6,6,15,35,35,58,49,35,19,48,43,35,47,65,50,57,46,35,56, + 35,35,35,35,35,35,45,35,35,35,62,61,59,61,61,61,61,61,61,61,35,35,61,61, + 60,20,20,20,20,61,61,61,61,61,61,55,214,61,54,52,61,214,66,61,57,61,63, + 53,66,52,18,61,61,15,61,6, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 1,2,16,2,2,408, +400,400,400,400,400,400,400,400,1,2,17,2,2,435, +36,44,37,41,42,64,38,13,39,17,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33, + 34,16,6,6,6,6,6,6,6,18,35,35,58,49,35,19,48,43,35,47,65,50,57,46,35,56, + 35,35,35,35,35,35,45,35,35,35,62,67,59,67,67,67,67,67,67,67,35,35,67,67, + 60,68,68,68,68,67,67,67,67,67,67,55,198,67,54,52,67,198,66,67,57,67,63, + 53,66,52,18,67,67,15,67,6, +69,6,6,6,6,6,6,6,19,71,72,73,73,73,73,73,73,73,73,73,70,6, +36,44,37,41,42,64,38,13,39,17,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33, + 34,16,6,6,6,6,6,6,6,20,35,35,58,49,35,19,48,43,35,47,65,50,57,46,35,56, + 35,35,35,35,35,35,45,35,35,35,62,74,59,74,74,74,74,74,74,74,35,35,74,74, + 60,58,58,58,74,74,74,74,74,74,55,216,74,54,52,74,216,66,74,57,74,63,53, + 66,52,18,74,74,15,74,6, +400,400,400,400,400,400,400,400,400,400,400,1,2,21,2,2,425, +400,400,400,400,400,400,400,400,400,400,400,1,2,22,2,2,424, +400,400,400,400,400,400,400,400,400,400,400,1,2,23,2,2,423, +400,400,400,400,400,400,400,400,400,400,400,1,2,24,2,2,422, +400,400,400,400,400,400,400,400,400,400,400,1,2,25,2,2,421, +400,400,400,400,400,400,400,400,400,400,400,1,2,26,2,2,420, +400,400,400,400,400,400,400,400,400,400,400,1,2,27,2,2,419, +400,400,400,400,400,400,400,400,400,400,400,1,2,28,2,2,418, +400,400,400,400,400,400,400,400,400,400,400,1,2,29,2,2,417, +400,400,400,400,400,400,400,400,400,400,400,1,2,30,2,2,416, +400,400,400,400,400,400,400,400,400,400,400,1,2,31,2,2,415, +400,400,400,400,400,400,400,400,400,400,400,1,2,32,2,2,414, +400,400,400,400,400,400,400,400,400,400,400,1,2,33,2,2,413, +400,400,400,400,400,400,400,400,400,400,400,1,2,34,2,2,412, +69,35,75,264, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,36,2,2,472, +400,1,2,37,2,2,447, +400,1,2,38,2,2,441, +400,1,2,39,2,2,436, +400,1,2,40,2,2,428, +400,1,2,41,2,2,446, +400,400,400,400,400,400,400,1,2,42,2,2,444, +79,81,16,6,6,6,6,6,6,6,43,82,80,76,218,77,78,77,6, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,1,2,44,2,2,450, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,16,88,69,6,6,6,83,84, + 87,6,6,85,6,6,45,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101, + 97,93,96,96,99,97,105,251,94,35,35,97,105,103,104,91,91,91,91,97,95,102, + 102,102,91,97,97,97,96,96,96,96,6,92,91,91, +16,46,98, +16,47,76, +16,48,64, +69,49,106, +107,50,96, +400,400,400,400,400,400,400,1,2,51,2,2,427, +108,122,109, +36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 16,6,6,6,6,6,6,6,53,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, + 35,35,35,35,45,35,35,35,62,110,59,110,110,110,110,110,110,110,35,35,110, + 110,60,110,110,110,110,110,110,55,115,110,54,52,110,115,66,110,57,110, + 66,53,66,52,110,110,15,110,6, +36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 16,6,6,6,6,6,6,6,54,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, + 35,35,35,35,45,35,35,35,62,111,59,111,111,111,111,111,111,111,35,35,111, + 111,60,111,111,111,111,111,111,55,72,111,54,52,111,72,66,111,57,111,66, + 53,66,52,111,111,15,111,6, +36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 16,6,6,6,6,6,6,6,55,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, + 35,35,35,35,45,35,35,35,62,112,59,112,112,112,112,112,112,112,35,35,112, + 112,60,112,112,112,112,112,112,55,69,112,54,52,112,69,66,112,57,112,66, + 53,66,52,112,112,15,112,6, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,56,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,113,94,35,35,97,113,103,104,91,91,91,91,97,95,102,102, + 102,91,97,97,97,96,96,96,96,6,92,91,91, +6,6,6,6,6,6,6,57,114,6, +6,6,6,6,6,6,6,58,76,115,6, +116,59,117, +36,44,37,41,42,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,16, + 6,6,6,6,6,6,6,60,35,35,58,49,35,48,43,35,47,50,57,46,35,56,35,35,35,35, + 35,35,45,35,35,35,62,120,59,120,120,120,120,120,120,120,35,35,120,48,60, + 48,118,120,119,119,119,119,119,55,54,52,120,121,48,57,120,121,53,121,52, + 120,120,15,118,48,6, +36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 16,6,6,6,6,6,6,6,61,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, + 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, + 250,60,250,250,250,250,250,250,55,215,54,52,250,215,66,250,57,250,66,53, + 66,52,250,250,15,250,6, +9,89,69,262,122,124,99,125,125,123, +126,118,127, +400,400,400,400,400,400,400,400,1,2,64,2,2,442, +128,6,6,6,6,6,6,6,65,128,128,6, +36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 16,6,6,6,6,6,6,6,66,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, + 35,35,35,35,45,35,35,35,62,245,59,245,245,245,245,245,245,245,35,35,245, + 245,60,245,245,245,245,245,245,55,54,52,245,79,57,245,120,53,120,52,245, + 245,15,245,6, +36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 16,6,6,6,6,6,6,6,67,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, + 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, + 250,60,250,250,250,250,250,250,55,200,54,52,250,200,66,250,57,250,66,53, + 66,52,250,250,15,250,6, +36,44,37,41,42,64,38,13,39,17,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33, + 34,16,6,6,6,6,6,6,6,68,35,35,58,49,35,19,48,43,35,47,65,50,57,46,35,56, + 35,35,35,35,35,35,45,35,35,35,62,129,59,129,129,129,129,129,129,129,35, + 35,129,129,60,58,58,58,129,129,129,129,129,129,55,199,129,54,52,129,199, + 66,129,57,129,63,53,66,52,18,129,129,15,129,6, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,69,2,2,403, +131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,69,70,130,131, + 131,131,131, +132,134,136,258,133,137,135, +6,6,6,6,6,6,6,72,138,139,139,6, +108,16,73,63,140, +36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 16,6,6,6,6,6,6,6,74,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, + 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, + 250,60,250,250,250,250,250,250,55,217,54,52,250,217,66,250,57,250,66,53, + 66,52,250,250,15,250,6, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,75,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,141,94,35,35,97,141,103,104,91,91,91,91,97,95,102,102, + 102,91,97,97,97,96,96,96,96,6,92,91,91, +89,219,142, +116,77,143, +107,78,144,145, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,1,2,79,2,2,439, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,80,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,146,94,35,35,97,146,103,104,91,91,91,91,97,95,102,102, + 102,91,97,97,97,96,96,96,96,6,92,91,91, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,1,2,81,2,2,437, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,82,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,147,94,35,35,97,147,103,104,91,91,91,91,97,95,102,102, + 102,91,97,97,97,96,96,96,96,6,92,91,91, +271,271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271, + 271,271,149,149,150,150,287,150,149,151,152,271,271,83,275,287,291,148, +271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,271, + 271,149,149,150,153,287,283,153,149,154,152,271,271,84,275,283,287,291, + 148, +271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,271, + 271,149,149,150,153,287,283,156,155,157,152,271,271,85,275,279,283,287, + 291,148, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,86,2,2,474, +158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158, + 158,158,158,159,158,158,158,158,158,158,158,87,158,158,159, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,88,2,2,406, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,1,2,89,2,2,411, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,1,2,90,2,2,455, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,1,2,91,2,2,432, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,1,2,92,2,2,431, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,93,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,160,94,35,35,97,160,103,104,91,91,91,91,97,95,102,102, + 102,91,97,97,97,96,96,96,96,6,92,91,91, +21,22,23,24,25,26,27,28,29,30,31,32,33,34,69,6,6,6,6,6,6,6,94,35,35,35,35, + 35,35,35,35,35,35,35,35,35,35,101,161,35,35,126,6, +21,22,23,24,25,26,27,28,29,30,31,32,33,34,69,6,6,6,6,6,6,6,95,35,35,35,35, + 35,35,35,35,35,35,35,35,35,35,101,162,35,35,124,6, +90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,69,6,6,6,83,84,87,6,6,85,6, + 6,96,35,35,35,35,35,35,35,35,35,35,35,35,35,35,213,101,213,93,94,35,35, + 213,213,91,91,91,91,213,95,91,213,213,6,92,91,91, +164,165,163,13,166,166,166,166, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,98,2,2,457, +86,167,168,169,170,171,116,88,173,174,136,172,172,175,172,175,175,175,175, + 172,172,172,172,175, +86,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,6,6, + 85,6,6,100,35,35,35,35,35,35,35,35,35,35,35,35,35,35,97,101,97,93,96,96, + 99,97,94,35,35,97,97,91,91,91,91,97,95,139,91,97,97,97,96,96,96,96,6,92, + 91,91, +89,69,262,122,124,125,125,123, +176,132,177,177, +178,190,179, +180,181,82,182,182,182, +16,105,235, +183,184,185,106,187,186,186,186,186,186, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,1,2,107,2,2,445, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,108,2,2,434, +21,22,23,24,25,26,27,28,29,30,31,32,33,34,6,6,6,6,6,6,6,109,35,35,35,35,35, + 35,35,35,35,35,35,35,35,35,101,35,35,268,6, +36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 16,6,6,6,6,6,6,6,110,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, + 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, + 250,60,250,250,250,250,250,250,55,116,54,52,250,116,66,250,57,250,66,53, + 66,52,250,250,15,250,6, +36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 16,6,6,6,6,6,6,6,111,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, + 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, + 250,60,250,250,250,250,250,250,55,73,54,52,250,73,66,250,57,250,66,53, + 66,52,250,250,15,250,6, +36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 16,6,6,6,6,6,6,6,112,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, + 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, + 250,60,250,250,250,250,250,250,55,70,54,52,250,70,66,250,57,250,66,53, + 66,52,250,250,15,250,6, +188,113,100, +16,114,97, +16,69,115,190,189,42, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,1,2,116,2,2,409, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,117,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,191,94,35,35,97,191,103,104,91,91,91,91,97,95,102,102, + 102,91,97,97,97,96,96,96,96,6,92,91,91, +192,118,193, +248,248,248,248,248,248,248,248,248,232,248,248,248,248,248,248,248,248,248, + 248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,119, +246,246,246,246,246,246,246,246,246,233,246,246,246,246,246,246,246,246,246, + 246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,120, +36,44,37,41,42,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,16, + 6,6,6,6,6,6,6,121,35,35,58,49,35,48,43,35,47,50,57,46,35,56,35,35,35,35, + 35,35,45,35,35,35,62,120,59,120,120,120,120,120,120,120,35,35,120,245, + 60,120,119,119,119,119,119,55,54,52,120,57,120,120,53,120,52,120,120,15, + 231,245,6, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,122,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,194,96,96,99,97,194,94,35,35,97,194,103,104,91,91,91,91,97,95,102, + 102,102,91,97,97,97,96,96,96,96,6,92,91,91, +89,265,124,195,195, +6,6,6,6,6,6,6,124,196,196,6, +89,263,124,150, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,1,2,126,2,2,465, +170,170,170,170,198,198,198,198,198,198,198,198,198,198,198,198,198,198,170, + 69,127,197,198,198, +16,128,77, +36,44,37,41,42,64,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 16,6,6,6,6,6,6,6,129,35,35,58,49,35,48,43,35,47,65,50,57,46,35,56,35,35, + 35,35,35,35,45,35,35,35,62,250,59,250,250,250,250,250,250,250,35,35,250, + 250,60,250,250,250,250,250,250,55,201,54,52,250,201,66,250,57,250,66,53, + 66,52,250,250,15,250,6, +163,83,84,85,130,200,199,91,91,91,91,91,91,91, +201,21,22,23,24,25,26,27,28,29,30,31,32,33,34,131,203,203,203,203,203,203, + 203,203,203,203,203,203,203,202,203,203,203,203, +400,400,400,400,400,400,400,1,2,132,2,2,473, +6,6,6,6,6,6,6,133,204,259,6, +400,1,2,134,2,2,454, +87,135,123,92, +400,400,400,400,1,2,136,2,2,443, +205,206,180,180,137,121,121,121, +132,258,133, +108,208,139,209,207, +69,6,6,6,6,6,6,6,140,71,72,62,62,62,62,62,62,62,62,70,6, +208,141,225, +6,6,6,6,6,6,6,142,220,6, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,143,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,102,94,35,35,97,102,103,104,102,91,91,91,91,97,95,102, + 102,102,91,97,97,97,96,96,96,96,6,92,91,91, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,144,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,229,94,35,229,35,97,229,103,104,91,91,91,91,97,95,102, + 102,102,91,97,97,97,96,96,96,96,6,92,91,91, +210,212,145,211,212,212, +16,146,74, +16,147,71, +214,213,213,293,293,293,288,289, +149,149,149,149,285,149,149,215,149,149,285, +271,271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271, + 271,271,149,149,150,150,285,150,149,151,152,271,271,150,273,285,290,148, +271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, + 271,271,149,149,216,216,286,216,149,151,152,271,271,151,274,286, +149,149,149,149,285,149,149,215,149,272,285, +271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,271, + 271,149,149,150,153,285,281,153,149,154,152,271,271,153,273,281,285,290, + 148, +271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, + 271,149,149,216,217,286,282,217,149,154,152,271,271,154,274,282,286, +149,149,149,149,285,149,149,215,149,276,285, +271,271,271,271,271,271,271,271,271,271,271,271,271,148,271,271,271,271,271, + 271,149,149,150,153,285,281,156,155,157,152,271,271,156,273,277,281,285, + 290,148, +271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, + 271,149,149,216,217,286,282,218,155,157,152,271,271,157,274,278,282,286, +303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303, + 303,303,303,303,303,303,303,303,303,303,305,303, +306,159, +208,160,224, +83,84,87,85,161,219,219,219,219,91,91,91,91,91,92,91,91, +83,84,87,85,162,220,220,220,220,91,91,91,91,91,92,91,91, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,1,2,163,2,2,451, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,164,2,2,459, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,165,2,2,458, +86,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,6,6, + 85,6,6,166,35,35,35,35,35,35,35,35,35,35,35,35,35,35,228,101,228,93,96, + 96,94,35,35,228,228,91,91,91,91,228,95,91,228,228,228,96,96,96,96,6,92, + 91,91, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,167,2,2,470, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,168,2,2,469, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,169,2,2,468, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,170,2,2,467, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,171,2,2,466, +86,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,6,6, + 85,6,6,172,35,35,35,35,35,35,35,35,35,35,35,35,35,35,97,101,97,93,96,96, + 221,97,94,35,35,97,97,91,91,91,91,97,95,91,97,97,97,96,96,96,96,6,92,91, + 91, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,173,2,2,405, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,174,2,2,404, +86,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87,6,6, + 85,6,6,175,35,35,35,35,35,35,35,35,35,35,35,35,35,35,222,101,222,93,96, + 96,222,94,35,35,222,222,91,91,91,91,222,95,91,222,222,222,96,96,96,96,6, + 92,91,91, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,1,2,176,2,2,407, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,177,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,94,35,35,97,97,91,91,91,91,97,95,135,135,91,97,97,97,96, + 96,96,96,6,92,91,91, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,1,2,178,2,2,440, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,179,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,94,35,35,97,97,223,91,91,91,91,97,95,102,102,102,91,97, + 97,97,96,96,96,96,6,92,91,91, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,1,2,180,2,2,463, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,1,2,181,2,2,462, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,182,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,94,35,35,97,97,91,91,91,91,97,95,224,224,224,91,97,97,97, + 96,96,96,96,6,92,91,91, +271,271,149,149,216,216,287,216,149,151,152,271,271,183,275,287, +271,271,149,149,216,217,287,283,217,149,154,152,271,271,184,275,283,287, +271,271,149,149,216,217,287,283,218,155,157,152,271,271,185,275,279,283,287, +400,400,400,1,2,186,2,2,475, +208,187,225, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,188,2,2,449, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,189,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,226,96,96,99,97,226,94,35,35,97,226,103,104,91,91,91,91,97,95,102, + 102,102,91,97,97,97,96,96,96,96,6,92,91,91, +16,190,43, +16,191,17, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,400,1,2,192,2,2,430, +36,44,37,41,42,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,16, + 6,6,6,6,6,6,6,193,35,35,58,49,35,48,43,35,47,50,57,46,35,56,35,35,35,35, + 35,35,45,35,35,35,62,49,59,49,49,49,49,49,49,49,35,35,49,49,60,49,49,49, + 49,49,49,49,55,54,52,49,227,49,57,49,227,53,227,52,49,49,15,49,6, +108,208,194,226,228, +89,266,124,150, +69,148,75,149, +6,6,6,6,6,6,6,197,229,229,229,6, +230,230,230,230,21,22,23,24,25,26,27,28,29,30,31,32,33,34,178,198,230,230, + 230,230,230,230,230,230,230,230,230,230,230,230,230,230,230, +208,199,101, +208,200,80, +400,1,2,201,2,2,471, +69,202,231, +205,206,234,232,183,233,183,203,237,236,240,235,239,257,257,238,257,257, +89,18,241, +400,400,400,400,400,400,400,400,400,1,2,205,2,2,461, +400,400,400,400,400,400,400,1,2,206,2,2,460, +6,6,6,6,6,6,6,207,138,261,6, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,1,2,208,2,2,402, +243,136,243,243,243,243,243,243,243,243,243,243,243,243,243,243,69,209,244, + 242,243,243, +400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400, + 400,400,400,400,400,400,400,400,400,400,400,400,1,2,210,2,2,426, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,211,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,41,94,35,41,35,97,41,103,104,91,91,91,91,97,95,102,102, + 102,91,97,97,97,96,96,96,96,6,92,91,91, +16,212,117, +245,245,245,213,245, +246,246,246,214,246, +149,149,149,149,286,149,149,215,149,215,286, +271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, + 271,271,149,149,216,216,285,216,149,151,152,271,271,216,273,285, +271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, + 271,149,149,216,217,285,281,217,149,154,152,271,271,217,273,281,285, +271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271, + 271,149,149,216,217,285,281,218,155,157,152,271,271,218,273,277,281,285, +108,208,219,127,247, +108,208,220,125,247, +86,88,173,174,137,175,175,175,175,175,175, +164,165,163,14,166,166,166,166, +180,181,75,182,182,182, +176,133,177,177, +16,225,45, +108,208,226,7,228, +36,44,37,41,42,38,13,39,40,51,21,22,23,24,25,26,27,28,29,30,31,32,33,34,16, + 6,6,6,6,6,6,6,227,35,35,58,49,35,48,43,35,47,50,57,46,35,56,35,35,35,35, + 35,35,45,35,35,35,62,245,59,245,245,245,245,245,245,245,35,35,245,245, + 60,245,245,245,245,245,245,55,54,52,245,57,245,120,53,120,52,245,245,15, + 245,6, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,228,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,84,94,35,35,97,84,103,104,91,91,91,91,97,95,102,102,102, + 91,97,97,97,96,96,96,96,6,92,91,91, +108,208,229,94,248, +251,205,206,249,254,230,253,250,253,253,252,254,253,253, +201,69,6,6,6,6,6,6,6,231,202,255,256,257,257,257,257,257,255,6, +400,1,2,232,2,2,452, +400,400,400,1,2,233,2,2,433, +400,1,2,234,2,2,456, +69,235,258, +69,236,259, +69,237,260, +232,233,129,236,235,131, +234,232,233,255,237,236,235,254,238,254, +233,253,252,252, +6,6,6,6,6,6,6,241,19,6, +83,84,85,242,200,91,91,91,91,91,91,91, +201,21,22,23,24,25,26,27,28,29,30,31,32,33,34,243,261,261,261,261,261,261, + 261,261,261,261,261,261,261,202,261,261,261,261, +205,206,180,180,244,87,87,87, +295,295,295,296, +295,295,295,297, +83,84,87,85,247,54,54,54,91,91,91,91,91,92,91,91, +6,6,6,6,6,6,6,248,93,93,6, +400,400,400,400,400,1,2,249,2,2,453, +174,174,183,184,185,250,113,186,186,186,186,113,113,186, +400,400,400,400,400,1,2,251,2,2,464, +205,206,252,195,194, +251,205,206,249,177,197,250,197,197,252,197, +16,254,202, +262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,69,255,242,262, + 262, +6,6,6,6,6,6,6,256,263,263,263,6, +108,208,257,223,264, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,258,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,265,94,35,35,97,265,103,104,265,265,91,91,91,91,97,95, + 102,102,102,91,97,97,97,96,96,96,96,6,92,91,91, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,259,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,266,94,35,35,97,266,103,104,266,266,91,91,91,91,97,95, + 102,102,102,91,97,97,97,96,96,96,96,6,92,91,91, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,260,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,267,94,35,35,97,267,103,104,91,91,91,91,97,95,102,102, + 102,91,97,97,97,96,96,96,96,6,92,91,91, +205,206,234,232,183,233,183,261,237,236,240,235,239,89,89,238,89,89, +201,21,22,23,24,25,26,27,28,29,30,31,32,33,34,262,243,243,243,243,243,243, + 243,243,243,243,243,243,243,202,243,243,243,243, +108,208,263,269,268, +201,69,6,6,6,6,6,6,6,264,202,255,256,144,144,144,144,255,6, +108,208,265,108,270, +108,208,266,107,270, +208,267,128, +6,6,6,6,6,6,6,268,147,147,6, +271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,69,269,242,271, + 271, +86,98,90,21,22,23,24,25,26,27,28,29,30,31,32,33,34,89,88,69,6,6,6,83,84,87, + 6,6,85,6,6,270,35,35,35,35,35,35,35,100,35,35,35,35,35,35,35,97,101,97, + 93,96,96,99,97,106,94,35,35,97,106,103,104,106,91,91,91,91,97,95,102, + 102,102,91,97,97,97,96,96,96,96,6,92,91,91, +201,21,22,23,24,25,26,27,28,29,30,31,32,33,34,271,88,88,88,88,88,88,88,88, + 88,88,88,88,88,202,88,88,88,88, + +}; + + +static const unsigned short ag_sbt[] = { + 0, 13, 46, 50, 63, 93, 95, 130, 133, 137, 177, 182, 189, 191, + 207, 210, 317, 360, 374, 481, 503, 609, 626, 643, 660, 677, 694, 711, + 728, 745, 762, 779, 796, 813, 830, 847, 851, 889, 896, 903, 910, 917, + 924, 937, 956, 993,1079,1082,1085,1088,1091,1094,1107,1110,1210,1310, + 1410,1494,1504,1515,1518,1616,1715,1725,1728,1742,1754,1850,1949,2055, + 2094,2116,2123,2135,2140,2239,2323,2326,2329,2333,2370,2454,2491,2575, + 2612,2650,2689,2725,2759,2795,2823,2851,2879,2907,2991,3034,3077,3142, + 3150,3186,3210,3287,3295,3299,3302,3308,3311,3321,3358,3396,3437,3536, + 3635,3734,3737,3740,3746,3783,3867,3870,3905,3940,4034,4119,4124,4135, + 4139,4165,4189,4192,4291,4305,4339,4352,4363,4370,4374,4384,4392,4395, + 4400,4421,4424,4434,4519,4604,4610,4613,4616,4624,4635,4672,4707,4718, + 4756,4792,4803,4842,4879,4910,4912,4915,4932,4949,4986,5022,5058,5132, + 5168,5204,5240,5276,5312,5388,5424,5460,5535,5572,5652,5689,5771,5808, + 5845,5926,5942,5960,5979,5988,5991,6029,6114,6117,6120,6158,6254,6259, + 6263,6267,6279,6316,6319,6322,6329,6332,6350,6353,6368,6381,6392,6446, + 6468,6505,6590,6593,6598,6603,6614,6649,6685,6722,6727,6732,6743,6751, + 6757,6761,6764,6769,6862,6946,6951,6965,6985,6992,7001,7008,7011,7014, + 7017,7023,7033,7037,7047,7059,7093,7101,7105,7109,7125,7136,7147,7161, + 7172,7177,7188,7191,7211,7223,7228,7314,7400,7484,7502,7536,7541,7560, + 7565,7570,7573,7584,7604,7689,7723 +}; + + +static const unsigned short ag_sbe[] = { + 9, 43, 48, 57, 92, 94, 126, 131, 135, 173, 178, 185, 190, 203, + 208, 244, 356, 370, 408, 489, 537, 622, 639, 656, 673, 690, 707, 724, + 741, 758, 775, 792, 809, 826, 843, 848, 885, 892, 899, 906, 913, 920, + 933, 947, 989,1025,1080,1083,1086,1089,1092,1103,1108,1143,1243,1343, + 1441,1501,1511,1516,1550,1649,1718,1726,1738,1750,1787,1883,1983,2090, + 2110,2119,2130,2137,2173,2270,2324,2327,2330,2366,2401,2487,2522,2607, + 2644,2682,2721,2755,2791,2819,2847,2875,2903,2938,3013,3056,3105,3145, + 3182,3196,3240,3289,3296,3300,3304,3309,3314,3354,3392,3417,3470,3569, + 3668,3735,3738,3742,3779,3814,3868,3904,3939,3972,4065,4120,4131,4136, + 4161,4185,4190,4225,4295,4320,4348,4359,4366,4371,4380,4388,4393,4397, + 4408,4422,4431,4465,4550,4606,4611,4614,4622,4633,4667,4704,4716,4750, + 4788,4801,4835,4874,4908,4911,4913,4919,4936,4982,5018,5054,5088,5164, + 5200,5236,5272,5308,5342,5420,5456,5490,5568,5603,5685,5720,5804,5841, + 5876,5939,5956,5974,5984,5989,6025,6060,6115,6118,6154,6190,6256,6260, + 6264,6274,6298,6317,6320,6325,6330,6339,6351,6364,6377,6388,6442,6463, + 6501,6536,6591,6596,6601,6612,6646,6681,6717,6724,6729,6736,6746,6753, + 6758,6762,6766,6801,6893,6948,6956,6974,6988,6997,7004,7009,7012,7015, + 7019,7026,7034,7044,7050,7074,7097,7104,7108,7113,7132,7143,7152,7168, + 7174,7181,7189,7207,7218,7225,7259,7345,7431,7491,7517,7538,7550,7562, + 7567,7571,7580,7600,7635,7704,7723 +}; + + +static const unsigned char ag_fl[] = { + 2,1,1,2,0,1,3,3,1,1,1,1,1,1,3,1,1,4,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,2,3,4,1,5,2,3,2,4,1,1,1,1,3,1,1,1,2,1,1,1,3,3,2,1,1,1,1,2, + 3,4,2,3,4,3,2,3,1,2,3,1,1,1,3,1,1,5,5,6,1,1,1,3,3,1,2,3,2,2,3,3,3,1,1, + 1,3,4,4,1,1,1,1,2,1,2,3,5,1,1,2,3,1,3,2,4,2,4,4,1,1,2,1,3,1,3,1,3,1,2, + 1,1,1,1,3,1,1,3,2,3,2,1,1,1,1,1,3,1,1,1,1,1,1,1,0,1,0,1,0,1,0,1,0,1,0, + 1,0,1,0,1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,3,3,4,6,1,1,1,1,1,1,1, + 1,1,1,2,2,3,3,4,2,1,3,1,1,4,3,3,3,1,3,2,1,2,1,1,1,3,1,1,1,1,1,1,1,3,1, + 2,1,1,1,1,2,2,2,1,2,1,1,4,1,3,1,3,1,2,2,2,3,1,3,1,1,0,1,2,2,2,1,2,2,2, + 1,2,2,2,1,2,2,2,1,2,2,2,1,2,1,2,2,2,1,2,1,1,1,2,0,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,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,2,2,2,2,2,2,2,2,2,2 +}; + +static const unsigned short ag_ptt[] = { + 0, 58, 65, 65, 66, 66, 58, 68, 72, 72, 72, 72, 75, 76, 76, 78, 78, 81, + 86, 86, 88, 88, 88, 88, 88, 88, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 95, 96, 89, 89, 99,100, 57, 57,104,104,109,109,110,111, + 111,113,113,116,116,117,117,120,120,114,121,122,122,122,122,123,123,127, + 124,124,130,131,134,135,128,128, 79, 84, 84, 70, 70,118,118,138,142,139, + 108,148,149,149,150,151,151, 90,152,153,105, 80,156,157,159,160,160,161, + 161,331,331,331,331,166,168,125,125,169,172,137,137,173, 82,175,176,176, + 176,176,178,179,179,179,133,133,180,180,183,183,182,182,185,185,185,188, + 188,189,143,143,190,190,192,192, 91, 91, 91, 91,102,193,194,194,194, 92, + 288,288,197,197,171,171,144,144,198,198,136,136,167,167,199,199,201,201, + 141,141,141,146,146,181,181,204,204,204,204,206,206,206,206,206,200,200, + 115,115,115,115,207,202,184,184,184,184,184,184, 93, 93,212,212,126,126, + 126,126,214, 98, 98,158, 97,186,205,191,215, 77, 77,170,107,107,216,216, + 106,210,217,218,213,213,119,119,119,187,147,147,220,220,220,129,129,211, + 203,203,203,203,203,219,221,221,140,140,132,132,132,132,132,174,174,145, + 145,222,222,222,222,163,226,226,226,162,229,229,229,165,232,232,232,164, + 235,235,235,196,236,236,239,239,237,237,266,266,246,246,247,247,248,248, + 287, 73, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,224,224,224,231,231, + 234,234,234,234,234,234,234,238,238,241,241,241,241,241,241,241,242,242, + 242,242,242,242,242,242,242,242,242,242,244,244,244,244,244,244,244,244, + 244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244, + 244,244,256,256,257,257, 71, 69, 35, 41, 74, 2, 85, 83, 60, 87, 1, 7, + 11, 16, 26, 29, 34, 39, 42, 45, 46, 49, 50, 55, 6, 8, 10, 20, 17, 61, + 59, 12,112, 13, 14, 9, 15, 54, 3, 18, 19, 31, 24, 53, 23, 25,154, 52, + 27,155, 28, 30, 33,177, 4, 38, 36,195, 21, 44, 40, 56, 47, 43, 22,208, + 32,209, 37, 51, 48, 5,240,101 +}; + + +static void ag_ra(void) +{ + switch(ag_rpx[(PCB).ag_ap]) { + case 1: ag_rp_1(); break; + case 2: ag_rp_2(); break; + case 3: ag_rp_3(); break; + case 4: ag_rp_4(); break; + case 5: ag_rp_5(); break; + case 6: ag_rp_6(); break; + case 7: ag_rp_7(); break; + } +} + +#define TOKEN_NAMES plm_token_names +const char *const plm_token_names[332] = { + "compilation", + "ADDRESS", + "AND", + "ASSIGN_OP", + "AT", + "BASED", + "BY", + "BYTE", + "CALL", + "CASE", + "CAUSE_INTERRUPT", + "CHARINT", + "DATA", + "DECLARE", + "DISABLE", + "DO", + "DWORD", + "ELSE", + "ENABLE", + "END", + "EOF_KW", + "EXTERNAL", + "GE", + "GO", + "GOTO", + "HALT", + "HWORD", + "IF", + "INITIAL_KW", + "INTEGER", + "INTERRUPT", + "LABEL", + "LE", + "LITERALLY", + "LONGINT", + "MINUS", + "MOD", + "NE", + "NOT", + "OFFSET", + "OR", + "PLUS", + "POINTER", + "PROCEDURE", + "PUBLIC", + "QWORD", + "REAL", + "REENTRANT", + "RETURN", + "SELECTOR", + "SHORTINT", + "STRUCTURE", + "THEN", + "TO", + "WHILE", + "WORD", + "XOR", + "compilation", + "white space", + "numeric_constant", + "IDENTIFIER", + "STRING", + "", + "\"/*\"", + "", + "", + "", + "\"*/\"", + "actual_parameters", + "LPAREN", + "expression_list", + "RPAREN", + "adding_operator", + "MINUS_SIGN", + "PLUS_SIGN", + "and_operator", + "arithmetic_expression", + "term", + "array_specifier", + "explicit_dimension", + "implicit_dimension", + "assignment_statement", + "left_part", + "EQ", + "expression", + "SEMI", + "base_specifier", + "DOT", + "basic_statement", + "call_statement", + "goto_statement", + "microprocessor_dependent_statement", + "null_statement", + "return_statement", + "basic_type", + "bound_expression", + "by_part", + "step_expression", + "simple_variable", + "cast_type", + "cause_interrupt_statement", + "integer_constant", + "module", + "eof", + "conditional_clause", + "if_condition", + "true_unit", + "true_element", + "false_element", + "constant", + "constant_attribute", + "constant_list", + "COMMA", + "declaration", + "declare_statement", + "procedure_definition", + "declaration_sequence", + "declare_element", + "factored_element", + "unfactored_element", + "declare_element_list", + "disable_statement", + "do_block", + "do_case_block", + "do_while_block", + "iterative_do_block", + "simple_do_block", + "do_case_statement", + "ending", + "unit_sequence", + "do_while_statement", + "embedded_assignment", + "variable_reference", + "logical_expression", + "enable_statement", + "end_statement", + "opt_identifier", + "label_definition_sequence", + "factored_label_element", + "factored_variable_element", + "variable_name_specifier_list", + "opt_public_or_external", + "factored_member", + "member_name_list", + "opt_explicit_dimension", + "variable_type", + "opt_variable_attributes", + "unit", + "formal_parameter", + "formal_parameter_list", + "formal_parameter_specifier", + "go_to", + "halt_statement", + "id_colon", + "COLON", + "STAR", + "index_part", + "index_variable", + "start_expression", + "initial_value", + "initial_value_list", + "initialization", + "binary number", + "decimal number", + "hex number", + "octal number", + "interrupt", + "opt_interrupt_number", + "interrupt_number", + "iterative_do_statement", + "to_part", + "opt_by_part", + "label_definition", + "label_element", + "variable_reference_list", + "literal_element", + "location_reference", + "AT_SIGN", + "locator", + "locator_initialization", + "logical_factor", + "or_operator", + "logical_secondary", + "logical_primary", + "relation_operator", + "member_element", + "structure_type", + "unfactored_member", + "member_element_list", + "member_name", + "member_specifier", + "subscript", + "member_specifier_sequence", + "module_name", + "multiplying_operator", + "SLASH", + "floating point number", + "opt_array_specifier", + "opt_formal_parameter_specifier", + "opt_procedure_attribute_sequence", + "procedure_attribute_sequence", + "opt_procedure_type", + "procedure_type", + "variable_attributes", + "primary", + "subexpression", + "procedure_attribute", + "procedure_statement", + "GT", + "LT", + "typed_return", + "untyped_return", + "secondary", + "unary_sign", + "simple_do_statement", + "subscript_or_actual_parameters", + "true_statement", + "unary_minus", + "unary_plus", + "variable_element", + "unit_element", + "variable_name_specifier", + "decimal number tail", + "'d'", + "", + "'$'", + "binary number tail", + "", + "", + "octal number tail", + "", + "", + "hex number tail", + "", + "", + "floating point number tail", + "fraction part", + "exponent", + "", + "", + "'-'", + "", + "", + "'\\''", + "", + "\"\\'\\'\"", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "RPAREN", + "LPAREN", + "MINUS", + "PLUS", + "PLUS_SIGN", + "AND", + "SEMI", + "EQ", + "IDENTIFIER", + "DOT", + "ADDRESS", + "BYTE", + "CHARINT", + "DWORD", + "HWORD", + "INTEGER", + "LONGINT", + "OFFSET", + "POINTER", + "QWORD", + "REAL", + "SELECTOR", + "SHORTINT", + "WORD", + "BY", + "CALL", + "CAUSE_INTERRUPT", + "EOF_KW", + "ELSE", + "STRING", + "numeric_constant", + "DATA", + "COMMA", + "DECLARE", + "DISABLE", + "CASE", + "DO", + "WHILE", + "ASSIGN_OP", + "ENABLE", + "END", + "LABEL", + "GOTO", + "TO", + "GO", + "HALT", + "COLON", + "THEN", + "IF", + "STAR", + "INITIAL_KW", + "INTERRUPT", + "LITERALLY", + "AT_SIGN", + "AT", + "NOT", + "MOD", + "SLASH", + "EXTERNAL", + "PUBLIC", + "OR", + "XOR", + "REENTRANT", + "PROCEDURE", + "GE", + "GT", + "LE", + "LT", + "NE", + "STRUCTURE", + "RETURN", + "BASED", + "'-'", + "integer_constant", + +}; + +#ifndef MISSING_FORMAT +#define MISSING_FORMAT "Missing %s" +#endif +#ifndef UNEXPECTED_FORMAT +#define UNEXPECTED_FORMAT "Unexpected %s" +#endif +#ifndef UNNAMED_TOKEN +#define UNNAMED_TOKEN "input" +#endif + + +static void ag_diagnose(void) { + int ag_snd = (PCB).sn; + int ag_k = ag_sbt[ag_snd]; + + if (*TOKEN_NAMES[ag_tstt[ag_k]] && ag_astt[ag_k + 1] == ag_action_8) { + sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]); + } + else if (ag_astt[ag_sbe[(PCB).sn]] == ag_action_8 + && (ag_k = (int) ag_sbe[(PCB).sn] + 1) == (int) ag_sbt[(PCB).sn+1] - 1 + && *TOKEN_NAMES[ag_tstt[ag_k]]) { + sprintf((PCB).ag_msg, MISSING_FORMAT, TOKEN_NAMES[ag_tstt[ag_k]]); + } + else if ((PCB).token_number && *TOKEN_NAMES[(PCB).token_number]) { + sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, TOKEN_NAMES[(PCB).token_number]); + } + else if (isprint((*(PCB).lab)) && (*(PCB).lab) != '\\') { + char buf[20]; + sprintf(buf, "\'%c\'", (char) (*(PCB).lab)); + sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, buf); + } + else sprintf((PCB).ag_msg, UNEXPECTED_FORMAT, UNNAMED_TOKEN); + (PCB).error_message = (PCB).ag_msg; + + +} +static int ag_action_1_r_proc(void); +static int ag_action_2_r_proc(void); +static int ag_action_3_r_proc(void); +static int ag_action_4_r_proc(void); +static int ag_action_1_s_proc(void); +static int ag_action_3_s_proc(void); +static int ag_action_1_proc(void); +static int ag_action_2_proc(void); +static int ag_action_3_proc(void); +static int ag_action_4_proc(void); +static int ag_action_5_proc(void); +static int ag_action_6_proc(void); +static int ag_action_7_proc(void); +static int ag_action_8_proc(void); +static int ag_action_9_proc(void); +static int ag_action_10_proc(void); +static int ag_action_11_proc(void); +static int ag_action_8_proc(void); + + +static int (*const ag_r_procs_scan[])(void) = { + ag_action_1_r_proc, + ag_action_2_r_proc, + ag_action_3_r_proc, + ag_action_4_r_proc +}; + +static int (*const ag_s_procs_scan[])(void) = { + ag_action_1_s_proc, + ag_action_2_r_proc, + ag_action_3_s_proc, + ag_action_4_r_proc +}; + +static int (*const ag_gt_procs_scan[])(void) = { + ag_action_1_proc, + ag_action_2_proc, + ag_action_3_proc, + ag_action_4_proc, + ag_action_5_proc, + ag_action_6_proc, + ag_action_7_proc, + ag_action_8_proc, + ag_action_9_proc, + ag_action_10_proc, + ag_action_11_proc, + ag_action_8_proc +}; + + +static int ag_action_10_proc(void) { + int ag_t = (PCB).token_number; + (PCB).btsx = 0, (PCB).drt = -1; + do { + ag_track(); + if ((PCB).rx < (PCB).fx) { + (PCB).input_code = (PCB).lab[(PCB).rx++]; + (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code);} + else { + GET_INPUT; + (PCB).lab[(PCB).fx++] = (PCB).input_code; + (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code); + (PCB).rx++; + } + if (ag_key_index[(PCB).sn]) { + unsigned ag_k = ag_key_index[(PCB).sn]; + int ag_ch = CONVERT_CASE((PCB).input_code); + 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 == (plm_token_type) ag_t); + (PCB).rx = 0; + return 1; +} + +static int ag_action_11_proc(void) { + int ag_t = (PCB).token_number; + + (PCB).btsx = 0, (PCB).drt = -1; + do { + (PCB).vs[(PCB).ssx] = *(PCB).lab; + (PCB).ssx--; + ag_track(); + ag_ra(); + if ((PCB).exit_flag != AG_RUNNING_CODE) return 0; + (PCB).ssx++; + if ((PCB).rx < (PCB).fx) { + (PCB).input_code = (PCB).lab[(PCB).rx++]; + (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code);} + else { + GET_INPUT; + (PCB).lab[(PCB).fx++] = (PCB).input_code; + (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code); + (PCB).rx++; + } + if (ag_key_index[(PCB).sn]) { + unsigned ag_k = ag_key_index[(PCB).sn]; + int ag_ch = CONVERT_CASE((PCB).input_code); + 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 == (plm_token_type) ag_t); + (PCB).rx = 0; + 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 = (plm_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 = (plm_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 = (plm_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; + } + (PCB).vs[(PCB).ssx] = *(PCB).lab; + (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).rx = 0; + 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).rx = 0; + (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 = (plm_token_type) ag_ptt[(PCB).ag_ap]; + (PCB).btsx = 0, (PCB).drt = -1; + (PCB).vs[(PCB).ssx] = *(PCB).lab; + 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 short)(PCB).reduction_token) ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + (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; + (PCB).vs[(PCB).ssx] = *(PCB).lab; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else (PCB).ss[(PCB).ssx] = (PCB).sn; + ag_track(); + (PCB).reduction_token = (plm_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 short)(PCB).reduction_token) ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + (PCB).ag_ap = ag_pstt[ag_t1]; + if ((ag_s_procs_scan[ag_astt[ag_t1]])() == 0) break; + } + return 0; +} + +static int ag_action_8_proc(void) { + ag_undo(); + (PCB).rx = 0; + (PCB).exit_flag = AG_SYNTAX_ERROR_CODE; + ag_diagnose(); + SYNTAX_ERROR; + {(PCB).rx = 1; ag_track();} + return (PCB).exit_flag == AG_RUNNING_CODE; +} + +static int ag_action_5_proc(void) { + int ag_sd = ag_fl[(PCB).ag_ap]; + (PCB).btsx = 0, (PCB).drt = -1; + if (ag_sd) (PCB).sn = (PCB).ss[(PCB).ssx -= ag_sd]; + else { + (PCB).ss[(PCB).ssx] = (PCB).sn; + } + (PCB).rx = 0; + (PCB).reduction_token = (plm_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 short)(PCB).reduction_token) ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + (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 = (plm_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).rx = 0; + 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 short)(PCB).reduction_token) ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + (PCB).ag_ap = ag_pstt[ag_t1]; + if ((ag_r_procs_scan[ag_astt[ag_t1]])() == 0) break; + } + return (PCB).exit_flag == AG_RUNNING_CODE; +} + + +void init_plm(void) { + (PCB).rx = (PCB).fx = 0; + (PCB).ss[0] = (PCB).sn = (PCB).ssx = 0; + (PCB).exit_flag = AG_RUNNING_CODE; + (PCB).line = FIRST_LINE; + (PCB).column = FIRST_COLUMN; + (PCB).btsx = 0, (PCB).drt = -1; +} + +void plm(void) { + init_plm(); + (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; + if ((PCB).rx < (PCB).fx) { + (PCB).input_code = (PCB).lab[(PCB).rx++]; + (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code);} + else { + GET_INPUT; + (PCB).lab[(PCB).fx++] = (PCB).input_code; + (PCB).token_number = (plm_token_type) AG_TCV((PCB).input_code); + (PCB).rx++; + } + if (ag_key_index[(PCB).sn]) { + unsigned ag_k = ag_key_index[(PCB).sn]; + int ag_ch = CONVERT_CASE((PCB).input_code); + 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 short)(PCB).token_number) + ag_t1 = ag_tx + 1; + else ag_t2 = ag_tx; + } while (ag_t1 < ag_t2); + if (ag_tstt[ag_t1] != (unsigned short)(PCB).token_number) + ag_t1 = ag_sbe[(PCB).sn]; + } + (PCB).ag_ap = ag_pstt[ag_t1]; + (ag_gt_procs_scan[ag_astt[ag_t1]])(); + } +} + +