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