Merge commit 'v4.3.16'
[xboard.git] / winboard / parser.c
1 /* A lexical scanner generated by flex */
2
3 /* Scanner skeleton version:
4  * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
5  */
6
7 #define FLEX_SCANNER
8 #define YY_FLEX_MAJOR_VERSION 2
9 #define YY_FLEX_MINOR_VERSION 5
10
11 #include <stdio.h>
12 #include <errno.h>
13
14 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
15 #ifdef c_plusplus
16 #ifndef __cplusplus
17 #define __cplusplus
18 #endif
19 #endif
20
21
22 #ifdef __cplusplus
23
24 #include <stdlib.h>
25 #ifndef _WIN32
26 #include <unistd.h>
27 #endif
28
29 /* Use prototypes in function declarations. */
30 #define YY_USE_PROTOS
31
32 /* The "const" storage-class-modifier is valid. */
33 #define YY_USE_CONST
34
35 #else   /* ! __cplusplus */
36
37 #if __STDC__
38
39 #define YY_USE_PROTOS
40 #define YY_USE_CONST
41
42 #endif  /* __STDC__ */
43 #endif  /* ! __cplusplus */
44
45 #ifdef __TURBOC__
46  #pragma warn -rch
47  #pragma warn -use
48 #include <io.h>
49 #include <stdlib.h>
50 #define YY_USE_CONST
51 #define YY_USE_PROTOS
52 #endif
53
54 #ifdef YY_USE_CONST
55 #define yyconst const
56 #else
57 #define yyconst
58 #endif
59
60
61 #ifdef YY_USE_PROTOS
62 #define YY_PROTO(proto) proto
63 #else
64 #define YY_PROTO(proto) ()
65 #endif
66
67
68 /* Returned upon end-of-file. */
69 #define YY_NULL 0
70
71 /* Promotes a possibly negative, possibly signed char to an unsigned
72  * integer for use as an array index.  If the signed char is negative,
73  * we want to instead treat it as an 8-bit unsigned char, hence the
74  * double cast.
75  */
76 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
77
78 /* Enter a start condition.  This macro really ought to take a parameter,
79  * but we do it the disgusting crufty way forced on us by the ()-less
80  * definition of BEGIN.
81  */
82 #define BEGIN yy_start = 1 + 2 *
83
84 /* Translate the current start state into a value that can be later handed
85  * to BEGIN to return to the state.  The YYSTATE alias is for lex
86  * compatibility.
87  */
88 #define YY_START ((yy_start - 1) / 2)
89 #define YYSTATE YY_START
90
91 /* Action number for EOF rule of a given start state. */
92 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
93
94 /* Special action meaning "start processing a new file". */
95 #define YY_NEW_FILE yyrestart( yyin )
96
97 #define YY_END_OF_BUFFER_CHAR 0
98
99 /* Size of default input buffer. */
100 #define YY_BUF_SIZE 16384
101
102 typedef struct yy_buffer_state *YY_BUFFER_STATE;
103
104 extern int yyleng;
105 extern FILE *yyin, *yyout;
106
107 #define EOB_ACT_CONTINUE_SCAN 0
108 #define EOB_ACT_END_OF_FILE 1
109 #define EOB_ACT_LAST_MATCH 2
110
111 /* The funky do-while in the following #define is used to turn the definition
112  * int a single C statement (which needs a semi-colon terminator).  This
113  * avoids problems with code like:
114  *
115  *      if ( condition_holds )
116  *              yyless( 5 );
117  *      else
118  *              do_something_else();
119  *
120  * Prior to using the do-while the compiler would get upset at the
121  * "else" because it interpreted the "if" statement as being all
122  * done when it reached the ';' after the yyless() call.
123  */
124
125 /* Return all but the first 'n' matched characters back to the input stream. */
126
127 #define yyless(n) \
128         do \
129                 { \
130                 /* Undo effects of setting up yytext. */ \
131                 *yy_cp = yy_hold_char; \
132                 YY_RESTORE_YY_MORE_OFFSET \
133                 yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
134                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \
135                 } \
136         while ( 0 )
137
138 #define unput(c) yyunput( c, yytext_ptr )
139
140 /* The following is because we cannot portably get our hands on size_t
141  * (without autoconf's help, which isn't available because we want
142  * flex-generated scanners to compile on their own).
143  */
144 typedef unsigned int yy_size_t;
145
146
147 struct yy_buffer_state
148         {
149         FILE *yy_input_file;
150
151         char *yy_ch_buf;                /* input buffer */
152         char *yy_buf_pos;               /* current position in input buffer */
153
154         /* Size of input buffer in bytes, not including room for EOB
155          * characters.
156          */
157         yy_size_t yy_buf_size;
158
159         /* Number of characters read into yy_ch_buf, not including EOB
160          * characters.
161          */
162         int yy_n_chars;
163
164         /* Whether we "own" the buffer - i.e., we know we created it,
165          * and can realloc() it to grow it, and should free() it to
166          * delete it.
167          */
168         int yy_is_our_buffer;
169
170         /* Whether this is an "interactive" input source; if so, and
171          * if we're using stdio for input, then we want to use getc()
172          * instead of fread(), to make sure we stop fetching input after
173          * each newline.
174          */
175         int yy_is_interactive;
176
177         /* Whether we're considered to be at the beginning of a line.
178          * If so, '^' rules will be active on the next match, otherwise
179          * not.
180          */
181         int yy_at_bol;
182
183         /* Whether to try to fill the input buffer when we reach the
184          * end of it.
185          */
186         int yy_fill_buffer;
187
188         int yy_buffer_status;
189 #define YY_BUFFER_NEW 0
190 #define YY_BUFFER_NORMAL 1
191         /* When an EOF's been seen but there's still some text to process
192          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
193          * shouldn't try reading from the input source any more.  We might
194          * still have a bunch of tokens to match, though, because of
195          * possible backing-up.
196          *
197          * When we actually see the EOF, we change the status to "new"
198          * (via yyrestart()), so that the user can continue scanning by
199          * just pointing yyin at a new input file.
200          */
201 #define YY_BUFFER_EOF_PENDING 2
202         };
203
204 static YY_BUFFER_STATE yy_current_buffer = 0;
205
206 /* We provide macros for accessing buffer states in case in the
207  * future we want to put the buffer states in a more general
208  * "scanner state".
209  */
210 #define YY_CURRENT_BUFFER yy_current_buffer
211
212
213 /* yy_hold_char holds the character lost when yytext is formed. */
214 static char yy_hold_char;
215
216 static int yy_n_chars;          /* number of characters read into yy_ch_buf */
217
218
219 int yyleng;
220
221 /* Points to current character in buffer. */
222 static char *yy_c_buf_p = (char *) 0;
223 static int yy_init = 1;         /* whether we need to initialize */
224 static int yy_start = 0;        /* start state number */
225
226 /* Flag which is used to allow yywrap()'s to do buffer switches
227  * instead of setting up a fresh yyin.  A bit of a hack ...
228  */
229 static int yy_did_buffer_switch_on_eof;
230
231 void yyrestart YY_PROTO(( FILE *input_file ));
232
233 void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
234 void yy_load_buffer_state YY_PROTO(( void ));
235 YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
236 void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
237 void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
238 void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
239 #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
240
241 YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
242 YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
243 YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
244
245 static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
246 static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
247 static void yy_flex_free YY_PROTO(( void * ));
248
249 #define yy_new_buffer yy_create_buffer
250
251 #define yy_set_interactive(is_interactive) \
252         { \
253         if ( ! yy_current_buffer ) \
254                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
255         yy_current_buffer->yy_is_interactive = is_interactive; \
256         }
257
258 #define yy_set_bol(at_bol) \
259         { \
260         if ( ! yy_current_buffer ) \
261                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
262         yy_current_buffer->yy_at_bol = at_bol; \
263         }
264
265 #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
266
267
268 #define YY_USES_REJECT
269 typedef unsigned char YY_CHAR;
270 FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
271 typedef int yy_state_type;
272 extern char *yytext;
273 #define yytext_ptr yytext
274
275 static yy_state_type yy_get_previous_state YY_PROTO(( void ));
276 static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
277 static int yy_get_next_buffer YY_PROTO(( void ));
278 static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
279
280 /* Done after the current pattern has been matched and before the
281  * corresponding action - sets up yytext.
282  */
283 #define YY_DO_BEFORE_ACTION \
284         yytext_ptr = yy_bp; \
285         yyleng = (int) (yy_cp - yy_bp); \
286         yy_hold_char = *yy_cp; \
287         *yy_cp = '\0'; \
288         yy_c_buf_p = yy_cp;
289
290 #define YY_NUM_RULES 42
291 #define YY_END_OF_BUFFER 43
292 static yyconst short int yy_acclist[650] =
293     {   0,
294        43,   41,   42,   41,   42,   41,   42,   40,   41,   42,
295        41,   42,   25,   41,   42,   41,   42,   40,   41,   42,
296        40,   41,   42,16410,   40,   41,   42,16410,   41,   42,
297        40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
298        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
299        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
300        40,   41,   42,   41,   42,   40,   41,   42,   40,   41,
301        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
302        40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
303        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
304
305        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
306        40,   41,   42,   40,   41,   42,   41,   42,   41,   42,
307        40,   41,   42,   40,   41,   42,   40,   41,   42,16410,
308        40,   41,   42,16410,   41,   42,   40,   41,   42,   40,
309        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
310        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
311        40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
312        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
313        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
314        40,   41,   42,   40,   41,   42,   40,   41,   42,   40,
315
316        41,   42,   40,   41,   42,   40,   41,   42,   40,   41,
317        42,   40,   41,   42,   40,   41,   42,   40,   41,   42,
318        41,   42,   33,   40,   17,   40,    9,   40,   40,   40,
319     16410, 8218,   40,   35,   40,   40,   40,   40,   40,   40,
320        40,   40,   40,   40,   40,    9,   40,   40,   40,   40,
321        40,   40,   36,   40,    3,   40,   40,    4,   40,   40,
322        40,   40,   40,   40,    9,   40,   40,   40,   34,   40,
323        40,    9,   40,   40,   40,16410, 8218,   40,   40,   40,
324        40,   40,   40,   40,   40,   40,   40,   40,   40,    9,
325        40,   40,   40,   40,   40,   40,   40,    3,   40,   40,
326
327         4,   40,   40,   40,   40,   40,   40,    9,   40,   40,
328        40,   15,    9,   40,   23,   40,   23,    8,   40, 8218,
329        22,   40,   22,   24,   40,   40,   40,    6,   40,   40,
330        40,   40,   40,   40,   40,    9,   40,   40,   40,   40,
331        20,   40,    4,   40,   40,    3,    3,   40,    3,   40,
332        40,    4,    5,   40,    4,    4,   40,   40,   40,   40,
333         9,   40,   40,   34,   39,    9,   40,   23,   40,    8,
334        40,   22,   40,   35,   40,   40,   40,    6,   40,   40,
335        40,   40,   40,   40,   40,    9,   40,   40,   40,   40,
336        20,   40,    4,   40,   40,    3,   40,    3,   40,   40,
337
338         5,   40,    4,   40,   40,   40,   40,    9,   40,   40,
339        38,   38,   37,   25,   25,    6,   40,   10,    6,   40,
340         7,   40,    6,   40,    6,   40,   40,   40,   19,   40,
341        40,   21,   40,   16,   40,   40,   40,   40,   40,   20,
342        20,   40,   20,   40,   36,    3,    3,    2,   40,    5,
343         4,    5,    5,   40,   40,    4,    4,   40,   40,   25,
344        39,   40,    6,   40,    7,   40,   40,   40,   40,   40,
345        19,   40,   40,   21,   40,   16,   40,   40,   40,   40,
346        40,   20,   40,   20,   20,   40,    2,   40,    5,   40,
347        40,    4,   40,   40,    7,    7,    1,   40,   40,   40,
348
349        19,   40,   40,   40,   21,   21,   40,   21,   40,   40,
350        40,   40,   30,   36,    2,    2,    2,   40,    5,    5,
351         5,   40,   39,    1,   40,   40,   40,   19,   40,   40,
352        40,   21,   40,   21,   21,   40,   40,   40,   40,   20,
353        39,    2,   40,    5,   40,   27,   38,    1,   23,   23,
354        22,   22,   24,   24,    1,    1,   40,   20,   21,   40,
355        40,   40,   11,   40,   40,   28,   36,   30,    2,    2,
356        27,   34,   39,   39,    1,   40,   40,   40,   40,   21,
357        39,   11,   40,   40,   20,   39,   18,    1,   24,    1,
358        20,   21,   19,   40,   40,   40,   11,   40,   40,   40,
359
360        40,   21,   39,   40,   11,   40,   40,   12,   40,   40,
361        40,   40,   12,   40,   40,   14,   40,   40,   40,   14,
362        40,   40,   40,   39,   40,   40,   40,   40,   39,   39,
363        40,   40,   31,   40,   39,   39,   31,   40,   13,   31,
364        32,   32,   35,   39,   39,   31,   39,   34,   29
365     } ;
366
367 static yyconst short int yy_accept[698] =
368     {   0,
369         1,    1,    1,    2,    4,    6,    8,   11,   13,   16,
370        18,   21,   25,   29,   31,   34,   37,   40,   43,   46,
371        49,   52,   55,   58,   61,   64,   66,   69,   72,   75,
372        78,   81,   84,   87,   90,   93,   96,   99,  102,  105,
373       108,  111,  114,  117,  119,  121,  124,  127,  131,  135,
374       137,  140,  143,  146,  149,  152,  155,  158,  161,  164,
375       167,  170,  173,  176,  179,  182,  185,  188,  191,  194,
376       197,  200,  203,  206,  209,  212,  215,  218,  221,  223,
377       223,  224,  225,  225,  225,  225,  225,  226,  226,  226,
378       226,  227,  227,  229,  229,  229,  229,  230,  230,  230,
379
380       232,  232,  234,  234,  235,  235,  236,  236,  237,  237,
381       238,  238,  239,  240,  241,  242,  243,  244,  245,  246,
382       248,  249,  250,  251,  252,  253,  253,  253,  253,  253,
383       254,  255,  257,  257,  258,  260,  261,  262,  263,  264,
384       265,  267,  268,  269,  269,  269,  269,  270,  270,  271,
385       271,  272,  274,  274,  275,  277,  277,  279,  279,  280,
386       281,  281,  282,  283,  284,  285,  286,  287,  288,  289,
387       290,  292,  293,  294,  295,  296,  297,  298,  300,  300,
388       301,  303,  304,  305,  306,  307,  308,  310,  311,  312,
389       312,  312,  312,  312,  312,  312,  312,  312,  312,  312,
390
391       312,  313,  313,  313,  313,  313,  313,  315,  317,  318,
392       320,  321,  321,  321,  321,  323,  324,  325,  325,  326,
393       326,  327,  327,  328,  328,  330,  330,  330,  330,  330,
394       331,  332,  333,  334,  335,  336,  338,  339,  340,  341,
395       343,  343,  343,  343,  343,  345,  345,  346,  346,  347,
396       349,  351,  352,  353,  353,  355,  356,  358,  359,  360,
397       361,  363,  364,  365,  365,  365,  365,  365,  366,  368,
398       370,  372,  374,  374,  375,  375,  376,  377,  377,  378,
399       380,  381,  382,  383,  384,  385,  386,  388,  389,  390,
400       391,  393,  395,  396,  396,  398,  400,  401,  403,  405,
401
402       406,  407,  408,  410,  411,  411,  411,  412,  413,  413,
403       413,  414,  414,  414,  415,  415,  416,  416,  417,  417,
404       417,  417,  418,  418,  418,  418,  418,  418,  418,  418,
405       419,  421,  421,  423,  424,  425,  425,  426,  427,  427,
406       427,  427,  427,  428,  429,  431,  431,  432,  434,  436,
407       437,  438,  439,  440,  441,  443,  445,  445,  445,  445,
408       445,  446,  447,  447,  448,  450,  451,  452,  452,  452,
409       453,  455,  456,  457,  457,  459,  460,  460,  461,  461,
410       461,  461,  461,  462,  462,  463,  463,  463,  465,  467,
411       468,  468,  469,  470,  471,  473,  474,  476,  478,  479,
412
413       480,  481,  482,  484,  485,  487,  489,  491,  492,  494,
414       495,  495,  495,  495,  495,  496,  496,  496,  496,  496,
415       496,  496,  496,  496,  496,  497,  499,  499,  499,  499,
416       499,  500,  501,  501,  503,  503,  504,  505,  506,  508,
417       510,  511,  512,  513,  513,  513,  515,  515,  515,  516,
418       516,  517,  519,  520,  520,  521,  521,  523,  523,  523,
419       523,  523,  523,  523,  523,  524,  524,  524,  526,  527,
420       528,  530,  531,  532,  534,  535,  537,  538,  539,  540,
421       542,  544,  546,  546,  546,  548,  548,  549,  549,  550,
422       550,  551,  551,  552,  552,  553,  553,  554,  554,  555,
423
424       555,  555,  555,  556,  558,  558,  558,  560,  560,  561,
425       561,  561,  561,  561,  561,  562,  563,  565,  566,  568,
426       568,  569,  570,  571,  571,  571,  573,  573,  573,  574,
427       575,  575,  575,  577,  578,  579,  580,  582,  584,  585,
428       587,  587,  588,  588,  588,  589,  589,  590,  591,  591,
429       591,  591,  593,  593,  593,  594,  594,  594,  594,  594,
430       595,  596,  597,  599,  600,  600,  600,  600,  600,  600,
431       601,  602,  604,  605,  607,  608,  608,  608,  608,  608,
432       608,  608,  609,  609,  609,  609,  609,  610,  611,  611,
433       611,  611,  611,  612,  613,  613,  613,  613,  613,  614,
434
435       614,  614,  614,  615,  616,  618,  618,  618,  618,  618,
436       619,  619,  620,  622,  622,  622,  622,  622,  623,  624,
437       624,  624,  624,  624,  625,  626,  627,  627,  627,  627,
438       627,  627,  628,  629,  629,  629,  629,  629,  630,  631,
439       632,  633,  633,  633,  633,  633,  633,  635,  635,  635,
440       635,  635,  636,  637,  639,  639,  639,  640,  640,  641,
441       641,  642,  642,  642,  644,  644,  645,  646,  646,  646,
442       646,  646,  648,  648,  648,  648,  648,  648,  648,  648,
443       648,  648,  648,  648,  648,  648,  648,  648,  648,  648,
444       648,  648,  648,  648,  649,  650,  650
445
446     } ;
447
448 static yyconst int yy_ec[256] =
449     {   0,
450         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
451         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
452         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
453         1,    4,    1,    5,    6,    7,    8,    1,    9,   10,
454        11,   12,   13,    1,   14,   15,   16,   17,   18,   19,
455        20,   20,   20,   20,   20,   20,   20,   21,   22,    1,
456        23,    1,    1,   24,   25,   26,   27,   28,   29,   30,
457        31,   32,   33,   33,   34,   35,   36,   37,   38,   34,
458        34,   39,   40,   33,   41,   33,   42,   43,   33,   33,
459        44,    1,   45,    1,   46,    1,   47,   48,   49,   50,
460
461        51,   52,   53,   54,   55,   56,   57,   58,   59,   60,
462        61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
463        71,   68,   72,    1,   73,    1,    1,    1,    1,    1,
464         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
465         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
466         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
467         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
468         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
469         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
470         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
471
472         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
473         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
474         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
475         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
476         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
477         1,    1,    1,    1,    1
478     } ;
479
480 static yyconst int yy_meta[74] =
481     {   0,
482         1,    2,    3,    2,    1,    1,    1,    1,    4,    5,
483         6,    1,    7,    8,    1,    1,    9,    9,    9,    9,
484        10,    1,   11,    1,   12,   12,   12,   12,   12,   12,
485        12,   12,   13,   12,   13,   13,   12,   12,   12,   13,
486        13,   12,   14,    1,    1,    1,   15,   15,   15,   15,
487        16,   15,   15,   15,   15,   15,   15,   15,   17,   18,
488        18,   18,   18,   18,   17,   17,   17,   17,   17,   19,
489        17,    1,    1
490     } ;
491
492 static yyconst short int yy_base[784] =
493     {   0,
494         0,   73, 2729, 4517,  122,  131,    0,  142, 2724,  140,
495       151,  171,  162, 2724,  231,  159, 2672, 2661,  119, 2660,
496      2673,  143, 2668, 2652,  211,  301,  361,  212,  209,  279,
497       243,  284,  301,  286,  221,  303,  309,  329, 2670,  239,
498      2665, 2649,  338,  403, 2710,  149,  380,  475,  348,  190,
499       538,  240, 2659, 2648,  236, 2650, 2663,  157, 2658, 2642,
500       379,  600,  314,  353,  377,  395,  401,  413,  382,  408,
501       513,  424,  516,  423,  562,  448,  544,  607,  612, 2654,
502       468,    0, 2696,  309,  617,  174, 4517, 2692,  672,  246,
503       353, 2686, 2686, 2680,  517,  661, 2680,  576,  280,  655,
504
505      2679,    0, 2692, 4517,    0,  696,    0,  741,    0,  580,
506       644,  586,  622, 2645, 2640, 2592, 2592,  692, 2617, 2616,
507       714, 2606,  680,  720, 2592, 2606,  811,  537,  884, 4517,
508       911,  961,    0,  986, 1035,  687,  753,  757, 2584, 2588,
509      2587, 2582, 2591,  318, 2568,  825, 2636, 2635,  430, 2634,
510       747,  820,  253,  830, 1085,  160,  563,  455, 1148, 1193,
511      2633,  784,  843,  850,  760,  603,  692,  844,  854, 2596,
512       657,  858,  893,  862,  893,  658, 1217, 1267, 2629, 1292,
513      1342,  913,  926, 1157,  831,  894,  915,  918,  895,  845,
514      2568,  464,  487,  538, 2620,  556, 1162, 1073, 2619, 2556,
515
516      4517, 1146, 1209, 2624, 2623, 2622, 2611, 2620, 2619,    0,
517      4517, 2618, 2616, 2615, 2614, 2613,  384, 1029, 1062, 1078,
518      1367, 1147, 1145, 1167, 1412, 2558, 2551, 2564, 2559, 1240,
519      1422, 2540,  756,  651, 2557, 2593, 2551, 2547, 1214, 1482,
520       722, 1208,  761, 1555, 1619,    0, 1624,    0, 2594, 2592,
521      2591, 1174, 1426, 1490, 1673, 2591, 2589,  560, 2550, 2549,
522      2583, 2530, 4517, 1499, 1039, 2591,  725, 2587,  928,  845,
523       592,  917,  642, 2585, 1156, 1503, 1716, 2584, 1516, 1761,
524      1531, 1564, 1470, 1565, 1464, 1429, 1580, 1490, 1566, 1598,
525      1831, 1896, 1901, 2583, 1582, 2573, 1613, 1950, 1587, 1676,
526
527      1588, 1614, 1581, 1149, 1539, 2528, 4517,  775,  799, 2562,
528      4517, 1709, 2557, 2556, 2493, 2492, 1202, 1709, 2546, 2545,
529      2544, 2544,  615, 2543,  744, 2542, 1099, 1674,  832, 4517,
530      2535, 1719, 2534, 2533, 1955, 1622, 4517, 1410, 2490, 2490,
531      2487, 2487, 2494, 2493,  778,  892,  920, 2013,    0, 2511,
532      2495, 2496, 2495,    0, 2086, 2159,  940, 1210, 1233, 1309,
533      2540, 2533, 1434, 4517, 1776, 1424, 2529,  910, 1615, 1616,
534      2528, 1173, 4517, 2476,    0, 2476, 1842, 2532, 1727, 1735,
535      2488, 2473, 2530, 1003, 1736,  904,  599, 1216, 1523, 2186,
536      2528, 1847, 1726, 1767, 1880, 1771, 2244, 1522, 1813, 1849,
537
538      1848, 1862, 2317, 2527, 2390, 2029, 1869, 1879, 1713, 2021,
539      1747, 2479, 2517, 1595, 2500, 1809, 2511, 2443, 2504, 2441,
540      2500, 2433, 2460, 1869, 4517, 2454, 2427, 2423, 2423, 2418,
541      2468, 1049, 2006, 2467, 1075, 2440, 2410,    0, 2497, 2570,
542      2400, 2394, 2448, 1341, 1756, 4517, 2446, 1803, 1343, 1491,
543      1768, 2439, 2438, 1416, 4517, 2386,    0, 2425, 1871, 2421,
544      1240, 2416, 2373, 2366, 1454, 1718, 1473, 2635, 1888, 2044,
545      1889, 2042, 2023, 2678, 2425, 1990, 1886, 2052, 2063, 2425,
546      1870, 1899, 1958, 1000, 4517, 2095, 1777, 2416, 2415, 2351,
547      2350, 2411, 2410, 2347, 2346, 2407, 2406, 2343, 2342, 2393,
548
549      2388, 1840, 2017, 2382, 2320, 2326, 2011, 2298, 2303, 2338,
550      2296, 2275, 2316, 2293, 2302, 2270, 2018, 2264, 4517, 2117,
551      4517, 2296, 4517, 2290, 2119, 2300, 2251, 2231, 2282, 1960,
552      1445,  289, 2107, 2108, 2114, 2068, 2281, 2125, 2131, 2280,
553      2139, 4517, 2227, 2176, 2262, 2267, 2258, 4517, 2187, 2173,
554      2177, 4517, 2166, 2214, 2211, 2157, 2198, 2148, 2103, 2111,
555      2085, 2098,    0, 2077, 2196, 2071, 2002,  827, 1575, 2168,
556      2135, 2063, 2170, 2136, 2164, 2203, 2000, 2014, 1683, 1939,
557      1931, 2030, 1944, 1630, 1954, 1906, 2751, 1919, 1917, 1913,
558      1385, 1565, 2824, 2249, 2204, 1850, 1863, 1832, 4517, 1806,
559
560      1637, 1912, 2897, 1920,    0, 1775, 1762, 1585,  945, 2970,
561      2096, 1949, 2188, 2207, 1772, 1743, 2250, 1745, 1677, 1563,
562      1551, 1686,  681, 2260, 1568, 1502, 2258, 1408, 1406, 2243,
563      2170, 1358, 1313, 1240, 1258, 1751, 1127, 2261, 2312, 1072,
564       926, 2279, 2133,  809, 1969, 2073,    0,  855,  705,  711,
565      1429, 2317, 2305,    0, 2284,  631, 4517,  546, 2094,  480,
566      4517,  413,  392, 4517, 1794, 2351, 2357, 2298,  325,  206,
567      1884, 2303, 2352,  203, 1915,  365, 2138, 2221, 2364, 2365,
568      2369, 2370, 2371, 2372, 2373, 2427, 2444, 2451, 2452, 2453,
569      2454, 2456, 2296,  179, 4517, 4517, 3040, 3059, 3072, 3086,
570
571      3105, 3124, 3140, 3159, 3178, 3196, 1267, 1342, 1671, 3214,
572      3233, 1702, 3252, 3271, 3290, 3309, 3328, 3347, 3366, 3385,
573      3404, 3416, 3435, 3454, 3473, 3492, 3511, 3519, 1896, 3529,
574      3545, 3564, 3580, 3599, 3618, 3637, 3656, 3675, 3694, 3713,
575      3732, 3744, 3763, 3782, 3801, 3820, 3839, 3858, 3877, 3893,
576      3908, 3924, 3943, 3962, 3981, 3997, 4016, 4035, 4054, 4073,
577      4092, 4111, 4130, 4149, 4168, 4187, 4206, 4225, 4244, 4259,
578      4278, 4297, 4316, 4331, 4345, 4364, 4383, 4402, 4421, 4440,
579      4459, 4478, 4497
580     } ;
581
582 static yyconst short int yy_def[784] =
583     {   0,
584       696,  696,  696,  696,  696,  696,  697,  698,  696,  699,
585       697,  696,   12,  700,  697,   15,   15,   15,   15,   15,
586        15,   15,   15,   15,   15,  701,  697,   27,   27,   27,
587        27,   27,   27,   27,   27,   27,   27,   27,  697,  697,
588       697,  697,  697,  702,  696,  703,  703,  696,   48,  700,
589       703,   51,   51,   51,   51,   51,   51,   51,   51,   51,
590        51,  703,   62,   62,   62,   62,   62,   62,   62,   62,
591        62,   62,   62,  703,  703,  703,  703,  703,  702,  696,
592       696,  697,  704,  705,  704,  696,  696,  696,  696,  696,
593       697,  696,  697,  696,  706,  706,  697,  706,  696,   12,
594
595       696,  697,  700,  696,  707,  697,  708,  697,  709,  108,
596       696,  108,  108,  697,  697,  697,  697,  108,  106,  697,
597       108,  697,  108,  108,  697,  710,  701,  710,  711,  696,
598       697,  696,  712,  697,  697,  697,  697,  697,  697,  697,
599       697,  697,  697,  702,  713,  702,  696,  714,  703,  696,
600       703,  703,  696,  703,  696,  696,  703,  715,  703,  159,
601       709,  160,  160,  160,  703,  703,  703,  703,  160,  159,
602       703,  160,  703,  160,  160,  703,  159,  696,  712,  159,
603       696,  703,  703,  703,  703,  703,  703,  703,  703,  702,
604       696,  716,  717,  717,  718,  719,  716,  716,  720,  721,
605
606       696,  722,  722,  696,  696,  696,  697,  697,  696,  697,
607       696,  696,  696,  696,  697,  696,  696,  696,  697,  696,
608       697,  722,  697,  696,  697,  696,  696,  696,  696,  697,
609       697,  697,  697,  697,  697,  697,  697,  697,  697,  723,
610       724,  725,  726,  727,  697,  728,  697,  729,  728,  697,
611       247,  697,  730,  730,  697,  254,  697,  697,  697,  697,
612       697,  697,  696,  702,  696,  731,  696,  732,  733,  733,
613       733,  733,  734,  731,  735,  733,  733,  222,  733,  277,
614       733,  733,  733,  733,  733,  733,  733,  733,  733,  733,
615       736,  733,  277,  729,  733,  293,  733,  292,  733,  733,
616
617       733,  733,  733,  733,  702,  696,  696,  737,  737,  738,
618       696,  739,  740,  740,  741,  741,  696,  742,  696,  696,
619       696,  697,  696,  696,  696,  696,  696,  696,  696,  696,
620       697,  742,  697,  696,  697,  332,  696,  697,  696,  696,
621       696,  696,  697,  697,  697,  696,  697,  743,  697,  697,
622       697,  697,  697,  744,  745,  745,  746,  746,  747,  748,
623       749,  696,  696,  696,  750,  751,  696,  696,  751,  751,
624       697,  697,  696,  696,  697,  697,  702,  696,  696,  696,
625       696,  696,  752,  696,  733,  753,  753,  733,  733,  293,
626       336,  733,  733,  733,  733,  733,  754,  733,  733,  733,
627
628       733,  733,  755,  744,  755,  756,  733,  733,  733,  733,
629       702,  696,  757,  758,  696,  696,  759,  760,  761,  762,
630       763,  764,  696,  696,  696,  697,  696,  696,  696,  696,
631       697,  697,  696,  697,  696,  697,  697,  765,  766,  766,
632       697,  697,  697,  767,  768,  696,  769,  696,  770,  770,
633       770,  697,  696,  696,  696,  696,  697,  696,  702,  696,
634       696,  696,  696,  696,  771,  772,  772,  733,  733,  733,
635       733,  733,  733,  754,  765,  474,  733,  733,  733,  773,
636       733,  733,  702,  696,  696,  758,  774,  759,  759,  760,
637       760,  761,  761,  762,  762,  763,  763,  764,  764,  696,
638
639       696,  774,  774,  697,  696,  696,  696,  696,  697,  775,
640       696,  696,  696,  696,  697,  697,  697,  697,  696,  696,
641       696,  696,  696,  696,  702,  696,  696,  696,  771,  771,
642       772,  772,  733,  733,  733,  733,  776,  733,  733,  773,
643       702,  696,  696,  758,  696,  696,  696,  696,  696,  696,
644       696,  696,  696,  775,  775,  696,  696,  696,  696,  697,
645       697,  697,  697,  697,  702,  696,  696,  772,  772,  733,
646       733,  776,  733,  733,  733,  702,  696,  696,  696,  696,
647       696,  696,  696,  696,  696,  696,  777,  697,  696,  696,
648       772,  772,  778,  733,  702,  696,  696,  696,  696,  696,
649
650       779,  779,  777,  603,  697,  696,  696,  772,  772,  778,
651       779,  610,  733,  702,  696,  696,  779,  603,  603,  696,
652       696,  772,  772,  780,  610,  610,  702,  696,  696,  779,
653       779,  603,  603,  696,  696,  772,  772,  780,  780,  610,
654       610,  702,  696,  696,  779,  779,  603,  781,  696,  782,
655       772,  780,  780,  610,  702,  696,  696,  696,  779,  781,
656       696,  696,  782,  696,  772,  780,  780,  702,  696,  696,
657       772,  780,  702,  696,  772,  702,  783,  783,  783,  783,
658       783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
659       783,  783,  783,  696,  696,    0,  696,  696,  696,  696,
660
661       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
662       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
663       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
664       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
665       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
666       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
667       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
668       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
669       696,  696,  696
670     } ;
671
672 static yyconst short int yy_nxt[4591] =
673     {   0,
674         4,    4,    4,    5,    4,    4,    6,    4,    7,    8,
675         4,    9,   10,    7,    4,    4,   11,   12,   13,   13,
676         4,   14,    4,    4,   15,   16,   17,   18,   15,   15,
677        19,   15,   15,   15,   20,   21,   15,   22,   23,   24,
678        15,   25,   15,   26,    4,    4,   27,   28,   29,   30,
679        31,   32,   33,   34,   35,   36,   37,   38,   39,    7,
680        40,    7,    7,   41,   42,    7,    7,    7,   43,    7,
681         7,   44,    4,    4,    4,    4,    5,    4,   45,    6,
682        45,    7,    8,    4,    9,   10,   46,    4,    4,   47,
683        48,   49,   49,    4,   50,    4,    4,   51,   52,   53,
684
685        54,   51,   51,   55,   51,   51,   51,   56,   57,   51,
686        58,   59,   60,   51,   61,   51,   26,    4,    4,   62,
687        63,   64,   65,   66,   67,   68,   69,   70,   71,   72,
688        73,   74,   46,   75,   46,   46,   76,   77,   46,   46,
689        46,   78,   46,   46,   79,    4,   80,   81,   81,   81,
690        81,   84,   87,   88,   90,  115,  119,   82,   85,   85,
691        85,   85,  111,  268,   91,   95,   92,   93,   80,  150,
692       170,   94,   95,   95,   96,   82,  216,  696,  116,   82,
693       120,  695,  696,  199,   97,   98,   99,  100,  100,  100,
694       100,  101,  104,  158,  171,  102,  102,  102,  102,  102,
695
696       102,  102,  102,   82,  102,   82,   82,  102,  102,  102,
697        82,   82,  102,   82,  111,  111,  112,  102,  102,  102,
698       102,  102,  102,  102,  102,  102,  102,  102,  102,   82,
699       102,  102,  102,  102,  102,   82,   82,   82,   82,   82,
700        82,   82,  105,  111,  106,  200,  107,  108,  108,  108,
701       108,  109,  140,  648,  105,  136,  268,  135,  135,  204,
702       135,  205,  138,  674,  123,  124,  206,  136,  136,  137,
703       209,  125,  166,  106,  135,  135,  135,  110,  110,  110,
704       110,  110,  110,  110,  110,  110,  110,  110,  110,  136,
705       136,  104,  135,  135,  135,  167,  216,  163,  217,  141,
706
707       106,  126,  127,  127,  127,  126,  126,  126,  126,  126,
708       126,  126,  126,  126,  128,  126,  126,  111,  195,  196,
709       145,  126,  126,  126,  126,  136,  136,  135,  135,  135,
710       136,  136,  136,  136,  135,  135,  135,  115,  135,  135,
711       135,  111,  114,  569,  126,  130,  126,  136,  136,  136,
712       136,   95,  135,  135,  135,  136,  136,  135,  135,  135,
713       116,  149,  181,  696,  135,  135,  135,  677,  150,  207,
714       208,  183,  126,  126,  131,  136,  136,  132,  132,  132,
715       132,  133,  111,   90,  542,  135,  135,  328,   82,  117,
716       147,  143,  125,  151,  664,   92,  152,  329,  125,  182,
717
718       153,  181,  181,  134,  329,  145,  184,  135,  135,  136,
719       136,  136,  136,  136,  136,  136,  136,  136,  136,  146,
720       146,  146,  146,  182,  182,  181,  181,  181,  182,  182,
721       134,   82,  174,  175,  181,  181,  181,  147,   82,  176,
722       165,  182,  182,  150,  181,  181,  181,  182,  182,  166,
723       150,  181,  181,  181,  182,  182,   82,  274,  275,  182,
724       182,  181,  181,  181,  181,  181,  181,  670,  150,  185,
725       182,  182,  167,  193,  307,  147,   95,   95,   96,  181,
726       181,  181,  661,   82,   81,   81,   81,   81,  154,   98,
727        99,  155,  155,  155,  155,  156,  195,  308,  188,  157,
728
729       157,  157,  157,  157,  157,  157,  157,  149,  157,  149,
730       149,  157,  157,  157,  149,  149,  157,  149,   95,   95,
731        95,  157,  157,  157,  157,  157,  157,  157,  157,  157,
732       157,  157,  157,  149,  157,  157,  157,  157,  157,  149,
733       149,  149,  149,  149,  149,  149,   82,  195,  308,  105,
734       241,  159,   82,  107,  160,  160,  160,  160,  161,  182,
735       182,  105,  182,  182,  150,  310,  311,  181,  181,  181,
736        82,   82,  181,  181,  374,  186,  168,   95,   95,   95,
737       159,  130,  150,  150,  162,  162,  162,  162,  162,  162,
738       162,  162,  162,  162,  162,  162,  225,  225,  225,  225,
739
740        82,  104,  225,  225,  225,  225,  669,  159,   82,  173,
741       111,   82,  150,  177,  145,   82,  178,  178,  178,  178,
742       179,  375,  187,  150,  417,  190,  193,  150,  146,  146,
743       146,  146,  230,  197,  197,  197,  197,  198,  225,  225,
744       225,  225,  180,  284,  274,  275,  181,  181,  182,  182,
745       182,  182,  182,  182,  182,  182,  182,  182,   95,  467,
746       189,  176,   95,   95,   95,   82,   82,  176,   82,  180,
747       696,  226,  231,  227,  212,  696,  213,  150,  150,  228,
748       657,  214,  229,  104,  147,  109,  418,  107,  202,  202,
749       202,  202,  109,  226,  271,  227,  225,  225,  225,  225,
750
751        82,  348,  228,  255,  255,  255,  255,  229,  225,  225,
752       225,  225,  150,  664,  109,  348,  348,  291,  203,  203,
753       203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
754       225,  225,  225,  225,  239,  358,  225,  225,  225,  225,
755       637,  109,  219,  219,  219,  219,  219,  219,  219,  219,
756       219,  219,  219,  219,  221,   82,  662,  235,  284,  346,
757       216,  222,  217,  269,  270,  360,  130,  150,   82,  255,
758       255,  255,  255,  255,  255,  255,  255,  381,  237,  240,
759       150,  433,  347,  221,  310,  311,  382,  223,  223,  223,
760       223,  223,  223,  223,  223,  223,  223,  223,  223,  259,
761
762       280,  280,  280,  280,  347,  361,  283,  260,  310,  311,
763       221,  126,  127,  127,  127,  126,  126,  126,  126,  126,
764       126,  126,  126,  126,  126,  126,  126,  145,   82,  104,
765       591,  126,  126,  126,  126,  423,  271,  434,   82,   82,
766       150,  146,  146,  146,  146,  264,  272,  145,  323,  424,
767       150,  150,   82,   82,  126,  130,  126,  661,  305,  280,
768       280,  280,  280,  658,  150,  150,  280,  280,  280,  280,
769       280,  280,  280,  280,  280,  280,  280,  280,  280,  280,
770       280,  280,  126,  126,  126,  242,  242,  242,  243,  281,
771       126,  126,  126,  126,  126,  126,  286,  147,  126,  126,
772
773       282,   82,   82,   82,  126,  126,  104,  126,  285,  280,
774       280,  280,  280,  150,  150,  150,  290,  147,  435,  286,
775       327,   82,  288,   82,  374,   82,   82,  126,  130,  298,
776       298,  298,  298,  150,   82,  150,   82,  150,  150,  289,
777       435,  385,  298,  298,  298,  298,  150,  104,  150,  304,
778       466,  436,  291,  358,  303,  126,  126,  245,  245,  245,
779       245,  245,  245,  245,  245,  245,  245,  245,  245,   82,
780       246,  373,  301,  437,  247,  271,  654,   82,   82,   82,
781        82,  248,  288,  249,  130,  250,  250,  250,  250,  250,
782       250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
783
784       250,  250,  250,  251,  465,  623,  465,  252,  252,  252,
785       252,  252,  252,  252,  252,  252,  252,  252,  252,   82,
786        82,   82,   82,   82,   82,   82,   82,   82,   82,   82,
787       247,   82,  135,  135,  135,  135,  135,  135,  135,  135,
788       135,  135,  135,  135,  254,  330,  330,  330,  330,  542,
789       378,  255,  255,  255,  255,  379,  380,  256,  543,  257,
790       257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
791       257,  257,  257,  257,  257,  257,  257,  257,  331,  331,
792       331,  331,  193,  307,  509,  258,   95,   95,   95,  312,
793       312,  312,  312,   82,  332,  332,  332,  332,  149,   98,
794
795       654,  155,  155,  155,  155,  150,  513,  509,  419,  157,
796       157,  157,  157,  157,  157,  157,  157,  149,  157,  149,
797       149,  157,  157,  157,  149,  149,  157,  149,  514,  104,
798       651,  157,  157,  157,  157,  157,  157,  157,  157,  157,
799       157,  157,  157,  149,  157,  157,  157,  157,  157,  149,
800       149,  149,  149,  149,  149,  149,   82,   82,  104,  222,
801       696,  333,  333,  333,  333,   82,  222,  696,  150,  150,
802       420,  193,  307,  298,  298,  298,  298,  150,  197,  197,
803       197,  197,  198,  334,  334,  334,  334,  456,  222,  696,
804       365,  365,  365,  365,  276,  276,  276,  276,  276,  276,
805
806       276,  276,  276,  276,  276,  276,  277,  302,  386,  242,
807       242,  242,  243,  278,  402,  222,  696,  387,  415,  415,
808       415,  415,  222,  444,   82,  318,  318,  318,  318,  222,
809       333,  333,  333,  333,  457,  277,  150,  360,  337,  279,
810       279,  279,  279,  279,  279,  279,  279,  279,  279,  279,
811       279,  222,  130,  212,  130,  213,  333,  333,  333,  333,
812       214,  649,  277,  292,  292,  292,  292,  292,  292,  292,
813       292,  292,  292,  292,  292,   82,  246,  361,  222,  353,
814       293,  218,  218,  149,  149,  149,  149,  294,  343,  249,
815       648,  295,  295,  295,  295,  295,  295,  295,  295,  295,
816
817       295,  295,  295,  295,  295,  295,  295,  295,  295,  296,
818       445,  445,  445,  297,  297,  297,  297,  297,  297,  297,
819       297,  297,  297,  297,  297,  149,  149,  149,  149,  149,
820       149,  149,  149,  149,  149,  149,  293,  149,  181,  181,
821       181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
822        82,  254,  450,  446,  444,  149,  220,  220,  298,  298,
823       298,  298,  150,  647,  256,  451,  299,  299,  299,  299,
824       299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
825       299,  299,  299,  299,  299,  519,  647,  104,  149,  149,
826       149,  149,  300,  149,  149,  149,  149,  149,  149,  149,
827
828       149,  149,  149,  149,  149,  149,  149,  149,  149,  149,
829       149,  149,  149,  223,  223,  223,  223,  223,  223,  223,
830       223,  223,  223,  223,  223,  335,  426,  426,  426,  426,
831       456,  104,  336,  369,  337,  254,  608,   82,  333,  333,
832       333,  333,  366,  366,  366,  366,  370,  104,  256,  150,
833       449,  449,  449,  449,  335,  530,  384,  530,  338,  338,
834       338,  338,  338,  338,  338,  338,  338,  338,  338,  338,
835       344,  644,   82,  643,  454,  104,  368,  455,   82,  398,
836       665,  335,  354,  354,  150,  354,  354,  354,  354,  354,
837       150,  354,  354,  354,  354,  568,  354,  354,   82,  696,
838
839       696,  145,  354,  354,  354,  354,  696,  696,  696,  696,
840       150,   82,  696,  696,  397,  377,  377,  377,  377,  388,
841       388,  388,  388,  150,   82,  354,  354,  354,  397,  397,
842        82,   82,  389,  389,  389,  389,  150,  532,  395,   82,
843       696,  145,  150,  150,  400,  425,  356,  389,  389,  389,
844       389,  150,  411,  354,  354,  126,  242,  242,  242,  243,
845       641,  126,  126,  126,  126,  126,  126,  104,  346,  126,
846       126,  147,   82,   82,   82,  126,  126,  104,  126,  393,
847       389,  389,  389,  389,  150,  150,  150,  104,   82,   82,
848        82,  396,  364,  399,  410,   82,   82,  373,  126,  130,
849
850       150,  150,  150,  640,  193,  485,   82,  150,  150,  486,
851       635,  147,  394,  396,  389,  389,  389,  389,  150,  609,
852       634,   82,   82,  401,  696,  369,  126,  126,  254,  406,
853       406,  406,  406,  150,  150,  696,  393,  696,  696,  622,
854       592,  256,  696,  257,  257,  257,  257,  257,  257,  257,
855       257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
856       257,  257,  394,  402,  696,  696,  696,  617,  511,  258,
857       252,  252,  252,  252,  252,  252,  252,  252,  252,  252,
858       252,  252,  369,  421,   82,  224,  224,  329,  104,  617,
859       374,  696,  421,  511,  329,  370,  150,  371,  371,  371,
860
861       371,  371,  371,  371,  371,  371,  371,  371,  371,  371,
862       371,  371,  371,  371,  371,  371,  253,  253,  193,  307,
863       104,   82,  336,  372,   82,  414,  414,  414,  414,  336,
864        90,  337,  336,  150,   82,  633,  150,  409,  461,  336,
865       460,  696,   92,  636,   82,  422,  150,   94,  462,  145,
866        99,  336,  271,  104,  422,  101,  150,  445,  445,  445,
867       483,  336,  279,  279,  279,  279,  279,  279,  279,  279,
868       279,  279,  279,  279,  390,   82,  531,  450,  336,   82,
869       632,  391,  469,  337,   82,  450,  502,  150,  336,   82,
870       696,  150,   82,   82,   82,   82,  104,  629,  451,  503,
871
872       446,  650,  472,  390,  520,  520,  520,  392,  392,  392,
873       392,  392,  392,  392,  392,  392,  392,  392,  392,  147,
874       628,   82,  621,  470,  473,  487,  487,  487,  487,  620,
875       390,  354,  354,  150,  354,  354,  354,  354,  354,  355,
876       354,  354,  354,  354,  145,  354,  354,  521,  671,  696,
877       271,  404,  354,  354,  354,   82,   82,   82,  459,  459,
878       459,  459,  696,  468,  468,  468,  468,  150,  150,  150,
879        82,  616,  500,  145,  354,  354,  354,   82,   82,  455,
880       523,  599,  150,  433,  501,  525,  104,   82,   82,  150,
881       150,  111,  433,  456,   82,  405,   82,   82,  478,  150,
882
883       150,  477,  354,  354,   82,  254,  150,   82,  150,  150,
884       363,  363,  479,  615,  147,  542,  150,  104,  256,  150,
885       299,  299,  299,  299,  299,  299,  299,  299,  299,  299,
886       299,  299,  299,  299,  299,  299,  299,  299,  299,  471,
887       482,  675,  617,  526,  618,  538,  300,  297,  297,  297,
888       297,  297,  297,  297,  297,  297,  297,  297,  297,  369,
889       145,  530,  384,  530,  617,  650,  619,  607,  606,  605,
890       601,  541,  370,  625,  407,  407,  407,  407,  407,  407,
891       407,  407,  407,  407,  407,  407,  407,  407,  407,  407,
892       407,  407,  407,  601,  600,  626,  582,  659,  597,  617,
893
894       408,  338,  338,  338,  338,  338,  338,  338,  338,  338,
895       338,  338,  338,  438,  438,  510,  438,  438,  438,  438,
896       438,  617,  438,  438,  438,  438,  502,  438,  438,   82,
897       147,   82,  547,  438,  438,  438,  438,   82,  450,  696,
898       476,  150,  149,  150,  511,  149,  149,  149,  149,  150,
899        82,  451,   82,  512,  476,  476,  438,  438,  438,  596,
900        82,  551,  150,  440,  150,  384,  111,  590,  562,  511,
901       535,   82,  150,  536,  589,  552,   82,  440,  440,  534,
902       598,  271,  563,  150,  438,  438,  354,  354,  150,  354,
903       354,  354,  354,  354,  599,  354,  354,  354,  354,  624,
904
905       354,  354,  534,  617,  193,  307,  354,  354,  354,  354,
906       539,  544,  544,  544,  544,   82,   82,  548,  520,  520,
907       520,  145,   82,  659,  617,  617,  617,  150,  150,  354,
908       354,  354,  571,   82,  150,  565,  565,  565,  565,   82,
909       679,  145,  588,   82,   82,  150,  617,  563,  617,  587,
910       587,  150,  576,  570,  185,  150,  150,  354,  354,  354,
911       354,  521,  354,  354,  354,  354,  354,  586,  354,  354,
912       354,  354,   82,  354,  354,  573,   82,  575,   82,  354,
913       354,  354,  354,  656,  150,  193,  485,  585,  150,  574,
914       150,  147,  544,  544,  544,  544,   82,  657,  145,  593,
915
916       617,  584,  354,  354,  354,  145,  145,  593,  150,  145,
917       263,  147,  565,  565,  565,  565,  595,  614,  583,  574,
918       627,  555,  617,  679,  555,  582,  552,  581,  646,  594,
919       354,  354,  392,  392,  392,  392,  392,  392,  392,  392,
920       392,  392,  392,  392,  438,  438,  580,  438,  438,  438,
921       438,  438,  439,  438,  438,  438,  438,   82,  438,  438,
922       145,  579,  384,  384,  475,  438,  438,  438,  526,  150,
923       578,  642,  548,  617,  630,  147,  147,  577,  645,  147,
924       617,  145,  384,  384,  384,  567,  145,  438,  438,  438,
925       639,  639,  655,  263,  476,  617,  631,  668,  679,  613,
926
927       145,  566,  617,  265,  455,  384,  523,  384,  476,  476,
928       564,  673,  639,  639,  384,  438,  438,  354,  354,  384,
929       354,  354,  354,  354,  354,  355,  354,  354,  354,  354,
930       147,  354,  354,  639,  561,  639,  652,  404,  354,  354,
931       354,  560,  639,  559,  558,  557,  556,  639,  555,  139,
932       553,  147,  666,  384,  145,  639,  147,  639,  653,  384,
933       354,  354,  354,  667,  639,  676,  679,  679,  694,  639,
934       147,  679,  679,  679,  679,  679,  550,  680,  681,  672,
935       549,  639,  682,  683,  684,  685,  686,  639,  354,  354,
936       354,  354,  548,  354,  354,  354,  354,  354,  355,  354,
937
938       354,  354,  354,  639,  354,  354,  547,  672,  546,  639,
939       404,  354,  354,  354,  499,  499,  497,  497,  495,  495,
940       493,  493,  491,  491,  147,  489,  489,  384,  537,  679,
941       528,  527,  216,  354,  354,  354,  263,  263,  209,  373,
942       687,  263,  263,  263,  263,  263,  679,  524,  455,  523,
943       448,  111,  518,  679,  679,  679,  679,  688,  679,  517,
944       516,  354,  354,  502,  689,  690,  691,  692,  515,  693,
945       433,  111,  508,  507,  506,  505,  503,  424,  504,  504,
946       504,  504,  504,  504,  504,  504,  504,  504,  504,  504,
947       504,  504,  504,  504,  504,  504,  504,  438,  438,  263,
948
949       438,  438,  438,  438,  438,  499,  438,  438,  438,  438,
950       497,  438,  438,  495,  493,  491,  263,  438,  438,  438,
951       438,  489,  425,  263,  263,  263,  263,  196,  263,  484,
952       480,  268,  384,  464,  463,   86,  210,  458,  455,  373,
953       438,  438,  438,  364,  448,  443,  442,  441,  210,  432,
954       431,  430,  429,  428,  427,  337,  425,  337,  216,  216,
955       210,  209,  209,  209,  316,  316,  314,  314,  438,  438,
956       438,  438,  196,  438,  438,  438,  438,  438,  412,  438,
957       438,  438,  438,  364,  438,  438,  268,  268,  267,  384,
958       438,  438,  438,  438,  267,  353,  376,  344,  343,  373,
959
960       254,  364,  364,  246,  352,  351,  350,  349,  345,  342,
961       341,  340,  339,  438,  438,  438,  327,  327,  326,  325,
962       440,  324,  323,  323,  322,  321,  320,  319,  316,  314,
963       307,  306,  268,  287,  440,  440,  268,  268,  267,  265,
964       263,  438,  438,   82,  502,  262,  237,  210,  261,  235,
965       130,  240,  238,  210,  236,  150,  234,  503,  233,  533,
966       533,  533,  533,  533,  533,  533,  533,  533,  533,  533,
967       533,  533,  533,  533,  533,  533,  533,  533,  438,  438,
968       233,  438,  438,  438,  438,  438,  439,  438,  438,  438,
969       438,  232,  438,  438,  104,  216,  215,  209,  475,  438,
970
971       438,  438,  210,  209,  201,  193,  191,  173,  172,  169,
972       168,  165,  164,  148,  122,  142,  139,  122,  121,  118,
973       117,  438,  438,  438,  114,  113,  104,   86,  696,  696,
974       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
975       696,  696,  696,  696,  696,  696,  696,  696,  696,  438,
976       438,  602,  602,  696,  602,  602,  602,  602,  602,  696,
977       602,  602,  602,  602,  696,  602,  602,  696,  696,  696,
978       696,  602,  602,  602,  602,  696,  696,  696,  696,  696,
979       696,  604,  696,  696,  696,  696,  696,  696,  696,  696,
980       696,  696,  696,  696,  602,  602,  602,  696,  696,  696,
981
982       696,  696,  696,  604,  696,  696,  696,  696,  696,  696,
983       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
984       696,  696,  602,  602,  602,  602,  696,  602,  602,  602,
985       602,  602,  603,  602,  602,  602,  602,  696,  602,  602,
986       696,  696,  696,  696,  611,  602,  602,  602,  696,  696,
987       696,  696,  696,  696,  612,  696,  696,  696,  696,  696,
988       696,  696,  696,  696,  696,  696,  696,  602,  602,  602,
989       696,  696,  696,  696,  696,  696,  612,  696,  696,  696,
990       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
991       696,  696,  696,  696,  696,  602,  602,  602,  602,  696,
992
993       602,  602,  602,  602,  602,  696,  602,  602,  602,  602,
994       696,  602,  602,  696,  696,  696,  696,  602,  602,  602,
995       602,  696,  696,  696,  696,  696,  696,  604,  696,  696,
996       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
997       602,  602,  602,  696,  696,  696,  696,  696,  696,  604,
998       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
999       696,  696,  696,  696,  696,  696,  696,  696,  602,  602,
1000       602,  602,  696,  602,  602,  602,  602,  602,  603,  602,
1001       602,  602,  602,  696,  602,  602,  696,  696,  696,  696,
1002       611,  602,  602,  602,  696,  696,  696,  696,  696,  696,
1003
1004       612,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1005       696,  696,  696,  602,  602,  602,  696,  696,  696,  696,
1006       696,  696,  612,  696,  696,  696,  696,  696,  696,  696,
1007       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1008       696,  602,  602,   82,  696,  696,  696,   82,   82,  696,
1009       696,   82,   82,   82,   82,   82,   82,   82,   82,   83,
1010        83,   83,   83,   83,  696,   83,   83,   83,   83,   83,
1011        83,   83,   83,   83,   83,   83,   83,   83,   89,   89,
1012       696,  696,  696,   89,   89,   89,  103,  103,  103,  103,
1013       103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
1014
1015       103,  103,  103,  103,  103,  129,  129,  129,  129,  129,
1016       129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
1017       129,  129,  129,  129,  144,  144,  144,  144,  144,  144,
1018       144,  144,  144,  144,  144,  144,  144,  144,  144,  144,
1019       144,  144,  144,  149,  696,  696,  696,  149,  149,  149,
1020       696,  149,  149,  149,  149,  149,  149,  149,  149,  192,
1021       192,  192,  192,  192,  696,  192,  192,  192,  192,  192,
1022       192,  192,  192,  192,  192,  192,  192,  192,  194,  194,
1023       194,  194,  194,  194,  194,  194,  194,  194,  194,  194,
1024       194,  194,  194,  194,  194,  194,  194,  211,  211,  696,
1025
1026       696,  696,  696,  696,  696,  696,  696,  211,  696,  696,
1027       211,  211,  696,  211,  126,  126,  126,  126,  126,  126,
1028       126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
1029       126,  126,  126,  244,  244,  244,  244,  244,  244,  244,
1030       244,  244,  244,  244,  244,  244,  244,  244,  244,  244,
1031       244,  244,  145,  145,  145,  145,  145,  145,  145,  145,
1032       145,  145,  145,  145,  145,  145,  145,  145,  145,  145,
1033       145,  266,  266,  266,  266,  266,  266,  266,  266,  266,
1034       266,  266,  266,  266,  266,  266,  266,  266,  266,  266,
1035       273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
1036
1037       273,  273,  273,  273,  273,  273,  273,  273,  273,  192,
1038       192,  192,  192,  192,  192,  192,  192,  192,  192,  192,
1039       192,  192,  192,  192,  192,  192,  192,  192,  194,  194,
1040       194,  194,  194,  194,  194,  194,  194,  194,  194,  194,
1041       194,  194,  194,  194,  194,  194,  194,  195,  195,  195,
1042       195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
1043       195,  195,  195,  195,  195,  195,  309,  309,  309,  309,
1044       309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
1045       309,  309,  309,  309,  309,  313,  313,  696,  313,  313,
1046       313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
1047
1048       313,  313,  313,  313,  315,  315,  696,  315,  315,  315,
1049       315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
1050       315,  315,  315,  317,  696,  317,  696,  696,  696,  317,
1051       317,  317,  696,  696,  317,  355,  355,  696,  355,  355,
1052       355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
1053       355,  355,  355,  355,  357,  357,  357,  357,  357,  357,
1054       357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
1055       357,  357,  357,  126,  126,  126,  126,  126,  126,  126,
1056       126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
1057       126,  126,  359,  359,  359,  359,  359,  359,  359,  359,
1058
1059       359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
1060       359,  244,  244,  244,  244,  244,  244,  244,  244,  244,
1061       244,  244,  244,  244,  244,  244,  244,  244,  244,  244,
1062       362,  362,  362,  367,  696,  696,  696,  367,  696,  367,
1063       367,  367,  367,  696,  367,  266,  266,  266,  266,  266,
1064       266,  266,  266,  266,  266,  266,  266,  266,  266,  266,
1065       266,  266,  266,  266,  383,  383,  383,  383,  383,  383,
1066       383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
1067       383,  383,  383,  149,  696,  696,  696,  149,  149,  149,
1068       696,  149,  149,  149,  149,  149,  149,  149,  149,  273,
1069
1070       273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
1071       273,  273,  273,  273,  273,  273,  273,  273,  103,  103,
1072       103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
1073       103,  103,  103,  103,  103,  103,  103,  403,  403,  696,
1074       403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
1075       403,  403,  403,  403,  403,  403,  309,  309,  309,  309,
1076       309,  309,  309,  309,  309,  309,  309,  309,  309,  309,
1077       309,  309,  309,  309,  309,  413,  413,  413,  413,  696,
1078       413,  413,  413,  413,  413,  413,  413,  413,  413,  413,
1079       413,  413,  413,  413,  192,  192,  192,  192,  192,  192,
1080
1081       192,  192,  192,  192,  192,  192,  192,  192,  192,  192,
1082       192,  192,  192,  313,  313,  696,  313,  313,  313,  313,
1083       313,  313,  313,  313,  313,  313,  313,  313,  313,  313,
1084       313,  313,  315,  315,  696,  315,  315,  315,  315,  315,
1085       315,  315,  315,  315,  315,  315,  315,  315,  315,  315,
1086       315,  416,  696,  416,  416,  696,  696,  416,  416,  416,
1087       696,  696,  416,  439,  439,  696,  439,  439,  439,  439,
1088       439,  439,  439,  439,  439,  439,  439,  439,  439,  439,
1089       439,  439,  354,  354,  696,  354,  354,  354,  354,  354,
1090       354,  354,  354,  354,  354,  354,  354,  354,  354,  354,
1091
1092       354,  355,  355,  696,  355,  355,  355,  355,  355,  355,
1093       355,  355,  355,  355,  355,  355,  355,  355,  355,  355,
1094       357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
1095       357,  357,  357,  357,  357,  357,  357,  357,  357,  359,
1096       359,  359,  359,  359,  359,  359,  359,  359,  359,  359,
1097       359,  359,  359,  359,  359,  359,  359,  359,  126,  126,
1098       126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
1099       126,  126,  126,  126,  126,  126,  126,  447,  447,  447,
1100       447,  447,  447,  447,  447,  447,  447,  447,  447,  447,
1101       447,  447,  447,  447,  447,  447,  452,  452,  696,  696,
1102
1103       452,  452,  696,  452,  452,  452,  452,  452,  452,  452,
1104       452,  452,  453,  696,  696,  696,  696,  696,  453,  453,
1105       453,  453,  696,  453,  383,  383,  383,  383,  383,  383,
1106       383,  383,  383,  383,  383,  383,  383,  383,  383,  383,
1107       383,  383,  383,  103,  103,  103,  103,  103,  103,  103,
1108       103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
1109       103,  103,  474,  474,  696,  474,  474,  474,  474,  474,
1110       474,  474,  474,  474,  474,  474,  474,  474,  474,  474,
1111       474,  403,  403,  696,  403,  403,  403,  403,  403,  403,
1112       403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
1113
1114       481,  481,  696,  696,  481,  481,  481,  481,  481,  481,
1115       481,  481,  481,  481,  481,  481,  413,  413,  413,  413,
1116       696,  413,  413,  413,  413,  413,  413,  413,  413,  413,
1117       413,  413,  413,  413,  413,  192,  192,  192,  192,  192,
1118       192,  192,  192,  192,  192,  192,  192,  192,  192,  192,
1119       192,  192,  192,  192,  488,  488,  696,  488,  488,  488,
1120       488,  488,  488,  488,  488,  488,  488,  488,  488,  488,
1121       488,  488,  488,  490,  490,  696,  490,  490,  490,  490,
1122       490,  490,  490,  490,  490,  490,  490,  490,  490,  490,
1123       490,  490,  492,  492,  696,  492,  492,  492,  492,  492,
1124
1125       492,  492,  492,  492,  492,  492,  492,  492,  492,  492,
1126       492,  494,  494,  696,  494,  494,  494,  494,  494,  494,
1127       494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
1128       496,  496,  696,  496,  496,  496,  496,  496,  496,  496,
1129       496,  496,  496,  496,  496,  496,  496,  496,  496,  498,
1130       498,  696,  498,  498,  498,  498,  498,  498,  498,  498,
1131       498,  498,  498,  498,  498,  498,  498,  498,  438,  438,
1132       696,  438,  438,  438,  438,  438,  438,  438,  438,  438,
1133       438,  438,  438,  438,  438,  438,  438,  439,  439,  696,
1134       439,  439,  439,  439,  439,  439,  439,  439,  439,  439,
1135
1136       439,  439,  439,  439,  439,  439,  357,  357,  357,  357,
1137       357,  357,  357,  357,  357,  357,  357,  357,  357,  357,
1138       357,  357,  357,  357,  357,  126,  126,  126,  126,  126,
1139       126,  126,  126,  126,  126,  126,  126,  126,  126,  126,
1140       126,  126,  126,  126,  447,  447,  447,  447,  447,  447,
1141       447,  447,  447,  447,  447,  447,  447,  447,  447,  447,
1142       447,  447,  447,  522,  696,  696,  696,  696,  696,  522,
1143       522,  522,  522,  522,  522,  522,  522,  522,  529,  529,
1144       529,  529,  529,  529,  529,  529,  529,  529,  529,  529,
1145       529,  529,  529,  529,  529,  529,  529,  103,  103,  103,
1146
1147       103,  103,  103,  103,  103,  103,  103,  103,  103,  103,
1148       103,  103,  103,  103,  103,  103,  540,  540,  540,  540,
1149       540,  540,  540,  540,  540,  540,  540,  540,  540,  540,
1150       540,  540,  540,  540,  540,  545,  696,  696,  696,  696,
1151       696,  545,  545,  545,  545,  554,  554,  696,  554,  554,
1152       554,  554,  554,  554,  554,  554,  554,  554,  554,  554,
1153       554,  554,  554,  554,  572,  572,  572,  572,  572,  572,
1154       572,  572,  572,  572,  572,  572,  572,  572,  572,  572,
1155       572,  572,  572,  603,  603,  696,  603,  603,  603,  603,
1156       603,  603,  603,  603,  603,  603,  603,  603,  603,  603,
1157
1158       603,  603,  610,  610,  696,  610,  610,  610,  610,  610,
1159       610,  610,  610,  610,  610,  610,  610,  610,  610,  610,
1160       610,  602,  602,  696,  602,  602,  602,  602,  602,  602,
1161       602,  602,  602,  602,  602,  602,  602,  602,  602,  602,
1162       638,  638,  638,  638,  638,  638,  638,  638,  638,  638,
1163       638,  638,  638,  638,  638,  638,  638,  638,  638,  660,
1164       660,  660,  660,  660,  660,  660,  660,  660,  660,  660,
1165       660,  660,  660,  660,  660,  660,  660,  660,  663,  663,
1166       663,  663,  663,  663,  663,  663,  663,  663,  663,  663,
1167       663,  663,  663,  663,  663,  663,  663,  678,  678,  678,
1168
1169       678,  678,  678,  678,  678,  678,  678,  678,  678,  678,
1170       678,  678,  678,  678,  678,  678,    3,  696,  696,  696,
1171       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1172       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1173       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1174       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1175       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1176       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1177       696,  696,  696,  696,  696,  696,  696,  696,  696,  696
1178     } ;
1179
1180 static yyconst short int yy_chk[4591] =
1181     {   0,
1182         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1183         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1184         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1185         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1186         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1187         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1188         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
1189         1,    1,    1,    2,    2,    2,    2,    2,    2,    2,
1190         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1191         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1192
1193         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1194         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1195         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1196         2,    2,    2,    2,    2,    2,    2,    2,    2,    2,
1197         2,    2,    2,    2,    2,    2,    5,    6,    6,    6,
1198         6,    8,   10,   10,   11,   19,   22,   46,    8,    8,
1199         8,    8,   16,  156,   11,   13,   11,   11,    5,   46,
1200        58,   11,   12,   12,   12,   13,  156,   13,   19,   12,
1201        22,  694,   13,   86,   12,   12,   12,   12,   12,   12,
1202        12,   12,   50,   50,   58,   12,   12,   12,   12,   12,
1203
1204        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
1205        12,   12,   12,   12,   25,   28,   16,   12,   12,   12,
1206        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
1207        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
1208        12,   12,   15,   52,   15,   86,   15,   15,   15,   15,
1209        15,   15,   40,  674,   15,   29,  153,   29,   29,   90,
1210        28,   90,   29,  670,   25,   25,   90,   35,   35,   28,
1211       153,   25,   55,   15,   35,   35,   35,   15,   15,   15,
1212        15,   15,   15,   15,   15,   15,   15,   15,   15,   31,
1213        31,  532,   31,   31,   31,   55,   99,   52,   99,   40,
1214
1215        15,   26,   26,   26,   26,   26,   26,   26,   26,   26,
1216        26,   26,   26,   26,   26,   26,   26,   63,   84,   84,
1217       144,   26,   26,   26,   26,   30,   30,   30,   30,   30,
1218        32,   32,   34,   34,   32,   32,   32,   33,   34,   34,
1219        34,   43,   30,  532,   26,   26,   26,   33,   33,   36,
1220        36,   49,   33,   33,   33,   37,   37,   36,   36,   36,
1221        33,   49,   63,   49,   37,   37,   37,  676,   49,   91,
1222        91,   63,   26,   26,   27,   38,   38,   27,   27,   27,
1223        27,   27,   61,   47,  669,   38,   38,  217,   47,   38,
1224       144,   43,   43,   47,  663,   47,   47,  217,   43,   64,
1225
1226        47,   64,   64,   27,  217,   44,   64,   27,   27,   27,
1227        27,   27,   27,   27,   27,   27,   27,   27,   27,   44,
1228        44,   44,   44,   65,   65,   65,   65,   65,   69,   69,
1229        27,   74,   61,   61,   69,   69,   69,  676,  149,   61,
1230        65,   66,   66,   74,   66,   66,   66,   67,   67,   68,
1231       149,   67,   67,   67,   70,   70,   76,  158,  158,   68,
1232        68,   70,   70,   70,   68,   68,   68,  662,   76,   74,
1233        72,   72,   68,  192,  192,   44,   48,   48,   48,   72,
1234        72,   72,  660,   48,   81,   81,   81,   81,   48,   48,
1235        48,   48,   48,   48,   48,   48,  193,  193,   76,   48,
1236
1237        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
1238        48,   48,   48,   48,   48,   48,   48,   48,   95,   95,
1239        95,   48,   48,   48,   48,   48,   48,   48,   48,   48,
1240        48,   48,   48,   48,   48,   48,   48,   48,   48,   48,
1241        48,   48,   48,   48,   48,   48,   51,  194,  194,   51,
1242       128,   51,   77,   51,   51,   51,   51,   51,   51,   71,
1243        71,   51,   73,   73,   77,  196,  196,   71,   71,   71,
1244        75,  157,   73,   73,  258,   75,   73,   98,   98,   98,
1245        51,  128,   75,  157,   51,   51,   51,   51,   51,   51,
1246        51,   51,   51,   51,   51,   51,  110,  110,  110,  110,
1247
1248       271,  387,  112,  112,  112,  112,  658,   51,   62,   77,
1249        78,  166,  271,   62,   79,   78,   62,   62,   62,   62,
1250        62,  258,   75,  166,  323,   79,   85,   78,   79,   79,
1251        79,   79,  112,   85,   85,   85,   85,   85,  113,  113,
1252       113,  113,   62,  166,  273,  273,   62,   62,   62,   62,
1253        62,   62,   62,   62,   62,   62,   62,   62,  100,  387,
1254        78,   78,   96,   96,   96,  171,  176,   78,  100,   62,
1255       100,  111,  113,  111,   96,  100,   96,  171,  176,  111,
1256       656,   96,  111,  623,   79,   89,  323,   89,   89,   89,
1257        89,   89,   89,  111,  171,  111,  123,  123,  123,  123,
1258
1259       167,  234,  111,  136,  136,  136,  136,  111,  118,  118,
1260       118,  118,  167,  650,   89,  234,  234,  176,   89,   89,
1261        89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
1262       121,  121,  121,  121,  123,  241,  124,  124,  124,  124,
1263       623,   89,  106,  106,  106,  106,  106,  106,  106,  106,
1264       106,  106,  106,  106,  108,  151,  649,  118,  167,  233,
1265       325,  108,  325,  151,  151,  243,  241,  151,  165,  137,
1266       137,  137,  137,  138,  138,  138,  138,  267,  121,  124,
1267       165,  345,  233,  108,  308,  308,  267,  108,  108,  108,
1268       108,  108,  108,  108,  108,  108,  108,  108,  108,  137,
1269
1270       162,  162,  162,  162,  233,  243,  165,  138,  309,  309,
1271       108,  127,  127,  127,  127,  127,  127,  127,  127,  127,
1272       127,  127,  127,  127,  127,  127,  127,  146,  152,  568,
1273       568,  127,  127,  127,  127,  329,  152,  345,  154,  185,
1274       152,  146,  146,  146,  146,  146,  154,  190,  270,  329,
1275       154,  185,  168,  270,  127,  127,  127,  648,  190,  163,
1276       163,  163,  163,  644,  168,  270,  164,  164,  164,  164,
1277       169,  169,  169,  169,  172,  172,  172,  172,  174,  174,
1278       174,  174,  127,  127,  129,  129,  129,  129,  129,  163,
1279       129,  129,  129,  129,  129,  129,  185,  146,  129,  129,
1280
1281       164,  173,  186,  189,  129,  129,  386,  129,  168,  175,
1282       175,  175,  175,  173,  186,  189,  174,  190,  346,  169,
1283       272,  182,  172,  187,  368,  272,  188,  129,  129,  182,
1284       182,  182,  182,  182,  183,  187,  269,  272,  188,  173,
1285       346,  269,  183,  183,  183,  183,  183,  609,  269,  189,
1286       386,  347,  175,  357,  186,  129,  129,  131,  131,  131,
1287       131,  131,  131,  131,  131,  131,  131,  131,  131,  132,
1288       132,  368,  183,  347,  132,  187,  641,  132,  132,  132,
1289       132,  132,  188,  132,  357,  132,  132,  132,  132,  132,
1290       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
1291
1292       132,  132,  132,  132,  384,  609,  384,  132,  132,  132,
1293       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
1294       132,  132,  132,  132,  132,  132,  132,  132,  132,  132,
1295       132,  132,  134,  134,  134,  134,  134,  134,  134,  134,
1296       134,  134,  134,  134,  135,  218,  218,  218,  218,  484,
1297       265,  135,  135,  135,  135,  265,  265,  135,  484,  135,
1298       135,  135,  135,  135,  135,  135,  135,  135,  135,  135,
1299       135,  135,  135,  135,  135,  135,  135,  135,  219,  219,
1300       219,  219,  198,  198,  432,  135,  155,  155,  155,  198,
1301       198,  198,  198,  155,  220,  220,  220,  220,  155,  155,
1302
1303       640,  155,  155,  155,  155,  155,  435,  432,  327,  155,
1304       155,  155,  155,  155,  155,  155,  155,  155,  155,  155,
1305       155,  155,  155,  155,  155,  155,  155,  155,  435,  637,
1306       637,  155,  155,  155,  155,  155,  155,  155,  155,  155,
1307       155,  155,  155,  155,  155,  155,  155,  155,  155,  155,
1308       155,  155,  155,  155,  155,  155,  159,  304,  275,  202,
1309       222,  223,  223,  223,  223,  184,  202,  222,  159,  304,
1310       327,  197,  197,  184,  184,  184,  184,  184,  197,  197,
1311       197,  197,  197,  224,  224,  224,  224,  372,  202,  222,
1312       252,  252,  252,  252,  159,  159,  159,  159,  159,  159,
1313
1314       159,  159,  159,  159,  159,  159,  160,  184,  275,  242,
1315       242,  242,  242,  160,  304,  202,  222,  275,  317,  317,
1316       317,  317,  203,  358,  388,  203,  203,  203,  203,  203,
1317       239,  239,  239,  239,  372,  160,  388,  359,  388,  160,
1318       160,  160,  160,  160,  160,  160,  160,  160,  160,  160,
1319       160,  203,  242,  461,  358,  461,  230,  230,  230,  230,
1320       461,  635,  160,  177,  177,  177,  177,  177,  177,  177,
1321       177,  177,  177,  177,  177,  178,  178,  359,  203,  239,
1322       178,  707,  707,  178,  178,  178,  178,  178,  230,  178,
1323       634,  178,  178,  178,  178,  178,  178,  178,  178,  178,
1324
1325       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
1326       360,  360,  360,  178,  178,  178,  178,  178,  178,  178,
1327       178,  178,  178,  178,  178,  178,  178,  178,  178,  178,
1328       178,  178,  178,  178,  178,  178,  178,  178,  180,  180,
1329       180,  180,  180,  180,  180,  180,  180,  180,  180,  180,
1330       181,  181,  449,  360,  444,  181,  708,  708,  181,  181,
1331       181,  181,  181,  633,  181,  449,  181,  181,  181,  181,
1332       181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
1333       181,  181,  181,  181,  181,  444,  632,  591,  181,  181,
1334       181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
1335
1336       181,  181,  181,  181,  181,  181,  181,  181,  181,  181,
1337       181,  181,  181,  221,  221,  221,  221,  221,  221,  221,
1338       221,  221,  221,  221,  221,  225,  338,  338,  338,  338,
1339       454,  651,  225,  366,  225,  253,  591,  286,  231,  231,
1340       231,  231,  253,  253,  253,  253,  366,  531,  253,  286,
1341       363,  363,  363,  363,  225,  465,  465,  465,  225,  225,
1342       225,  225,  225,  225,  225,  225,  225,  225,  225,  225,
1343       231,  629,  285,  628,  366,  467,  253,  454,  283,  286,
1344       651,  225,  240,  240,  285,  240,  240,  240,  240,  240,
1345       283,  240,  240,  240,  240,  531,  240,  240,  288,  254,
1346
1347       450,  264,  240,  240,  240,  240,  254,  254,  254,  254,
1348       288,  276,  254,  450,  285,  264,  264,  264,  264,  276,
1349       276,  276,  276,  276,  279,  240,  240,  240,  285,  285,
1350       398,  389,  279,  279,  279,  279,  279,  467,  283,  281,
1351       254,  305,  398,  389,  288,  389,  240,  281,  281,  281,
1352       281,  281,  305,  240,  240,  244,  244,  244,  244,  244,
1353       626,  244,  244,  244,  244,  244,  244,  592,  284,  244,
1354       244,  264,  282,  284,  289,  244,  244,  569,  244,  281,
1355       282,  282,  282,  282,  282,  284,  289,  608,  287,  303,
1356       295,  284,  295,  287,  303,  299,  301,  299,  244,  244,
1357
1358       287,  303,  295,  625,  414,  414,  290,  299,  301,  414,
1359       621,  305,  282,  284,  290,  290,  290,  290,  290,  592,
1360       620,  297,  302,  289,  369,  370,  244,  244,  245,  297,
1361       297,  297,  297,  297,  302,  336,  301,  369,  370,  608,
1362       569,  245,  336,  245,  245,  245,  245,  245,  245,  245,
1363       245,  245,  245,  245,  245,  245,  245,  245,  245,  245,
1364       245,  245,  302,  290,  336,  369,  370,  601,  584,  245,
1365       247,  247,  247,  247,  247,  247,  247,  247,  247,  247,
1366       247,  247,  255,  328,  300,  709,  709,  328,  622,  601,
1367       300,  336,  579,  584,  328,  255,  300,  255,  255,  255,
1368
1369       255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
1370       255,  255,  255,  255,  255,  255,  712,  712,  312,  312,
1371       466,  409,  318,  255,  277,  312,  312,  312,  312,  318,
1372       379,  318,  332,  409,  393,  619,  277,  300,  380,  332,
1373       379,  332,  379,  622,  385,  328,  393,  379,  380,  411,
1374       380,  318,  385,  636,  579,  380,  385,  445,  445,  445,
1375       411,  332,  277,  277,  277,  277,  277,  277,  277,  277,
1376       277,  277,  277,  277,  280,  394,  466,  451,  318,  396,
1377       618,  280,  393,  280,  365,  365,  487,  394,  332,  365,
1378       451,  396,  365,  365,  365,  365,  665,  616,  365,  487,
1379
1380       445,  636,  396,  280,  448,  448,  448,  280,  280,  280,
1381       280,  280,  280,  280,  280,  280,  280,  280,  280,  411,
1382       615,  399,  607,  394,  396,  416,  416,  416,  416,  606,
1383       280,  291,  291,  399,  291,  291,  291,  291,  291,  291,
1384       291,  291,  291,  291,  377,  291,  291,  448,  665,  502,
1385       399,  291,  291,  291,  291,  392,  401,  400,  377,  377,
1386       377,  377,  502,  392,  392,  392,  392,  392,  401,  400,
1387       402,  600,  424,  459,  291,  291,  291,  407,  481,  407,
1388       481,  598,  402,  395,  424,  459,  671,  408,  395,  407,
1389       481,  469,  471,  408,  477,  291,  469,  471,  401,  408,
1390
1391       395,  400,  291,  291,  292,  292,  477,  482,  469,  471,
1392       729,  729,  402,  597,  377,  596,  292,  675,  292,  482,
1393       292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
1394       292,  292,  292,  292,  292,  292,  292,  292,  292,  395,
1395       408,  671,  602,  459,  604,  477,  292,  293,  293,  293,
1396       293,  293,  293,  293,  293,  293,  293,  293,  293,  298,
1397       483,  530,  530,  530,  602,  675,  604,  590,  589,  588,
1398       586,  483,  298,  612,  298,  298,  298,  298,  298,  298,
1399       298,  298,  298,  298,  298,  298,  298,  298,  298,  298,
1400       298,  298,  298,  585,  583,  612,  581,  645,  580,  645,
1401
1402       298,  335,  335,  335,  335,  335,  335,  335,  335,  335,
1403       335,  335,  335,  348,  348,  433,  348,  348,  348,  348,
1404       348,  645,  348,  348,  348,  348,  503,  348,  348,  410,
1405       483,  473,  578,  348,  348,  348,  348,  406,  406,  503,
1406       476,  410,  406,  473,  433,  406,  406,  406,  406,  406,
1407       472,  406,  470,  433,  476,  476,  348,  348,  348,  577,
1408       478,  507,  472,  348,  470,  572,  479,  567,  517,  433,
1409       472,  479,  478,  473,  566,  507,  536,  348,  348,  470,
1410       582,  410,  517,  479,  348,  348,  355,  355,  536,  355,
1411       355,  355,  355,  355,  582,  355,  355,  355,  355,  611,
1412
1413       355,  355,  470,  646,  486,  486,  355,  355,  355,  355,
1414       478,  486,  486,  486,  486,  533,  534,  533,  520,  520,
1415       520,  525,  535,  646,  659,  646,  611,  533,  534,  355,
1416       355,  355,  536,  538,  535,  525,  525,  525,  525,  539,
1417       677,  541,  564,  571,  574,  538,  659,  562,  611,  561,
1418       560,  539,  541,  535,  534,  571,  574,  355,  355,  356,
1419       356,  520,  356,  356,  356,  356,  356,  559,  356,  356,
1420       356,  356,  575,  356,  356,  538,  570,  539,  573,  356,
1421       356,  356,  356,  643,  575,  544,  544,  558,  570,  538,
1422       573,  525,  544,  544,  544,  544,  613,  643,  565,  571,
1423
1424       631,  557,  356,  356,  356,  576,  595,  570,  613,  614,
1425       677,  541,  565,  565,  565,  565,  576,  595,  556,  573,
1426       614,  555,  631,  678,  554,  553,  551,  550,  631,  575,
1427       356,  356,  390,  390,  390,  390,  390,  390,  390,  390,
1428       390,  390,  390,  390,  397,  397,  549,  397,  397,  397,
1429       397,  397,  397,  397,  397,  397,  397,  594,  397,  397,
1430       627,  547,  624,  638,  397,  397,  397,  397,  565,  594,
1431       546,  627,  545,  630,  617,  576,  595,  543,  630,  614,
1432       617,  642,  540,  537,  529,  528,  655,  397,  397,  397,
1433       624,  638,  642,  678,  397,  630,  617,  655,  693,  594,
1434
1435       668,  527,  617,  526,  524,  672,  522,  653,  397,  397,
1436       518,  668,  624,  638,  639,  397,  397,  403,  403,  652,
1437       403,  403,  403,  403,  403,  403,  403,  403,  403,  403,
1438       627,  403,  403,  672,  516,  653,  639,  403,  403,  403,
1439       403,  515,  639,  514,  513,  512,  511,  652,  510,  509,
1440       508,  642,  652,  666,  673,  672,  655,  653,  639,  667,
1441       403,  403,  403,  653,  639,  673,  679,  680,  693,  652,
1442       668,  681,  682,  683,  684,  685,  506,  679,  680,  666,
1443       505,  666,  681,  682,  683,  684,  685,  667,  403,  403,
1444       405,  405,  504,  405,  405,  405,  405,  405,  405,  405,
1445
1446       405,  405,  405,  666,  405,  405,  501,  667,  500,  667,
1447       405,  405,  405,  405,  499,  498,  497,  496,  495,  494,
1448       493,  492,  491,  490,  673,  489,  488,  480,  475,  686,
1449       464,  463,  462,  405,  405,  405,  679,  680,  460,  458,
1450       686,  681,  682,  683,  684,  685,  687,  456,  453,  452,
1451       447,  443,  442,  688,  689,  690,  691,  687,  692,  441,
1452       437,  405,  405,  426,  688,  689,  690,  691,  436,  692,
1453       434,  431,  430,  429,  428,  427,  426,  423,  426,  426,
1454       426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
1455       426,  426,  426,  426,  426,  426,  426,  439,  439,  686,
1456
1457       439,  439,  439,  439,  439,  422,  439,  439,  439,  439,
1458       421,  439,  439,  420,  419,  418,  687,  439,  439,  439,
1459       439,  417,  415,  688,  689,  690,  691,  413,  692,  412,
1460       404,  391,  383,  382,  381,  378,  376,  374,  371,  367,
1461       439,  439,  439,  362,  361,  353,  352,  351,  350,  344,
1462       343,  342,  341,  340,  339,  334,  333,  331,  326,  324,
1463       322,  321,  320,  319,  316,  315,  314,  313,  439,  439,
1464       440,  440,  310,  440,  440,  440,  440,  440,  306,  440,
1465       440,  440,  440,  296,  440,  440,  294,  278,  274,  268,
1466       440,  440,  440,  440,  266,  262,  261,  260,  259,  257,
1467
1468       256,  251,  250,  249,  238,  237,  236,  235,  232,  229,
1469       228,  227,  226,  440,  440,  440,  216,  215,  214,  213,
1470       440,  212,  209,  208,  207,  206,  205,  204,  200,  199,
1471       195,  191,  179,  170,  440,  440,  161,  150,  148,  147,
1472       145,  440,  440,  468,  468,  143,  142,  141,  140,  139,
1473       126,  125,  122,  120,  119,  468,  117,  468,  116,  468,
1474       468,  468,  468,  468,  468,  468,  468,  468,  468,  468,
1475       468,  468,  468,  468,  468,  468,  468,  468,  474,  474,
1476       115,  474,  474,  474,  474,  474,  474,  474,  474,  474,
1477       474,  114,  474,  474,  103,  101,   97,   94,  474,  474,
1478
1479       474,  474,   93,   92,   88,   83,   80,   60,   59,   57,
1480        56,   54,   53,   45,   42,   41,   39,   24,   23,   21,
1481        20,  474,  474,  474,   18,   17,   14,    9,    3,    0,
1482         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1483         0,    0,    0,    0,    0,    0,    0,    0,    0,  474,
1484       474,  587,  587,    0,  587,  587,  587,  587,  587,    0,
1485       587,  587,  587,  587,    0,  587,  587,    0,    0,    0,
1486         0,  587,  587,  587,  587,    0,    0,    0,    0,    0,
1487         0,  587,    0,    0,    0,    0,    0,    0,    0,    0,
1488         0,    0,    0,    0,  587,  587,  587,    0,    0,    0,
1489
1490         0,    0,    0,  587,    0,    0,    0,    0,    0,    0,
1491         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1492         0,    0,  587,  587,  593,  593,    0,  593,  593,  593,
1493       593,  593,  593,  593,  593,  593,  593,    0,  593,  593,
1494         0,    0,    0,    0,  593,  593,  593,  593,    0,    0,
1495         0,    0,    0,    0,  593,    0,    0,    0,    0,    0,
1496         0,    0,    0,    0,    0,    0,    0,  593,  593,  593,
1497         0,    0,    0,    0,    0,    0,  593,    0,    0,    0,
1498         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1499         0,    0,    0,    0,    0,  593,  593,  603,  603,    0,
1500
1501       603,  603,  603,  603,  603,    0,  603,  603,  603,  603,
1502         0,  603,  603,    0,    0,    0,    0,  603,  603,  603,
1503       603,    0,    0,    0,    0,    0,    0,  603,    0,    0,
1504         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1505       603,  603,  603,    0,    0,    0,    0,    0,    0,  603,
1506         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1507         0,    0,    0,    0,    0,    0,    0,    0,  603,  603,
1508       610,  610,    0,  610,  610,  610,  610,  610,  610,  610,
1509       610,  610,  610,    0,  610,  610,    0,    0,    0,    0,
1510       610,  610,  610,  610,    0,    0,    0,    0,    0,    0,
1511
1512       610,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1513         0,    0,    0,  610,  610,  610,    0,    0,    0,    0,
1514         0,    0,  610,    0,    0,    0,    0,    0,    0,    0,
1515         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
1516         0,  610,  610,  697,    0,    0,    0,  697,  697,    0,
1517         0,  697,  697,  697,  697,  697,  697,  697,  697,  698,
1518       698,  698,  698,  698,    0,  698,  698,  698,  698,  698,
1519       698,  698,  698,  698,  698,  698,  698,  698,  699,  699,
1520         0,    0,    0,  699,  699,  699,  700,  700,  700,  700,
1521       700,  700,  700,  700,  700,  700,  700,  700,  700,  700,
1522
1523       700,  700,  700,  700,  700,  701,  701,  701,  701,  701,
1524       701,  701,  701,  701,  701,  701,  701,  701,  701,  701,
1525       701,  701,  701,  701,  702,  702,  702,  702,  702,  702,
1526       702,  702,  702,  702,  702,  702,  702,  702,  702,  702,
1527       702,  702,  702,  703,    0,    0,    0,  703,  703,  703,
1528         0,  703,  703,  703,  703,  703,  703,  703,  703,  704,
1529       704,  704,  704,  704,    0,  704,  704,  704,  704,  704,
1530       704,  704,  704,  704,  704,  704,  704,  704,  705,  705,
1531       705,  705,  705,  705,  705,  705,  705,  705,  705,  705,
1532       705,  705,  705,  705,  705,  705,  705,  706,  706,    0,
1533
1534         0,    0,    0,    0,    0,    0,    0,  706,    0,    0,
1535       706,  706,    0,  706,  710,  710,  710,  710,  710,  710,
1536       710,  710,  710,  710,  710,  710,  710,  710,  710,  710,
1537       710,  710,  710,  711,  711,  711,  711,  711,  711,  711,
1538       711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
1539       711,  711,  713,  713,  713,  713,  713,  713,  713,  713,
1540       713,  713,  713,  713,  713,  713,  713,  713,  713,  713,
1541       713,  714,  714,  714,  714,  714,  714,  714,  714,  714,
1542       714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
1543       715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
1544
1545       715,  715,  715,  715,  715,  715,  715,  715,  715,  716,
1546       716,  716,  716,  716,  716,  716,  716,  716,  716,  716,
1547       716,  716,  716,  716,  716,  716,  716,  716,  717,  717,
1548       717,  717,  717,  717,  717,  717,  717,  717,  717,  717,
1549       717,  717,  717,  717,  717,  717,  717,  718,  718,  718,
1550       718,  718,  718,  718,  718,  718,  718,  718,  718,  718,
1551       718,  718,  718,  718,  718,  718,  719,  719,  719,  719,
1552       719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
1553       719,  719,  719,  719,  719,  720,  720,    0,  720,  720,
1554       720,  720,  720,  720,  720,  720,  720,  720,  720,  720,
1555
1556       720,  720,  720,  720,  721,  721,    0,  721,  721,  721,
1557       721,  721,  721,  721,  721,  721,  721,  721,  721,  721,
1558       721,  721,  721,  722,    0,  722,    0,    0,    0,  722,
1559       722,  722,    0,    0,  722,  723,  723,    0,  723,  723,
1560       723,  723,  723,  723,  723,  723,  723,  723,  723,  723,
1561       723,  723,  723,  723,  724,  724,  724,  724,  724,  724,
1562       724,  724,  724,  724,  724,  724,  724,  724,  724,  724,
1563       724,  724,  724,  725,  725,  725,  725,  725,  725,  725,
1564       725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
1565       725,  725,  726,  726,  726,  726,  726,  726,  726,  726,
1566
1567       726,  726,  726,  726,  726,  726,  726,  726,  726,  726,
1568       726,  727,  727,  727,  727,  727,  727,  727,  727,  727,
1569       727,  727,  727,  727,  727,  727,  727,  727,  727,  727,
1570       728,  728,  728,  730,    0,    0,    0,  730,    0,  730,
1571       730,  730,  730,    0,  730,  731,  731,  731,  731,  731,
1572       731,  731,  731,  731,  731,  731,  731,  731,  731,  731,
1573       731,  731,  731,  731,  732,  732,  732,  732,  732,  732,
1574       732,  732,  732,  732,  732,  732,  732,  732,  732,  732,
1575       732,  732,  732,  733,    0,    0,    0,  733,  733,  733,
1576         0,  733,  733,  733,  733,  733,  733,  733,  733,  734,
1577
1578       734,  734,  734,  734,  734,  734,  734,  734,  734,  734,
1579       734,  734,  734,  734,  734,  734,  734,  734,  735,  735,
1580       735,  735,  735,  735,  735,  735,  735,  735,  735,  735,
1581       735,  735,  735,  735,  735,  735,  735,  736,  736,    0,
1582       736,  736,  736,  736,  736,  736,  736,  736,  736,  736,
1583       736,  736,  736,  736,  736,  736,  737,  737,  737,  737,
1584       737,  737,  737,  737,  737,  737,  737,  737,  737,  737,
1585       737,  737,  737,  737,  737,  738,  738,  738,  738,    0,
1586       738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
1587       738,  738,  738,  738,  739,  739,  739,  739,  739,  739,
1588
1589       739,  739,  739,  739,  739,  739,  739,  739,  739,  739,
1590       739,  739,  739,  740,  740,    0,  740,  740,  740,  740,
1591       740,  740,  740,  740,  740,  740,  740,  740,  740,  740,
1592       740,  740,  741,  741,    0,  741,  741,  741,  741,  741,
1593       741,  741,  741,  741,  741,  741,  741,  741,  741,  741,
1594       741,  742,    0,  742,  742,    0,    0,  742,  742,  742,
1595         0,    0,  742,  743,  743,    0,  743,  743,  743,  743,
1596       743,  743,  743,  743,  743,  743,  743,  743,  743,  743,
1597       743,  743,  744,  744,    0,  744,  744,  744,  744,  744,
1598       744,  744,  744,  744,  744,  744,  744,  744,  744,  744,
1599
1600       744,  745,  745,    0,  745,  745,  745,  745,  745,  745,
1601       745,  745,  745,  745,  745,  745,  745,  745,  745,  745,
1602       746,  746,  746,  746,  746,  746,  746,  746,  746,  746,
1603       746,  746,  746,  746,  746,  746,  746,  746,  746,  747,
1604       747,  747,  747,  747,  747,  747,  747,  747,  747,  747,
1605       747,  747,  747,  747,  747,  747,  747,  747,  748,  748,
1606       748,  748,  748,  748,  748,  748,  748,  748,  748,  748,
1607       748,  748,  748,  748,  748,  748,  748,  749,  749,  749,
1608       749,  749,  749,  749,  749,  749,  749,  749,  749,  749,
1609       749,  749,  749,  749,  749,  749,  750,  750,    0,    0,
1610
1611       750,  750,    0,  750,  750,  750,  750,  750,  750,  750,
1612       750,  750,  751,    0,    0,    0,    0,    0,  751,  751,
1613       751,  751,    0,  751,  752,  752,  752,  752,  752,  752,
1614       752,  752,  752,  752,  752,  752,  752,  752,  752,  752,
1615       752,  752,  752,  753,  753,  753,  753,  753,  753,  753,
1616       753,  753,  753,  753,  753,  753,  753,  753,  753,  753,
1617       753,  753,  754,  754,    0,  754,  754,  754,  754,  754,
1618       754,  754,  754,  754,  754,  754,  754,  754,  754,  754,
1619       754,  755,  755,    0,  755,  755,  755,  755,  755,  755,
1620       755,  755,  755,  755,  755,  755,  755,  755,  755,  755,
1621
1622       756,  756,    0,    0,  756,  756,  756,  756,  756,  756,
1623       756,  756,  756,  756,  756,  756,  757,  757,  757,  757,
1624         0,  757,  757,  757,  757,  757,  757,  757,  757,  757,
1625       757,  757,  757,  757,  757,  758,  758,  758,  758,  758,
1626       758,  758,  758,  758,  758,  758,  758,  758,  758,  758,
1627       758,  758,  758,  758,  759,  759,    0,  759,  759,  759,
1628       759,  759,  759,  759,  759,  759,  759,  759,  759,  759,
1629       759,  759,  759,  760,  760,    0,  760,  760,  760,  760,
1630       760,  760,  760,  760,  760,  760,  760,  760,  760,  760,
1631       760,  760,  761,  761,    0,  761,  761,  761,  761,  761,
1632
1633       761,  761,  761,  761,  761,  761,  761,  761,  761,  761,
1634       761,  762,  762,    0,  762,  762,  762,  762,  762,  762,
1635       762,  762,  762,  762,  762,  762,  762,  762,  762,  762,
1636       763,  763,    0,  763,  763,  763,  763,  763,  763,  763,
1637       763,  763,  763,  763,  763,  763,  763,  763,  763,  764,
1638       764,    0,  764,  764,  764,  764,  764,  764,  764,  764,
1639       764,  764,  764,  764,  764,  764,  764,  764,  765,  765,
1640         0,  765,  765,  765,  765,  765,  765,  765,  765,  765,
1641       765,  765,  765,  765,  765,  765,  765,  766,  766,    0,
1642       766,  766,  766,  766,  766,  766,  766,  766,  766,  766,
1643
1644       766,  766,  766,  766,  766,  766,  767,  767,  767,  767,
1645       767,  767,  767,  767,  767,  767,  767,  767,  767,  767,
1646       767,  767,  767,  767,  767,  768,  768,  768,  768,  768,
1647       768,  768,  768,  768,  768,  768,  768,  768,  768,  768,
1648       768,  768,  768,  768,  769,  769,  769,  769,  769,  769,
1649       769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
1650       769,  769,  769,  770,    0,    0,    0,    0,    0,  770,
1651       770,  770,  770,  770,  770,  770,  770,  770,  771,  771,
1652       771,  771,  771,  771,  771,  771,  771,  771,  771,  771,
1653       771,  771,  771,  771,  771,  771,  771,  772,  772,  772,
1654
1655       772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
1656       772,  772,  772,  772,  772,  772,  773,  773,  773,  773,
1657       773,  773,  773,  773,  773,  773,  773,  773,  773,  773,
1658       773,  773,  773,  773,  773,  774,    0,    0,    0,    0,
1659         0,  774,  774,  774,  774,  775,  775,    0,  775,  775,
1660       775,  775,  775,  775,  775,  775,  775,  775,  775,  775,
1661       775,  775,  775,  775,  776,  776,  776,  776,  776,  776,
1662       776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
1663       776,  776,  776,  777,  777,    0,  777,  777,  777,  777,
1664       777,  777,  777,  777,  777,  777,  777,  777,  777,  777,
1665
1666       777,  777,  778,  778,    0,  778,  778,  778,  778,  778,
1667       778,  778,  778,  778,  778,  778,  778,  778,  778,  778,
1668       778,  779,  779,    0,  779,  779,  779,  779,  779,  779,
1669       779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
1670       780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
1671       780,  780,  780,  780,  780,  780,  780,  780,  780,  781,
1672       781,  781,  781,  781,  781,  781,  781,  781,  781,  781,
1673       781,  781,  781,  781,  781,  781,  781,  781,  782,  782,
1674       782,  782,  782,  782,  782,  782,  782,  782,  782,  782,
1675       782,  782,  782,  782,  782,  782,  782,  783,  783,  783,
1676
1677       783,  783,  783,  783,  783,  783,  783,  783,  783,  783,
1678       783,  783,  783,  783,  783,  783,  696,  696,  696,  696,
1679       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1680       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1681       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1682       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1683       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1684       696,  696,  696,  696,  696,  696,  696,  696,  696,  696,
1685       696,  696,  696,  696,  696,  696,  696,  696,  696,  696
1686     } ;
1687
1688 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
1689 static char *yy_full_match;
1690 static int yy_lp;
1691 static int yy_looking_for_trail_begin = 0;
1692 static int yy_full_lp;
1693 static int *yy_full_state;
1694 #define YY_TRAILING_MASK 0x2000
1695 #define YY_TRAILING_HEAD_MASK 0x4000
1696 #define REJECT \
1697 { \
1698 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
1699 yy_cp = yy_full_match; /* restore poss. backed-over text */ \
1700 yy_lp = yy_full_lp; /* restore orig. accepting pos. */ \
1701 yy_state_ptr = yy_full_state; /* restore orig. state */ \
1702 yy_current_state = *yy_state_ptr; /* restore curr. state */ \
1703 ++yy_lp; \
1704 goto find_rule; \
1705 }
1706 #define yymore() yymore_used_but_not_detected
1707 #define YY_MORE_ADJ 0
1708 #define YY_RESTORE_YY_MORE_OFFSET
1709 char *yytext;
1710 #define INITIAL 0
1711 /*
1712  * parser.l -- lex parser of algebraic chess moves for XBoard
1713  * $Id: parser.l,v 2.1 2003/10/27 19:21:00 mann Exp $
1714  *
1715  * Copyright 1991 by Digital Equipment Corporation, Maynard, Massachusetts.
1716  * Enhancements Copyright 1992-95 Free Software Foundation, Inc.
1717  *
1718  * The following terms apply to Digital Equipment Corporation's copyright
1719  * interest in XBoard:
1720  * ------------------------------------------------------------------------
1721  * All Rights Reserved
1722  *
1723  * Permission to use, copy, modify, and distribute this software and its
1724  * documentation for any purpose and without fee is hereby granted,
1725  * provided that the above copyright notice appear in all copies and that
1726  * both that copyright notice and this permission notice appear in
1727  * supporting documentation, and that the name of Digital not be
1728  * used in advertising or publicity pertaining to distribution of the
1729  * software without specific, written prior permission.
1730  *
1731  * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
1732  * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
1733  * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
1734  * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
1735  * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
1736  * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
1737  * SOFTWARE.
1738  * ------------------------------------------------------------------------
1739  *
1740  * The following terms apply to the enhanced version of XBoard distributed
1741  * by the Free Software Foundation:
1742  * ------------------------------------------------------------------------
1743  * This program is free software; you can redistribute it and/or modify
1744  * it under the terms of the GNU General Public License as published by
1745  * the Free Software Foundation; either version 2 of the License, or
1746  * (at your option) any later version.
1747  *
1748  * This program is distributed in the hope that it will be useful,
1749  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1750  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1751  * GNU General Public License for more details.
1752  *
1753  * You should have received a copy of the GNU General Public License
1754  * along with this program; if not, write to the Free Software
1755  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
1756  * ------------------------------------------------------------------------
1757  */
1758
1759 /* This parser handles all forms of promotion.
1760  * The parser resolves ambiguous moves by searching and check-testing.
1761  * It also parses comments of the form [anything] or (anything).
1762  *
1763  * [HGM] Parser extensively modified for bigger boards, Shogi-like syntax,
1764  * and unknow pieces. All pieces are now mandatory upper case, but can be
1765  * any letter A-Z. Files must be lower case (as before), but can run upto 'l'.
1766  * Ranks can be 0-9. The parser returns 0 for off-board files and ranks.
1767  * For an unknown piece (as mover or promotion piece) it returns
1768  * IllegalMove, like it does when the piece doesn't match.
1769  * Promotions can now also be appended Shogi-style, a bare '=' or '+',
1770  * and this is then returned as promotion character. The piece indicator
1771  * can be prefixed by a '+' to indicate it is a promoted piece.
1772  */
1773
1774 #include "config.h"
1775
1776 #define NO_CONSTRAINT   -1
1777 #undef YYLMAX
1778 #define YYLMAX                  4096
1779 #define UNPUT_BUF_SIZE          YYLMAX
1780
1781 #ifdef FLEX_SCANNER
1782 /* yytext is probably a char*, but could be a char[].  yy_text is set
1783    in YY_DECL below, because if yytext is a char*, its value is not
1784    constant. */
1785 char *yy_text;
1786 #else /*!FLEX_SCANNER*/
1787 /* yytext is definitely a char[], so yy_text can be set here, statically. */
1788 char *yy_text = (char *) yytext;
1789 #endif
1790
1791 #ifdef FLEX_SCANNER
1792 /* This is flex */
1793 /* [AP] use prototypes in function declarations */
1794 #define YY_USE_PROTOS
1795
1796 #ifdef YY_USE_PROTOS
1797 #define YY_PROTO(proto) proto
1798 #else
1799 #define YY_PROTO(proto) ()
1800 #endif
1801 /* end of [AP] fix */
1802
1803 #undef YY_INPUT
1804 #define YY_INPUT(buf, result, max_size) my_yy_input(buf, &result, max_size)
1805 #undef YY_DECL
1806 #define YY_DECL                     \
1807     int _yylex YY_PROTO((void));    \
1808     int yylex YY_PROTO((void))      \
1809     {                               \
1810         int result = _yylex();      \
1811         yy_text = (char *) yytext;  \
1812         return(result);             \
1813     }                               \
1814     int _yylex YY_PROTO((void))
1815 #else
1816 /* This is lex */
1817 #undef input
1818 #undef output
1819 #undef unput
1820 #endif
1821
1822 /* The includes must be here, below the #undef input */
1823
1824 #include <ctype.h>
1825
1826 #if STDC_HEADERS
1827 # include <stdlib.h>
1828 # include <string.h>
1829 #else /* not STDC_HEADERS */
1830 # if HAVE_STRING_H
1831 #  include <string.h>
1832 # else /* not HAVE_STRING_H */
1833 #  include <strings.h>
1834 # endif /* not HAVE_STRING_H */
1835 #endif /* not STDC_HEADERS */
1836
1837 #if HAVE_UNISTD_H
1838 # include <unistd.h>
1839 #endif
1840
1841 #if defined(_amigados)
1842 # include <errno.h>
1843 # if HAVE_FCNTL_H
1844 #  include <fcntl.h>    /*  isatty() prototype  */
1845 # endif /*  HAVE_FCNTL_H        */
1846 #endif  /*  defined(_amigados)  */
1847
1848 #include "common.h"
1849 #include "backend.h"
1850 #include "frontend.h"
1851 #include "parser.h"
1852 #include "moves.h"
1853
1854 extern int PosFlags P((int));
1855
1856 extern Board    boards[MAX_MOVES];
1857 int             yyboardindex;
1858 int             yyskipmoves = FALSE;
1859 char            currentMoveString[YYLMAX];
1860 #ifndef FLEX_SCANNER
1861 char            unputBuffer[UNPUT_BUF_SIZE];
1862 int             unputCount = 0;
1863 #endif
1864
1865 #ifdef FLEX_SCANNER
1866 void my_yy_input P((char *buf, int *result, int max_size));
1867 #else /*!FLEX_SCANNER*/
1868 static int input P((void));
1869 static void output P((int ch));
1870 static void unput P((int ch));
1871 int yylook P((void));
1872 int yyback P((int *, int));
1873 #endif
1874 #undef yywrap
1875 int yywrap P((void));
1876 extern void CopyBoard P((Board to, Board from));
1877
1878
1879 /* Macros after this point can all be overridden by user definitions in
1880  * section 1.
1881  */
1882
1883 #ifndef YY_SKIP_YYWRAP
1884 #ifdef __cplusplus
1885 extern "C" int yywrap YY_PROTO(( void ));
1886 #else
1887 extern int yywrap YY_PROTO(( void ));
1888 #endif
1889 #endif
1890
1891 #ifndef YY_NO_UNPUT
1892 static void yyunput YY_PROTO(( int c, char *buf_ptr ));
1893 #endif
1894
1895 #ifndef yytext_ptr
1896 static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
1897 #endif
1898
1899 #ifdef YY_NEED_STRLEN
1900 static int yy_flex_strlen YY_PROTO(( yyconst char * ));
1901 #endif
1902
1903 #ifndef YY_NO_INPUT
1904 #ifdef __cplusplus
1905 static int yyinput YY_PROTO(( void ));
1906 #else
1907 static int input YY_PROTO(( void ));
1908 #endif
1909 #endif
1910
1911 #if YY_STACK_USED
1912 static int yy_start_stack_ptr = 0;
1913 static int yy_start_stack_depth = 0;
1914 static int *yy_start_stack = 0;
1915 #ifndef YY_NO_PUSH_STATE
1916 static void yy_push_state YY_PROTO(( int new_state ));
1917 #endif
1918 #ifndef YY_NO_POP_STATE
1919 static void yy_pop_state YY_PROTO(( void ));
1920 #endif
1921 #ifndef YY_NO_TOP_STATE
1922 static int yy_top_state YY_PROTO(( void ));
1923 #endif
1924
1925 #else
1926 #define YY_NO_PUSH_STATE 1
1927 #define YY_NO_POP_STATE 1
1928 #define YY_NO_TOP_STATE 1
1929 #endif
1930
1931 #ifdef YY_MALLOC_DECL
1932 YY_MALLOC_DECL
1933 #else
1934 #if __STDC__
1935 #ifndef __cplusplus
1936 #include <stdlib.h>
1937 #endif
1938 #else
1939 /* Just try to get by without declaring the routines.  This will fail
1940  * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
1941  * or sizeof(void*) != sizeof(int).
1942  */
1943 #endif
1944 #endif
1945
1946 /* Amount of stuff to slurp up with each read. */
1947 #ifndef YY_READ_BUF_SIZE
1948 #define YY_READ_BUF_SIZE 8192
1949 #endif
1950
1951 /* Copy whatever the last rule matched to the standard output. */
1952
1953 #ifndef ECHO
1954 /* This used to be an fputs(), but since the string might contain NUL's,
1955  * we now use fwrite().
1956  */
1957 #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
1958 #endif
1959
1960 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
1961  * is returned in "result".
1962  */
1963 #ifndef YY_INPUT
1964 #define YY_INPUT(buf,result,max_size) \
1965         if ( yy_current_buffer->yy_is_interactive ) \
1966                 { \
1967                 int c = '*', n; \
1968                 for ( n = 0; n < max_size && \
1969                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
1970                         buf[n] = (char) c; \
1971                 if ( c == '\n' ) \
1972                         buf[n++] = (char) c; \
1973                 if ( c == EOF && ferror( yyin ) ) \
1974                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
1975                 result = n; \
1976                 } \
1977         else \
1978                 { \
1979                 errno=0; \
1980                 while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \
1981                         { \
1982                         if( errno != EINTR) \
1983                                 { \
1984                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
1985                                 break; \
1986                                 } \
1987                         errno=0; \
1988                         clearerr(yyin); \
1989                         } \
1990                 }
1991 #endif
1992
1993 /* No semi-colon after return; correct usage is to write "yyterminate();" -
1994  * we don't want an extra ';' after the "return" because that will cause
1995  * some compilers to complain about unreachable statements.
1996  */
1997 #ifndef yyterminate
1998 #define yyterminate() return YY_NULL
1999 #endif
2000
2001 /* Number of entries by which start-condition stack grows. */
2002 #ifndef YY_START_STACK_INCR
2003 #define YY_START_STACK_INCR 25
2004 #endif
2005
2006 /* Report a fatal error. */
2007 #ifndef YY_FATAL_ERROR
2008 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
2009 #endif
2010
2011 /* Default declaration of generated scanner - a define so the user can
2012  * easily add parameters.
2013  */
2014 #ifndef YY_DECL
2015 #define YY_DECL int yylex YY_PROTO(( void ))
2016 #endif
2017
2018 /* Code executed at the beginning of each rule, after yytext and yyleng
2019  * have been set up.
2020  */
2021 #ifndef YY_USER_ACTION
2022 #define YY_USER_ACTION
2023 #endif
2024
2025 /* Code executed at the end of each rule. */
2026 #ifndef YY_BREAK
2027 #define YY_BREAK break;
2028 #endif
2029
2030 #define YY_RULE_SETUP \
2031         if ( yyleng > 0 ) \
2032                 yy_current_buffer->yy_at_bol = \
2033                                 (yytext[yyleng - 1] == '\n'); \
2034         YY_USER_ACTION
2035
2036 YY_DECL
2037         {
2038         register yy_state_type yy_current_state;
2039         register char *yy_cp, *yy_bp;
2040         register int yy_act;
2041
2042
2043
2044
2045         if ( yy_init )
2046                 {
2047                 yy_init = 0;
2048
2049 #ifdef YY_USER_INIT
2050                 YY_USER_INIT;
2051 #endif
2052
2053                 if ( ! yy_start )
2054                         yy_start = 1;   /* first start state */
2055
2056                 if ( ! yyin )
2057                         yyin = stdin;
2058
2059                 if ( ! yyout )
2060                         yyout = stdout;
2061
2062                 if ( ! yy_current_buffer )
2063                         yy_current_buffer =
2064                                 yy_create_buffer( yyin, YY_BUF_SIZE );
2065
2066                 yy_load_buffer_state();
2067                 }
2068
2069         while ( 1 )             /* loops until end-of-file is reached */
2070                 {
2071                 yy_cp = yy_c_buf_p;
2072
2073                 /* Support of yytext. */
2074                 *yy_cp = yy_hold_char;
2075
2076                 /* yy_bp points to the position in yy_ch_buf of the start of
2077                  * the current run.
2078                  */
2079                 yy_bp = yy_cp;
2080
2081                 yy_current_state = yy_start;
2082                 yy_current_state += YY_AT_BOL();
2083                 yy_state_ptr = yy_state_buf;
2084                 *yy_state_ptr++ = yy_current_state;
2085 yy_match:
2086                 do
2087                         {
2088                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
2089                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
2090                                 {
2091                                 yy_current_state = (int) yy_def[yy_current_state];
2092                                 if ( yy_current_state >= 697 )
2093                                         yy_c = yy_meta[(unsigned int) yy_c];
2094                                 }
2095                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
2096                         *yy_state_ptr++ = yy_current_state;
2097                         ++yy_cp;
2098                         }
2099                 while ( yy_base[yy_current_state] != 4517 );
2100
2101 yy_find_action:
2102                 yy_current_state = *--yy_state_ptr;
2103                 yy_lp = yy_accept[yy_current_state];
2104 find_rule: /* we branch to this label when backing up */
2105                 for ( ; ; ) /* until we find what rule we matched */
2106                         {
2107                         if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
2108                                 {
2109                                 yy_act = yy_acclist[yy_lp];
2110                                 if ( yy_act & YY_TRAILING_HEAD_MASK ||
2111                                      yy_looking_for_trail_begin )
2112                                         {
2113                                         if ( yy_act == yy_looking_for_trail_begin )
2114                                                 {
2115                                                 yy_looking_for_trail_begin = 0;
2116                                                 yy_act &= ~YY_TRAILING_HEAD_MASK;
2117                                                 break;
2118                                                 }
2119                                         }
2120                                 else if ( yy_act & YY_TRAILING_MASK )
2121                                         {
2122                                         yy_looking_for_trail_begin = yy_act & ~YY_TRAILING_MASK;
2123                                         yy_looking_for_trail_begin |= YY_TRAILING_HEAD_MASK;
2124                                         }
2125                                 else
2126                                         {
2127                                         yy_full_match = yy_cp;
2128                                         yy_full_state = yy_state_ptr;
2129                                         yy_full_lp = yy_lp;
2130                                         break;
2131                                         }
2132                                 ++yy_lp;
2133                                 goto find_rule;
2134                                 }
2135                         --yy_cp;
2136                         yy_current_state = *--yy_state_ptr;
2137                         yy_lp = yy_accept[yy_current_state];
2138                         }
2139
2140                 YY_DO_BEFORE_ACTION;
2141
2142
2143 do_action:      /* This label is used only to access EOF actions. */
2144
2145
2146                 switch ( yy_act )
2147         { /* beginning of action switch */
2148 case 1:
2149 YY_RULE_SETUP
2150 {
2151     /*
2152      * Fully-qualified algebraic move, possibly with promotion
2153      */
2154     int skip1 = 0, skip2 = 0, skip3 = 0, promoted = 0;
2155     ChessSquare piece;
2156     ChessMove result;
2157     char c;
2158     
2159     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2160
2161     if (yytext[0] == '+') skip1 = skip3 = promoted = 1; /* [HGM] Shogi promoted */
2162
2163     /* remove the / */
2164     if (yytext[1+skip1] == '/')  skip1++; 
2165     
2166     /* remove the [xX:-] */
2167     if ((yytext[3+skip1] == 'x') || (yytext[3+skip1] == 'X') ||
2168         (yytext[3+skip1] == '-') || (yytext[3+skip1] == ':')) skip2 = 1;
2169     
2170     currentMoveString[0] = yytext[1+skip1];
2171     currentMoveString[1] = yytext[2+skip1];
2172     currentMoveString[2] = yytext[3+skip1+skip2];
2173     currentMoveString[3] = yytext[4+skip1+skip2];
2174     currentMoveString[4] = NULLCHAR;
2175     
2176     if (appData.debugMode) {
2177         fprintf(debugFP, "Parser Qa1b2: yyleng=%d\n",
2178         yyleng);
2179     }
2180
2181     if (yyleng-skip1-skip2 > 5) { char c;
2182         if (yytext[yyleng-1] == ')') {
2183             c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
2184         } else {
2185             c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
2186         }
2187         currentMoveString[5] = NULLCHAR;
2188         if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
2189             return IllegalMove; /* [HGM] promotion to invalid piece */
2190     }
2191
2192     if (appData.debugMode) {
2193         fprintf(debugFP, "parser: %s\n", currentMoveString);
2194     }
2195     /* [HGM] do not allow values beyond board size */
2196     if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
2197        currentMoveString[1] - ONE <  0            ||
2198        currentMoveString[0] - AAA >= BOARD_RGHT   ||
2199        currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2200        currentMoveString[3] - ONE <  0            ||
2201        currentMoveString[2] - AAA >= BOARD_RGHT   ||
2202        currentMoveString[0] - AAA <  BOARD_LEFT   ||
2203        currentMoveString[2] - AAA <  BOARD_LEFT     )
2204       return 0;
2205
2206     piece = boards[yyboardindex]
2207       [currentMoveString[1] - ONE][currentMoveString[0] - AAA];
2208     if(promoted) piece = (ChessSquare) (DEMOTED piece);
2209     c = PieceToChar(piece);
2210     if(c == '~') c = PieceToChar((ChessSquare) (DEMOTED piece));
2211     if (ToLower(yytext[skip3]) != ToLower(c))
2212       return (int) IllegalMove;
2213
2214     result = LegalityTest(boards[yyboardindex],
2215                           PosFlags(yyboardindex), EP_UNKNOWN,
2216                           initialRights, /* [HGM] assume all castlings allowed */
2217                           currentMoveString[1] - ONE,
2218                           currentMoveString[0] - AAA,
2219                           currentMoveString[3] - ONE,
2220                           currentMoveString[2] - AAA,
2221                           currentMoveString[4]);
2222
2223     if (currentMoveString[4] == NULLCHAR &&
2224         (result == WhitePromotionKnight || result == BlackPromotionKnight ||
2225          result == WhitePromotionQueen  || result == BlackPromotionQueen)) {
2226         currentMoveString[4] = PieceToChar(BlackQueen);
2227         currentMoveString[5] = NULLCHAR;
2228     }
2229
2230     return (int) result;
2231 }
2232         YY_BREAK
2233 case 2:
2234 YY_RULE_SETUP
2235 {
2236     /*
2237      * Simple algebraic move, possibly with promotion
2238      * [HGM] Engine moves are received in this format, with lower-case promoChar!
2239      */
2240     int skip = 0;
2241     ChessMove result;
2242
2243     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2244
2245     /* remove the [xX:-] */
2246     if ((yytext[2] == 'x') || (yytext[2] == 'X') ||
2247         (yytext[2] == '-') || (yytext[2] == ':')) skip = 1;
2248
2249     currentMoveString[0] = yytext[0];
2250     currentMoveString[1] = yytext[1];
2251     currentMoveString[2] = yytext[2+skip];
2252     currentMoveString[3] = yytext[3+skip];
2253     currentMoveString[4] = NULLCHAR;
2254
2255     if (yyleng-skip > 4) { char c;
2256         if (yytext[yyleng-1] == ')') {
2257             c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
2258         } else {
2259             c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
2260         }
2261         currentMoveString[5] = NULLCHAR;
2262         if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
2263             return IllegalMove;
2264     }
2265
2266     /* [HGM] do not allow values beyond board size */
2267     if(currentMoveString[1] - ONE >= BOARD_HEIGHT ||
2268        currentMoveString[1] - ONE <  0            ||
2269        currentMoveString[0] - AAA >= BOARD_RGHT   ||
2270        currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2271        currentMoveString[3] - ONE <  0            ||
2272        currentMoveString[2] - AAA >= BOARD_RGHT   ||
2273        currentMoveString[0] - AAA <  BOARD_LEFT   ||
2274        currentMoveString[2] - AAA <  BOARD_LEFT     )
2275       return 0;
2276
2277     result = LegalityTest(boards[yyboardindex],
2278                           PosFlags(yyboardindex), EP_UNKNOWN,
2279                           initialRights, /* [HGM] assume all castlings allowed */
2280                           currentMoveString[1] - ONE,
2281                           currentMoveString[0] - AAA,
2282                           currentMoveString[3] - ONE,
2283                           currentMoveString[2] - AAA,
2284                           currentMoveString[4]);
2285
2286     if (currentMoveString[4] == NULLCHAR &&
2287         (result == WhitePromotionKnight || result == BlackPromotionKnight ||
2288          result == WhitePromotionQueen  || result == BlackPromotionQueen)) {
2289         if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier)
2290             currentMoveString[4] = PieceToChar(BlackFerz);
2291         else if(gameInfo.variant == VariantGreat)
2292             currentMoveString[4] = PieceToChar(BlackMan);
2293         else
2294             currentMoveString[4] = PieceToChar(BlackQueen);
2295         currentMoveString[5] = NULLCHAR;
2296     }
2297
2298     return (int) result;
2299 }
2300         YY_BREAK
2301 case 3:
2302 YY_RULE_SETUP
2303 {
2304     /*
2305      * Pawn move, possibly with promotion
2306      */
2307     DisambiguateClosure cl;
2308     int skip = 0; char c;
2309
2310     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2311
2312     /* remove the =() */
2313     if (yytext[2] == '=' && yytext[3] != NULLCHAR) skip++;
2314     if (yytext[2+skip] == '(') skip++;
2315
2316     cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2317     cl.rfIn = -1;
2318     cl.ffIn = yytext[0] - AAA;
2319     cl.rtIn = yytext[1] - ONE;
2320     cl.ftIn = yytext[0] - AAA;
2321     c = cl.promoCharIn = yytext[2+skip];
2322
2323     /* [HGM] do not allow values beyond board size */
2324     if(cl.rtIn >= BOARD_HEIGHT ||
2325        cl.rtIn <  0            ||
2326        cl.ffIn >= BOARD_RGHT   ||
2327        cl.ftIn <  BOARD_LEFT     )
2328       return 0;
2329
2330     if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
2331       return IllegalMove;
2332
2333
2334     Disambiguate(boards[yyboardindex],
2335                  PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2336
2337     currentMoveString[0] = cl.ff + AAA;
2338     currentMoveString[1] = cl.rf + ONE;
2339     currentMoveString[2] = cl.ft + AAA;
2340     currentMoveString[3] = cl.rt + ONE;
2341     currentMoveString[4] = cl.promoChar;
2342     currentMoveString[5] = NULLCHAR;
2343
2344     return (int) cl.kind;
2345 }
2346         YY_BREAK
2347 case 4:
2348 YY_RULE_SETUP
2349 {
2350     /*
2351      * Pawn capture, possibly with promotion, possibly ambiguous
2352      */
2353     DisambiguateClosure cl;
2354     int skip1 = 0, skip2 = 0; char c;
2355
2356     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2357
2358     /* remove trailing ep or e.p. (nonstandard PGN) */
2359     if (yytext[yyleng-1] == 'p') {
2360       yyleng -= 2;
2361       yytext[yyleng] = NULLCHAR;
2362     } else if (yytext[yyleng-1] == '.') {
2363       yyleng -= 4;
2364       yytext[yyleng] = NULLCHAR;
2365     }
2366
2367     /* remove the [xX:-] and =() */
2368     if ((yytext[1] == 'x') || (yytext[1] == 'X')
2369         || (yytext[1] == ':') || (yytext[1] == '-')) skip1 = 1;
2370     if (yytext[2+skip1] == '=' && yytext[3+skip1] != NULLCHAR) skip2++;
2371     if (yytext[2+skip1+skip2] == '(') skip2++;
2372
2373     cl.pieceIn = WhiteOnMove(yyboardindex) ? WhitePawn : BlackPawn;
2374     cl.rfIn = -1;
2375     cl.ffIn = yytext[0] - AAA;
2376     cl.rtIn = -1;
2377     cl.ftIn = yytext[1+skip1] - AAA;
2378     c = cl.promoCharIn = yytext[2+skip1+skip2];
2379
2380     /* [HGM] do not allow values beyond board size */
2381     if(cl.ffIn >= BOARD_RGHT  ||
2382        cl.ffIn <  BOARD_LEFT  ||
2383        cl.ftIn >= BOARD_RGHT  ||
2384        cl.ftIn <  BOARD_LEFT     )
2385       return 0;
2386
2387     if(c != '=' && c != '+' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
2388       return IllegalMove;
2389
2390     Disambiguate(boards[yyboardindex],
2391                  PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2392
2393     currentMoveString[0] = cl.ff + AAA;
2394     currentMoveString[1] = cl.rf + ONE;
2395     currentMoveString[2] = cl.ft + AAA;
2396     currentMoveString[3] = cl.rt + ONE;
2397     currentMoveString[4] = cl.promoChar;
2398     currentMoveString[5] = NULLCHAR;
2399
2400     return (int) cl.kind;
2401 }
2402         YY_BREAK
2403 case 5:
2404 YY_RULE_SETUP
2405 {
2406     /*
2407      * unambiguously abbreviated Pawn capture, possibly with promotion
2408      */
2409     int skip = 0;
2410     ChessMove result; char c;
2411
2412     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2413
2414     /* remove trailing ep or e.p. (nonstandard PGN) */
2415     if (yytext[yyleng-1] == 'p') {
2416       yyleng -= 2;
2417       yytext[yyleng] = NULLCHAR;
2418     } else if (yytext[yyleng-1] == '.') {
2419       yyleng -= 4;
2420       yytext[yyleng] = NULLCHAR;
2421     }
2422
2423     /* remove the [xX:-] */
2424     if ((yytext[1] == 'x') || (yytext[1] == 'X')
2425         || (yytext[1] == ':') || (yytext[1] == '-')) skip = 1;
2426
2427     currentMoveString[0] = yytext[0];
2428     currentMoveString[2] = yytext[1+skip];
2429     currentMoveString[3] = yytext[2+skip];
2430
2431     /* [HGM] do not allow values beyond board size */
2432     if(currentMoveString[0] - AAA >= BOARD_RGHT   ||
2433        currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2434        currentMoveString[3] - ONE <  0            ||
2435        currentMoveString[2] - AAA >= BOARD_RGHT   ||
2436        currentMoveString[0] - AAA <  BOARD_LEFT   ||
2437        currentMoveString[2] - AAA <  BOARD_LEFT     )
2438       return 0;
2439
2440     if (gameInfo.variant == VariantXiangqi && /* [HGM] In Xiangqi rank stays same */
2441          currentMoveString[0] != currentMoveString[2] ) {
2442         currentMoveString[1] = yytext[2+skip];
2443     } else 
2444     if (WhiteOnMove(yyboardindex)) {
2445         if (yytext[2+skip] == ONE) return (int) ImpossibleMove;
2446         currentMoveString[1] = yytext[2+skip] - 1;
2447     } else {
2448         currentMoveString[1] = currentMoveString[3] + 1;
2449         if (currentMoveString[3] == ONE+BOARD_HEIGHT-1) return (int) ImpossibleMove;
2450     }
2451     if (yyleng-skip > 3) {
2452         if (yytext[yyleng-1] == ')')
2453           c = currentMoveString[4] = ToLower(yytext[yyleng-2]);
2454         else
2455           c = currentMoveString[4] = ToLower(yytext[yyleng-1]);
2456         currentMoveString[5] = NULLCHAR;
2457         if(c != '=' && c != '+' && CharToPiece(c) == EmptySquare)
2458             return IllegalMove;
2459     } else {
2460         currentMoveString[4] = NULLCHAR;
2461     }
2462
2463     result = LegalityTest(boards[yyboardindex],
2464                           PosFlags(yyboardindex), EP_UNKNOWN,
2465                           initialRights, /* [HGM] assume all castlings allowed */
2466                           currentMoveString[1] - ONE,
2467                           currentMoveString[0] - AAA,
2468                           currentMoveString[3] - ONE,
2469                           currentMoveString[2] - AAA,
2470                           currentMoveString[4]);
2471
2472     if (currentMoveString[4] == NULLCHAR &&
2473         (result == WhitePromotionQueen  || result == BlackPromotionQueen ||
2474          result == WhitePromotionKnight || result == BlackPromotionKnight)) {
2475         currentMoveString[4] = PieceToChar(BlackQueen);
2476         // [HGM] shatranj: take care of variants without Queen
2477         if(gameInfo.variant == VariantShatranj || gameInfo.variant == VariantCourier)
2478             currentMoveString[4] = PieceToChar(BlackFerz);
2479         if(gameInfo.variant == VariantGreat)
2480             currentMoveString[4] = PieceToChar(BlackMan);
2481         currentMoveString[5] = NULLCHAR;
2482     }
2483
2484     if (result != IllegalMove) return (int) result;
2485
2486     /* Special case: improperly written en passant capture */
2487     if (WhiteOnMove(yyboardindex)) {
2488         if (currentMoveString[3] == '5') {
2489             currentMoveString[1] = '5';
2490             currentMoveString[3] = '6';
2491         } else {
2492             return (int) IllegalMove;
2493         }
2494     } else {
2495         if (currentMoveString[3] == '4') {
2496             currentMoveString[1] = '4';
2497             currentMoveString[3] = '3';
2498         } else {
2499             return (int) IllegalMove;
2500         }
2501     }
2502
2503     result = LegalityTest(boards[yyboardindex],
2504                           PosFlags(yyboardindex), EP_UNKNOWN,
2505                           initialRights, /* [HGM] assume all castlings allowed */
2506                           currentMoveString[1] - ONE,
2507                           currentMoveString[0] - AAA,
2508                           currentMoveString[3] - ONE,
2509                           currentMoveString[2] - AAA,
2510                           currentMoveString[4]);
2511
2512     if (result == WhiteCapturesEnPassant || result == BlackCapturesEnPassant)
2513       return (int) result;
2514     else
2515       return (int) IllegalMove;
2516 }
2517         YY_BREAK
2518 case 6:
2519 YY_RULE_SETUP
2520 {
2521     /*
2522      * piece move, possibly ambiguous
2523      */
2524     DisambiguateClosure cl;
2525     int skip = 0, skip2 = 0, promoted = 0;
2526
2527     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2528
2529     if(yytext[0] == '+') promoted = skip = skip2 = 1;
2530
2531     /* remove the [xX:-] */
2532     if ((yytext[1+skip] == 'x') || (yytext[1+skip] == 'X')
2533         || (yytext[1+skip] == ':') || (yytext[1+skip] == '-')) skip++;
2534
2535     if (WhiteOnMove(yyboardindex)) {
2536         cl.pieceIn = CharToPiece(ToUpper(yytext[skip2]));
2537     } else {
2538         cl.pieceIn = CharToPiece(ToLower(yytext[skip2]));
2539     }
2540     if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
2541
2542     cl.rfIn = -1;
2543     cl.ffIn = -1;
2544     cl.rtIn = yytext[2+skip] - ONE;
2545     cl.ftIn = yytext[1+skip] - AAA;
2546     cl.promoCharIn = NULLCHAR;
2547
2548     if(yyleng-skip > 3) /* [HGM] can have Shogi-style promotion */
2549         cl.promoCharIn = yytext[yyleng-1];
2550
2551     if (appData.debugMode) {
2552         fprintf(debugFP, "Parser Qa1: yyleng=%d,  %d(%d,%d)-(%d,%d) = %d (%c)\n",
2553         yyleng,
2554         cl.pieceIn,cl.ffIn,cl.rfIn,cl.ftIn,cl.rtIn,cl.promoCharIn,cl.promoCharIn?cl.promoCharIn:' ');
2555     }
2556
2557     /* [HGM] but do not allow values beyond board size */
2558     if(cl.rtIn >= BOARD_HEIGHT ||
2559        cl.rtIn <  0            ||
2560        cl.ftIn >= BOARD_RGHT   ||
2561        cl.ftIn <  BOARD_LEFT     )
2562       return 0;
2563
2564     Disambiguate(boards[yyboardindex],
2565                  PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2566
2567     currentMoveString[0] = cl.ff + AAA;
2568     currentMoveString[1] = cl.rf + ONE;
2569     currentMoveString[2] = cl.ft + AAA;
2570     currentMoveString[3] = cl.rt + ONE;
2571     currentMoveString[4] = cl.promoChar;
2572     currentMoveString[5] = NULLCHAR;
2573
2574     return (int) cl.kind;
2575 }
2576         YY_BREAK
2577 case 7:
2578 YY_RULE_SETUP
2579 {
2580     /*
2581      * piece move with rank or file disambiguator
2582      */
2583     DisambiguateClosure cl;
2584     int skip = 0, skip2 = 0; int promoted=0;
2585
2586     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2587
2588     if(yytext[0]=='+') promoted = skip = skip2 = 1;
2589
2590     /* remove the [xX:-] */
2591     if ((yytext[2+skip] == 'x') || (yytext[2+skip] == 'X')
2592         || (yytext[2+skip] == ':') || (yytext[2+skip] == '-')) skip++;
2593
2594     if (WhiteOnMove(yyboardindex)) {
2595         cl.pieceIn = CharToPiece(ToUpper(yytext[skip2]));
2596     } else {
2597         cl.pieceIn = CharToPiece(ToLower(yytext[skip2]));
2598     }
2599     if(promoted) cl.pieceIn = (ChessSquare) (PROMOTED cl.pieceIn);
2600
2601     if (isalpha(yytext[1+skip2])) {
2602         cl.rfIn = -1;
2603         cl.ffIn = yytext[1+skip2] - AAA;
2604        
2605         if(cl.ffIn >= BOARD_RGHT ||
2606            cl.ffIn <  BOARD_LEFT   ) return 0;
2607     } else {
2608         cl.rfIn = yytext[1+skip2] - ONE;
2609         cl.ffIn = -1;
2610         if(cl.rfIn >= BOARD_HEIGHT ||
2611            cl.rfIn <  0) return 0;
2612     }
2613     cl.rtIn = yytext[3+skip] - ONE;
2614     cl.ftIn = yytext[2+skip] - AAA;
2615     cl.promoCharIn = NULLCHAR;
2616
2617     if(yyleng-skip > 4) /* [HGM] can have Shogi-style promotion */
2618         cl.promoCharIn = yytext[yyleng-1];
2619
2620     /* [HGM] do not allow values beyond board size */
2621     if(cl.rtIn >= BOARD_HEIGHT ||
2622        cl.rtIn <  0            ||
2623        cl.ftIn >= BOARD_RGHT   ||
2624        cl.ftIn <  BOARD_LEFT     )
2625       return 0;
2626
2627     Disambiguate(boards[yyboardindex],
2628                  PosFlags(yyboardindex), EP_UNKNOWN, &cl);
2629
2630     currentMoveString[0] = cl.ff + AAA;
2631     currentMoveString[1] = cl.rf + ONE;
2632     currentMoveString[2] = cl.ft + AAA;
2633     currentMoveString[3] = cl.rt + ONE;
2634     currentMoveString[4] = cl.promoChar;
2635     currentMoveString[5] = NULLCHAR;
2636
2637     return (int) cl.kind;
2638 }
2639         YY_BREAK
2640 case 8:
2641 YY_RULE_SETUP
2642 {
2643     int rf, ff, rt, ft;
2644
2645     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2646
2647     /* [HGM] all squares referenced to board edges in stead of absolute */
2648     if (WhiteOnMove(yyboardindex)) {
2649         if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
2650             /* ICS wild castling */
2651             rf = 0;
2652             ff = (BOARD_WIDTH-1)>>1;
2653             rt = 0;
2654             ft = BOARD_RGHT-3;
2655         } else {
2656             rf = 0;
2657             ff = BOARD_WIDTH>>1;
2658             rt = 0;
2659             ft = BOARD_LEFT+2;
2660         }
2661     } else{ 
2662         if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
2663             /* ICS wild castling */
2664             rf = BOARD_HEIGHT-1;
2665             ff = (BOARD_WIDTH-1)>>1;
2666             rt = BOARD_HEIGHT-1;
2667             ft = BOARD_RGHT-3;
2668         } else {
2669             rf = BOARD_HEIGHT-1;
2670             ff = BOARD_WIDTH>>1;
2671             rt = BOARD_HEIGHT-1;
2672             ft = BOARD_LEFT+2;
2673         }
2674     }
2675     if(gameInfo.variant == VariantFischeRandom) {
2676         if (WhiteOnMove(yyboardindex)) {
2677             ff = initialRights[2];
2678             ft = initialRights[1];
2679         } else {
2680             ff = initialRights[5];
2681             ft = initialRights[4];
2682         }
2683         fprintf(debugFP, "Parser FRC long %d %d\n", ff, ft);
2684         if(ff < 0 || ft < 0) return 0;
2685     }
2686     sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2687     if (appData.debugMode) {
2688         fprintf(debugFP, "long castling %d %d\n", ff, ft);
2689     }
2690     return (int) LegalityTest(boards[yyboardindex],
2691                               PosFlags(yyboardindex), EP_UNKNOWN,
2692                               castlingRights[yyboardindex], /* [HGM] use true castling rights */
2693                               rf, ff, rt, ft, NULLCHAR);
2694 }
2695         YY_BREAK
2696 case 9:
2697 YY_RULE_SETUP
2698 {
2699     int rf, ff, rt, ft;
2700
2701     if (yyskipmoves) return (int) AmbiguousMove; /* not disambiguated */
2702
2703     if (WhiteOnMove(yyboardindex)) {
2704         if (boards[yyboardindex][0][(BOARD_WIDTH-1)>>1] == WhiteKing) {
2705             /* ICS wild castling */
2706             rf = 0;
2707             ff = (BOARD_WIDTH-1)>>1;
2708             rt = 0;
2709             ft = BOARD_LEFT+1;
2710         } else {
2711             rf = 0;
2712             ff = BOARD_WIDTH>>1;
2713             rt = 0;
2714             ft = BOARD_RGHT-2;
2715         }
2716     } else {
2717         if (boards[yyboardindex][BOARD_HEIGHT-1][(BOARD_WIDTH-1)>>1] == BlackKing) {
2718             /* ICS wild castling */
2719             rf = BOARD_HEIGHT-1;
2720             ff = (BOARD_WIDTH-1)>>1;
2721             rt = BOARD_HEIGHT-1;
2722             ft = BOARD_LEFT+1;
2723         } else {
2724             rf = BOARD_HEIGHT-1;
2725             ff = BOARD_WIDTH>>1;
2726             rt = BOARD_HEIGHT-1;
2727             ft = BOARD_RGHT-2;
2728         }
2729     }
2730     if(gameInfo.variant == VariantFischeRandom) {
2731         if (WhiteOnMove(yyboardindex)) {
2732             ff = initialRights[2];
2733             ft = initialRights[0];
2734         } else {
2735             ff = initialRights[5];
2736             ft = initialRights[3];
2737         }
2738     if (appData.debugMode) {
2739         fprintf(debugFP, "Parser FRC short %d %d\n", ff, ft);
2740     }
2741         if(ff < 0 || ft < 0) return 0;
2742     }
2743     sprintf(currentMoveString, "%c%c%c%c",ff+AAA,rf+ONE,ft+AAA,rt+ONE);
2744     if (appData.debugMode) {
2745         fprintf(debugFP, "short castling %d %d\n", ff, ft);
2746     }
2747
2748     return (int) LegalityTest(boards[yyboardindex],
2749                               PosFlags(yyboardindex), EP_UNKNOWN,
2750                               castlingRights[yyboardindex], /* [HGM] use true castling rights */
2751                               rf, ff, rt, ft, NULLCHAR);
2752 }
2753         YY_BREAK
2754 case 10:
2755 YY_RULE_SETUP
2756 {
2757     /* Bughouse piece drop.  No legality checking for now. */
2758     currentMoveString[1] = '@';
2759     currentMoveString[2] = yytext[2];
2760     currentMoveString[3] = yytext[3];
2761     currentMoveString[4] = NULLCHAR;
2762
2763     if (appData.debugMode) {
2764         fprintf(debugFP, "Drop: %s\n", currentMoveString);
2765     }
2766     /* [HGM] do not allow values beyond board size */
2767     if(currentMoveString[3] - ONE >= BOARD_HEIGHT ||
2768        currentMoveString[2] - AAA >= BOARD_WIDTH     )
2769       return 0;
2770
2771     if (WhiteOnMove(yyboardindex)) {
2772         currentMoveString[0] = ToUpper(yytext[0]);
2773         return (int) WhiteDrop;
2774     } else {
2775         currentMoveString[0] = ToLower(yytext[0]);
2776         return (int) BlackDrop;
2777     }
2778 }
2779         YY_BREAK
2780 case 11:
2781 YY_RULE_SETUP
2782 {
2783     if (WhiteOnMove(yyboardindex))
2784       return (int) BlackWins;
2785     else
2786       return (int) WhiteWins;
2787 }
2788         YY_BREAK
2789 case 12:
2790 YY_RULE_SETUP
2791 {
2792     return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2793 }
2794         YY_BREAK
2795 case 13:
2796 YY_RULE_SETUP
2797 {
2798     return (int) GameUnfinished;
2799 }
2800         YY_BREAK
2801 case 14:
2802 YY_RULE_SETUP
2803 {
2804     return (int) GameIsDrawn;
2805 }
2806         YY_BREAK
2807 case 15:
2808 YY_RULE_SETUP
2809 {
2810     return (int) GameIsDrawn;
2811 }
2812         YY_BREAK
2813 case 16:
2814 YY_RULE_SETUP
2815 {
2816     if (WhiteOnMove(yyboardindex))
2817       return (int) BlackWins;
2818     else
2819       return (int) WhiteWins;
2820 }
2821         YY_BREAK
2822 case 17:
2823 YY_RULE_SETUP
2824 {
2825     if (WhiteOnMove(yyboardindex))
2826       return (int) BlackWins;
2827     else
2828       return (int) WhiteWins;
2829 }
2830         YY_BREAK
2831 case 18:
2832 YY_RULE_SETUP
2833 {
2834     return (int) GameIsDrawn;
2835 }
2836         YY_BREAK
2837 case 19:
2838 YY_RULE_SETUP
2839 {
2840     return (int) GameIsDrawn;
2841 }
2842         YY_BREAK
2843 case 20:
2844 YY_RULE_SETUP
2845 {
2846     return (int) (ToUpper(yytext[0]) == 'W' ? WhiteWins : BlackWins);
2847 }
2848         YY_BREAK
2849 case 21:
2850 YY_RULE_SETUP
2851 {
2852     return (int) (ToUpper(yytext[0]) == 'W' ? BlackWins : WhiteWins);
2853 }
2854         YY_BREAK
2855 case 22:
2856 YY_RULE_SETUP
2857
2858     return (int) WhiteWins;
2859 }
2860         YY_BREAK
2861 case 23:
2862 YY_RULE_SETUP
2863
2864     return (int) BlackWins;
2865 }
2866         YY_BREAK
2867 case 24:
2868 YY_RULE_SETUP
2869 {
2870     return (int) GameIsDrawn;
2871 }
2872         YY_BREAK
2873 case 25:
2874 YY_RULE_SETUP
2875 {
2876     return (int) GameUnfinished;
2877 }
2878         YY_BREAK
2879 case 26:
2880 YY_RULE_SETUP
2881 {
2882     /* move numbers */
2883     if ((yyleng == 1) && (yytext[0] == '1'))
2884       return (int) MoveNumberOne;
2885 }
2886         YY_BREAK
2887 case 27:
2888 YY_RULE_SETUP
2889 {
2890     /* elapsed time indication, e.g. (0:12) or {10:21.071} */ 
2891     return (int) ElapsedTime;
2892 }
2893         YY_BREAK
2894 case 28:
2895 YY_RULE_SETUP
2896 {
2897     /* position diagram enclosed in [-- --] */
2898     return (int) PositionDiagram;
2899 }
2900         YY_BREAK
2901 case 29:
2902 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2903 yy_c_buf_p = yy_cp -= 1;
2904 YY_DO_BEFORE_ACTION; /* set up yytext again */
2905 YY_RULE_SETUP
2906 {
2907     /* position diagram enclosed in {-- --} */
2908     return (int) PositionDiagram;
2909 }
2910         YY_BREAK
2911 case 30:
2912 YY_RULE_SETUP
2913 {
2914     return (int) PGNTag;
2915 }    
2916         YY_BREAK
2917 case 31:
2918 YY_RULE_SETUP
2919 {
2920     return (int) GNUChessGame;
2921 }
2922         YY_BREAK
2923 case 32:
2924 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2925 yy_c_buf_p = yy_cp -= 1;
2926 YY_DO_BEFORE_ACTION; /* set up yytext again */
2927 YY_RULE_SETUP
2928 {
2929     return (int) XBoardGame;
2930 }
2931         YY_BREAK
2932 case 33:
2933 YY_RULE_SETUP
2934 {                               /* numeric annotation glyph */
2935     return (int) NAG;
2936 }
2937         YY_BREAK
2938 case 34:
2939 YY_RULE_SETUP
2940 {                               /* anything in {} */
2941     return (int) Comment; 
2942 }
2943         YY_BREAK
2944 case 35:
2945 *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
2946 yy_c_buf_p = yy_cp -= 1;
2947 YY_DO_BEFORE_ACTION; /* set up yytext again */
2948 YY_RULE_SETUP
2949 {                                          /* ; to end of line */
2950     return (int) Comment;
2951 }
2952         YY_BREAK
2953 case 36:
2954 YY_RULE_SETUP
2955 {                               /* anything in [] */
2956     return (int) Comment; 
2957 }
2958         YY_BREAK
2959 case 37:
2960 YY_RULE_SETUP
2961 {               /* nested () */
2962     return (int) Comment; 
2963 }
2964         YY_BREAK
2965 case 38:
2966 YY_RULE_SETUP
2967 {                               /* >=2 chars in () */
2968     return (int) Comment; 
2969 }       
2970         YY_BREAK
2971 case 39:
2972 YY_RULE_SETUP
2973 {
2974         /* Skip mail headers */
2975 }
2976         YY_BREAK
2977 case 40:
2978 YY_RULE_SETUP
2979 {
2980         /* Skip random words */
2981 }
2982         YY_BREAK
2983 case 41:
2984 YY_RULE_SETUP
2985 {
2986         /* Skip everything else */
2987 }
2988         YY_BREAK
2989 case 42:
2990 YY_RULE_SETUP
2991 ECHO;
2992         YY_BREAK
2993                         case YY_STATE_EOF(INITIAL):
2994                                 yyterminate();
2995
2996         case YY_END_OF_BUFFER:
2997                 {
2998                 /* Amount of text matched not including the EOB char. */
2999                 int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
3000
3001                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
3002                 *yy_cp = yy_hold_char;
3003                 YY_RESTORE_YY_MORE_OFFSET
3004
3005                 if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
3006                         {
3007                         /* We're scanning a new file or input source.  It's
3008                          * possible that this happened because the user
3009                          * just pointed yyin at a new source and called
3010                          * yylex().  If so, then we have to assure
3011                          * consistency between yy_current_buffer and our
3012                          * globals.  Here is the right place to do so, because
3013                          * this is the first action (other than possibly a
3014                          * back-up) that will match for the new input source.
3015                          */
3016                         yy_n_chars = yy_current_buffer->yy_n_chars;
3017                         yy_current_buffer->yy_input_file = yyin;
3018                         yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
3019                         }
3020
3021                 /* Note that here we test for yy_c_buf_p "<=" to the position
3022                  * of the first EOB in the buffer, since yy_c_buf_p will
3023                  * already have been incremented past the NUL character
3024                  * (since all states make transitions on EOB to the
3025                  * end-of-buffer state).  Contrast this with the test
3026                  * in input().
3027                  */
3028                 if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
3029                         { /* This was really a NUL. */
3030                         yy_state_type yy_next_state;
3031
3032                         yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
3033
3034                         yy_current_state = yy_get_previous_state();
3035
3036                         /* Okay, we're now positioned to make the NUL
3037                          * transition.  We couldn't have
3038                          * yy_get_previous_state() go ahead and do it
3039                          * for us because it doesn't know how to deal
3040                          * with the possibility of jamming (and we don't
3041                          * want to build jamming into it because then it
3042                          * will run more slowly).
3043                          */
3044
3045                         yy_next_state = yy_try_NUL_trans( yy_current_state );
3046
3047                         yy_bp = yytext_ptr + YY_MORE_ADJ;
3048
3049                         if ( yy_next_state )
3050                                 {
3051                                 /* Consume the NUL. */
3052                                 yy_cp = ++yy_c_buf_p;
3053                                 yy_current_state = yy_next_state;
3054                                 goto yy_match;
3055                                 }
3056
3057                         else
3058                                 {
3059                                 yy_cp = yy_c_buf_p;
3060                                 goto yy_find_action;
3061                                 }
3062                         }
3063
3064                 else switch ( yy_get_next_buffer() )
3065                         {
3066                         case EOB_ACT_END_OF_FILE:
3067                                 {
3068                                 yy_did_buffer_switch_on_eof = 0;
3069
3070                                 if ( yywrap() )
3071                                         {
3072                                         /* Note: because we've taken care in
3073                                          * yy_get_next_buffer() to have set up
3074                                          * yytext, we can now set up
3075                                          * yy_c_buf_p so that if some total
3076                                          * hoser (like flex itself) wants to
3077                                          * call the scanner after we return the
3078                                          * YY_NULL, it'll still work - another
3079                                          * YY_NULL will get returned.
3080                                          */
3081                                         yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
3082
3083                                         yy_act = YY_STATE_EOF(YY_START);
3084                                         goto do_action;
3085                                         }
3086
3087                                 else
3088                                         {
3089                                         if ( ! yy_did_buffer_switch_on_eof )
3090                                                 YY_NEW_FILE;
3091                                         }
3092                                 break;
3093                                 }
3094
3095                         case EOB_ACT_CONTINUE_SCAN:
3096                                 yy_c_buf_p =
3097                                         yytext_ptr + yy_amount_of_matched_text;
3098
3099                                 yy_current_state = yy_get_previous_state();
3100
3101                                 yy_cp = yy_c_buf_p;
3102                                 yy_bp = yytext_ptr + YY_MORE_ADJ;
3103                                 goto yy_match;
3104
3105                         case EOB_ACT_LAST_MATCH:
3106                                 yy_c_buf_p =
3107                                 &yy_current_buffer->yy_ch_buf[yy_n_chars];
3108
3109                                 yy_current_state = yy_get_previous_state();
3110
3111                                 yy_cp = yy_c_buf_p;
3112                                 yy_bp = yytext_ptr + YY_MORE_ADJ;
3113                                 goto yy_find_action;
3114                         }
3115                 break;
3116                 }
3117
3118         default:
3119                 YY_FATAL_ERROR(
3120                         "fatal flex scanner internal error--no action found" );
3121         } /* end of action switch */
3122                 } /* end of scanning one token */
3123         } /* end of yylex */
3124
3125
3126 /* yy_get_next_buffer - try to read in a new buffer
3127  *
3128  * Returns a code representing an action:
3129  *      EOB_ACT_LAST_MATCH -
3130  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
3131  *      EOB_ACT_END_OF_FILE - end of file
3132  */
3133
3134 static int yy_get_next_buffer()
3135         {
3136         register char *dest = yy_current_buffer->yy_ch_buf;
3137         register char *source = yytext_ptr;
3138         register int number_to_move, i;
3139         int ret_val;
3140
3141         if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
3142                 YY_FATAL_ERROR(
3143                 "fatal flex scanner internal error--end of buffer missed" );
3144
3145         if ( yy_current_buffer->yy_fill_buffer == 0 )
3146                 { /* Don't try to fill the buffer, so this is an EOF. */
3147                 if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
3148                         {
3149                         /* We matched a single character, the EOB, so
3150                          * treat this as a final EOF.
3151                          */
3152                         return EOB_ACT_END_OF_FILE;
3153                         }
3154
3155                 else
3156                         {
3157                         /* We matched some text prior to the EOB, first
3158                          * process it.
3159                          */
3160                         return EOB_ACT_LAST_MATCH;
3161                         }
3162                 }
3163
3164         /* Try to read more data. */
3165
3166         /* First move last chars to start of buffer. */
3167         number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
3168
3169         for ( i = 0; i < number_to_move; ++i )
3170                 *(dest++) = *(source++);
3171
3172         if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
3173                 /* don't do the read, it's not guaranteed to return an EOF,
3174                  * just force an EOF
3175                  */
3176                 yy_current_buffer->yy_n_chars = yy_n_chars = 0;
3177
3178         else
3179                 {
3180                 int num_to_read =
3181                         yy_current_buffer->yy_buf_size - number_to_move - 1;
3182
3183                 while ( num_to_read <= 0 )
3184                         { /* Not enough room in the buffer - grow it. */
3185 #ifdef YY_USES_REJECT
3186                         YY_FATAL_ERROR(
3187 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
3188 #else
3189
3190                         /* just a shorter name for the current buffer */
3191                         YY_BUFFER_STATE b = yy_current_buffer;
3192
3193                         int yy_c_buf_p_offset =
3194                                 (int) (yy_c_buf_p - b->yy_ch_buf);
3195
3196                         if ( b->yy_is_our_buffer )
3197                                 {
3198                                 int new_size = b->yy_buf_size * 2;
3199
3200                                 if ( new_size <= 0 )
3201                                         b->yy_buf_size += b->yy_buf_size / 8;
3202                                 else
3203                                         b->yy_buf_size *= 2;
3204
3205                                 b->yy_ch_buf = (char *)
3206                                         /* Include room in for 2 EOB chars. */
3207                                         yy_flex_realloc( (void *) b->yy_ch_buf,
3208                                                          b->yy_buf_size + 2 );
3209                                 }
3210                         else
3211                                 /* Can't grow it, we don't own it. */
3212                                 b->yy_ch_buf = 0;
3213
3214                         if ( ! b->yy_ch_buf )
3215                                 YY_FATAL_ERROR(
3216                                 "fatal error - scanner input buffer overflow" );
3217
3218                         yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
3219
3220                         num_to_read = yy_current_buffer->yy_buf_size -
3221                                                 number_to_move - 1;
3222 #endif
3223                         }
3224
3225                 if ( num_to_read > YY_READ_BUF_SIZE )
3226                         num_to_read = YY_READ_BUF_SIZE;
3227
3228                 /* Read in more data. */
3229                 YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
3230                         yy_n_chars, num_to_read );
3231
3232                 yy_current_buffer->yy_n_chars = yy_n_chars;
3233                 }
3234
3235         if ( yy_n_chars == 0 )
3236                 {
3237                 if ( number_to_move == YY_MORE_ADJ )
3238                         {
3239                         ret_val = EOB_ACT_END_OF_FILE;
3240                         yyrestart( yyin );
3241                         }
3242
3243                 else
3244                         {
3245                         ret_val = EOB_ACT_LAST_MATCH;
3246                         yy_current_buffer->yy_buffer_status =
3247                                 YY_BUFFER_EOF_PENDING;
3248                         }
3249                 }
3250
3251         else
3252                 ret_val = EOB_ACT_CONTINUE_SCAN;
3253
3254         yy_n_chars += number_to_move;
3255         yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
3256         yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
3257
3258         yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
3259
3260         return ret_val;
3261         }
3262
3263
3264 /* yy_get_previous_state - get the state just before the EOB char was reached */
3265
3266 static yy_state_type yy_get_previous_state()
3267         {
3268         register yy_state_type yy_current_state;
3269         register char *yy_cp;
3270
3271         yy_current_state = yy_start;
3272         yy_current_state += YY_AT_BOL();
3273         yy_state_ptr = yy_state_buf;
3274         *yy_state_ptr++ = yy_current_state;
3275
3276         for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
3277                 {
3278                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
3279                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3280                         {
3281                         yy_current_state = (int) yy_def[yy_current_state];
3282                         if ( yy_current_state >= 697 )
3283                                 yy_c = yy_meta[(unsigned int) yy_c];
3284                         }
3285                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3286                 *yy_state_ptr++ = yy_current_state;
3287                 }
3288
3289         return yy_current_state;
3290         }
3291
3292
3293 /* yy_try_NUL_trans - try to make a transition on the NUL character
3294  *
3295  * synopsis
3296  *      next_state = yy_try_NUL_trans( current_state );
3297  */
3298
3299 #ifdef YY_USE_PROTOS
3300 static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
3301 #else
3302 static yy_state_type yy_try_NUL_trans( yy_current_state )
3303 yy_state_type yy_current_state;
3304 #endif
3305         {
3306         register int yy_is_jam;
3307
3308         register YY_CHAR yy_c = 1;
3309         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
3310                 {
3311                 yy_current_state = (int) yy_def[yy_current_state];
3312                 if ( yy_current_state >= 697 )
3313                         yy_c = yy_meta[(unsigned int) yy_c];
3314                 }
3315         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
3316         yy_is_jam = (yy_current_state == 696);
3317         if ( ! yy_is_jam )
3318                 *yy_state_ptr++ = yy_current_state;
3319
3320         return yy_is_jam ? 0 : yy_current_state;
3321         }
3322
3323
3324 #ifndef YY_NO_UNPUT
3325 #ifdef YY_USE_PROTOS
3326 static void yyunput( int c, register char *yy_bp )
3327 #else
3328 static void yyunput( c, yy_bp )
3329 int c;
3330 register char *yy_bp;
3331 #endif
3332         {
3333         register char *yy_cp = yy_c_buf_p;
3334
3335         /* undo effects of setting up yytext */
3336         *yy_cp = yy_hold_char;
3337
3338         if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3339                 { /* need to shift things up to make room */
3340                 /* +2 for EOB chars. */
3341                 register int number_to_move = yy_n_chars + 2;
3342                 register char *dest = &yy_current_buffer->yy_ch_buf[
3343                                         yy_current_buffer->yy_buf_size + 2];
3344                 register char *source =
3345                                 &yy_current_buffer->yy_ch_buf[number_to_move];
3346
3347                 while ( source > yy_current_buffer->yy_ch_buf )
3348                         *--dest = *--source;
3349
3350                 yy_cp += (int) (dest - source);
3351                 yy_bp += (int) (dest - source);
3352                 yy_current_buffer->yy_n_chars =
3353                         yy_n_chars = yy_current_buffer->yy_buf_size;
3354
3355                 if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
3356                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
3357                 }
3358
3359         *--yy_cp = (char) c;
3360
3361
3362         yytext_ptr = yy_bp;
3363         yy_hold_char = *yy_cp;
3364         yy_c_buf_p = yy_cp;
3365         }
3366 #endif  /* ifndef YY_NO_UNPUT */
3367
3368
3369 #ifdef __cplusplus
3370 static int yyinput()
3371 #else
3372 static int input()
3373 #endif
3374         {
3375         int c;
3376
3377         *yy_c_buf_p = yy_hold_char;
3378
3379         if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
3380                 {
3381                 /* yy_c_buf_p now points to the character we want to return.
3382                  * If this occurs *before* the EOB characters, then it's a
3383                  * valid NUL; if not, then we've hit the end of the buffer.
3384                  */
3385                 if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
3386                         /* This was really a NUL. */
3387                         *yy_c_buf_p = '\0';
3388
3389                 else
3390                         { /* need more input */
3391                         int offset = yy_c_buf_p - yytext_ptr;
3392                         ++yy_c_buf_p;
3393
3394                         switch ( yy_get_next_buffer() )
3395                                 {
3396                                 case EOB_ACT_LAST_MATCH:
3397                                         /* This happens because yy_g_n_b()
3398                                          * sees that we've accumulated a
3399                                          * token and flags that we need to
3400                                          * try matching the token before
3401                                          * proceeding.  But for input(),
3402                                          * there's no matching to consider.
3403                                          * So convert the EOB_ACT_LAST_MATCH
3404                                          * to EOB_ACT_END_OF_FILE.
3405                                          */
3406
3407                                         /* Reset buffer status. */
3408                                         yyrestart( yyin );
3409
3410                                         /* fall through */
3411
3412                                 case EOB_ACT_END_OF_FILE:
3413                                         {
3414                                         if ( yywrap() )
3415                                                 return EOF;
3416
3417                                         if ( ! yy_did_buffer_switch_on_eof )
3418                                                 YY_NEW_FILE;
3419 #ifdef __cplusplus
3420                                         return yyinput();
3421 #else
3422                                         return input();
3423 #endif
3424                                         }
3425
3426                                 case EOB_ACT_CONTINUE_SCAN:
3427                                         yy_c_buf_p = yytext_ptr + offset;
3428                                         break;
3429                                 }
3430                         }
3431                 }
3432
3433         c = *(unsigned char *) yy_c_buf_p;      /* cast for 8-bit char's */
3434         *yy_c_buf_p = '\0';     /* preserve yytext */
3435         yy_hold_char = *++yy_c_buf_p;
3436
3437         yy_current_buffer->yy_at_bol = (c == '\n');
3438
3439         return c;
3440         }
3441
3442
3443 #ifdef YY_USE_PROTOS
3444 void yyrestart( FILE *input_file )
3445 #else
3446 void yyrestart( input_file )
3447 FILE *input_file;
3448 #endif
3449         {
3450         if ( ! yy_current_buffer )
3451                 yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
3452
3453         yy_init_buffer( yy_current_buffer, input_file );
3454         yy_load_buffer_state();
3455         }
3456
3457
3458 #ifdef YY_USE_PROTOS
3459 void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
3460 #else
3461 void yy_switch_to_buffer( new_buffer )
3462 YY_BUFFER_STATE new_buffer;
3463 #endif
3464         {
3465         if ( yy_current_buffer == new_buffer )
3466                 return;
3467
3468         if ( yy_current_buffer )
3469                 {
3470                 /* Flush out information for old buffer. */
3471                 *yy_c_buf_p = yy_hold_char;
3472                 yy_current_buffer->yy_buf_pos = yy_c_buf_p;
3473                 yy_current_buffer->yy_n_chars = yy_n_chars;
3474                 }
3475
3476         yy_current_buffer = new_buffer;
3477         yy_load_buffer_state();
3478
3479         /* We don't actually know whether we did this switch during
3480          * EOF (yywrap()) processing, but the only time this flag
3481          * is looked at is after yywrap() is called, so it's safe
3482          * to go ahead and always set it.
3483          */
3484         yy_did_buffer_switch_on_eof = 1;
3485         }
3486
3487
3488 #ifdef YY_USE_PROTOS
3489 void yy_load_buffer_state( void )
3490 #else
3491 void yy_load_buffer_state()
3492 #endif
3493         {
3494         yy_n_chars = yy_current_buffer->yy_n_chars;
3495         yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
3496         yyin = yy_current_buffer->yy_input_file;
3497         yy_hold_char = *yy_c_buf_p;
3498         }
3499
3500
3501 #ifdef YY_USE_PROTOS
3502 YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
3503 #else
3504 YY_BUFFER_STATE yy_create_buffer( file, size )
3505 FILE *file;
3506 int size;
3507 #endif
3508         {
3509         YY_BUFFER_STATE b;
3510
3511         b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3512         if ( ! b )
3513                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3514
3515         b->yy_buf_size = size;
3516
3517         /* yy_ch_buf has to be 2 characters longer than the size given because
3518          * we need to put in 2 end-of-buffer characters.
3519          */
3520         b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
3521         if ( ! b->yy_ch_buf )
3522                 YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
3523
3524         b->yy_is_our_buffer = 1;
3525
3526         yy_init_buffer( b, file );
3527
3528         return b;
3529         }
3530
3531
3532 #ifdef YY_USE_PROTOS
3533 void yy_delete_buffer( YY_BUFFER_STATE b )
3534 #else
3535 void yy_delete_buffer( b )
3536 YY_BUFFER_STATE b;
3537 #endif
3538         {
3539         if ( ! b )
3540                 return;
3541
3542         if ( b == yy_current_buffer )
3543                 yy_current_buffer = (YY_BUFFER_STATE) 0;
3544
3545         if ( b->yy_is_our_buffer )
3546                 yy_flex_free( (void *) b->yy_ch_buf );
3547
3548         yy_flex_free( (void *) b );
3549         }
3550
3551
3552 #ifndef _WIN32
3553 #include <unistd.h>
3554 #else
3555 #ifndef YY_ALWAYS_INTERACTIVE
3556 #ifndef YY_NEVER_INTERACTIVE
3557 extern int isatty YY_PROTO(( int ));
3558 #endif
3559 #endif
3560 #endif
3561
3562 #ifdef YY_USE_PROTOS
3563 void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
3564 #else
3565 void yy_init_buffer( b, file )
3566 YY_BUFFER_STATE b;
3567 FILE *file;
3568 #endif
3569
3570
3571         {
3572         yy_flush_buffer( b );
3573
3574         b->yy_input_file = file;
3575         b->yy_fill_buffer = 1;
3576
3577 #if YY_ALWAYS_INTERACTIVE
3578         b->yy_is_interactive = 1;
3579 #else
3580 #if YY_NEVER_INTERACTIVE
3581         b->yy_is_interactive = 0;
3582 #else
3583         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
3584 #endif
3585 #endif
3586         }
3587
3588
3589 #ifdef YY_USE_PROTOS
3590 void yy_flush_buffer( YY_BUFFER_STATE b )
3591 #else
3592 void yy_flush_buffer( b )
3593 YY_BUFFER_STATE b;
3594 #endif
3595
3596         {
3597         if ( ! b )
3598                 return;
3599
3600         b->yy_n_chars = 0;
3601
3602         /* We always need two end-of-buffer characters.  The first causes
3603          * a transition to the end-of-buffer state.  The second causes
3604          * a jam in that state.
3605          */
3606         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
3607         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
3608
3609         b->yy_buf_pos = &b->yy_ch_buf[0];
3610
3611         b->yy_at_bol = 1;
3612         b->yy_buffer_status = YY_BUFFER_NEW;
3613
3614         if ( b == yy_current_buffer )
3615                 yy_load_buffer_state();
3616         }
3617
3618
3619 #ifndef YY_NO_SCAN_BUFFER
3620 #ifdef YY_USE_PROTOS
3621 YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
3622 #else
3623 YY_BUFFER_STATE yy_scan_buffer( base, size )
3624 char *base;
3625 yy_size_t size;
3626 #endif
3627         {
3628         YY_BUFFER_STATE b;
3629
3630         if ( size < 2 ||
3631              base[size-2] != YY_END_OF_BUFFER_CHAR ||
3632              base[size-1] != YY_END_OF_BUFFER_CHAR )
3633                 /* They forgot to leave room for the EOB's. */
3634                 return 0;
3635
3636         b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
3637         if ( ! b )
3638                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
3639
3640         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
3641         b->yy_buf_pos = b->yy_ch_buf = base;
3642         b->yy_is_our_buffer = 0;
3643         b->yy_input_file = 0;
3644         b->yy_n_chars = b->yy_buf_size;
3645         b->yy_is_interactive = 0;
3646         b->yy_at_bol = 1;
3647         b->yy_fill_buffer = 0;
3648         b->yy_buffer_status = YY_BUFFER_NEW;
3649
3650         yy_switch_to_buffer( b );
3651
3652         return b;
3653         }
3654 #endif
3655
3656
3657 #ifndef YY_NO_SCAN_STRING
3658 #ifdef YY_USE_PROTOS
3659 YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
3660 #else
3661 YY_BUFFER_STATE yy_scan_string( yy_str )
3662 yyconst char *yy_str;
3663 #endif
3664         {
3665         int len;
3666         for ( len = 0; yy_str[len]; ++len )
3667                 ;
3668
3669         return yy_scan_bytes( yy_str, len );
3670         }
3671 #endif
3672
3673
3674 #ifndef YY_NO_SCAN_BYTES
3675 #ifdef YY_USE_PROTOS
3676 YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
3677 #else
3678 YY_BUFFER_STATE yy_scan_bytes( bytes, len )
3679 yyconst char *bytes;
3680 int len;
3681 #endif
3682         {
3683         YY_BUFFER_STATE b;
3684         char *buf;
3685         yy_size_t n;
3686         int i;
3687
3688         /* Get memory for full buffer, including space for trailing EOB's. */
3689         n = len + 2;
3690         buf = (char *) yy_flex_alloc( n );
3691         if ( ! buf )
3692                 YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
3693
3694         for ( i = 0; i < len; ++i )
3695                 buf[i] = bytes[i];
3696
3697         buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
3698
3699         b = yy_scan_buffer( buf, n );
3700         if ( ! b )
3701                 YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
3702
3703         /* It's okay to grow etc. this buffer, and we should throw it
3704          * away when we're done.
3705          */
3706         b->yy_is_our_buffer = 1;
3707
3708         return b;
3709         }
3710 #endif
3711
3712
3713 #ifndef YY_NO_PUSH_STATE
3714 #ifdef YY_USE_PROTOS
3715 static void yy_push_state( int new_state )
3716 #else
3717 static void yy_push_state( new_state )
3718 int new_state;
3719 #endif
3720         {
3721         if ( yy_start_stack_ptr >= yy_start_stack_depth )
3722                 {
3723                 yy_size_t new_size;
3724
3725                 yy_start_stack_depth += YY_START_STACK_INCR;
3726                 new_size = yy_start_stack_depth * sizeof( int );
3727
3728                 if ( ! yy_start_stack )
3729                         yy_start_stack = (int *) yy_flex_alloc( new_size );
3730
3731                 else
3732                         yy_start_stack = (int *) yy_flex_realloc(
3733                                         (void *) yy_start_stack, new_size );
3734
3735                 if ( ! yy_start_stack )
3736                         YY_FATAL_ERROR(
3737                         "out of memory expanding start-condition stack" );
3738                 }
3739
3740         yy_start_stack[yy_start_stack_ptr++] = YY_START;
3741
3742         BEGIN(new_state);
3743         }
3744 #endif
3745
3746
3747 #ifndef YY_NO_POP_STATE
3748 static void yy_pop_state()
3749         {
3750         if ( --yy_start_stack_ptr < 0 )
3751                 YY_FATAL_ERROR( "start-condition stack underflow" );
3752
3753         BEGIN(yy_start_stack[yy_start_stack_ptr]);
3754         }
3755 #endif
3756
3757
3758 #ifndef YY_NO_TOP_STATE
3759 static int yy_top_state()
3760         {
3761         return yy_start_stack[yy_start_stack_ptr - 1];
3762         }
3763 #endif
3764
3765 #ifndef YY_EXIT_FAILURE
3766 #define YY_EXIT_FAILURE 2
3767 #endif
3768
3769 #ifdef YY_USE_PROTOS
3770 static void yy_fatal_error( yyconst char msg[] )
3771 #else
3772 static void yy_fatal_error( msg )
3773 char msg[];
3774 #endif
3775         {
3776         (void) fprintf( stderr, "%s\n", msg );
3777         exit( YY_EXIT_FAILURE );
3778         }
3779
3780
3781
3782 /* Redefine yyless() so it works in section 3 code. */
3783
3784 #undef yyless
3785 #define yyless(n) \
3786         do \
3787                 { \
3788                 /* Undo effects of setting up yytext. */ \
3789                 yytext[yyleng] = yy_hold_char; \
3790                 yy_c_buf_p = yytext + n; \
3791                 yy_hold_char = *yy_c_buf_p; \
3792                 *yy_c_buf_p = '\0'; \
3793                 yyleng = n; \
3794                 } \
3795         while ( 0 )
3796
3797
3798 /* Internal utility routines. */
3799
3800 #ifndef yytext_ptr
3801 #ifdef YY_USE_PROTOS
3802 static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
3803 #else
3804 static void yy_flex_strncpy( s1, s2, n )
3805 char *s1;
3806 yyconst char *s2;
3807 int n;
3808 #endif
3809         {
3810         register int i;
3811         for ( i = 0; i < n; ++i )
3812                 s1[i] = s2[i];
3813         }
3814 #endif
3815
3816 #ifdef YY_NEED_STRLEN
3817 #ifdef YY_USE_PROTOS
3818 static int yy_flex_strlen( yyconst char *s )
3819 #else
3820 static int yy_flex_strlen( s )
3821 yyconst char *s;
3822 #endif
3823         {
3824         register int n;
3825         for ( n = 0; s[n]; ++n )
3826                 ;
3827
3828         return n;
3829         }
3830 #endif
3831
3832
3833 #ifdef YY_USE_PROTOS
3834 static void *yy_flex_alloc( yy_size_t size )
3835 #else
3836 static void *yy_flex_alloc( size )
3837 yy_size_t size;
3838 #endif
3839         {
3840         return (void *) malloc( size );
3841         }
3842
3843 #ifdef YY_USE_PROTOS
3844 static void *yy_flex_realloc( void *ptr, yy_size_t size )
3845 #else
3846 static void *yy_flex_realloc( ptr, size )
3847 void *ptr;
3848 yy_size_t size;
3849 #endif
3850         {
3851         /* The cast to (char *) in the following accommodates both
3852          * implementations that use char* generic pointers, and those
3853          * that use void* generic pointers.  It works with the latter
3854          * because both ANSI C and C++ allow castless assignment from
3855          * any pointer type to void*, and deal with argument conversions
3856          * as though doing an assignment.
3857          */
3858         return (void *) realloc( (char *) ptr, size );
3859         }
3860
3861 #ifdef YY_USE_PROTOS
3862 static void yy_flex_free( void *ptr )
3863 #else
3864 static void yy_flex_free( ptr )
3865 void *ptr;
3866 #endif
3867         {
3868         free( ptr );
3869         }
3870
3871 #if YY_MAIN
3872 int main()
3873         {
3874         yylex();
3875         return 0;
3876         }
3877 #endif
3878
3879
3880
3881 static char *StringToLex;
3882
3883 #ifndef FLEX_SCANNER
3884 static FILE *lexFP;
3885
3886 static int input()
3887 {
3888     int ret;
3889     
3890     if (StringToLex != NULL) {
3891         ret = *StringToLex;
3892         if (ret == NULLCHAR)
3893           ret = EOF;
3894         else
3895           StringToLex++;
3896     } else if (unputCount > 0) {
3897         ret = unputBuffer[--unputCount];
3898     } else {
3899         ret = fgetc(lexFP);
3900     }    
3901
3902     if (ret == EOF) 
3903       return 0;
3904     else
3905       return ret;
3906 }
3907
3908 /*
3909  * Return offset of next pattern within current file
3910  */
3911 int yyoffset()
3912 {
3913     int offset = ftell(lexFP) - unputCount;
3914
3915     if (offset < 0) {
3916         offset = 0;
3917     }
3918     return(offset);
3919 }
3920  
3921 static void output(ch)
3922      int ch;
3923 {
3924     fprintf(stderr, "PARSER BUG: unmatched character '%c' (0%o)\n",
3925             ch, ch);
3926 }
3927
3928 static void unput(ch)
3929      int ch;
3930 {
3931     if (ch == 0) return;
3932     if (StringToLex != NULL) {
3933         StringToLex--;
3934     } else {
3935         if (unputCount >= UNPUT_BUF_SIZE)
3936           fprintf(stderr, "PARSER BUG: unput buffer overflow '%c' (0%o)\n",
3937                   ch, ch);
3938         unputBuffer[unputCount++] = ch;
3939     }
3940 }
3941
3942 /* Get ready to lex from a new file.  Kludge below sticks
3943    an artificial newline at the front of the file, which the
3944    above grammar ignores, but which makes ^ at start of pattern
3945    match at the real start of the file.
3946 */
3947 void yynewfile(f)
3948      FILE *f;
3949 {
3950     lexFP = f;
3951     StringToLex = NULL;
3952     unputCount = 0;
3953     unput('\n'); /* kludge */
3954 }
3955
3956 /* Get ready to lex from a string.  ^ at start of pattern WON'T
3957    match at the start of the string!
3958 */
3959 void yynewstr(s)
3960      char *s;
3961 {
3962     lexFP = NULL;
3963     StringToLex = s;
3964     unputCount = 0;
3965 }
3966 #endif /*!FLEX_SCANNER*/
3967
3968 #ifdef FLEX_SCANNER
3969 void my_yy_input(buf, result, max_size)
3970      char *buf;
3971      int *result;
3972      int max_size;
3973 {
3974     int count;
3975
3976     if (StringToLex != NULL) {
3977         count = 0;
3978         while (*StringToLex != NULLCHAR) {
3979             *buf++ = *StringToLex++;
3980             count++;
3981         }
3982         *result = count;
3983         return;
3984     } else {
3985         count = fread(buf, 1, max_size, yyin);
3986         if (count == 0) {
3987             *result = YY_NULL;
3988         } else {
3989             *result = count;
3990         }
3991         return;
3992     }    
3993 }
3994
3995 static YY_BUFFER_STATE my_file_buffer = NULL;
3996
3997 /*
3998     Return offset of next pattern in the current file.
3999 */
4000 int yyoffset()
4001 {
4002     int pos = yy_c_buf_p - YY_CURRENT_BUFFER->yy_ch_buf;
4003
4004     return(ftell(YY_CURRENT_BUFFER->yy_input_file) -
4005          yy_n_chars + pos);
4006 }
4007
4008
4009 void yynewstr(s)
4010      char *s;
4011 {
4012     if (my_file_buffer != NULL)
4013       yy_delete_buffer(my_file_buffer);
4014     StringToLex = s;
4015     my_file_buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
4016     yy_switch_to_buffer(my_file_buffer);
4017 }
4018
4019 void yynewfile(f)
4020      FILE *f;
4021 {
4022     if (my_file_buffer != NULL)
4023       yy_delete_buffer(my_file_buffer);
4024     StringToLex = NULL;
4025     my_file_buffer = yy_create_buffer(f, YY_BUF_SIZE);
4026     yy_switch_to_buffer(my_file_buffer);
4027 }
4028 #endif /*FLEX_SCANNER*/
4029
4030 int yywrap()
4031 {
4032     return TRUE;
4033 }
4034
4035 /* Parse a move from the given string s */
4036 /* ^ at start of pattern WON'T work here unless using flex */
4037 ChessMove yylexstr(boardIndex, s)
4038      int boardIndex;
4039      char *s;
4040 {
4041     ChessMove ret;
4042     char *oldStringToLex;
4043 #ifdef FLEX_SCANNER
4044     YY_BUFFER_STATE buffer, oldBuffer;
4045 #endif
4046     
4047     yyboardindex = boardIndex;
4048     oldStringToLex = StringToLex;
4049     StringToLex = s;
4050 #ifdef FLEX_SCANNER
4051     buffer = yy_create_buffer(stdin, YY_BUF_SIZE);
4052     oldBuffer = YY_CURRENT_BUFFER;
4053     yy_switch_to_buffer(buffer);
4054 #endif /*FLEX_SCANNER*/
4055
4056     ret = (ChessMove) yylex();
4057
4058 #ifdef FLEX_SCANNER
4059     if (oldBuffer != NULL) 
4060       yy_switch_to_buffer(oldBuffer);
4061     yy_delete_buffer(buffer);
4062 #endif /*FLEX_SCANNER*/
4063     StringToLex = oldStringToLex;
4064
4065     return ret;
4066 }