Fix for UBSan build
[platform/upstream/doxygen.git] / src / commentscan.cpp
1
2 #line 3 "<stdout>"
3
4 #define  YY_INT_ALIGNED short int
5
6 /* A lexical scanner generated by flex */
7
8 #define yy_create_buffer commentScanYY_create_buffer
9 #define yy_delete_buffer commentScanYY_delete_buffer
10 #define yy_flex_debug commentScanYY_flex_debug
11 #define yy_init_buffer commentScanYY_init_buffer
12 #define yy_flush_buffer commentScanYY_flush_buffer
13 #define yy_load_buffer_state commentScanYY_load_buffer_state
14 #define yy_switch_to_buffer commentScanYY_switch_to_buffer
15 #define yyin commentScanYYin
16 #define yyleng commentScanYYleng
17 #define yylex commentScanYYlex
18 #define yylineno commentScanYYlineno
19 #define yyout commentScanYYout
20 #define yyrestart commentScanYYrestart
21 #define yytext commentScanYYtext
22 #define yywrap commentScanYYwrap
23 #define yyalloc commentScanYYalloc
24 #define yyrealloc commentScanYYrealloc
25 #define yyfree commentScanYYfree
26
27 #define FLEX_SCANNER
28 #define YY_FLEX_MAJOR_VERSION 2
29 #define YY_FLEX_MINOR_VERSION 5
30 #define YY_FLEX_SUBMINOR_VERSION 35
31 #if YY_FLEX_SUBMINOR_VERSION > 0
32 #define FLEX_BETA
33 #endif
34
35 /* First, we deal with  platform-specific or compiler-specific issues. */
36
37 /* begin standard C headers. */
38 #include <stdio.h>
39 #include <string.h>
40 #include <errno.h>
41 #include <stdlib.h>
42
43 /* end standard C headers. */
44
45 /* flex integer type definitions */
46
47 #ifndef FLEXINT_H
48 #define FLEXINT_H
49
50 /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
51
52 #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
53
54 /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
55  * if you want the limit (max/min) macros for int types. 
56  */
57 #ifndef __STDC_LIMIT_MACROS
58 #define __STDC_LIMIT_MACROS 1
59 #endif
60
61 #include <inttypes.h>
62 typedef int8_t flex_int8_t;
63 typedef uint8_t flex_uint8_t;
64 typedef int16_t flex_int16_t;
65 typedef uint16_t flex_uint16_t;
66 typedef int32_t flex_int32_t;
67 typedef uint32_t flex_uint32_t;
68 typedef uint64_t flex_uint64_t;
69 #else
70 typedef signed char flex_int8_t;
71 typedef short int flex_int16_t;
72 typedef int flex_int32_t;
73 typedef unsigned char flex_uint8_t; 
74 typedef unsigned short int flex_uint16_t;
75 typedef unsigned int flex_uint32_t;
76 #endif /* ! C99 */
77
78 /* Limits of integral types. */
79 #ifndef INT8_MIN
80 #define INT8_MIN               (-128)
81 #endif
82 #ifndef INT16_MIN
83 #define INT16_MIN              (-32767-1)
84 #endif
85 #ifndef INT32_MIN
86 #define INT32_MIN              (-2147483647-1)
87 #endif
88 #ifndef INT8_MAX
89 #define INT8_MAX               (127)
90 #endif
91 #ifndef INT16_MAX
92 #define INT16_MAX              (32767)
93 #endif
94 #ifndef INT32_MAX
95 #define INT32_MAX              (2147483647)
96 #endif
97 #ifndef UINT8_MAX
98 #define UINT8_MAX              (255U)
99 #endif
100 #ifndef UINT16_MAX
101 #define UINT16_MAX             (65535U)
102 #endif
103 #ifndef UINT32_MAX
104 #define UINT32_MAX             (4294967295U)
105 #endif
106
107 #endif /* ! FLEXINT_H */
108
109 #ifdef __cplusplus
110
111 /* The "const" storage-class-modifier is valid. */
112 #define YY_USE_CONST
113
114 #else   /* ! __cplusplus */
115
116 /* C99 requires __STDC__ to be defined as 1. */
117 #if defined (__STDC__)
118
119 #define YY_USE_CONST
120
121 #endif  /* defined (__STDC__) */
122 #endif  /* ! __cplusplus */
123
124 #ifdef YY_USE_CONST
125 #define yyconst const
126 #else
127 #define yyconst
128 #endif
129
130 /* Returned upon end-of-file. */
131 #define YY_NULL 0
132
133 /* Promotes a possibly negative, possibly signed char to an unsigned
134  * integer for use as an array index.  If the signed char is negative,
135  * we want to instead treat it as an 8-bit unsigned char, hence the
136  * double cast.
137  */
138 #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
139
140 /* Enter a start condition.  This macro really ought to take a parameter,
141  * but we do it the disgusting crufty way forced on us by the ()-less
142  * definition of BEGIN.
143  */
144 #define BEGIN (yy_start) = 1 + 2 *
145
146 /* Translate the current start state into a value that can be later handed
147  * to BEGIN to return to the state.  The YYSTATE alias is for lex
148  * compatibility.
149  */
150 #define YY_START (((yy_start) - 1) / 2)
151 #define YYSTATE YY_START
152
153 /* Action number for EOF rule of a given start state. */
154 #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
155
156 /* Special action meaning "start processing a new file". */
157 #define YY_NEW_FILE commentScanYYrestart(commentScanYYin  )
158
159 #define YY_END_OF_BUFFER_CHAR 0
160
161 /* Size of default input buffer. */
162 #ifndef YY_BUF_SIZE
163 #define YY_BUF_SIZE 262144
164 #endif
165
166 /* The state buf must be large enough to hold one state per character in the main buffer.
167  */
168 #define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
169
170 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
171 #define YY_TYPEDEF_YY_BUFFER_STATE
172 typedef struct yy_buffer_state *YY_BUFFER_STATE;
173 #endif
174
175 #ifndef YY_TYPEDEF_YY_SIZE_T
176 #define YY_TYPEDEF_YY_SIZE_T
177 typedef size_t yy_size_t;
178 #endif
179
180 extern yy_size_t commentScanYYleng;
181
182 extern FILE *commentScanYYin, *commentScanYYout;
183
184 #define EOB_ACT_CONTINUE_SCAN 0
185 #define EOB_ACT_END_OF_FILE 1
186 #define EOB_ACT_LAST_MATCH 2
187
188     #define YY_LESS_LINENO(n)
189     
190 /* Return all but the first "n" matched characters back to the input stream. */
191 #define yyless(n) \
192         do \
193                 { \
194                 /* Undo effects of setting up commentScanYYtext. */ \
195         int yyless_macro_arg = (n); \
196         YY_LESS_LINENO(yyless_macro_arg);\
197                 *yy_cp = (yy_hold_char); \
198                 YY_RESTORE_YY_MORE_OFFSET \
199                 (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
200                 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */ \
201                 } \
202         while ( 0 )
203
204 #define unput(c) yyunput( c, (yytext_ptr)  )
205
206 #ifndef YY_STRUCT_YY_BUFFER_STATE
207 #define YY_STRUCT_YY_BUFFER_STATE
208 struct yy_buffer_state
209         {
210         FILE *yy_input_file;
211
212         char *yy_ch_buf;                /* input buffer */
213         char *yy_buf_pos;               /* current position in input buffer */
214
215         /* Size of input buffer in bytes, not including room for EOB
216          * characters.
217          */
218         yy_size_t yy_buf_size;
219
220         /* Number of characters read into yy_ch_buf, not including EOB
221          * characters.
222          */
223         yy_size_t yy_n_chars;
224
225         /* Whether we "own" the buffer - i.e., we know we created it,
226          * and can realloc() it to grow it, and should free() it to
227          * delete it.
228          */
229         int yy_is_our_buffer;
230
231         /* Whether this is an "interactive" input source; if so, and
232          * if we're using stdio for input, then we want to use getc()
233          * instead of fread(), to make sure we stop fetching input after
234          * each newline.
235          */
236         int yy_is_interactive;
237
238         /* Whether we're considered to be at the beginning of a line.
239          * If so, '^' rules will be active on the next match, otherwise
240          * not.
241          */
242         int yy_at_bol;
243
244     int yy_bs_lineno; /**< The line count. */
245     int yy_bs_column; /**< The column count. */
246     
247         /* Whether to try to fill the input buffer when we reach the
248          * end of it.
249          */
250         int yy_fill_buffer;
251
252         int yy_buffer_status;
253
254 #define YY_BUFFER_NEW 0
255 #define YY_BUFFER_NORMAL 1
256         /* When an EOF's been seen but there's still some text to process
257          * then we mark the buffer as YY_EOF_PENDING, to indicate that we
258          * shouldn't try reading from the input source any more.  We might
259          * still have a bunch of tokens to match, though, because of
260          * possible backing-up.
261          *
262          * When we actually see the EOF, we change the status to "new"
263          * (via commentScanYYrestart()), so that the user can continue scanning by
264          * just pointing commentScanYYin at a new input file.
265          */
266 #define YY_BUFFER_EOF_PENDING 2
267
268         };
269 #endif /* !YY_STRUCT_YY_BUFFER_STATE */
270
271 /* Stack of input buffers. */
272 static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
273 static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
274 static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
275
276 /* We provide macros for accessing buffer states in case in the
277  * future we want to put the buffer states in a more general
278  * "scanner state".
279  *
280  * Returns the top of the stack, or NULL.
281  */
282 #define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
283                           ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
284                           : NULL)
285
286 /* Same as previous macro, but useful when we know that the buffer stack is not
287  * NULL or when we need an lvalue. For internal use only.
288  */
289 #define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
290
291 /* yy_hold_char holds the character lost when commentScanYYtext is formed. */
292 static char yy_hold_char;
293 static yy_size_t yy_n_chars;            /* number of characters read into yy_ch_buf */
294 yy_size_t commentScanYYleng;
295
296 /* Points to current character in buffer. */
297 static char *yy_c_buf_p = (char *) 0;
298 static int yy_init = 0;         /* whether we need to initialize */
299 static int yy_start = 0;        /* start state number */
300
301 /* Flag which is used to allow commentScanYYwrap()'s to do buffer switches
302  * instead of setting up a fresh commentScanYYin.  A bit of a hack ...
303  */
304 static int yy_did_buffer_switch_on_eof;
305
306 void commentScanYYrestart (FILE *input_file  );
307 void commentScanYY_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
308 YY_BUFFER_STATE commentScanYY_create_buffer (FILE *file,int size  );
309 void commentScanYY_delete_buffer (YY_BUFFER_STATE b  );
310 void commentScanYY_flush_buffer (YY_BUFFER_STATE b  );
311 void commentScanYYpush_buffer_state (YY_BUFFER_STATE new_buffer  );
312 void commentScanYYpop_buffer_state (void );
313
314 static void commentScanYYensure_buffer_stack (void );
315 static void commentScanYY_load_buffer_state (void );
316 static void commentScanYY_init_buffer (YY_BUFFER_STATE b,FILE *file  );
317
318 #define YY_FLUSH_BUFFER commentScanYY_flush_buffer(YY_CURRENT_BUFFER )
319
320 YY_BUFFER_STATE commentScanYY_scan_buffer (char *base,yy_size_t size  );
321 YY_BUFFER_STATE commentScanYY_scan_string (yyconst char *yy_str  );
322 YY_BUFFER_STATE commentScanYY_scan_bytes (yyconst char *bytes,yy_size_t len  );
323
324 void *commentScanYYalloc (yy_size_t  );
325 void *commentScanYYrealloc (void *,yy_size_t  );
326 void commentScanYYfree (void *  );
327
328 #define yy_new_buffer commentScanYY_create_buffer
329
330 #define yy_set_interactive(is_interactive) \
331         { \
332         if ( ! YY_CURRENT_BUFFER ){ \
333         commentScanYYensure_buffer_stack (); \
334                 YY_CURRENT_BUFFER_LVALUE =    \
335             commentScanYY_create_buffer(commentScanYYin,YY_BUF_SIZE ); \
336         } \
337         YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
338         }
339
340 #define yy_set_bol(at_bol) \
341         { \
342         if ( ! YY_CURRENT_BUFFER ){\
343         commentScanYYensure_buffer_stack (); \
344                 YY_CURRENT_BUFFER_LVALUE =    \
345             commentScanYY_create_buffer(commentScanYYin,YY_BUF_SIZE ); \
346         } \
347         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
348         }
349
350 #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
351
352 /* Begin user sect3 */
353
354 #define commentScanYYwrap(n) 1
355 #define YY_SKIP_YYWRAP
356
357 typedef unsigned char YY_CHAR;
358
359 FILE *commentScanYYin = (FILE *) 0, *commentScanYYout = (FILE *) 0;
360
361 typedef int yy_state_type;
362
363 extern int commentScanYYlineno;
364
365 int commentScanYYlineno = 1;
366
367 extern char *commentScanYYtext;
368 #define yytext_ptr commentScanYYtext
369
370 static yy_state_type yy_get_previous_state (void );
371 static yy_state_type yy_try_NUL_trans (yy_state_type current_state  );
372 static int yy_get_next_buffer (void );
373 static void yy_fatal_error (yyconst char msg[]  );
374
375 /* Done after the current pattern has been matched and before the
376  * corresponding action - sets up commentScanYYtext.
377  */
378 #define YY_DO_BEFORE_ACTION \
379         (yytext_ptr) = yy_bp; \
380         commentScanYYleng = (yy_size_t) (yy_cp - yy_bp); \
381         (yy_hold_char) = *yy_cp; \
382         *yy_cp = '\0'; \
383         (yy_c_buf_p) = yy_cp;
384
385 #define YY_NUM_RULES 195
386 #define YY_END_OF_BUFFER 196
387 /* This struct is not used in this scanner,
388    but its presence is necessary. */
389 struct yy_trans_info
390         {
391         flex_int32_t yy_verify;
392         flex_int32_t yy_nxt;
393         };
394 static yyconst flex_int16_t yy_acclist[790] =
395     {   0,
396        75,   75,  119,  119,  132,  132,  142,  142,  186,  186,
397       196,  195,   43,  195,   43,  195,   42,  195,   43,  195,
398        43,  195,   43,  195,   43,  195,   41,   43,  195,   43,
399       195,   43,  195,   27,   43,  195,   43,  195,   43,  195,
400        43,  195,   43,  195,   43,  195,   41,   43,  195,   43,
401       195,   43,  195,   88,  195,   87,  195,   88,  195,   85,
402        88,  195,   88,  195,   88,  195,  195,   89,  195,  109,
403       195,  108,  195,  109,  195,  106,  109,  195,  109,  195,
404        70,  195,   70,  195,   69,  195,   70,  195,   70,  195,
405        70,  195,   66,   70,  195,   70,  195,   70,  195,   74,
406
407       195,   73,  195,   74,  195,   71,   74,  195,   74,  195,
408        74,  195,   74,  195,   78,  195,   77,  195,   75,   78,
409       195,   75,   78,  195,   78,  195,   75,   78,  195,   75,
410        78,  195,   78,  195,   70,  195,   69,  195,   70,  195,
411        70,  195,   70,  195,   70,  195,   70,  195,   97,  195,
412        96,  195,   94,   97,  195,   97,  195,  101,  195,  100,
413       195,  101,  195,  101,  195,  105,  195,  104,  195,  105,
414       195,  105,  195,   93,  195,   90,  195,   93,  195,   91,
415        93,  195,   93,  195,   93,  195,   57,  195,   56,  195,
416        57,  195,   54,   57,  195,   57,  195,   61,  195,   61,
417
418       195,   60,  195,   61,  195,   61,  195,   61,  195,   58,
419        61,  195,   61,  195,   61,  195,   65,  195,   64,  195,
420        65,  195,   62,   65,  195,   65,  195,   81,  195,   79,
421       195,  195,   83,  195,   84,  195,  195,  115,  195,  114,
422       195,  113,  115,  195,  115,  195,  119,  122,  195,  116,
423       195,  119,  122,  195,  122,  195,  122,  195,  124,  195,
424       123,  195,  195,  127,  195,  127,  195,  125,  195,  127,
425       195,  127,  195,  132,  136,  195,  133,  195,  136,  195,
426       136,  195,  136,  195,  136,  195,  136,  195,  112,  195,
427       110,  195,  112,  195,  140,  195,  138,  195,  137,  140,
428
429       195,  140,  195,  143,  195,  142,  143,  195,  141,  195,
430       143,  195,  150,  151,  195,  149,  195,  151,  195,  151,
431       195,  151,  195,  161,  162,  195,  152,  195,  162,  195,
432       162,  195,  162,  195,  165,  195,  163,  195,  165,  195,
433       169,  195,  167,  195,  166,  169,  195,  169,  195,  172,
434       175,  195,  170,  195,  173,  175,  195,  174,  175,  195,
435       175,  195,  175,  195,  178,  195,  176,  195,  178,  195,
436       181,  195,  180,  195,  181,  195,  179,  181,  195,  181,
437       195,  184,  195,  183,  195,  184,  195,  182,  184,  195,
438       184,  195,   51,   53,  195,   52,  195,   53,  195,   53,
439
440       195,  130,  195,  129,  195,  128,  130,  195,  130,  195,
441        46,   47,  195,   45,  195,   47,  195,   47,  195,  186,
442       188,  195,  187,  195,  188,  195,  188,  195,  188,  195,
443       191,  195,  190,  195,  189,  191,  195,  191,  195,  193,
444       194,  195,  192,  195,  194,  195,   40,    4,   34,   35,
445        37,   35,   26,   26,   18,   26,   18,   18,   18,   18,
446        18,   18,   24,   25,   20,   26,   27,   18,   18,   18,
447        18,   18,   18,   18,   18,   30,   31,   34,   28,   85,
448        85,   86,   85,   89,  106,  106,  107,   66,   66,   68,
449        66,   71,   71,   72,   71,   75,   75,   75,   75,   75,
450
451        75,   76,   75,   94,   95,   98,   99,  103,  102,  103,
452        91,   91,   92,   91,   54,   54,   54,   55,   58,   58,
453        59,   58,   62,   62,   63,   79,   80,   83,   82,  113,
454       119,  116,  119,  121,  121,  118,  123,  126,  132,  135,
455       134,  111,  137,  139,  142,  141,  150,  161,  164,  166,
456       168,  172,  171,  177,  179,  179,  182,  182,   51,  128,
457        46,  186,  185,  189,  193,   26,   33,   39,   35,   39,
458        39,   39,   35,   39,   39,   36,    7,    1,    1,    2,
459        18,   18,   18,   18,   22,   23,   18,   18,   18,   20,
460         5,   18,   18,   18,   18,   18,   18,   18,   32,   33,
461
462        29,   85,   85,   66,   71,   71,   75,   75,   75,   91,
463        91,   54,   54,   54,   54,   58,   62,  120,   48,   49,
464        50,   44,  185,   39,   39,   16,    1,   19,    2, 8198,
465        18,16390,   18,   18,   18,   18,   18,   18, 8198,   18,
466     16390,   18,   18,   18,   18,   18,   85,   71,   75,   75,
467        67,   91,   54,   54,   54,   62,  120,  145,  153,   44,
468        15,   38,    7,   13, 8198, 8198,   18,   18,   18,   21,
469        18,   18,    5, 8198,   18,   18,   18,   85,   71,   75,
470        91,    3,   14,    8,   18,   18,   21,   18,   18,   18,
471        18,   18,   85,   71,   75,   91,   79,  147,  155,   18,
472
473        18,   18,   18,   18,   18,   18,   85,   71,   75,   91,
474       146,  144,  154,   18,   18,   18,   18,   18,   18,   18,
475        85,   87,  108,   69,   71,   73,   75,   77,   96,  100,
476       104,   90,   91,   56,   60,   64,   81,   84,  114,  117,
477       124,  125,  131,  133,  110,  138,  148,  149,  152,  163,
478       167,  170,  176,  180,  183,  129,   45,  187,  190,  192,
479        10,    9,   18,   18,   18,    5,   18,   18,  156,   12,
480        11,   18,   18,   18,   18,   18,   18,  159,   17,   18,
481        17,   18,  160,  157,   17,   18,  160,  158,   40
482     } ;
483
484 static yyconst flex_int16_t yy_accept[1138] =
485     {   0,
486         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
487         1,    1,    1,    1,    1,    2,    3,    3,    3,    3,
488         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
489         3,    3,    3,    3,    3,    3,    3,    3,    3,    4,
490         5,    5,    5,    5,    5,    6,    7,    7,    7,    7,
491         7,    8,    9,    9,    9,    9,    9,    9,    9,    9,
492         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
493         9,    9,    9,    9,    9,    9,    9,   10,   11,   11,
494        11,   11,   11,   12,   13,   15,   17,   19,   21,   23,
495        25,   27,   30,   32,   34,   37,   39,   41,   43,   45,
496
497        47,   50,   52,   54,   56,   58,   60,   63,   65,   67,
498        68,   70,   72,   74,   76,   79,   81,   83,   85,   87,
499        89,   91,   93,   96,   98,  100,  102,  104,  106,  109,
500       111,  113,  115,  117,  119,  122,  125,  127,  130,  133,
501       135,  137,  139,  141,  143,  145,  147,  149,  151,  153,
502       156,  158,  160,  162,  164,  166,  168,  170,  172,  174,
503       176,  178,  180,  183,  185,  187,  189,  191,  193,  196,
504       198,  200,  202,  204,  206,  208,  210,  213,  215,  217,
505       219,  221,  223,  226,  228,  230,  232,  233,  235,  237,
506       238,  240,  242,  245,  247,  250,  252,  255,  257,  259,
507
508       261,  263,  264,  266,  268,  270,  272,  274,  277,  279,
509       281,  283,  285,  287,  289,  291,  293,  295,  297,  299,
510       302,  304,  306,  309,  311,  313,  316,  318,  320,  322,
511       324,  327,  329,  331,  333,  335,  337,  339,  341,  343,
512       345,  348,  350,  353,  355,  358,  361,  363,  365,  367,
513       369,  371,  373,  375,  377,  380,  382,  384,  386,  388,
514       391,  393,  396,  398,  400,  402,  404,  406,  409,  411,
515       414,  416,  418,  420,  423,  425,  427,  429,  431,  433,
516       435,  438,  440,  443,  445,  447,  447,  447,  447,  447,
517       448,  448,  448,  449,  449,  449,  449,  449,  450,  451,
518
519       452,  452,  453,  453,  453,  453,  453,  453,  453,  453,
520       453,  453,  453,  453,  453,  453,  454,  455,  456,  457,
521       458,  459,  460,  461,  462,  463,  464,  465,  467,  468,
522       469,  470,  471,  472,  473,  474,  475,  476,  476,  476,
523       476,  476,  476,  476,  477,  478,  479,  479,  480,  480,
524       480,  480,  480,  480,  481,  482,  482,  482,  482,  483,
525       484,  484,  485,  486,  486,  487,  487,  487,  488,  488,
526       488,  488,  488,  488,  489,  489,  489,  490,  490,  491,
527       491,  491,  491,  492,  492,  493,  494,  494,  494,  494,
528       495,  496,  496,  497,  498,  498,  499,  500,  501,  501,
529
530       501,  502,  502,  503,  504,  504,  504,  504,  504,  504,
531       504,  504,  504,  504,  504,  504,  504,  504,  505,  505,
532       506,  506,  506,  507,  507,  509,  509,  509,  510,  510,
533       511,  511,  511,  512,  513,  513,  513,  513,  514,  515,
534       516,  516,  516,  517,  517,  518,  518,  519,  519,  519,
535       519,  519,  519,  520,  520,  520,  521,  521,  522,  522,
536       522,  522,  523,  524,  524,  525,  525,  526,  526,  527,
537       527,  527,  528,  528,  529,  529,  530,  530,  531,  531,
538       532,  533,  534,  534,  535,  536,  536,  537,  537,  538,
539       538,  538,  538,  538,  539,  539,  540,  541,  542,  542,
540
541       542,  542,  543,  543,  544,  544,  545,  545,  546,  547,
542       547,  547,  548,  548,  548,  548,  549,  549,  549,  549,
543       549,  549,  549,  550,  550,  551,  551,  552,  552,  553,
544       553,  554,  554,  554,  555,  555,  556,  556,  557,  557,
545       557,  558,  558,  559,  559,  559,  560,  560,  560,  561,
546       561,  562,  562,  562,  563,  564,  564,  565,  565,  566,
547       566,  567,  567,  567,  567,  567,  568,  569,  571,  572,
548       573,  575,  576,  577,  577,  577,  577,  577,  577,  577,
549       577,  577,  578,  578,  578,  578,  578,  578,  579,  580,
550       581,  582,  583,  584,  585,  586,  587,  587,  588,  589,
551
552       590,  591,  592,  593,  594,  595,  596,  597,  598,  599,
553       599,  599,  599,  599,  600,  601,  601,  602,  603,  603,
554       604,  604,  604,  604,  605,  606,  606,  607,  608,  608,
555       609,  609,  610,  610,  610,  610,  610,  610,  610,  611,
556       611,  612,  613,  614,  615,  616,  616,  616,  617,  617,
557       618,  618,  618,  618,  618,  618,  618,  619,  619,  619,
558       619,  619,  619,  619,  619,  619,  619,  619,  619,  619,
559       619,  619,  619,  619,  619,  619,  619,  619,  619,  619,
560       619,  619,  619,  619,  620,  621,  622,  622,  622,  623,
561       623,  624,  624,  624,  624,  624,  624,  624,  624,  625,
562
563       626,  627,  627,  627,  627,  627,  627,  627,  627,  627,
564       627,  627,  627,  628,  629,  630,  633,  634,  635,  635,
565       636,  637,  638,  638,  639,  642,  643,  644,  645,  646,
566       647,  647,  647,  647,  648,  648,  648,  649,  650,  650,
567       651,  652,  652,  652,  652,  653,  653,  654,  655,  656,
568       656,  656,  657,  657,  657,  657,  657,  657,  658,  658,
569       658,  658,  658,  658,  658,  658,  658,  658,  658,  659,
570       659,  659,  659,  660,  660,  660,  660,  660,  660,  660,
571       660,  660,  660,  660,  660,  660,  661,  661,  661,  661,
572       661,  661,  662,  662,  662,  663,  663,  663,  663,  663,
573
574       663,  665,  665,  665,  665,  666,  668,  669,  670,  671,
575       672,  673,  675,  676,  677,  678,  678,  679,  679,  679,
576       680,  681,  681,  681,  681,  682,  682,  682,  682,  682,
577       682,  682,  682,  682,  682,  682,  682,  682,  682,  682,
578       682,  682,  682,  682,  682,  682,  682,  682,  682,  682,
579       682,  682,  682,  682,  682,  682,  682,  682,  682,  682,
580       682,  682,  682,  682,  682,  682,  682,  682,  682,  682,
581       682,  683,  684,  684,  684,  684,  685,  685,  685,  685,
582       685,  686,  687,  688,  689,  690,  691,  692,  693,  694,
583       694,  694,  695,  696,  696,  696,  696,  697,  697,  697,
584
585       697,  697,  697,  698,  698,  698,  698,  698,  698,  698,
586       698,  698,  698,  698,  698,  698,  698,  698,  698,  698,
587       698,  698,  698,  699,  699,  699,  699,  699,  700,  700,
588       700,  700,  700,  700,  700,  700,  700,  700,  700,  700,
589       700,  700,  700,  700,  700,  700,  700,  700,  700,  700,
590       700,  700,  700,  700,  701,  702,  703,  704,  705,  706,
591       707,  708,  708,  708,  709,  710,  710,  710,  710,  711,
592       711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
593       711,  711,  711,  711,  711,  711,  711,  711,  711,  711,
594       711,  711,  712,  713,  713,  713,  714,  714,  714,  714,
595
596       714,  714,  714,  714,  714,  714,  714,  714,  714,  714,
597       714,  714,  714,  714,  714,  714,  714,  714,  715,  716,
598       717,  718,  719,  720,  721,  723,  724,  725,  727,  729,
599       730,  731,  732,  734,  735,  736,  737,  738,  739,  740,
600       741,  742,  743,  744,  744,  744,  744,  744,  744,  744,
601       745,  746,  747,  748,  749,  749,  749,  749,  749,  749,
602       750,  751,  752,  753,  754,  755,  756,  757,  758,  759,
603       760,  761,  761,  761,  762,  763,  764,  765,  766,  767,
604       768,  769,  769,  769,  769,  769,  769,  769,  769,  769,
605       770,  770,  770,  771,  772,  773,  774,  774,  775,  776,
606
607       776,  776,  776,  776,  776,  776,  776,  776,  776,  776,
608       777,  777,  778,  778,  778,  778,  778,  779,  779,  779,
609       781,  781,  783,  783,  784,  785,  785,  787,  787,  788,
610       788,  788,  788,  788,  789,  790,  790
611     } ;
612
613 static yyconst flex_int32_t yy_ec[256] =
614     {   0,
615         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
616         1,    1,    4,    1,    1,    1,    1,    1,    1,    1,
617         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
618         1,    5,    6,    7,    8,    9,    8,    8,    1,   10,
619        11,   12,   13,   14,   15,   16,   17,   18,   19,   19,
620        19,   19,   19,   19,   20,   20,   20,   21,    1,   22,
621         1,   23,    1,   24,   25,   26,   27,   28,   29,   30,
622        31,   32,   33,   30,   30,   34,   35,   30,   36,   37,
623        30,   38,   30,   39,   40,   30,   30,   30,   30,   30,
624        41,   42,   43,    1,   44,    1,   45,   46,   47,   48,
625
626        49,   50,   51,   52,   53,   30,   54,   55,   56,   57,
627        58,   59,   30,   60,   61,   62,   63,   64,   30,   65,
628        66,   30,   67,   68,   69,   70,    1,   71,   71,   71,
629        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
630        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
631        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
632        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
633        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
634        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
635        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
636
637        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
638        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
639        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
640        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
641        71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
642        71,   71,   71,   71,   71
643     } ;
644
645 static yyconst flex_int32_t yy_meta[72] =
646     {   0,
647         1,    2,    3,    4,    5,    1,    6,    7,    8,    9,
648        10,   11,   12,   13,   14,   15,   16,   17,   17,   17,
649        18,    7,   19,   20,   21,   21,   21,   21,   21,   21,
650        21,   21,   21,   21,   21,   21,   21,   21,   21,   21,
651         1,   22,    1,   23,   21,   21,   21,   21,   21,   21,
652        21,   21,   24,   21,   21,   21,   25,   21,   21,   21,
653        21,   21,   21,   21,   21,   21,    7,   26,   27,   28,
654        29
655     } ;
656
657 static yyconst flex_int16_t yy_base[1356] =
658     {   0,
659         0,    0,    0,   70,  138,  208, 4982, 4981,  278,    0,
660       349,    0,  420,  490,  560,  630,  700,    0,  771,    0,
661        70,   71,   73,   81,  842,  912,  982,    0, 1053,    0,
662      1124,    0, 1195,    0,   84,   89, 1266,    0,   90,   92,
663      1337,    0,  115,  122,  153,  179,   91,   94, 1408,    0,
664       184,  195,   95,  148,  199,  230,  125,  127, 1479,    0,
665       435,  444,  132,  185, 1550,    0, 1621,    0,  231,  432,
666       436,  461, 1692,    0,  225,  437,  505,  506, 1763,    0,
667       196,  430, 4983, 8724, 8724,  514,  468, 4975, 4971, 4955,
668        84,  232, 1829, 1885,  244, 1948, 2017,  101,  161,  519,
669
670       583,  526,  590, 8724, 8724, 4971,  601,  603, 1842, 4968,
671      8724, 8724, 8724,    0,   89,  478, 8724,  658,  662,  870,
672      1834, 4949,  866,  534,  682, 8724, 8724, 4959,  860,  883,
673      4941, 1894, 8724, 8724, 2085,  925, 1907, 1925, 8724, 1957,
674       947,  954, 1979, 2000, 4942, 2040,  892, 8724, 8724,    0,
675       549, 8724, 8724, 4954,  611, 8724, 8724, 4953,  887, 8724,
676      8724, 4951,  922, 1832, 2061, 8724, 8724,    0, 2111,  903,
677      8724, 2119, 2140, 2155, 2163, 4936, 2178, 1868,  969, 8724,
678      8724,    0, 4940, 1900, 8724, 4939, 1914,    0, 8724, 1963,
679      8724, 8724,    0, 4910,  463, 8724, 4911, 2165, 2234, 8724,
680
681         0, 4907, 8724,  166, 8724, 4943, 4900,    0, 8724, 8724,
682      4926, 4930, 4887,  134, 8724, 8724, 1984, 8724, 8724,    0,
683      2009, 8724,  607, 8724, 4885,    0, 8724, 8724,   58,  217,
684         0, 8724, 8724, 1999, 2142, 8724, 8724, 2021, 8724, 8724,
685         0, 2066,    0, 8724, 8724, 8724, 8724, 2131, 8724, 8724,
686      2146, 8724, 8724,    0,  223, 4883, 8724, 8724,    0,  237,
687      4882,    0, 8724, 4875, 4874, 8724, 8724,    0, 4879,    0,
688      8724, 4880, 4847,    0, 8724, 8724, 4820,  131, 8724, 8724,
689         0, 4845,    0, 8724, 4839, 2203, 2297, 2360,  654, 2070,
690      4838, 4869, 8724,    0, 4827, 4820,    0,  433, 8724, 8724,
691
692      2430, 4819,  448, 4827,  633,  491,  486, 1841,  544,  614,
693      2209,  424,  634, 4789, 4773, 8724,  465, 2500, 4765, 4771,
694      4784, 4775, 1831,  409, 4771, 8724, 8724,    0, 2197, 1878,
695      2204, 2218, 2136, 2226, 2246, 2224, 2247, 2569,  521, 2259,
696      1849, 2274, 2270,  523, 2293, 2294, 1974, 8724, 1916, 2306,
697      2327, 2329, 4823, 8724, 2176, 2034, 2295, 2078, 8724, 2335,
698      4826, 8724,  559, 4819,  605, 4806, 2260, 8724, 4771, 2355,
699      2396, 4804, 2458, 2370, 2376, 2473, 2509, 2298, 8724, 4768,
700      2411, 2419,    0, 4815, 8724, 2390, 2083, 2448, 2338, 8724,
701      2464, 4809,  169, 2637, 2707, 4808, 8724, 2510, 2328, 2530,
702
703      4807, 2391, 8724, 2541, 2596, 2600, 4789, 2672, 2680, 2536,
704      2730, 2750,    0, 2776, 2620, 2631, 2029,    0, 2453, 8724,
705      4753, 4800, 8724, 2481, 8724, 4749, 4795, 8724, 2490, 8724,
706      4746, 4793, 8724, 2533, 2538, 2544, 2513, 8724, 2610, 2785,
707      2574,    0, 2805, 4778, 2813, 2589, 8724, 4743, 2780, 2833,
708      4776, 2841, 2856, 2664, 2862, 2871, 2605, 8724, 4741, 2754,
709      2877,    0, 4779, 4785, 4771, 2684, 8724, 4731, 4766, 4728,
710      2689, 8724, 4724,    0, 2695, 8724, 4722,    0, 4721,  895,
711      8724, 4732, 4729, 8724, 4763, 2735, 8724, 4716,    0, 4715,
712       675, 4762, 4760, 8724, 4711,    0, 8724, 8724, 4703, 4704,
713
714      2742, 8724, 4703,    0, 2759, 8724, 4699, 2886, 8724, 4708,
715      4696,    0,   24, 4698, 4690,    0, 4687, 4693, 4694,  402,
716      4652, 2765, 8724, 4651,    0, 2825, 8724, 4650,    0, 2850,
717      8724, 4644, 2891, 8724, 4643,  660, 4683,  674, 4643, 4604,
718       839, 4642,  841, 4629, 4594,    0, 4639,  546,    0, 4592,
719         0,  246, 4591,    0,    0, 4590,    0, 4589,    0, 4588,
720      4592, 4581, 4612,    0, 4616, 4606, 8724, 8724, 4603, 2932,
721      4599, 4599, 8724, 4599,  906, 4564, 4549,  525, 1862,  914,
722      1920, 8724, 1840, 1846, 1880, 4555, 4554,  925, 2893,    0,
723      2052, 2145, 2561, 2236, 8724, 8724,    0, 2331, 2486, 2613,
724
725         0,    0, 2908, 2797, 2910, 2915, 2916, 2917, 2922, 2965,
726      2217, 2881, 2976, 8724, 2990, 3004, 2248, 2888, 2966, 2968,
727         0, 4556, 4555,    0, 2996, 2999, 3006,  583, 3072, 3019,
728      3048, 3084, 4596, 2921, 3027, 4553, 4544, 4543, 3033, 3081,
729      3101, 3126, 3146, 3154, 3174, 4541, 4536,    0,    0, 4568,
730      4528, 4518, 4525, 4522, 4519,    0,    0, 4518, 4517, 4513,
731      4516, 4510, 4506, 4502, 4501, 4464, 3806, 3796, 3796, 3792,
732      2530, 3779, 3784, 3783, 3775, 3774, 3773, 3768, 3767,    0,
733      3760,    0, 3745, 8724, 8724, 8724, 3743, 3765, 2265, 3733,
734         0, 3723, 3705, 3695, 2070, 3694, 3732,    0, 3095, 2502,
735
736      8724, 1991, 3678, 3674, 1998, 3701, 2697, 2073, 2720,  833,
737      3677, 3664, 2767, 8724,    0, 3195, 3061, 3051, 3642, 3041,
738      2793, 3131, 3663, 3265, 3322, 3122, 3266, 3307, 3308, 3309,
739      3279, 3284, 3352, 3259, 3635, 3633, 3354, 3420, 3490, 3361,
740      8724, 3625, 3617, 3615, 3381,    0, 3446, 3516, 3472, 3611,
741      3602, 3633, 3586, 3577, 3567, 3565, 3559,    0, 3558, 3541,
742      3498, 3352, 3481, 3472, 3459, 3453, 3429, 3420, 8724, 3400,
743      3397, 3399, 8724, 3381, 3390, 3371, 3344, 3338, 3337, 3330,
744      3329, 3324, 3322, 3305, 3304, 3026, 3291, 3245, 3241, 3240,
745      3235, 8724, 3267, 3280, 8724, 3256, 3233, 3217, 3163, 3164,
746
747      8724, 2090, 3131, 3145,    0, 3055, 3272, 3301, 3122, 3107,
748      3404, 3560, 3466, 3467, 3543, 3525, 3398, 3135, 3131, 3570,
749      3583, 3122, 3121, 3113, 3592, 3633, 3112, 3104, 3103, 3083,
750      3085, 3083, 3076, 3071, 3067, 3050, 3034, 3029, 3023, 3023,
751       915, 3000, 3003, 2995, 2998, 2996, 2990, 2985, 2977, 2974,
752      2956, 2955,  912, 2936, 2945, 2941, 1888, 2941, 2939, 2927,
753      2923, 2917, 2913, 2902, 2888, 2886, 2880, 2876, 2867, 2865,
754      2892, 8724, 2847, 2861, 3267, 8724, 2867, 3351, 2831, 2824,
755      3313, 3383, 8724, 3408, 3480, 3547, 3481, 3605, 3623, 2824,
756      2823, 3629, 3641, 2822, 2817, 2810, 3639, 3675, 3695, 2801,
757
758      2795, 2794, 8724, 2783, 2775, 2774, 2773, 2767, 2766, 2763,
759      2731, 2735, 2711, 2708, 2694, 2686, 2667, 2671, 2664, 2657,
760      2649, 2626, 8724, 2621,    0,    0, 2618, 8724, 2601, 3065,
761      2597, 2598, 2608, 2604, 2586, 2584, 2582, 2573, 2568, 2567,
762      2560, 2551, 2527, 2522, 2510, 2498, 2490, 2475, 2461, 2497,
763      3378, 2449, 2437, 3616, 3454, 3539, 3661, 3684, 3668, 3686,
764      3685, 2436, 2427, 3691, 3702, 2410, 2408, 2399, 3715, 2397,
765      2390, 2389, 2388, 2375, 2373, 2366, 2365, 2359, 2369,    0,
766      2353, 2355, 2345, 2331, 2342, 2329, 2305, 2303, 2295, 2294,
767         0, 8724, 8724, 2293, 2286, 8724, 2283, 2266, 2255, 2249,
768
769      2242, 2226, 2219, 2217, 2211, 2184, 2180, 2170, 2164, 2144,
770      2142, 2140, 2138, 2116, 2104, 2146, 2140, 3455, 3537, 3549,
771      3735, 3737, 3741, 3747, 3463, 8724, 8724, 3738, 3749, 8724,
772      8724, 8724, 3752, 8724, 8724, 8724, 8724, 8724, 8724, 8724,
773      8724, 8724, 8724, 2104, 2081, 2060, 2005, 1980, 1951, 8724,
774      8724, 8724, 8724, 8724, 1946, 1934, 3183, 1938, 1936, 8724,
775      8724, 8724, 8724, 8724, 8724, 8724, 8724, 8724, 8724, 8724,
776      8724, 1952, 1946, 8724, 8724, 3748, 3315, 3758,  440, 3762,
777      3776, 1904, 1895, 1884, 1874, 1851, 1787, 1784,  925, 8724,
778       903,  856, 8724, 8724, 3769, 3780,  549, 3782, 3790,  838,
779
780       823,  812,  795,  635,  609,  605, 3283,  498,  414, 3621,
781      1993, 3800,  205,  210,  186,  181, 8724, 3545,  141, 3551,
782       566, 3804,  127, 3590, 8724,   63, 3609, 2025, 3615,   52,
783      2042, 3788, 1903, 8724, 3805, 8724, 3855, 3884, 3913, 3942,
784      3971, 4000, 4029, 4058, 4087, 4116, 4145, 4174, 4203, 4232,
785      4261, 4290, 4319, 4348, 4377, 4406, 4435, 4464, 4493, 4522,
786      4544, 4562, 4578, 4597, 4614, 4633, 4661, 4679, 4708, 4717,
787      4732, 4760, 4788, 4816, 4845, 4863, 4892, 4916, 4944, 4972,
788      5000, 5016, 5045, 5074, 5103, 5121, 5130, 5158, 5186, 5214,
789      5242, 5251, 5266, 5282, 5311, 5327, 5356, 5385, 5401, 5430,
790
791      5459, 5475, 5504, 5533, 5549, 5578, 5587, 5602, 5611, 5626,
792      5655, 5671, 5700, 5729, 5745, 5774, 5797, 5825, 5834, 5847,
793      5865, 5877, 5902, 5911, 3791, 5928, 5952, 5977, 5995, 6013,
794      6042, 6057, 6079, 6107, 6135, 6163, 6176, 6205, 6223, 6241,
795      6270, 6299, 6323, 6341, 6369, 6397, 6425, 6454, 6482, 6498,
796      6527, 6556, 6585, 6603, 6621, 6649, 6658, 6686, 6714, 6742,
797      6770, 6783, 6798, 6820, 6836, 6865, 6881, 6910, 6939, 6961,
798      6977, 7006, 7035, 7051, 7080, 7109, 7125, 7154, 7169, 7191,
799      7206, 7228, 7257, 7273, 7302, 7331, 3798, 7347, 7376, 7389,
800      7418, 7434, 7448, 7473, 7502, 7530, 3813, 7554, 7579, 3820,
801
802      3827, 7607, 7621, 7639, 7648, 7661, 7679, 7697, 7726, 7750,
803      7774, 7803, 7831, 7849, 7867, 7895, 7923, 7951, 7964, 7973,
804      7988, 7997, 8010, 8039, 8048, 8057, 4532, 8086, 8102, 8118,
805      8143, 4537, 8171, 8196, 8205, 8229, 8253, 8268, 8286, 8315,
806      8339, 8357, 8366, 8394, 8422, 8438, 8463, 8492, 8520, 8549,
807      8578, 8607, 8636, 8665, 8694
808     } ;
809
810 static yyconst flex_int16_t yy_def[1356] =
811     {   0,
812      1137, 1137, 1136,    3, 1138, 1138, 1139, 1139, 1136,    9,
813      1136,   11, 1140, 1140, 1141, 1141, 1136,   17, 1136,   19,
814      1142, 1142, 1143, 1143, 1144, 1144, 1136,   27, 1136,   29,
815      1136,   31, 1136,   33, 1145, 1145, 1136,   37, 1146, 1146,
816      1136,   41, 1147, 1147, 1148, 1148, 1149, 1149, 1136,   49,
817      1150, 1150, 1151, 1151, 1152, 1152, 1153, 1153, 1136,   59,
818      1154, 1154, 1155, 1155, 1136,   65, 1136,   67, 1156, 1156,
819      1156, 1156, 1136,   73, 1157, 1157, 1158, 1158, 1136,   79,
820      1159, 1159, 1136, 1136, 1136, 1136, 1136, 1160, 1161, 1162,
821      1162, 1163, 1136, 1164, 1165, 1166, 1136, 1136, 1162, 1162,
822
823      1163, 1162, 1136, 1136, 1136, 1167, 1168, 1168, 1168, 1169,
824      1136, 1136, 1136, 1170, 1171, 1136, 1136, 1136, 1136, 1172,
825      1172, 1136, 1173, 1136, 1174, 1136, 1136, 1175, 1176, 1176,
826      1136, 1176, 1136, 1136, 1177, 1178, 1178, 1178, 1136, 1178,
827      1136, 1136, 1179, 1179, 1136, 1180, 1181, 1136, 1136, 1182,
828      1136, 1136, 1136, 1183, 1136, 1136, 1136, 1184, 1136, 1136,
829      1136, 1185, 1186, 1186, 1186, 1136, 1136, 1187, 1188, 1136,
830      1136, 1136, 1136, 1189, 1189, 1136, 1190, 1136, 1191, 1136,
831      1136, 1192, 1193, 1136, 1136, 1194, 1136, 1195, 1136, 1136,
832      1136, 1136, 1196, 1136, 1197, 1136, 1198, 1136, 1136, 1136,
833
834      1199, 1136, 1136, 1136, 1136, 1200, 1136, 1201, 1136, 1136,
835      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1202,
836      1136, 1136, 1136, 1136, 1136, 1203, 1136, 1136, 1136, 1136,
837      1204, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
838      1205, 1136, 1206, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
839      1136, 1136, 1136, 1207, 1208, 1136, 1136, 1136, 1209, 1210,
840      1136, 1211, 1136, 1136, 1136, 1136, 1136, 1212, 1136, 1213,
841      1136, 1136, 1136, 1214, 1136, 1136, 1136, 1136, 1136, 1136,
842      1215, 1136, 1216, 1136, 1136, 1136, 1217, 1217, 1136, 1136,
843      1136, 1218, 1136, 1219, 1220, 1221, 1222, 1221, 1136, 1136,
844
845      1223, 1221, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
846      1136, 1136, 1136, 1136, 1136, 1136, 1224, 1217, 1224,  318,
847       318,  318,  318,  318,  318, 1136, 1136, 1225, 1226, 1227,
848      1227, 1227, 1227, 1227, 1227, 1227, 1227, 1136, 1136, 1136,
849      1136, 1136, 1136, 1136, 1136, 1221, 1136, 1136, 1221, 1221,
850      1136, 1136, 1228, 1136, 1229, 1230, 1229, 1136, 1136, 1229,
851      1231, 1136, 1232, 1233, 1232, 1136, 1136, 1136, 1136, 1136,
852      1234, 1136, 1234, 1235, 1236, 1234, 1235, 1136, 1136, 1136,
853      1236, 1236, 1237, 1238, 1136, 1239, 1240, 1239, 1136, 1136,
854      1239, 1241, 1241, 1242, 1242, 1241, 1136, 1243, 1244, 1243,
855
856      1241, 1136, 1136, 1243, 1136, 1245, 1136, 1245, 1246, 1247,
857      1245, 1136, 1248, 1246, 1247, 1247, 1249, 1250, 1136, 1136,
858      1136, 1251, 1136, 1136, 1136, 1136, 1252, 1136, 1136, 1136,
859      1136, 1253, 1136, 1254, 1255, 1254, 1136, 1136, 1254, 1256,
860      1136, 1257, 1256, 1136, 1258, 1136, 1136, 1136, 1136, 1259,
861      1136, 1259, 1260, 1261, 1259, 1260, 1136, 1136, 1136, 1261,
862      1261, 1262, 1263, 1264, 1263, 1136, 1136, 1136, 1265, 1136,
863      1136, 1136, 1136, 1266, 1136, 1136, 1136, 1267, 1136, 1268,
864      1136, 1269, 1136, 1136, 1270, 1136, 1136, 1136, 1271, 1136,
865      1136, 1272, 1272, 1136, 1136, 1273, 1136, 1136, 1136, 1136,
866
867      1136, 1136, 1136, 1274, 1136, 1136, 1136, 1136, 1136, 1136,
868      1136, 1275, 1136, 1136, 1136, 1276, 1136, 1136, 1136, 1136,
869      1136, 1136, 1136, 1136, 1277, 1136, 1136, 1136, 1278, 1136,
870      1136, 1136, 1136, 1136, 1136, 1279, 1280, 1279, 1136, 1136,
871      1281, 1282, 1281, 1136, 1136, 1283, 1136, 1136, 1284, 1136,
872      1285, 1136, 1136, 1286, 1287, 1136, 1288, 1136, 1289, 1136,
873      1136, 1136, 1290, 1291, 1292, 1293, 1136, 1136, 1293, 1294,
874      1293, 1292, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
875      1295, 1136, 1136, 1136, 1136, 1136, 1136, 1296, 1296, 1297,
876      1136, 1298, 1298, 1298, 1136, 1136, 1299, 1298, 1298, 1298,
877
878      1300, 1301, 1302, 1302, 1302, 1302, 1302, 1302, 1302, 1136,
879      1136, 1136, 1136, 1136, 1293, 1136, 1136, 1303, 1303, 1304,
880      1305, 1136, 1136, 1306, 1307, 1307, 1308, 1136, 1309, 1310,
881      1310, 1311, 1312, 1136, 1313, 1136, 1136, 1136, 1314, 1314,
882      1315, 1316, 1317, 1318, 1318, 1136, 1136, 1319, 1320, 1321,
883      1136, 1136, 1136, 1136, 1136, 1322, 1323, 1136, 1136, 1136,
884      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1324, 1136, 1136,
885      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1325,
886      1136, 1326, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
887      1327, 1136, 1136, 1136, 1136, 1136, 1328, 1329, 1330, 1136,
888
889      1136, 1136, 1136, 1136, 1136, 1331, 1331, 1136, 1136, 1136,
890      1136, 1136, 1136, 1136, 1332, 1136, 1333, 1333, 1334, 1333,
891      1333, 1333, 1335, 1336, 1336, 1336, 1336, 1336, 1336, 1336,
892      1136, 1136, 1337, 1338, 1136, 1136, 1339, 1340, 1340, 1341,
893      1136, 1136, 1136, 1136, 1342, 1343, 1344, 1344, 1345, 1136,
894      1136, 1321, 1136, 1136, 1136, 1136, 1136, 1323, 1136, 1136,
895      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
896      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
897      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
898      1136, 1136, 1346, 1330, 1136, 1136, 1136, 1136, 1136, 1347,
899
900      1136, 1136, 1136, 1136, 1348, 1348, 1333, 1333, 1136, 1333,
901      1336, 1335, 1336, 1336, 1336, 1136, 1338, 1136, 1136, 1339,
902      1341, 1136, 1136, 1136, 1342, 1349, 1136, 1136, 1136, 1136,
903      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
904      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1350, 1136,
905      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
906      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
907      1346, 1136, 1136, 1136, 1351, 1136, 1347, 1347, 1136, 1136,
908      1333, 1333, 1136, 1333, 1336, 1336, 1336, 1336, 1338, 1136,
909      1136, 1339, 1341, 1136, 1136, 1136, 1342, 1349, 1349, 1136,
910
911      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
912      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
913      1136, 1136, 1136, 1136, 1352, 1353, 1136, 1136, 1136, 1136,
914      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
915      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1351,
916      1351, 1136, 1136, 1333, 1333, 1333, 1336, 1336, 1336, 1336,
917      1338, 1136, 1136, 1339, 1341, 1136, 1136, 1136, 1342, 1136,
918      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1354,
919      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
920      1355, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
921
922      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
923      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1333, 1333, 1333,
924      1336, 1336, 1336, 1336, 1338, 1136, 1136, 1339, 1341, 1136,
925      1136, 1136, 1342, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
926      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
927      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
928      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
929      1136, 1136, 1136, 1136, 1136, 1333, 1333, 1136, 1335, 1336,
930      1336, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
931      1136, 1136, 1136, 1136, 1333, 1333, 1335, 1336, 1336, 1136,
932
933      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1333,
934      1335, 1336, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1333,
935      1335, 1336, 1136, 1136, 1136, 1136, 1136, 1335, 1136, 1136,
936      1335, 1136, 1335, 1136, 1335,    0, 1136, 1136, 1136, 1136,
937      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
938      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
939      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
940      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
941      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
942      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
943
944      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
945      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
946      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
947      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
948      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
949      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
950      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
951      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
952      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
953      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
954
955      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
956      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
957      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
958      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
959      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
960      1136, 1136, 1136, 1136, 1136
961     } ;
962
963 static yyconst flex_int16_t yy_nxt[8796] =
964     {   0,
965        85,   86,   87,   85,   86,   85,   88,   85,   89,   85,
966        85,   85,   90,   85,   91,   92,   85,   90,   90,   90,
967        85,   93,   85,   94,   95,   95,   95,   95,   95,   95,
968        95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
969        85,   96,   85,   95,   95,   95,   95,   95,   95,   95,
970        95,   95,   95,   95,   95,   95,   95,   95,   95,   95,
971        95,   95,   95,   95,   95,   95,   85,   85,   85,   85,
972        85,   97,  153,  153,   97,  157,  154,  154,  666,  158,
973       667,   98,   99,  157,  100,  101,  189,  158,  102,  102,
974       103,  189,  196,  216,  196,   84,  216,  227,  298,  228,
975
976        84,  197,  344,  197,  364,  344,  513,  297, 1132,  366,
977       514,  155,  155,  198,  159,  198,  204,  205,  229,  204,
978      1130,  206,  159,  204,  205,  190,  204,  237,  206,  237,
979       190,  199,  217,  199,  250,  217,  230,  103,  104,  104,
980       105,  104,  104,  104,  106,  104,  104,  104,  104,  104,
981       227,  104,  228,  104,  108,  209,  207,  210,  108,  104,
982       104,  104,  344,  207,  211,  344,  238,  491,  238,  212,
983       491,  229,  492,  251,  556,  628,  213,  500,  104,  109,
984       104,  209,  499,  210,  297,  223,  224,  250,  223,  230,
985       211,  396,  980, 1126,  214,  212,  223,  224,  284,  223,
986
987       555,  232,  213,  233,  104,  104,  104,  104,  104,  104,
988       105,  104,  104,  104,  106,  104,  104,  104,  104,  104,
989       214,  104,  234,  104,  108,  225,  251,  271,  108,  104,
990       104,  104,  232,  263,  233, 1124,  225,  285,  537,  272,
991       235,  980,  299,  539,  296,  300,  296,  301,  104,  109,
992       104,  688,  542,  234,  264,  297,  296,  544,  296,  296,
993       515,  296,  296,  296, 1123,  513,  273,  297,  689,  514,
994       980,  235,  264,  303,  104,  104,  104,  104,  112,  112,
995       113,  112,  112,  112,  112,  112,  114,  112,  112,  112,
996       112,  112,  112,  112,  112,  112,  112,  112,  112,  112,
997
998       112,  112,  115,  115,  115,  115,  115,  115,  115,  115,
999       115,  115,  115,  115,  115,  115,  115,  115,  112,  116,
1000       112,  115,  115,  115,  115,  115,  115,  115,  115,  115,
1001       115,  115,  115,  115,  115,  115,  115,  115,  115,  115,
1002       115,  115,  115,  115,  112,  112,  112,  112,  115,  117,
1003       118,  119,  118,  118,  117,  117,  117,  120,  117,  117,
1004       117,  117,  117,  117,  121,  117,  117,  117,  117,  122,
1005       117,  117,  117,  123,  123,  123,  123,  123,  123,  123,
1006       123,  123,  123,  123,  123,  123,  123,  123,  123,  117,
1007       124,  117,  123,  123,  123,  123,  123,  123,  123,  123,
1008
1009       123,  123,  123,  123,  123,  123,  123,  123,  123,  123,
1010       123,  123,  123,  123,  123,  117,  117,  117,  125,  123,
1011       126,  126,  127,  126,  126,  126,  128,  126,  126,  126,
1012       126,  126,  284,  126,  263,  126,  130,  244,  263,  271,
1013       130,  131,  126,  126,  245,  246,  244,  566,  585,  573,
1014       673,  272,  573,  245,  246,  264,  297,  598,  247,  265,
1015       126,  132,  126,  263,  674,  481,  599,  247,  585,  289,
1016       290,  285,  289,  264,  482, 1119,  248,  265,  273,  367,
1017       368, 1136,  367, 1097,  265,  248,  126,  126,  126,  126,
1018       126,  126,  127,  126,  126,  126,  128,  126,  126,  126,
1019
1020       126,  126,  265,  126,  483,  126,  130,  275,  275,  291,
1021       130,  131,  126,  126,  589,  286,  276,  276,  286,  579,
1022       345,  369,  344,  345,  344,  344,  578,  344,  277,  277,
1023       126,  132,  126,  346,  590,  378,  379,  287,  378,  343,
1024       579,  349,  297,  350,  350,  350,  278,  278,  578,  297,
1025       419,  420,  705,  419, 1118,  288,  126,  126,  126,  126,
1026       133,  133,  134,  133,  133,  133,  135,  133,  133,  133,
1027       133,  133,  705,  133,  364,  133,  137,  380,  580,  366,
1028       137,  138,  139,  133,  347,  348,  343,  347,  685,  397,
1029       602,  351,  421,  299,  351,  296,  300,  296,  301,  580,
1030
1031       133,  140,  133, 1111,  352,  397,  297,  602,  508,  509,
1032       343,  508,  424,  425,  686,  424,  356,  357, 1136,  357,
1033       364,  357, 1128,  357,  303,  366,  133,  133,  133,  133,
1034       133,  133,  134,  133,  133,  133,  135,  133,  133,  133,
1035       133,  133,  357,  133,  357,  133,  137,  579,  510, 1116,
1036       137,  138,  139,  133,  426,  289,  290,  343,  289,  370,
1037       370,  370,  370,  370,  370,  370,  370,  579,  579,  575,
1038       133,  140,  133,  371,  980,  537,  491,  371,  372,  491,
1039       539,  492,  372,  381,  381,  381,  381, 1115,  579,  537,
1040       382,  575,  576,  577,  539,  291,  133,  133,  133,  133,
1041
1042       117,  141,  142,  141,  141,  117,  117,  117,  143,  117,
1043       117,  117,  117,  117,  117,  144,  117,  117,  117,  117,
1044       145,  117,  117,  117,  146,  146,  146,  146,  146,  146,
1045       146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
1046       117,  124,  117,  146,  146,  146,  146,  146,  146,  146,
1047       146,  146,  146,  146,  146,  146,  146,  146,  146,  146,
1048       146,  146,  146,  146,  146,  146,  117,  117,  117,  147,
1049       146,  148,  148,  149,  148,  148,  148,  148,  148,  148,
1050       148,  148,  148,  148,  148,  148,  148,  148,  148,  148,
1051       148,  148,  148,  148,  148,  150,  150,  150,  150,  150,
1052
1053       150,  150,  150,  150,  150,  150,  150,  150,  150,  150,
1054       150,  148,  151,  148,  150,  150,  150,  150,  150,  150,
1055       150,  150,  150,  150,  150,  150,  150,  150,  150,  150,
1056       150,  150,  150,  150,  150,  150,  150,  148,  148,  148,
1057       148,  150,  160,  160,  161,  160,  160,  160,  162,  160,
1058       160,  160,  160,  160,  542,  160,  542,  160,  164,  544,
1059       980,  544,  164,  160,  160,  160,  802,  370,  370,  370,
1060       370,  370,  370,  370,  370,  387,  388,  980,  373, 1114,
1061       388,  371,  160,  165,  160,  371,  372,  802,  429,  430,
1062       372,  429, 1113,  415,  415,  415,  415,  481, 1136,  388,
1063
1064       416,  388, 1109,  388,  446,  447,  482,  446,  160,  160,
1065       160,  160,  160,  160,  161,  160,  160,  160,  162,  160,
1066       160,  160,  160,  160,  388,  160,  713,  160,  164,  713,
1067       431,  397,  164,  160,  160,  160,  483,  435,  436,  375,
1068       399,  400,  436,  702,  579,  400,  448,  397,  405,  405,
1069       405,  405,  160,  165,  160,  405,  405,  405,  405,  914,
1070      1108,  928,  406,  436,  579,  702,  400,  407,  929,  406,
1071       460,  460,  460,  460,  407,  915, 1107,  461,  160,  160,
1072       160,  160,  166,  166,  167,  166,  166,  166,  166,  166,
1073       168,  166,  166,  166,  166,  166,  166,  166,  166,  166,
1074
1075       166,  166,  166,  166,  166,  166,  169,  169,  169,  169,
1076       169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
1077       169,  169,  166,  170,  166,  169,  169,  169,  169,  169,
1078       169,  169,  169,  169,  169,  169,  169,  169,  169,  169,
1079       169,  169,  169,  169,  169,  169,  169,  169,  166,  166,
1080       166,  166,  169,  171,  172,  173,  172,  172,  171,  171,
1081       171,  174,  171,  171,  171,  171,  171,  171,  175,  171,
1082       171,  171,  171,  176,  171,  171,  171,  177,  177,  177,
1083       177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
1084       177,  177,  177,  171,  178,  171,  177,  177,  177,  177,
1085
1086       177,  177,  177,  177,  177,  177,  177,  177,  177,  177,
1087       177,  177,  177,  177,  177,  177,  177,  177,  177,  171,
1088       171,  171,  179,  177,  180,  180,  181,  180,  180,  180,
1089       180,  180,  182,  180,  180,  180,  180,  180,  180,  180,
1090       180,  180,  180,  180,  180,  180,  180,  180,  183,  183,
1091       183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
1092       183,  183,  183,  183,  180,  184,  180,  183,  183,  183,
1093       183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
1094       183,  183,  183,  183,  183,  183,  183,  183,  183,  183,
1095       180,  180,  180,  180,  183,   84,   84,  185,   84,   84,
1096
1097        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
1098        84,   84,   84,   84,   84,   84,   84,   84,   84,  186,
1099       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
1100       186,  186,  186,  186,  186,   84,  187,   84,  186,  186,
1101       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
1102       186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
1103       186,   84,   84,   84,   84,  186,  191,  191,  192,  191,
1104       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
1105       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
1106       193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
1107
1108       193,  193,  193,  193,  193,  193,  191,  194,  191,  193,
1109       193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
1110       193,  193,  193,  193,  193,  193,  193,  193,  193,  193,
1111       193,  193,  191,  191,  191,  191,  193,   84,   84,  200,
1112        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
1113        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
1114        84,  201,  201,  201,  201,  201,  201,  201,  201,  201,
1115       201,  201,  201,  201,  201,  201,  201,   84,  202,   84,
1116       201,  201,  201,  201,  201,  201,  201,  201,  201,  201,
1117       201,  201,  201,  201,  201,  201,  201,  201,  201,  201,
1118
1119       201,  201,  201,   84,   84,   84,   84,  201,  218,  218,
1120       219,  218,  218,  218,  218,  218,  218,  218,  218,  218,
1121       218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
1122       218,  218,  220,  220,  220,  220,  220,  220,  220,  220,
1123       220,  220,  220,  220,  220,  220,  220,  220,  218,  221,
1124       218,  220,  220,  220,  220,  220,  220,  220,  220,  220,
1125       220,  220,  220,  220,  220,  220,  220,  220,  220,  220,
1126       220,  220,  220,  220,  218,  218,  218,  218,  220,  239,
1127       239,  240,  239,  239,  239,  239,  239,  239,  239,  239,
1128       239,  239,  239,  239,  239,  239,  239,  239,  239,  239,
1129
1130       239,  239,  239,  241,  241,  241,  241,  241,  241,  241,
1131       241,  241,  241,  241,  241,  241,  241,  241,  241,  239,
1132       242,  239,  241,  241,  241,  241,  241,  241,  241,  241,
1133       241,  241,  241,  241,  241,  241,  241,  241,  241,  241,
1134       241,  241,  241,  241,  241,  239,  239,  239,  239,  241,
1135       252,  252,  253,  252,  252,  252,  252,  252,  254,  252,
1136       252,  252,  252,  252,  252,  252,  252,  252,  252,  252,
1137       252,  252,  252,  252,  255,  255,  255,  255,  255,  255,
1138       255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
1139       252,  256,  252,  255,  255,  255,  255,  255,  255,  255,
1140
1141       255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
1142       255,  255,  255,  255,  255,  255,  252,  252,  252,  252,
1143       255,  257,  257,  258,  257,  257,  257,  257,  257,  259,
1144       257,  257,  257,  257,  257,  257,  257,  257,  257,  257,
1145       257,  257,  257,  257,  257,  260,  260,  260,  260,  260,
1146       260,  260,  260,  260,  260,  260,  260,  260,  260,  260,
1147       260,  257,  261,  257,  260,  260,  260,  260,  260,  260,
1148       260,  260,  260,  260,  260,  260,  260,  260,  260,  260,
1149       260,  260,  260,  260,  260,  260,  260,  257,  257,  257,
1150       257,  260,  266,  266,  267,  266,  266,  266,  266,  266,
1151
1152       266,  266,  266,  266,  266,  266,  266,  266,  266,  266,
1153       266,  266,  266,  266,  266,  266,  268,  268,  268,  268,
1154       268,  268,  268,  268,  268,  268,  268,  268,  268,  268,
1155       268,  268,  266,  269,  266,  268,  268,  268,  268,  268,
1156       268,  268,  268,  268,  268,  268,  268,  268,  268,  268,
1157       268,  268,  268,  268,  268,  268,  268,  268,  266,  266,
1158       266,  266,  268,  279,  279,  280,  279,  279,  279,  279,
1159       279,  279,  279,  279,  279,  279,  279,  279,  279,  279,
1160       279,  279,  279,  279,  279,  279,  279,  281,  281,  281,
1161       281,  281,  281,  281,  281,  281,  281,  281,  281,  281,
1162
1163       281,  281,  281,  279,  282,  279,  281,  281,  281,  281,
1164       281,  281,  281,  281,  281,  281,  281,  281,  281,  281,
1165       281,  281,  281,  281,  281,  281,  281,  281,  281,  279,
1166       279,  279,  279,  281,  304,  376,  376,  376,  376,  595,
1167      1106, 1105,  373,  358,  359,  305,  358, 1136,  436,  371,
1168       347,  348,  436,  347,  372,  306,  307, 1136,  357,  579,
1169       308,  309,  357,  581,  310,  311,  581,  312,  313,  457,
1170       458,  596,  457,  436,  709,  306,  307,  708,  579,  591,
1171       308,  309,  591,  357,  582,  360,  310,  311,  314,  315,
1172       312,  313,  316,  316,  709,  389,  390,  597,  389,  708,
1173
1174       579,  466,  467,  375,  466,  710,  316,  316,  317, 1136,
1175       388,  459, 1104, 1136,  388,  471,  472,  617,  471,  602,
1176       617,  707, 1136,  400,  707,  710,  319,  400, 1103, 1136,
1177       320,  401,  321,  322,  323,  388,  933,  391, 1102,  297,
1178      1136,  400,  582,  468,  602,  400,  324,  397,  400,  325,
1179       934,  326, 1101,  327,  328,  316,  316,  473,  402,  403,
1180      1100,  402, 1135, 1136,  475,  476,  400,  475, 1094,  316,
1181       316,  319, 1136,  400, 1093,  347,  348,  400,  347, 1136,
1182       405,  405,  405,  405, 1092,  501,  502,  408,  501,  317,
1183      1091,  331, 1089,  332,  406,  333,  334,  335,  400,  407,
1184
1185       404,  411,  411,  411,  411, 1088,  477, 1087,  408,  336,
1186       505,  506,  337,  505,  326,  406,  327,  328,  338,  796,
1187       407,  338,  522,  523, 1086,  522,  799,  503,  339,  339,
1188       634,  340,  341,  634,  602,  342,  342,  343,  413,  796,
1189       287,  412,  405,  405,  412, 1121,  799,  517,  410,  413,
1190       619,  518,  507,  591,  619,  406,  591,  519,  288,  520,
1191       407, 1085,  437,  438,  524,  437,  602,  526,  527,  410,
1192       526,  289,  290, 1131,  289,  619, 1136,  436,  714,  358,
1193       359,  436,  358,  602,  343,  392,  392, 1133,  392,  392,
1194       392,  393,  392,  392,  392,  392,  392,  579,  392,  626,
1195
1196       392,  395,  436,  626,  439,  395,  392,  396,  392,  528,
1197       714,  291,  441,  441,  441,  441, 1084,  579,  579,  442,
1198       449,  449,  449,  449,  626,  392,  395,  392,  443,  443,
1199       443,  444,  530,  531,  450,  530,  714,  591,  579,  451,
1200       591,  449,  449,  449,  449, 1083,  591,  533,  534,  591,
1201       533,  392,  392,  392,  392,  450,  449,  449,  449,  449,
1202       451, 1082, 1075,  452,  455,  455,  455,  455, 1074, 1073,
1203       450,  452,  484,  484,  532,  451, 1072,  602,  450,  449,
1204       449,  449,  449,  451,  605,  521,  484,  484,  485,  535,
1205       517,  356,  357,  450,  518,  716,  357,  290,  451, 1071,
1206
1207       519, 1070,  520, 1069,  286,  591,  484,  286,  591,  296,
1208       581,  296,  296,  581,  296,  296,  296,  357,  617,  591,
1209       297,  617,  591, 1068,  454,  591,  287,  591,  591, 1067,
1210       591,  582,  454,  583,  484,  486,  487,  591,  486, 1066,
1211       591,  484,  484, 1065,  288,  602,  584,  591,  591,  617,
1212       591,  591,  617,  583,  595,  484,  484,  484,  603,  602,
1213       345,  367,  368,  345,  367,  602,  786,  602,  584,  786,
1214      1064,  351,  607,  610,  351,  485, 1063,  488, 1062,  343,
1215       604,  608,  606,  718,  352, 1061,  596,  602,  602,  611,
1216       343,  612,  612,  612,  345,  613,  614,  345,  613,  378,
1217
1218       379, 1060,  378,  484,  316,  316,  609,  352,  615, 1059,
1219      1136,  357,  597,  343,  616,  357, 1058,  297,  316,  316,
1220       561,  349, 1057,  350,  350,  350,  343, 1056,  351,  297,
1221       351,  351,  591,  351, 1055,  591,  357,  343,  316,  389,
1222       390,  352,  389,  610,  631,  322,  323,  343,  631,  343,
1223       356,  357, 1054,  509, 1052,  357,  370,  370,  370,  370,
1224       343,  616, 1051,  326, 1050,  327,  328,  316,  316,  631,
1225       371,  370,  370,  370,  370,  372,  357,  381,  381,  381,
1226       381,  316,  316,  316,  382,  371, 1049, 1048, 1047,  620,
1227       372,  720,  402,  403,  343,  402,  343,  376,  376,  376,
1228
1229       376,  561, 1046, 1045,  373,  387,  388, 1044,  322,  323,
1230       388,  371,  381,  381,  381,  381,  372,  980, 1042,  382,
1231      1136, 1136, 1136, 1136, 1041, 1040,  326, 1136,  327,  328,
1232       567,  388, 1039,  567, 1038,  567,  567,  567,  567,  567,
1233       568,  567,  569,  567,  569,  570,  567, 1037, 1036, 1035,
1234       567,  567,  567,  572,  419,  420, 1034,  419, 1032, 1136,
1235      1136, 1136, 1136, 1136,  388,  375, 1136, 1031,  388, 1030,
1236       567,  567,  567, 1136,  376,  376,  376,  376, 1136,  387,
1237       388,  373,  424,  425,  388,  424, 1027,  591,  371,  388,
1238       591,  429,  430,  372,  429, 1026,  567,  567,  567,  567,
1239
1240       567,  591, 1017,  795,  591,  388,  795, 1136, 1136, 1016,
1241       370,  370,  370,  370,  437,  438,  397,  437,  627,  876,
1242      1015, 1136, 1136, 1136,  371,  399,  400, 1136, 1014,  372,
1243       400,  773,  397,  721,  773, 1013, 1136,  415,  415,  415,
1244       415, 1136,  375, 1012,  416, 1136,  400,  397,  435,  436,
1245       400,  400, 1136,  436,  640, 1011,  399,  400,  640, 1136,
1246       436,  400,  591,  397,  436,  591, 1136, 1010, 1136, 1136,
1247       338,  400, 1009,  338,  436,  441,  441,  441,  441,  640,
1248       339,  339,  400,  340,  341,  436,  774,  342,  342,  343,
1249       446,  447,  287,  446,  444,  632, 1008,  405,  405,  405,
1250
1251       405,  411,  411,  411,  411, 1007,  457,  458,  408,  457,
1252       288,  406, 1006, 1005,  591,  406,  407,  591, 1004,  717,
1253       407,  415,  415,  415,  415,  435,  436, 1003,  416, 1002,
1254       436, 1001, 1136, 1136, 1136, 1136,  343,  392,  392, 1136,
1255       392,  392,  392,  628,  392,  392,  392,  392,  392, 1000,
1256       392,  436,  629,  395,  999,  998,  997,  395,  392,  396,
1257       392,  722,  995,  994,  641,  460,  460,  460,  460,  410,
1258       991,  990,  461, 1136, 1136, 1136, 1136,  392,  395,  392,
1259      1136,  412,  405,  405,  412,  466,  467, 1136,  466,  413,
1260       471,  472, 1136,  471,  989,  406,  475,  476,  707,  475,
1261
1262       407,  707,  988,  392,  392,  392,  392,  392,  392,  987,
1263       392,  392,  392,  628,  392,  392,  392,  392,  392,  582,
1264       392,  800,  392,  395,  800,  986,  985,  395,  392,  392,
1265       392,  411,  411,  411,  411,  984,  486,  487,  408,  486,
1266       980, 1136,  801,  501,  502,  406,  501,  392,  395,  392,
1267       407,  412,  405,  405,  412,  460,  460,  460,  460,  413,
1268       505,  506,  461,  505,  983,  406,  522,  523,  713,  522,
1269       407,  713,  982,  392,  392,  392,  392,  412,  405,  405,
1270       412,  449,  449,  449,  449,  413,  441,  441,  441,  441,
1271       981,  406,  980,  442,  591,  450,  407,  591,  591,  410,
1272
1273       451,  591,  443,  443,  443,  444,  441,  441,  441,  441,
1274       979,  978,  977,  442,  441,  441,  441,  441,  976,  975,
1275       974,  442,  443,  443,  443,  444,  526,  527,  973,  526,
1276       644,  644,  644,  444,  455,  455,  455,  455,  602,  972,
1277       971,  452, 1136, 1136, 1136, 1136,  970,  725,  450, 1136,
1278       716,  530,  531,  451,  530,  968, 1136,  449,  449,  449,
1279       449, 1136,  967,  455,  455,  455,  455,  966,  963,  962,
1280       452,  450,  449,  449,  449,  449,  451,  450, 1136, 1136,
1281      1136, 1136,  451,  953,  952, 1136,  450,  508,  509,  801,
1282       508,  451,  533,  534,  713,  533,  611,  713,  612,  612,
1283
1284       612,  714,  454,  356,  619,  949,  948,  698,  619,  591,
1285      1136,  591,  591,  947,  591,  946,  591,  591,  591,  591,
1286       591,  591,  634,  591,  945,  634,  591,  510,  944,  619,
1287       413,  454,  567,  714,  943,  567,  942,  567,  567,  567,
1288       567,  567,  568,  567,  569,  567,  569,  699,  567,  602,
1289       941,  602,  567,  567,  567,  572,  602,  602,  602,  714,
1290       724,  940,  727,  602,  729,  939,  613,  614,  726,  613,
1291       730,  938,  567,  700,  567,  937,  728,  613,  614,  731,
1292       613, 1136,  619,  356,  357,  616,  619,  936,  357,  935,
1293       732,  613,  614,  932,  613,  931,  616,  930,  567,  567,
1294
1295       567,  567,  567,  927,  733,  613,  614,  619,  613,  357,
1296       616,  387,  626,  297, 1136,  626,  626,  926,  732,  626,
1297       734,  387,  388,  925,  616,  397,  388,  786,  634,  924,
1298       786,  634,  616,  922,  399,  631,  413,  626,  921,  631,
1299       626,  397,  591,  616,  920,  591,  919,  388,  435,  640,
1300       918,  917,  591,  640, 1136,  591,  806,  616,  737,  806,
1301       631,  916,  591, 1136,  631,  591,  996,  913,  631,  996,
1302      1136,  616,  392,  392,  640,  392,  392,  392,  628,  392,
1303       392,  392,  392,  392,  912,  392,  911,  392,  739,  631,
1304       397,  910,  739,  392,  392,  392, 1136,  640,  909,  399,
1305
1306       400,  640,  716,  808,  400,  299,  397,  296,  591,  296,
1307       794,  591,  392,  739,  392,  908,  435,  436,  297,  907,
1308       807,  436,  640,  591,  906,  400,  591,  441,  441,  441,
1309       441,  905,  591,  904,  746,  591,  740,  903,  392,  392,
1310       392,  392,  436,  747,  747,  747,  444,  749,  749,  749,
1311       749,  902,  901,  745,  442,  441,  441,  441,  441,  884,
1312       900,  896,  442,  602,  875,  878,  444,  875,  878,  895,
1313       894,  644,  644,  644,  444,  441,  441,  441,  441,  891,
1314       810,  813,  442,  890, 1090,  876,  801, 1090,  883,  880,
1315       879,  644,  644,  644,  444,  805,  806,  805,  805,  806,
1316
1317       805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
1318       805,  805,  805,  805,  805,  805,  805,  805,  805,  318,
1319       318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
1320       318,  318,  318,  318,  318,  805,  805,  805,  318,  318,
1321       318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
1322       318,  318,  318,  318,  318,  318,  318,  318,  318,  318,
1323       318,  805,  805,  805,  805,  805,  591,  591,  951,  591,
1324       591,  951,  874,  591,  356,  357,  591,  873,  872,  357,
1325       613,  614,  698,  613, 1117,  613,  614, 1117,  613,  876,
1326       299,  870,  296,  731,  296,  794,  869,  868,  816,  616,
1327
1328       357,  867,  591,  297,  616,  591,  602,  602,  591,  591,
1329       591,  591,  591,  591,  591,  817,  591,  591,  814,  591,
1330       881,  811,  805,  806,  805,  805,  806,  805,  805,  805,
1331       805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
1332       805,  805,  805,  805,  805,  805,  616,  866,  602,  602,
1333       602,  616,  878,  613,  614,  878,  613,  882,  815,  954,
1334       865,  864,  805,  812,  805,  725,  733,  397,  725,  387,
1335       388, 1096,  616,  801,  388,  297,  399,  400,  863,  951,
1336       862,  400,  951,  397,  591,  861,  860,  591,  805,  805,
1337       805,  805,  805,  859,  858,  388,  435,  436,  837,  838,
1338
1339       876,  436,  400,  839,  857,  591,  840,  841,  591,  591,
1340       820,  842,  591,  356,  357,  843,  844,  821,  357,  616,
1341       392,  392,  436,  392,  392,  392,  628,  392,  392,  392,
1342       392,  392,  856,  392,  855,  629,  739,  825,  854,  357,
1343       739,  392,  396,  392,  955,  602,  889,  441,  441,  441,
1344       441,  853,  885,  852,  746,  591,  591,  851,  591,  591,
1345       392,  739,  392,  747,  747,  747,  444,  591,  591,  956,
1346       591,  591,  850,  749,  749,  749,  749,  849,  356,  357,
1347       442,  591,  591,  357,  591,  591,  392,  392,  392,  392,
1348       392,  392,  444,  392,  392,  392,  628,  392,  392,  392,
1349
1350       392,  392, 1019,  392,  357,  392,  739,  602,  602,  848,
1351       739,  392,  392,  392,  886,  847, 1076,  441,  441,  441,
1352       441,  602,  602,  887,  746,  957,  613,  614,  846,  613,
1353       392,  739,  392,  747,  747,  747,  444,  845,  591,  731,
1354       591,  591,  959,  591,  591,  616, 1125,  591,  591, 1125,
1355       591,  591, 1127,  591,  836, 1127,  392,  392,  392,  392,
1356       805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
1357       805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
1358       805,  805,  805,  805,  602,  387,  388, 1020,  602,  397,
1359       388, 1129,  616,  958, 1129,  888, 1077,  835,  399,  400,
1360
1361       805,  805,  805,  400,  716,  397,  591,  435,  436,  591,
1362      1127,  388,  436, 1127,  834,  833, 1129,  591,  892, 1129,
1363       591,  832,  591,  831,  400,  591,  805,  805,  805,  805,
1364       805,  893,  830,  436,  441,  441,  441,  441,  356,  357,
1365       897,  746,  829,  357,  387,  388,  602,  397,  464,  388,
1366       898,  898,  898,  444,  435,  436,  399,  400,  828,  436,
1367      1018,  400,  591,  397,  357,  591,  960,  827,  961,  591,
1368       388,  824,  591,  823,  964, 1120,  441,  441,  441,  441,
1369       436,  822,  400,  746,  969,  591,  965,  591,  591,  819,
1370       591,  818,  898,  898,  898,  444,  441,  441,  441,  441,
1371
1372       356,  357,  602,  746,  602,  357,  387,  388,  397,  602,
1373       809,  388,  898,  898,  898,  444, 1023,  399,  400,  804,
1374      1021,  803,  400,  582,  397,  602,  357,  602, 1022,  798,
1375       435,  436,  388,  797, 1024,  436, 1078,  290,  591, 1078,
1376       792,  591,  591,  400, 1025,  591,  791,  790,  591,  591,
1377      1028,  591,  591,  387,  388,  397,  436,  789,  388, 1078,
1378       290, 1029, 1078,  591,  399,  400,  591,  435,  436,  400,
1379       591,  397,  436,  591, 1033,  788, 1079,  591,  602,  388,
1380       591,  591,  602,  591,  591,  787,  591,  689,  602, 1134,
1381       400,  591, 1134,  436,  591,  785, 1095,  784, 1080,  291,
1382
1383      1081,  591,  725,  602,  591, 1127,  289,  290, 1127,  289,
1384      1098,  601,  783,  601,  601,  601,  716,  602,  691,  782,
1385       781,  691,  691,  602, 1110,  780,  779,  778,  777,  725,
1386       776,  602, 1099,  715, 1112,  715,  715,  715,  775,  772,
1387       601,  602,  601,  601,  601,  602, 1079,  723,  771,  723,
1388       723,  723,  770,  768, 1122,   84,   84,   84,   84,   84,
1389        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
1390        84,   84,   84,   84,   84,   84,   84,   84,   84,   84,
1391        84,   84,   84,   84,  107,  107,  107,  107,  107,  107,
1392       107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
1393
1394       107,  107,  107,  107,  107,  107,  107,  107,  107,  107,
1395       107,  107,  107,  110,  110,  110,  110,  110,  110,  110,
1396       110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
1397       110,  110,  110,  110,  110,  110,  110,  110,  110,  110,
1398       110,  110,  129,  129,  129,  129,  129,  129,  129,  129,
1399       129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
1400       129,  129,  129,  129,  129,  129,  129,  129,  129,  129,
1401       129,  136,  136,  136,  136,  136,  136,  136,  136,  136,
1402       136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
1403       136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
1404
1405       152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
1406       152,  152,  152,  152,  152,  152,  152,  152,  152,  152,
1407       152,  152,  152,  152,  152,  152,  152,  152,  152,  156,
1408       156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
1409       156,  156,  156,  156,  156,  156,  156,  156,  156,  156,
1410       156,  156,  156,  156,  156,  156,  156,  156,  163,  163,
1411       163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
1412       163,  163,  163,  163,  163,  163,  163,  163,  163,  163,
1413       163,  163,  163,  163,  163,  163,  163,  188,  188,  188,
1414       188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
1415
1416       188,  188,  188,  188,  188,  188,  188,  188,  188,  188,
1417       188,  188,  188,  188,  188,  188,  195,  195,  195,  195,
1418       195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
1419       195,  195,  195,  195,  195,  195,  195,  195,  195,  195,
1420       195,  195,  195,  195,  195,  203,  203,  203,  203,  203,
1421       203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
1422       203,  203,  203,  203,  203,  203,  203,  203,  203,  203,
1423       203,  203,  203,  203,  208,  208,  208,  208,  208,  208,
1424       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
1425       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
1426
1427       208,  208,  208,  215,  215,  215,  215,  215,  215,  215,
1428       215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
1429       215,  215,  215,  215,  215,  215,  215,  215,  215,  215,
1430       215,  215,  222,  222,  222,  222,  222,  222,  222,  222,
1431       222,  222,  222,  222,  222,  222,  222,  222,  222,  222,
1432       222,  222,  222,  222,  222,  222,  222,  222,  222,  222,
1433       222,  226,  226,  226,  226,  226,  226,  226,  226,  226,
1434       226,  226,  226,  226,  226,  226,  226,  226,  226,  226,
1435       226,  226,  226,  226,  226,  226,  226,  226,  226,  226,
1436       231,  231,  231,  231,  231,  231,  231,  231,  231,  231,
1437
1438       231,  231,  231,  231,  231,  231,  231,  231,  231,  231,
1439       231,  231,  231,  231,  231,  231,  231,  231,  231,  236,
1440       236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
1441       236,  236,  236,  236,  236,  236,  236,  236,  236,  236,
1442       236,  236,  236,  236,  236,  236,  236,  236,  243,  243,
1443       243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
1444       243,  243,  243,  243,  243,  243,  243,  243,  243,  243,
1445       243,  243,  243,  243,  243,  243,  243,  249,  249,  249,
1446       249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
1447       249,  249,  249,  249,  249,  249,  249,  249,  249,  249,
1448
1449       249,  249,  249,  249,  249,  249,  262,  262,  262,  262,
1450       262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
1451       262,  262,  262,  262,  262,  262,  262,  262,  262,  262,
1452       262,  262,  262,  262,  262,  270,  270,  270,  270,  270,
1453       270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
1454       270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
1455       270,  270,  270,  270,  274,  274,  274,  274,  274,  274,
1456       274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
1457       274,  274,  274,  274,  274,  274,  274,  274,  274,  274,
1458       274,  274,  274,  283,  283,  283,  283,  283,  283,  283,
1459
1460       283,  283,  283,  283,  283,  283,  283,  283,  283,  283,
1461       283,  283,  283,  283,  283,  283,  283,  283,  283,  283,
1462       283,  283,  292,  292,  767,  292,  292,  292,  292,  292,
1463       292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
1464       292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
1465       292,  295,  691,  766,  765,  691,  691,  715,  764,  715,
1466       715,  715,  763,  762,  295,  761,  295,  295,  295,  760,
1467       759,  757,  295,  296,  756,  296,  296,  755,  296,  754,
1468       753,  296,  296,  464,  296,  296,  296,  302,  751,  302,
1469       302,  302,  302,  750,  302,  744,  743,  302,  302,  302,
1470
1471       302,  302,  302,  318,  318,  742,  741,  736,  735,  712,
1472       711,  704,  703,  701, 1136,  318,  318,  318,  318,  318,
1473       318,  318,  297,  318,  318,  329,  297,  329,  329,  297,
1474       329,  698,  564,  329,  329,  696,  329,  329,  329,  330,
1475       330,  695,  694,  693,  692,  690,  687,  684,  683,  542,
1476       682,  330,  330,  330,  330,  330,  330,  330,  681,  330,
1477       330,  353,  353,  537,  353,  353,  353,  353,  353,  353,
1478       353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
1479       353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
1480       355,  680,  355,  355,  355,  355,  355,  679,  678,  355,
1481
1482       355,  355,  355,  355,  677,  676,  675,  355,  361,  361,
1483       361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
1484       361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
1485       361,  361,  361,  361,  361,  361,  361,  363,  672,  363,
1486       363,  363,  671,  670,  669,  363,  365,  668,  365,  365,
1487       665,  511,  365,  664,  365,  365,  365,  663,  662,  661,
1488       365,  374,  374,  374,  374,  660,  494,  374,  494,  659,
1489       658,  656,  488,  483,  374,  655,  654,  374,  653,  652,
1490       374,  470,  374,  374,  374,  651,  464,  374,  374,  377,
1491       377,  377,  377,  649,  464,  647,  450,  646,  643,  433,
1492
1493       638,  428,  377,  637,  377,  377,  423,  636,  377,  406,
1494       377,  377,  377,  628,  628,  628,  377,  383,  383,  383,
1495       383,  385,  623,  383,  371,  622,  364,  621,  362,  354,
1496       600,  594,  593,  592,  590,  587,  383,  586,  383,  383,
1497       383,  574,  297,  297,  383,  384,  384,  564,  384,  384,
1498       384,  384,  384,  384,  384,  384,  384,  384,  384,  384,
1499       384,  384,  384,  384,  384,  384,  384,  384,  384,  384,
1500       384,  384,  384,  384,  386,  293,  386,  386,  386,  386,
1501       386,  562,  560,  386,  386,  386,  386,  386,  558,  555,
1502       553,  386,  394,  394,  552,  394,  394,  394,  394,  394,
1503
1504       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
1505       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
1506       394,  398,  550,  548,  547,  545,  540,  398,  511,  398,
1507       398,  398,  398,  398,  398,  499,  398,  398,  398,  398,
1508       398,  498,  497,  495,  398,  409,  409,  409,  409,  494,
1509       490,  409,  483,  479,  470,  464,  450,  433,  409,  428,
1510       423,  409,  406,  385,  409,  385,  409,  409,  409,  371,
1511       362,  409,  409,  414,  414,  414,  414,  354,  297,  294,
1512       414,  293, 1136,  111,  111, 1136,  414, 1136,  414,  414,
1513      1136, 1136,  414, 1136,  414,  414,  414, 1136, 1136, 1136,
1514
1515       414,  417,  417,  417,  417, 1136, 1136,  417, 1136, 1136,
1516      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1517       417, 1136,  417,  417,  417, 1136, 1136, 1136,  417,  418,
1518      1136, 1136,  418, 1136, 1136, 1136,  418, 1136,  418,  418,
1519       418, 1136, 1136, 1136,  418,  422,  422, 1136,  422,  422,
1520       422,  422,  422,  422,  422,  422,  422,  422,  422,  422,
1521       422,  422,  422,  422,  422,  422,  422,  422,  422,  422,
1522       422,  422,  422,  422,  427,  427, 1136,  427,  427,  427,
1523       427,  427,  427,  427,  427,  427,  427,  427,  427,  427,
1524       427,  427,  427,  427,  427,  427,  427,  427,  427,  427,
1525
1526       427,  427,  427,  432,  432, 1136,  432,  432,  432,  432,
1527       432,  432,  432,  432,  432,  432,  432,  432,  432,  432,
1528       432,  432,  432,  432,  432,  432,  432,  432,  432,  432,
1529       432,  432,  434, 1136,  434,  434,  434,  434,  434, 1136,
1530      1136,  434,  434,  434,  434,  434, 1136, 1136, 1136,  434,
1531       440, 1136,  440,  440,  440, 1136, 1136, 1136,  440,  445,
1532       445,  445,  445, 1136, 1136,  445, 1136, 1136, 1136, 1136,
1533      1136, 1136, 1136, 1136,  445,  445, 1136, 1136,  445, 1136,
1534       445,  445,  445, 1136, 1136, 1136,  445,  453,  453,  453,
1535       453, 1136, 1136,  453, 1136, 1136, 1136, 1136, 1136, 1136,
1536
1537       453, 1136, 1136,  453, 1136, 1136,  453, 1136,  453,  453,
1538       453, 1136, 1136,  453,  453,  456,  456,  456,  456, 1136,
1539      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,  456, 1136,
1540       456,  456, 1136, 1136,  456, 1136,  456,  456,  456, 1136,
1541      1136, 1136,  456,  462,  462,  462,  462, 1136, 1136,  462,
1542      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1543      1136, 1136,  462, 1136,  462,  462,  462, 1136, 1136, 1136,
1544       462,  463, 1136,  463,  463,  463, 1136, 1136, 1136,  463,
1545       465, 1136,  465, 1136, 1136, 1136,  465, 1136,  465,  465,
1546       465, 1136, 1136, 1136,  465,  469,  469, 1136,  469, 1136,
1547
1548      1136, 1136,  469, 1136,  469,  469,  469, 1136, 1136, 1136,
1549       469,  474,  474, 1136,  474,  474,  474,  474,  474,  474,
1550       474, 1136,  474,  474,  474,  474,  474,  474,  474,  474,
1551       474,  474, 1136,  474,  474,  474,  474,  474,  474,  474,
1552       478, 1136, 1136,  478, 1136, 1136, 1136,  478, 1136,  478,
1553       478,  478, 1136, 1136, 1136,  478,  480,  480,  480,  480,
1554       480,  480,  480,  480,  480,  480,  480,  480,  480,  480,
1555       480,  480,  480,  480,  480, 1136,  480,  480,  480,  480,
1556       480,  480,  480,  480,  480,  482,  482, 1136,  482,  482,
1557       482,  482,  482,  482,  482,  482,  482,  482,  482,  482,
1558
1559       482,  482,  482,  482, 1136,  482,  482,  482,  482,  482,
1560       482,  482,  482,  482,  489, 1136, 1136,  489, 1136, 1136,
1561      1136,  489, 1136,  489,  489,  489, 1136, 1136, 1136,  489,
1562       493,  493, 1136,  493,  493,  493,  493,  493,  493,  493,
1563       493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
1564       493,  493,  493,  493,  493,  493,  493,  493,  493,  496,
1565       496, 1136,  496, 1136,  496,  496,  496,  496,  496, 1136,
1566       496,  496,  496,  496, 1136,  496,  496,  496, 1136,  496,
1567      1136,  496,  496,  496,  496,  496,  496,  496,  504, 1136,
1568      1136,  504, 1136, 1136, 1136,  504, 1136,  504,  504,  504,
1569
1570      1136, 1136, 1136,  504,  512,  512, 1136,  512, 1136,  512,
1571       512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
1572       512,  512,  512, 1136,  512, 1136,  512,  512,  512,  512,
1573       512,  512,  512,  516,  516, 1136,  516, 1136,  516,  516,
1574       516,  516,  516,  516,  516,  516,  516,  516,  516,  516,
1575       516,  516, 1136,  516, 1136,  516,  516,  516,  516,  516,
1576       516,  516,  525, 1136, 1136,  525, 1136, 1136, 1136,  525,
1577      1136,  525,  525,  525, 1136, 1136, 1136,  525,  529,  529,
1578      1136,  529,  529,  529,  529,  529, 1136, 1136,  529,  529,
1579       529,  529,  529,  529,  529,  529,  529, 1136,  529, 1136,
1580
1581       529,  529,  529,  529,  529,  529,  529,  536, 1136,  536,
1582       536,  536, 1136, 1136, 1136,  536,  538, 1136,  538,  538,
1583      1136, 1136,  538, 1136,  538,  538,  538, 1136, 1136, 1136,
1584       538,  541, 1136,  541,  541,  541, 1136, 1136, 1136,  541,
1585       543, 1136,  543,  543, 1136, 1136,  543, 1136,  543,  543,
1586       543, 1136, 1136, 1136,  543,  546,  546, 1136,  546,  546,
1587       546,  546,  546,  546,  546,  546,  546,  546,  546,  546,
1588       546,  546,  546,  546, 1136,  546, 1136,  546,  546,  546,
1589       546,  546,  546,  546,  549, 1136, 1136,  549, 1136, 1136,
1590      1136,  549, 1136,  549,  549,  549, 1136, 1136, 1136,  549,
1591
1592       551,  551, 1136,  551,  551,  551,  551,  551,  551,  551,
1593       551,  551,  551, 1136,  551,  551,  551,  551,  551,  551,
1594       551, 1136,  551,  551,  551,  551,  551,  551,  551,  554,
1595       554, 1136,  554,  554,  554,  554,  554,  554,  554, 1136,
1596       554,  554,  554,  554,  554,  554,  554,  554, 1136,  554,
1597      1136,  554,  554,  554,  554,  554,  554,  554,  557, 1136,
1598       557,  557,  557, 1136, 1136,  557, 1136,  557,  557,  557,
1599      1136, 1136, 1136,  557,  559,  559, 1136,  559,  559,  559,
1600       559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
1601       559,  559,  559,  559,  559, 1136,  559,  559,  559,  559,
1602
1603       559,  559,  559,  318,  318, 1136, 1136, 1136, 1136, 1136,
1604      1136, 1136, 1136, 1136, 1136,  318,  318,  318,  318,  318,
1605       318,  318, 1136,  318,  318,  292,  292, 1136,  292,  292,
1606       292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
1607       292,  292,  292,  292,  292,  292,  292,  292,  292,  292,
1608       292,  292,  292,  292,  295, 1136,  295,  295,  295, 1136,
1609      1136, 1136,  295,  563,  563, 1136, 1136,  563, 1136,  563,
1610       563,  563, 1136, 1136, 1136,  563,  296, 1136,  296,  296,
1611      1136,  296, 1136, 1136,  296,  296, 1136,  296,  296,  296,
1612       565, 1136, 1136,  565, 1136, 1136, 1136,  565, 1136,  565,
1613
1614       565,  565,  571, 1136, 1136,  571, 1136,  571,  571,  571,
1615       571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
1616       571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
1617       571,  588, 1136,  588,  588,  588, 1136, 1136,  588,  329,
1618      1136,  329,  329, 1136,  329, 1136, 1136,  329,  329, 1136,
1619       329,  329,  329,  330, 1136, 1136,  330, 1136, 1136, 1136,
1620      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1621      1136, 1136,  330,  330,  330,  330,  330,  353,  353, 1136,
1622       353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
1623       353,  353,  353,  353,  353,  353,  353,  353,  353,  353,
1624
1625       353,  353,  353,  353,  353,  353,  355, 1136,  355,  355,
1626       355,  355,  355, 1136, 1136,  355,  355,  355,  355,  355,
1627      1136, 1136, 1136,  355,  618, 1136,  618, 1136,  618,  618,
1628       618, 1136, 1136,  618,  618,  618,  618,  618, 1136, 1136,
1629      1136,  618,  361,  361,  361,  361,  361,  361,  361,  361,
1630       361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
1631       361,  361,  361,  361,  361,  361,  361,  361,  361,  361,
1632       361,  365, 1136,  365,  365, 1136, 1136,  365, 1136,  365,
1633       365,  365, 1136, 1136, 1136,  365,  363, 1136, 1136, 1136,
1634      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,  363,
1635
1636      1136,  363,  363,  363, 1136, 1136, 1136,  363,  374,  374,
1637       374,  374, 1136, 1136,  374, 1136, 1136, 1136, 1136, 1136,
1638      1136,  374, 1136, 1136,  374, 1136, 1136,  374, 1136,  374,
1639       374,  374, 1136, 1136,  374,  374,  377,  377,  377,  377,
1640      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,  377,
1641      1136,  377,  377, 1136, 1136,  377, 1136,  377,  377,  377,
1642      1136, 1136, 1136,  377,  383,  383,  383,  383, 1136, 1136,
1643       383, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1644      1136, 1136, 1136,  383, 1136,  383,  383,  383, 1136, 1136,
1645      1136,  383,  624, 1136, 1136, 1136,  624, 1136,  624,  624,
1646
1647       624, 1136, 1136, 1136,  624,  384,  384, 1136,  384,  384,
1648       384,  384,  384,  384,  384,  384,  384,  384,  384,  384,
1649       384,  384,  384,  384,  384,  384,  384,  384,  384,  384,
1650       384,  384,  384,  384,  386, 1136,  386,  386,  386,  386,
1651       386, 1136, 1136,  386,  386,  386,  386,  386, 1136, 1136,
1652      1136,  386,  625, 1136,  625, 1136,  625,  625,  625, 1136,
1653      1136,  625,  625,  625,  625,  625, 1136, 1136, 1136,  625,
1654       392,  392, 1136,  392,  392,  392,  392,  392,  392,  392,
1655       392,  392,  392,  392,  392,  392,  392,  392,  392,  392,
1656       392,  392,  392,  392,  392,  392,  392,  392,  392,  394,
1657
1658       394, 1136,  394,  394,  394,  394,  394,  394,  394,  394,
1659       394,  394,  394,  394,  394,  394,  394,  394,  394,  394,
1660       394,  394,  394,  394,  394,  394,  394,  394,  398, 1136,
1661      1136, 1136, 1136, 1136,  398, 1136,  398,  398,  398,  398,
1662       398,  398, 1136,  398,  398,  398,  398,  398, 1136, 1136,
1663      1136,  398,  630, 1136,  630, 1136,  630,  630,  630, 1136,
1664      1136,  630,  630,  630,  630,  630, 1136, 1136, 1136,  630,
1665       409,  409,  409,  409, 1136, 1136,  409, 1136, 1136, 1136,
1666      1136, 1136, 1136,  409, 1136, 1136,  409, 1136, 1136,  409,
1667      1136,  409,  409,  409, 1136, 1136,  409,  409,  414,  414,
1668
1669       414,  414, 1136, 1136, 1136,  414, 1136, 1136, 1136, 1136,
1670      1136,  414, 1136,  414,  414, 1136, 1136,  414, 1136,  414,
1671       414,  414, 1136, 1136, 1136,  414,  417,  417,  417,  417,
1672      1136, 1136,  417, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1673      1136, 1136, 1136, 1136, 1136,  417, 1136,  417,  417,  417,
1674      1136, 1136, 1136,  417,  633,  633,  633,  633,  633,  633,
1675       633,  633,  633, 1136,  633,  633,  633,  633,  633,  633,
1676       633,  633,  633,  633,  633,  633,  633,  633,  633,  633,
1677       633,  633,  633,  635, 1136, 1136,  635, 1136, 1136, 1136,
1678       635, 1136, 1136, 1136, 1136, 1136, 1136, 1136,  635, 1136,
1679
1680      1136, 1136,  635, 1136,  635,  635,  635, 1136, 1136, 1136,
1681       635,  418, 1136, 1136,  418, 1136, 1136, 1136,  418, 1136,
1682       418,  418,  418, 1136, 1136, 1136,  418,  422,  422, 1136,
1683       422,  422,  422,  422,  422,  422,  422,  422,  422,  422,
1684       422,  422,  422,  422,  422,  422,  422,  422,  422,  422,
1685       422,  422,  422,  422,  422,  422,  427,  427, 1136,  427,
1686       427,  427,  427,  427,  427,  427,  427,  427,  427,  427,
1687       427,  427,  427,  427,  427,  427,  427,  427,  427,  427,
1688       427,  427,  427,  427,  427,  432,  432, 1136,  432,  432,
1689       432,  432,  432,  432,  432,  432,  432,  432,  432,  432,
1690
1691       432,  432,  432,  432,  432,  432,  432,  432,  432,  432,
1692       432,  432,  432,  432,  434, 1136,  434,  434,  434,  434,
1693       434, 1136, 1136,  434,  434,  434,  434,  434, 1136, 1136,
1694      1136,  434,  639, 1136,  639, 1136,  639,  639,  639, 1136,
1695      1136,  639,  639,  639,  639,  639, 1136, 1136, 1136,  639,
1696       445,  445,  445,  445, 1136, 1136,  445, 1136, 1136, 1136,
1697      1136, 1136, 1136, 1136, 1136,  445,  445, 1136, 1136,  445,
1698      1136,  445,  445,  445, 1136, 1136, 1136,  445,  642, 1136,
1699       642,  642,  642, 1136, 1136, 1136,  642,  645,  645,  645,
1700       645, 1136, 1136,  645, 1136, 1136, 1136, 1136, 1136, 1136,
1701
1702      1136, 1136,  645,  645, 1136, 1136,  645, 1136,  645,  645,
1703       645, 1136, 1136, 1136,  645,  453,  453,  453,  453, 1136,
1704      1136,  453, 1136, 1136, 1136, 1136, 1136, 1136,  453, 1136,
1705      1136,  453, 1136, 1136,  453, 1136,  453,  453,  453, 1136,
1706      1136,  453,  453,  456,  456,  456,  456, 1136, 1136, 1136,
1707      1136, 1136, 1136, 1136, 1136, 1136,  456, 1136,  456,  456,
1708      1136, 1136,  456, 1136,  456,  456,  456, 1136, 1136, 1136,
1709       456,  462,  462,  462,  462, 1136, 1136,  462, 1136, 1136,
1710      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1711       462, 1136,  462,  462,  462, 1136, 1136, 1136,  462,  648,
1712
1713      1136, 1136, 1136,  648, 1136,  648,  648,  648, 1136, 1136,
1714      1136,  648,  465, 1136,  465, 1136, 1136, 1136,  465, 1136,
1715       465,  465,  465, 1136, 1136, 1136,  465,  650, 1136, 1136,
1716      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1717       650, 1136,  650,  650,  650, 1136, 1136, 1136,  650,  469,
1718       469, 1136,  469, 1136, 1136, 1136,  469, 1136,  469,  469,
1719       469, 1136, 1136, 1136,  469,  474,  474, 1136,  474,  474,
1720       474,  474,  474,  474,  474, 1136,  474,  474,  474,  474,
1721       474,  474,  474,  474,  474,  474, 1136,  474,  474,  474,
1722       474,  474,  474,  474,  478, 1136, 1136,  478, 1136, 1136,
1723
1724      1136,  478, 1136,  478,  478,  478, 1136, 1136, 1136,  478,
1725       480,  480,  480,  480,  480,  480,  480,  480,  480,  480,
1726       480,  480,  480,  480,  480,  480,  480,  480,  480, 1136,
1727       480,  480,  480,  480,  480,  480,  480,  480,  480,  482,
1728       482, 1136,  482,  482,  482,  482,  482,  482,  482,  482,
1729       482,  482,  482,  482,  482,  482,  482,  482, 1136,  482,
1730       482,  482,  482,  482,  482,  482,  482,  482,  657, 1136,
1731      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1732      1136,  657, 1136,  657,  657,  657, 1136, 1136, 1136,  657,
1733       489, 1136, 1136,  489, 1136, 1136, 1136,  489, 1136,  489,
1734
1735       489,  489, 1136, 1136, 1136,  489,  493,  493, 1136,  493,
1736       493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
1737       493,  493,  493,  493,  493,  493,  493,  493,  493,  493,
1738       493,  493,  493,  493,  493,  496,  496, 1136,  496, 1136,
1739       496,  496,  496,  496,  496, 1136,  496,  496,  496,  496,
1740      1136,  496,  496,  496, 1136,  496, 1136,  496,  496,  496,
1741       496,  496,  496,  496,  504, 1136, 1136,  504, 1136, 1136,
1742      1136,  504, 1136,  504,  504,  504, 1136, 1136, 1136,  504,
1743       512,  512, 1136,  512, 1136,  512,  512,  512,  512,  512,
1744       512,  512,  512,  512,  512,  512,  512,  512,  512, 1136,
1745
1746       512, 1136,  512,  512,  512,  512,  512,  512,  512,  516,
1747       516, 1136,  516, 1136,  516,  516,  516,  516,  516,  516,
1748       516,  516,  516,  516,  516,  516,  516,  516, 1136,  516,
1749      1136,  516,  516,  516,  516,  516,  516,  516,  525, 1136,
1750      1136,  525, 1136, 1136, 1136,  525, 1136,  525,  525,  525,
1751      1136, 1136, 1136,  525,  529,  529, 1136,  529,  529,  529,
1752       529,  529, 1136, 1136,  529,  529,  529,  529,  529,  529,
1753       529,  529,  529, 1136,  529, 1136,  529,  529,  529,  529,
1754       529,  529,  529,  538, 1136,  538,  538, 1136, 1136,  538,
1755      1136,  538,  538,  538, 1136, 1136, 1136,  538,  536, 1136,
1756
1757      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1758      1136,  536, 1136,  536,  536,  536, 1136, 1136, 1136,  536,
1759       543, 1136,  543,  543, 1136, 1136,  543, 1136,  543,  543,
1760       543, 1136, 1136, 1136,  543,  541, 1136, 1136, 1136, 1136,
1761      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,  541, 1136,
1762       541,  541,  541, 1136, 1136, 1136,  541,  546,  546, 1136,
1763       546,  546,  546,  546,  546,  546,  546,  546,  546,  546,
1764       546,  546,  546,  546,  546,  546, 1136,  546, 1136,  546,
1765       546,  546,  546,  546,  546,  546,  549, 1136, 1136,  549,
1766      1136, 1136, 1136,  549, 1136,  549,  549,  549, 1136, 1136,
1767
1768      1136,  549,  551,  551, 1136,  551,  551,  551,  551,  551,
1769       551,  551,  551,  551,  551, 1136,  551,  551,  551,  551,
1770       551,  551,  551, 1136,  551,  551,  551,  551,  551,  551,
1771       551,  554,  554, 1136,  554,  554,  554,  554,  554,  554,
1772       554, 1136,  554,  554,  554,  554,  554,  554,  554,  554,
1773      1136,  554, 1136,  554,  554,  554,  554,  554,  554,  554,
1774       557, 1136,  557,  557,  557, 1136, 1136,  557, 1136,  557,
1775       557,  557, 1136, 1136, 1136,  557,  559,  559, 1136,  559,
1776       559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
1777       559,  559,  559,  559,  559,  559,  559, 1136,  559,  559,
1778
1779       559,  559,  559,  559,  559,  563,  563, 1136, 1136,  563,
1780      1136,  563,  563,  563, 1136, 1136, 1136,  563,  697,  697,
1781      1136,  697,  697,  697,  697, 1136,  697,  697,  697,  697,
1782       697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
1783       697,  697,  697,  697,  697,  697,  697,  565,  565, 1136,
1784       565, 1136, 1136, 1136,  565, 1136,  565,  565,  565,  296,
1785      1136,  296,  296, 1136,  296, 1136, 1136,  296,  296, 1136,
1786       296,  296,  296,  571, 1136, 1136,  571, 1136,  571,  571,
1787       571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
1788       571,  571,  571,  571,  571,  571,  571,  571,  571,  571,
1789
1790       571,  571,  706,  706, 1136,  706,  706,  706,  706,  706,
1791       706,  706,  706,  706,  706,  706,  706,  706,  706,  706,
1792       706,  706,  706,  706,  706,  706,  706,  706,  706,  706,
1793       706,  588, 1136, 1136,  588, 1136, 1136, 1136, 1136, 1136,
1794      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1795       588, 1136,  588,  588,  588,  318, 1136, 1136,  318, 1136,
1796      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1797      1136, 1136, 1136, 1136,  318, 1136,  318,  318,  318,  719,
1798       719, 1136,  719,  719,  719,  719,  719,  719,  719,  719,
1799       719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
1800
1801       719,  719,  719,  719,  719, 1136,  719,  719,  330, 1136,
1802      1136,  330, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1803      1136, 1136, 1136, 1136, 1136, 1136, 1136,  330,  330,  330,
1804       330,  330,  618, 1136,  618,  618,  618,  618,  618, 1136,
1805      1136,  618,  618,  618,  618,  618, 1136, 1136, 1136,  618,
1806       355, 1136,  355,  355,  355,  355,  355, 1136, 1136,  355,
1807       355,  355,  355,  355, 1136, 1136, 1136,  355,  363, 1136,
1808       363,  363,  363, 1136, 1136, 1136,  363,  624, 1136, 1136,
1809      1136,  624, 1136,  624,  624,  624, 1136, 1136, 1136,  624,
1810       625, 1136,  625,  625,  625,  625,  625, 1136, 1136,  625,
1811
1812       625,  625,  625,  625, 1136, 1136, 1136,  625,  386, 1136,
1813       386,  386,  386,  386,  386, 1136, 1136,  386,  386,  386,
1814       386,  386, 1136, 1136, 1136,  386,  738,  738, 1136,  738,
1815       738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
1816       738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
1817       738,  738,  738,  738,  738,  630, 1136, 1136, 1136, 1136,
1818      1136,  630, 1136,  630,  630,  630,  630,  630,  630, 1136,
1819       630,  630,  630,  630,  630, 1136, 1136, 1136,  630,  398,
1820      1136, 1136, 1136, 1136, 1136,  398, 1136,  398,  398,  398,
1821       398,  398,  398, 1136,  398,  398,  398,  398,  398, 1136,
1822
1823      1136, 1136,  398,  633,  633,  633,  633,  633,  633,  633,
1824       633,  633,  633,  633,  633,  633,  633,  633,  633,  633,
1825       633,  633,  633,  633,  633,  633,  633,  633,  633,  633,
1826       633,  633,  635, 1136, 1136,  635, 1136, 1136, 1136,  635,
1827      1136, 1136, 1136, 1136, 1136, 1136, 1136,  635, 1136, 1136,
1828      1136,  635, 1136,  635,  635,  635, 1136, 1136, 1136,  635,
1829       639, 1136,  639,  639,  639,  639,  639, 1136, 1136,  639,
1830       639,  639,  639,  639, 1136, 1136, 1136,  639,  434, 1136,
1831       434,  434,  434,  434,  434, 1136, 1136,  434,  434,  434,
1832       434,  434, 1136, 1136, 1136,  434,  748,  748,  748,  748,
1833
1834      1136, 1136,  748, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1835      1136,  748,  748, 1136, 1136,  748, 1136,  748,  748,  748,
1836      1136, 1136, 1136,  748,  642,  642,  642,  642, 1136, 1136,
1837       642, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1838       642, 1136, 1136,  642, 1136,  642,  642,  642, 1136, 1136,
1839      1136,  642,  645,  645,  645,  645, 1136, 1136,  645, 1136,
1840      1136, 1136, 1136, 1136, 1136, 1136, 1136,  645,  645, 1136,
1841      1136,  645, 1136,  645,  645,  645, 1136, 1136, 1136,  645,
1842       648, 1136, 1136, 1136,  648, 1136,  648,  648,  648, 1136,
1843      1136, 1136,  648,  650, 1136,  650,  650,  650, 1136, 1136,
1844
1845      1136,  650,  752, 1136,  752, 1136, 1136, 1136,  752, 1136,
1846       752,  752,  752, 1136, 1136, 1136,  752,  657, 1136,  657,
1847       657,  657, 1136, 1136, 1136,  657,  758, 1136, 1136, 1136,
1848       758, 1136,  758,  758,  758, 1136, 1136, 1136,  758,  769,
1849       769,  769,  769,  769,  769,  769,  769,  769,  769,  769,
1850       769,  769,  769,  769,  769, 1136,  769,  769,  769, 1136,
1851       769, 1136, 1136,  769,  769,  769,  769,  769,  536, 1136,
1852       536,  536,  536, 1136, 1136, 1136,  536,  541, 1136,  541,
1853       541,  541, 1136, 1136, 1136,  541,  697,  697, 1136,  697,
1854       697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
1855
1856       697,  697,  697,  697,  697,  697,  697,  697,  697,  697,
1857       697,  697,  697,  697,  697,  793, 1136, 1136,  793, 1136,
1858      1136, 1136,  793, 1136,  793,  793,  793,  302, 1136,  302,
1859      1136,  302,  302, 1136,  302, 1136, 1136,  302,  302, 1136,
1860       302,  302,  302,  706,  706, 1136,  706,  706,  706,  706,
1861       706,  706,  706,  706,  706,  706,  706,  706,  706,  706,
1862       706,  706,  706,  706,  706,  706,  706,  706,  706,  706,
1863       706,  706,  318, 1136, 1136,  318, 1136, 1136, 1136, 1136,
1864      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1865      1136,  318, 1136,  318,  318,  318,  719,  719, 1136,  719,
1866
1867       719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
1868       719,  719,  719,  719,  719,  719,  719,  719,  719,  719,
1869       719,  719,  719,  719,  719,  723,  723,  723,  723,  723,
1870       330, 1136, 1136,  330, 1136, 1136, 1136, 1136, 1136, 1136,
1871      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,  330,
1872       330,  330,  330,  330,  296,  296, 1136,  296, 1136, 1136,
1873      1136, 1136, 1136, 1136,  296, 1136,  296,  296, 1136,  296,
1874       296, 1136,  296,  296, 1136,  296,  296,  296,  296,  355,
1875      1136,  355,  355,  355,  355,  355, 1136, 1136,  355,  355,
1876       355,  355,  355, 1136, 1136, 1136,  355,  386, 1136,  386,
1877
1878       386,  386,  386,  386, 1136, 1136,  386,  386,  386,  386,
1879       386, 1136, 1136, 1136,  386,  738,  738, 1136,  738,  738,
1880       738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
1881       738,  738,  738,  738,  738,  738,  738,  738,  738,  738,
1882       738,  738,  738,  738,  398, 1136, 1136, 1136, 1136, 1136,
1883       398, 1136,  398,  398,  398,  398,  398,  398, 1136,  398,
1884       398,  398,  398,  398, 1136, 1136, 1136,  398,  434, 1136,
1885       434,  434,  434,  434,  434, 1136, 1136,  434,  434,  434,
1886       434,  434, 1136, 1136, 1136,  434,  826, 1136,  826,  826,
1887       826, 1136, 1136, 1136,  826,  748,  748,  748,  748, 1136,
1888
1889      1136,  748, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1890       748,  748, 1136, 1136,  748, 1136,  748,  748,  748, 1136,
1891      1136, 1136,  748,  642,  642,  642,  642, 1136, 1136,  642,
1892      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,  642,
1893      1136, 1136,  642, 1136,  642,  642,  642, 1136, 1136, 1136,
1894       642,  871,  871, 1136,  871, 1136, 1136, 1136,  871, 1136,
1895       871,  871,  871,  877,  877, 1136,  877,  877,  877,  877,
1896       877,  877,  877,  877,  877,  877,  877,  877,  877,  877,
1897       877,  877,  877,  877,  877,  877,  877,  877,  877,  877,
1898       877,  877,  805,  805,  805,  805,  805,  805,  805,  805,
1899
1900       805,  805,  805,  805,  805,  805,  805,  805,  805,  805,
1901       805,  805, 1136,  805, 1136, 1136, 1136,  805,  805,  805,
1902       805,  899,  899,  899,  899, 1136, 1136,  899, 1136, 1136,
1903      1136, 1136, 1136, 1136, 1136, 1136,  899,  899, 1136, 1136,
1904       899, 1136,  899,  899,  899, 1136, 1136, 1136,  899,  923,
1905       923,  923,  923,  923,  923,  923,  923,  923,  923,  923,
1906       923,  923,  923,  923,  923, 1136,  923,  923,  923, 1136,
1907       923, 1136,  923, 1136,  923,  923,  923,  923,  950,  950,
1908      1136,  950,  950,  950,  950,  950,  950,  950,  950,  950,
1909       950,  950,  950,  950,  950,  950,  950,  950,  950,  950,
1910
1911       950,  950,  950,  950,  950,  950,  950,  992,  992,  992,
1912       992,  992,  992,  992,  992,  992,  992,  992,  992,  992,
1913       992,  992,  992, 1136,  992,  992,  992, 1136,  992, 1136,
1914      1136, 1136,  992,  992,  992,  992,  993,  993,  993,  993,
1915       993,  993,  993,  993,  993,  993,  993,  993,  993,  993,
1916       993,  993, 1136,  993,  993,  993, 1136,  993, 1136, 1136,
1917      1136,  993,  993,  993,  993, 1043, 1043, 1043, 1043, 1043,
1918      1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043, 1043,
1919      1043, 1136, 1043, 1043, 1043, 1136, 1043, 1136, 1136, 1136,
1920      1043, 1043, 1043, 1043, 1053, 1053, 1053, 1053, 1053, 1053,
1921
1922      1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053, 1053,
1923      1136, 1053, 1053, 1053, 1136, 1053, 1136, 1136, 1136, 1053,
1924      1053, 1053, 1053,   83, 1136, 1136, 1136, 1136, 1136, 1136,
1925      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1926      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1927      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1928      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1929      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1930      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
1931      1136, 1136, 1136, 1136, 1136
1932
1933     } ;
1934
1935 static yyconst flex_int16_t yy_chk[8796] =
1936     {   0,
1937         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
1938         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
1939         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
1940         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
1941         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
1942         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
1943         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
1944         3,    4,   21,   22,    4,   23,   21,   22,  513,   23,
1945       513,    4,    4,   24,    4,    4,   35,   24,    4,    4,
1946         4,   36,   39,   47,   40,   35,   48,   53,   91,   53,
1947
1948        36,   39,   98,   40,  115,   98,  229,   91, 1130,  115,
1949       229,   21,   22,   39,   23,   40,   43,   43,   53,   43,
1950      1126,   43,   24,   44,   44,   35,   44,   57,   44,   58,
1951        36,   39,   47,   40,   63,   48,   53,    4,    5,    5,
1952         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
1953        54,    5,   54,    5,    5,   45,   43,   45,    5,    5,
1954         5,    5,   99,   44,   45,   99,   57,  204,   58,   45,
1955       204,   54,  204,   63,  278,  393,   45,  214,    5,    5,
1956         5,   46,  214,   46,   99,   51,   51,   64,   51,   54,
1957        46,  393, 1123, 1119,   45,   46,   52,   52,   81,   52,
1958
1959       278,   55,   46,   55,    5,    5,    5,    5,    6,    6,
1960         6,    6,    6,    6,    6,    6,    6,    6,    6,    6,
1961        46,    6,   55,    6,    6,   51,   64,   75,    6,    6,
1962         6,    6,   56,   69,   56, 1116,   52,   81,  255,   75,
1963        55, 1115,   92,  255,   92,   92,   92,   92,    6,    6,
1964         6,  552,  260,   56,   69,   92,   95,  260,   95,   95,
1965       230,   95,   95,   95, 1114,  230,   75,   95,  552,  230,
1966      1113,   56,   69,   92,    6,    6,    6,    6,    9,    9,
1967         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
1968         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
1969
1970         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
1971         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
1972         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
1973         9,    9,    9,    9,    9,    9,    9,    9,    9,    9,
1974         9,    9,    9,    9,    9,    9,    9,    9,    9,   11,
1975        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
1976        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
1977        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
1978        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
1979        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
1980
1981        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
1982        11,   11,   11,   11,   11,   11,   11,   11,   11,   11,
1983        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
1984        13,   13,   82,   13,   70,   13,   13,   61,   71,   76,
1985        13,   13,   13,   13,   61,   61,   62,  298,  312,  303,
1986       520,   76,  303,   62,   62,   70,  298,  324,   61,   71,
1987        13,   13,   13,   72,  520,  195,  324,   62,  312,   87,
1988        87,   82,   87,   70,  195, 1109,   61,   71,   76,  116,
1989       116, 1079,  116, 1079,   72,   62,   13,   13,   13,   13,
1990        14,   14,   14,   14,   14,   14,   14,   14,   14,   14,
1991
1992        14,   14,   72,   14,  195,   14,   14,   77,   78,   87,
1993        14,   14,   14,   14,  317,   86,   77,   78,   86,  307,
1994       100,  116,  339,  100,  344,  339,  306,  344,   77,   78,
1995        14,   14,   14,  100,  317,  124,  124,   86,  124,  100,
1996       307,  102,  100,  102,  102,  102,   77,   78,  306,  102,
1997       151,  151,  578,  151, 1108,   86,   14,   14,   14,   14,
1998        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
1999        15,   15,  578,   15,  363,   15,   15,  124,  309,  363,
2000        15,   15,   15,   15,  101,  101,  100,  101,  548,  628,
2001      1097,  103,  151,  101,  103,  101,  101,  101,  101,  309,
2002
2003        15,   15,   15, 1097,  103,  628,  101, 1121,  223,  223,
2004       103,  223,  155,  155,  548,  155,  107,  107,  108,  108,
2005       365,  107, 1121,  108,  101,  365,   15,   15,   15,   15,
2006        16,   16,   16,   16,   16,   16,   16,   16,   16,   16,
2007        16,   16,  107,   16,  108,   16,   16,  310,  223, 1106,
2008        16,   16,   16,   16,  155,  289,  289,  103,  289,  118,
2009       118,  118,  118,  119,  119,  119,  119,  313,  310,  305,
2010        16,   16,   16,  118, 1105,  536,  491,  119,  118,  491,
2011       536,  491,  119,  125,  125,  125,  125, 1104,  313,  538,
2012       125,  305,  305,  305,  538,  289,   16,   16,   16,   16,
2013
2014        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2015        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2016        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2017        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2018        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2019        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2020        17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
2021        17,   19,   19,   19,   19,   19,   19,   19,   19,   19,
2022        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
2023        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
2024
2025        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
2026        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
2027        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
2028        19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
2029        19,   19,   25,   25,   25,   25,   25,   25,   25,   25,
2030        25,   25,   25,   25,  541,   25,  543,   25,   25,  541,
2031      1103,  543,   25,   25,   25,   25,  710,  123,  123,  123,
2032       123,  120,  120,  120,  120,  129,  129, 1102,  120, 1101,
2033       129,  123,   25,   25,   25,  120,  123,  710,  159,  159,
2034       120,  159, 1100,  147,  147,  147,  147,  480,  130,  130,
2035
2036       147,  129, 1092,  130,  170,  170,  480,  170,   25,   25,
2037        25,   25,   26,   26,   26,   26,   26,   26,   26,   26,
2038        26,   26,   26,   26,  130,   26,  588,   26,   26,  588,
2039       159,  136,   26,   26,   26,   26,  480,  163,  163,  120,
2040       136,  136,  163,  575,  580,  136,  170,  136,  141,  141,
2041       141,  141,   26,   26,   26,  142,  142,  142,  142,  841,
2042      1091,  853,  141,  163,  580,  575,  136,  141,  853,  142,
2043       179,  179,  179,  179,  142,  841, 1089,  179,   26,   26,
2044        26,   26,   27,   27,   27,   27,   27,   27,   27,   27,
2045        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
2046
2047        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
2048        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
2049        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
2050        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
2051        27,   27,   27,   27,   27,   27,   27,   27,   27,   27,
2052        27,   27,   27,   29,   29,   29,   29,   29,   29,   29,
2053        29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
2054        29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
2055        29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
2056        29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
2057
2058        29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
2059        29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
2060        29,   29,   29,   29,   31,   31,   31,   31,   31,   31,
2061        31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
2062        31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
2063        31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
2064        31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
2065        31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
2066        31,   31,   31,   31,   31,   31,   31,   31,   31,   31,
2067        31,   31,   31,   31,   31,   33,   33,   33,   33,   33,
2068
2069        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
2070        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
2071        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
2072        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
2073        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
2074        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
2075        33,   33,   33,   33,   33,   33,   37,   37,   37,   37,
2076        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
2077        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
2078        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
2079
2080        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
2081        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
2082        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
2083        37,   37,   37,   37,   37,   37,   37,   41,   41,   41,
2084        41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
2085        41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
2086        41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
2087        41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
2088        41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
2089        41,   41,   41,   41,   41,   41,   41,   41,   41,   41,
2090
2091        41,   41,   41,   41,   41,   41,   41,   41,   49,   49,
2092        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
2093        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
2094        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
2095        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
2096        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
2097        49,   49,   49,   49,   49,   49,   49,   49,   49,   49,
2098        49,   49,   49,   49,   49,   49,   49,   49,   49,   59,
2099        59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
2100        59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
2101
2102        59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
2103        59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
2104        59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
2105        59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
2106        59,   59,   59,   59,   59,   59,   59,   59,   59,   59,
2107        65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
2108        65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
2109        65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
2110        65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
2111        65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
2112
2113        65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
2114        65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
2115        65,   67,   67,   67,   67,   67,   67,   67,   67,   67,
2116        67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
2117        67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
2118        67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
2119        67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
2120        67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
2121        67,   67,   67,   67,   67,   67,   67,   67,   67,   67,
2122        67,   67,   73,   73,   73,   73,   73,   73,   73,   73,
2123
2124        73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
2125        73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
2126        73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
2127        73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
2128        73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
2129        73,   73,   73,   73,   73,   73,   73,   73,   73,   73,
2130        73,   73,   73,   79,   79,   79,   79,   79,   79,   79,
2131        79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
2132        79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
2133        79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
2134
2135        79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
2136        79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
2137        79,   79,   79,   79,   79,   79,   79,   79,   79,   79,
2138        79,   79,   79,   79,   93,  121,  121,  121,  121,  323,
2139      1088, 1087,  121,  109,  109,   93,  109,  164,  164,  121,
2140       341,  341,  164,  341,  121,   93,   93,  109,  109,  308,
2141        93,   93,  109,  579,   93,   93,  579,   93,   93,  178,
2142       178,  323,  178,  164,  584,   93,   93,  583,  308,  330,
2143        93,   93,  330,  109,  579,  109,   93,   93,   93,   93,
2144        93,   93,   94,   94,  584,  132,  132,  323,  132,  583,
2145
2146       308,  184,  184,  121,  184,  585,   94,   94,   94,  132,
2147       132,  178, 1086,  137,  132,  187,  187,  349,  187,  330,
2148       349,  581,  137,  137,  581,  585,   94,  137, 1085,  137,
2149        94,  138,   94,   94,   94,  132,  857,  132, 1084,  349,
2150       138,  138,  581,  184, 1133,  138,   94,  138,  137,   94,
2151       857,   94, 1083,   94,   94,   96,   96,  187,  140,  140,
2152      1082,  140, 1133,  140,  190,  190,  138,  190, 1073,   96,
2153        96,   96,  140,  140, 1072,  347,  347,  140,  347,  140,
2154       143,  143,  143,  143, 1059,  217,  217,  143,  217,   96,
2155      1058,   96, 1056,   96,  143,   96,   96,   96,  140,  143,
2156
2157       140,  144,  144,  144,  144, 1055,  190, 1049,  144,   96,
2158       221,  221,   96,  221,   96,  144,   96,   96,   97,  702,
2159       144,   97,  238,  238, 1048,  238,  705,  217,   97,   97,
2160       417,   97,   97,  417, 1111,   97,   97,   97,  417,  702,
2161        97,  146,  146,  146,  146, 1111,  705,  234,  143,  146,
2162       356,  234,  221,  591,  356,  146,  591,  234,   97,  234,
2163       146, 1047,  165,  165,  238,  165, 1128,  242,  242,  144,
2164       242,  290,  290, 1128,  290,  356,  165,  165,  695,  358,
2165       358,  165,  358, 1131,   97,  135,  135, 1131,  135,  135,
2166       135,  135,  135,  135,  135,  135,  135,  708,  135,  387,
2167
2168       135,  135,  165,  387,  165,  135,  135,  135,  135,  242,
2169       695,  290,  169,  169,  169,  169, 1046,  708,  802,  169,
2170       172,  172,  172,  172,  387,  135,  135,  135,  169,  169,
2171       169,  169,  248,  248,  172,  248,  695,  333,  802,  172,
2172       333,  173,  173,  173,  173, 1045,  592,  251,  251,  592,
2173       251,  135,  135,  135,  135,  173,  174,  174,  174,  174,
2174       173, 1044, 1017,  174,  175,  175,  175,  175, 1016, 1015,
2175       174,  175,  198,  198,  248,  174, 1014,  333,  175,  177,
2176       177,  177,  177,  175,  333,  235,  198,  198,  198,  251,
2177       235,  355,  355,  177,  235,  592,  355, 1013,  177, 1012,
2178
2179       235, 1011,  235, 1010,  286,  331,  198,  286,  331,  329,
2180       311,  329,  329,  311,  329,  329,  329,  355,  611,  332,
2181       329,  611,  332, 1009,  174,  336,  286,  334,  336, 1008,
2182       334,  311,  175,  311,  198,  199,  199,  594,  199, 1007,
2183       594,  199,  199, 1006,  286,  331,  311,  335,  337,  617,
2184       335,  337,  617,  311,  335,  199,  199,  199,  331,  332,
2185       340,  367,  367,  340,  367,  336,  689,  334,  311,  689,
2186      1005,  343,  336,  340,  343,  199, 1004,  199, 1003,  340,
2187       332,  336,  334,  594,  343, 1002,  335,  335,  337,  342,
2188       343,  342,  342,  342,  345,  346,  346,  345,  346,  378,
2189
2190       378, 1001,  378,  199,  287,  287,  337,  345,  346, 1000,
2191       357,  357,  335,  345,  346,  357,  999,  346,  287,  287,
2192       287,  350,  998,  350,  350,  350,  340,  997,  351,  350,
2193       352,  351,  598,  352,  995,  598,  357,  343,  287,  389,
2194       389,  351,  389,  352,  399,  287,  287,  351,  399,  352,
2195       360,  360,  994,  990,  989,  360,  370,  370,  370,  370,
2196       345,  346,  988,  287,  987,  287,  287,  288,  288,  399,
2197       370,  374,  374,  374,  374,  370,  360,  375,  375,  375,
2198       375,  288,  288,  288,  375,  374,  986,  985,  984,  360,
2199       374,  598,  402,  402,  351,  402,  352,  371,  371,  371,
2200
2201       371,  288,  983,  982,  371,  386,  386,  981,  288,  288,
2202       386,  371,  381,  381,  381,  381,  371,  979,  978,  381,
2203       382,  382,  382,  382,  977,  976,  288,  382,  288,  288,
2204       301,  386,  975,  301,  974,  301,  301,  301,  301,  301,
2205       301,  301,  301,  301,  301,  301,  301,  973,  972,  971,
2206       301,  301,  301,  301,  419,  419,  970,  419,  968,  373,
2207       373,  373,  373,  388,  388,  371,  373,  967,  388,  966,
2208       301,  301,  301,  373,  376,  376,  376,  376,  373,  391,
2209       391,  376,  424,  424,  391,  424,  963,  599,  376,  388,
2210       599,  429,  429,  376,  429,  962,  301,  301,  301,  301,
2211
2212       301,  318,  953,  700,  318,  391,  700,  318,  318,  952,
2213       377,  377,  377,  377,  437,  437,  398,  437,  391,  950,
2214       949,  318,  318,  318,  377,  398,  398,  373,  948,  377,
2215       398,  671,  398,  599,  671,  947,  400,  410,  410,  410,
2216       410,  318,  376,  946,  410,  400,  400,  404,  434,  434,
2217       400,  398,  400,  434,  435,  945,  404,  404,  435,  436,
2218       436,  404,  593,  404,  436,  593,  318,  944,  318,  318,
2219       338,  400,  943,  338,  434,  441,  441,  441,  441,  435,
2220       338,  338,  404,  338,  338,  436,  671,  338,  338,  338,
2221       446,  446,  338,  446,  441,  404,  942,  405,  405,  405,
2222
2223       405,  406,  406,  406,  406,  941,  457,  457,  406,  457,
2224       338,  405,  940,  939,  600,  406,  405,  600,  938,  593,
2225       406,  415,  415,  415,  415,  439,  439,  937,  415,  936,
2226       439,  935,  416,  416,  416,  416,  338,  394,  394,  416,
2227       394,  394,  394,  394,  394,  394,  394,  394,  394,  934,
2228       394,  439,  394,  394,  933,  932,  931,  394,  394,  394,
2229       394,  600,  929,  927,  439,  454,  454,  454,  454,  406,
2230       924,  922,  454,  408,  408,  408,  408,  394,  394,  394,
2231       408,  409,  409,  409,  409,  466,  466,  408,  466,  409,
2232       471,  471,  408,  471,  921,  409,  475,  475,  707,  475,
2233
2234       409,  707,  920,  394,  394,  394,  394,  395,  395,  919,
2235       395,  395,  395,  395,  395,  395,  395,  395,  395,  707,
2236       395,  709,  395,  395,  709,  918,  917,  395,  395,  395,
2237       395,  411,  411,  411,  411,  916,  486,  486,  411,  486,
2238       915,  408,  709,  501,  501,  411,  501,  395,  395,  395,
2239       411,  412,  412,  412,  412,  460,  460,  460,  460,  412,
2240       505,  505,  460,  505,  914,  412,  522,  522,  713,  522,
2241       412,  713,  913,  395,  395,  395,  395,  414,  414,  414,
2242       414,  449,  449,  449,  449,  414,  440,  440,  440,  440,
2243       912,  414,  911,  440,  721,  449,  414,  721,  604,  411,
2244
2245       449,  604,  440,  440,  440,  440,  443,  443,  443,  443,
2246       910,  909,  908,  443,  445,  445,  445,  445,  907,  906,
2247       905,  445,  443,  443,  443,  443,  526,  526,  904,  526,
2248       445,  445,  445,  445,  450,  450,  450,  450,  604,  902,
2249       901,  450,  452,  452,  452,  452,  900,  604,  450,  452,
2250       721,  530,  530,  450,  530,  896,  452,  453,  453,  453,
2251       453,  452,  895,  455,  455,  455,  455,  894,  891,  890,
2252       455,  453,  456,  456,  456,  456,  453,  455,  461,  461,
2253       461,  461,  455,  880,  879,  461,  456,  508,  508,  877,
2254       508,  456,  533,  533,  589,  533,  612,  589,  612,  612,
2255
2256       612,  589,  450,  618,  618,  874,  873,  871,  618,  603,
2257       452,  605,  603,  870,  605,  869,  606,  607,  608,  606,
2258       607,  608,  634,  609,  868,  634,  609,  508,  867,  618,
2259       634,  455,  570,  589,  866,  570,  865,  570,  570,  570,
2260       570,  570,  570,  570,  570,  570,  570,  570,  570,  603,
2261       864,  605,  570,  570,  570,  570,  606,  607,  608,  589,
2262       603,  863,  606,  609,  608,  862,  610,  610,  605,  610,
2263       609,  861,  570,  570,  570,  860,  607,  613,  613,  610,
2264       613,  619,  619,  620,  620,  610,  619,  859,  620,  858,
2265       613,  615,  615,  856,  615,  855,  613,  854,  570,  570,
2266
2267       570,  570,  570,  852,  615,  616,  616,  619,  616,  620,
2268       615,  625,  625,  615,  626,  626,  625,  851,  616,  626,
2269       620,  627,  627,  850,  616,  630,  627,  786,  635,  849,
2270       786,  635,  610,  848,  630,  630,  635,  625,  847,  630,
2271       626,  630,  720,  613,  846,  720,  845,  627,  639,  639,
2272       844,  843,  718,  639,  631,  718,  806,  615,  627,  806,
2273       630,  842,  717,  631,  631,  717,  930,  840,  631,  930,
2274       631,  616,  629,  629,  639,  629,  629,  629,  629,  629,
2275       629,  629,  629,  629,  839,  629,  838,  629,  629,  631,
2276       632,  837,  629,  629,  629,  629,  640,  640,  836,  632,
2277
2278       632,  640,  720,  718,  632,  699,  632,  699,  810,  699,
2279       699,  810,  629,  629,  629,  835,  641,  641,  699,  834,
2280       717,  641,  640,  726,  833,  632,  726,  642,  642,  642,
2281       642,  832,  722,  831,  642,  722,  632,  830,  629,  629,
2282       629,  629,  641,  642,  642,  642,  642,  643,  643,  643,
2283       643,  829,  828,  641,  643,  644,  644,  644,  644,  810,
2284       827,  824,  644,  726,  799,  800,  643,  799,  800,  823,
2285       822,  644,  644,  644,  644,  645,  645,  645,  645,  819,
2286       722,  726,  645,  818, 1057,  799,  800, 1057,  809,  804,
2287       803,  645,  645,  645,  645,  716,  716,  716,  716,  716,
2288
2289       716,  716,  716,  716,  716,  716,  716,  716,  716,  716,
2290       716,  716,  716,  716,  716,  716,  716,  716,  716,  716,
2291       716,  716,  716,  716,  716,  716,  716,  716,  716,  716,
2292       716,  716,  716,  716,  716,  716,  716,  716,  716,  716,
2293       716,  716,  716,  716,  716,  716,  716,  716,  716,  716,
2294       716,  716,  716,  716,  716,  716,  716,  716,  716,  716,
2295       716,  716,  716,  716,  716,  716,  724,  727,  875,  724,
2296       727,  875,  798,  807,  734,  734,  807,  797,  796,  734,
2297       731,  731,  793,  731, 1107,  732,  732, 1107,  732,  875,
2298       794,  791,  794,  731,  794,  794,  790,  789,  732,  731,
2299
2300       734,  788,  808,  794,  732,  808,  724,  727,  728,  729,
2301       730,  728,  729,  730,  881,  734, 1077,  881,  727, 1077,
2302       807,  724,  725,  725,  725,  725,  725,  725,  725,  725,
2303       725,  725,  725,  725,  725,  725,  725,  725,  725,  725,
2304       725,  725,  725,  725,  725,  725,  731,  787,  728,  729,
2305       730,  732,  878,  733,  733,  878,  733,  808,  730,  881,
2306       785,  784,  725,  725,  725,  729,  733,  740,  728,  737,
2307       737, 1077,  733,  878,  737,  733,  740,  740,  783,  951,
2308       782,  740,  951,  740,  882,  781,  780,  882,  725,  725,
2309       725,  725,  725,  779,  778,  737,  745,  745,  762,  762,
2310
2311       951,  745,  740,  762,  777,  811,  762,  762,  811,  884,
2312       737,  762,  884,  817,  817,  762,  762,  740,  817,  733,
2313       738,  738,  745,  738,  738,  738,  738,  738,  738,  738,
2314       738,  738,  776,  738,  775,  738,  738,  745,  774,  817,
2315       738,  738,  738,  738,  882,  811,  817,  747,  747,  747,
2316       747,  772,  811,  771,  747,  955, 1018,  770,  955, 1018,
2317       738,  738,  738,  747,  747,  747,  747,  813,  814,  884,
2318       813,  814,  768,  749,  749,  749,  749,  767, 1025, 1025,
2319       749,  885,  887, 1025,  885,  887,  738,  738,  738,  738,
2320       739,  739,  749,  739,  739,  739,  739,  739,  739,  739,
2321
2322       739,  739,  955,  739, 1025,  739,  739,  813,  814,  766,
2323       739,  739,  739,  739,  813,  765, 1018,  748,  748,  748,
2324       748,  885,  887,  814,  748,  885,  816,  816,  764,  816,
2325       739,  739,  739,  748,  748,  748,  748,  763, 1019,  816,
2326       956, 1019,  887,  956,  815,  816, 1118,  815,  886, 1118,
2327      1020,  886, 1120, 1020,  761, 1120,  739,  739,  739,  739,
2328       812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
2329       812,  812,  812,  812,  812,  812,  812,  812,  812,  812,
2330       812,  812,  812,  812,  815,  820,  820,  956,  886,  821,
2331       820, 1124,  816,  886, 1124,  815, 1019,  760,  821,  821,
2332
2333       812,  812,  812,  821, 1020,  821,  888,  825,  825,  888,
2334      1127,  820,  825, 1127,  759,  757, 1129,  954,  820, 1129,
2335       954,  756, 1110,  755,  821, 1110,  812,  812,  812,  812,
2336       812,  821,  754,  825,  826,  826,  826,  826,  889,  889,
2337       825,  826,  753,  889,  892,  892,  888,  893,  752,  892,
2338       826,  826,  826,  826,  897,  897,  893,  893,  751,  897,
2339       954,  893,  957,  893,  889,  957,  888,  750,  889,  959,
2340       892,  744,  959,  743,  892, 1110,  898,  898,  898,  898,
2341       897,  742,  893,  898,  897,  958,  893,  960,  958,  736,
2342       960,  735,  898,  898,  898,  898,  899,  899,  899,  899,
2343
2344       961,  961,  957,  899,  723,  961,  964,  964,  965,  959,
2345       719,  964,  899,  899,  899,  899,  959,  965,  965,  712,
2346       957,  711,  965,  706,  965,  958,  961,  960,  958,  704,
2347       969,  969,  964,  703,  960,  969, 1021, 1021, 1022, 1021,
2348       697, 1022, 1023,  965,  961, 1023,  696,  694, 1024, 1076,
2349       964, 1024, 1076, 1028, 1028, 1029,  969,  693, 1028, 1078,
2350      1078,  965, 1078, 1080, 1029, 1029, 1080, 1033, 1033, 1029,
2351      1095, 1029, 1033, 1095,  969,  692, 1021, 1081, 1022, 1028,
2352      1081, 1096, 1023, 1098, 1096,  690, 1098,  688, 1024, 1132,
2353      1029, 1099, 1132, 1033, 1099,  687, 1076,  683, 1022, 1078,
2354
2355      1023, 1112, 1024, 1080, 1112, 1122, 1135, 1135, 1122, 1135,
2356      1080, 1225,  681, 1225, 1225, 1225, 1095, 1081, 1287,  679,
2357       678, 1287, 1287, 1098, 1096,  677,  676,  675,  674, 1098,
2358       673, 1099, 1081, 1297, 1099, 1297, 1297, 1297,  672,  670,
2359      1300, 1112, 1300, 1300, 1300, 1122, 1135, 1301,  669, 1301,
2360      1301, 1301,  668,  667, 1112, 1137, 1137, 1137, 1137, 1137,
2361      1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
2362      1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137, 1137,
2363      1137, 1137, 1137, 1137, 1138, 1138, 1138, 1138, 1138, 1138,
2364      1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
2365
2366      1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138, 1138,
2367      1138, 1138, 1138, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
2368      1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
2369      1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139,
2370      1139, 1139, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
2371      1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
2372      1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140, 1140,
2373      1140, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141,
2374      1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141,
2375      1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141, 1141,
2376
2377      1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
2378      1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142,
2379      1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1142, 1143,
2380      1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
2381      1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143,
2382      1143, 1143, 1143, 1143, 1143, 1143, 1143, 1143, 1144, 1144,
2383      1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144,
2384      1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144, 1144,
2385      1144, 1144, 1144, 1144, 1144, 1144, 1144, 1145, 1145, 1145,
2386      1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145,
2387
2388      1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145, 1145,
2389      1145, 1145, 1145, 1145, 1145, 1145, 1146, 1146, 1146, 1146,
2390      1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
2391      1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146, 1146,
2392      1146, 1146, 1146, 1146, 1146, 1147, 1147, 1147, 1147, 1147,
2393      1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
2394      1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147, 1147,
2395      1147, 1147, 1147, 1147, 1148, 1148, 1148, 1148, 1148, 1148,
2396      1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
2397      1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148, 1148,
2398
2399      1148, 1148, 1148, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
2400      1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
2401      1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149, 1149,
2402      1149, 1149, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
2403      1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
2404      1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150, 1150,
2405      1150, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
2406      1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
2407      1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151, 1151,
2408      1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
2409
2410      1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152,
2411      1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1152, 1153,
2412      1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153,
2413      1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153,
2414      1153, 1153, 1153, 1153, 1153, 1153, 1153, 1153, 1154, 1154,
2415      1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
2416      1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154, 1154,
2417      1154, 1154, 1154, 1154, 1154, 1154, 1154, 1155, 1155, 1155,
2418      1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155,
2419      1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155, 1155,
2420
2421      1155, 1155, 1155, 1155, 1155, 1155, 1156, 1156, 1156, 1156,
2422      1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
2423      1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156, 1156,
2424      1156, 1156, 1156, 1156, 1156, 1157, 1157, 1157, 1157, 1157,
2425      1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
2426      1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157, 1157,
2427      1157, 1157, 1157, 1157, 1158, 1158, 1158, 1158, 1158, 1158,
2428      1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
2429      1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158, 1158,
2430      1158, 1158, 1158, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
2431
2432      1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
2433      1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159, 1159,
2434      1159, 1159, 1160, 1160,  666, 1160, 1160, 1160, 1160, 1160,
2435      1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160,
2436      1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160, 1160,
2437      1160, 1161, 1327,  665,  664, 1327, 1327, 1332,  663, 1332,
2438      1332, 1332,  662,  661, 1161,  660, 1161, 1161, 1161,  659,
2439       658,  655, 1161, 1162,  654, 1162, 1162,  653, 1162,  652,
2440       651, 1162, 1162,  650, 1162, 1162, 1162, 1163,  647, 1163,
2441      1163, 1163, 1163,  646, 1163,  638,  637, 1163, 1163, 1163,
2442
2443      1163, 1163, 1163, 1164, 1164,  636,  633,  623,  622,  587,
2444       586,  577,  576,  574,  572, 1164, 1164, 1164, 1164, 1164,
2445      1164, 1164,  571, 1164, 1164, 1165,  569, 1165, 1165,  566,
2446      1165,  565,  563, 1165, 1165,  562, 1165, 1165, 1165, 1166,
2447      1166,  561,  560,  558,  556,  553,  550,  547,  545,  544,
2448       542, 1166, 1166, 1166, 1166, 1166, 1166, 1166,  540, 1166,
2449      1166, 1167, 1167,  539, 1167, 1167, 1167, 1167, 1167, 1167,
2450      1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
2451      1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167, 1167,
2452      1168,  537, 1168, 1168, 1168, 1168, 1168,  535,  532, 1168,
2453
2454      1168, 1168, 1168, 1168,  528,  524,  521, 1168, 1169, 1169,
2455      1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
2456      1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169, 1169,
2457      1169, 1169, 1169, 1169, 1169, 1169, 1169, 1170,  519, 1170,
2458      1170, 1170,  518,  517,  515, 1170, 1171,  514, 1171, 1171,
2459       511,  510, 1171,  507, 1171, 1171, 1171,  503,  500,  499,
2460      1171, 1172, 1172, 1172, 1172,  495,  493, 1172,  492,  490,
2461       488,  485,  483,  482, 1172,  479,  477, 1172,  473,  470,
2462      1172,  469, 1172, 1172, 1172,  468,  465, 1172, 1172, 1173,
2463      1173, 1173, 1173,  464,  463,  459,  451,  448,  444,  432,
2464
2465       431,  427, 1173,  426, 1173, 1173,  422,  421, 1173,  407,
2466      1173, 1173, 1173,  401,  396,  392, 1173, 1174, 1174, 1174,
2467      1174,  384,  380, 1174,  372,  369,  366,  364,  361,  353,
2468       325,  322,  321,  320,  319,  315, 1174,  314, 1174, 1174,
2469      1174,  304,  302,  296, 1174, 1175, 1175,  295, 1175, 1175,
2470      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
2471      1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175, 1175,
2472      1175, 1175, 1175, 1175, 1176,  292, 1176, 1176, 1176, 1176,
2473      1176,  291,  285, 1176, 1176, 1176, 1176, 1176,  282,  277,
2474       273, 1176, 1177, 1177,  272, 1177, 1177, 1177, 1177, 1177,
2475
2476      1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
2477      1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177, 1177,
2478      1177, 1178,  269,  265,  264,  261,  256, 1178,  225, 1178,
2479      1178, 1178, 1178, 1178, 1178,  213, 1178, 1178, 1178, 1178,
2480      1178,  212,  211,  207, 1178, 1179, 1179, 1179, 1179,  206,
2481       202, 1179,  197,  194,  186,  183,  176,  162, 1179,  158,
2482       154, 1179,  145,  131, 1179,  128, 1179, 1179, 1179,  122,
2483       110, 1179, 1179, 1180, 1180, 1180, 1180,  106,   90,   89,
2484      1180,   88,   83,    8,    7,    0, 1180,    0, 1180, 1180,
2485         0,    0, 1180,    0, 1180, 1180, 1180,    0,    0,    0,
2486
2487      1180, 1181, 1181, 1181, 1181,    0,    0, 1181,    0,    0,
2488         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2489      1181,    0, 1181, 1181, 1181,    0,    0,    0, 1181, 1182,
2490         0,    0, 1182,    0,    0,    0, 1182,    0, 1182, 1182,
2491      1182,    0,    0,    0, 1182, 1183, 1183,    0, 1183, 1183,
2492      1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
2493      1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183, 1183,
2494      1183, 1183, 1183, 1183, 1184, 1184,    0, 1184, 1184, 1184,
2495      1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
2496      1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184, 1184,
2497
2498      1184, 1184, 1184, 1185, 1185,    0, 1185, 1185, 1185, 1185,
2499      1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185,
2500      1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185, 1185,
2501      1185, 1185, 1186,    0, 1186, 1186, 1186, 1186, 1186,    0,
2502         0, 1186, 1186, 1186, 1186, 1186,    0,    0,    0, 1186,
2503      1187,    0, 1187, 1187, 1187,    0,    0,    0, 1187, 1188,
2504      1188, 1188, 1188,    0,    0, 1188,    0,    0,    0,    0,
2505         0,    0,    0,    0, 1188, 1188,    0,    0, 1188,    0,
2506      1188, 1188, 1188,    0,    0,    0, 1188, 1189, 1189, 1189,
2507      1189,    0,    0, 1189,    0,    0,    0,    0,    0,    0,
2508
2509      1189,    0,    0, 1189,    0,    0, 1189,    0, 1189, 1189,
2510      1189,    0,    0, 1189, 1189, 1190, 1190, 1190, 1190,    0,
2511         0,    0,    0,    0,    0,    0,    0,    0, 1190,    0,
2512      1190, 1190,    0,    0, 1190,    0, 1190, 1190, 1190,    0,
2513         0,    0, 1190, 1191, 1191, 1191, 1191,    0,    0, 1191,
2514         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2515         0,    0, 1191,    0, 1191, 1191, 1191,    0,    0,    0,
2516      1191, 1192,    0, 1192, 1192, 1192,    0,    0,    0, 1192,
2517      1193,    0, 1193,    0,    0,    0, 1193,    0, 1193, 1193,
2518      1193,    0,    0,    0, 1193, 1194, 1194,    0, 1194,    0,
2519
2520         0,    0, 1194,    0, 1194, 1194, 1194,    0,    0,    0,
2521      1194, 1195, 1195,    0, 1195, 1195, 1195, 1195, 1195, 1195,
2522      1195,    0, 1195, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
2523      1195, 1195,    0, 1195, 1195, 1195, 1195, 1195, 1195, 1195,
2524      1196,    0,    0, 1196,    0,    0,    0, 1196,    0, 1196,
2525      1196, 1196,    0,    0,    0, 1196, 1197, 1197, 1197, 1197,
2526      1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
2527      1197, 1197, 1197, 1197, 1197,    0, 1197, 1197, 1197, 1197,
2528      1197, 1197, 1197, 1197, 1197, 1198, 1198,    0, 1198, 1198,
2529      1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198, 1198,
2530
2531      1198, 1198, 1198, 1198,    0, 1198, 1198, 1198, 1198, 1198,
2532      1198, 1198, 1198, 1198, 1199,    0,    0, 1199,    0,    0,
2533         0, 1199,    0, 1199, 1199, 1199,    0,    0,    0, 1199,
2534      1200, 1200,    0, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
2535      1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200,
2536      1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1200, 1201,
2537      1201,    0, 1201,    0, 1201, 1201, 1201, 1201, 1201,    0,
2538      1201, 1201, 1201, 1201,    0, 1201, 1201, 1201,    0, 1201,
2539         0, 1201, 1201, 1201, 1201, 1201, 1201, 1201, 1202,    0,
2540         0, 1202,    0,    0,    0, 1202,    0, 1202, 1202, 1202,
2541
2542         0,    0,    0, 1202, 1203, 1203,    0, 1203,    0, 1203,
2543      1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203, 1203,
2544      1203, 1203, 1203,    0, 1203,    0, 1203, 1203, 1203, 1203,
2545      1203, 1203, 1203, 1204, 1204,    0, 1204,    0, 1204, 1204,
2546      1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204, 1204,
2547      1204, 1204,    0, 1204,    0, 1204, 1204, 1204, 1204, 1204,
2548      1204, 1204, 1205,    0,    0, 1205,    0,    0,    0, 1205,
2549         0, 1205, 1205, 1205,    0,    0,    0, 1205, 1206, 1206,
2550         0, 1206, 1206, 1206, 1206, 1206,    0,    0, 1206, 1206,
2551      1206, 1206, 1206, 1206, 1206, 1206, 1206,    0, 1206,    0,
2552
2553      1206, 1206, 1206, 1206, 1206, 1206, 1206, 1207,    0, 1207,
2554      1207, 1207,    0,    0,    0, 1207, 1208,    0, 1208, 1208,
2555         0,    0, 1208,    0, 1208, 1208, 1208,    0,    0,    0,
2556      1208, 1209,    0, 1209, 1209, 1209,    0,    0,    0, 1209,
2557      1210,    0, 1210, 1210,    0,    0, 1210,    0, 1210, 1210,
2558      1210,    0,    0,    0, 1210, 1211, 1211,    0, 1211, 1211,
2559      1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211, 1211,
2560      1211, 1211, 1211, 1211,    0, 1211,    0, 1211, 1211, 1211,
2561      1211, 1211, 1211, 1211, 1212,    0,    0, 1212,    0,    0,
2562         0, 1212,    0, 1212, 1212, 1212,    0,    0,    0, 1212,
2563
2564      1213, 1213,    0, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
2565      1213, 1213, 1213,    0, 1213, 1213, 1213, 1213, 1213, 1213,
2566      1213,    0, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1214,
2567      1214,    0, 1214, 1214, 1214, 1214, 1214, 1214, 1214,    0,
2568      1214, 1214, 1214, 1214, 1214, 1214, 1214, 1214,    0, 1214,
2569         0, 1214, 1214, 1214, 1214, 1214, 1214, 1214, 1215,    0,
2570      1215, 1215, 1215,    0,    0, 1215,    0, 1215, 1215, 1215,
2571         0,    0,    0, 1215, 1216, 1216,    0, 1216, 1216, 1216,
2572      1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216, 1216,
2573      1216, 1216, 1216, 1216, 1216,    0, 1216, 1216, 1216, 1216,
2574
2575      1216, 1216, 1216, 1217, 1217,    0,    0,    0,    0,    0,
2576         0,    0,    0,    0,    0, 1217, 1217, 1217, 1217, 1217,
2577      1217, 1217,    0, 1217, 1217, 1218, 1218,    0, 1218, 1218,
2578      1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
2579      1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218, 1218,
2580      1218, 1218, 1218, 1218, 1219,    0, 1219, 1219, 1219,    0,
2581         0,    0, 1219, 1220, 1220,    0,    0, 1220,    0, 1220,
2582      1220, 1220,    0,    0,    0, 1220, 1221,    0, 1221, 1221,
2583         0, 1221,    0,    0, 1221, 1221,    0, 1221, 1221, 1221,
2584      1222,    0,    0, 1222,    0,    0,    0, 1222,    0, 1222,
2585
2586      1222, 1222, 1223,    0,    0, 1223,    0, 1223, 1223, 1223,
2587      1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
2588      1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223, 1223,
2589      1223, 1224,    0, 1224, 1224, 1224,    0,    0, 1224, 1226,
2590         0, 1226, 1226,    0, 1226,    0,    0, 1226, 1226,    0,
2591      1226, 1226, 1226, 1227,    0,    0, 1227,    0,    0,    0,
2592         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2593         0,    0, 1227, 1227, 1227, 1227, 1227, 1228, 1228,    0,
2594      1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
2595      1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228, 1228,
2596
2597      1228, 1228, 1228, 1228, 1228, 1228, 1229,    0, 1229, 1229,
2598      1229, 1229, 1229,    0,    0, 1229, 1229, 1229, 1229, 1229,
2599         0,    0,    0, 1229, 1230,    0, 1230,    0, 1230, 1230,
2600      1230,    0,    0, 1230, 1230, 1230, 1230, 1230,    0,    0,
2601         0, 1230, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231,
2602      1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231,
2603      1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231, 1231,
2604      1231, 1232,    0, 1232, 1232,    0,    0, 1232,    0, 1232,
2605      1232, 1232,    0,    0,    0, 1232, 1233,    0,    0,    0,
2606         0,    0,    0,    0,    0,    0,    0,    0,    0, 1233,
2607
2608         0, 1233, 1233, 1233,    0,    0,    0, 1233, 1234, 1234,
2609      1234, 1234,    0,    0, 1234,    0,    0,    0,    0,    0,
2610         0, 1234,    0,    0, 1234,    0,    0, 1234,    0, 1234,
2611      1234, 1234,    0,    0, 1234, 1234, 1235, 1235, 1235, 1235,
2612         0,    0,    0,    0,    0,    0,    0,    0,    0, 1235,
2613         0, 1235, 1235,    0,    0, 1235,    0, 1235, 1235, 1235,
2614         0,    0,    0, 1235, 1236, 1236, 1236, 1236,    0,    0,
2615      1236,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2616         0,    0,    0, 1236,    0, 1236, 1236, 1236,    0,    0,
2617         0, 1236, 1237,    0,    0,    0, 1237,    0, 1237, 1237,
2618
2619      1237,    0,    0,    0, 1237, 1238, 1238,    0, 1238, 1238,
2620      1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
2621      1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238, 1238,
2622      1238, 1238, 1238, 1238, 1239,    0, 1239, 1239, 1239, 1239,
2623      1239,    0,    0, 1239, 1239, 1239, 1239, 1239,    0,    0,
2624         0, 1239, 1240,    0, 1240,    0, 1240, 1240, 1240,    0,
2625         0, 1240, 1240, 1240, 1240, 1240,    0,    0,    0, 1240,
2626      1241, 1241,    0, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
2627      1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241,
2628      1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1241, 1242,
2629
2630      1242,    0, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
2631      1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242,
2632      1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1243,    0,
2633         0,    0,    0,    0, 1243,    0, 1243, 1243, 1243, 1243,
2634      1243, 1243,    0, 1243, 1243, 1243, 1243, 1243,    0,    0,
2635         0, 1243, 1244,    0, 1244,    0, 1244, 1244, 1244,    0,
2636         0, 1244, 1244, 1244, 1244, 1244,    0,    0,    0, 1244,
2637      1245, 1245, 1245, 1245,    0,    0, 1245,    0,    0,    0,
2638         0,    0,    0, 1245,    0,    0, 1245,    0,    0, 1245,
2639         0, 1245, 1245, 1245,    0,    0, 1245, 1245, 1246, 1246,
2640
2641      1246, 1246,    0,    0,    0, 1246,    0,    0,    0,    0,
2642         0, 1246,    0, 1246, 1246,    0,    0, 1246,    0, 1246,
2643      1246, 1246,    0,    0,    0, 1246, 1247, 1247, 1247, 1247,
2644         0,    0, 1247,    0,    0,    0,    0,    0,    0,    0,
2645         0,    0,    0,    0,    0, 1247,    0, 1247, 1247, 1247,
2646         0,    0,    0, 1247, 1248, 1248, 1248, 1248, 1248, 1248,
2647      1248, 1248, 1248,    0, 1248, 1248, 1248, 1248, 1248, 1248,
2648      1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248, 1248,
2649      1248, 1248, 1248, 1249,    0,    0, 1249,    0,    0,    0,
2650      1249,    0,    0,    0,    0,    0,    0,    0, 1249,    0,
2651
2652         0,    0, 1249,    0, 1249, 1249, 1249,    0,    0,    0,
2653      1249, 1250,    0,    0, 1250,    0,    0,    0, 1250,    0,
2654      1250, 1250, 1250,    0,    0,    0, 1250, 1251, 1251,    0,
2655      1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251,
2656      1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251, 1251,
2657      1251, 1251, 1251, 1251, 1251, 1251, 1252, 1252,    0, 1252,
2658      1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252,
2659      1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252, 1252,
2660      1252, 1252, 1252, 1252, 1252, 1253, 1253,    0, 1253, 1253,
2661      1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
2662
2663      1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253, 1253,
2664      1253, 1253, 1253, 1253, 1254,    0, 1254, 1254, 1254, 1254,
2665      1254,    0,    0, 1254, 1254, 1254, 1254, 1254,    0,    0,
2666         0, 1254, 1255,    0, 1255,    0, 1255, 1255, 1255,    0,
2667         0, 1255, 1255, 1255, 1255, 1255,    0,    0,    0, 1255,
2668      1256, 1256, 1256, 1256,    0,    0, 1256,    0,    0,    0,
2669         0,    0,    0,    0,    0, 1256, 1256,    0,    0, 1256,
2670         0, 1256, 1256, 1256,    0,    0,    0, 1256, 1257,    0,
2671      1257, 1257, 1257,    0,    0,    0, 1257, 1258, 1258, 1258,
2672      1258,    0,    0, 1258,    0,    0,    0,    0,    0,    0,
2673
2674         0,    0, 1258, 1258,    0,    0, 1258,    0, 1258, 1258,
2675      1258,    0,    0,    0, 1258, 1259, 1259, 1259, 1259,    0,
2676         0, 1259,    0,    0,    0,    0,    0,    0, 1259,    0,
2677         0, 1259,    0,    0, 1259,    0, 1259, 1259, 1259,    0,
2678         0, 1259, 1259, 1260, 1260, 1260, 1260,    0,    0,    0,
2679         0,    0,    0,    0,    0,    0, 1260,    0, 1260, 1260,
2680         0,    0, 1260,    0, 1260, 1260, 1260,    0,    0,    0,
2681      1260, 1261, 1261, 1261, 1261,    0,    0, 1261,    0,    0,
2682         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2683      1261,    0, 1261, 1261, 1261,    0,    0,    0, 1261, 1262,
2684
2685         0,    0,    0, 1262,    0, 1262, 1262, 1262,    0,    0,
2686         0, 1262, 1263,    0, 1263,    0,    0,    0, 1263,    0,
2687      1263, 1263, 1263,    0,    0,    0, 1263, 1264,    0,    0,
2688         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2689      1264,    0, 1264, 1264, 1264,    0,    0,    0, 1264, 1265,
2690      1265,    0, 1265,    0,    0,    0, 1265,    0, 1265, 1265,
2691      1265,    0,    0,    0, 1265, 1266, 1266,    0, 1266, 1266,
2692      1266, 1266, 1266, 1266, 1266,    0, 1266, 1266, 1266, 1266,
2693      1266, 1266, 1266, 1266, 1266, 1266,    0, 1266, 1266, 1266,
2694      1266, 1266, 1266, 1266, 1267,    0,    0, 1267,    0,    0,
2695
2696         0, 1267,    0, 1267, 1267, 1267,    0,    0,    0, 1267,
2697      1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268,
2698      1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268,    0,
2699      1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1268, 1269,
2700      1269,    0, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,
2701      1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269,    0, 1269,
2702      1269, 1269, 1269, 1269, 1269, 1269, 1269, 1269, 1270,    0,
2703         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2704         0, 1270,    0, 1270, 1270, 1270,    0,    0,    0, 1270,
2705      1271,    0,    0, 1271,    0,    0,    0, 1271,    0, 1271,
2706
2707      1271, 1271,    0,    0,    0, 1271, 1272, 1272,    0, 1272,
2708      1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272,
2709      1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272, 1272,
2710      1272, 1272, 1272, 1272, 1272, 1273, 1273,    0, 1273,    0,
2711      1273, 1273, 1273, 1273, 1273,    0, 1273, 1273, 1273, 1273,
2712         0, 1273, 1273, 1273,    0, 1273,    0, 1273, 1273, 1273,
2713      1273, 1273, 1273, 1273, 1274,    0,    0, 1274,    0,    0,
2714         0, 1274,    0, 1274, 1274, 1274,    0,    0,    0, 1274,
2715      1275, 1275,    0, 1275,    0, 1275, 1275, 1275, 1275, 1275,
2716      1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1275,    0,
2717
2718      1275,    0, 1275, 1275, 1275, 1275, 1275, 1275, 1275, 1276,
2719      1276,    0, 1276,    0, 1276, 1276, 1276, 1276, 1276, 1276,
2720      1276, 1276, 1276, 1276, 1276, 1276, 1276, 1276,    0, 1276,
2721         0, 1276, 1276, 1276, 1276, 1276, 1276, 1276, 1277,    0,
2722         0, 1277,    0,    0,    0, 1277,    0, 1277, 1277, 1277,
2723         0,    0,    0, 1277, 1278, 1278,    0, 1278, 1278, 1278,
2724      1278, 1278,    0,    0, 1278, 1278, 1278, 1278, 1278, 1278,
2725      1278, 1278, 1278,    0, 1278,    0, 1278, 1278, 1278, 1278,
2726      1278, 1278, 1278, 1279,    0, 1279, 1279,    0,    0, 1279,
2727         0, 1279, 1279, 1279,    0,    0,    0, 1279, 1280,    0,
2728
2729         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2730         0, 1280,    0, 1280, 1280, 1280,    0,    0,    0, 1280,
2731      1281,    0, 1281, 1281,    0,    0, 1281,    0, 1281, 1281,
2732      1281,    0,    0,    0, 1281, 1282,    0,    0,    0,    0,
2733         0,    0,    0,    0,    0,    0,    0,    0, 1282,    0,
2734      1282, 1282, 1282,    0,    0,    0, 1282, 1283, 1283,    0,
2735      1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283, 1283,
2736      1283, 1283, 1283, 1283, 1283, 1283,    0, 1283,    0, 1283,
2737      1283, 1283, 1283, 1283, 1283, 1283, 1284,    0,    0, 1284,
2738         0,    0,    0, 1284,    0, 1284, 1284, 1284,    0,    0,
2739
2740         0, 1284, 1285, 1285,    0, 1285, 1285, 1285, 1285, 1285,
2741      1285, 1285, 1285, 1285, 1285,    0, 1285, 1285, 1285, 1285,
2742      1285, 1285, 1285,    0, 1285, 1285, 1285, 1285, 1285, 1285,
2743      1285, 1286, 1286,    0, 1286, 1286, 1286, 1286, 1286, 1286,
2744      1286,    0, 1286, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
2745         0, 1286,    0, 1286, 1286, 1286, 1286, 1286, 1286, 1286,
2746      1288,    0, 1288, 1288, 1288,    0,    0, 1288,    0, 1288,
2747      1288, 1288,    0,    0,    0, 1288, 1289, 1289,    0, 1289,
2748      1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289,
2749      1289, 1289, 1289, 1289, 1289, 1289, 1289,    0, 1289, 1289,
2750
2751      1289, 1289, 1289, 1289, 1289, 1290, 1290,    0,    0, 1290,
2752         0, 1290, 1290, 1290,    0,    0,    0, 1290, 1291, 1291,
2753         0, 1291, 1291, 1291, 1291,    0, 1291, 1291, 1291, 1291,
2754      1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291, 1291,
2755      1291, 1291, 1291, 1291, 1291, 1291, 1291, 1292, 1292,    0,
2756      1292,    0,    0,    0, 1292,    0, 1292, 1292, 1292, 1293,
2757         0, 1293, 1293,    0, 1293,    0,    0, 1293, 1293,    0,
2758      1293, 1293, 1293, 1294,    0,    0, 1294,    0, 1294, 1294,
2759      1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294,
2760      1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294, 1294,
2761
2762      1294, 1294, 1295, 1295,    0, 1295, 1295, 1295, 1295, 1295,
2763      1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295,
2764      1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295, 1295,
2765      1295, 1296,    0,    0, 1296,    0,    0,    0,    0,    0,
2766         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2767      1296,    0, 1296, 1296, 1296, 1298,    0,    0, 1298,    0,
2768         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2769         0,    0,    0,    0, 1298,    0, 1298, 1298, 1298, 1299,
2770      1299,    0, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
2771      1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299, 1299,
2772
2773      1299, 1299, 1299, 1299, 1299,    0, 1299, 1299, 1302,    0,
2774         0, 1302,    0,    0,    0,    0,    0,    0,    0,    0,
2775         0,    0,    0,    0,    0,    0,    0, 1302, 1302, 1302,
2776      1302, 1302, 1303,    0, 1303, 1303, 1303, 1303, 1303,    0,
2777         0, 1303, 1303, 1303, 1303, 1303,    0,    0,    0, 1303,
2778      1304,    0, 1304, 1304, 1304, 1304, 1304,    0,    0, 1304,
2779      1304, 1304, 1304, 1304,    0,    0,    0, 1304, 1305,    0,
2780      1305, 1305, 1305,    0,    0,    0, 1305, 1306,    0,    0,
2781         0, 1306,    0, 1306, 1306, 1306,    0,    0,    0, 1306,
2782      1307,    0, 1307, 1307, 1307, 1307, 1307,    0,    0, 1307,
2783
2784      1307, 1307, 1307, 1307,    0,    0,    0, 1307, 1308,    0,
2785      1308, 1308, 1308, 1308, 1308,    0,    0, 1308, 1308, 1308,
2786      1308, 1308,    0,    0,    0, 1308, 1309, 1309,    0, 1309,
2787      1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
2788      1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309, 1309,
2789      1309, 1309, 1309, 1309, 1309, 1310,    0,    0,    0,    0,
2790         0, 1310,    0, 1310, 1310, 1310, 1310, 1310, 1310,    0,
2791      1310, 1310, 1310, 1310, 1310,    0,    0,    0, 1310, 1311,
2792         0,    0,    0,    0,    0, 1311,    0, 1311, 1311, 1311,
2793      1311, 1311, 1311,    0, 1311, 1311, 1311, 1311, 1311,    0,
2794
2795         0,    0, 1311, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
2796      1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
2797      1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312, 1312,
2798      1312, 1312, 1313,    0,    0, 1313,    0,    0,    0, 1313,
2799         0,    0,    0,    0,    0,    0,    0, 1313,    0,    0,
2800         0, 1313,    0, 1313, 1313, 1313,    0,    0,    0, 1313,
2801      1314,    0, 1314, 1314, 1314, 1314, 1314,    0,    0, 1314,
2802      1314, 1314, 1314, 1314,    0,    0,    0, 1314, 1315,    0,
2803      1315, 1315, 1315, 1315, 1315,    0,    0, 1315, 1315, 1315,
2804      1315, 1315,    0,    0,    0, 1315, 1316, 1316, 1316, 1316,
2805
2806         0,    0, 1316,    0,    0,    0,    0,    0,    0,    0,
2807         0, 1316, 1316,    0,    0, 1316,    0, 1316, 1316, 1316,
2808         0,    0,    0, 1316, 1317, 1317, 1317, 1317,    0,    0,
2809      1317,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2810      1317,    0,    0, 1317,    0, 1317, 1317, 1317,    0,    0,
2811         0, 1317, 1318, 1318, 1318, 1318,    0,    0, 1318,    0,
2812         0,    0,    0,    0,    0,    0,    0, 1318, 1318,    0,
2813         0, 1318,    0, 1318, 1318, 1318,    0,    0,    0, 1318,
2814      1319,    0,    0,    0, 1319,    0, 1319, 1319, 1319,    0,
2815         0,    0, 1319, 1320,    0, 1320, 1320, 1320,    0,    0,
2816
2817         0, 1320, 1321,    0, 1321,    0,    0,    0, 1321,    0,
2818      1321, 1321, 1321,    0,    0,    0, 1321, 1322,    0, 1322,
2819      1322, 1322,    0,    0,    0, 1322, 1323,    0,    0,    0,
2820      1323,    0, 1323, 1323, 1323,    0,    0,    0, 1323, 1324,
2821      1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324, 1324,
2822      1324, 1324, 1324, 1324, 1324,    0, 1324, 1324, 1324,    0,
2823      1324,    0,    0, 1324, 1324, 1324, 1324, 1324, 1325,    0,
2824      1325, 1325, 1325,    0,    0,    0, 1325, 1326,    0, 1326,
2825      1326, 1326,    0,    0,    0, 1326, 1328, 1328,    0, 1328,
2826      1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328,
2827
2828      1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328, 1328,
2829      1328, 1328, 1328, 1328, 1328, 1329,    0,    0, 1329,    0,
2830         0,    0, 1329,    0, 1329, 1329, 1329, 1330,    0, 1330,
2831         0, 1330, 1330,    0, 1330,    0,    0, 1330, 1330,    0,
2832      1330, 1330, 1330, 1331, 1331,    0, 1331, 1331, 1331, 1331,
2833      1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331,
2834      1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331, 1331,
2835      1331, 1331, 1333,    0,    0, 1333,    0,    0,    0,    0,
2836         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
2837         0, 1333,    0, 1333, 1333, 1333, 1334, 1334,    0, 1334,
2838
2839      1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
2840      1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334, 1334,
2841      1334, 1334, 1334, 1334, 1334, 1335, 1335, 1335, 1335, 1335,
2842      1336,    0,    0, 1336,    0,    0,    0,    0,    0,    0,
2843         0,    0,    0,    0,    0,    0,    0,    0,    0, 1336,
2844      1336, 1336, 1336, 1336, 1337, 1337,    0, 1337,    0,    0,
2845         0,    0,    0,    0, 1337,    0, 1337, 1337,    0, 1337,
2846      1337,    0, 1337, 1337,    0, 1337, 1337, 1337, 1337, 1338,
2847         0, 1338, 1338, 1338, 1338, 1338,    0,    0, 1338, 1338,
2848      1338, 1338, 1338,    0,    0,    0, 1338, 1339,    0, 1339,
2849
2850      1339, 1339, 1339, 1339,    0,    0, 1339, 1339, 1339, 1339,
2851      1339,    0,    0,    0, 1339, 1340, 1340,    0, 1340, 1340,
2852      1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340,
2853      1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340, 1340,
2854      1340, 1340, 1340, 1340, 1341,    0,    0,    0,    0,    0,
2855      1341,    0, 1341, 1341, 1341, 1341, 1341, 1341,    0, 1341,
2856      1341, 1341, 1341, 1341,    0,    0,    0, 1341, 1342,    0,
2857      1342, 1342, 1342, 1342, 1342,    0,    0, 1342, 1342, 1342,
2858      1342, 1342,    0,    0,    0, 1342, 1343,    0, 1343, 1343,
2859      1343,    0,    0,    0, 1343, 1344, 1344, 1344, 1344,    0,
2860
2861         0, 1344,    0,    0,    0,    0,    0,    0,    0,    0,
2862      1344, 1344,    0,    0, 1344,    0, 1344, 1344, 1344,    0,
2863         0,    0, 1344, 1345, 1345, 1345, 1345,    0,    0, 1345,
2864         0,    0,    0,    0,    0,    0,    0,    0,    0, 1345,
2865         0,    0, 1345,    0, 1345, 1345, 1345,    0,    0,    0,
2866      1345, 1346, 1346,    0, 1346,    0,    0,    0, 1346,    0,
2867      1346, 1346, 1346, 1347, 1347,    0, 1347, 1347, 1347, 1347,
2868      1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347,
2869      1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347, 1347,
2870      1347, 1347, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
2871
2872      1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348,
2873      1348, 1348,    0, 1348,    0,    0,    0, 1348, 1348, 1348,
2874      1348, 1349, 1349, 1349, 1349,    0,    0, 1349,    0,    0,
2875         0,    0,    0,    0,    0,    0, 1349, 1349,    0,    0,
2876      1349,    0, 1349, 1349, 1349,    0,    0,    0, 1349, 1350,
2877      1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350, 1350,
2878      1350, 1350, 1350, 1350, 1350,    0, 1350, 1350, 1350,    0,
2879      1350,    0, 1350,    0, 1350, 1350, 1350, 1350, 1351, 1351,
2880         0, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
2881      1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351,
2882
2883      1351, 1351, 1351, 1351, 1351, 1351, 1351, 1352, 1352, 1352,
2884      1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352, 1352,
2885      1352, 1352, 1352,    0, 1352, 1352, 1352,    0, 1352,    0,
2886         0,    0, 1352, 1352, 1352, 1352, 1353, 1353, 1353, 1353,
2887      1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353, 1353,
2888      1353, 1353,    0, 1353, 1353, 1353,    0, 1353,    0,    0,
2889         0, 1353, 1353, 1353, 1353, 1354, 1354, 1354, 1354, 1354,
2890      1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354,
2891      1354,    0, 1354, 1354, 1354,    0, 1354,    0,    0,    0,
2892      1354, 1354, 1354, 1354, 1355, 1355, 1355, 1355, 1355, 1355,
2893
2894      1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355,
2895         0, 1355, 1355, 1355,    0, 1355,    0,    0,    0, 1355,
2896      1355, 1355, 1355, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
2897      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
2898      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
2899      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
2900      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
2901      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
2902      1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136, 1136,
2903      1136, 1136, 1136, 1136, 1136
2904
2905     } ;
2906
2907 extern int commentScanYY_flex_debug;
2908 int commentScanYY_flex_debug = 0;
2909
2910 static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
2911 static char *yy_full_match;
2912 static int yy_lp;
2913 static int yy_looking_for_trail_begin = 0;
2914 static int yy_full_lp;
2915 static int *yy_full_state;
2916 #define YY_TRAILING_MASK 0x2000
2917 #define YY_TRAILING_HEAD_MASK 0x4000
2918 #define REJECT \
2919 { \
2920 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */ \
2921 yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
2922 (yy_lp) = (yy_full_lp); /* restore orig. accepting pos. */ \
2923 (yy_state_ptr) = (yy_full_state); /* restore orig. state */ \
2924 yy_current_state = *(yy_state_ptr); /* restore curr. state */ \
2925 ++(yy_lp); \
2926 goto find_rule; \
2927 }
2928
2929 #define yymore() yymore_used_but_not_detected
2930 #define YY_MORE_ADJ 0
2931 #define YY_RESTORE_YY_MORE_OFFSET
2932 char *commentScanYYtext;
2933 #line 1 "commentscan.l"
2934 /*****************************************************************************
2935  *
2936  * Copyright (C) 1997-2012 by Dimitri van Heesch.
2937  *
2938  * Permission to use, copy, modify, and distribute this software and its
2939  * documentation under the terms of the GNU General Public License is hereby 
2940  * granted. No representations are made about the suitability of this software 
2941  * for any purpose. It is provided "as is" without express or implied warranty.
2942  * See the GNU General Public License for more details.
2943  *
2944  * Documents produced by Doxygen are derivative works derived from the
2945  * input used in their production; they are not affected by this license.
2946  *
2947  */
2948 #line 17 "commentscan.l"
2949
2950 /*
2951  *      includes
2952  */
2953 #include <stdio.h>
2954 #include <stdlib.h>
2955 #include <assert.h>
2956 #include <ctype.h>
2957
2958 #include "qtbc.h"
2959 #include <qarray.h>
2960 #include <qstack.h>
2961 #include <qregexp.h>
2962 #include <unistd.h>
2963 #include <qfile.h>
2964   
2965 #include "scanner.h"
2966 #include "entry.h"
2967 #include "doxygen.h"
2968 #include "message.h"
2969 #include "config.h"
2970 #include "util.h"
2971 #include "index.h"
2972 #include "defargs.h"
2973 #include "language.h"
2974 #include "outputlist.h"
2975 #include "membergroup.h"
2976 #include "reflist.h"
2977 #include "debug.h"
2978 #include "parserintf.h"
2979 #include "cite.h"
2980 #include "markdown.h"
2981
2982 #define YY_NO_INPUT 1
2983
2984 // forward declarations
2985 static bool handleBrief(const QCString &);
2986 static bool handleFn(const QCString &);
2987 static bool handleDef(const QCString &);
2988 static bool handleOverload(const QCString &);
2989 static bool handleEnum(const QCString &);
2990 static bool handleDefGroup(const QCString &);
2991 static bool handleAddToGroup(const QCString &);
2992 static bool handleWeakGroup(const QCString &);
2993 static bool handleNamespace(const QCString &);
2994 static bool handlePackage(const QCString &);
2995 static bool handleClass(const QCString &);
2996 static bool handleHeaderFile(const QCString &);
2997 static bool handleProtocol(const QCString &);
2998 static bool handleCategory(const QCString &);
2999 static bool handleUnion(const QCString &);
3000 static bool handleStruct(const QCString &);
3001 static bool handleInterface(const QCString &);
3002 static bool handleIdlException(const QCString &);
3003 static bool handlePage(const QCString &);
3004 static bool handleMainpage(const QCString &);
3005 static bool handleFile(const QCString &);
3006 static bool handleDir(const QCString &);
3007 static bool handleExample(const QCString &);
3008 static bool handleDetails(const QCString &);
3009 static bool handleName(const QCString &);
3010 static bool handleTodo(const QCString &);
3011 static bool handleTest(const QCString &);
3012 static bool handleBug(const QCString &);
3013 static bool handleSubpage(const QCString &s);
3014 static bool handleDeprecated(const QCString &);
3015 static bool handleXRefItem(const QCString &);
3016 static bool handleRelated(const QCString &);
3017 static bool handleRelatedAlso(const QCString &);
3018 static bool handleMemberOf(const QCString &);
3019 static bool handleRefItem(const QCString &);
3020 static bool handleSection(const QCString &);
3021 static bool handleAnchor(const QCString &);
3022 static bool handleCite(const QCString &);
3023 static bool handleFormatBlock(const QCString &);
3024 static bool handleAddIndex(const QCString &);
3025 static bool handleIf(const QCString &);
3026 static bool handleIfNot(const QCString &);
3027 static bool handleElseIf(const QCString &);
3028 static bool handleElse(const QCString &);
3029 static bool handleEndIf(const QCString &);
3030 static bool handleIngroup(const QCString &);
3031 static bool handleNoSubGrouping(const QCString &);
3032 static bool handleShowInitializer(const QCString &);
3033 static bool handleHideInitializer(const QCString &);
3034 static bool handleCallgraph(const QCString &);
3035 static bool handleCallergraph(const QCString &);
3036 static bool handleInternal(const QCString &);
3037 static bool handleLineBr(const QCString &);
3038 static bool handleStatic(const QCString &);
3039 static bool handlePure(const QCString &);
3040 static bool handlePrivate(const QCString &);
3041 static bool handlePrivateSection(const QCString &);
3042 static bool handleProtected(const QCString &);
3043 static bool handleProtectedSection(const QCString &);
3044 static bool handlePublic(const QCString &s);
3045 static bool handlePublicSection(const QCString &s);
3046 static bool handleToc(const QCString &s);
3047 static bool handleInherit(const QCString &);
3048 static bool handleExtends(const QCString &);
3049 static bool handleCopyDoc(const QCString &);
3050
3051 typedef bool (*DocCmdFunc)(const QCString &name);
3052
3053 struct DocCmdMap
3054 {
3055   const char *cmdName;
3056   DocCmdFunc handler;
3057   bool endsBrief;
3058 };
3059
3060 // map of command to handler function
3061 static DocCmdMap docCmdMap[] =
3062 {
3063   // command name      handler function         ends brief description
3064   { "brief",           &handleBrief,            FALSE },
3065   { "short",           &handleBrief,            FALSE },
3066   { "fn",              &handleFn,               FALSE },
3067   { "var",             &handleFn,               FALSE },
3068   { "typedef",         &handleFn,               FALSE },
3069   { "property",        &handleFn,               FALSE },
3070   { "def",             &handleDef,              FALSE },
3071   { "overload",        &handleOverload,         FALSE },
3072   { "enum",            &handleEnum,             FALSE },
3073   { "defgroup",        &handleDefGroup,         FALSE },
3074   { "addtogroup",      &handleAddToGroup,       FALSE },
3075   { "weakgroup",       &handleWeakGroup,        FALSE },
3076   { "namespace",       &handleNamespace,        FALSE },
3077   { "package",         &handlePackage,          FALSE },
3078   { "class",           &handleClass,            FALSE },
3079   { "headerfile",      &handleHeaderFile,       FALSE },
3080   { "protocol",        &handleProtocol,         FALSE },
3081   { "category",        &handleCategory,         FALSE },
3082   { "union",           &handleUnion,            FALSE },
3083   { "struct",          &handleStruct,           FALSE },
3084   { "interface",       &handleInterface,        FALSE },
3085   { "idlexcept",       &handleIdlException,     FALSE },
3086   { "page",            &handlePage,             FALSE },
3087   { "mainpage",        &handleMainpage,         FALSE },
3088   { "file",            &handleFile,             FALSE },
3089   { "dir",             &handleDir,              FALSE },
3090   { "example",         &handleExample,          FALSE },
3091   { "details",         &handleDetails,          TRUE  },
3092   { "name",            &handleName,             FALSE },
3093   { "todo",            &handleTodo,             FALSE }, // end brief will be done differently
3094   { "test",            &handleTest,             FALSE }, // end brief will be done differently
3095   { "bug",             &handleBug,              FALSE }, // end brief will be done differently
3096   { "deprecated",      &handleDeprecated,       FALSE }, // end brief will be done differently
3097   { "xrefitem",        &handleXRefItem,         FALSE }, // end brief will be done differently
3098   { "related",         &handleRelated,          TRUE  },
3099   { "relates",         &handleRelated,          TRUE  },
3100   { "relatedalso",     &handleRelatedAlso,      TRUE  },
3101   { "relatesalso",     &handleRelatedAlso,      TRUE  },
3102   { "refitem",         &handleRefItem,          TRUE  },
3103   { "cite",            &handleCite,             TRUE  },
3104   { "subpage",         &handleSubpage,          TRUE  },
3105   { "section",         &handleSection,          TRUE  },
3106   { "subsection",      &handleSection,          TRUE  },
3107   { "subsubsection",   &handleSection,          TRUE  },
3108   { "paragraph",       &handleSection,          TRUE  },
3109   { "anchor",          &handleAnchor,           TRUE  },
3110   { "verbatim",        &handleFormatBlock,      TRUE },
3111   { "latexonly",       &handleFormatBlock,      FALSE },
3112   { "htmlonly",        &handleFormatBlock,      FALSE },
3113   { "xmlonly",         &handleFormatBlock,      FALSE },
3114   { "rtfonly",         &handleFormatBlock,      FALSE },
3115   { "manonly",         &handleFormatBlock,      FALSE },
3116   { "dot",             &handleFormatBlock,      TRUE  },
3117   { "msc",             &handleFormatBlock,      TRUE  },
3118   { "code",            &handleFormatBlock,      TRUE  },
3119   { "addindex",        &handleAddIndex,         FALSE },
3120   { "if",              &handleIf,               FALSE },
3121   { "ifnot",           &handleIfNot,            FALSE },
3122   { "elseif",          &handleElseIf,           FALSE },
3123   { "else",            &handleElse,             FALSE },
3124   { "endif",           &handleEndIf,            FALSE },
3125   { "ingroup",         &handleIngroup,          FALSE },
3126   { "nosubgrouping",   &handleNoSubGrouping,    FALSE },
3127   { "showinitializer", &handleShowInitializer,  FALSE },
3128   { "hideinitializer", &handleHideInitializer,  FALSE },
3129   { "callgraph",       &handleCallgraph,        FALSE },
3130   { "callergraph",     &handleCallergraph,      FALSE },
3131   { "internal",        &handleInternal,         TRUE  },
3132   { "_linebr",         &handleLineBr,           FALSE },
3133   { "static",          &handleStatic,           FALSE },
3134   { "pure",            &handlePure,             FALSE },
3135   { "private",         &handlePrivate,          FALSE },
3136   { "privatesection",  &handlePrivateSection,   FALSE },
3137   { "protected",       &handleProtected,        FALSE },
3138   { "protectedsection",&handleProtectedSection, FALSE },
3139   { "public",          &handlePublic,           FALSE },
3140   { "publicsection",   &handlePublicSection,    FALSE },
3141   { "tableofcontents", &handleToc,              FALSE },
3142   { "inherit",         &handleInherit,          TRUE  },
3143   { "extends",         &handleExtends,          TRUE  },
3144   { "implements",      &handleExtends,          TRUE  },
3145   { "memberof",        &handleMemberOf,         TRUE  },
3146   { "arg",             0,                       TRUE  },
3147   { "attention",       0,                       TRUE  },
3148   { "author",          0,                       TRUE  },
3149   { "authors",         0,                       TRUE  },
3150   { "copydoc",         &handleCopyDoc,          TRUE  },
3151   { "copybrief",       0,                       FALSE },
3152   { "copydetails",     0,                       TRUE  },
3153   { "date",            0,                       TRUE  },
3154   { "dotfile",         0,                       TRUE  },
3155   { "htmlinclude",     0,                       FALSE },
3156   { "image",           0,                       TRUE  },
3157   { "include",         0,                       TRUE  },
3158   { "includelineno",   0,                       TRUE  },
3159   { "invariant",       0,                       TRUE  },
3160   { "li",              0,                       TRUE  },
3161   { "line",            0,                       TRUE  },
3162   { "note",            0,                       TRUE  },
3163   { "par",             0,                       TRUE  },
3164   { "param",           0,                       TRUE  },
3165   { "tparam",          0,                       TRUE  },
3166   { "post",            0,                       TRUE  },
3167   { "pre",             0,                       TRUE  },
3168   { "remark",          0,                       TRUE  },
3169   { "remarks",         0,                       TRUE  },
3170   { "result",          0,                       TRUE  },
3171   { "return",          0,                       TRUE  },
3172   { "returns",         0,                       TRUE  },
3173   { "retval",          0,                       TRUE  },
3174   { "sa",              0,                       TRUE  },
3175   { "see",             0,                       TRUE  },
3176   { "since",           0,                       TRUE  },
3177   { "throw",           0,                       TRUE  },
3178   { "throws",          0,                       TRUE  },
3179   { "until",           0,                       TRUE  },
3180   { "verbinclude",     0,                       FALSE },
3181   { "version",         0,                       TRUE  },
3182   { "warning",         0,                       TRUE  },
3183   { 0, 0, FALSE }
3184 };
3185
3186 /** @brief Command mapper.
3187  *
3188  *  Maps a command name (as found in a comment block) onto a
3189  *  specific handler function.
3190  */
3191 class DocCmdMapper
3192 {
3193   public:
3194     struct Cmd
3195     {
3196       DocCmdFunc func;
3197       bool endsBrief;
3198     };
3199
3200     /** maps a command name to a handler function */
3201     static Cmd *map(const char *name)
3202     {
3203       return instance()->find(name);
3204     }
3205
3206     /** release the singleton */
3207     static void freeInstance()
3208     {
3209       delete s_instance; s_instance=0;
3210     }
3211
3212   private:
3213     static DocCmdMapper *instance()
3214     {
3215       if (s_instance==0) s_instance = new DocCmdMapper;
3216       return s_instance;
3217     }
3218
3219     DocCmdMapper() : m_map(113)
3220     {
3221       m_map.setAutoDelete(TRUE);
3222       DocCmdMap *p = docCmdMap;
3223       while (p->cmdName)
3224       {
3225         if (m_map.find(p->cmdName)!=0)
3226         {
3227           printf("Error: DocCmdMapper: command %s already added\n",p->cmdName);
3228           exit(1);
3229         }
3230         Cmd *cmd = new Cmd;
3231         cmd->func = p->handler;
3232         cmd->endsBrief = p->endsBrief;
3233         m_map.insert(p->cmdName,cmd);
3234         p++;
3235       }
3236     }
3237
3238     Cmd *find(const char *name)
3239     {
3240       return m_map.find(name);
3241     }
3242     QDict<Cmd> m_map;
3243     static DocCmdMapper *s_instance;
3244 };
3245
3246 DocCmdMapper *DocCmdMapper::s_instance=0;
3247   
3248   
3249 #define YY_NEVER_INTERACTIVE 1
3250
3251 enum XRefKind
3252 {
3253   XRef_Item,
3254   XRef_Todo,
3255   XRef_Test,
3256   XRef_Bug,
3257   XRef_Deprecated,
3258   XRef_None
3259 };
3260
3261 enum OutputContext
3262 {
3263   OutputDoc,
3264   OutputBrief,
3265   OutputXRef,
3266   OutputInbody
3267 };
3268
3269 enum GuardType
3270 {
3271   Guard_If,
3272   Guard_IfNot,
3273   Guard_Skip
3274 };
3275
3276 class GuardedSection
3277 {
3278   public:
3279     GuardedSection(bool enabled,bool parentVisible) 
3280       : m_enabled(enabled),m_parentVisible(parentVisible) {}
3281     bool isEnabled() const { return m_enabled; }
3282     bool parentVisible() const { return m_parentVisible; }
3283   
3284   private:
3285     bool m_enabled;
3286     bool m_parentVisible;
3287 };
3288
3289 void openGroup(Entry *e,const char *file,int line);
3290 void closeGroup(Entry *e,const char *file,int line,bool foundInline=FALSE);
3291 void initGroupInfo(Entry *e);
3292 static void groupAddDocs(Entry *e,const char *fileName);
3293
3294 /* -----------------------------------------------------------------
3295  *
3296  *      statics
3297  */
3298
3299 static ParserInterface *langParser;          // the language parser that is calling us
3300 static QCString         inputString;         // input string
3301 static int              inputPosition;       // read pointer
3302 static QCString         yyFileName;          // file name that is read from
3303 static int              yyLineNr;            // line number in the input
3304 static bool             inBody;              // was the comment found inside the body of a function?
3305 static OutputContext    inContext;           // are we inside the brief, details or xref part
3306 static bool             briefEndsAtDot;      // does the brief description stop at a dot?
3307 static QCString         formulaText;         // Running text of a formula
3308 static QCString         formulaEnv;          // environment name
3309 static int              formulaNewLines;     // amount of new lines in the formula
3310 static QCString        *pOutputString;       // pointer to string to which the output is appended.
3311 static QCString         outputXRef;          // temp argument of todo/test/../xrefitem commands
3312 static QCString         blockName;           // preformatted block name (e.g. verbatim, latexonly,...)
3313 static XRefKind         xrefKind;            // kind of cross-reference command
3314 static XRefKind         newXRefKind;         // 
3315 static GuardType        guardType;           // kind of guard for conditional section
3316 static bool             enabledSectionFound;
3317 static QCString         functionProto;       // function prototype
3318 static QStack<GuardedSection> guards;        // tracks nested conditional sections (if,ifnot,..)
3319 static Entry*           current      = 0 ;   // working entry
3320 //static Entry*         current_root = 0 ;   // parent of working entry
3321
3322
3323 //static Entry*         previous     = 0 ;   // TODO: remove need for this
3324 static bool             needNewEntry;
3325
3326 static QCString         g_sectionLabel;
3327 static QCString         g_sectionTitle;
3328 static int              g_sectionLevel;
3329 static QCString         xrefItemKey;
3330 static QCString         newXRefItemKey;
3331 static QCString         xrefItemTitle;
3332 static QCString         xrefListTitle;
3333 static Protection       protection;
3334
3335 static bool             xrefAppendFlag;
3336 static bool             inGroupParamFound;
3337 static int              braceCount;
3338 static bool             insidePre;
3339 static bool             parseMore;
3340 static int              g_condCount;
3341
3342 static int              g_commentCount;
3343 static bool             g_spaceBeforeCmd;
3344 static bool             g_spaceBeforeIf;
3345 static QCString         g_copyDocArg;
3346
3347 //-----------------------------------------------------------------------------
3348
3349 static QStack<Grouping> g_autoGroupStack;
3350 static int              g_memberGroupId = DOX_NOGROUP;
3351 static QCString         g_memberGroupHeader;
3352 static QCString         g_memberGroupDocs;
3353 static QCString         g_memberGroupRelates;
3354 static QCString         g_compoundName;
3355
3356 //-----------------------------------------------------------------------------
3357
3358 static void initParser()
3359 {
3360   g_sectionLabel.resize(0);
3361   g_sectionTitle.resize(0);
3362   g_memberGroupHeader.resize(0);
3363 }
3364
3365 //-----------------------------------------------------------------------------
3366
3367 static bool getDocSectionName(int s)
3368 {
3369   switch(s)
3370   {
3371     case Entry::CLASSDOC_SEC:
3372     case Entry::STRUCTDOC_SEC:
3373     case Entry::UNIONDOC_SEC:
3374     case Entry::EXCEPTIONDOC_SEC:
3375     case Entry::NAMESPACEDOC_SEC:
3376     case Entry::PROTOCOLDOC_SEC:
3377     case Entry::CATEGORYDOC_SEC:
3378     case Entry::ENUMDOC_SEC:
3379     case Entry::PAGEDOC_SEC:
3380     case Entry::VARIABLEDOC_SEC:
3381     case Entry::MEMBERDOC_SEC:
3382     case Entry::OVERLOADDOC_SEC:
3383     case Entry::FILEDOC_SEC:
3384     case Entry::DEFINEDOC_SEC:
3385     case Entry::GROUPDOC_SEC:
3386     case Entry::MAINPAGEDOC_SEC:
3387     case Entry::PACKAGEDOC_SEC:
3388     case Entry::DIRDOC_SEC:
3389     case Entry::EXAMPLE_SEC:
3390     case Entry::MEMBERGRP_SEC:
3391       return TRUE;
3392     default: 
3393       return FALSE;
3394   }
3395 }
3396
3397 //-----------------------------------------------------------------------------
3398
3399 static bool makeStructuralIndicator(Entry::Sections s)
3400 {
3401   //printf("current->section=%x\n",current->section);
3402   if (getDocSectionName(current->section))
3403   {
3404     return TRUE;
3405   }
3406   else
3407   {
3408     needNewEntry = TRUE;
3409     current->section = s;
3410     current->fileName = yyFileName;
3411     current->startLine = yyLineNr;
3412     return FALSE;
3413   }
3414 }
3415
3416 static void lineCount()
3417 {
3418   for( const char* c = commentScanYYtext ; *c ; ++c )
3419     yyLineNr += (*c == '\n') ;
3420 }
3421
3422
3423 static QCString stripQuotes(const char *s)
3424 {
3425   QCString name;
3426   if (s==0 || *s==0) return name;
3427   name=s;
3428   if (name.at(0)=='"' && name.at(name.length()-1)=='"')
3429   {
3430     name=name.mid(1,name.length()-2);
3431   }
3432   return name;
3433 }
3434
3435 //-----------------------------------------------------------------
3436
3437 static void addXRefItem(const char *listName,const char *itemTitle,
3438                         const char *listTitle,bool append)
3439 {
3440   Entry *docEntry = current; // inBody && previous ? previous : current;
3441   if (listName==0) return;
3442   //printf("addXRefItem(%s,%s,%s,%d)\n",listName,itemTitle,listTitle,append);
3443
3444   ListItemInfo *lii=0;
3445   RefList *refList = Doxygen::xrefLists->find(listName);
3446   if (refList==0) // new list
3447   {
3448     refList = new RefList(listName,listTitle,itemTitle);
3449     Doxygen::xrefLists->insert(listName,refList);
3450     //printf("new list!\n");
3451   }
3452   if (docEntry->sli)
3453   {
3454     QListIterator<ListItemInfo> slii(*docEntry->sli);
3455     for (slii.toFirst();(lii=slii.current());++slii)
3456     {
3457       if (strcmp(lii->type,listName)==0) 
3458       {
3459         //printf("found %s lii->type=%s\n",listName,lii->type);
3460         break;
3461       }
3462     }
3463   }
3464   if (lii && append) // already found item of same type just before this one
3465   {
3466     //printf("listName=%s item id = %d existing\n",listName,lii->itemId);
3467     RefItem *item = refList->getRefItem(lii->itemId);
3468     ASSERT(item!=0);
3469     item->text += " <p>";
3470     if (Doxygen::markdownSupport)
3471     {
3472       item->text += processMarkdown(yyFileName,current,outputXRef);
3473     }
3474     else
3475     {
3476       item->text += outputXRef;
3477     }
3478     //printf("%s: text +=%s\n",listName,item->text.data());
3479   }
3480   else // new item
3481   {
3482     int itemId  = refList->addRefItem();
3483     //printf("listName=%s item id = %d new current=%p\n",listName,itemId,current);
3484
3485     // if we have already an item from the same list type (e.g. a second @todo)
3486     // in the same Entry (i.e. lii!=0) then we reuse its link anchor.
3487     char anchorLabel[1024];
3488     //sprintf(anchorLabel,"_%s%06d",listName,lii ? lii->itemId : itemId);
3489     sprintf(anchorLabel,"_%s%06d",listName,itemId);
3490     RefItem *item = refList->getRefItem(itemId);
3491     ASSERT(item!=0);
3492     if (Doxygen::markdownSupport)
3493     {
3494       item->text = processMarkdown(yyFileName,current,outputXRef);
3495     }
3496     else
3497     {
3498       item->text = outputXRef;
3499     }
3500     item->listAnchor = anchorLabel;
3501     docEntry->addSpecialListItem(listName,itemId);
3502     QCString cmdString;
3503     cmdString.sprintf("\\xrefitem %s %d.",listName,itemId);
3504     if (inBody)
3505     {
3506       docEntry->inbodyDocs += cmdString;
3507     }
3508     else
3509     {
3510       docEntry->doc += cmdString;
3511     }
3512     SectionInfo *si=new SectionInfo(listName,anchorLabel,
3513                                     g_sectionTitle,SectionInfo::Anchor,
3514                                     g_sectionLevel);
3515     Doxygen::sectionDict.append(anchorLabel,si);
3516     docEntry->anchors->append(si);
3517   }
3518   outputXRef.resize(0);
3519 }
3520
3521 //-----------------------------------------------------------------------------
3522
3523 // Adds a formula text to the list/dictionary of formulas if it was
3524 // not already added. Returns the label of the formula.
3525 static QCString addFormula()
3526 {
3527   QCString formLabel;
3528   QCString fText=formulaText.simplifyWhiteSpace();
3529   Formula *f=0;
3530   if ((f=Doxygen::formulaDict[fText])==0)
3531   {
3532     f = new Formula(fText);
3533     Doxygen::formulaList.append(f);
3534     Doxygen::formulaDict.insert(fText,f);
3535     formLabel.sprintf("\\form#%d",f->getId());
3536     Doxygen::formulaNameDict.insert(formLabel,f);
3537   }
3538   else
3539   {
3540     formLabel.sprintf("\\form#%d",f->getId());
3541   }
3542   int i;
3543   for (i=0;i<formulaNewLines;i++) formLabel+="@_fakenl"; // add fake newlines to
3544                                                          // keep the warnings 
3545                                                          // correctly aligned.
3546   return formLabel;
3547 }
3548
3549 //-----------------------------------------------------------------------------
3550
3551 static void checkFormula();
3552 //-----------------------------------------------------------------------------
3553
3554 static SectionInfo::SectionType sectionLevelToType(int level)
3555 {
3556   if (level>=0 && level<5) return (SectionInfo::SectionType)level;
3557   return SectionInfo::Anchor;
3558 }
3559
3560 static void addSection()
3561 {
3562   // create a new section element
3563   g_sectionTitle+=commentScanYYtext;
3564   g_sectionTitle=g_sectionTitle.stripWhiteSpace();
3565   SectionInfo *si = new SectionInfo(yyFileName,g_sectionLabel,
3566                           g_sectionTitle,sectionLevelToType(g_sectionLevel),g_sectionLevel);
3567
3568   // add section to this entry
3569   current->anchors->append(si);
3570
3571   // add section to the global dictionary
3572   Doxygen::sectionDict.append(g_sectionLabel,si);
3573
3574 }
3575
3576 //-----------------------------------------------------------------------------
3577
3578 static void addCite()
3579 {
3580   Doxygen::citeDict->insert(commentScanYYtext);
3581 }
3582
3583 //-----------------------------------------------------------------------------
3584
3585 // strip trailing whitespace (excluding newlines) from string s
3586 static void stripTrailingWhiteSpace(QCString &s)
3587 {
3588   uint len = s.length();
3589   int i = (int)len-1;
3590   char c;
3591   while (i>=0 && ((c = s.at(i))==' ' || c=='\t' || c=='\r')) i--;
3592   if (i!=(int)len-1) 
3593   {
3594     s.resize(i+2); // string upto and including char at pos i and \0 terminator
3595   }
3596 }
3597
3598 // selects the output to write to
3599 static inline void setOutput(OutputContext ctx)
3600 {
3601   bool xrefAppendToPrev = xrefAppendFlag;
3602   // determine append flag for the next item (i.e. the end of this item)
3603   xrefAppendFlag = !inBody &&
3604                    inContext==OutputXRef && ctx==OutputXRef && // two consecutive xref items
3605                    newXRefKind==xrefKind &&                    // of the same kind
3606                    (xrefKind!=XRef_Item || 
3607                     newXRefItemKey==xrefItemKey);              // with the same key if \xrefitem
3608   //printf("%d && %d && %d && (%d || %d)\n",
3609   //                 inContext==OutputXRef,
3610   //                 ctx==OutputXRef,
3611   //                 newXRefKind==xrefKind,
3612   //                 xrefKind!=XRef_Item,
3613   //                 newXRefItemKey==xrefItemKey);
3614       
3615   //printf("refKind=%d newXRefKind=%d xrefAppendToPrev=%d xrefAppendFlag=%d\n",
3616   //      xrefKind,newXRefKind,xrefAppendToPrev,xrefAppendFlag);
3617
3618   //printf("setOutput(inContext=%d ctx=%d)\n",inContext,ctx);
3619   if (inContext==OutputXRef) // end of XRef section => add the item 
3620   {
3621     // See if we can append this new xref item to the previous one.
3622     // We know this at the start of the next item of the same
3623     // type and need to remember this until the end of that item.
3624     switch(xrefKind)
3625     {
3626       case XRef_Todo:
3627         addXRefItem("todo",
3628                     theTranslator->trTodo(),
3629                     theTranslator->trTodoList(),
3630                     xrefAppendToPrev
3631                    );
3632         break;
3633       case XRef_Test:
3634         addXRefItem("test",
3635                     theTranslator->trTest(),
3636                     theTranslator->trTestList(),
3637                     xrefAppendToPrev
3638                    );
3639         break;
3640       case XRef_Bug:
3641         addXRefItem("bug",
3642                     theTranslator->trBug(),
3643                     theTranslator->trBugList(),
3644                     xrefAppendToPrev
3645                    );
3646         break;
3647       case XRef_Deprecated:
3648         addXRefItem("deprecated",
3649                     theTranslator->trDeprecated(),
3650                     theTranslator->trDeprecatedList(),
3651                     xrefAppendToPrev
3652                    );
3653         break;
3654       case XRef_Item:  // user defined list
3655         addXRefItem(xrefItemKey,
3656                     xrefItemTitle,
3657                     xrefListTitle,
3658                     xrefAppendToPrev
3659                    );
3660         break;
3661       case XRef_None:
3662         ASSERT(0);
3663         break;
3664     }
3665   }
3666   xrefItemKey = newXRefItemKey;
3667
3668   int oldContext = inContext;
3669   inContext = ctx;
3670   if (inContext!=OutputXRef && inBody) inContext=OutputInbody;
3671   switch(inContext)
3672   {
3673     case OutputDoc:
3674       if (oldContext!=inContext)
3675       {
3676         stripTrailingWhiteSpace(current->doc);
3677         if (current->docFile.isEmpty())
3678         {
3679           current->docFile = yyFileName;
3680           current->docLine = yyLineNr;
3681         }
3682       }
3683       pOutputString = &current->doc;
3684       break;
3685     case OutputBrief:
3686       if (oldContext!=inContext)
3687       {
3688         if (current->briefFile.isEmpty())
3689         {
3690           current->briefFile = yyFileName;
3691           current->briefLine = yyLineNr;
3692         }
3693       }
3694       if (current->brief.stripWhiteSpace().isEmpty()) // we only want one brief
3695                                                       // description even if multiple
3696                                                       // are given...
3697       {
3698         pOutputString = &current->brief;
3699       }
3700       else
3701       {
3702         pOutputString = &current->doc;
3703         inContext = OutputDoc; // need to switch to detailed docs, see bug 631380
3704       }
3705       break;
3706     case OutputXRef:
3707       pOutputString = &outputXRef;
3708       // first item found, so can't append to previous
3709       //xrefAppendFlag = FALSE;
3710       break;
3711     case OutputInbody:
3712       pOutputString = &current->inbodyDocs;
3713       break;
3714   }
3715 }
3716
3717 // add a string to the output
3718 static inline void addOutput(const char *s)
3719 {
3720   //printf("addOutput(%s)\n",s);
3721   *pOutputString+=s;
3722 }
3723
3724 // add a character to the output
3725 static inline void addOutput(char c)
3726 {
3727   *pOutputString+=c;
3728 }
3729
3730 static void endBrief(bool addToOutput=TRUE)
3731 {
3732   if (!current->brief.stripWhiteSpace().isEmpty())
3733   { // only go to the detailed description if we have
3734     // found some brief description and not just whitespace
3735     briefEndsAtDot=FALSE;
3736     setOutput(OutputDoc);
3737     if (addToOutput) addOutput(commentScanYYtext);
3738   }
3739 }
3740
3741 /* ----------------------------------------------------------------- */
3742 #undef  YY_INPUT
3743 #define YY_INPUT(buf,result,max_size) result=yyread(buf,max_size);
3744
3745 static int prevPosition=0;
3746
3747 static int yyread(char *buf,int max_size)
3748 {
3749     prevPosition=inputPosition;
3750     int c=0;
3751     while( c < max_size && inputString[inputPosition] )
3752     {
3753         *buf = inputString[inputPosition++] ;
3754         //printf("%d (%c)\n",*buf,*buf);
3755         c++; buf++;
3756     }
3757     return c;
3758 }
3759
3760 /* start command character */
3761 /* comment parsing states. */
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802 #line 3803 "<stdout>"
3803
3804 #define INITIAL 0
3805 #define Comment 1
3806 #define PageDocArg1 2
3807 #define PageDocArg2 3
3808 #define RelatesParam1 4
3809 #define ClassDocArg1 5
3810 #define ClassDocArg2 6
3811 #define ClassDocArg3 7
3812 #define CategoryDocArg1 8
3813 #define XRefItemParam1 9
3814 #define XRefItemParam2 10
3815 #define XRefItemParam3 11
3816 #define FileDocArg1 12
3817 #define EnumDocArg1 13
3818 #define NameSpaceDocArg1 14
3819 #define PackageDocArg1 15
3820 #define GroupDocArg1 16
3821 #define GroupDocArg2 17
3822 #define SectionLabel 18
3823 #define SectionTitle 19
3824 #define SubpageLabel 20
3825 #define SubpageTitle 21
3826 #define FormatBlock 22
3827 #define LineParam 23
3828 #define GuardParam 24
3829 #define GuardParamEnd 25
3830 #define SkipGuardedSection 26
3831 #define SkipInternal 27
3832 #define NameParam 28
3833 #define InGroupParam 29
3834 #define FnParam 30
3835 #define OverloadParam 31
3836 #define InheritParam 32
3837 #define ExtendsParam 33
3838 #define ReadFormulaShort 34
3839 #define ReadFormulaLong 35
3840 #define AnchorLabel 36
3841 #define HtmlComment 37
3842 #define SkipLang 38
3843 #define CiteLabel 39
3844 #define CopyDoc 40
3845
3846 #ifndef YY_NO_UNISTD_H
3847 /* Special case for "unistd.h", since it is non-ANSI. We include it way
3848  * down here because we want the user's section 1 to have been scanned first.
3849  * The user has a chance to override it with an option.
3850  */
3851 #include <unistd.h>
3852 #endif
3853
3854 #ifndef YY_EXTRA_TYPE
3855 #define YY_EXTRA_TYPE void *
3856 #endif
3857
3858 static int yy_init_globals (void );
3859
3860 /* Accessor methods to globals.
3861    These are made visible to non-reentrant scanners for convenience. */
3862
3863 int commentScanYYlex_destroy (void );
3864
3865 int commentScanYYget_debug (void );
3866
3867 void commentScanYYset_debug (int debug_flag  );
3868
3869 YY_EXTRA_TYPE commentScanYYget_extra (void );
3870
3871 void commentScanYYset_extra (YY_EXTRA_TYPE user_defined  );
3872
3873 FILE *commentScanYYget_in (void );
3874
3875 void commentScanYYset_in  (FILE * in_str  );
3876
3877 FILE *commentScanYYget_out (void );
3878
3879 void commentScanYYset_out  (FILE * out_str  );
3880
3881 yy_size_t commentScanYYget_leng (void );
3882
3883 char *commentScanYYget_text (void );
3884
3885 int commentScanYYget_lineno (void );
3886
3887 void commentScanYYset_lineno (int line_number  );
3888
3889 /* Macros after this point can all be overridden by user definitions in
3890  * section 1.
3891  */
3892
3893 #ifndef YY_SKIP_YYWRAP
3894 #ifdef __cplusplus
3895 extern "C" int commentScanYYwrap (void );
3896 #else
3897 extern int commentScanYYwrap (void );
3898 #endif
3899 #endif
3900
3901     static void yyunput (int c,char *buf_ptr  );
3902     
3903 #ifndef yytext_ptr
3904 static void yy_flex_strncpy (char *,yyconst char *,int );
3905 #endif
3906
3907 #ifdef YY_NEED_STRLEN
3908 static int yy_flex_strlen (yyconst char * );
3909 #endif
3910
3911 #ifndef YY_NO_INPUT
3912
3913 #ifdef __cplusplus
3914 static int yyinput (void );
3915 #else
3916 static int input (void );
3917 #endif
3918
3919 #endif
3920
3921 /* Amount of stuff to slurp up with each read. */
3922 #ifndef YY_READ_BUF_SIZE
3923 #define YY_READ_BUF_SIZE 262144
3924 #endif
3925
3926 /* Copy whatever the last rule matched to the standard output. */
3927 #ifndef ECHO
3928 /* This used to be an fputs(), but since the string might contain NUL's,
3929  * we now use fwrite().
3930  */
3931 #define ECHO fwrite( commentScanYYtext, commentScanYYleng, 1, commentScanYYout )
3932 #endif
3933
3934 /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
3935  * is returned in "result".
3936  */
3937 #ifndef YY_INPUT
3938 #define YY_INPUT(buf,result,max_size) \
3939         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
3940                 { \
3941                 int c = '*'; \
3942                 yy_size_t n; \
3943                 for ( n = 0; n < max_size && \
3944                              (c = getc( commentScanYYin )) != EOF && c != '\n'; ++n ) \
3945                         buf[n] = (char) c; \
3946                 if ( c == '\n' ) \
3947                         buf[n++] = (char) c; \
3948                 if ( c == EOF && ferror( commentScanYYin ) ) \
3949                         YY_FATAL_ERROR( "input in flex scanner failed" ); \
3950                 result = n; \
3951                 } \
3952         else \
3953                 { \
3954                 errno=0; \
3955                 while ( (result = fread(buf, 1, max_size, commentScanYYin))==0 && ferror(commentScanYYin)) \
3956                         { \
3957                         if( errno != EINTR) \
3958                                 { \
3959                                 YY_FATAL_ERROR( "input in flex scanner failed" ); \
3960                                 break; \
3961                                 } \
3962                         errno=0; \
3963                         clearerr(commentScanYYin); \
3964                         } \
3965                 }\
3966 \
3967
3968 #endif
3969
3970 /* No semi-colon after return; correct usage is to write "yyterminate();" -
3971  * we don't want an extra ';' after the "return" because that will cause
3972  * some compilers to complain about unreachable statements.
3973  */
3974 #ifndef yyterminate
3975 #define yyterminate() return YY_NULL
3976 #endif
3977
3978 /* Number of entries by which start-condition stack grows. */
3979 #ifndef YY_START_STACK_INCR
3980 #define YY_START_STACK_INCR 25
3981 #endif
3982
3983 /* Report a fatal error. */
3984 #ifndef YY_FATAL_ERROR
3985 #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
3986 #endif
3987
3988 /* end tables serialization structures and prototypes */
3989
3990 /* Default declaration of generated scanner - a define so the user can
3991  * easily add parameters.
3992  */
3993 #ifndef YY_DECL
3994 #define YY_DECL_IS_OURS 1
3995
3996 extern int commentScanYYlex (void);
3997
3998 #define YY_DECL int commentScanYYlex (void)
3999 #endif /* !YY_DECL */
4000
4001 /* Code executed at the beginning of each rule, after commentScanYYtext and commentScanYYleng
4002  * have been set up.
4003  */
4004 #ifndef YY_USER_ACTION
4005 #define YY_USER_ACTION
4006 #endif
4007
4008 /* Code executed at the end of each rule. */
4009 #ifndef YY_BREAK
4010 #define YY_BREAK break;
4011 #endif
4012
4013 #define YY_RULE_SETUP \
4014         if ( commentScanYYleng > 0 ) \
4015                 YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
4016                                 (commentScanYYtext[commentScanYYleng - 1] == '\n'); \
4017         YY_USER_ACTION
4018
4019 /** The main scanner function which does all the work.
4020  */
4021 YY_DECL
4022 {
4023         register yy_state_type yy_current_state;
4024         register char *yy_cp, *yy_bp;
4025         register int yy_act;
4026     
4027 #line 920 "commentscan.l"
4028
4029
4030   /* What can happen in while parsing a comment block:
4031    *   commands (e.g. @page, or \page)
4032    *   escaped commands (e.g. @@page or \\page).
4033    *   formulas (e.g. \f$ \f[ \f{..)
4034    *   directories (e.g. \doxygen\src\)
4035    *   autolist end. (e.g. a dot on an otherwise empty line)
4036    *   newlines.
4037    *   end of brief description due to blank line.
4038    *   end of brief description due to some command (@command, or <command>).
4039    *   words and whitespace and other characters (#,?!, etc).
4040    *   grouping commands (e.g. @{ and @})
4041    *   language switch (e.g. \~english or \~).
4042    *   mail adress (e.g. dimitri@stack.nl).
4043    *   quoted text, such as "foo@bar"
4044    *   XML commands, <summary></summary><remarks></remarks>
4045    */
4046
4047 #line 4048 "<stdout>"
4048
4049         if ( !(yy_init) )
4050                 {
4051                 (yy_init) = 1;
4052
4053 #ifdef YY_USER_INIT
4054                 YY_USER_INIT;
4055 #endif
4056
4057         /* Create the reject buffer large enough to save one state per allowed character. */
4058         if ( ! (yy_state_buf) )
4059             (yy_state_buf) = (yy_state_type *)commentScanYYalloc(YY_STATE_BUF_SIZE  );
4060             if ( ! (yy_state_buf) )
4061                 YY_FATAL_ERROR( "out of dynamic memory in commentScanYYlex()" );
4062
4063                 if ( ! (yy_start) )
4064                         (yy_start) = 1; /* first start state */
4065
4066                 if ( ! commentScanYYin )
4067                         commentScanYYin = stdin;
4068
4069                 if ( ! commentScanYYout )
4070                         commentScanYYout = stdout;
4071
4072                 if ( ! YY_CURRENT_BUFFER ) {
4073                         commentScanYYensure_buffer_stack ();
4074                         YY_CURRENT_BUFFER_LVALUE =
4075                                 commentScanYY_create_buffer(commentScanYYin,YY_BUF_SIZE );
4076                 }
4077
4078                 commentScanYY_load_buffer_state( );
4079                 }
4080
4081         while ( 1 )             /* loops until end-of-file is reached */
4082                 {
4083                 yy_cp = (yy_c_buf_p);
4084
4085                 /* Support of commentScanYYtext. */
4086                 *yy_cp = (yy_hold_char);
4087
4088                 /* yy_bp points to the position in yy_ch_buf of the start of
4089                  * the current run.
4090                  */
4091                 yy_bp = yy_cp;
4092
4093                 yy_current_state = (yy_start);
4094                 yy_current_state += YY_AT_BOL();
4095
4096                 (yy_state_ptr) = (yy_state_buf);
4097                 *(yy_state_ptr)++ = yy_current_state;
4098
4099 yy_match:
4100                 do
4101                         {
4102                         register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
4103                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
4104                                 {
4105                                 yy_current_state = (int) yy_def[yy_current_state];
4106                                 if ( yy_current_state >= 1137 )
4107                                         yy_c = yy_meta[(unsigned int) yy_c];
4108                                 }
4109                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
4110                         *(yy_state_ptr)++ = yy_current_state;
4111                         ++yy_cp;
4112                         }
4113                 while ( yy_base[yy_current_state] != 8724 );
4114
4115 yy_find_action:
4116                 yy_current_state = *--(yy_state_ptr);
4117                 (yy_lp) = yy_accept[yy_current_state];
4118 goto find_rule; /* Shut up GCC warning -Wall */
4119 find_rule: /* we branch to this label when backing up */
4120                 for ( ; ; ) /* until we find what rule we matched */
4121                         {
4122                         if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
4123                                 {
4124                                 yy_act = yy_acclist[(yy_lp)];
4125                                 if ( yy_act & YY_TRAILING_HEAD_MASK ||
4126                                      (yy_looking_for_trail_begin) )
4127                                         {
4128                                         if ( yy_act == (yy_looking_for_trail_begin) )
4129                                                 {
4130                                                 (yy_looking_for_trail_begin) = 0;
4131                                                 yy_act &= ~YY_TRAILING_HEAD_MASK;
4132                                                 break;
4133                                                 }
4134                                         }
4135                                 else if ( yy_act & YY_TRAILING_MASK )
4136                                         {
4137                                         (yy_looking_for_trail_begin) = yy_act & ~YY_TRAILING_MASK;
4138                                         (yy_looking_for_trail_begin) |= YY_TRAILING_HEAD_MASK;
4139                                         (yy_full_match) = yy_cp;
4140                                         (yy_full_state) = (yy_state_ptr);
4141                                         (yy_full_lp) = (yy_lp);
4142                                         }
4143                                 else
4144                                         {
4145                                         (yy_full_match) = yy_cp;
4146                                         (yy_full_state) = (yy_state_ptr);
4147                                         (yy_full_lp) = (yy_lp);
4148                                         break;
4149                                         }
4150                                 ++(yy_lp);
4151                                 goto find_rule;
4152                                 }
4153                         --yy_cp;
4154                         yy_current_state = *--(yy_state_ptr);
4155                         (yy_lp) = yy_accept[yy_current_state];
4156                         }
4157
4158                 YY_DO_BEFORE_ACTION;
4159
4160 do_action:      /* This label is used only to access EOF actions. */
4161
4162                 switch ( yy_act )
4163         { /* beginning of action switch */
4164 case 1:
4165 YY_RULE_SETUP
4166 #line 939 "commentscan.l"
4167 { // escaped command
4168                                           addOutput(commentScanYYtext);
4169                                         }
4170         YY_BREAK
4171 case 2:
4172 YY_RULE_SETUP
4173 #line 942 "commentscan.l"
4174 { // escaped command
4175                                           addOutput(commentScanYYtext);
4176                                         }
4177         YY_BREAK
4178 case 3:
4179 YY_RULE_SETUP
4180 #line 945 "commentscan.l"
4181 { // mail adress
4182                                           addOutput(commentScanYYtext);
4183                                         }
4184         YY_BREAK
4185 case 4:
4186 YY_RULE_SETUP
4187 #line 948 "commentscan.l"
4188 { // quoted text
4189                                           addOutput(commentScanYYtext);
4190                                         }
4191         YY_BREAK
4192 case 5:
4193 YY_RULE_SETUP
4194 #line 951 "commentscan.l"
4195 { // directory (or chain of commands!)
4196                                           addOutput(commentScanYYtext);
4197                                         }
4198         YY_BREAK
4199 case 6:
4200 /* rule 6 can match eol */
4201 YY_RULE_SETUP
4202 #line 954 "commentscan.l"
4203 { // xref command 
4204                                           if (inContext!=OutputXRef) 
4205                                           {
4206                                             briefEndsAtDot=FALSE;
4207                                             setOutput(OutputDoc);
4208                                           }
4209                                           // continue with the same input
4210                                           REJECT;
4211                                         }
4212         YY_BREAK
4213 /*
4214 <Comment>{DETAILEDCMD}/[^a-z_A-Z]*      { // command that can end a brief description
4215                                           briefEndsAtDot=FALSE;
4216                                           setOutput(OutputDoc);
4217                                           // continue with the same input
4218                                           REJECT;
4219                                         }
4220    */
4221 case 7:
4222 YY_RULE_SETUP
4223 #line 971 "commentscan.l"
4224 { // HTML command that ends a brief description
4225                                           setOutput(OutputDoc);
4226                                           // continue with the same input
4227                                           REJECT;
4228                                         }
4229         YY_BREAK
4230 case 8:
4231 YY_RULE_SETUP
4232 #line 976 "commentscan.l"
4233 { // HTML command that ends a brief description
4234                                           if (current->lang==SrcLangExt_CSharp)
4235                                           {
4236                                             setOutput(OutputDoc);
4237                                           }
4238                                           // continue with the same input
4239                                           REJECT;
4240                                         }
4241         YY_BREAK
4242 case 9:
4243 YY_RULE_SETUP
4244 #line 984 "commentscan.l"
4245 { // start of a .NET XML style brief description
4246                                           setOutput(OutputBrief);
4247                                           addOutput(commentScanYYtext);
4248                                         }
4249         YY_BREAK
4250 case 10:
4251 YY_RULE_SETUP
4252 #line 988 "commentscan.l"
4253 { // start of a .NET XML style detailed description
4254                                           setOutput(OutputDoc);
4255                                           addOutput(commentScanYYtext);
4256                                         }
4257         YY_BREAK
4258 case 11:
4259 YY_RULE_SETUP
4260 #line 992 "commentscan.l"
4261 { // start of a .NET XML style detailed description
4262                                           addOutput(commentScanYYtext);
4263                                           setOutput(OutputDoc);
4264                                         }
4265         YY_BREAK
4266 case 12:
4267 YY_RULE_SETUP
4268 #line 996 "commentscan.l"
4269 { // end of a brief or detailed description
4270                                           addOutput(commentScanYYtext);
4271                                         }
4272         YY_BREAK
4273 case 13:
4274 YY_RULE_SETUP
4275 #line 999 "commentscan.l"
4276 {
4277                                           insidePre=TRUE;
4278                                           addOutput(commentScanYYtext);
4279                                         }
4280         YY_BREAK
4281 case 14:
4282 YY_RULE_SETUP
4283 #line 1003 "commentscan.l"
4284 {
4285                                           insidePre=FALSE;
4286                                           addOutput(commentScanYYtext);
4287                                         }
4288         YY_BREAK
4289 case 15:
4290 YY_RULE_SETUP
4291 #line 1007 "commentscan.l"
4292 { // RCS tag which end a brief description
4293                                           setOutput(OutputDoc);
4294                                           REJECT;
4295                                         }
4296         YY_BREAK
4297 case 16:
4298 YY_RULE_SETUP
4299 #line 1011 "commentscan.l"
4300
4301                                           BEGIN(HtmlComment);
4302                                         }
4303         YY_BREAK
4304 case 17:
4305 YY_RULE_SETUP
4306 #line 1014 "commentscan.l"
4307 {
4308                                           warn(yyFileName,yyLineNr,
4309                                                "warning: found \\endinternal without matching \\internal"
4310                                               );
4311                                         }
4312         YY_BREAK
4313 case 18:
4314 YY_RULE_SETUP
4315 #line 1019 "commentscan.l"
4316 { // potentially interesting command
4317                                           // the {B}* in the front was added for bug620924
4318                                           QCString cmdName = QCString(commentScanYYtext).stripWhiteSpace().data()+1;
4319                                           DocCmdMapper::Cmd *cmdPtr = DocCmdMapper::map(cmdName);
4320                                           g_spaceBeforeCmd = commentScanYYtext[0]==' ' || commentScanYYtext[0]=='\t';
4321                                           if (cmdPtr) // special action is required
4322                                           {
4323                                             if (cmdPtr->endsBrief)
4324                                             { 
4325                                               briefEndsAtDot=FALSE;
4326                                               // this command forces the end of brief description
4327                                               setOutput(OutputDoc);
4328                                             }
4329                                             int i=0;
4330                                             while (commentScanYYtext[i]==' ' || commentScanYYtext[i]=='\t') i++;
4331                                             if (i>0) addOutput(QCString(commentScanYYtext).left(i));
4332                                             if (cmdPtr->func && cmdPtr->func(cmdName))
4333                                             {
4334                                               // implicit split of the comment block into two
4335                                               // entries. Restart the next block at the start
4336                                               // of this command.
4337                                               parseMore=TRUE;
4338
4339                                               // yuk, this is probably not very portable across lex implementations, 
4340                                               // but we need to know the position in the input buffer where this 
4341                                               // rule matched.
4342                                               // for flex 2.5.33+ we should use YY_CURRENT_BUFFER_LVALUE
4343 #if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33
4344                                               inputPosition=prevPosition + yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
4345 #else
4346                                               inputPosition=prevPosition + yy_bp - yy_current_buffer->yy_ch_buf;
4347 #endif
4348                                               yyterminate();
4349                                             }
4350                                             else if (cmdPtr->func==0)
4351                                             {
4352                                               // command without handler, to be processed
4353                                               // later by parsedoc.cpp
4354                                               addOutput(commentScanYYtext+i);
4355                                             }
4356                                           }
4357                                           else // command not relevant
4358                                           {
4359                                             addOutput(commentScanYYtext);
4360                                           }
4361                                         }
4362         YY_BREAK
4363 case 19:
4364 YY_RULE_SETUP
4365 #line 1065 "commentscan.l"
4366 { // escaped formula command
4367                                           addOutput(commentScanYYtext);
4368                                         }
4369         YY_BREAK
4370 case 20:
4371 YY_RULE_SETUP
4372 #line 1068 "commentscan.l"
4373 { // language switch command
4374                                           QCString langId = QString(commentScanYYtext).stripWhiteSpace().data()+2;
4375                                           if (!langId.isEmpty() &&
4376                                               stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)!=0)
4377                                           { // enable language specific section
4378                                             BEGIN(SkipLang);
4379                                           }
4380                                         }
4381         YY_BREAK
4382 case 21:
4383 YY_RULE_SETUP
4384 #line 1076 "commentscan.l"
4385 { // start of a formula with custom environment
4386                                           formulaText="\\begin";
4387                                           formulaEnv=QString(commentScanYYtext).stripWhiteSpace().data()+2;
4388                                           if (formulaEnv.at(formulaEnv.length()-1)=='{')
4389                                           {
4390                                             // remove trailing open brace
4391                                             formulaEnv=formulaEnv.left(formulaEnv.length()-1);
4392                                           }
4393                                           formulaText+=formulaEnv;
4394                                           formulaNewLines=0;
4395                                           BEGIN(ReadFormulaLong);
4396                                         }
4397         YY_BREAK
4398 case 22:
4399 YY_RULE_SETUP
4400 #line 1088 "commentscan.l"
4401 { // start of a inline formula
4402                                           formulaText="$";
4403                                           formulaNewLines=0;
4404                                           BEGIN(ReadFormulaShort);
4405                                         }
4406         YY_BREAK
4407 case 23:
4408 YY_RULE_SETUP
4409 #line 1093 "commentscan.l"
4410 { // start of a block formula
4411                                           formulaText="\\[";
4412                                           formulaNewLines=0;
4413                                           BEGIN(ReadFormulaLong);
4414                                         }
4415         YY_BREAK
4416 case 24:
4417 YY_RULE_SETUP
4418 #line 1098 "commentscan.l"
4419 { // begin of a group
4420                                           //langParser->handleGroupStartCommand(g_memberGroupHeader);
4421                                           openGroup(current,yyFileName,yyLineNr);
4422                                         }
4423         YY_BREAK
4424 case 25:
4425 YY_RULE_SETUP
4426 #line 1102 "commentscan.l"
4427 { // end of a group
4428                                           //langParser->handleGroupEndCommand();
4429                                           closeGroup(current,yyFileName,yyLineNr,TRUE);
4430                                           g_memberGroupHeader.resize(0);
4431                                           parseMore=TRUE;
4432                                           needNewEntry = TRUE;
4433 #if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33
4434                                           inputPosition=prevPosition + yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + strlen(commentScanYYtext);
4435 #else
4436                                           inputPosition=prevPosition + yy_bp - yy_current_buffer->yy_ch_buf + strlen(commentScanYYtext);
4437 #endif
4438                                           yyterminate();
4439                                         }
4440         YY_BREAK
4441 case 26:
4442 YY_RULE_SETUP
4443 #line 1115 "commentscan.l"
4444 { // escaped character
4445                                           addOutput(commentScanYYtext);
4446                                         }
4447         YY_BREAK
4448 case 27:
4449 YY_RULE_SETUP
4450 #line 1118 "commentscan.l"
4451 { // normal word
4452                                           addOutput(commentScanYYtext);
4453                                         }
4454         YY_BREAK
4455 case 28:
4456 /* rule 28 can match eol */
4457 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
4458 (yy_c_buf_p) = yy_cp -= 1;
4459 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
4460 YY_RULE_SETUP
4461 #line 1121 "commentscan.l"
4462 { // explicit end autolist: e.g "  ."
4463                                           addOutput(commentScanYYtext); 
4464                                         }
4465         YY_BREAK
4466 case 29:
4467 #line 1125 "commentscan.l"
4468 case 30:
4469 YY_RULE_SETUP
4470 #line 1125 "commentscan.l"
4471 { // start of autolist
4472                                           if (!Doxygen::markdownSupport)
4473                                           {
4474                                             REJECT;
4475                                           }
4476                                           else
4477                                           {
4478                                             if (inContext!=OutputXRef) 
4479                                             {
4480                                               briefEndsAtDot=FALSE;
4481                                               setOutput(OutputDoc);
4482                                             }
4483                                             addOutput(commentScanYYtext); 
4484                                           }
4485                                         }
4486         YY_BREAK
4487 case 31:
4488 YY_RULE_SETUP
4489 #line 1140 "commentscan.l"
4490 { // start of autolist
4491                                           if (inContext!=OutputXRef) 
4492                                           {
4493                                             briefEndsAtDot=FALSE;
4494                                             setOutput(OutputDoc);
4495                                           }
4496                                           addOutput(commentScanYYtext); 
4497                                         }
4498         YY_BREAK
4499 case 32:
4500 /* rule 32 can match eol */
4501 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
4502 (yy_c_buf_p) = yy_cp -= 1;
4503 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
4504 YY_RULE_SETUP
4505 #line 1148 "commentscan.l"
4506 { // horizontal line (dashed)
4507                                           addOutput(commentScanYYtext); 
4508                                         }
4509         YY_BREAK
4510 case 33:
4511 YY_RULE_SETUP
4512 #line 1151 "commentscan.l"
4513 { // mdash
4514                                           addOutput(insidePre || Doxygen::markdownSupport ? commentScanYYtext : "&mdash;");
4515                                         }
4516         YY_BREAK
4517 case 34:
4518 YY_RULE_SETUP
4519 #line 1154 "commentscan.l"
4520 { // ndash
4521                                           addOutput(insidePre || Doxygen::markdownSupport ? commentScanYYtext : "&ndash;");
4522                                         }
4523         YY_BREAK
4524 case 35:
4525 YY_RULE_SETUP
4526 #line 1157 "commentscan.l"
4527 { // . at start or in the middle of a word, or ellipsis
4528                                           addOutput(commentScanYYtext);
4529                                         }
4530         YY_BREAK
4531 case 36:
4532 YY_RULE_SETUP
4533 #line 1160 "commentscan.l"
4534 { // . with escaped space.
4535                                           addOutput(commentScanYYtext[0]);
4536                                           addOutput(commentScanYYtext[2]);
4537                                         }
4538         YY_BREAK
4539 case 37:
4540 YY_RULE_SETUP
4541 #line 1164 "commentscan.l"
4542 { // . with comma such as "e.g.," 
4543                                           addOutput(commentScanYYtext);
4544                                         }
4545         YY_BREAK
4546 case 38:
4547 YY_RULE_SETUP
4548 #line 1167 "commentscan.l"
4549 { // ellipsis with escaped space.
4550                                           addOutput("... ");
4551                                         }
4552         YY_BREAK
4553 case 39:
4554 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
4555 (yy_c_buf_p) = yy_cp -= 1;
4556 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
4557 YY_RULE_SETUP
4558 #line 1170 "commentscan.l"
4559 { // internal ellipsis 
4560                                           addOutput(commentScanYYtext);
4561                                         }
4562         YY_BREAK
4563 case 40:
4564 /* rule 40 can match eol */
4565 YY_RULE_SETUP
4566 #line 1173 "commentscan.l"
4567 { // at least one blank line (or blank line command)
4568                                           if (inContext==OutputXRef)
4569                                           {
4570                                             // see bug 613024, we need to put the newlines after ending the XRef section.
4571                                             setOutput(OutputDoc);
4572                                             addOutput("\n\n");
4573                                           }
4574                                           else if (inContext!=OutputBrief)
4575                                           {
4576                                             addOutput("\n\n");
4577                                             setOutput(OutputDoc);
4578                                           }
4579                                           else // inContext==OutputBrief
4580                                           { // only go to the detailed description if we have
4581                                             // found some brief description and not just whitespace
4582                                             endBrief(FALSE);
4583                                           }
4584                                           lineCount();
4585                                         }
4586         YY_BREAK
4587 case 41:
4588 YY_RULE_SETUP
4589 #line 1192 "commentscan.l"
4590 { // potential end of a JavaDoc style comment
4591                                           addOutput(*commentScanYYtext);
4592                                           if (briefEndsAtDot)
4593                                           {
4594                                             setOutput(OutputDoc);
4595                                             briefEndsAtDot=FALSE;
4596                                           }
4597                                         }
4598         YY_BREAK
4599 case 42:
4600 /* rule 42 can match eol */
4601 YY_RULE_SETUP
4602 #line 1200 "commentscan.l"
4603 { // newline
4604                                           addOutput(*commentScanYYtext);
4605                                           yyLineNr++;
4606                                         }
4607         YY_BREAK
4608 case 43:
4609 YY_RULE_SETUP
4610 #line 1204 "commentscan.l"
4611 { // catch-all for anything else
4612                                           addOutput(*commentScanYYtext);
4613                                         }
4614         YY_BREAK
4615 /* --------------   Rules for handling HTML comments ----------- */
4616 case 44:
4617 YY_RULE_SETUP
4618 #line 1211 "commentscan.l"
4619 { BEGIN( Comment ); }
4620         YY_BREAK
4621 case 45:
4622 /* rule 45 can match eol */
4623 YY_RULE_SETUP
4624 #line 1212 "commentscan.l"
4625
4626                                           if (*commentScanYYtext=='\n') yyLineNr++;
4627                                         }
4628         YY_BREAK
4629 case 46:
4630 YY_RULE_SETUP
4631 #line 1215 "commentscan.l"
4632 { // ignore unimportant characters
4633                                         }
4634         YY_BREAK
4635 case 47:
4636 YY_RULE_SETUP
4637 #line 1217 "commentscan.l"
4638 { // ignore every else
4639                                         }
4640         YY_BREAK
4641 /* --------------   Rules for handling formulas ---------------- */
4642 case 48:
4643 YY_RULE_SETUP
4644 #line 1222 "commentscan.l"
4645 { // end of inline formula
4646                                           formulaText+="$";
4647                                           addOutput(" "+addFormula());
4648                                           BEGIN(Comment);
4649                                         }
4650         YY_BREAK
4651 case 49:
4652 YY_RULE_SETUP
4653 #line 1227 "commentscan.l"
4654 { // end of block formula
4655                                           formulaText+="\\]";
4656                                           addOutput(" "+addFormula());
4657                                           BEGIN(Comment);
4658                                         }
4659         YY_BREAK
4660 case 50:
4661 YY_RULE_SETUP
4662 #line 1232 "commentscan.l"
4663 { // end of custom env formula
4664                                           formulaText+="\\end";
4665                                           formulaText+=formulaEnv;
4666                                           addOutput(" "+addFormula());
4667                                           BEGIN(Comment);
4668                                         }
4669         YY_BREAK
4670 case 51:
4671 YY_RULE_SETUP
4672 #line 1238 "commentscan.l"
4673 { // any non-special character
4674                                           formulaText+=commentScanYYtext; 
4675                                         } 
4676         YY_BREAK
4677 case 52:
4678 /* rule 52 can match eol */
4679 YY_RULE_SETUP
4680 #line 1241 "commentscan.l"
4681 { // new line
4682                                           formulaNewLines++;
4683                                           formulaText+=*commentScanYYtext; 
4684                                           yyLineNr++; 
4685                                         }
4686         YY_BREAK
4687 case 53:
4688 YY_RULE_SETUP
4689 #line 1246 "commentscan.l"
4690 { // any othe character
4691                                           formulaText+=*commentScanYYtext; 
4692                                         }
4693         YY_BREAK
4694 /* ------------ handle argument of enum command --------------- */
4695 case 54:
4696 /* rule 54 can match eol */
4697 YY_RULE_SETUP
4698 #line 1252 "commentscan.l"
4699 { // handle argument
4700                                           current->name = commentScanYYtext;
4701                                           BEGIN( Comment );
4702                                         }
4703         YY_BREAK
4704 case 55:
4705 /* rule 55 can match eol */
4706 YY_RULE_SETUP
4707 #line 1256 "commentscan.l"
4708 { // line continuation
4709                                           yyLineNr++;
4710                                           addOutput('\n');
4711                                         }
4712         YY_BREAK
4713 case 56:
4714 /* rule 56 can match eol */
4715 YY_RULE_SETUP
4716 #line 1260 "commentscan.l"
4717 { // missing argument
4718                                           warn(yyFileName,yyLineNr,
4719                                                "warning: missing argument after \\enum."
4720                                               );
4721                                           addOutput('\n');
4722                                           if (*commentScanYYtext=='\n') yyLineNr++;
4723                                           BEGIN( Comment );
4724                                         }
4725         YY_BREAK
4726 case 57:
4727 YY_RULE_SETUP
4728 #line 1268 "commentscan.l"
4729 { // ignore other stuff
4730                                         }
4731         YY_BREAK
4732 /* ------------ handle argument of namespace command --------------- */
4733 case 58:
4734 /* rule 58 can match eol */
4735 YY_RULE_SETUP
4736 #line 1273 "commentscan.l"
4737 { // handle argument
4738                                           current->name = substitute(commentScanYYtext,".","::");
4739                                           BEGIN( Comment );
4740                                         }
4741         YY_BREAK
4742 case 59:
4743 /* rule 59 can match eol */
4744 YY_RULE_SETUP
4745 #line 1277 "commentscan.l"
4746 { // line continuation
4747                                           yyLineNr++; 
4748                                           addOutput('\n');
4749                                         }
4750         YY_BREAK
4751 case 60:
4752 /* rule 60 can match eol */
4753 YY_RULE_SETUP
4754 #line 1281 "commentscan.l"
4755 { // missing argument
4756                                           warn(yyFileName,yyLineNr,
4757                                                "warning: missing argument after "
4758                                                "\\namespace."
4759                                               );
4760                                           addOutput('\n');
4761                                           if (*commentScanYYtext=='\n') yyLineNr++;
4762                                           BEGIN( Comment );
4763                                         }
4764         YY_BREAK
4765 case 61:
4766 YY_RULE_SETUP
4767 #line 1290 "commentscan.l"
4768 { // ignore other stuff
4769                                         }
4770         YY_BREAK
4771 /* ------------ handle argument of package command --------------- */
4772 case 62:
4773 YY_RULE_SETUP
4774 #line 1295 "commentscan.l"
4775 { // handle argument
4776                                           current->name = commentScanYYtext;
4777                                           BEGIN( Comment );
4778                                         }
4779         YY_BREAK
4780 case 63:
4781 /* rule 63 can match eol */
4782 YY_RULE_SETUP
4783 #line 1299 "commentscan.l"
4784 { // line continuation 
4785                                           yyLineNr++; 
4786                                           addOutput('\n');
4787                                         }
4788         YY_BREAK
4789 case 64:
4790 /* rule 64 can match eol */
4791 YY_RULE_SETUP
4792 #line 1303 "commentscan.l"
4793 { // missing argument
4794                                           warn(yyFileName,yyLineNr,
4795                                                "warning: missing argument after "
4796                                                "\\package."
4797                                               );
4798                                           addOutput('\n');
4799                                           if (*commentScanYYtext=='\n') yyLineNr++;
4800                                           BEGIN( Comment );
4801                                         }
4802         YY_BREAK
4803 case 65:
4804 YY_RULE_SETUP
4805 #line 1312 "commentscan.l"
4806 { // ignore other stuff
4807                                         }
4808         YY_BREAK
4809 /* ------ handle argument of class/struct/union command --------------- */
4810 case 66:
4811 /* rule 66 can match eol */
4812 YY_RULE_SETUP
4813 #line 1317 "commentscan.l"
4814 { // first argument
4815                                           current->name = substitute(commentScanYYtext,".","::");
4816                                           if (current->section==Entry::PROTOCOLDOC_SEC)
4817                                           {
4818                                             current->name+="-p";
4819                                           }
4820                                           // prepend outer scope name 
4821                                           BEGIN( ClassDocArg2 );
4822                                         }
4823         YY_BREAK
4824 case 67:
4825 /* rule 67 can match eol */
4826 YY_RULE_SETUP
4827 #line 1326 "commentscan.l"
4828 {
4829                                           current->name = substitute(commentScanYYtext,".","::");
4830                                           BEGIN( ClassDocArg2 );
4831                                         }
4832         YY_BREAK
4833 case 68:
4834 /* rule 68 can match eol */
4835 YY_RULE_SETUP
4836 #line 1330 "commentscan.l"
4837 { // line continuation
4838                                           yyLineNr++; 
4839                                           addOutput('\n');
4840                                         }
4841         YY_BREAK
4842 case 69:
4843 /* rule 69 can match eol */
4844 YY_RULE_SETUP
4845 #line 1334 "commentscan.l"
4846 {
4847                                           warn(yyFileName,yyLineNr,
4848                                                "warning: missing argument after "
4849                                                "\\%s.",YY_START==ClassDocArg1?"class":"category"
4850                                               );
4851                                           addOutput('\n');
4852                                           if (*commentScanYYtext=='\n') yyLineNr++;
4853                                           BEGIN( Comment );
4854                                         }
4855         YY_BREAK
4856 case 70:
4857 YY_RULE_SETUP
4858 #line 1343 "commentscan.l"
4859 { // ignore other stuff
4860                                         }
4861         YY_BREAK
4862 case 71:
4863 YY_RULE_SETUP
4864 #line 1346 "commentscan.l"
4865 { // second argument; include file
4866                                           current->includeFile = commentScanYYtext;
4867                                           BEGIN( ClassDocArg3 );
4868                                         }
4869         YY_BREAK
4870 case 72:
4871 /* rule 72 can match eol */
4872 YY_RULE_SETUP
4873 #line 1350 "commentscan.l"
4874 { // line continuation
4875                                           yyLineNr++; 
4876                                           addOutput('\n');
4877                                         }
4878         YY_BREAK
4879 case 73:
4880 /* rule 73 can match eol */
4881 YY_RULE_SETUP
4882 #line 1354 "commentscan.l"
4883
4884                                           addOutput('\n');
4885                                           if (*commentScanYYtext=='\n') yyLineNr++;
4886                                           BEGIN( Comment );
4887                                         }
4888         YY_BREAK
4889 case 74:
4890 YY_RULE_SETUP
4891 #line 1359 "commentscan.l"
4892 { // ignore other stuff
4893                                         }
4894         YY_BREAK
4895 case 75:
4896 YY_RULE_SETUP
4897 #line 1362 "commentscan.l"
4898 { // third argument; include file name
4899                                           current->includeName = commentScanYYtext;
4900                                           BEGIN( Comment );
4901                                         }
4902         YY_BREAK
4903 case 76:
4904 /* rule 76 can match eol */
4905 YY_RULE_SETUP
4906 #line 1366 "commentscan.l"
4907 { // line continuation
4908                                           yyLineNr++;
4909                                           addOutput('\n');
4910                                         }
4911         YY_BREAK
4912 case 77:
4913 /* rule 77 can match eol */
4914 YY_RULE_SETUP
4915 #line 1370 "commentscan.l"
4916
4917                                           if (*commentScanYYtext=='\n') yyLineNr++;
4918                                           BEGIN( Comment );
4919                                         }
4920         YY_BREAK
4921 case 78:
4922 YY_RULE_SETUP
4923 #line 1374 "commentscan.l"
4924 { // ignore other stuff
4925                                         }
4926         YY_BREAK
4927 /* --------- handle arguments of {def,add,weak}group commands --------- */
4928 case 79:
4929 YY_RULE_SETUP
4930 #line 1379 "commentscan.l"
4931 { // group name
4932                                           current->name = commentScanYYtext;
4933                                           //lastDefGroup.groupname = commentScanYYtext;
4934                                           //lastDefGroup.pri = current->groupingPri();
4935                                           // the .html stuff is for Qt compatibility
4936                                           if (current->name.right(5)==".html") 
4937                                           {
4938                                             current->name=current->name.left(current->name.length()-5);
4939                                           }
4940                                           current->type.resize(0);
4941                                           BEGIN(GroupDocArg2);
4942                                         }
4943         YY_BREAK
4944 case 80:
4945 /* rule 80 can match eol */
4946 YY_RULE_SETUP
4947 #line 1391 "commentscan.l"
4948 { // line continuation
4949                                           yyLineNr++; 
4950                                           addOutput('\n');
4951                                         }
4952         YY_BREAK
4953 case 81:
4954 /* rule 81 can match eol */
4955 YY_RULE_SETUP
4956 #line 1395 "commentscan.l"
4957 { // missing argument!
4958                                           warn(yyFileName,yyLineNr,
4959                                                "warning: missing group name after %s",
4960                                                current->groupDocCmd()
4961                                               );
4962                                           addOutput('\n');
4963                                           if (*commentScanYYtext=='\n') yyLineNr++;
4964                                           BEGIN( Comment );
4965                                         }
4966         YY_BREAK
4967 case 82:
4968 /* rule 82 can match eol */
4969 YY_RULE_SETUP
4970 #line 1404 "commentscan.l"
4971 { // line continuation
4972                                           yyLineNr++; 
4973                                           addOutput('\n');
4974                                         }
4975         YY_BREAK
4976 case 83:
4977 YY_RULE_SETUP
4978 #line 1408 "commentscan.l"
4979 { // title (stored in type)
4980                                           current->type += commentScanYYtext;
4981                                           current->type = current->type.stripWhiteSpace();
4982                                         }
4983         YY_BREAK
4984 case 84:
4985 /* rule 84 can match eol */
4986 YY_RULE_SETUP
4987 #line 1412 "commentscan.l"
4988 {
4989                                           if ( current->groupDocType==Entry::GROUPDOC_NORMAL &&
4990                                                current->type.isEmpty() 
4991                                              ) // defgroup requires second argument
4992                                           {
4993                                             warn(yyFileName,yyLineNr,
4994                                                  "warning: missing title after "
4995                                                  "\\defgroup %s", current->name.data()
4996                                                 );
4997                                           }
4998                                           if (*commentScanYYtext=='\n') yyLineNr++; 
4999                                           addOutput('\n');
5000                                           BEGIN( Comment );
5001                                         }
5002         YY_BREAK
5003 /* --------- handle arguments of page/mainpage command ------------------- */
5004 case 85:
5005 YY_RULE_SETUP
5006 #line 1429 "commentscan.l"
5007 { // first argument; page name
5008                                           current->name = stripQuotes(commentScanYYtext);
5009                                           BEGIN( PageDocArg2 ); 
5010                                         }
5011         YY_BREAK
5012 case 86:
5013 /* rule 86 can match eol */
5014 YY_RULE_SETUP
5015 #line 1433 "commentscan.l"
5016 { yyLineNr++; 
5017                                           addOutput('\n');
5018                                         }
5019         YY_BREAK
5020 case 87:
5021 /* rule 87 can match eol */
5022 YY_RULE_SETUP
5023 #line 1436 "commentscan.l"
5024 {
5025                                           warn(yyFileName,yyLineNr,
5026                                                "warning: missing argument after "
5027                                                "\\page."
5028                                               );
5029                                           if (*commentScanYYtext=='\n') yyLineNr++;
5030                                           addOutput('\n');
5031                                           BEGIN( Comment );
5032                                         }
5033         YY_BREAK
5034 case 88:
5035 YY_RULE_SETUP
5036 #line 1445 "commentscan.l"
5037 { // ignore other stuff
5038                                         }
5039         YY_BREAK
5040 case 89:
5041 /* rule 89 can match eol */
5042 YY_RULE_SETUP
5043 #line 1447 "commentscan.l"
5044 { // second argument; page title
5045                                           yyLineNr++;
5046                                           current->args = commentScanYYtext;
5047                                           addOutput('\n');
5048                                           BEGIN( Comment );
5049                                         }
5050         YY_BREAK
5051 /* --------- handle arguments of the file/dir/example command ------------ */
5052 case 90:
5053 /* rule 90 can match eol */
5054 YY_RULE_SETUP
5055 #line 1456 "commentscan.l"
5056 { // no file name specfied
5057                                           if (*commentScanYYtext=='\n') yyLineNr++;
5058                                           addOutput('\n');
5059                                           BEGIN( Comment );
5060                                         }
5061         YY_BREAK
5062 case 91:
5063 YY_RULE_SETUP
5064 #line 1461 "commentscan.l"
5065 { // first argument; name
5066                                           current->name = stripQuotes(commentScanYYtext);
5067                                           BEGIN( Comment );
5068                                         }
5069         YY_BREAK
5070 case 92:
5071 /* rule 92 can match eol */
5072 YY_RULE_SETUP
5073 #line 1465 "commentscan.l"
5074 { yyLineNr++; 
5075                                           addOutput('\n');
5076                                         }
5077         YY_BREAK
5078 case 93:
5079 YY_RULE_SETUP
5080 #line 1468 "commentscan.l"
5081 { // ignore other stuff
5082                                         }
5083         YY_BREAK
5084 /* --------- handle arguments of the xrefitem command ------------ */
5085 case 94:
5086 YY_RULE_SETUP
5087 #line 1473 "commentscan.l"
5088 { // first argument
5089                                           newXRefItemKey=commentScanYYtext;
5090                                           setOutput(OutputXRef);
5091                                           BEGIN(XRefItemParam2);
5092                                         }
5093         YY_BREAK
5094 case 95:
5095 /* rule 95 can match eol */
5096 YY_RULE_SETUP
5097 #line 1478 "commentscan.l"
5098 { // line continuation
5099                                           yyLineNr++; 
5100                                           addOutput('\n');
5101                                         }
5102         YY_BREAK
5103 case 96:
5104 /* rule 96 can match eol */
5105 YY_RULE_SETUP
5106 #line 1482 "commentscan.l"
5107 { // missing arguments
5108                                           warn(yyFileName,yyLineNr,
5109                                                "warning: Missing first argument of \\xrefitem"
5110                                               );
5111                                           if (*commentScanYYtext=='\n') yyLineNr++;
5112                                           addOutput('\n');
5113                                           inContext = OutputDoc;
5114                                           BEGIN( Comment );
5115                                         }
5116         YY_BREAK
5117 case 97:
5118 YY_RULE_SETUP
5119 #line 1491 "commentscan.l"
5120 { // ignore other stuff 
5121                                         }
5122         YY_BREAK
5123 case 98:
5124 YY_RULE_SETUP
5125 #line 1494 "commentscan.l"
5126 { // second argument
5127                                           xrefItemTitle = stripQuotes(commentScanYYtext);
5128                                           BEGIN(XRefItemParam3);
5129                                         }
5130         YY_BREAK
5131 case 99:
5132 /* rule 99 can match eol */
5133 YY_RULE_SETUP
5134 #line 1498 "commentscan.l"
5135 { // line continuation
5136                                           yyLineNr++; 
5137                                           addOutput('\n');
5138                                         }
5139         YY_BREAK
5140 case 100:
5141 /* rule 100 can match eol */
5142 YY_RULE_SETUP
5143 #line 1502 "commentscan.l"
5144 { // missing argument
5145                                           warn(yyFileName,yyLineNr,
5146                                               "warning: Missing second argument of \\xrefitem"
5147                                               );
5148                                           if (*commentScanYYtext=='\n') yyLineNr++;
5149                                           addOutput('\n');
5150                                           inContext = OutputDoc;
5151                                           BEGIN( Comment );
5152                                         }
5153         YY_BREAK
5154 case 101:
5155 YY_RULE_SETUP
5156 #line 1511 "commentscan.l"
5157 { // ignore other stuff
5158                                         }
5159         YY_BREAK
5160 case 102:
5161 YY_RULE_SETUP
5162 #line 1514 "commentscan.l"
5163 { // third argument
5164                                           xrefListTitle = stripQuotes(commentScanYYtext);
5165                                           xrefKind = XRef_Item;
5166                                           BEGIN( Comment );
5167                                         }
5168         YY_BREAK
5169 case 103:
5170 /* rule 103 can match eol */
5171 YY_RULE_SETUP
5172 #line 1519 "commentscan.l"
5173 { // line continuation
5174                                           yyLineNr++; 
5175                                           addOutput('\n');
5176                                         }
5177         YY_BREAK
5178 case 104:
5179 /* rule 104 can match eol */
5180 YY_RULE_SETUP
5181 #line 1523 "commentscan.l"
5182 { // missing argument
5183                                           warn(yyFileName,yyLineNr,
5184                                               "warning: Missing third argument of \\xrefitem"
5185                                               );
5186                                           if (*commentScanYYtext=='\n') yyLineNr++;
5187                                           addOutput('\n');
5188                                           inContext = OutputDoc;
5189                                           BEGIN( Comment );
5190                                         }
5191         YY_BREAK
5192 case 105:
5193 YY_RULE_SETUP
5194 #line 1532 "commentscan.l"
5195 { // ignore other stuff
5196                                         }
5197         YY_BREAK
5198 /* ----- handle arguments of the relates(also)/memberof command ------- */
5199 case 106:
5200 YY_RULE_SETUP
5201 #line 1538 "commentscan.l"
5202 { // argument
5203                                           current->relates = commentScanYYtext;
5204                                           //if (current->mGrpId!=DOX_NOGROUP) 
5205                                           //{
5206                                           //  memberGroupRelates = commentScanYYtext;
5207                                           //}
5208                                           BEGIN( Comment );
5209                                         }
5210         YY_BREAK
5211 case 107:
5212 /* rule 107 can match eol */
5213 YY_RULE_SETUP
5214 #line 1546 "commentscan.l"
5215 { // line continuation
5216                                           yyLineNr++; 
5217                                           addOutput('\n');
5218                                         }
5219         YY_BREAK
5220 case 108:
5221 /* rule 108 can match eol */
5222 YY_RULE_SETUP
5223 #line 1550 "commentscan.l"
5224 { // missing argument
5225                                           warn(yyFileName,yyLineNr,
5226                                               "warning: Missing argument of \\relates or \\memberof command"
5227                                               );
5228                                           if (*commentScanYYtext=='\n') yyLineNr++;
5229                                           addOutput('\n');
5230                                           BEGIN( Comment );
5231                                         }
5232         YY_BREAK
5233 case 109:
5234 YY_RULE_SETUP
5235 #line 1558 "commentscan.l"
5236 { // ignore other stuff
5237                                         }
5238         YY_BREAK
5239 /* ----- handle arguments of the relates(also)/addindex commands ----- */
5240 case 110:
5241 /* rule 110 can match eol */
5242 YY_RULE_SETUP
5243 #line 1564 "commentscan.l"
5244 { // end of argument
5245                                           if (*commentScanYYtext=='\n') yyLineNr++;
5246                                           addOutput('\n');
5247                                           BEGIN( Comment );
5248                                         }
5249         YY_BREAK
5250 case 111:
5251 /* rule 111 can match eol */
5252 YY_RULE_SETUP
5253 #line 1569 "commentscan.l"
5254 { // line continuation
5255                                           yyLineNr++; 
5256                                           addOutput('\n');
5257                                         }
5258         YY_BREAK
5259 case 112:
5260 YY_RULE_SETUP
5261 #line 1573 "commentscan.l"
5262 { // ignore other stuff
5263                                           addOutput(*commentScanYYtext);
5264                                         }
5265         YY_BREAK
5266 /* ----- handle arguments of the section/subsection/.. commands ------- */
5267 case 113:
5268 YY_RULE_SETUP
5269 #line 1579 "commentscan.l"
5270 { // first argyment
5271                                           g_sectionLabel=commentScanYYtext;
5272                                           addOutput(commentScanYYtext);
5273                                           g_sectionTitle.resize(0);
5274                                           BEGIN(SectionTitle);
5275                                         }
5276         YY_BREAK
5277 case 114:
5278 /* rule 114 can match eol */
5279 YY_RULE_SETUP
5280 #line 1585 "commentscan.l"
5281 { // missing argument
5282                                           warn(yyFileName,yyLineNr,
5283                                               "warning: \\section command has no label"
5284                                               );
5285                                           if (*commentScanYYtext=='\n') yyLineNr++;
5286                                           addOutput('\n');
5287                                           BEGIN( Comment );
5288                                         }
5289         YY_BREAK
5290 case 115:
5291 YY_RULE_SETUP
5292 #line 1593 "commentscan.l"
5293 { // invalid character for section label
5294                                           warn(yyFileName,yyLineNr,
5295                                               "warning: Invalid or missing section label"
5296                                               );
5297                                           BEGIN(Comment);
5298                                         }
5299         YY_BREAK
5300 case 116:
5301 /* rule 116 can match eol */
5302 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5303 (yy_c_buf_p) = yy_cp -= 1;
5304 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5305 YY_RULE_SETUP
5306 #line 1599 "commentscan.l"
5307 { // end of section title
5308                                           addSection();
5309                                           addOutput(commentScanYYtext);
5310                                           BEGIN( Comment );
5311                                         }
5312         YY_BREAK
5313 case 117:
5314 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5315 (yy_c_buf_p) = yy_cp -= 8;
5316 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5317 YY_RULE_SETUP
5318 #line 1604 "commentscan.l"
5319 { // end of section title
5320                                           addSection();
5321                                           addOutput(commentScanYYtext);
5322                                           BEGIN( Comment );
5323                                         }
5324         YY_BREAK
5325 case 118:
5326 /* rule 118 can match eol */
5327 YY_RULE_SETUP
5328 #line 1609 "commentscan.l"
5329 { // line continuation
5330                                           yyLineNr++; 
5331                                           addOutput('\n');
5332                                         }
5333         YY_BREAK
5334 case 119:
5335 YY_RULE_SETUP
5336 #line 1613 "commentscan.l"
5337 { // any character without special meaning
5338                                           g_sectionTitle+=commentScanYYtext;
5339                                           addOutput(commentScanYYtext);
5340                                         }
5341         YY_BREAK
5342 case 120:
5343 YY_RULE_SETUP
5344 #line 1617 "commentscan.l"
5345 { // unescape escaped command
5346                                           g_sectionTitle+=&commentScanYYtext[1];
5347                                           addOutput(commentScanYYtext);
5348                                         }
5349         YY_BREAK
5350 case 121:
5351 YY_RULE_SETUP
5352 #line 1621 "commentscan.l"
5353 { // unescape escaped character
5354                                           g_sectionTitle+=commentScanYYtext[1];
5355                                           addOutput(commentScanYYtext);
5356                                         }
5357         YY_BREAK
5358 case 122:
5359 YY_RULE_SETUP
5360 #line 1625 "commentscan.l"
5361 { // anything else
5362                                           g_sectionTitle+=commentScanYYtext;
5363                                           addOutput(*commentScanYYtext);
5364                                         }
5365         YY_BREAK
5366 /* ----- handle arguments of the subpage command ------- */
5367 case 123:
5368 YY_RULE_SETUP
5369 #line 1632 "commentscan.l"
5370 { // first argument
5371                                           addOutput(commentScanYYtext);
5372                                           // we add subpage labels as a kind of "inheritance" relation to prevent
5373                                           // needing to add another list to the Entry class.
5374                                           current->extends->append(new BaseInfo(commentScanYYtext,Public,Normal));
5375                                           BEGIN(SubpageTitle);
5376                                         }
5377         YY_BREAK
5378 case 124:
5379 /* rule 124 can match eol */
5380 YY_RULE_SETUP
5381 #line 1639 "commentscan.l"
5382 { // missing argument
5383                                           warn(yyFileName,yyLineNr,
5384                                               "warning: \\subpage command has no label"
5385                                               );
5386                                           if (*commentScanYYtext=='\n') yyLineNr++;
5387                                           addOutput('\n');
5388                                           BEGIN( Comment );
5389                                         }
5390         YY_BREAK
5391 case 125:
5392 /* rule 125 can match eol */
5393 YY_RULE_SETUP
5394 #line 1647 "commentscan.l"
5395 { // no title, end command
5396                                           addOutput(commentScanYYtext);
5397                                           BEGIN( Comment );
5398                                         }
5399         YY_BREAK
5400 case 126:
5401 YY_RULE_SETUP
5402 #line 1651 "commentscan.l"
5403 { // add title, end of command
5404                                           addOutput(commentScanYYtext);
5405                                           BEGIN( Comment );
5406                                         }
5407         YY_BREAK
5408 case 127:
5409 YY_RULE_SETUP
5410 #line 1655 "commentscan.l"
5411 { // no title, end of command
5412                                           unput(*commentScanYYtext);
5413                                           BEGIN( Comment );
5414                                         }
5415         YY_BREAK
5416 /* ----- handle arguments of the anchor command ------- */
5417 case 128:
5418 YY_RULE_SETUP
5419 #line 1662 "commentscan.l"
5420 { // found argument
5421                                           SectionInfo  *si = new SectionInfo(yyFileName,commentScanYYtext,0,SectionInfo::Anchor,0);
5422                                           Doxygen::sectionDict.append(commentScanYYtext,si);
5423                                           current->anchors->append(si);
5424                                           addOutput(commentScanYYtext);
5425                                           BEGIN( Comment );
5426                                         }
5427         YY_BREAK
5428 case 129:
5429 /* rule 129 can match eol */
5430 YY_RULE_SETUP
5431 #line 1669 "commentscan.l"
5432 { // missing argument
5433                                           warn(yyFileName,yyLineNr,
5434                                               "warning: \\anchor command has no label"
5435                                               );
5436                                           if (*commentScanYYtext=='\n') yyLineNr++;
5437                                           addOutput('\n');
5438                                           BEGIN( Comment );
5439                                         }
5440         YY_BREAK
5441 case 130:
5442 YY_RULE_SETUP
5443 #line 1677 "commentscan.l"
5444 { // invalid character for anchor label
5445                                           warn(yyFileName,yyLineNr,
5446                                               "warning: Invalid or missing anchor label"
5447                                               );
5448                                           BEGIN(Comment);
5449                                         }
5450         YY_BREAK
5451 /* ----- handle arguments of the preformatted block commands ------- */
5452 case 131:
5453 /* rule 131 can match eol */
5454 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5455 (yy_c_buf_p) = yy_cp -= 1;
5456 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5457 YY_RULE_SETUP
5458 #line 1687 "commentscan.l"
5459 { // possible ends
5460                                           addOutput(commentScanYYtext);
5461                                           if (&commentScanYYtext[4]==blockName) // found end of the block
5462                                           {
5463                                             BEGIN(Comment);
5464                                           }
5465                                         }
5466         YY_BREAK
5467 case 132:
5468 YY_RULE_SETUP
5469 #line 1694 "commentscan.l"
5470 { // some word
5471                                           addOutput(commentScanYYtext);
5472                                         }
5473         YY_BREAK
5474 case 133:
5475 /* rule 133 can match eol */
5476 YY_RULE_SETUP
5477 #line 1697 "commentscan.l"
5478 { // new line
5479                                           if (*commentScanYYtext=='\n') yyLineNr++;
5480                                           addOutput('\n');
5481                                         }
5482         YY_BREAK
5483 case 134:
5484 YY_RULE_SETUP
5485 #line 1701 "commentscan.l"
5486 { // start of a C-comment
5487                                           g_commentCount++;
5488                                           addOutput(commentScanYYtext);
5489                                         }
5490         YY_BREAK
5491 case 135:
5492 YY_RULE_SETUP
5493 #line 1705 "commentscan.l"
5494 { // end of a C-comment
5495                                           addOutput(commentScanYYtext);
5496                                           g_commentCount--;
5497                                           if (g_commentCount<0 && blockName!="verbatim")
5498                                           {
5499                                             warn(yyFileName,yyLineNr,
5500                                                  "warning: found */ without matching /* while inside a \\%s block! Perhaps a missing \\end%s?\n",blockName.data(),blockName.data());
5501                                           }
5502                                         }
5503         YY_BREAK
5504 case 136:
5505 YY_RULE_SETUP
5506 #line 1714 "commentscan.l"
5507 {
5508                                           addOutput(*commentScanYYtext);
5509                                         }
5510         YY_BREAK
5511 case YY_STATE_EOF(FormatBlock):
5512 #line 1717 "commentscan.l"
5513 {
5514                                           warn(yyFileName,yyLineNr,
5515                                             "warning: reached end of comment while inside a @%s block; check for missing @end%s tag!",
5516                                             blockName.data(),blockName.data()
5517                                           );                            
5518                                           yyterminate();
5519                                         }
5520         YY_BREAK
5521 /* ----- handle arguments of if/ifnot commands ------- */
5522 case 137:
5523 YY_RULE_SETUP
5524 #line 1727 "commentscan.l"
5525 { // parameter of if/ifnot guard
5526                                           bool sectionEnabled = Config_getList("ENABLED_SECTIONS").find(commentScanYYtext)!=-1;
5527                                           bool parentEnabled = TRUE;
5528                                           if (!guards.isEmpty()) parentEnabled = guards.top()->isEnabled();
5529                                           if (parentEnabled)
5530                                           {
5531                                             if (
5532                                                 (sectionEnabled && guardType==Guard_If) ||  
5533                                                 (!sectionEnabled && guardType==Guard_IfNot)
5534                                                ) // section is visible
5535                                             {
5536                                               guards.push(new GuardedSection(TRUE,TRUE));
5537                                               enabledSectionFound=TRUE;
5538                                               BEGIN( GuardParamEnd );
5539                                             }
5540                                             else // section is invisible
5541                                             {
5542                                               if (guardType!=Guard_Skip)
5543                                               {
5544                                                 guards.push(new GuardedSection(FALSE,TRUE));
5545                                               }
5546                                               BEGIN( SkipGuardedSection );
5547                                             }
5548                                           }
5549                                           else // invisible because of parent
5550                                           {
5551                                             guards.push(new GuardedSection(FALSE,FALSE));
5552                                             BEGIN( SkipGuardedSection );
5553                                           }
5554                                         }
5555         YY_BREAK
5556 case 138:
5557 /* rule 138 can match eol */
5558 YY_RULE_SETUP
5559 #line 1757 "commentscan.l"
5560 { // end of argument
5561                                           if (*commentScanYYtext=='\n') yyLineNr++;
5562                                           //next line is commented out due to bug620924
5563                                           //addOutput('\n');
5564                                           BEGIN( Comment );
5565                                         }
5566         YY_BREAK
5567 case 139:
5568 /* rule 139 can match eol */
5569 YY_RULE_SETUP
5570 #line 1763 "commentscan.l"
5571 { // line continuation
5572                                           yyLineNr++; 
5573                                           addOutput('\n');
5574                                         }
5575         YY_BREAK
5576 case 140:
5577 YY_RULE_SETUP
5578 #line 1767 "commentscan.l"
5579 { // ignore other stuff
5580                                           addOutput(*commentScanYYtext);
5581                                         }
5582         YY_BREAK
5583 case 141:
5584 /* rule 141 can match eol */
5585 YY_RULE_SETUP
5586 #line 1770 "commentscan.l"
5587 {
5588                                           g_spaceBeforeIf=FALSE;
5589                                           BEGIN(Comment);
5590                                         }
5591         YY_BREAK
5592 case 142:
5593 YY_RULE_SETUP
5594 #line 1774 "commentscan.l"
5595 {
5596                                           if (g_spaceBeforeIf) // needed for 665313 in combation with bug620924
5597                                           {
5598                                             addOutput(" ");
5599                                           }
5600                                           g_spaceBeforeIf=FALSE;
5601                                           BEGIN(Comment);
5602                                         }
5603         YY_BREAK
5604 case 143:
5605 YY_RULE_SETUP
5606 #line 1782 "commentscan.l"
5607 {
5608                                           unput(*commentScanYYtext);
5609                                           BEGIN(Comment);
5610                                         }
5611         YY_BREAK
5612 /* ----- handle skipping of conditional sections ------- */
5613 case 144:
5614 /* rule 144 can match eol */
5615 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5616 (yy_c_buf_p) = yy_cp -= 1;
5617 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5618 YY_RULE_SETUP
5619 #line 1789 "commentscan.l"
5620 {
5621                                           guardType = Guard_IfNot;
5622                                           BEGIN( GuardParam );
5623                                         }
5624         YY_BREAK
5625 case 145:
5626 /* rule 145 can match eol */
5627 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5628 (yy_c_buf_p) = yy_cp -= 1;
5629 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5630 YY_RULE_SETUP
5631 #line 1793 "commentscan.l"
5632 {
5633                                           guardType = Guard_If;
5634                                           BEGIN( GuardParam );
5635                                         }
5636         YY_BREAK
5637 case 146:
5638 /* rule 146 can match eol */
5639 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5640 (yy_c_buf_p) = yy_cp -= 1;
5641 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5642 YY_RULE_SETUP
5643 #line 1797 "commentscan.l"
5644 {
5645                                           if (guards.isEmpty())
5646                                           {
5647                                             warn(yyFileName,yyLineNr,
5648                                                 "warning: found @endif without matching start command");
5649                                           }
5650                                           else
5651                                           {
5652                                             delete guards.pop();
5653                                             BEGIN( GuardParamEnd );
5654                                           }
5655                                         }
5656         YY_BREAK
5657 case 147:
5658 /* rule 147 can match eol */
5659 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5660 (yy_c_buf_p) = yy_cp -= 1;
5661 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5662 YY_RULE_SETUP
5663 #line 1809 "commentscan.l"
5664 {
5665                                           if (guards.isEmpty())
5666                                           {
5667                                             warn(yyFileName,yyLineNr,
5668                                                 "warning: found @else without matching start command");
5669                                           }
5670                                           else
5671                                           {
5672                                             if (!enabledSectionFound && guards.top()->parentVisible())
5673                                             {
5674                                               delete guards.pop();
5675                                               guards.push(new GuardedSection(TRUE,TRUE));
5676                                               enabledSectionFound=TRUE;
5677                                               BEGIN( GuardParamEnd );
5678                                             }
5679                                           }
5680                                         }
5681         YY_BREAK
5682 case 148:
5683 /* rule 148 can match eol */
5684 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5685 (yy_c_buf_p) = yy_cp -= 1;
5686 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5687 YY_RULE_SETUP
5688 #line 1826 "commentscan.l"
5689 {
5690                                           if (guards.isEmpty())
5691                                           {
5692                                             warn(yyFileName,yyLineNr,
5693                                                 "warning: found @elseif without matching start command");
5694                                           }
5695                                           else
5696                                           {
5697                                             if (!enabledSectionFound && guards.top()->parentVisible())
5698                                             {
5699                                               delete guards.pop();
5700                                               BEGIN( GuardParam );
5701                                             }
5702                                           }
5703                                         }
5704         YY_BREAK
5705 case 149:
5706 /* rule 149 can match eol */
5707 YY_RULE_SETUP
5708 #line 1841 "commentscan.l"
5709 { // skip line
5710                                           if (*commentScanYYtext=='\n') yyLineNr++;
5711                                           //addOutput('\n');
5712                                         }
5713         YY_BREAK
5714 case 150:
5715 YY_RULE_SETUP
5716 #line 1845 "commentscan.l"
5717 { // skip non-special characters
5718                                         }
5719         YY_BREAK
5720 case 151:
5721 YY_RULE_SETUP
5722 #line 1847 "commentscan.l"
5723 { // any other character
5724                                         }
5725         YY_BREAK
5726 /* ----- handle skipping of internal section ------- */
5727 case 152:
5728 /* rule 152 can match eol */
5729 YY_RULE_SETUP
5730 #line 1853 "commentscan.l"
5731 { // skip line
5732                                           if (*commentScanYYtext=='\n') yyLineNr++;
5733                                           addOutput('\n');
5734                                         }
5735         YY_BREAK
5736 case 153:
5737 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5738 (yy_c_buf_p) = yy_cp = yy_bp + 3;
5739 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5740 YY_RULE_SETUP
5741 #line 1857 "commentscan.l"
5742 {
5743                                           g_condCount++;
5744                                         }
5745         YY_BREAK
5746 case 154:
5747 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5748 (yy_c_buf_p) = yy_cp = yy_bp + 6;
5749 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5750 YY_RULE_SETUP
5751 #line 1860 "commentscan.l"
5752 {
5753                                           g_condCount++;
5754                                         }
5755         YY_BREAK
5756 case 155:
5757 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5758 (yy_c_buf_p) = yy_cp = yy_bp + 1;
5759 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5760 YY_RULE_SETUP
5761 #line 1863 "commentscan.l"
5762 {
5763                                           g_condCount--;
5764                                           if (g_condCount<0) // handle conditional section around of \internal, see bug607743  
5765                                           {
5766                                             unput('\\');
5767                                             BEGIN(Comment);
5768                                           }
5769                                         }
5770         YY_BREAK
5771 case 156:
5772 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5773 (yy_c_buf_p) = yy_cp = yy_bp + 1;
5774 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5775 YY_RULE_SETUP
5776 #line 1871 "commentscan.l"
5777 {
5778                                           if (g_sectionLevel>0)
5779                                           {
5780                                             unput('\\');
5781                                             BEGIN(Comment);
5782                                           }
5783                                         }
5784         YY_BREAK
5785 case 157:
5786 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5787 (yy_c_buf_p) = yy_cp = yy_bp + 1;
5788 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5789 YY_RULE_SETUP
5790 #line 1878 "commentscan.l"
5791 {
5792                                           if (g_sectionLevel>1)
5793                                           {
5794                                             unput('\\');
5795                                             BEGIN(Comment);
5796                                           }
5797                                         }
5798         YY_BREAK
5799 case 158:
5800 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5801 (yy_c_buf_p) = yy_cp = yy_bp + 1;
5802 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5803 YY_RULE_SETUP
5804 #line 1885 "commentscan.l"
5805 {
5806                                           if (g_sectionLevel>2)
5807                                           {
5808                                             unput('\\');
5809                                             BEGIN(Comment);
5810                                           }
5811                                         }
5812         YY_BREAK
5813 case 159:
5814 *yy_cp = (yy_hold_char); /* undo effects of setting up commentScanYYtext */
5815 (yy_c_buf_p) = yy_cp = yy_bp + 1;
5816 YY_DO_BEFORE_ACTION; /* set up commentScanYYtext again */
5817 YY_RULE_SETUP
5818 #line 1892 "commentscan.l"
5819 {
5820                                           if (g_sectionLevel>3)
5821                                           {
5822                                             unput('\\');
5823                                             BEGIN(Comment);
5824                                           }
5825                                         }
5826         YY_BREAK
5827 case 160:
5828 YY_RULE_SETUP
5829 #line 1899 "commentscan.l"
5830 {
5831                                           BEGIN(Comment);
5832                                         }
5833         YY_BREAK
5834 case 161:
5835 YY_RULE_SETUP
5836 #line 1902 "commentscan.l"
5837 { // skip non-special characters
5838                                         }
5839         YY_BREAK
5840 case 162:
5841 YY_RULE_SETUP
5842 #line 1904 "commentscan.l"
5843 { // any other character
5844                                         }
5845         YY_BREAK
5846 /* ----- handle argument of name command ------- */
5847 case 163:
5848 /* rule 163 can match eol */
5849 YY_RULE_SETUP
5850 #line 1910 "commentscan.l"
5851 { // end of argument
5852                                           if (*commentScanYYtext=='\n') yyLineNr++;
5853                                           addOutput('\n');
5854                                           BEGIN( Comment );
5855                                         }
5856         YY_BREAK
5857 case 164:
5858 /* rule 164 can match eol */
5859 YY_RULE_SETUP
5860 #line 1915 "commentscan.l"
5861 { // line continuation
5862                                           yyLineNr++; 
5863                                           addOutput('\n');
5864                                           g_memberGroupHeader+=' ';
5865                                         }
5866         YY_BREAK
5867 case 165:
5868 YY_RULE_SETUP
5869 #line 1920 "commentscan.l"
5870 { // ignore other stuff
5871                                           g_memberGroupHeader+=*commentScanYYtext;
5872                                           current->name+=*commentScanYYtext;
5873                                         }
5874         YY_BREAK
5875 /* ----- handle argument of ingroup command ------- */
5876 case 166:
5877 YY_RULE_SETUP
5878 #line 1927 "commentscan.l"
5879 { // group id
5880                                           current->groups->append(
5881                                             new Grouping(commentScanYYtext, Grouping::GROUPING_INGROUP)
5882                                           );
5883                                           inGroupParamFound=TRUE;
5884                                         }
5885         YY_BREAK
5886 case 167:
5887 /* rule 167 can match eol */
5888 YY_RULE_SETUP
5889 #line 1933 "commentscan.l"
5890 { // missing argument
5891                                           if (!inGroupParamFound)
5892                                           {
5893                                             warn(yyFileName,yyLineNr,
5894                                                 "warning: Missing group name for \\ingroup command"
5895                                                 );
5896                                           }
5897                                           if (*commentScanYYtext=='\n') yyLineNr++;
5898                                           addOutput('\n');
5899                                           BEGIN( Comment );
5900                                         }
5901         YY_BREAK
5902 case 168:
5903 /* rule 168 can match eol */
5904 YY_RULE_SETUP
5905 #line 1944 "commentscan.l"
5906 { // line continuation
5907                                           yyLineNr++; 
5908                                           addOutput('\n');
5909                                         }
5910         YY_BREAK
5911 case 169:
5912 YY_RULE_SETUP
5913 #line 1948 "commentscan.l"
5914 { // ignore other stuff
5915                                           addOutput(*commentScanYYtext);
5916                                         }
5917         YY_BREAK
5918 /* ----- handle argument of fn command ------- */
5919 case 170:
5920 /* rule 170 can match eol */
5921 YY_RULE_SETUP
5922 #line 1954 "commentscan.l"
5923 { // end of argument
5924                                           if (braceCount==0)
5925                                           {
5926                                             if (*commentScanYYtext=='\n') yyLineNr++;
5927                                             addOutput('\n');
5928                                             langParser->parsePrototype(functionProto);
5929                                             BEGIN( Comment );
5930                                           }
5931                                         }
5932         YY_BREAK
5933 case 171:
5934 /* rule 171 can match eol */
5935 YY_RULE_SETUP
5936 #line 1963 "commentscan.l"
5937 { // line continuation
5938                                           yyLineNr++; 
5939                                           functionProto+=' ';
5940                                         }
5941         YY_BREAK
5942 case 172:
5943 YY_RULE_SETUP
5944 #line 1967 "commentscan.l"
5945 { // non-special characters
5946                                           functionProto+=commentScanYYtext;
5947                                         }
5948         YY_BREAK
5949 case 173:
5950 YY_RULE_SETUP
5951 #line 1970 "commentscan.l"
5952 {
5953                                           functionProto+=commentScanYYtext;
5954                                           braceCount++;
5955                                         }
5956         YY_BREAK
5957 case 174:
5958 YY_RULE_SETUP
5959 #line 1974 "commentscan.l"
5960 {
5961                                           functionProto+=commentScanYYtext;
5962                                           braceCount--;
5963                                         }
5964         YY_BREAK
5965 case 175:
5966 YY_RULE_SETUP
5967 #line 1978 "commentscan.l"
5968 { // add other stuff
5969                                           functionProto+=*commentScanYYtext;
5970                                         }
5971         YY_BREAK
5972 /* ----- handle argument of overload command ------- */
5973 case 176:
5974 /* rule 176 can match eol */
5975 YY_RULE_SETUP
5976 #line 1986 "commentscan.l"
5977 { // end of argument
5978                                           if (*commentScanYYtext=='\n') yyLineNr++;
5979                                           addOutput('\n');
5980                                           if (functionProto.stripWhiteSpace().isEmpty())
5981                                           { // plain overload command
5982                                             addOutput(getOverloadDocs());
5983                                           }
5984                                           else // overload declaration
5985                                           {
5986                                             makeStructuralIndicator(Entry::OVERLOADDOC_SEC);
5987                                             langParser->parsePrototype(functionProto);
5988                                           }
5989                                           BEGIN( Comment );
5990                                         }
5991         YY_BREAK
5992 case 177:
5993 /* rule 177 can match eol */
5994 YY_RULE_SETUP
5995 #line 2000 "commentscan.l"
5996 { // line continuation
5997                                           yyLineNr++; 
5998                                           functionProto+=' ';
5999                                         }
6000         YY_BREAK
6001 case 178:
6002 YY_RULE_SETUP
6003 #line 2004 "commentscan.l"
6004 { // add other stuff
6005                                           functionProto+=*commentScanYYtext;
6006                                         }
6007         YY_BREAK
6008 /* ----- handle argument of inherit command ------- */
6009 case 179:
6010 YY_RULE_SETUP
6011 #line 2010 "commentscan.l"
6012 { // found argument
6013                                           current->extends->append(
6014                                             new BaseInfo(removeRedundantWhiteSpace(commentScanYYtext),Public,Normal)
6015                                           );
6016                                           BEGIN( Comment );
6017                                         }
6018         YY_BREAK
6019 case 180:
6020 /* rule 180 can match eol */
6021 YY_RULE_SETUP
6022 #line 2016 "commentscan.l"
6023 { // missing argument
6024                                           warn(yyFileName,yyLineNr,
6025                                               "warning: \\inherit command has no argument"
6026                                               );
6027                                           if (*commentScanYYtext=='\n') yyLineNr++;
6028                                           addOutput('\n');
6029                                           BEGIN( Comment );
6030                                         }
6031         YY_BREAK
6032 case 181:
6033 YY_RULE_SETUP
6034 #line 2024 "commentscan.l"
6035 { // invalid character for anchor label
6036                                           warn(yyFileName,yyLineNr,
6037                                               "warning: Invalid or missing name for \\inherit command"
6038                                               );
6039                                           BEGIN(Comment);
6040                                         }
6041         YY_BREAK
6042 /* ----- handle argument of extends and implements commands ------- */
6043 case 182:
6044 YY_RULE_SETUP
6045 #line 2033 "commentscan.l"
6046 { // found argument
6047                                           current->extends->append(
6048                                             new BaseInfo(removeRedundantWhiteSpace(commentScanYYtext),Public,Normal)
6049                                           );
6050                                           BEGIN( Comment );
6051                                         }
6052         YY_BREAK
6053 case 183:
6054 /* rule 183 can match eol */
6055 YY_RULE_SETUP
6056 #line 2039 "commentscan.l"
6057 { // missing argument
6058                                           warn(yyFileName,yyLineNr,
6059                                               "warning: \\extends or \\implements command has no argument"
6060                                               );
6061                                           if (*commentScanYYtext=='\n') yyLineNr++;
6062                                           addOutput('\n');
6063                                           BEGIN( Comment );
6064                                         }
6065         YY_BREAK
6066 case 184:
6067 YY_RULE_SETUP
6068 #line 2047 "commentscan.l"
6069 { // ignore other stuff
6070                                         }
6071         YY_BREAK
6072 /* ----- handle language specific sections ------- */
6073 case 185:
6074 YY_RULE_SETUP
6075 #line 2052 "commentscan.l"
6076 { /* language switch */
6077                                      QCString langId = &commentScanYYtext[2];
6078                                      if (langId.isEmpty() ||
6079                                          stricmp(Config_getEnum("OUTPUT_LANGUAGE"),langId)==0)
6080                                      { // enable language specific section
6081                                        BEGIN(Comment);
6082                                      }
6083                                    }
6084         YY_BREAK
6085 case 186:
6086 YY_RULE_SETUP
6087 #line 2060 "commentscan.l"
6088 { /* any character not a *, @, backslash or new line */
6089                                    }
6090         YY_BREAK
6091 case 187:
6092 /* rule 187 can match eol */
6093 YY_RULE_SETUP
6094 #line 2062 "commentscan.l"
6095 { /* new line in verbatim block */
6096                                      if (*commentScanYYtext=='\n') yyLineNr++;
6097                                    }
6098         YY_BREAK
6099 case 188:
6100 YY_RULE_SETUP
6101 #line 2065 "commentscan.l"
6102 { /* any other character */
6103                                    }
6104         YY_BREAK
6105 /* ----- handle arguments of the cite command ------- */
6106 case 189:
6107 YY_RULE_SETUP
6108 #line 2070 "commentscan.l"
6109 { // found argyment
6110                                           addCite();
6111                                           addOutput(commentScanYYtext);
6112                                           BEGIN(Comment);
6113                                         }
6114         YY_BREAK
6115 case 190:
6116 /* rule 190 can match eol */
6117 YY_RULE_SETUP
6118 #line 2075 "commentscan.l"
6119 { // missing argument
6120                                           warn(yyFileName,yyLineNr,
6121                                               "warning: \\cite command has no label"
6122                                               );
6123                                           if (*commentScanYYtext=='\n') yyLineNr++;
6124                                           addOutput('\n');
6125                                           BEGIN( Comment );
6126                                         }
6127         YY_BREAK
6128 case 191:
6129 YY_RULE_SETUP
6130 #line 2083 "commentscan.l"
6131 { // invalid character for cite label
6132                                           warn(yyFileName,yyLineNr,
6133                                               "warning: Invalid or missing cite label"
6134                                               );
6135                                           BEGIN(Comment);
6136                                         }
6137         YY_BREAK
6138 /* ----- handle argument of the copydoc command ------- */
6139 case YY_STATE_EOF(CopyDoc):
6140 #line 2092 "commentscan.l"
6141 case 192:
6142 /* rule 192 can match eol */
6143 YY_RULE_SETUP
6144 #line 2093 "commentscan.l"
6145 {
6146                                           if (*commentScanYYtext=='\n') yyLineNr++;
6147                                           addOutput('\n');
6148                                           setOutput(OutputDoc);
6149                                           addOutput("\\copydetails ");
6150                                           addOutput(g_copyDocArg);
6151                                           addOutput("\n");
6152                                           BEGIN(Comment);
6153                                         }
6154         YY_BREAK
6155 case 193:
6156 YY_RULE_SETUP
6157 #line 2102 "commentscan.l"
6158 {
6159                                           g_copyDocArg+=commentScanYYtext;
6160                                           addOutput(commentScanYYtext);
6161                                         }
6162         YY_BREAK
6163 case 194:
6164 YY_RULE_SETUP
6165 #line 2106 "commentscan.l"
6166 {
6167                                           g_copyDocArg+=commentScanYYtext;
6168                                           addOutput(commentScanYYtext);
6169                                         }
6170         YY_BREAK
6171 case 195:
6172 YY_RULE_SETUP
6173 #line 2112 "commentscan.l"
6174 ECHO;
6175         YY_BREAK
6176 #line 6177 "<stdout>"
6177                         case YY_STATE_EOF(INITIAL):
6178                         case YY_STATE_EOF(Comment):
6179                         case YY_STATE_EOF(PageDocArg1):
6180                         case YY_STATE_EOF(PageDocArg2):
6181                         case YY_STATE_EOF(RelatesParam1):
6182                         case YY_STATE_EOF(ClassDocArg1):
6183                         case YY_STATE_EOF(ClassDocArg2):
6184                         case YY_STATE_EOF(ClassDocArg3):
6185                         case YY_STATE_EOF(CategoryDocArg1):
6186                         case YY_STATE_EOF(XRefItemParam1):
6187                         case YY_STATE_EOF(XRefItemParam2):
6188                         case YY_STATE_EOF(XRefItemParam3):
6189                         case YY_STATE_EOF(FileDocArg1):
6190                         case YY_STATE_EOF(EnumDocArg1):
6191                         case YY_STATE_EOF(NameSpaceDocArg1):
6192                         case YY_STATE_EOF(PackageDocArg1):
6193                         case YY_STATE_EOF(GroupDocArg1):
6194                         case YY_STATE_EOF(GroupDocArg2):
6195                         case YY_STATE_EOF(SectionLabel):
6196                         case YY_STATE_EOF(SectionTitle):
6197                         case YY_STATE_EOF(SubpageLabel):
6198                         case YY_STATE_EOF(SubpageTitle):
6199                         case YY_STATE_EOF(LineParam):
6200                         case YY_STATE_EOF(GuardParam):
6201                         case YY_STATE_EOF(GuardParamEnd):
6202                         case YY_STATE_EOF(SkipGuardedSection):
6203                         case YY_STATE_EOF(SkipInternal):
6204                         case YY_STATE_EOF(NameParam):
6205                         case YY_STATE_EOF(InGroupParam):
6206                         case YY_STATE_EOF(FnParam):
6207                         case YY_STATE_EOF(OverloadParam):
6208                         case YY_STATE_EOF(InheritParam):
6209                         case YY_STATE_EOF(ExtendsParam):
6210                         case YY_STATE_EOF(ReadFormulaShort):
6211                         case YY_STATE_EOF(ReadFormulaLong):
6212                         case YY_STATE_EOF(AnchorLabel):
6213                         case YY_STATE_EOF(HtmlComment):
6214                         case YY_STATE_EOF(SkipLang):
6215                         case YY_STATE_EOF(CiteLabel):
6216                                 yyterminate();
6217
6218         case YY_END_OF_BUFFER:
6219                 {
6220                 /* Amount of text matched not including the EOB char. */
6221                 int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
6222
6223                 /* Undo the effects of YY_DO_BEFORE_ACTION. */
6224                 *yy_cp = (yy_hold_char);
6225                 YY_RESTORE_YY_MORE_OFFSET
6226
6227                 if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
6228                         {
6229                         /* We're scanning a new file or input source.  It's
6230                          * possible that this happened because the user
6231                          * just pointed commentScanYYin at a new source and called
6232                          * commentScanYYlex().  If so, then we have to assure
6233                          * consistency between YY_CURRENT_BUFFER and our
6234                          * globals.  Here is the right place to do so, because
6235                          * this is the first action (other than possibly a
6236                          * back-up) that will match for the new input source.
6237                          */
6238                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
6239                         YY_CURRENT_BUFFER_LVALUE->yy_input_file = commentScanYYin;
6240                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
6241                         }
6242
6243                 /* Note that here we test for yy_c_buf_p "<=" to the position
6244                  * of the first EOB in the buffer, since yy_c_buf_p will
6245                  * already have been incremented past the NUL character
6246                  * (since all states make transitions on EOB to the
6247                  * end-of-buffer state).  Contrast this with the test
6248                  * in input().
6249                  */
6250                 if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
6251                         { /* This was really a NUL. */
6252                         yy_state_type yy_next_state;
6253
6254                         (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
6255
6256                         yy_current_state = yy_get_previous_state(  );
6257
6258                         /* Okay, we're now positioned to make the NUL
6259                          * transition.  We couldn't have
6260                          * yy_get_previous_state() go ahead and do it
6261                          * for us because it doesn't know how to deal
6262                          * with the possibility of jamming (and we don't
6263                          * want to build jamming into it because then it
6264                          * will run more slowly).
6265                          */
6266
6267                         yy_next_state = yy_try_NUL_trans( yy_current_state );
6268
6269                         yy_bp = (yytext_ptr) + YY_MORE_ADJ;
6270
6271                         if ( yy_next_state )
6272                                 {
6273                                 /* Consume the NUL. */
6274                                 yy_cp = ++(yy_c_buf_p);
6275                                 yy_current_state = yy_next_state;
6276                                 goto yy_match;
6277                                 }
6278
6279                         else
6280                                 {
6281                                 yy_cp = (yy_c_buf_p);
6282                                 goto yy_find_action;
6283                                 }
6284                         }
6285
6286                 else switch ( yy_get_next_buffer(  ) )
6287                         {
6288                         case EOB_ACT_END_OF_FILE:
6289                                 {
6290                                 (yy_did_buffer_switch_on_eof) = 0;
6291
6292                                 if ( commentScanYYwrap( ) )
6293                                         {
6294                                         /* Note: because we've taken care in
6295                                          * yy_get_next_buffer() to have set up
6296                                          * commentScanYYtext, we can now set up
6297                                          * yy_c_buf_p so that if some total
6298                                          * hoser (like flex itself) wants to
6299                                          * call the scanner after we return the
6300                                          * YY_NULL, it'll still work - another
6301                                          * YY_NULL will get returned.
6302                                          */
6303                                         (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
6304
6305                                         yy_act = YY_STATE_EOF(YY_START);
6306                                         goto do_action;
6307                                         }
6308
6309                                 else
6310                                         {
6311                                         if ( ! (yy_did_buffer_switch_on_eof) )
6312                                                 YY_NEW_FILE;
6313                                         }
6314                                 break;
6315                                 }
6316
6317                         case EOB_ACT_CONTINUE_SCAN:
6318                                 (yy_c_buf_p) =
6319                                         (yytext_ptr) + yy_amount_of_matched_text;
6320
6321                                 yy_current_state = yy_get_previous_state(  );
6322
6323                                 yy_cp = (yy_c_buf_p);
6324                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
6325                                 goto yy_match;
6326
6327                         case EOB_ACT_LAST_MATCH:
6328                                 (yy_c_buf_p) =
6329                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
6330
6331                                 yy_current_state = yy_get_previous_state(  );
6332
6333                                 yy_cp = (yy_c_buf_p);
6334                                 yy_bp = (yytext_ptr) + YY_MORE_ADJ;
6335                                 goto yy_find_action;
6336                         }
6337                 break;
6338                 }
6339
6340         default:
6341                 YY_FATAL_ERROR(
6342                         "fatal flex scanner internal error--no action found" );
6343         } /* end of action switch */
6344                 } /* end of scanning one token */
6345 } /* end of commentScanYYlex */
6346
6347 /* yy_get_next_buffer - try to read in a new buffer
6348  *
6349  * Returns a code representing an action:
6350  *      EOB_ACT_LAST_MATCH -
6351  *      EOB_ACT_CONTINUE_SCAN - continue scanning from current position
6352  *      EOB_ACT_END_OF_FILE - end of file
6353  */
6354 static int yy_get_next_buffer (void)
6355 {
6356         register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
6357         register char *source = (yytext_ptr);
6358         register int number_to_move, i;
6359         int ret_val;
6360
6361         if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
6362                 YY_FATAL_ERROR(
6363                 "fatal flex scanner internal error--end of buffer missed" );
6364
6365         if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
6366                 { /* Don't try to fill the buffer, so this is an EOF. */
6367                 if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
6368                         {
6369                         /* We matched a single character, the EOB, so
6370                          * treat this as a final EOF.
6371                          */
6372                         return EOB_ACT_END_OF_FILE;
6373                         }
6374
6375                 else
6376                         {
6377                         /* We matched some text prior to the EOB, first
6378                          * process it.
6379                          */
6380                         return EOB_ACT_LAST_MATCH;
6381                         }
6382                 }
6383
6384         /* Try to read more data. */
6385
6386         /* First move last chars to start of buffer. */
6387         number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
6388
6389         for ( i = 0; i < number_to_move; ++i )
6390                 *(dest++) = *(source++);
6391
6392         if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
6393                 /* don't do the read, it's not guaranteed to return an EOF,
6394                  * just force an EOF
6395                  */
6396                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
6397
6398         else
6399                 {
6400                         yy_size_t num_to_read =
6401                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
6402
6403                 while ( num_to_read <= 0 )
6404                         { /* Not enough room in the buffer - grow it. */
6405
6406                         YY_FATAL_ERROR(
6407 "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
6408
6409                         }
6410
6411                 if ( num_to_read > YY_READ_BUF_SIZE )
6412                         num_to_read = YY_READ_BUF_SIZE;
6413
6414                 /* Read in more data. */
6415                 YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
6416                         (yy_n_chars), num_to_read );
6417
6418                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
6419                 }
6420
6421         if ( (yy_n_chars) == 0 )
6422                 {
6423                 if ( number_to_move == YY_MORE_ADJ )
6424                         {
6425                         ret_val = EOB_ACT_END_OF_FILE;
6426                         commentScanYYrestart(commentScanYYin  );
6427                         }
6428
6429                 else
6430                         {
6431                         ret_val = EOB_ACT_LAST_MATCH;
6432                         YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
6433                                 YY_BUFFER_EOF_PENDING;
6434                         }
6435                 }
6436
6437         else
6438                 ret_val = EOB_ACT_CONTINUE_SCAN;
6439
6440         if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
6441                 /* Extend the array by 50%, plus the number we really need. */
6442                 yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
6443                 YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) commentScanYYrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
6444                 if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
6445                         YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
6446         }
6447
6448         (yy_n_chars) += number_to_move;
6449         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
6450         YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
6451
6452         (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
6453
6454         return ret_val;
6455 }
6456
6457 /* yy_get_previous_state - get the state just before the EOB char was reached */
6458
6459     static yy_state_type yy_get_previous_state (void)
6460 {
6461         register yy_state_type yy_current_state;
6462         register char *yy_cp;
6463     
6464         yy_current_state = (yy_start);
6465         yy_current_state += YY_AT_BOL();
6466
6467         (yy_state_ptr) = (yy_state_buf);
6468         *(yy_state_ptr)++ = yy_current_state;
6469
6470         for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
6471                 {
6472                 register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
6473                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
6474                         {
6475                         yy_current_state = (int) yy_def[yy_current_state];
6476                         if ( yy_current_state >= 1137 )
6477                                 yy_c = yy_meta[(unsigned int) yy_c];
6478                         }
6479                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
6480                 *(yy_state_ptr)++ = yy_current_state;
6481                 }
6482
6483         return yy_current_state;
6484 }
6485
6486 /* yy_try_NUL_trans - try to make a transition on the NUL character
6487  *
6488  * synopsis
6489  *      next_state = yy_try_NUL_trans( current_state );
6490  */
6491     static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
6492 {
6493         register int yy_is_jam;
6494     
6495         register YY_CHAR yy_c = 1;
6496         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
6497                 {
6498                 yy_current_state = (int) yy_def[yy_current_state];
6499                 if ( yy_current_state >= 1137 )
6500                         yy_c = yy_meta[(unsigned int) yy_c];
6501                 }
6502         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
6503         yy_is_jam = (yy_current_state == 1136);
6504         if ( ! yy_is_jam )
6505                 *(yy_state_ptr)++ = yy_current_state;
6506
6507         return yy_is_jam ? 0 : yy_current_state;
6508 }
6509
6510     static void yyunput (int c, register char * yy_bp )
6511 {
6512         register char *yy_cp;
6513     
6514     yy_cp = (yy_c_buf_p);
6515
6516         /* undo effects of setting up commentScanYYtext */
6517         *yy_cp = (yy_hold_char);
6518
6519         if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
6520                 { /* need to shift things up to make room */
6521                 /* +2 for EOB chars. */
6522                 register yy_size_t number_to_move = (yy_n_chars) + 2;
6523                 register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
6524                                         YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
6525                 register char *source =
6526                                 &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
6527
6528                 while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
6529                         *--dest = *--source;
6530
6531                 yy_cp += (int) (dest - source);
6532                 yy_bp += (int) (dest - source);
6533                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
6534                         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
6535
6536                 if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
6537                         YY_FATAL_ERROR( "flex scanner push-back overflow" );
6538                 }
6539
6540         *--yy_cp = (char) c;
6541
6542         (yytext_ptr) = yy_bp;
6543         (yy_hold_char) = *yy_cp;
6544         (yy_c_buf_p) = yy_cp;
6545 }
6546
6547 #ifndef YY_NO_INPUT
6548 #ifdef __cplusplus
6549     static int yyinput (void)
6550 #else
6551     static int input  (void)
6552 #endif
6553
6554 {
6555         int c;
6556     
6557         *(yy_c_buf_p) = (yy_hold_char);
6558
6559         if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
6560                 {
6561                 /* yy_c_buf_p now points to the character we want to return.
6562                  * If this occurs *before* the EOB characters, then it's a
6563                  * valid NUL; if not, then we've hit the end of the buffer.
6564                  */
6565                 if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
6566                         /* This was really a NUL. */
6567                         *(yy_c_buf_p) = '\0';
6568
6569                 else
6570                         { /* need more input */
6571                         yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
6572                         ++(yy_c_buf_p);
6573
6574                         switch ( yy_get_next_buffer(  ) )
6575                                 {
6576                                 case EOB_ACT_LAST_MATCH:
6577                                         /* This happens because yy_g_n_b()
6578                                          * sees that we've accumulated a
6579                                          * token and flags that we need to
6580                                          * try matching the token before
6581                                          * proceeding.  But for input(),
6582                                          * there's no matching to consider.
6583                                          * So convert the EOB_ACT_LAST_MATCH
6584                                          * to EOB_ACT_END_OF_FILE.
6585                                          */
6586
6587                                         /* Reset buffer status. */
6588                                         commentScanYYrestart(commentScanYYin );
6589
6590                                         /*FALLTHROUGH*/
6591
6592                                 case EOB_ACT_END_OF_FILE:
6593                                         {
6594                                         if ( commentScanYYwrap( ) )
6595                                                 return 0;
6596
6597                                         if ( ! (yy_did_buffer_switch_on_eof) )
6598                                                 YY_NEW_FILE;
6599 #ifdef __cplusplus
6600                                         return yyinput();
6601 #else
6602                                         return input();
6603 #endif
6604                                         }
6605
6606                                 case EOB_ACT_CONTINUE_SCAN:
6607                                         (yy_c_buf_p) = (yytext_ptr) + offset;
6608                                         break;
6609                                 }
6610                         }
6611                 }
6612
6613         c = *(unsigned char *) (yy_c_buf_p);    /* cast for 8-bit char's */
6614         *(yy_c_buf_p) = '\0';   /* preserve commentScanYYtext */
6615         (yy_hold_char) = *++(yy_c_buf_p);
6616
6617         YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
6618
6619         return c;
6620 }
6621 #endif  /* ifndef YY_NO_INPUT */
6622
6623 /** Immediately switch to a different input stream.
6624  * @param input_file A readable stream.
6625  * 
6626  * @note This function does not reset the start condition to @c INITIAL .
6627  */
6628     void commentScanYYrestart  (FILE * input_file )
6629 {
6630     
6631         if ( ! YY_CURRENT_BUFFER ){
6632         commentScanYYensure_buffer_stack ();
6633                 YY_CURRENT_BUFFER_LVALUE =
6634             commentScanYY_create_buffer(commentScanYYin,YY_BUF_SIZE );
6635         }
6636
6637         commentScanYY_init_buffer(YY_CURRENT_BUFFER,input_file );
6638         commentScanYY_load_buffer_state( );
6639 }
6640
6641 /** Switch to a different input buffer.
6642  * @param new_buffer The new input buffer.
6643  * 
6644  */
6645     void commentScanYY_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
6646 {
6647     
6648         /* TODO. We should be able to replace this entire function body
6649          * with
6650          *              commentScanYYpop_buffer_state();
6651          *              commentScanYYpush_buffer_state(new_buffer);
6652      */
6653         commentScanYYensure_buffer_stack ();
6654         if ( YY_CURRENT_BUFFER == new_buffer )
6655                 return;
6656
6657         if ( YY_CURRENT_BUFFER )
6658                 {
6659                 /* Flush out information for old buffer. */
6660                 *(yy_c_buf_p) = (yy_hold_char);
6661                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
6662                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
6663                 }
6664
6665         YY_CURRENT_BUFFER_LVALUE = new_buffer;
6666         commentScanYY_load_buffer_state( );
6667
6668         /* We don't actually know whether we did this switch during
6669          * EOF (commentScanYYwrap()) processing, but the only time this flag
6670          * is looked at is after commentScanYYwrap() is called, so it's safe
6671          * to go ahead and always set it.
6672          */
6673         (yy_did_buffer_switch_on_eof) = 1;
6674 }
6675
6676 static void commentScanYY_load_buffer_state  (void)
6677 {
6678         (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
6679         (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
6680         commentScanYYin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
6681         (yy_hold_char) = *(yy_c_buf_p);
6682 }
6683
6684 /** Allocate and initialize an input buffer state.
6685  * @param file A readable stream.
6686  * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
6687  * 
6688  * @return the allocated buffer state.
6689  */
6690     YY_BUFFER_STATE commentScanYY_create_buffer  (FILE * file, int  size )
6691 {
6692         YY_BUFFER_STATE b;
6693     
6694         b = (YY_BUFFER_STATE) commentScanYYalloc(sizeof( struct yy_buffer_state )  );
6695         if ( ! b )
6696                 YY_FATAL_ERROR( "out of dynamic memory in commentScanYY_create_buffer()" );
6697
6698         b->yy_buf_size = size;
6699
6700         /* yy_ch_buf has to be 2 characters longer than the size given because
6701          * we need to put in 2 end-of-buffer characters.
6702          */
6703         b->yy_ch_buf = (char *) commentScanYYalloc(b->yy_buf_size + 2  );
6704         if ( ! b->yy_ch_buf )
6705                 YY_FATAL_ERROR( "out of dynamic memory in commentScanYY_create_buffer()" );
6706
6707         b->yy_is_our_buffer = 1;
6708
6709         commentScanYY_init_buffer(b,file );
6710
6711         return b;
6712 }
6713
6714 /** Destroy the buffer.
6715  * @param b a buffer created with commentScanYY_create_buffer()
6716  * 
6717  */
6718     void commentScanYY_delete_buffer (YY_BUFFER_STATE  b )
6719 {
6720     
6721         if ( ! b )
6722                 return;
6723
6724         if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
6725                 YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
6726
6727         if ( b->yy_is_our_buffer )
6728                 commentScanYYfree((void *) b->yy_ch_buf  );
6729
6730         commentScanYYfree((void *) b  );
6731 }
6732
6733 #ifndef __cplusplus
6734 extern int isatty (int );
6735 #endif /* __cplusplus */
6736     
6737 /* Initializes or reinitializes a buffer.
6738  * This function is sometimes called more than once on the same buffer,
6739  * such as during a commentScanYYrestart() or at EOF.
6740  */
6741     static void commentScanYY_init_buffer  (YY_BUFFER_STATE  b, FILE * file )
6742
6743 {
6744         int oerrno = errno;
6745     
6746         commentScanYY_flush_buffer(b );
6747
6748         b->yy_input_file = file;
6749         b->yy_fill_buffer = 1;
6750
6751     /* If b is the current buffer, then commentScanYY_init_buffer was _probably_
6752      * called from commentScanYYrestart() or through yy_get_next_buffer.
6753      * In that case, we don't want to reset the lineno or column.
6754      */
6755     if (b != YY_CURRENT_BUFFER){
6756         b->yy_bs_lineno = 1;
6757         b->yy_bs_column = 0;
6758     }
6759
6760         b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
6761     
6762         errno = oerrno;
6763 }
6764
6765 /** Discard all buffered characters. On the next scan, YY_INPUT will be called.
6766  * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
6767  * 
6768  */
6769     void commentScanYY_flush_buffer (YY_BUFFER_STATE  b )
6770 {
6771         if ( ! b )
6772                 return;
6773
6774         b->yy_n_chars = 0;
6775
6776         /* We always need two end-of-buffer characters.  The first causes
6777          * a transition to the end-of-buffer state.  The second causes
6778          * a jam in that state.
6779          */
6780         b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
6781         b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
6782
6783         b->yy_buf_pos = &b->yy_ch_buf[0];
6784
6785         b->yy_at_bol = 1;
6786         b->yy_buffer_status = YY_BUFFER_NEW;
6787
6788         if ( b == YY_CURRENT_BUFFER )
6789                 commentScanYY_load_buffer_state( );
6790 }
6791
6792 /** Pushes the new state onto the stack. The new state becomes
6793  *  the current state. This function will allocate the stack
6794  *  if necessary.
6795  *  @param new_buffer The new state.
6796  *  
6797  */
6798 void commentScanYYpush_buffer_state (YY_BUFFER_STATE new_buffer )
6799 {
6800         if (new_buffer == NULL)
6801                 return;
6802
6803         commentScanYYensure_buffer_stack();
6804
6805         /* This block is copied from commentScanYY_switch_to_buffer. */
6806         if ( YY_CURRENT_BUFFER )
6807                 {
6808                 /* Flush out information for old buffer. */
6809                 *(yy_c_buf_p) = (yy_hold_char);
6810                 YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
6811                 YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
6812                 }
6813
6814         /* Only push if top exists. Otherwise, replace top. */
6815         if (YY_CURRENT_BUFFER)
6816                 (yy_buffer_stack_top)++;
6817         YY_CURRENT_BUFFER_LVALUE = new_buffer;
6818
6819         /* copied from commentScanYY_switch_to_buffer. */
6820         commentScanYY_load_buffer_state( );
6821         (yy_did_buffer_switch_on_eof) = 1;
6822 }
6823
6824 /** Removes and deletes the top of the stack, if present.
6825  *  The next element becomes the new top.
6826  *  
6827  */
6828 void commentScanYYpop_buffer_state (void)
6829 {
6830         if (!YY_CURRENT_BUFFER)
6831                 return;
6832
6833         commentScanYY_delete_buffer(YY_CURRENT_BUFFER );
6834         YY_CURRENT_BUFFER_LVALUE = NULL;
6835         if ((yy_buffer_stack_top) > 0)
6836                 --(yy_buffer_stack_top);
6837
6838         if (YY_CURRENT_BUFFER) {
6839                 commentScanYY_load_buffer_state( );
6840                 (yy_did_buffer_switch_on_eof) = 1;
6841         }
6842 }
6843
6844 /* Allocates the stack if it does not exist.
6845  *  Guarantees space for at least one push.
6846  */
6847 static void commentScanYYensure_buffer_stack (void)
6848 {
6849         yy_size_t num_to_alloc;
6850     
6851         if (!(yy_buffer_stack)) {
6852
6853                 /* First allocation is just for 2 elements, since we don't know if this
6854                  * scanner will even need a stack. We use 2 instead of 1 to avoid an
6855                  * immediate realloc on the next call.
6856          */
6857                 num_to_alloc = 1;
6858                 (yy_buffer_stack) = (struct yy_buffer_state**)commentScanYYalloc
6859                                                                 (num_to_alloc * sizeof(struct yy_buffer_state*)
6860                                                                 );
6861                 if ( ! (yy_buffer_stack) )
6862                         YY_FATAL_ERROR( "out of dynamic memory in commentScanYYensure_buffer_stack()" );
6863                                                                   
6864                 memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
6865                                 
6866                 (yy_buffer_stack_max) = num_to_alloc;
6867                 (yy_buffer_stack_top) = 0;
6868                 return;
6869         }
6870
6871         if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
6872
6873                 /* Increase the buffer to prepare for a possible push. */
6874                 int grow_size = 8 /* arbitrary grow size */;
6875
6876                 num_to_alloc = (yy_buffer_stack_max) + grow_size;
6877                 (yy_buffer_stack) = (struct yy_buffer_state**)commentScanYYrealloc
6878                                                                 ((yy_buffer_stack),
6879                                                                 num_to_alloc * sizeof(struct yy_buffer_state*)
6880                                                                 );
6881                 if ( ! (yy_buffer_stack) )
6882                         YY_FATAL_ERROR( "out of dynamic memory in commentScanYYensure_buffer_stack()" );
6883
6884                 /* zero only the new slots.*/
6885                 memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
6886                 (yy_buffer_stack_max) = num_to_alloc;
6887         }
6888 }
6889
6890 /** Setup the input buffer state to scan directly from a user-specified character buffer.
6891  * @param base the character buffer
6892  * @param size the size in bytes of the character buffer
6893  * 
6894  * @return the newly allocated buffer state object. 
6895  */
6896 YY_BUFFER_STATE commentScanYY_scan_buffer  (char * base, yy_size_t  size )
6897 {
6898         YY_BUFFER_STATE b;
6899     
6900         if ( size < 2 ||
6901              base[size-2] != YY_END_OF_BUFFER_CHAR ||
6902              base[size-1] != YY_END_OF_BUFFER_CHAR )
6903                 /* They forgot to leave room for the EOB's. */
6904                 return 0;
6905
6906         b = (YY_BUFFER_STATE) commentScanYYalloc(sizeof( struct yy_buffer_state )  );
6907         if ( ! b )
6908                 YY_FATAL_ERROR( "out of dynamic memory in commentScanYY_scan_buffer()" );
6909
6910         b->yy_buf_size = size - 2;      /* "- 2" to take care of EOB's */
6911         b->yy_buf_pos = b->yy_ch_buf = base;
6912         b->yy_is_our_buffer = 0;
6913         b->yy_input_file = 0;
6914         b->yy_n_chars = b->yy_buf_size;
6915         b->yy_is_interactive = 0;
6916         b->yy_at_bol = 1;
6917         b->yy_fill_buffer = 0;
6918         b->yy_buffer_status = YY_BUFFER_NEW;
6919
6920         commentScanYY_switch_to_buffer(b  );
6921
6922         return b;
6923 }
6924
6925 /** Setup the input buffer state to scan a string. The next call to commentScanYYlex() will
6926  * scan from a @e copy of @a str.
6927  * @param yystr a NUL-terminated string to scan
6928  * 
6929  * @return the newly allocated buffer state object.
6930  * @note If you want to scan bytes that may contain NUL values, then use
6931  *       commentScanYY_scan_bytes() instead.
6932  */
6933 YY_BUFFER_STATE commentScanYY_scan_string (yyconst char * yystr )
6934 {
6935     
6936         return commentScanYY_scan_bytes(yystr,strlen(yystr) );
6937 }
6938
6939 /** Setup the input buffer state to scan the given bytes. The next call to commentScanYYlex() will
6940  * scan from a @e copy of @a bytes.
6941  * @param bytes the byte buffer to scan
6942  * @param len the number of bytes in the buffer pointed to by @a bytes.
6943  * 
6944  * @return the newly allocated buffer state object.
6945  */
6946 YY_BUFFER_STATE commentScanYY_scan_bytes  (yyconst char * yybytes, yy_size_t  _yybytes_len )
6947 {
6948         YY_BUFFER_STATE b;
6949         char *buf;
6950         yy_size_t n, i;
6951     
6952         /* Get memory for full buffer, including space for trailing EOB's. */
6953         n = _yybytes_len + 2;
6954         buf = (char *) commentScanYYalloc(n  );
6955         if ( ! buf )
6956                 YY_FATAL_ERROR( "out of dynamic memory in commentScanYY_scan_bytes()" );
6957
6958         for ( i = 0; i < _yybytes_len; ++i )
6959                 buf[i] = yybytes[i];
6960
6961         buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
6962
6963         b = commentScanYY_scan_buffer(buf,n );
6964         if ( ! b )
6965                 YY_FATAL_ERROR( "bad buffer in commentScanYY_scan_bytes()" );
6966
6967         /* It's okay to grow etc. this buffer, and we should throw it
6968          * away when we're done.
6969          */
6970         b->yy_is_our_buffer = 1;
6971
6972         return b;
6973 }
6974
6975 #ifndef YY_EXIT_FAILURE
6976 #define YY_EXIT_FAILURE 2
6977 #endif
6978
6979 static void yy_fatal_error (yyconst char* msg )
6980 {
6981         (void) fprintf( stderr, "%s\n", msg );
6982         exit( YY_EXIT_FAILURE );
6983 }
6984
6985 /* Redefine yyless() so it works in section 3 code. */
6986
6987 #undef yyless
6988 #define yyless(n) \
6989         do \
6990                 { \
6991                 /* Undo effects of setting up commentScanYYtext. */ \
6992         int yyless_macro_arg = (n); \
6993         YY_LESS_LINENO(yyless_macro_arg);\
6994                 commentScanYYtext[commentScanYYleng] = (yy_hold_char); \
6995                 (yy_c_buf_p) = commentScanYYtext + yyless_macro_arg; \
6996                 (yy_hold_char) = *(yy_c_buf_p); \
6997                 *(yy_c_buf_p) = '\0'; \
6998                 commentScanYYleng = yyless_macro_arg; \
6999                 } \
7000         while ( 0 )
7001
7002 /* Accessor  methods (get/set functions) to struct members. */
7003
7004 /** Get the current line number.
7005  * 
7006  */
7007 int commentScanYYget_lineno  (void)
7008 {
7009         
7010     return commentScanYYlineno;
7011 }
7012
7013 /** Get the input stream.
7014  * 
7015  */
7016 FILE *commentScanYYget_in  (void)
7017 {
7018         return commentScanYYin;
7019 }
7020
7021 /** Get the output stream.
7022  * 
7023  */
7024 FILE *commentScanYYget_out  (void)
7025 {
7026         return commentScanYYout;
7027 }
7028
7029 /** Get the length of the current token.
7030  * 
7031  */
7032 yy_size_t commentScanYYget_leng  (void)
7033 {
7034         return commentScanYYleng;
7035 }
7036
7037 /** Get the current token.
7038  * 
7039  */
7040
7041 char *commentScanYYget_text  (void)
7042 {
7043         return commentScanYYtext;
7044 }
7045
7046 /** Set the current line number.
7047  * @param line_number
7048  * 
7049  */
7050 void commentScanYYset_lineno (int  line_number )
7051 {
7052     
7053     commentScanYYlineno = line_number;
7054 }
7055
7056 /** Set the input stream. This does not discard the current
7057  * input buffer.
7058  * @param in_str A readable stream.
7059  * 
7060  * @see commentScanYY_switch_to_buffer
7061  */
7062 void commentScanYYset_in (FILE *  in_str )
7063 {
7064         commentScanYYin = in_str ;
7065 }
7066
7067 void commentScanYYset_out (FILE *  out_str )
7068 {
7069         commentScanYYout = out_str ;
7070 }
7071
7072 int commentScanYYget_debug  (void)
7073 {
7074         return commentScanYY_flex_debug;
7075 }
7076
7077 void commentScanYYset_debug (int  bdebug )
7078 {
7079         commentScanYY_flex_debug = bdebug ;
7080 }
7081
7082 static int yy_init_globals (void)
7083 {
7084         /* Initialization is the same as for the non-reentrant scanner.
7085      * This function is called from commentScanYYlex_destroy(), so don't allocate here.
7086      */
7087
7088     (yy_buffer_stack) = 0;
7089     (yy_buffer_stack_top) = 0;
7090     (yy_buffer_stack_max) = 0;
7091     (yy_c_buf_p) = (char *) 0;
7092     (yy_init) = 0;
7093     (yy_start) = 0;
7094
7095     (yy_state_buf) = 0;
7096     (yy_state_ptr) = 0;
7097     (yy_full_match) = 0;
7098     (yy_lp) = 0;
7099
7100 /* Defined in main.c */
7101 #ifdef YY_STDINIT
7102     commentScanYYin = stdin;
7103     commentScanYYout = stdout;
7104 #else
7105     commentScanYYin = (FILE *) 0;
7106     commentScanYYout = (FILE *) 0;
7107 #endif
7108
7109     /* For future reference: Set errno on error, since we are called by
7110      * commentScanYYlex_init()
7111      */
7112     return 0;
7113 }
7114
7115 /* commentScanYYlex_destroy is for both reentrant and non-reentrant scanners. */
7116 int commentScanYYlex_destroy  (void)
7117 {
7118     
7119     /* Pop the buffer stack, destroying each element. */
7120         while(YY_CURRENT_BUFFER){
7121                 commentScanYY_delete_buffer(YY_CURRENT_BUFFER  );
7122                 YY_CURRENT_BUFFER_LVALUE = NULL;
7123                 commentScanYYpop_buffer_state();
7124         }
7125
7126         /* Destroy the stack itself. */
7127         commentScanYYfree((yy_buffer_stack) );
7128         (yy_buffer_stack) = NULL;
7129
7130     commentScanYYfree ( (yy_state_buf) );
7131     (yy_state_buf)  = NULL;
7132
7133     /* Reset the globals. This is important in a non-reentrant scanner so the next time
7134      * commentScanYYlex() is called, initialization will occur. */
7135     yy_init_globals( );
7136
7137     return 0;
7138 }
7139
7140 /*
7141  * Internal utility routines.
7142  */
7143
7144 #ifndef yytext_ptr
7145 static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
7146 {
7147         register int i;
7148         for ( i = 0; i < n; ++i )
7149                 s1[i] = s2[i];
7150 }
7151 #endif
7152
7153 #ifdef YY_NEED_STRLEN
7154 static int yy_flex_strlen (yyconst char * s )
7155 {
7156         register int n;
7157         for ( n = 0; s[n]; ++n )
7158                 ;
7159
7160         return n;
7161 }
7162 #endif
7163
7164 void *commentScanYYalloc (yy_size_t  size )
7165 {
7166         return (void *) malloc( size );
7167 }
7168
7169 void *commentScanYYrealloc  (void * ptr, yy_size_t  size )
7170 {
7171         /* The cast to (char *) in the following accommodates both
7172          * implementations that use char* generic pointers, and those
7173          * that use void* generic pointers.  It works with the latter
7174          * because both ANSI C and C++ allow castless assignment from
7175          * any pointer type to void*, and deal with argument conversions
7176          * as though doing an assignment.
7177          */
7178         return (void *) realloc( (char *) ptr, size );
7179 }
7180
7181 void commentScanYYfree (void * ptr )
7182 {
7183         free( (char *) ptr );   /* see commentScanYYrealloc() for (char *) cast */
7184 }
7185
7186 #define YYTABLES_NAME "yytables"
7187
7188 #line 2112 "commentscan.l"
7189
7190
7191
7192 //----------------------------------------------------------------------------
7193
7194 static bool handleBrief(const QCString &)
7195 {
7196   //printf("handleBrief\n");
7197   setOutput(OutputBrief);
7198   return FALSE;
7199 }
7200
7201 static bool handleFn(const QCString &)
7202 {
7203   bool stop=makeStructuralIndicator(Entry::MEMBERDOC_SEC);
7204   functionProto.resize(0);
7205   braceCount=0;
7206   BEGIN(FnParam);
7207   return stop;
7208 }
7209
7210 static bool handleDef(const QCString &)
7211 {
7212   bool stop=makeStructuralIndicator(Entry::DEFINEDOC_SEC);
7213   functionProto.resize(0);
7214   BEGIN(FnParam);
7215   return stop;
7216 }
7217
7218 static bool handleOverload(const QCString &)
7219 {
7220   functionProto.resize(0);
7221   BEGIN(OverloadParam);
7222   return FALSE;
7223 }
7224
7225 static bool handleEnum(const QCString &)
7226 {
7227   bool stop=makeStructuralIndicator(Entry::ENUMDOC_SEC);
7228   BEGIN(EnumDocArg1);
7229   return stop;
7230 }
7231
7232 static bool handleDefGroup(const QCString &)
7233 {
7234   bool stop=makeStructuralIndicator(Entry::GROUPDOC_SEC);
7235   current->groupDocType = Entry::GROUPDOC_NORMAL;
7236   BEGIN( GroupDocArg1 );
7237   return stop;
7238 }
7239
7240 static bool handleAddToGroup(const QCString &)
7241 {
7242   bool stop=makeStructuralIndicator(Entry::GROUPDOC_SEC);
7243   current->groupDocType = Entry::GROUPDOC_ADD;
7244   BEGIN( GroupDocArg1 );
7245   return stop;
7246 }
7247
7248 static bool handleWeakGroup(const QCString &)
7249 {
7250   bool stop=makeStructuralIndicator(Entry::GROUPDOC_SEC);
7251   current->groupDocType = Entry::GROUPDOC_WEAK;
7252   BEGIN( GroupDocArg1 );
7253   return stop;
7254 }
7255
7256 static bool handleNamespace(const QCString &)
7257 {
7258   bool stop=makeStructuralIndicator(Entry::NAMESPACEDOC_SEC);
7259   BEGIN( NameSpaceDocArg1 );
7260   return stop;
7261 }
7262
7263 static bool handlePackage(const QCString &)
7264 {
7265   bool stop=makeStructuralIndicator(Entry::PACKAGEDOC_SEC);
7266   BEGIN( PackageDocArg1 );
7267   return stop;
7268 }
7269
7270 static bool handleClass(const QCString &)
7271 {
7272   bool stop=makeStructuralIndicator(Entry::CLASSDOC_SEC);
7273   BEGIN( ClassDocArg1 ); 
7274   return stop;
7275 }
7276
7277 static bool handleHeaderFile(const QCString &)
7278 {
7279   BEGIN( ClassDocArg2 );
7280   return FALSE;
7281 }
7282
7283 static bool handleProtocol(const QCString &)
7284 { // Obj-C protocol
7285   bool stop=makeStructuralIndicator(Entry::PROTOCOLDOC_SEC);
7286   BEGIN( ClassDocArg1 ); 
7287   return stop;
7288 }
7289
7290 static bool handleCategory(const QCString &)
7291 { // Obj-C category
7292   bool stop=makeStructuralIndicator(Entry::CATEGORYDOC_SEC);
7293   BEGIN( CategoryDocArg1 ); 
7294   return stop;
7295 }
7296
7297 static bool handleUnion(const QCString &)
7298 {
7299   bool stop=makeStructuralIndicator(Entry::UNIONDOC_SEC);
7300   BEGIN( ClassDocArg1 ); 
7301   return stop;
7302 }
7303
7304 static bool handleStruct(const QCString &)
7305 {
7306   bool stop=makeStructuralIndicator(Entry::STRUCTDOC_SEC);
7307   BEGIN( ClassDocArg1 ); 
7308   return stop;
7309 }
7310
7311 static bool handleInterface(const QCString &)
7312 {
7313   bool stop=makeStructuralIndicator(Entry::INTERFACEDOC_SEC);
7314   BEGIN( ClassDocArg1 ); 
7315   return stop;
7316 }
7317
7318 static bool handleIdlException(const QCString &)
7319 {
7320   bool stop=makeStructuralIndicator(Entry::EXCEPTIONDOC_SEC);
7321   BEGIN( ClassDocArg1 ); 
7322   return stop;
7323 }
7324
7325 static bool handlePage(const QCString &)
7326 {
7327   bool stop=makeStructuralIndicator(Entry::PAGEDOC_SEC);
7328   BEGIN( PageDocArg1 );
7329   return stop;
7330 }
7331
7332 static bool handleMainpage(const QCString &)
7333 {
7334   bool stop=makeStructuralIndicator(Entry::MAINPAGEDOC_SEC);
7335   if (!stop) 
7336   {
7337     current->name = "mainpage";
7338   }
7339   BEGIN( PageDocArg2 );
7340   return stop;
7341 }
7342
7343 static bool handleFile(const QCString &)
7344 {
7345   bool stop=makeStructuralIndicator(Entry::FILEDOC_SEC);
7346   if (!stop) 
7347   {
7348     current->name = yyFileName;
7349   }
7350   BEGIN( FileDocArg1 );
7351   return stop;
7352 }
7353
7354 static bool handleDir(const QCString &)
7355 {
7356   bool stop=makeStructuralIndicator(Entry::DIRDOC_SEC);
7357   if (!stop) current->name = yyFileName;
7358   BEGIN( FileDocArg1 );
7359   return stop;
7360 }
7361
7362 static bool handleExample(const QCString &)
7363 {
7364   bool stop=makeStructuralIndicator(Entry::EXAMPLE_SEC);
7365   if (!stop) current->name = yyFileName;
7366   BEGIN( FileDocArg1 );
7367   return stop;
7368 }
7369
7370 static bool handleDetails(const QCString &)
7371 {
7372   if (inContext!=OutputBrief)
7373   {
7374     addOutput("\n\n"); // treat @details outside brief description
7375                        // as a new paragraph
7376   }
7377   setOutput(OutputDoc);
7378   return FALSE;
7379 }
7380
7381 static bool handleName(const QCString &)
7382 {
7383   bool stop=makeStructuralIndicator(Entry::MEMBERGRP_SEC);
7384   if (!stop)
7385   {
7386     g_memberGroupHeader.resize(0);
7387     BEGIN( NameParam );
7388     if (g_memberGroupId!=DOX_NOGROUP) // end of previous member group
7389     {
7390       closeGroup(current,yyFileName,yyLineNr,TRUE);
7391     }
7392   }
7393   return stop;
7394 }
7395
7396 static bool handleTodo(const QCString &)
7397 {
7398   newXRefKind = XRef_Todo;
7399   setOutput(OutputXRef);
7400   xrefKind = XRef_Todo;
7401   return FALSE;
7402 }
7403
7404 static bool handleTest(const QCString &)
7405 {
7406   newXRefKind = XRef_Test;
7407   setOutput(OutputXRef);
7408   xrefKind = XRef_Test;
7409   return FALSE;
7410 }
7411
7412 static bool handleBug(const QCString &)
7413 {
7414   newXRefKind = XRef_Bug;
7415   setOutput(OutputXRef);
7416   xrefKind = XRef_Bug;
7417   return FALSE;
7418 }
7419
7420 static bool handleDeprecated(const QCString &)
7421 {
7422   newXRefKind = XRef_Deprecated;
7423   setOutput(OutputXRef);
7424   xrefKind = XRef_Deprecated;
7425   return FALSE;
7426 }
7427
7428 static bool handleXRefItem(const QCString &)
7429 {
7430   newXRefKind = XRef_Item;
7431   BEGIN(XRefItemParam1);
7432   return FALSE;
7433 }
7434
7435 static bool handleRelated(const QCString &)
7436 {
7437   BEGIN(RelatesParam1);
7438   return FALSE;
7439 }
7440
7441 static bool handleRelatedAlso(const QCString &)
7442 {
7443   current->relatesType = Duplicate;
7444   BEGIN(RelatesParam1);
7445   return FALSE;
7446 }
7447
7448 static bool handleMemberOf(const QCString &)
7449 {
7450   current->relatesType = MemberOf;
7451   BEGIN(RelatesParam1);
7452   return FALSE;
7453 }
7454
7455 static bool handleRefItem(const QCString &)
7456 {
7457   addOutput("@refitem ");
7458   BEGIN(LineParam);
7459   return FALSE;
7460 }
7461
7462 static bool handleSection(const QCString &s)
7463 {
7464   setOutput(OutputDoc);
7465   addOutput("@"+s+" ");
7466   BEGIN(SectionLabel);
7467   if      (s=="section")       g_sectionLevel=1;
7468   else if (s=="subsection")    g_sectionLevel=2;
7469   else if (s=="subsubsection") g_sectionLevel=3;
7470   else if (s=="paragraph")     g_sectionLevel=4;
7471   return FALSE;
7472 }
7473
7474 static bool handleSubpage(const QCString &s)
7475 {
7476   if (current->section!=Entry::EMPTY_SEC && 
7477       current->section!=Entry::PAGEDOC_SEC &&
7478       current->section!=Entry::MAINPAGEDOC_SEC
7479      )
7480   {
7481     warn(yyFileName,yyLineNr,
7482         "warning: found \\subpage command in a comment block that is not marked as a page!");
7483   }
7484   addOutput("@"+s+" ");
7485   BEGIN(SubpageLabel);
7486   return FALSE;
7487 }
7488
7489 static bool handleAnchor(const QCString &s)
7490 {
7491   addOutput("@"+s+" ");
7492   BEGIN(AnchorLabel);
7493   return FALSE;
7494 }
7495
7496 static bool handleCite(const QCString &s)
7497 {
7498   addOutput("@"+s+" ");
7499   BEGIN(CiteLabel);
7500   return FALSE;
7501 }
7502
7503 static bool handleFormatBlock(const QCString &s)
7504 {
7505   addOutput("@"+s+" ");
7506   //printf("handleFormatBlock(%s)\n",s.data());
7507   blockName=s;
7508   g_commentCount=0;
7509   BEGIN(FormatBlock);
7510   return FALSE;
7511 }
7512
7513 static bool handleAddIndex(const QCString &)
7514 {
7515   addOutput("@addindex ");
7516   BEGIN(LineParam);
7517   return FALSE;
7518 }
7519
7520 static bool handleIf(const QCString &)
7521 {
7522   enabledSectionFound=FALSE;
7523   guardType = Guard_If;
7524   g_spaceBeforeIf = g_spaceBeforeCmd;
7525   BEGIN(GuardParam);
7526   return FALSE;
7527 }
7528
7529 static bool handleIfNot(const QCString &)
7530 {
7531   enabledSectionFound=FALSE;
7532   guardType = Guard_IfNot;
7533   g_spaceBeforeIf = g_spaceBeforeCmd;
7534   BEGIN(GuardParam);
7535   return FALSE;
7536 }
7537
7538 static bool handleElseIf(const QCString &)
7539 {
7540   if (guards.isEmpty())
7541   {
7542     warn(yyFileName,yyLineNr,
7543         "warning: found \\else without matching start command");
7544   }
7545   else
7546   {
7547     guardType = enabledSectionFound ? Guard_Skip : Guard_If;
7548     BEGIN(GuardParam);
7549   }
7550   return FALSE;
7551 }
7552
7553 static bool handleElse(const QCString &)
7554 {
7555   if (guards.isEmpty())
7556   {
7557     warn(yyFileName,yyLineNr,
7558         "warning: found \\else without matching start command");
7559   }
7560   else
7561   {
7562     BEGIN( SkipGuardedSection );
7563   }
7564   return FALSE;
7565 }
7566
7567 static bool handleEndIf(const QCString &)
7568 {
7569   if (guards.isEmpty())
7570   {
7571     warn(yyFileName,yyLineNr,
7572         "warning: found \\endif without matching start command");
7573   }
7574   else
7575   {
7576     delete guards.pop();
7577   }
7578   enabledSectionFound=FALSE;
7579   BEGIN( GuardParamEnd );
7580   return FALSE;
7581 }
7582
7583 static bool handleIngroup(const QCString &)
7584 {
7585   inGroupParamFound=FALSE;
7586   BEGIN( InGroupParam );
7587   return FALSE;
7588 }
7589
7590 static bool handleNoSubGrouping(const QCString &)
7591 {
7592   current->subGrouping = FALSE; 
7593   return FALSE;
7594 }
7595
7596 static bool handleShowInitializer(const QCString &)
7597 {
7598   current->initLines = 100000; // ON
7599   return FALSE;
7600 }
7601
7602 static bool handleHideInitializer(const QCString &)
7603 {
7604   current->initLines = 0; // OFF
7605   return FALSE;
7606 }
7607
7608 static bool handleCallgraph(const QCString &)
7609 {
7610   current->callGraph = TRUE; // ON
7611   return FALSE;
7612 }
7613
7614 static bool handleCallergraph(const QCString &)
7615 {
7616   current->callerGraph = TRUE; // ON
7617   return FALSE;
7618 }
7619
7620 static bool handleInternal(const QCString &)
7621 {
7622   if (!Config_getBool("INTERNAL_DOCS"))
7623   {
7624     // make sure some whitespace before a \internal command
7625     // is not treated as "documentation"
7626     if (current->doc.stripWhiteSpace().isEmpty())
7627     { 
7628       current->doc.resize(0);
7629     }
7630     g_condCount=0;
7631     BEGIN( SkipInternal );
7632   }
7633   else
7634   {
7635     // re-enabled for bug640828
7636     addOutput("\\internal "); 
7637   }
7638   return FALSE;
7639 }
7640
7641 static bool handleLineBr(const QCString &)
7642 {
7643   addOutput('\n');
7644   return FALSE;
7645 }
7646
7647 static bool handleStatic(const QCString &)
7648 {
7649   endBrief();
7650   current->stat = TRUE; 
7651   return FALSE;
7652 }
7653
7654 static bool handlePure(const QCString &)
7655 {
7656   endBrief();
7657   current->virt = Pure; 
7658   return FALSE;
7659 }
7660
7661 static bool handlePrivate(const QCString &)
7662 {
7663   current->protection = Private;
7664   return FALSE;
7665 }
7666
7667 static bool handlePrivateSection(const QCString &)
7668 {
7669   current->protection = protection = Private;
7670   return FALSE;
7671 }
7672
7673 static bool handleProtected(const QCString &)
7674 {
7675   current->protection = Protected;
7676   return FALSE;
7677 }
7678
7679 static bool handleProtectedSection(const QCString &)
7680 {
7681   current->protection = protection = Protected ;
7682   return FALSE;
7683 }
7684
7685 static bool handlePublic(const QCString &)
7686 {
7687   current->protection = Public;
7688   return FALSE;
7689 }
7690
7691 static bool handlePublicSection(const QCString &)
7692 {
7693   current->protection = protection = Public;
7694   return FALSE;
7695 }
7696
7697 static bool handleToc(const QCString &)
7698 {
7699   if (current->section==Entry::PAGEDOC_SEC || 
7700       current->section==Entry::MAINPAGEDOC_SEC)
7701   {
7702     current->stat=TRUE;  // we 'abuse' stat to pass whether or the TOC is enabled
7703   }
7704   return FALSE;
7705 }
7706
7707 static bool handleInherit(const QCString &)
7708 {
7709   BEGIN(InheritParam);
7710   return FALSE;
7711 }
7712
7713 static bool handleExtends(const QCString &)
7714 {
7715   BEGIN(ExtendsParam);
7716   return FALSE;
7717 }
7718
7719 static bool handleCopyDoc(const QCString &)
7720 {
7721   setOutput(OutputBrief);
7722   addOutput("\\copybrief ");
7723   g_copyDocArg.resize(0);
7724   BEGIN(CopyDoc);
7725   return FALSE;
7726 }
7727
7728 //----------------------------------------------------------------------------
7729
7730 static void checkFormula()
7731 {
7732   if (YY_START==ReadFormulaShort || YY_START==ReadFormulaLong)
7733   {
7734     warn(yyFileName,yyLineNr,"warning: End of comment block while inside formula.");
7735   }
7736 }
7737
7738 //----------------------------------------------------------------------------
7739
7740 bool parseCommentBlock(/* in */     ParserInterface *parser,
7741                        /* in */     Entry *curEntry,
7742                        /* in */     const QCString &comment,
7743                        /* in */     const QCString &fileName,
7744                        /* in,out */ int  &lineNr,
7745                        /* in */     bool isBrief,
7746                        /* in */     bool isAutoBriefOn,
7747                        /* in */     bool isInbody,
7748                        /* in,out */ Protection &prot,
7749                        /* in,out */ int &position,
7750                        /* out */    bool &newEntryNeeded
7751                       )
7752 {
7753   //printf("parseCommentBlock() isBrief=%d isAutoBriefOn=%d lineNr=%d\n",
7754   //    isBrief,isAutoBriefOn,lineNr);
7755
7756   initParser();
7757   guards.setAutoDelete(TRUE);
7758   guards.clear();
7759   langParser     = parser;
7760   current        = curEntry;
7761   if (comment.isEmpty()) return FALSE; // avoid empty strings
7762   inputString    = comment;
7763   inputString.append(" ");
7764   inputPosition  = position;
7765   yyLineNr       = lineNr;
7766   yyFileName     = fileName;
7767   protection     = prot;
7768   needNewEntry   = FALSE;
7769   xrefKind       = XRef_None;
7770   xrefAppendFlag = FALSE;
7771   insidePre      = FALSE;
7772   parseMore      = FALSE;
7773   inBody         = isInbody;
7774   outputXRef.resize(0);
7775   setOutput( isBrief || isAutoBriefOn ? OutputBrief : OutputDoc );
7776   briefEndsAtDot = isAutoBriefOn;
7777   g_condCount    = 0;
7778   g_sectionLevel = 0;
7779   g_spaceBeforeCmd = FALSE;
7780   g_spaceBeforeIf  = FALSE;
7781
7782   if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments
7783   {
7784     current->inbodyDocs+="\n\n";
7785   }
7786
7787   Debug::print(Debug::CommentScan,0,"-----------\nCommentScanner: %s:%d\n"
7788                "input=[\n%s]\n",fileName.data(),lineNr,comment.data()
7789               );
7790   
7791   commentScanYYrestart( commentScanYYin );
7792   BEGIN( Comment );
7793   commentScanYYlex();
7794   setOutput( OutputDoc );
7795
7796   if (YY_START==OverloadParam) // comment ended with \overload
7797   {
7798     addOutput(getOverloadDocs());
7799   }
7800
7801   if (!guards.isEmpty())
7802   {
7803     warn(yyFileName,yyLineNr,"Documentation block ended in the middle of a conditional section!");
7804   }
7805
7806   current->doc=stripLeadingAndTrailingEmptyLines(current->doc,current->docLine);
7807
7808   if (current->section==Entry::FILEDOC_SEC && current->doc.isEmpty())
7809   {
7810     // to allow a comment block with just a @file command.
7811     current->doc="\n\n";
7812   }
7813
7814   if (current->section==Entry::MEMBERGRP_SEC &&
7815       g_memberGroupId==DOX_NOGROUP) // @name section but no group started yet
7816   {
7817     openGroup(current,yyFileName,yyLineNr);
7818   }
7819
7820   if (Doxygen::markdownSupport)
7821   {
7822     current->brief      = processMarkdown(fileName,current,current->brief);
7823     current->doc        = processMarkdown(fileName,current,current->doc);
7824     current->inbodyDocs = processMarkdown(fileName,current,current->inbodyDocs);
7825   }
7826
7827   Debug::print(Debug::CommentScan,0,
7828                "brief=[line=%d\n%s]\ndocs=[line=%d\n%s]\ninbody=[line=%d\n%s]\n===========\n",
7829                current->briefLine,current->brief.data(),
7830                current->docLine,current->doc.data(),
7831                current->inbodyLine,current->inbodyDocs.data()
7832               );
7833   
7834   checkFormula();
7835   prot = protection;
7836   
7837   groupAddDocs(curEntry,fileName);
7838
7839   newEntryNeeded = needNewEntry;
7840
7841   // if we did not proceed during this call, it does not make
7842   // sense to continue, since we get stuck. See bug 567346 for situations
7843   // were this happens
7844   if (parseMore && position==inputPosition) parseMore=FALSE;
7845
7846   if (parseMore) position=inputPosition; else position=0;
7847
7848   lineNr = yyLineNr;
7849   //printf("position=%d parseMore=%d\n",position,parseMore);
7850
7851   return parseMore;
7852 }
7853
7854 //---------------------------------------------------------------------------
7855
7856 void groupEnterFile(const char *fileName,int)
7857 {
7858   g_autoGroupStack.setAutoDelete(TRUE);
7859   g_autoGroupStack.clear();
7860   g_memberGroupId = DOX_NOGROUP;
7861   g_memberGroupDocs.resize(0);
7862   g_memberGroupRelates.resize(0);
7863   g_compoundName=fileName;
7864 }
7865
7866 void groupLeaveFile(const char *fileName,int line)
7867 {
7868   //if (g_memberGroupId!=DOX_NOGROUP)
7869   //{
7870   //  warn(fileName,line,"warning: end of file while inside a member group\n");
7871   //}
7872   g_memberGroupId=DOX_NOGROUP;
7873   g_memberGroupRelates.resize(0);
7874   g_memberGroupDocs.resize(0);
7875   if (!g_autoGroupStack.isEmpty())
7876   {
7877     warn(fileName,line,"warning: end of file while inside a group\n");
7878   }
7879 }
7880
7881 void groupEnterCompound(const char *fileName,int line,const char *name)
7882 {
7883   if (g_memberGroupId!=DOX_NOGROUP)
7884   {
7885     warn(fileName,line,"warning: try to put compound %s inside a member group\n",name);
7886   }
7887   g_memberGroupId=DOX_NOGROUP;
7888   g_memberGroupRelates.resize(0);
7889   g_memberGroupDocs.resize(0);
7890   g_compoundName = name;
7891   int i = g_compoundName.find('(');
7892   if (i!=-1) 
7893   {
7894     g_compoundName=g_compoundName.left(i); // strip category (Obj-C)
7895   }
7896   if (g_compoundName.isEmpty())
7897   {
7898     g_compoundName=fileName;
7899   }
7900   //printf("groupEnterCompound(%s)\n",name);
7901 }
7902
7903 void groupLeaveCompound(const char *,int,const char * /*name*/)
7904 {
7905   //printf("groupLeaveCompound(%s)\n",name);
7906   //if (g_memberGroupId!=DOX_NOGROUP)
7907   //{
7908   //  warn(fileName,line,"warning: end of compound %s while inside a member group\n",name);
7909   //}
7910   g_memberGroupId=DOX_NOGROUP;
7911   g_memberGroupRelates.resize(0);
7912   g_memberGroupDocs.resize(0);
7913   g_compoundName.resize(0);
7914 }
7915
7916 static int findExistingGroup(int &groupId,const MemberGroupInfo *info)
7917 {
7918   //printf("findExistingGroup %s:%s\n",info->header.data(),info->compoundName.data());
7919   QIntDictIterator<MemberGroupInfo> di(Doxygen::memGrpInfoDict);
7920   MemberGroupInfo *mi;
7921   for (di.toFirst();(mi=di.current());++di)
7922   {
7923     if (g_compoundName==mi->compoundName &&  // same file or scope
7924         !mi->header.isEmpty() &&             // not a nameless group
7925         stricmp(mi->header,info->header)==0  // same header name
7926        )
7927     {
7928       //printf("Found it!\n");
7929       return di.currentKey(); // put the item in this group
7930     }
7931   }
7932   groupId++; // start new group
7933   return groupId;
7934 }
7935
7936 void openGroup(Entry *e,const char *,int)
7937 {
7938   //printf("==> openGroup(name=%s,sec=%x) g_autoGroupStack=%d\n",
7939   //    e->name.data(),e->section,g_autoGroupStack.count());
7940   if (e->section==Entry::GROUPDOC_SEC) // auto group
7941   {
7942     g_autoGroupStack.push(new Grouping(e->name,e->groupingPri()));
7943   }
7944   else // start of a member group
7945   {
7946     //printf("    membergroup id=%d %s\n",g_memberGroupId,g_memberGroupHeader.data());
7947     if (g_memberGroupId==DOX_NOGROUP) // no group started yet
7948     {
7949       static int curGroupId=0;
7950
7951       MemberGroupInfo *info = new MemberGroupInfo;
7952       info->header = g_memberGroupHeader.stripWhiteSpace();
7953       info->compoundName = g_compoundName;
7954       g_memberGroupId = findExistingGroup(curGroupId,info);
7955       //printf("    use membergroup %d\n",g_memberGroupId);
7956       Doxygen::memGrpInfoDict.insert(g_memberGroupId,info);
7957
7958       g_memberGroupRelates = e->relates;
7959       e->mGrpId = g_memberGroupId;
7960     }
7961   }
7962 }
7963
7964 void closeGroup(Entry *e,const char *fileName,int,bool foundInline)
7965 {
7966   //printf("==> closeGroup(name=%s,sec=%x) g_autoGroupStack=%d\n",
7967   //    e->name.data(),e->section,g_autoGroupStack.count());
7968   if (g_memberGroupId!=DOX_NOGROUP) // end of member group
7969   {
7970     MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(g_memberGroupId);
7971     if (info) // known group
7972     {
7973       info->doc = g_memberGroupDocs;
7974       info->docFile = fileName;
7975     }
7976     g_memberGroupId=DOX_NOGROUP;
7977     g_memberGroupRelates.resize(0);
7978     g_memberGroupDocs.resize(0);
7979     e->mGrpId=DOX_NOGROUP;
7980     //printf("new group id=%d\n",g_memberGroupId);
7981   }
7982   else if (!g_autoGroupStack.isEmpty()) // end of auto group
7983   {
7984     Grouping *grp = g_autoGroupStack.pop();
7985     // see bug577005: we should not remove the last group for e
7986     if (!foundInline) e->groups->removeLast();
7987     //printf("Removing %s e=%p\n",grp->groupname.data(),e);
7988     delete grp;
7989     if (!foundInline) initGroupInfo(e);
7990   }
7991 }
7992
7993 void initGroupInfo(Entry *e)
7994 {
7995   //printf("==> initGroup(id=%d,related=%s,e=%p)\n",g_memberGroupId,
7996   //       g_memberGroupRelates.data(),e);
7997   e->mGrpId     = g_memberGroupId;
7998   e->relates    = g_memberGroupRelates;
7999   if (!g_autoGroupStack.isEmpty())
8000   {
8001     //printf("Appending group %s to %s: count=%d entry=%p\n",
8002     //  g_autoGroupStack.top()->groupname.data(),
8003     //  e->name.data(),e->groups->count(),e);
8004     e->groups->append(new Grouping(*g_autoGroupStack.top()));
8005   }
8006 }
8007
8008 static void groupAddDocs(Entry *e,const char *fileName)
8009 {
8010   if (e->section==Entry::MEMBERGRP_SEC)
8011   {
8012     g_memberGroupDocs=e->brief.stripWhiteSpace();
8013     e->doc = stripLeadingAndTrailingEmptyLines(e->doc,e->docLine);
8014     if (!g_memberGroupDocs.isEmpty() && !e->doc.isEmpty())
8015     {
8016       g_memberGroupDocs+="\n\n";
8017     }
8018     g_memberGroupDocs+=e->doc;
8019     MemberGroupInfo *info=Doxygen::memGrpInfoDict.find(g_memberGroupId);
8020     if (info) 
8021     {
8022       info->doc = g_memberGroupDocs;
8023       info->docFile = fileName;
8024       info->setRefItems(e->sli);
8025     }
8026     e->doc.resize(0);
8027     e->brief.resize(0);
8028   }
8029 }
8030
8031
8032 #if !defined(YY_FLEX_SUBMINOR_VERSION) 
8033 //----------------------------------------------------------------------------
8034 extern "C" { // some bogus code to keep the compiler happy
8035   void commentScanYYdummy() { yy_flex_realloc(0,0); } 
8036 }
8037 #endif
8038
8039