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