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