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]])();
+  }
+}
+
+