/* A lexical scanner generated by flex */

/* Scanner skeleton version:
 * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
 */

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5

#include <stdio.h>


/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
#ifdef c_plusplus
#ifndef __cplusplus
#define __cplusplus
#endif
#endif


#ifdef __cplusplus

#include <stdlib.h>
#include <unistd.h>

/* Use prototypes in function declarations. */
#define YY_USE_PROTOS

/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST

#else	/* ! __cplusplus */

#if __STDC__

#define YY_USE_PROTOS
#define YY_USE_CONST

#endif	/* __STDC__ */
#endif	/* ! __cplusplus */

#ifdef __TURBOC__
 #pragma warn -rch
 #pragma warn -use
#include <io.h>
#include <stdlib.h>
#define YY_USE_CONST
#define YY_USE_PROTOS
#endif

#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif


#ifdef YY_USE_PROTOS
#define YY_PROTO(proto) proto
#else
#define YY_PROTO(proto) ()
#endif

/* Returned upon end-of-file. */
#define YY_NULL 0

/* Promotes a possibly negative, possibly signed char to an unsigned
 * integer for use as an array index.  If the signed char is negative,
 * we want to instead treat it as an 8-bit unsigned char, hence the
 * double cast.
 */
#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)

/* Enter a start condition.  This macro really ought to take a parameter,
 * but we do it the disgusting crufty way forced on us by the ()-less
 * definition of BEGIN.
 */
#define BEGIN yy_start = 1 + 2 *

/* Translate the current start state into a value that can be later handed
 * to BEGIN to return to the state.  The YYSTATE alias is for lex
 * compatibility.
 */
#define YY_START ((yy_start - 1) / 2)
#define YYSTATE YY_START

/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)

/* Special action meaning "start processing a new file". */
#define YY_NEW_FILE yyrestart( yyin )

#define YY_END_OF_BUFFER_CHAR 0

/* Size of default input buffer. */
#define YY_BUF_SIZE 16384

typedef struct yy_buffer_state *YY_BUFFER_STATE;

extern int yyleng;
extern FILE *yyin, *yyout;

#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2

/* The funky do-while in the following #define is used to turn the definition
 * int a single C statement (which needs a semi-colon terminator).  This
 * avoids problems with code like:
 *
 * 	if ( condition_holds )
 *		yyless( 5 );
 *	else
 *		do_something_else();
 *
 * Prior to using the do-while the compiler would get upset at the
 * "else" because it interpreted the "if" statement as being all
 * done when it reached the ';' after the yyless() call.
 */

/* Return all but the first 'n' matched characters back to the input stream. */

#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
		*yy_cp = yy_hold_char; \
		YY_RESTORE_YY_MORE_OFFSET \
		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
		} \
	while ( 0 )

#define unput(c) yyunput( c, yytext_ptr )

/* The following is because we cannot portably get our hands on size_t
 * (without autoconf's help, which isn't available because we want
 * flex-generated scanners to compile on their own).
 */
typedef unsigned int yy_size_t;


struct yy_buffer_state
	{
	FILE *yy_input_file;

	char *yy_ch_buf;		/* input buffer */
	char *yy_buf_pos;		/* current position in input buffer */

	/* Size of input buffer in bytes, not including room for EOB
	 * characters.
	 */
	yy_size_t yy_buf_size;

	/* Number of characters read into yy_ch_buf, not including EOB
	 * characters.
	 */
	int yy_n_chars;

	/* Whether we "own" the buffer - i.e., we know we created it,
	 * and can realloc() it to grow it, and should free() it to
	 * delete it.
	 */
	int yy_is_our_buffer;

	/* Whether this is an "interactive" input source; if so, and
	 * if we're using stdio for input, then we want to use getc()
	 * instead of fread(), to make sure we stop fetching input after
	 * each newline.
	 */
	int yy_is_interactive;

	/* Whether we're considered to be at the beginning of a line.
	 * If so, '^' rules will be active on the next match, otherwise
	 * not.
	 */
	int yy_at_bol;

	/* Whether to try to fill the input buffer when we reach the
	 * end of it.
	 */
	int yy_fill_buffer;

	int yy_buffer_status;
#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
	/* When an EOF's been seen but there's still some text to process
	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
	 * shouldn't try reading from the input source any more.  We might
	 * still have a bunch of tokens to match, though, because of
	 * possible backing-up.
	 *
	 * When we actually see the EOF, we change the status to "new"
	 * (via yyrestart()), so that the user can continue scanning by
	 * just pointing yyin at a new input file.
	 */
#define YY_BUFFER_EOF_PENDING 2
	};

static YY_BUFFER_STATE yy_current_buffer = 0;

/* We provide macros for accessing buffer states in case in the
 * future we want to put the buffer states in a more general
 * "scanner state".
 */
#define YY_CURRENT_BUFFER yy_current_buffer


/* yy_hold_char holds the character lost when yytext is formed. */
static char yy_hold_char;

static int yy_n_chars;		/* number of characters read into yy_ch_buf */


int yyleng;

/* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0;
static int yy_init = 1;		/* whether we need to initialize */
static int yy_start = 0;	/* start state number */

/* Flag which is used to allow yywrap()'s to do buffer switches
 * instead of setting up a fresh yyin.  A bit of a hack ...
 */
static int yy_did_buffer_switch_on_eof;

void yyrestart YY_PROTO(( FILE *input_file ));

void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
void yy_load_buffer_state YY_PROTO(( void ));
YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )

YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));

static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
static void yy_flex_free YY_PROTO(( void * ));

#define yy_new_buffer yy_create_buffer

#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! yy_current_buffer ) \
		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
	yy_current_buffer->yy_is_interactive = is_interactive; \
	}

#define yy_set_bol(at_bol) \
	{ \
	if ( ! yy_current_buffer ) \
		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
	yy_current_buffer->yy_at_bol = at_bol; \
	}

#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)

typedef unsigned char YY_CHAR;
FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
typedef int yy_state_type;
extern char *yytext;
#define yytext_ptr yytext

static yy_state_type yy_get_previous_state YY_PROTO(( void ));
static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
static int yy_get_next_buffer YY_PROTO(( void ));
static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));

/* Done after the current pattern has been matched and before the
 * corresponding action - sets up yytext.
 */
#define YY_DO_BEFORE_ACTION \
	yytext_ptr = yy_bp; \
	yyleng = (int) (yy_cp - yy_bp); \
	yy_hold_char = *yy_cp; \
	*yy_cp = '\0'; \
	yy_c_buf_p = yy_cp;

#define YY_NUM_RULES 51
#define YY_END_OF_BUFFER 52
static yyconst short int yy_accept[1410] =
    {   0,
        0,    0,    0,    0,    0,    0,    0,    0,   52,   51,
        2,   51,   51,   51,   51,    5,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,    3,    4,   20,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,    4,   51,    2,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,    9,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,   19,    0,

       10,   10,   10,   10,   10,   10,   10,    7,   10,   10,
       10,   10,   10,   10,    7,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,   19,   10,   10,   10,   10,
       10,   10,   10,    7,   10,   10,   10,   10,   10,   10,
        7,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,    0,    0,    0,   27,   10,   28,    0,    0,
        0,   10,   10,   10,   10,   10,   10,    7,   10,   10,
       10,   10,   10,   10,    7,   10,   10,   10,   10,   10,

       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,    7,   10,   10,   10,   10,   10,   10,
        7,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,    0,    0,   42,    0,    0,    0,    0,    0,
        0,    1,   11,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,   10,   10,   10,   10,   10,   10,    0,   18,   10,
       10,   10,   10,   10,   10,   10,    7,   10,   10,   10,
       10,    8,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,    0,    0,

        0,   40,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,   10,   10,
       10,   10,   10,   10,    0,   18,   10,   10,   10,   10,
       10,   10,    8,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,    0,    0,
        0,   35,   36,    0,    0,    0,    0,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,    8,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,

       10,   10,   10,   10,   10,   10,   10,    8,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,   26,    0,   24,   32,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,   14,   10,
       10,   10,   10,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,   10,   10,    7,   10,    7,   10,   10,   10,   10,

       10,    0,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,   39,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,    0,
       35,   36,    0,    0,    0,   30,   31,    0,    0,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,

       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   46,
       45,    0,    0,    0,    0,    0,    0,    0,    0,   22,
        0,    0,    0,   32,    0,   32,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
       10,    0,    0,   21,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,   12,   10,   10,    0,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,    7,   10,
       10,    0,    0,    0,   40,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       36,    0,    0,   30,   31,    0,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   47,   43,    0,    0,    0,    0,

        0,    0,    0,    0,   16,    0,    0,    0,    0,   29,
       25,   33,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,   15,   10,   10,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    7,   10,   10,   10,   10,
        7,   10,    0,   10,   10,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,   10,   10,   10,   10,   10,   10,   10,   10,   10,
       10,   10,   10,   10,   10,   10,   10,   10,   10,   44,
        0,   48,    0,    0,    0,   34,   29,   25,   33,   33,
       33,   33,    0,    0,    0,    0,   13,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
        7,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,   41,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    6,
       10,   10,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,   10,
       10,    0,    0,    0,    0,    0,    0,    0,    0,   10,
        7,   10,   10,   10,   10,    7,   10,   10,   10,   10,
        7,   10,   10,   10,    0,    0,    0,    0,    0,   17,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
       38,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,   23,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,   37,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,   23,   23,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,   50,   49,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,   23,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,

        0,    0,    0,    0,    0,    0,    0,    0,    0
    } ;

static yyconst int yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    4,    1,    5,    6,    1,    1,    1,    7,    8,
        9,   10,   11,   12,    1,    1,    1,   13,   14,   14,
       14,   14,   14,   14,   14,   14,   14,    1,   15,   16,
       17,   18,    1,    1,   19,   19,   19,   19,   19,   19,
       20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
       20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
       21,    1,   22,    1,   20,    1,   23,   24,   25,   26,

       27,   28,   29,   30,   31,   20,   32,   33,   34,   35,
       36,   37,   20,   38,   39,   40,   41,   42,   43,   44,
       45,   46,   47,    1,   48,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,

        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1
    } ;

static yyconst int yy_meta[49] =
    {   0,
        1,    2,    3,    4,    1,    1,    1,    5,    1,    6,
        1,    7,    8,    8,    9,    1,   10,    1,   11,   12,
       13,    1,   11,   11,   11,   11,   11,   11,   12,   12,
       12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
       12,   12,   12,   12,   12,   12,   14,   15
    } ;

static yyconst short int yy_base[1452] =
    {   0,
        0,    0,   48,    0,   96,    0,  144,    0, 4487, 4488,
     4488,  189,  191,    0, 4442, 4488,  194,  197,  211,  248,
      195,  200,  204,  209,  218,  232,  234,  246,  256,  244,
      258,  267,  268, 4488,  303, 4488,  257,  312,  348,  355,
      337,  339,  288,  272,  354,  289,  365,  373,  357,  375,
      376,  384, 4488,  415,  419,  428,  475,  165,  403,  400,
      335,  401,  188,  418,  206,  167,  417,  320,  242,  330,
      367, 4488,    0, 4444, 4446,  431,  239,  429,  176, 4447,
      282, 4446, 4454,  425, 4435, 4444, 4442, 4447,  462,  417,
      400, 4438,  259,  467,  478, 4468,    0,  522, 4465,  498,

      461,  481,  492,  497,  508,  546,  547,  570,  556,  567,
      566,  568,  571,  582,  611,  600,  597,  605,  615,  620,
      624,  629,  638,  641,  649,  653,  664,    0,  689,  694,
      434,  682,  447,  678,  462,  471,  679,  472,  397,  686,
      469,  359,  493,  558,  728, 4488,  698,  710,  715,  718,
      726,  729,  730,  765,  740,  748,  751,  752,  760,  763,
      805,  774,  782,  792,  793,  797,  801,  811,  815,  823,
      825,  834,  864,  873,  920, 4488, 4432, 4488,  614, 4450,
     4456,  170,  544,  496,  593,  607,  662, 4429,  634, 4428,
      260,  622,  502,  314, 4427,  445,  667,  831,  703,  840,

      754,  569,  706,  848,  851,  608,    0, 4427, 4439, 4426,
     4441, 4428, 4434, 4420, 4421, 4418, 4418, 4421, 4418, 4415,
        0, 4414, 4418,  732, 4416,  653,  205, 4420, 4413,  763,
      847, 4418,  780, 4422,  483, 4422, 4423, 4418,  893,  896,
      899, 4488,    0,  967,  987,  866,  889,  808,  873,  877,
      744,  898,  789,  809,  912,  864,  893,  875,  890, 4435,
      945,  915,  927,  931,  936,  957,  971, 1027, 4434,  982,
      986,  990, 1002, 1051, 1013, 1052,  631, 1053, 1063, 1068,
     1072, 1075, 1077, 1086, 1088, 1091, 1100, 1105, 1116, 1114,
     1119, 1128, 1136, 1139, 1147, 1150, 1151, 1159, 1194, 1197,

     4401, 4488, 4419,  684,  888,  852,  714,  905,  932, 1201,
      923, 4399,  760,  940,  945,  937, 1208,  970,  980, 1116,
      962,  998, 1179,  832,  982, 1183, 1188,  993, 1195, 1203,
     1205, 1207, 1217, 1225, 1256, 4488, 1239, 1243, 1242, 1244,
     1254, 1258, 1283, 1266, 1269, 1274, 1278, 1283, 1294, 1297,
     1299, 1302, 1316, 1311, 1325, 1327, 1328, 1336, 1371, 1364,
     1365, 1375, 1379, 1381, 1386, 4417, 1433, 1056, 1106, 1076,
     1004, 1211, 1130, 1107, 1085, 1007, 1093, 1138, 1149, 4397,
      422, 1153, 4396, 1150, 1203, 1186, 1242, 4395, 1271, 1227,
     1257, 1205,  959, 1303,  903, 4399, 4411, 4406, 4394, 1331,

     4406, 4404, 4397, 4387, 4393, 4396, 4377,    0, 4383, 4380,
     4369, 4371, 4373, 4379, 4356, 4339, 4325, 4332, 4322, 4326,
     4330, 4332, 4321, 4314, 4305, 4283, 4251, 4211, 4193, 4183,
     4167, 1400, 1407, 1480, 4151, 4488, 4116, 4488, 1348, 4134,
     1359, 1282, 1126, 1308, 1319, 1377, 1418, 1367, 4114, 1376,
     1389, 1390, 1392, 1438, 1403, 1412, 1410, 1416, 1420, 1433,
     1366, 1043, 1429, 1431, 1383, 1460, 1474, 1483, 1487, 1468,
     1473, 1476, 1487, 1529, 1549, 1467, 1488, 1498, 1514, 1486,
     1479, 1507, 1502, 1453, 1532, 1262, 1432, 1504, 1428, 4115,
     1565, 1548, 1553,  930, 1557, 1592, 1568, 1569, 1580, 1584,

     1592, 1621, 1596, 1608, 1612, 1613, 1628, 1616, 1631, 1640,
     1643, 1648, 1652, 1660, 1662, 1670, 1701, 4097, 1705, 1518,
     1533, 1538, 1559, 1673, 1618, 1719, 4488, 1304, 1561, 1660,
     1645, 1654, 1541, 1726, 1485, 1650, 4077, 1596, 1675, 1691,
     1616, 4076, 1684, 1692, 1604, 1704, 1167, 1713, 1092, 1714,
     1719, 1730, 1728, 1740, 1742, 1745, 1754, 1756, 1759, 1773,
     1768, 1782, 1785, 1794, 1797, 1799, 1802, 1813, 1814, 1700,
     4104, 1759, 1799, 1852, 1856, 4092, 4051, 4044, 1824, 1628,
     1698, 1716, 4024, 1580, 1804, 1747, 1787, 1810, 1821, 1756,
     1765, 1834, 1576, 1838, 1831, 1835, 1811, 1840, 1842, 4032,

     4023, 4031, 4020, 4012, 3988, 3978, 3978, 3972, 3966, 3978,
     3948, 3952, 3956, 3955, 3953, 3938, 3943, 3929, 3934, 4488,
     4488, 3932, 3926, 3926, 3911, 3917, 3918, 1882, 1886, 4488,
     1889, 3934, 1892, 3931, 3929,    0, 3917, 1938, 1846, 1875,
     1872, 1864, 1867, 1880, 1907, 3923, 1888, 1887, 1884, 1890,
     1896, 1886, 1930, 1837, 1889, 3890, 1885, 1908, 1917, 1895,
     3888, 1905, 1920, 1915, 1921, 1922, 1931, 1924, 1964, 1946,
     1947, 1971, 3870, 4488, 1944, 1937, 1948, 1965, 1955, 1715,
     1989, 1959, 3865, 1954, 1963, 1964, 1967, 2010, 1969, 1980,
     1987, 1981, 1990, 1997, 1992, 1344, 1993, 2006, 2009, 2039,

     2042, 2045, 2026, 2029, 2088, 2034, 2038, 2043, 2052, 2057,
     2112, 2074, 2113, 2117, 2121, 2131, 2132, 2133, 2162, 2147,
     2149, 2172, 2187, 2208, 3883, 3882, 2026, 1985, 2053, 3862,
     2022, 2061, 2036, 1962, 2062, 2065, 2054, 2137, 2155, 2060,
     2232, 2166, 2160, 2109, 2118, 2231, 2239, 2247, 2255, 2258,
     2256, 2267, 2275, 2276, 2284, 2285, 2287, 2299, 2301, 2309,
     2252, 2280, 3890, 4488, 4488, 3886, 2163, 2227, 2286, 2165,
     2223, 2224, 2235, 2243, 2293, 2301, 2042, 2289, 2303, 2302,
     3863, 3864, 3869, 3860, 3854, 3858, 3866, 3863, 3865, 3849,
     3858, 3860, 3851, 3854, 4488, 4488, 3855, 3856, 3858, 3845,

     2344, 2346, 2348, 2351, 2353, 2346, 3867, 2397, 2362, 3856,
     3855, 2356, 3854, 2328, 2335, 2331, 3834, 3860, 2378, 2351,
     2329, 2345, 2164, 2349, 2348, 2364, 2361, 2362, 2369, 2379,
     2370, 2372, 2386, 2376, 2381, 2426, 2429, 2420, 2413, 2415,
     2385, 2383, 2407, 2399, 2417, 2419, 2459, 2423, 2412, 2418,
     2438, 2427, 2430, 2478, 2443, 2444, 3822, 2436, 2448, 2451,
     2429, 3738, 2447, 2463, 2455, 2462, 2468, 2472, 2464, 2518,
     2564, 2460, 2476, 2475, 2490, 2474, 2488, 2508, 2491, 2473,
     2507, 2096, 2505, 2515, 2511, 2538, 2539, 2547, 2548, 2559,
     2588, 2570, 2622, 2574, 2579,    0, 2668, 2518, 2522, 2517,

     2519, 2547, 2572, 2577, 2580, 2520, 2576, 2590, 2553, 2587,
     2477, 2694, 2604, 2695, 2698, 2706, 2714, 3703, 2595, 2592,
     2691, 2602, 2705, 3423, 3327, 3289, 3177, 3071, 2886, 4488,
     2834, 4488, 2798, 2635, 2737, 4488, 4488, 4488,    0, 2774,
     4488, 2783, 2708, 2712, 2752, 2755, 2745, 2724, 2727, 2723,
     2731, 2735, 2741, 2748, 2730, 2747, 2751, 2739, 2750, 2767,
     2775, 2774, 2767, 2752, 2686, 2776, 2558, 2771, 2248, 2682,
     2773, 2789, 2782, 2788, 2795, 2796, 2798, 2787, 2797, 2791,
     2800, 2831, 2516, 4488, 2802, 2813, 2405, 2821, 2810, 2818,
     2845, 2811, 2487, 2815, 2822, 2819, 2824, 2864, 2829, 2836,

     2844, 2838, 2846, 2853, 2849, 2738, 2857, 2862, 2858, 2904,
     2947, 2879, 2982, 3027, 3073, 2859, 2930, 2877, 2921, 2928,
     2875, 2939, 2884, 2931, 2948, 2881, 2940, 2932, 2880, 3010,
     3011, 3047,    0, 2278, 2841, 2955, 2959, 3016, 2962, 3031,
     3076, 3059, 3030, 3073, 3045, 2225, 2956, 3011, 3046, 2154,
        0, 1991, 1790, 1725, 3088, 2953, 3061, 3113, 3119, 3068,
     1658, 2958, 3064, 3004, 3083, 3078, 3066, 3085, 3086, 3067,
     3089, 3090, 3029, 3104, 3108, 3094, 2963, 3109, 3102, 3107,
     3103, 2860, 3113, 3114, 3117, 3118, 3159, 2935, 3124, 3112,
     3137, 3145, 3106, 3167, 3143, 3142, 1639, 3136, 3141, 3152,

     3140, 1545, 3147, 3158, 3153, 3159, 3165, 3169, 3162, 3209,
        0,    0, 3254, 3300, 3160, 3179, 3180, 3226, 3190, 3186,
     3237, 3227, 3177, 3243, 3219, 3189, 3240, 3247, 3287, 1519,
     4488, 3156, 3252, 3241, 3264, 3257, 3266, 3316, 3256, 1495,
     3259, 3270, 3272, 3282, 3323, 3288, 3295, 3303, 3273, 3304,
     3314, 3307, 3298, 3315, 3318, 3322, 3331, 3358, 3327, 3340,
     3342, 3366, 3338, 3372, 3350, 3376, 3347, 3360, 3362, 1475,
     3352, 3363, 3366, 3368, 3364, 3370, 3372, 3365, 1452, 3367,
     3377, 3379, 3375, 3383, 3382, 3398, 3390, 3396, 3403, 3404,
     3406, 3395, 3369, 3393, 3408, 1460, 1344, 3438, 1295, 4488,

     3410, 3411, 3407, 3420, 3418, 3426, 3454, 3424, 1193, 3428,
     3419, 3432, 3431, 3472, 3437, 3446, 3450, 3447, 3453, 3463,
     3461, 3452, 3466, 3465, 3469, 3467, 3443, 3482, 3473, 3476,
     3489, 3516, 3497, 3495, 3491, 3499, 3504, 3492, 3539, 3505,
     3498, 1055, 3510, 3496, 3508, 3512,  842, 3514, 3517, 3520,
     3519, 3531, 3536, 3529,    0, 3561, 3540, 3571, 3528, 3542,
     3544, 3543, 3549, 3559, 3552, 3548, 3556, 3566, 3567, 3569,
     3558, 3255, 3574, 3561, 3572,  835,  663, 3568, 3582, 3579,
     3573, 3577, 3596, 3622, 3597, 3595, 3593, 3601, 3606, 3594,
     3637, 3602, 3613,  583, 3608, 3615, 3621, 3592,  543, 3611,

     3626, 3619, 3627, 3631, 3636, 3630, 3629, 3624, 3635,  498,
     3640, 3641, 3634, 3644, 3646, 3648, 3653, 3650, 3659, 3667,
     3668, 3669, 3661, 3670, 3657, 3674,    0,  453, 3663, 3678,
     3679, 3685, 3673, 3681, 3676, 3687,  374, 3688, 3686, 3690,
     3684, 3694, 3693, 3709, 3701, 3707, 3714, 3715, 3717, 3706,
     3716, 3711, 3719, 3718, 3721, 3722, 3726, 3724, 3731, 3742,
     3741, 3745, 3733, 3746, 3744, 3740, 3747, 3750, 3790, 3758,
     3754, 3762, 3749, 3764, 3773, 3766, 3768, 3769, 3776, 3778,
     3786, 3772, 3785, 3789, 3783, 3791,  340, 3780, 3796, 3797,
     3801, 3800,  268, 3794, 3802, 3808, 3812, 3807, 3817, 3843,

     3814, 3824, 3827, 3829, 3858, 3826, 3831, 3832, 4488, 3896,
     3908, 3922, 3933, 3944, 3955, 3963, 3974, 3863, 3986, 4000,
     4012, 4027, 4042, 4056, 4067, 4080, 4095, 4109, 4121, 4136,
     4150, 4162, 4177, 4192, 4206, 4219, 4234, 4249, 4264, 4279,
     4294, 4308, 4322, 4336, 4349, 4361, 4376, 4390, 4403, 4414,
     4419
    } ;

static yyconst short int yy_def[1452] =
    {   0,
     1409,    1, 1409,    3, 1409,    5, 1409,    7, 1409, 1409,
     1409, 1409, 1410, 1411, 1409, 1409, 1412, 1412, 1412, 1412,
       20,   20,   20,   20,   20,   20,   20,   20,   20,   20,
       20,   20,   20, 1409, 1409, 1409, 1413, 1413, 1413, 1413,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40, 1409, 1414, 1414, 1415, 1415,   57,   57,   57,
       57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
       57, 1409, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416,
     1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1409, 1409,
     1409, 1409, 1409, 1417, 1417, 1409, 1418, 1409, 1419,   98,

       20,   20,   20,   20,   20,   20,   20, 1412,   20,   20,
       20,   20,   20,   20, 1412,   20,   20,   20,   20,   20,
       20,   20,   20,   20,   20,   20,   20,   35, 1420, 1420,
      130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
      130,  130,  130,  130, 1409, 1409,   40,   40,   40,   40,
       40,   40,   40, 1413,   40,   40,   40,   40,   40,   40,
     1413,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40, 1414, 1421, 1409, 1409,   57, 1409, 1422, 1423,
     1409,   57,   57,   57,   57,   57,   57,   57,   57,   57,
       57,   57,   57,   57,   57,   57,   57,   57,   57,   57,

       57,   57,   57,   57,   57,   57, 1416, 1416, 1416, 1416,
     1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416,
     1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416,
     1416, 1416, 1409, 1409, 1409, 1409, 1409, 1409, 1424, 1417,
     1417, 1409, 1418, 1425, 1425,  245,  245,  245,  245,  245,
      245,  245,  245,  245,  245,  245,  245,  245,  245, 1419,
     1426,   20,   20,   20,   20,   20,   20, 1409, 1427,   20,
       20,   20,   20,   20,   20,   20,  115,   20,   20,   20,
       20,  115,   20,   20,   20,   20,   20,   20,   20,   20,
       20,   20,   20,   20,   20,   20,   20,   20, 1409, 1428,

      130, 1409, 1429,  130,  130,  130,  130,  130,  130,  130,
      130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
      130,  130,  130,  130,  130,  130,  130,  130,   40,   40,
       40,   40,   40,   40, 1409, 1409,   40,   40,   40,   40,
       40,   40, 1413,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40, 1421, 1430,
     1430, 1430, 1430, 1430, 1430, 1423, 1423,   57,   57,   57,
       57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
       57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
       57,   57,   57,   57,   57, 1416, 1416, 1416, 1416, 1416,

     1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416,
     1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416,
     1416, 1416, 1416, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
     1409, 1431, 1417, 1409, 1432, 1409,  245, 1409, 1433, 1434,
      245,  245,  245,  245,  245,  245,  245,  245,  245,  245,
      245,  245,  245,  245,  245,  245,  245,  245,  245,  245,
      245,  245,  245,  245,  245, 1426, 1426, 1426, 1426,   20,
       20,   20,   20, 1435, 1435,  475,  475,  475,  475,  475,
      475,  475,  475,  475,  475,  475,  475,  475,  475, 1427,
     1426,   20,   20,  115,   20,  115,   20,   20,   20,   20,

       20,   98,   20,   20,   20,   20,   20,   20,   20,   20,
       20,   20,   20,   20,   20,   20, 1428, 1429, 1429,  130,
      130,  130,  130,  130,  130, 1409, 1409,  130,  130,  130,
      130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
      130,  130,  130,  130,  130,  130,  130,  130,  130,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40, 1436,
     1437, 1430, 1430, 1423, 1409, 1423, 1423, 1423, 1423,   57,
       57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
       57,   57,   57,   57,   57,   57,   57,   57,   57, 1416,

     1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416,
     1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1409,
     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1431, 1409,
     1417, 1432, 1438, 1439, 1409, 1439, 1434, 1434,  245,  245,
      245,  245,  245,  245,  434, 1440,  245,  245,  245,  245,
      245,  245,  245,  245,  245,  245,  245,  245,  245,  245,
      245,  245,  245,  245,  245,  245,  245,  245, 1426,   20,
       20,  434,  475, 1409,  475,  475,  475,  475,  475,  475,
      475,  475,  475,  475,  475,  475,  475,  475,  475,  475,
      475,  475,  475,  475,  475,  475,  475,  475,  475, 1426,

     1426, 1426,   20,   20, 1409,   20,   20,   20,   20,   20,
       20,   20,   20,   20,   20,   20,   20,   20,  115,   20,
       20, 1429, 1409, 1409, 1429, 1429,  130,  130,  130,  130,
      130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
      130,  130,  130,  130,  130,  130,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
     1436, 1436, 1437, 1409, 1409, 1409,   57,   57,   57,   57,
       57,   57,   57,   57,   57,   57,   57,   57,   57,   57,
     1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416,
     1416, 1416, 1416, 1416, 1409, 1409, 1409, 1409, 1409, 1409,

     1417, 1438, 1438, 1438, 1438, 1409, 1409, 1434, 1409, 1434,
     1434, 1441, 1434,  245,  245,  245,  245, 1440, 1438,  245,
      245,  245,  245,  245,  245,  245,  245,  245,  245,  245,
      245,  245,  245,  245,  245, 1426, 1426, 1426,   20,   20,
      475,  475,  475,  475,  475,  475,  672,  475,  475,  475,
      475,  475,  475,  475,  475,  475,  475,  475,  475,  475,
      475,  475,  475,  475,  475,  475,  475,  475,  475, 1442,
     1442,  871,  871,  871,  871,  871,  871,  871,  871,  871,
      871,  871,  871,  871,  871,  115,   20,   20,   20,   20,
      115,   20, 1409,   20,   20,  724, 1409,  130,  130,  130,

      130,  130,  130,  130,  130,  130,  130,  130,  130,  130,
      130,   40,   40,   40,   40,   40,   40,   57,   57,   57,
       57,   57,   57, 1416, 1416, 1416, 1416, 1416, 1416, 1409,
     1409, 1409, 1409, 1417, 1438, 1409, 1409, 1409, 1443, 1434,
     1409, 1434,  245,  245, 1438, 1438, 1438,  245,  245,  245,
      245,  245,  245,  245,  245,  245,  245,  245,  245,   20,
      115,  475,  475,  475,  475,  475,  475,  475,  475,  475,
      475,  475,  475,  475,  475,  475,  475,  475,  475,  475,
      475,  672,  871, 1409,  871,  871,  871,  871,  871,  871,
      871,  871,  871,  871,  871,  871,  871,  871,  871,  871,

      871,  871,  871,  871,  871,  871,  871,  871,  871, 1409,
       20,   20, 1409, 1444, 1444, 1015, 1015, 1015, 1015, 1015,
     1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,   20,
       20, 1429,  897,  130,  130,  130,  130,  130,  130,   40,
       40,   40,   40,   40,   57,   57,   57,   57,   57, 1416,
     1416, 1416, 1416, 1416, 1409, 1409, 1445, 1438, 1438, 1438,
      245,  245,  245,  245,  245,  245,  475,  475,  475,  475,
      475,  475,  475,  475,  475,  475,  475,  475,  475,  475,
      871,  871,  871,  871,  871,  871,  982,  871,  871,  871,
      871,  871,  871,  871,  871,  871,  871,  871,  871,  871,

      871,  871,  871,  871,  871,  871,  871,  871,  871, 1409,
     1446, 1447, 1448, 1448, 1114, 1114, 1114, 1114, 1114, 1114,
     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,  982, 1015,
     1409, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
     1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
     1015, 1015, 1015, 1015, 1015, 1015,  130,  130,  130,  130,
      130, 1409, 1449, 1450,  245,  245,  245,  245,  245,  475,
      475,  475,  475,  475,  475,  871,  871,  871,  871,  871,
      871,  871,  871,  871,  871,  871,  871,  871,  871,  871,
      871,  871,  871,  871,  871, 1446, 1447,  982, 1114, 1409,

     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
     1114, 1114, 1114, 1114, 1114, 1015, 1015, 1015, 1015, 1015,
     1015, 1129, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
     1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
     1015, 1015, 1015, 1015, 1451, 1450,  475,  475,  475,  475,
      475,  871,  871,  871,  871,  871,  871,  871,  871,  871,
      871,  871,  871,  871,  871, 1446, 1447, 1114, 1114, 1114,
     1114, 1114, 1114, 1232, 1114, 1114, 1114, 1114, 1114, 1114,
     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,

     1114, 1114, 1114, 1114, 1114, 1114, 1015, 1015, 1015, 1015,
     1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
     1015, 1015, 1015, 1015, 1015, 1015, 1451,  871,  871,  871,
      871,  871,  871, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
     1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
     1114, 1114, 1114, 1015, 1015, 1015, 1015, 1015, 1015, 1015,
     1015, 1015, 1015, 1015, 1015, 1015, 1015,  871,  871,  871,
      871,  871, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114,
     1114, 1114, 1114, 1114, 1114, 1114, 1015, 1015, 1015, 1015,
     1015, 1015, 1114, 1114, 1114, 1114, 1114, 1114, 1015, 1015,

     1015, 1015, 1015, 1114, 1114, 1114, 1114, 1114,    0, 1409,
     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
     1409
    } ;

static yyconst short int yy_nxt[4537] =
    {   0,
       10,   10,   11,   12,   10,   13,   14,   10,   10,   10,
       10,   10,   15,   10,   16,   10,   10,   10,   17,   17,
       10,   10,   18,   19,   20,   21,   22,   23,   24,   17,
       25,   17,   26,   17,   17,   17,   27,   28,   29,   30,
       31,   32,   33,   17,   17,   17,   34,   35,   10,   10,
       11,   10,   10,   10,   14,   10,   36,   10,   10,   10,
       15,   10,   16,   10,   10,   10,   37,   37,   10,   10,
       38,   39,   40,   41,   42,   43,   44,   37,   45,   37,
       46,   37,   37,   37,   37,   47,   48,   49,   50,   51,
       52,   37,   37,   37,   34,   53,   10,   54,   55,   54,

       10,   10,   14,   10,   10,   54,   10,   10,   15,   10,
       16,   10,   10,   10,   56,   56,   10,   10,   57,   58,
       59,   60,   61,   62,   63,   56,   64,   56,   65,   56,
       56,   56,   56,   66,   67,   68,   69,   70,   71,   56,
       56,   56,   34,   53,   10,   10,   11,   10,   10,   10,
       14,   10,   72,   10,   10,   10,   15,   10,   16,   10,
       10,   10,   73,   73,   10,   10,   74,   75,   76,   77,
       78,   79,   80,   73,   81,   73,   82,   73,   73,   73,
       73,   83,   84,   85,   86,   87,   88,   73,   73,   73,
       34,   53,   89,  198,   93,   98,   98,   98,   98,   98,

       98,   99,  183,  100,   99,  177,  100,  177,  218,  368,
      177,  219,   98,   98,   98,   90,   95,  101,   99,   91,
      100,  107,  101,  194,  101,   92,  101,  415,  177,  101,
      108,  101,  109,  101,  110,  101,  112,  102,  101,  113,
      101,  197,  416,  111,  114,  115,  177,  101,  103,   98,
       98,   98,  116,  101,  101,   99,  101,  100,  145,  145,
      145,  101,   93,  101,  146,  213,  101,  117,  101,  101,
      104,  118,  119,  101,  214,  101,  204,  105,  101,  101,
      101,  101,  177,  106,  238,  120,  121,  101,  124,  101,
      101,  101,  125,  101,  147,  122,  101,  127,  123,  377,

      177,  147,  126,  101,  128,  128,  128,  160, 1404,  221,
      147,  147,  128,  145,  145,  145,  222,  147,  147,  146,
      158,  129,  129,  159,  163,  130,  131,  132,  133,  134,
      135,  136,  129,  137,  129,  138,  129,  129,  129,  129,
      139,  140,  141,  142,  143,  144,  129,  129,  129,  145,
      145,  145,  148,  379,  177,  146,  145,  145,  145,  147,
      177,  147,  146,  153,  203,  205,  147,  189,  147,  190,
      177,  155,  154,  156,  147,  177,  147,  150,  191,  147,
     1399,  161,  157,  147,  151,  149,  147,  147,  162,  147,
      152,  164,  147,  326,  147,  147,  206,  147,  147,  301,

      147,  169,  165,  166,  147,  147,  147,  177,  147,  170,
      147,  171,  167,  172, 1374,  168,  173,  173,  173,  147,
      173,  173,  173,  320,  173,  184,  187,  235,  173,  175,
      175,  175,  185,  192,  236,  188,  193,  301,  186,  176,
      177,  177,  178,  177,  179,  195,  199,  200,  180,  233,
      380,  234,  196,  210,  225,  226,  201,  177,  177,  202,
      211,  215,  177,  216,  227,   89,  212,  228,  239,  239,
      239,  305,  217,  309,  301,  181,  175,  175,  175,  239,
      239,  239,  310,  101,  380,  177,  176,  301,   90,  178,
      101,  179,   91, 1368,  314,  180,  101,  315,   92,  100,

      100,  100,  301,  101,  241, 1409,  316,  319,  427,  301,
      101,  301,  301,  325,  101,  182,  101,  428,  263,  101,
      262,  101,  181,   98,   98,   98,  101,  101,  327,   99,
      265,  100,  101,  301,  370,  264,  177,  101, 1355,  195,
      244,  244,  177,  101,  245,  246,  247,  248,  249,  250,
      251,  244,  252,  244,  253,  244,  244,  244,  244,  254,
      255,  256,  257,  258,  259,  244,  244,  244,  101,  101,
      369,  268,  268,  268,  267,  101,  101,  269,  101,  100,
      266,  101,  101, 1347,  177,  101,  271,  328,  101,  101,
      101,  101,  273,  101,  272,  101,  101,  101,  301,  389,

      101,  101,  101,  276,  101,  275,  101,  274,  277,  177,
      270,  101,  268,  268,  268,  371,  361,  101,  269,  101,
      100,  278,  101, 1342,  281,  362,  101,  284,  363,  101,
      364,  283,  101,  177,  101,  101,  279,  101,  395,  282,
      101,  372,  101,  285,  101,  280,  101,  177,  177,  101,
      101,  290,  288,  101,  286,  287,  101,  378,  101,  101,
      101,  365,  177,  101,  101,  101,  291,  101,  292,  289,
      101,  101,  375,  101,  177,  101,  101,  293,  101,  294,
     1277,  413,  101,  296,  101,  297,  101,  295,  101,  373,
      299,  299,  299,  101,  298,  299,  299,  299,  414,  101,

      300,  381,  177,  302,  306,  300,  317,  177,  302,  303,
      311,  307,  312,  318,  303,  321,  322,  308,  301,  301,
      147,  313,  301,  520,  301,  323,  301,  147,  324,  145,
      145,  145,  147,  147,  304,  146,  523,  147,  384,  147,
      147,  330,  390,  177,  147,  147,  177,  147,  332,  329,
      147,  147,  147,  147,  301,  147,  331,  334,  147,  147,
      410,  147,  147,  333,  147,  147,  335,  335,  335,  147,
      147,  411,  336,  147,  147,  147,  387,  147,  338,  453,
      147,  147,  147,  147,  437,  147,  147,  341,  339,  147,
      340,  388,  147,  419,  177,  147,  147,  161,  147,  531,

      301,  420,  342,  147,  147,  337,  335,  335,  335,  147,
      424,  147,  336,  343,  147,  147,  344,  147,  425,  147,
      345,  147,  147,  350,  456,  348,  147,  147,  347,  437,
      147,  346,  147,  147,  446,  457,  147,  147,  351, 1276,
      147,  352,  349,  447,  147,  147,  147,  147,  437,  437,
      147,  353,  147,  354,  147,  356,  147,  357,  147,  382,
      147,  355,  543,  147,  358,  173,  173,  173,  385,  147,
      383,  177,  301,  173,  175,  175,  175,  421,  391,  422,
      177,  393, 1320,  394,  176,  386,  392,  178,  177,  179,
      522,  177,  301,  180,  239,  239,  239,  239,  239,  239,

      239,  239,  239,  442,  437,  448,  437,  449,  462,  451,
      464,  443,  452,  437,  521,  437,  450,  437,  444,  465,
      181,  175,  175,  175,  445,  454,  433,  463,  301,  437,
      437,  176,  455,  437,  178,  599,  179,  101,  437,  524,
      180,  458,  459,  177,  101,  301,  467,  468,  467,  470,
      277,  460,  437,  101,  461,  101,  101,  277,  101,  525,
      101,  529,  101,  301,  101,  101,  101,  181,  434,  434,
      434,  101,  301,  282,  435,  532,  533,  301,  436,  101,
      301,  438,  317,  439,  380,  301,  101,  440,  434,  434,
      434,  469,  101,  473,  435,  471,  472,  538,  436,  177,

      101,  438,  301,  439,  101,  492,  101,  440,  101,  534,
      301,  101,  101,  493,  535,  101,  494,  101,  544,  101,
      301,  101,  301,  549,  101,  101,  539,  441,  268,  268,
      268,  101,  495,  301,  269,  101,  100,  101,  301,  497,
      195,  380,  101,  540,  177,  474,  474,  177,  101,  475,
      476,  477,  478,  479,  480,  481,  474,  482,  474,  483,
      474,  474,  474,  474,  484,  485,  486,  487,  488,  489,
      474,  474,  474,  101,  498,  101,  502,  502,  502,  663,
      101,  101,  101,  437,  496,  101,  101,  101,  277,  499,
      101,  195,  101,  500,  101, 1315,  177,  101,  101,  101,

      101,  101,  195,  101,  501,  282,  101,  101,  101,  101,
      101,  195,  101,  101,  503,  101,  177,  101,  504,  585,
      101,  101,  101,  101,  746,  177,  101,  101,  580,  101,
      584,  505,  301,  177,  101,  101,  101,  506,  101,  507,
      101,  101,  508,  101,  536,  101,  177,  177,  101,  101,
      101,  101,  583,  509,  101,  537,  301,  101,  101,  510,
      586,  101,  512,  101,  641,  101,  437,  511,  101,  101,
      177,  101,  101,  515,  513,  282,  101,  514,  177,  101,
      101,  101,  101,  587,  195,  101,  101,  589,  101,  177,
      177,  516,  534,  177,  101,  299,  299,  299,  517,  517,

      517,  541,  526,  526,  526,  300,  517,  301,  302,  526,
      526,  526,  591,  545,  303,  527,  542,  147,  547,  301,
      548,  546,  527,  301,  147,  550,  177,  147,  301,  147,
      161,  161,  147, 1287,  147,  597,  147,  590,  147,  147,
      147,  528,  147,  177,  343,  177,  147,  553,  301,  581,
      582,  177,  147,  595,  147,  551,  552,  335,  335,  335,
      147,  147,  554,  336,  147,  147,  147,  177,  147,  161,
      555,  147,  147,  147,  147,  161,  556,  147,  147,  147,
      147,  592,  177,  147,  335,  335,  335,  147,  147,  147,
      336,  147,  596,  161,  343,  147,  147,  177,  147,  557,

      147,  147,  673,  147,  147,  147,  696,  147,  640,  147,
      594,  177,  147,  147,  558,  559,  147,  560,  147,  147,
      561,  147,  437,  147,  147,  598,  147,  731,  147,  147,
      642,  147,  147,  147,  147, 1199,  562,  147,  147,  563,
      147,  564,  565,  177,  301,  147,  566,  147,  437,  147,
      568,  147,  343,  643,  147,  567,  147,  147,  147,  437,
      147, 1277,  147,  147,  635,  147,  570,  570,  569,  601,
      602,  147,  175,  175,  175,  571,  571,  570,  572,  572,
      864,  570,  176,  570,  673,  178,  571,  179,  570,  572,
      571,  180,  571,  572,  636,  572,  662,  571,  639,  437,

      572,  628,  628,  628,  644,  648,  437,  437,  239,  239,
      239,  573,  573,  668,  630,  650,  437,  437,  181,  645,
      645,  645,  573,  437,  651,  646,  573,  454,  573,  437,
      437,  652,  437,  573,  574,  575,  574,  631,  655,  645,
      645,  645,  653,  437,  576,  646,  654,  577,  658,  656,
      437,  657,  437,  578,  367,  660,  437,  699,  647,  664,
      437,  666, 1409,  667, 1276,  659,  697,  665,  673,  437,
      661,  437,  673,  437,  669,  467,  468,  467,  437,  691,
      579,  434,  434,  434,  467,  468,  467,  435,  669, 1409,
      101,  436, 1263,  673,  438,  101,  439,  101,  101,  277,

      440,  669,  101,  101,  676,  101,  670,  673,  101,  101,
      677,  101,  277,  534,  687, 1257,  101,  678,  685,  673,
      469,  686,  101,  679,  680,  301,  673,  671,  673,  469,
      672,  672,  672,  681,  688, 1235,  435,  690,  673,  698,
      436,  689,  673,  674,  673,  439,  682,  673,  683,  440,
      672,  672,  672,  317,  673,  727,  435,  684,  301, 1130,
      436,  692,  693,  674,  317,  439,  700,  701,  700,  440,
      101,  694,  673,  301,  695,  101,  317,  101,  301,  101,
      703,  301,  101,  101,  704, 1189,  101,  317,  101,  675,
      101,  101,  101,  705,  705,  705,  534,  101,  101,  301,

      776,  301,  101,  101,  101,  706,  101,  707,  282,  101,
      708,  702,  769,  101,  101,  101,  177,  101,  101,  101,
      177,  101,  502,  502,  502,  101,  101,  101,  269,  710,
      101,  101,  709,  736,  101,  101,  301,  101,  101,  743,
      730,  101,  101,  101,  301,  101,  711,  101,  101,  712,
      101,  714,  282,  101,  713,  739,  301,  101,  301,  195,
      101,  715,  101,  101,  716,  101,  101,  717,  177,  101,
      101,  732,  101,  718,  101,  101,  733,  101,  101, 1184,
      734,  101,  101,  101,  101,  301,  719,  101,  720,  101,
      301,  101,  101,  317,  301,  101,  277,  101, 1165,  101,

      301,  721,  517,  517,  517,  101,  722,  723,  722,  737,
      517,  728,  729,  301,  761,  301,  724,  738,  742,  725,
      526,  526,  526,  741,  301,  726,  519,  526,  526,  526,
      300,  301,  301,  527,  744,  745,  147,  195,  177,  303,
      527,  147,  846,  147,  301,  161,  767,  762,  147,  147,
      147,  221,  147,  301,  147,  673,  177,  147,  161,  147,
      747,  570,  147,  147,  147,  147,  301,  147,  748,  147,
      571,  147,  749,  572,  147,  147,  147,  147,  147,  750,
      147,  147,  773,  147,  343,  147,  380,  177,  147,  147,
      147,  147,  751,  752,  147,  147,  177,  147,  343,  753,

      774,  570,  147,  754,  147,  177,  573,  147,  147,  756,
      571,  147,  755,  572,  147,  408,  147,  147,  757,  147,
      147,  147,  758,  147,  147,  771,  147,  177,  147,  147,
      759,  147,  147,  161,  147,  147,  147,  147,  577,  779,
      161,  770,  147,  147,  177,  367,  573,  772,  147,  147,
      177,  177,  760,  574,  575,  574,  778,  575,  575,  575,
      380,  177,  777,  576,  775,  653,  577,  764,  195,  195,
      765,  177,  578,  367,  177,  177,  180,  437,  177,  780,
      177,  454,  177,  628,  628,  628,  437,  628,  628,  628,
      239,  239,  239,  803,  804,  803,  630,  814,  454,  579,

      630,  653,  817,  766,  437,  815,  816,  437,  645,  645,
      645,  820,  437,  454,  646,  437,  821,  454,  822,  823,
      437,  454,  825,  801,  437,  437,  437,  437,  437,  437,
      437,  645,  645,  645,  828,  437,  437,  646,  805,  808,
      809,  808,  826,  827,  830,  437,  831,  653,  437,  810,
      832,  833,  811,  834,  812,  437,  835,  437,  813,  638,
      437,  437,  437,  842,  437,  836,  837,  836,  101,  101,
      437,  437,  672,  672,  672,  101,  101,  673,  669,  840,
      839,  101,  101,  841,  673,  674,  843,  844,  673,  845,
      847,  847,  847,  851,  673,  673,  646,  849,  852,  673,

      902,  688,  301,  673,  673,  673,  853,  673,  854,  673,
      838,  847,  847,  847,  855,  856,  858,  646,  859,  861,
      673,  673,  863,  865,  317,  301,  857,  673,  221,  848,
      673,  866,  673,  673,  862,  860,  867,  673,  868,  869,
      700,  701,  700,  700,  701,  700,  673, 1409,  101,  673,
      673,  101,  282,  669,  900,  101,  101,  317,  101,  669,
      101,  101,  301,  101,  101,  101,  301,  101,  886,  101,
      887,  195,  101,  101,  101,  534,  301,  888,  101,  889,
      904,  101,  177,  898,  907,  702,  101,  101,  702,  705,
      705,  705,  101,  301,  301,  269,  101,  100,  901,  903,

      301,  301,  301,  101,  534,  301,  870,  870,  277,  101,
      871,  872,  873,  874,  875,  876,  877,  870,  878,  870,
      879,  870,  870,  870,  870,  880,  881,  882,  883,  884,
      885,  870,  870,  870,  101,  101,  983,  910,  282,  101,
     1006,  101,  101,  101,  277,  277,  101,  101,  101,  301,
      101,  890,  101,  101,  101,  101,  101,  911,  301,  892,
      101,  277,  101,  893,  893,  893,  101,  101,  101,  101,
      891,  101,  905,  722,  723,  722,  101,  301,  101,  895,
      221,  894,  101,  724,  101,  906,  725,  101,  723,  723,
      723,  909,  726,  519,  317,  301,  101,  918,  300,  195,

      301,  302,  950,  177,  437,  177,  301,  303,  518,  896,
      517,  896,  518,  518,  518,  518,  518,  896,  518,  518,
      518,  518,  518,  518,  518,  518,  897,  897,  518,  519,
      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
      897,  897,  897,  897,  518,  518,  908,  317,  195,  919,
      380,  147,  920,  177,  177,  177,  761,  177,  147,  147,
      195,  301,  301,  912,  147,  177,  147,  147,  147,  913,
      147,  343,  147,  177,  147,  147, 1071,  147,  673,  147,
      147,  147,  161,  147,  761,  914,  147,  147,  147,  762,

      343,  161,  147,  161,  147,  147,  147,  147,  161,  147,
      147,  147,  380,  147,  147,  921,  161,  195, 1157,  147,
      147,  147,  147,  147,  161,  915,  177,  762,  147,  177,
      147,  147,  923,  177,  147,  916,  147,  922,  147,  917,
      195,  177,  177,  177,  147,  239,  239,  239, 1409,  803,
      804,  803,  803,  804,  803, 1409,  807,  936,  941,  454,
      935,  943,  935,  809,  809,  809,  949,  935,  437,  437,
      934,  437,  637,  937,  454,  437,  938,  942,  939,  945,
      946,  945,  440,  948,  653,  437,  951,  653,  437,  437,
      952,  437,  954,  955,  805,  957,  953,  805,  808,  809,

      808,  437,  437,  956,  437,  962,  454,  454,  810,  437,
      437,  811,  437,  812,  958,  959,  437,  813,  638,  437,
      688,  437, 1409,  673,  947,  673,  437,  836,  837,  836,
      836,  837,  836,  688,  669,  101,  854,  101,  688,  673,
      669,  965,  101, 1083,  101,  983,  966,  673,  101,  968,
      101,  688,  673,  960,  961,  963,  964,  673,  673,  673,
      847,  847,  847,  673,  967,  688,  646,  673,  974,  673,
      673,  854,  838,  971,  969,  838,  673,  973,  673,  847,
      847,  847,  972,  673,  673,  646,  976,  673,  673,  977,
      978,  673,  979,  854,  980,  673,  981,  986,  987, 1001,

      983,  990,  673,  673,  673,  988,  995, 1039,  673,  996,
      991,  989,  673,  983,  983,  983,  983,  301,  673,  982,
      982,  982,  992,  997,  993,  435, 1000, 1090,  983,  436,
      983,  983,  674,  994,  439,  998, 1002, 1003,  440, 1007,
     1009, 1010,  999,  534,  317,  983, 1004,  983,  983, 1005,
     1008,  983, 1034,  317, 1035,  983,  983,  301,  301,  301,
      301,  101,  301,  101,  984,  982,  982,  982,  101,  101,
      101,  435,  101, 1011,  101,  436,  101,  101,  674, 1037,
      439,  101,  101,  101,  440, 1012, 1036,  301,  101, 1013,
     1013, 1013,  101,  301,  101, 1070,  101,  277,  673,  101,

     1030,  101,  534,  101,  985,  101,  317,  317,  101,  101,
      984, 1031,  301,  101,  101,  317,  301,  301, 1047,  317,
      301, 1038,  101,  893,  893,  893,  147,  301, 1048,  269,
      301,  100,  177,  147, 1046,  177, 1057,  239, 1057,  147,
     1014, 1014,  177, 1041, 1015, 1016, 1017, 1018, 1019, 1020,
     1021, 1014, 1022, 1014, 1023, 1014, 1014, 1014, 1014, 1024,
     1025, 1026, 1027, 1028, 1029, 1014, 1014, 1014,  518, 1032,
      299, 1032,  518,  518,  518,  518,  518,  518,  518,  724,
     1033, 1033,  725,  518,  518,  518, 1033, 1033,  726,  519,
     1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033,

     1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033,
     1033, 1033, 1033, 1033,  518,  518,  147,  147,  195, 1072,
      147, 1042,  673,  147,  147,  161, 1068,  147,  147,  147,
      147,  177, 1043,  147, 1040,  147,  147, 1049, 1058, 1059,
     1058,  147, 1061,  147, 1062,  177, 1044, 1409,  437,  147,
      653,  935,  437,  945,  946,  945,  945,  946,  945,  935,
      653,  454, 1063,  437,  437,  454,  935,  437,  454,  454,
      437,  437,  454, 1065, 1104,  437,  454, 1064,  983,  437,
     1066,  437, 1067, 1060,  808,  809,  808,  437,  437,  101,
      437,  437,  673,  277,  810,  638,  101,  811,  947,  812,

      101,  947,  101,  813,  638,  688,  688,  673, 1069,  101,
      854,  673,  854,  673,  673, 1073,  673, 1074, 1075, 1076,
     1077,  688,  673, 1078, 1056, 1079,  688,  673,  673,  673,
     1080,  673,  982,  982,  982,  673,  673,  673,  673, 1082,
      673, 1081,  983, 1084, 1085, 1086, 1087, 1087, 1087, 1089,
      983,  983,  646,  983, 1091,  983,  998, 1092,  983,  983,
     1055,  983,  983, 1093,  983, 1087, 1087, 1087, 1094,  983,
     1095,  646, 1096, 1098, 1099, 1101,  983,  984,  983, 1103,
     1158,  301, 1176, 1097,  983, 1088,  983, 1105, 1109,  983,
     1102, 1100, 1107,  983, 1108, 1106, 1133,  983,  983, 1130,

      983,  101,  983, 1137,  983,  268,  268, 1010,  101, 1156,
     1144,  269, 1138,  100,  101, 1130,  277, 1130, 1054, 1147,
     1130, 1130,  474,  474, 1130, 1153,  475,  476,  477,  478,
      479,  480,  481,  474,  482,  474,  483,  474,  474,  474,
      474,  484,  485,  486,  487,  488,  489,  474,  474,  474,
     1110, 1111, 1134, 1139, 1163, 1140, 1163, 1148, 1180, 1135,
     1142, 1130, 1112, 1143, 1141, 1136, 1145, 1155, 1130,  101,
     1130, 1130, 1130, 1146, 1154,  983,  101, 1149, 1150, 1130,
     1130, 1159,  101, 1013, 1013, 1013,  317, 1151, 1130,  269,
     1152,  100,  688,  195, 1161,  301,  177, 1166,  437,  301,

     1113, 1113,  301,  673, 1114, 1115, 1116, 1117, 1118, 1119,
     1120, 1113, 1121, 1113, 1122, 1113, 1113, 1113, 1113, 1123,
     1124, 1125, 1126, 1127, 1128, 1113, 1113, 1113, 1129, 1129,
     1129,  454,  101,  101,  435,  282,  380,  277,  436,  101,
      101,  674, 1160,  439,  437,  101,  101,  440, 1032,  299,
     1032,  177,  147,  147,  854,  343,  301,  161,  724,  147,
      147,  725, 1057,  239, 1057,  147,  147,  726,  519,  673,
     1409,  195,  195, 1131, 1129, 1129, 1129,  335,  335,  335,
      435,  147,  935,  336,  436,  177,  177,  674,  147,  439,
     1167, 1162, 1111,  440,  147,  147,  161, 1053,  147,  161,

     1170,  688,  147, 1112,  437,  147,  673,  673,  147, 1168,
     1169,  147,  854, 1132, 1058, 1059, 1058, 1171,  437, 1131,
     1058, 1059, 1058,  437,  688,  673,  673,  935, 1172,  673,
      673,  688,  688,  688,  673, 1173, 1174, 1175,  998,  998,
     1179,  998,  673,  983,  673,  998,  983,  673,  673,  673,
      998, 1094,  983,  983,  983, 1177, 1178,  983,  983, 1060,
     1087, 1087, 1087, 1181,  983, 1060,  646, 1182, 1087, 1087,
     1087, 1094, 1183, 1185,  646, 1186,  983,  983, 1187, 1188,
      983,  983,  983,  983, 1191,  983, 1190,  983, 1192, 1193,
     1094, 1194,  983,  983, 1195, 1226, 1130, 1202,  983,  983,

     1199, 1203,  983, 1217,  221,  983, 1206,  983, 1204,  983,
       98,   98, 1110, 1111, 1205, 1207,   99, 1199,  100, 1199,
     1199, 1213, 1211, 1223, 1112, 1212, 1199,  244,  244, 1199,
     1199,  245,  246,  247,  248,  249,  250,  251,  244,  252,
      244,  253,  244,  244,  244,  244,  254,  255,  256,  257,
      258,  259,  244,  244,  244, 1198, 1198, 1198, 1208, 1199,
     1209,  435, 1216, 1222, 1214,  436, 1199, 1199,  674, 1210,
      439, 1215, 1218, 1219,  440, 1224, 1225, 1199, 1227, 1228,
     1199, 1130, 1220, 1199,  998, 1221, 1229, 1199, 1129, 1129,
     1129, 1230, 1130, 1231, 1234,  983, 1130, 1130, 1236, 1130,

     1200, 1198, 1198, 1198, 1130, 1237, 1130,  435, 1243, 1145,
     1130,  436, 1130, 1130,  674, 1052,  439, 1232, 1232, 1232,
      440, 1238, 1130,  646, 1232, 1232, 1232, 1239, 1130, 1240,
      646, 1241, 1244, 1131, 1249, 1130, 1246, 1248, 1130, 1163,
     1201, 1163, 1242, 1130, 1130, 1250, 1200, 1130, 1252, 1245,
     1253, 1247, 1254, 1251, 1130, 1130, 1233,  317, 1130,  526,
      526,  526, 1130, 1130,  317,  534, 1051,  301,  317, 1162,
     1111,  301,  527,  628,  628,  628,  454,  645,  645,  645,
      301, 1112,  301,  646,  454,  653,  630,  437,  454, 1259,
      437, 1258,  673,  688, 1260, 1262, 1261, 1274,  301, 1264,

      437,  998,  437,  673,  673,  983,  673,  983,  673,  983,
      983,  998,  983, 1266, 1265,  983,  437,  983, 1094,  983,
     1267, 1094,  983,  983, 1268, 1269, 1270, 1271, 1272,  998,
      983, 1273, 1275,  983,  998,  983,  983, 1279,  983, 1198,
     1198, 1198, 1281,  983,  983, 1280,  983, 1199,  983, 1278,
     1199, 1199, 1282, 1283, 1289, 1284, 1284, 1284, 1199, 1199,
     1199,  646, 1286, 1050, 1199, 1307, 1199, 1288, 1199, 1214,
     1290, 1199, 1199, 1284, 1284, 1284, 1291, 1199, 1293,  646,
     1292, 1296, 1295, 1130, 1200, 1298, 1199, 1199, 1301, 1294,
     1199, 1300, 1199, 1199, 1285, 1304, 1302, 1305, 1297, 1306,

     1299, 1199, 1145, 1199, 1303, 1199, 1199, 1130, 1145, 1199,
     1239, 1310, 1199, 1130, 1308, 1309, 1130, 1232, 1232, 1232,
     1311, 1145, 1130,  646, 1145, 1312, 1313, 1145, 1314, 1130,
     1317, 1130, 1130, 1239, 1318, 1130, 1130, 1130, 1130, 1130,
     1232, 1232, 1232, 1322, 1130, 1130,  646, 1316, 1130, 1324,
     1130, 1319, 1130, 1321, 1130, 1323, 1239, 1130, 1325, 1130,
     1130, 1326,  628,  628,  628,  688,  688,  854,  673, 1130,
      688, 1130,  847,  847,  847,  630, 1130, 1328,  646, 1130,
      673, 1329,  673,  983,  673, 1094,  998, 1330,  983,  983,
      998, 1094,  983,  998,  998, 1332,  983,  998,  983,  983,

     1331,  983, 1333, 1214, 1334, 1214,  983,  983, 1199,  983,
     1291,  673,  983, 1199,  983, 1335, 1336, 1199, 1337, 1199,
     1338, 1214, 1199, 1284, 1284, 1284, 1214, 1339, 1340, 1214,
     1291, 1346, 1199, 1199, 1199, 1199, 1199, 1199, 1284, 1284,
     1284, 1199, 1199, 1341,  646, 1343, 1199, 1345, 1199, 1344,
     1348, 1199, 1349, 1199, 1350, 1199, 1291, 1351, 1352, 1199,
     1145, 1199, 1353, 1145, 1130, 1354, 1199, 1199, 1200, 1130,
     1199, 1199, 1356, 1239, 1130, 1130, 1199, 1199, 1357, 1360,
     1130, 1130, 1358, 1359, 1130, 1361, 1130, 1239, 1130, 1362,
     1130, 1363, 1364, 1130, 1365, 1145, 1367, 1130, 1366, 1130,

     1145, 1130, 1369,  983, 1370, 1372,  998, 1130, 1130, 1130,
     1130, 1371, 1214,  983, 1130, 1214, 1199, 1373,  983,  983,
     1375, 1199, 1377, 1376, 1199,  983, 1199, 1199, 1199, 1291,
     1199, 1378, 1291, 1199, 1199, 1379, 1380, 1381, 1382, 1383,
     1214, 1199, 1384, 1045, 1385, 1214, 1199, 1199, 1239, 1199,
     1386, 1199, 1387, 1388, 1199, 1199, 1199, 1199, 1130, 1199,
     1145, 1130, 1130, 1389, 1130, 1145, 1130, 1239, 1145, 1145,
     1390, 1130, 1145, 1130, 1391, 1145,  998, 1392,  975, 1094,
     1130, 1130, 1130, 1393, 1130, 1130, 1130, 1130,  998, 1199,
      983, 1087, 1087, 1087,  983,  998, 1394,  646,  983, 1291,

     1214, 1291,  983, 1214, 1199, 1214, 1199, 1395, 1199, 1199,
     1214, 1214, 1199, 1199, 1214, 1396, 1199, 1397, 1199, 1400,
     1130, 1398, 1401, 1199, 1145, 1199, 1199, 1402, 1406, 1199,
      983, 1199, 1403, 1405, 1199, 1214, 1130, 1130, 1407, 1408,
     1130, 1130, 1199, 1145, 1232, 1232, 1232, 1199, 1199, 1239,
      646, 1145, 1199, 1145, 1130, 1214, 1291, 1130, 1214, 1284,
     1284, 1284,  970, 1214, 1130,  646, 1199, 1130,  819, 1199,
      243, 1199, 1199,  243,  944,  638,  638,  638,  936,  933,
      932,  931,  930, 1130,  929,  928,  927,  221,  221,  221,
      221,  408,  221,  926,  221,  408,  925,  924, 1199,   94,

      765,  571,  899,  519,  519,  850,   94,   94,   96,   96,
      673,   96,   96,   96,   96,   96,   96,   96,   96,   96,
       96,   96,   96,  101,  101,  101,  101,  101,  829,  101,
      824,  819,  101,  101,  147,  147,  147,  147,  638,  807,
      147,  806,  633,  147,  147,  174,  174,  174,  800,  174,
      799,  798,  797,  796,  174,  174,  177,  177,  177,  795,
      221,  177,  177,  177,  177,  177,  177,  177,  794,  177,
      207,  793,  221,  207,  207,  240,  240,  240,  792,  791,
      790,  240,  789,  788,  240,  240,  260,  260,  260,  260,
      260,  260,  260,  260,  260,  260,  260,  260,  260,  260,

      260,  301,  301,  301,  787,  408,  301,  301,  301,  786,
      301,  301,  301,  359,  359,  359,  785,  408,  359,  359,
      359,  359,  359,  359,  359,  784,  359,  360,  360,  360,
      360,  360,  360,  360,  360,  360,  360,  360,  360,  360,
      360,  360,  366,  366,  783,  366,  366,  366,  366,  366,
      366,  366,  366,  366,  366,  366,  366,  432,  432,  432,
      782,  781,  221,  221,  768,  367,  432,  432,  437,  437,
      437,  437,  367,  437,  437,  437,  437,  437,  437,  437,
      466,  466,  466,  466,  466,  466,  466,  466,  466,  466,
      466,  466,  466,  466,  466,  490,  490,  490,  490,  490,

      490,  490,  490,  490,  490,  490,  490,  490,  490,  490,
      129,  129,  129,  367,  129,  571,  740,  735,  519,  129,
      129,  518,  518,  491,  518,  518,  518,  518,  518,  518,
      518,  518,  518,  518,  518,  518,  364,  364,  364,  364,
      364,  364,  364,  364,  364,  364,  364,  364,  364,  364,
      364,  629,  629,  629,  649,  638,  437,  629,  629,  633,
      629,  629,  632,  632,  632,  632,  632,  632,  632,  632,
      632,  632,  632,  632,  632,  632,  632,  634,  634,  634,
      634,  634,  634,  634,  634,  634,  634,  634,  634,  634,
      634,  634,  637,  637,  627,  637,  637,  637,  637,  637,

      637,  637,  637,  637,  637,  637,  637,  673,  673,  673,
      673,  626,  673,  673,  673,  673,  673,  673,  673,  570,
      570,  570,  570,  570,  570,  625,  570,  570,  570,  570,
      570,  570,  570,  570,  763,  763,  624,  763,  763,  763,
      763,  763,  763,  763,  763,  763,  763,  763,  763,  802,
      802,  802,  802,  802,  802,  802,  802,  802,  802,  802,
      802,  802,  802,  802,  635,  635,  635,  635,  635,  635,
      635,  635,  635,  635,  635,  635,  635,  623,  635,  818,
      818,  818,  818,  818,  818,  818,  818,  818,  818,  818,
      818,  818,  818,  818,  940,  940,  940,  940,  940,  940,

      940,  940,  940,  940,  940,  940,  940,  940,  940,  983,
      983,  983,  983,  622,  983,  983,  983,  983,  983,  983,
      983,  983,  941,  941,  941,  941,  941,  941,  941,  941,
      941,  621,  941,  941,  941,  941,  941, 1130, 1130, 1130,
     1130,  620, 1130, 1130, 1130, 1130, 1130, 1130, 1130, 1130,
     1164, 1164, 1164,  619,  618,  408,  617,  616,  615, 1164,
     1164, 1196, 1196, 1196,  614, 1196, 1196, 1196, 1196, 1196,
     1196, 1196, 1196, 1196, 1196, 1196, 1197, 1197, 1197,  613,
     1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197, 1197,
     1197, 1199, 1199, 1199, 1199,  612, 1199, 1199, 1199, 1199,

     1199, 1199, 1199, 1199, 1255,  611, 1255,  610,  609,  608,
      607,  408,  221, 1255, 1255, 1256, 1256, 1256,  606,  605,
      221, 1256, 1256,  221, 1256, 1256, 1327,  604,  603, 1327,
     1327,  408,  221,  600,  221,  593,  588,  177,  367,  530,
      519,  301,  491,  261,  431,  430,  429,  426,  423,  418,
      417,  412,  409,  408,  407,  221,  406,  405,  404,  403,
      402,  401,  400,  399,  398,  397,  396,  177,  376,  374,
      178,  367,  177,  261,  242,  237,  232,  231,  230,  229,
      224,  223,  220,  209,  208,   97, 1409,    9, 1409, 1409,
     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,

     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
     1409, 1409, 1409, 1409, 1409, 1409
    } ;

static yyconst short int yy_chk[4537] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    5,    5,    5,    5,

        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
        5,    5,    5,    5,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,   12,   66,   13,   17,   17,   17,   18,   18,

       18,   17,   58,   17,   18,   58,   18,   66,   79,  182,
      182,   79,   19,   19,   19,   12,   13,   21,   19,   12,
       19,   21,   22,   63,   21,   12,   23,  227,   63,   22,
       21,   24,   22,   23,   22,   22,   23,   18,   24,   23,
       25,   65,  227,   22,   24,   25,   65,   25,   19,   20,
       20,   20,   25,   25,   26,   20,   27,   20,   37,   37,
       37,   26,   93,   27,   37,   77,   30,   26,   28,   27,
       20,   27,   28,   30,   77,   28,   69,   20,   29,   30,
       31,   28,   69,   20,   93,   29,   29,   31,   30,   32,
       33,   29,   31,   31,   44,   29,   32,   33,   29,  191,

      191,   44,   32,   33,   35,   35,   35,   44, 1393,   81,
       43,   46,   35,   38,   38,   38,   81,   43,   46,   38,
       43,   35,   35,   43,   46,   35,   35,   35,   35,   35,
       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,
       35,   35,   35,   35,   35,   35,   35,   35,   35,   39,
       39,   39,   38,  194,  194,   39,   40,   40,   40,   41,
       68,   42,   40,   41,   68,   70,   41,   61,   42,   61,
       70,   42,   41,   42,   42,   61,   45,   40,   61,   49,
     1387,   45,   42,   45,   40,   39,   49,   47,   45,   45,
       40,   47,   49,  142,   47,   48,   71,   50,   51,  142,

       47,   49,   48,   48,   50,   51,   52,   71,   48,   50,
       50,   51,   48,   52, 1337,   48,   54,   54,   54,   52,
       55,   55,   55,  139,   54,   59,   60,   91,   55,   56,
       56,   56,   59,   62,   91,   60,   62,  139,   59,   56,
       60,   62,   56,   59,   56,   64,   67,   67,   56,   90,
      381,   90,   64,   76,   84,   84,   67,   67,   64,   67,
       76,   78,  381,   78,   84,   89,   76,   84,   94,   94,
       94,  131,   78,  133,  131,   56,   57,   57,   57,   95,
       95,   95,  133,  101,  196,  196,   57,  133,   89,   57,
      101,   57,   89, 1328,  135,   57,  101,  135,   89,  100,

      100,  100,  135,  102,   95,  100,  136,  138,  235,  141,
      102,  136,  138,  141,  103,   57,  102,  235,  103,  104,
      102,  103,   57,   98,   98,   98,  104,  103,  143,   98,
      105,   98,  104,  143,  184,  104,  184,  105, 1310,  193,
       98,   98,  193,  105,   98,   98,   98,   98,   98,   98,
       98,   98,   98,   98,   98,   98,   98,   98,   98,   98,
       98,   98,   98,   98,   98,   98,   98,   98,  106,  107,
      183,  108,  108,  108,  107,  106,  107,  108,  109,  108,
      106,  106,  107, 1299,  183,  109,  109,  144,  111,  110,
      112,  109,  110,  113,  109,  111,  110,  112,  144,  202,

      113,  111,  110,  112,  114,  111,  113,  110,  113,  202,
      108,  114,  115,  115,  115,  185,  179,  114,  115,  117,
      115,  114,  116, 1294,  116,  179,  117,  118,  179,  116,
      179,  117,  117,  185,  118,  116,  115,  119,  206,  116,
      118,  186,  120,  119,  119,  115,  121,  186,  206,  120,
      119,  122,  121,  121,  119,  120,  277,  192,  122,  121,
      123,  179,  192,  124,  122,  277,  122,  123,  123,  121,
      124,  125,  189,  123,  189,  126,  124,  124,  125,  125,
     1277,  226,  126,  126,  125,  126,  127,  125,  126,  187,
      129,  129,  129,  127,  127,  130,  130,  130,  226,  127,

      129,  197,  187,  129,  132,  130,  137,  197,  130,  129,
      134,  132,  134,  137,  130,  140,  140,  132,  134,  137,
      147,  134,  132,  304,  304,  140,  140,  147,  140,  145,
      145,  145,  148,  147,  130,  145,  307,  149,  199,  148,
      150,  149,  203,  199,  149,  148,  203,  150,  151,  148,
      149,  152,  153,  150,  307,  151,  150,  153,  152,  153,
      224,  151,  155,  152,  152,  153,  154,  154,  154,  155,
      156,  224,  154,  157,  158,  155,  201,  156,  155,  251,
      157,  158,  159,  156,  251,  160,  157,  158,  156,  159,
      157,  201,  160,  230,  201,  159,  162,  159,  160,  313,

      313,  230,  160,  162,  163,  154,  161,  161,  161,  162,
      233,  163,  161,  162,  164,  165,  163,  163,  233,  166,
      164,  164,  165,  167,  253,  166,  166,  164,  165,  253,
      167,  164,  166,  168,  248,  254,  167,  169,  167, 1276,
      168,  168,  166,  248,  169,  170,  168,  171,  248,  254,
      169,  169,  170,  170,  171,  171,  172,  171,  170,  198,
      171,  170,  324,  172,  172,  173,  173,  173,  200,  172,
      198,  198,  324,  173,  174,  174,  174,  231,  204,  231,
      200,  205, 1247,  205,  174,  200,  204,  174,  204,  174,
      306,  205,  306,  174,  239,  239,  239,  240,  240,  240,

      241,  241,  241,  246,  256,  249,  246,  249,  256,  250,
      258,  247,  250,  249,  305,  258,  249,  250,  247,  259,
      174,  175,  175,  175,  247,  252,  241,  257,  305,  247,
      259,  175,  252,  257,  175,  395,  175,  262,  252,  308,
      175,  255,  255,  395,  262,  308,  261,  261,  261,  263,
      262,  255,  255,  264,  255,  494,  263,  264,  265,  309,
      264,  311,  263,  311,  494,  265,  264,  175,  244,  244,
      244,  265,  309,  265,  244,  314,  316,  316,  244,  266,
      314,  244,  315,  244,  393,  315,  266,  244,  245,  245,
      245,  261,  266,  267,  245,  266,  266,  321,  245,  393,

      267,  245,  321,  245,  270,  270,  267,  245,  271,  318,
      318,  270,  272,  271,  319,  271,  272,  270,  325,  272,
      319,  271,  325,  328,  273,  272,  322,  245,  268,  268,
      268,  273,  273,  328,  268,  275,  268,  273,  322,  275,
      376,  371,  275,  322,  371,  268,  268,  376,  275,  268,
      268,  268,  268,  268,  268,  268,  268,  268,  268,  268,
      268,  268,  268,  268,  268,  268,  268,  268,  268,  268,
      268,  268,  268,  274,  276,  278,  282,  282,  282,  462,
      274,  276,  278,  462,  274,  279,  274,  276,  278,  279,
      280,  368,  279,  280,  281, 1242,  368,  280,  279,  283,

      282,  281,  370,  280,  281,  283,  283,  281,  284,  282,
      285,  375,  283,  286,  284,  284,  370,  285,  285,  377,
      286,  284,  287,  285,  549,  375,  286,  288,  369,  287,
      374,  286,  549,  377,  288,  287,  290,  287,  289,  288,
      288,  291,  289,  290,  320,  289,  369,  374,  291,  290,
      292,  289,  373,  290,  291,  320,  320,  292,  293,  291,
      378,  294,  293,  292,  443,  293,  443,  292,  294,  295,
      373,  293,  296,  297,  294,  296,  295,  295,  378,  296,
      297,  298,  295,  382,  379,  296,  297,  384,  298,  379,
      384,  298,  547,  382,  298,  299,  299,  299,  300,  300,

      300,  323,  310,  310,  310,  299,  300,  547,  299,  317,
      317,  317,  386,  326,  299,  310,  323,  329,  327,  323,
      327,  326,  317,  326,  329,  330,  386,  331,  327,  332,
      329,  331,  330, 1209,  331,  392,  332,  385,  330,  333,
      331,  310,  332,  385,  332,  392,  333,  334,  317,  372,
      372,  372,  333,  390,  334,  333,  333,  335,  335,  335,
      334,  337,  337,  335,  339,  338,  340,  390,  337,  338,
      340,  339,  338,  340,  337,  339,  341,  339,  338,  340,
      342,  387,  387,  341,  343,  343,  343,  342,  344,  341,
      343,  345,  391,  342,  344,  344,  346,  391,  345,  345,

      347,  344,  486,  346,  345,  348,  486,  347,  442,  346,
      389,  389,  348,  347,  346,  347,  349,  348,  348,  350,
      349,  351,  442,  349,  352,  394,  350,  528,  351,  349,
      444,  352,  350,  354,  351, 1199,  350,  352,  353,  351,
      354,  352,  353,  394,  528,  353,  354,  355,  444,  356,
      357,  353,  356,  445,  355,  355,  356,  357,  358,  445,
      355, 1197,  356,  357,  439,  358,  360,  361,  358,  400,
      400,  358,  359,  359,  359,  360,  361,  362,  360,  361,
      696,  363,  359,  364,  696,  359,  362,  359,  365,  362,
      363,  359,  364,  363,  439,  364,  461,  365,  441,  441,

      365,  432,  432,  432,  446,  448,  461,  448,  433,  433,
      433,  360,  361,  465,  432,  450,  450,  446,  359,  447,
      447,  447,  362,  465,  451,  447,  363,  452,  364,  451,
      452,  453,  453,  365,  367,  367,  367,  433,  457,  454,
      454,  454,  455,  455,  367,  454,  456,  367,  459,  457,
      457,  458,  456,  367,  367,  460,  458,  489,  447,  463,
      459,  464,  466,  464, 1196,  459,  487,  463,  489,  463,
      460,  464,  487,  460,  466,  467,  467,  467,  454,  484,
      367,  434,  434,  434,  468,  468,  468,  434,  467,  469,
      470,  434, 1179,  484,  434,  471,  434,  470,  472,  470,

      434,  469,  471,  470,  476,  472,  472,  476,  471,  473,
      477,  472,  471,  535,  481, 1170,  473,  477,  480,  481,
      467,  480,  473,  477,  478,  535,  480,  473,  477,  468,
      474,  474,  474,  478,  482, 1140,  474,  483,  478,  488,
      474,  482,  483,  474,  488,  474,  479,  482,  479,  474,
      475,  475,  475,  520,  479,  521,  475,  479,  520, 1130,
      475,  485,  485,  475,  522,  475,  491,  491,  491,  475,
      492,  485,  485,  521,  485,  493,  533,  492,  522,  495,
      492,  533,  493,  492,  495, 1102,  495,  529,  493,  475,
      497,  498,  495,  496,  496,  496,  523,  497,  498,  523,

      593,  529,  499,  497,  498,  497,  500,  499,  498,  499,
      500,  491,  584,  500,  501,  499,  593,  496,  503,  500,
      584,  501,  502,  502,  502,  503,  496,  501,  502,  503,
      504,  503,  501,  538,  505,  506,  538,  504,  508,  545,
      525,  505,  506,  504,  545,  508,  504,  505,  506,  505,
      507,  508,  506,  509,  507,  541,  541,  507,  525,  580,
      509,  509,  510,  507,  510,  511,  509,  511,  580,  510,
      512,  531,  511,  512,  513,  510,  532,  512,  511, 1097,
      536,  513,  514,  512,  515,  531,  513,  513,  514,  514,
      536,  515,  516,  530,  532,  514,  516,  515, 1061,  516,

      530,  515,  517,  517,  517,  516,  519,  519,  519,  539,
      517,  524,  524,  524,  570,  539,  519,  540,  544,  519,
      526,  526,  526,  543,  543,  519,  519,  534,  534,  534,
      526,  540,  544,  526,  546,  548,  550,  581,  581,  526,
      534,  551,  680,  550,  546,  550,  582,  570,  551,  550,
      553, 1054,  552,  548,  551,  680,  582,  553,  551,  552,
      552,  572,  554,  553,  555,  552,  534,  556,  553,  554,
      572,  555,  554,  572,  556,  554,  557,  555,  558,  555,
      556,  559,  590,  557,  556,  558,  586,  586,  559,  557,
      561,  558,  557,  558,  559,  560,  590,  561,  559,  560,

      591,  573,  560,  561,  562,  591,  572,  563,  560,  563,
      573,  562,  562,  573,  563, 1053,  564,  562,  564,  565,
      563,  566,  565,  564,  567,  587,  565,  587,  566,  564,
      567,  567,  565,  566,  566,  568,  569,  567,  579,  597,
      569,  585,  568,  569,  585,  579,  573,  588,  568,  569,
      588,  597,  568,  574,  574,  574,  595,  575,  575,  575,
      589,  589,  594,  574,  592,  654,  574,  575,  599,  596,
      575,  595,  574,  574,  592,  596,  575,  654,  594,  598,
      598,  639,  599,  628,  628,  628,  639,  629,  629,  629,
      631,  631,  631,  633,  633,  633,  628,  640,  641,  574,

      629,  642,  644,  575,  642,  643,  643,  643,  645,  645,
      645,  647,  641,  648,  645,  640,  650,  649,  651,  655,
      644,  652,  657,  631,  649,  657,  652,  648,  647,  655,
      650,  653,  653,  653,  660,  660,  651,  653,  633,  638,
      638,  638,  658,  659,  662,  662,  663,  666,  658,  638,
      664,  665,  638,  667,  638,  664,  668,  659,  638,  638,
      663,  665,  666,  676,  668,  669,  669,  669,  670,  671,
      653,  667,  672,  672,  672,  670,  671,  676,  669,  671,
      670,  670,  671,  675,  675,  672,  677,  678,  677,  679,
      681,  681,  681,  684,  684,  679,  681,  682,  685,  682,

      734,  686,  734,  685,  686,  678,  687,  687,  689,  689,
      669,  688,  688,  688,  690,  691,  692,  688,  693,  694,
      690,  692,  695,  697,  728,  728,  691,  691, 1052,  681,
      693,  697,  695,  697,  694,  693,  698,  694,  698,  699,
      700,  700,  700,  701,  701,  701,  698,  702,  703,  699,
      688,  704,  703,  700,  731,  703,  706,  727,  704,  702,
      707,  703,  731,  706,  704,  708,  727,  707,  706,  706,
      708,  777,  708,  707,  709,  733,  733,  709,  708,  710,
      737,  709,  777,  729,  740,  700,  710,  709,  701,  705,
      705,  705,  710,  729,  737,  705,  712,  705,  732,  735,

      740,  732,  735,  712,  736,  736,  705,  705,  712,  712,
      705,  705,  705,  705,  705,  705,  705,  705,  705,  705,
      705,  705,  705,  705,  705,  705,  705,  705,  705,  705,
      705,  705,  705,  705,  711,  713,  882,  744,  713,  714,
      882,  711,  713,  715,  714,  715,  714,  711,  713,  744,
      715,  711,  714,  716,  717,  718,  715,  745,  745,  718,
      716,  717,  718,  719,  719,  719,  716,  717,  718,  720,
      716,  721,  738,  722,  722,  722,  720,  738,  721,  721,
     1050,  720,  720,  722,  721,  739,  722,  719,  723,  723,
      723,  742,  722,  722,  743,  739,  719,  767,  723,  770,

      743,  723,  823,  767,  823,  770,  742,  723,  724,  724,
      724,  724,  724,  724,  724,  724,  724,  724,  724,  724,
      724,  724,  724,  724,  724,  724,  724,  724,  724,  724,
      724,  724,  724,  724,  724,  724,  724,  724,  724,  724,
      724,  724,  724,  724,  724,  724,  724,  724,  724,  724,
      724,  724,  724,  724,  724,  724,  741,  746,  772,  768,
      773,  747,  771,  771,  772, 1046,  761,  768,  747,  748,
      774,  746,  741,  747,  747,  773,  748,  749,  751,  748,
      750,  749,  748,  774,  749,  751,  969,  750,  969,  752,
      749,  751,  750,  750,  762,  751,  752,  753,  754,  761,

      753,  752,  752,  754,  753,  754,  755,  756,  755,  757,
      753,  754,  769,  755,  756,  778,  757,  775, 1034,  755,
      756,  758,  757,  759,  756,  758,  769,  762,  758,  778,
      759,  760,  780,  775,  758,  759,  759,  779,  760,  760,
      776,  776,  780,  779,  760,  801,  801,  801,  802,  803,
      803,  803,  804,  804,  804,  805,  806,  806,  812,  814,
      802,  816,  803,  809,  809,  809,  821,  805,  814,  821,
      801,  816,  812,  809,  815,  815,  809,  812,  809,  819,
      819,  819,  809,  820,  822,  822,  824,  825,  825,  824,
      826,  820,  828,  829,  803,  831,  827,  804,  808,  808,

      808,  827,  828,  830,  826,  842,  832,  835,  808,  829,
      831,  808,  832,  808,  833,  834,  834,  808,  808,  830,
      841,  835,  838,  842,  819,  841,  833,  836,  836,  836,
      837,  837,  837,  843,  838,  839,  844,  840,  849,  844,
      836,  846,  839,  987,  840,  987,  848,  843,  839,  852,
      840,  850,  849,  839,  840,  845,  845,  845,  850,  846,
      847,  847,  847,  848,  851,  853,  847,  852,  861,  861,
      853,  855,  836,  858,  856,  837,  858,  860,  851,  854,
      854,  854,  859,  855,  856,  854,  863,  863,  859,  864,
      865,  860,  866,  867,  868,  865,  869,  872,  873,  880,

      872,  874,  866,  864,  869,  873,  876,  911,  867,  876,
      874,  873,  868,  880,  876,  874,  873,  911,  854,  870,
      870,  870,  875,  877,  875,  870,  879,  993,  877,  870,
      875,  879,  870,  875,  870,  878,  881,  881,  870,  883,
      885,  886,  878,  900,  906,  883,  881,  881,  878,  881,
      884,  885,  898,  901,  899,  884,  983,  900,  898,  901,
      906,  887,  899,  886,  870,  871,  871,  871,  887,  888,
      889,  871,  886,  888,  887,  871,  888,  889,  871,  909,
      871,  890,  888,  889,  871,  890,  902,  902,  890,  891,
      891,  891,  892,  909,  890,  967,  894,  892,  967,  892,

      894,  895,  904,  894,  871,  892,  903,  905,  895,  894,
      871,  895,  903,  891,  895,  907,  907,  904,  920,  908,
      905,  910,  891,  893,  893,  893,  913,  910,  922,  893,
      908,  893,  920,  913,  919,  919,  934,  934,  934,  913,
      893,  893,  922,  913,  893,  893,  893,  893,  893,  893,
      893,  893,  893,  893,  893,  893,  893,  893,  893,  893,
      893,  893,  893,  893,  893,  893,  893,  893,  897,  897,
      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,

      897,  897,  897,  897,  897,  897,  897,  897,  897,  897,
      897,  897,  897,  897,  897,  897,  912,  914,  921,  970,
      915,  914,  970,  912,  914,  915,  965,  915,  916,  912,
      914,  921,  916,  915,  912,  916,  917,  923,  935,  935,
      935,  916,  943,  917,  944,  923,  917,  947,  943,  917,
      948,  935,  944,  945,  945,  945,  946,  946,  946,  947,
      952,  949,  950,  950,  948,  951,  945,  949,  953,  955,
      955,  951,  954,  958, 1006,  952,  956,  957, 1006,  958,
      959,  953,  964,  935,  942,  942,  942,  956,  954,  960,
      959,  957,  964,  960,  942,  940,  960,  942,  945,  942,

      961,  946,  960,  942,  942,  962,  963,  963,  966,  961,
      968,  968,  971,  971,  962,  972,  966,  973,  974,  975,
      976,  978,  973,  977,  933,  979,  981,  978,  974,  972,
      980,  980,  982,  982,  982,  975,  976,  979,  977,  986,
      981,  985,  985,  988,  989,  990,  991,  991,  991,  992,
      989,  992,  991,  986,  994,  994,  996,  995,  990,  996,
      931,  988,  995,  997,  997,  998,  998,  998,  999,  999,
     1000,  998, 1001, 1002, 1003, 1004, 1000,  982, 1002, 1005,
     1035, 1035, 1082, 1001, 1001,  991, 1003, 1007, 1009, 1005,
     1004, 1003, 1008, 1004, 1008, 1007, 1016, 1007, 1009, 1016,

     1082, 1012, 1008, 1018,  998, 1010, 1010, 1010, 1012, 1029,
     1021, 1010, 1018, 1010, 1012, 1021, 1012, 1018,  929, 1023,
     1029, 1026, 1010, 1010, 1023, 1026, 1010, 1010, 1010, 1010,
     1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010,
     1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010, 1010,
     1011, 1011, 1017, 1019, 1056, 1019, 1056, 1024, 1088, 1017,
     1020, 1019, 1011, 1020, 1019, 1017, 1022, 1028, 1020, 1011,
     1017, 1024, 1028, 1022, 1027, 1088, 1011, 1025, 1025, 1022,
     1027, 1036, 1011, 1013, 1013, 1013, 1037, 1025, 1025, 1013,
     1025, 1013, 1077, 1047, 1039, 1036, 1047, 1062, 1062, 1037,

     1013, 1013, 1039, 1077, 1013, 1013, 1013, 1013, 1013, 1013,
     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013,
     1013, 1013, 1013, 1013, 1013, 1013, 1013, 1013, 1014, 1014,
     1014, 1064, 1030, 1031, 1014, 1030, 1048, 1031, 1014, 1030,
     1031, 1014, 1038, 1014, 1064, 1030, 1031, 1014, 1032, 1032,
     1032, 1048, 1043, 1040, 1073, 1043, 1038, 1040, 1032, 1043,
     1040, 1032, 1057, 1057, 1057, 1043, 1040, 1032, 1032, 1073,
     1060, 1045, 1049, 1014, 1015, 1015, 1015, 1041, 1041, 1041,
     1015, 1042, 1060, 1041, 1015, 1045, 1049, 1015, 1042, 1015,
     1063, 1055, 1055, 1015, 1042, 1044, 1042,  928, 1041, 1044,

     1067, 1070, 1044, 1055, 1063, 1041, 1067, 1070, 1044, 1065,
     1066, 1041, 1069, 1015, 1058, 1058, 1058, 1068, 1066, 1015,
     1059, 1059, 1059, 1065, 1072, 1068, 1069, 1058, 1071, 1071,
     1072, 1074, 1075, 1076, 1076, 1078, 1079, 1080, 1081, 1083,
     1086, 1093, 1079, 1081, 1074, 1090, 1093, 1080, 1075, 1078,
     1089, 1084, 1090, 1083, 1084, 1085, 1085, 1085, 1086, 1058,
     1087, 1087, 1087, 1091, 1089, 1059, 1087, 1092, 1094, 1094,
     1094, 1095, 1096, 1098, 1094, 1099, 1098, 1091, 1100, 1101,
     1101, 1099, 1096, 1095, 1104, 1092, 1103, 1103, 1105, 1106,
     1107, 1108, 1100, 1105, 1109, 1132, 1132, 1115, 1104, 1106,

     1115, 1116, 1109, 1123,  927, 1107, 1117, 1094, 1116, 1108,
     1110, 1110, 1110, 1110, 1116, 1117, 1110, 1123, 1110, 1116,
     1117, 1120, 1119, 1126, 1110, 1119, 1120, 1110, 1110, 1126,
     1119, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
     1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110, 1110,
     1110, 1110, 1110, 1110, 1110, 1113, 1113, 1113, 1118, 1125,
     1118, 1113, 1122, 1125, 1121, 1113, 1118, 1122, 1113, 1118,
     1113, 1121, 1124, 1124, 1113, 1127, 1128, 1121, 1133, 1134,
     1127, 1134, 1124, 1124, 1272, 1124, 1135, 1128, 1129, 1129,
     1129, 1136, 1133, 1137, 1139, 1272, 1139, 1136, 1141, 1141,

     1113, 1114, 1114, 1114, 1135, 1142, 1137, 1114, 1149, 1143,
     1142, 1114, 1143, 1149, 1114,  926, 1114, 1138, 1138, 1138,
     1114, 1144, 1144, 1138, 1145, 1145, 1145, 1146, 1146, 1147,
     1145, 1148, 1150, 1129, 1153, 1147, 1151, 1152, 1153, 1163,
     1114, 1163, 1148, 1148, 1150, 1154, 1114, 1152, 1155, 1150,
     1155, 1151, 1156, 1154, 1151, 1154, 1138, 1157, 1155, 1158,
     1158, 1158, 1156, 1145, 1159, 1160,  925, 1159, 1161, 1162,
     1162, 1157, 1158, 1164, 1164, 1164, 1165, 1166, 1166, 1166,
     1160, 1162, 1161, 1166, 1167, 1168, 1164, 1167, 1169, 1172,
     1165, 1171, 1171, 1173, 1174, 1178, 1175, 1193, 1158, 1180,

     1168, 1176, 1169, 1172, 1175, 1178, 1173, 1180, 1174, 1193,
     1176, 1177, 1177, 1183, 1181, 1183, 1166, 1181, 1182, 1182,
     1184, 1185, 1185, 1184, 1186, 1187, 1188, 1189, 1190, 1192,
     1187, 1191, 1194, 1194, 1195, 1192, 1188, 1202, 1186, 1198,
     1198, 1198, 1204, 1189, 1190, 1203, 1191, 1203, 1195, 1201,
     1201, 1202, 1205, 1206, 1211, 1207, 1207, 1207, 1205, 1211,
     1204, 1207, 1208,  924, 1208, 1227, 1206, 1210, 1210, 1212,
     1213, 1213, 1212, 1214, 1214, 1214, 1215, 1215, 1217, 1214,
     1216, 1219, 1218, 1227, 1198, 1220, 1216, 1218, 1222, 1217,
     1217, 1221, 1222, 1219, 1207, 1224, 1223, 1224, 1219, 1225,

     1220, 1221, 1226, 1220, 1223, 1224, 1223, 1226, 1228, 1225,
     1229, 1231, 1214, 1229, 1230, 1230, 1230, 1232, 1232, 1232,
     1233, 1234, 1228, 1232, 1235, 1236, 1237, 1238, 1241, 1231,
     1244, 1235, 1238, 1240, 1245, 1234, 1244, 1233, 1241, 1236,
     1239, 1239, 1239, 1249, 1237, 1240, 1239, 1243, 1245, 1251,
     1243, 1246, 1246, 1248, 1248, 1250, 1252, 1249, 1253, 1251,
     1250, 1254, 1256, 1256, 1256, 1259, 1257, 1260, 1259, 1254,
     1261, 1252, 1258, 1258, 1258, 1256, 1253, 1262, 1258, 1239,
     1257, 1263, 1260, 1262, 1261, 1264, 1265, 1266, 1266, 1263,
     1267, 1268, 1265, 1270, 1269, 1274, 1267, 1271, 1271, 1264,

     1273, 1274, 1275, 1278, 1279, 1280, 1268, 1269, 1278, 1270,
     1281, 1258, 1275, 1281, 1273, 1282, 1282, 1282, 1283, 1280,
     1285, 1286, 1279, 1284, 1284, 1284, 1287, 1288, 1289, 1290,
     1292, 1298, 1298, 1287, 1290, 1286, 1283, 1285, 1291, 1291,
     1291, 1288, 1292, 1293, 1291, 1295, 1289, 1297, 1295, 1296,
     1300, 1300, 1301, 1293, 1302, 1296, 1304, 1303, 1305, 1302,
     1307, 1297, 1306, 1308, 1308, 1309, 1301, 1303, 1284, 1307,
     1306, 1304, 1311, 1313, 1313, 1309, 1305, 1291, 1312, 1317,
     1311, 1312, 1314, 1315, 1314, 1318, 1315, 1316, 1316, 1319,
     1318, 1320, 1321, 1317, 1322, 1323, 1325, 1325, 1324, 1319,

     1326, 1323, 1329, 1329, 1330, 1333, 1331, 1320, 1321, 1322,
     1324, 1332, 1334, 1333, 1326, 1335, 1335, 1336, 1330, 1331,
     1338, 1334, 1341, 1339, 1341, 1332, 1339, 1336, 1338, 1340,
     1340, 1342, 1343, 1343, 1342, 1344, 1345, 1346, 1347, 1348,
     1350, 1345, 1349,  918, 1351, 1353, 1350, 1346, 1356, 1344,
     1352, 1352, 1354, 1355, 1347, 1348, 1351, 1349, 1354, 1353,
     1357, 1355, 1356, 1358, 1358, 1359, 1357, 1360, 1361, 1362,
     1365, 1359, 1363, 1363, 1366, 1364, 1368, 1367,  862, 1371,
     1366, 1361, 1360, 1373, 1365, 1362, 1364, 1367, 1372, 1373,
     1368, 1369, 1369, 1369, 1371, 1370, 1374, 1369, 1370, 1375,

     1376, 1379, 1372, 1378, 1374, 1380, 1376, 1377, 1377, 1378,
     1381, 1382, 1382, 1375, 1383, 1384, 1379, 1385, 1380, 1388,
     1388, 1386, 1389, 1385, 1390, 1383, 1381, 1391, 1395, 1384,
     1369, 1386, 1392, 1394, 1394, 1396, 1389, 1390, 1397, 1398,
     1392, 1391, 1395, 1399, 1400, 1400, 1400, 1398, 1396, 1402,
     1400, 1401, 1397, 1403, 1401, 1404, 1407, 1399, 1408, 1405,
     1405, 1405,  857, 1406, 1402, 1405, 1406, 1403,  818, 1404,
     1418, 1407, 1408, 1418,  817,  813,  811,  810,  807,  800,
      799,  798,  797, 1400,  794,  793,  792,  791,  790,  789,
      788,  787,  786,  785,  784,  783,  782,  781, 1405, 1410,

      766,  763,  730,  726,  725,  683, 1410, 1410, 1411, 1411,
      673, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411,
     1411, 1411, 1411, 1412, 1412, 1412, 1412, 1412,  661, 1412,
      656,  646, 1412, 1412, 1413, 1413, 1413, 1413,  637,  635,
     1413,  634,  632, 1413, 1413, 1414, 1414, 1414,  627, 1414,
      626,  625,  624,  623, 1414, 1414, 1415, 1415, 1415,  622,
      619, 1415, 1415, 1415, 1415, 1415, 1415, 1415,  618, 1415,
     1416,  617,  616, 1416, 1416, 1417, 1417, 1417,  615,  614,
      613, 1417,  612,  611, 1417, 1417, 1419, 1419, 1419, 1419,
     1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1419,

     1419, 1420, 1420, 1420,  610,  609, 1420, 1420, 1420,  608,
     1420, 1420, 1420, 1421, 1421, 1421,  607,  606, 1421, 1421,
     1421, 1421, 1421, 1421, 1421,  605, 1421, 1422, 1422, 1422,
     1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422,
     1422, 1422, 1423, 1423,  604, 1423, 1423, 1423, 1423, 1423,
     1423, 1423, 1423, 1423, 1423, 1423, 1423, 1424, 1424, 1424,
      603,  602,  601,  600,  583,  578, 1424, 1424, 1425, 1425,
     1425, 1425,  577, 1425, 1425, 1425, 1425, 1425, 1425, 1425,
     1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426, 1426,
     1426, 1426, 1426, 1426, 1426, 1427, 1427, 1427, 1427, 1427,

     1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427,
     1428, 1428, 1428,  576, 1428,  571,  542,  537,  518, 1428,
     1428, 1429, 1429,  490, 1429, 1429, 1429, 1429, 1429, 1429,
     1429, 1429, 1429, 1429, 1429, 1429, 1430, 1430, 1430, 1430,
     1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430, 1430,
     1430, 1431, 1431, 1431,  449,  440,  437, 1431, 1431,  435,
     1431, 1431, 1432, 1432, 1432, 1432, 1432, 1432, 1432, 1432,
     1432, 1432, 1432, 1432, 1432, 1432, 1432, 1433, 1433, 1433,
     1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433,
     1433, 1433, 1434, 1434,  431, 1434, 1434, 1434, 1434, 1434,

     1434, 1434, 1434, 1434, 1434, 1434, 1434, 1435, 1435, 1435,
     1435,  430, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1436,
     1436, 1436, 1436, 1436, 1436,  429, 1436, 1436, 1436, 1436,
     1436, 1436, 1436, 1436, 1437, 1437,  428, 1437, 1437, 1437,
     1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1437, 1438,
     1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438, 1438,
     1438, 1438, 1438, 1438, 1439, 1439, 1439, 1439, 1439, 1439,
     1439, 1439, 1439, 1439, 1439, 1439, 1439,  427, 1439, 1440,
     1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440, 1440,
     1440, 1440, 1440, 1440, 1441, 1441, 1441, 1441, 1441, 1441,

     1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1441, 1442,
     1442, 1442, 1442,  426, 1442, 1442, 1442, 1442, 1442, 1442,
     1442, 1442, 1443, 1443, 1443, 1443, 1443, 1443, 1443, 1443,
     1443,  425, 1443, 1443, 1443, 1443, 1443, 1444, 1444, 1444,
     1444,  424, 1444, 1444, 1444, 1444, 1444, 1444, 1444, 1444,
     1445, 1445, 1445,  423,  422,  421,  420,  419,  418, 1445,
     1445, 1446, 1446, 1446,  417, 1446, 1446, 1446, 1446, 1446,
     1446, 1446, 1446, 1446, 1446, 1446, 1447, 1447, 1447,  416,
     1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447, 1447,
     1447, 1448, 1448, 1448, 1448,  415, 1448, 1448, 1448, 1448,

     1448, 1448, 1448, 1448, 1449,  414, 1449,  413,  412,  411,
      410,  409,  407, 1449, 1449, 1450, 1450, 1450,  406,  405,
      404, 1450, 1450,  403, 1450, 1450, 1451,  402,  401, 1451,
     1451,  399,  398,  397,  396,  388,  383,  380,  366,  312,
      303,  301,  269,  260,  238,  237,  236,  234,  232,  229,
      228,  225,  223,  222,  220,  219,  218,  217,  216,  215,
      214,  213,  212,  211,  210,  209,  208,  195,  190,  188,
      181,  180,  177,   99,   96,   92,   88,   87,   86,   85,
       83,   82,   80,   75,   74,   15,    9, 1409, 1409, 1409,
     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,

     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
     1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409,
     1409, 1409, 1409, 1409, 1409, 1409
    } ;

static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;

/* The intent behind this definition is that it'll catch
 * any uses of REJECT which flex missed.
 */
#define REJECT reject_used_but_not_detected
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
char *yytext;
#line 1 "scan_c.l"
#define INITIAL 0
/*
 * FILE:        scan_c.l
 *
 * DESCRIPTION: This is the lex file used to parse a C source code.
 */
#line 8 "scan_c.l"
/*
 * freescope - Free source browser
 * Copyright (C) 2001  Olivier Deme
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 */


#ifdef HAVE_CONFIG_H
#include <config.h>
#endif /* HAVE_CONFIG_H */

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <limits.h>
#include <unistd.h>
#include <sys/mman.h>

#include "parser.h"

#ifndef MAP_FILE
#define MAP_FILE 0      /* for systems other than 4.3+BSD */
#endif /* MAP_FILE */

#define FILE_MODE       (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)

    void scan_c (char*, size_t);
    static int strip_comments (register char*, register char*, off_t);
    static int is_native_type (register char*, size_t);

    size_t       scope_length;
    char         scope [255];
    char         file [255];
    size_t       file_length;
    int          scope_level  = 0;
    int          call_level   = 0;
    line_nbr_t   lineno;

#define FC 1

#define MULTI_DECL 2

#define FUNC_ARG 3

#define YY_STACK_USED 1
#line 1903 "lex.yy.c"

/* Macros after this point can all be overridden by user definitions in
 * section 1.
 */

#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
extern "C" int yywrap YY_PROTO(( void ));
#else
extern int yywrap YY_PROTO(( void ));
#endif
#endif

#ifndef YY_NO_UNPUT
static void yyunput YY_PROTO(( int c, char *buf_ptr ));
#endif

#ifndef yytext_ptr
static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
#endif

#ifdef YY_NEED_STRLEN
static int yy_flex_strlen YY_PROTO(( yyconst char * ));
#endif

#ifndef YY_NO_INPUT
#ifdef __cplusplus
static int yyinput YY_PROTO(( void ));
#else
static int input YY_PROTO(( void ));
#endif
#endif

#if YY_STACK_USED
static int yy_start_stack_ptr = 0;
static int yy_start_stack_depth = 0;
static int *yy_start_stack = 0;
#ifndef YY_NO_PUSH_STATE
static void yy_push_state YY_PROTO(( int new_state ));
#endif
#ifndef YY_NO_POP_STATE
static void yy_pop_state YY_PROTO(( void ));
#endif
#ifndef YY_NO_TOP_STATE
static int yy_top_state YY_PROTO(( void ));
#endif

#else
#define YY_NO_PUSH_STATE 1
#define YY_NO_POP_STATE 1
#define YY_NO_TOP_STATE 1
#endif

#ifdef YY_MALLOC_DECL
YY_MALLOC_DECL
#else
#if __STDC__
#ifndef __cplusplus
#include <stdlib.h>
#endif
#else
/* Just try to get by without declaring the routines.  This will fail
 * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
 * or sizeof(void*) != sizeof(int).
 */
#endif
#endif

/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
#define YY_READ_BUF_SIZE 8192
#endif

/* Copy whatever the last rule matched to the standard output. */

#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
 * we now use fwrite().
 */
#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
#endif

/* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
 * is returned in "result".
 */
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
	if ( yy_current_buffer->yy_is_interactive ) \
		{ \
		int c = '*', n; \
		for ( n = 0; n < max_size && \
			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( yyin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
		  && ferror( yyin ) ) \
		YY_FATAL_ERROR( "input in flex scanner failed" );
#endif

/* No semi-colon after return; correct usage is to write "yyterminate();" -
 * we don't want an extra ';' after the "return" because that will cause
 * some compilers to complain about unreachable statements.
 */
#ifndef yyterminate
#define yyterminate() return YY_NULL
#endif

/* Number of entries by which start-condition stack grows. */
#ifndef YY_START_STACK_INCR
#define YY_START_STACK_INCR 25
#endif

/* Report a fatal error. */
#ifndef YY_FATAL_ERROR
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL int yylex YY_PROTO(( void ))
#endif

/* Code executed at the beginning of each rule, after yytext and yyleng
 * have been set up.
 */
#ifndef YY_USER_ACTION
#define YY_USER_ACTION
#endif

/* Code executed at the end of each rule. */
#ifndef YY_BREAK
#define YY_BREAK break;
#endif

#define YY_RULE_SETUP \
	YY_USER_ACTION

YY_DECL
	{
	register yy_state_type yy_current_state;
	register char *yy_cp, *yy_bp;
	register int yy_act;

#line 116 "scan_c.l"


#line 2057 "lex.yy.c"

	if ( yy_init )
		{
		yy_init = 0;

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

		if ( ! yy_start )
			yy_start = 1;	/* first start state */

		if ( ! yyin )
			yyin = stdin;

		if ( ! yyout )
			yyout = stdout;

		if ( ! yy_current_buffer )
			yy_current_buffer =
				yy_create_buffer( yyin, YY_BUF_SIZE );

		yy_load_buffer_state();
		}

	while ( 1 )		/* loops until end-of-file is reached */
		{
		yy_cp = yy_c_buf_p;

		/* Support of yytext. */
		*yy_cp = yy_hold_char;

		/* yy_bp points to the position in yy_ch_buf of the start of
		 * the current run.
		 */
		yy_bp = yy_cp;

		yy_current_state = yy_start;
yy_match:
		do
			{
			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
			if ( yy_accept[yy_current_state] )
				{
				yy_last_accepting_state = yy_current_state;
				yy_last_accepting_cpos = yy_cp;
				}
			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
				{
				yy_current_state = (int) yy_def[yy_current_state];
				if ( yy_current_state >= 1410 )
					yy_c = yy_meta[(unsigned int) yy_c];
				}
			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
			++yy_cp;
			}
		while ( yy_base[yy_current_state] != 4488 );

yy_find_action:
		yy_act = yy_accept[yy_current_state];
		if ( yy_act == 0 )
			{ /* have to back up */
			yy_cp = yy_last_accepting_cpos;
			yy_current_state = yy_last_accepting_state;
			yy_act = yy_accept[yy_current_state];
			}

		YY_DO_BEFORE_ACTION;


do_action:	/* This label is used only to access EOF actions. */


		switch ( yy_act )
	{ /* beginning of action switch */
			case 0: /* must back up */
			/* undo the effects of YY_DO_BEFORE_ACTION */
			*yy_cp = yy_hold_char;
			yy_cp = yy_last_accepting_cpos;
			yy_current_state = yy_last_accepting_state;
			goto yy_find_action;

case 1:
YY_RULE_SETUP
#line 118 "scan_c.l"
{
}
	YY_BREAK
case 2:
YY_RULE_SETUP
#line 121 "scan_c.l"
{
    ++lineno;
}
	YY_BREAK
case 3:
YY_RULE_SETUP
#line 125 "scan_c.l"
{
    ++scope_level;
}
	YY_BREAK
case 4:
YY_RULE_SETUP
#line 129 "scan_c.l"
{
    if ((scope_level != 0) && (--scope_level == 0))
    {
        strcpy(scope, GLOBAL_SCOPE);
        scope_length = GLOBAL_SCOPE_LENGTH;
    }

    if (YYSTATE != INITIAL)
        yy_pop_state();
}
	YY_BREAK
case 5:
YY_RULE_SETUP
#line 140 "scan_c.l"
{
    while (YYSTATE != INITIAL)
        yy_pop_state();
}
	YY_BREAK
case 6:
YY_RULE_SETUP
#line 145 "scan_c.l"
{
    /* extern ... */
    yyless(6);
    yy_push_state(FUNC_ARG);
}
	YY_BREAK
case 7:
YY_RULE_SETUP
#line 151 "scan_c.l"
{
}
	YY_BREAK
case 8:
YY_RULE_SETUP
#line 154 "scan_c.l"
{
}
	YY_BREAK
case 9:
YY_RULE_SETUP
#line 157 "scan_c.l"
{
    yy_pop_state();
}
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 161 "scan_c.l"
{
    add2db(ANY,
           yytext,
           yyleng,
           scope,
           scope_length,
           lineno);
}
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 170 "scan_c.l"
{
}
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 173 "scan_c.l"
{
    /*
     * This is something like if (...) { ...
     * We need to go back to the opening bracket since we might have a function
     * call inside (or something else).
     */

    register size_t length = 0;

    /* Find the '(' */

    while (yytext[length] != '(')
    {
        if (yytext[length] == '\n')
            ++lineno;
        ++length;
    }

    yyless(length);
}
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 194 "scan_c.l"
{
    /*
     * This is something like else if (...) { ...
     * We need to go back to the opening bracket since we might have a function
     * call inside (or something else).
     */

    register size_t length = 0;

    /* Find the '(' */

    while (yytext[length] != '(')
    {
        if (yytext[length] == '\n')
            ++lineno;
        ++length;
    }

    yyless(length);
}
	YY_BREAK
case 14:
#line 216 "scan_c.l"
case 15:
YY_RULE_SETUP
#line 216 "scan_c.l"
{
    /*
     * func (type1 arg1, type2 arg2, etc...) {
     */

    register size_t length = 0; 
    
    /* Get symbol length */
    while ((yytext[length] != ' ') &&
           (yytext[length] != '(') &&
           (yytext[length] != '\n'))
        ++length;
    
    add2db(DEFINITION,
           yytext,
           length,
           scope,
           scope_length,
           lineno);

    strncpy(scope, yytext, length);
    scope[length] = '\0';
    scope_length = length;

    yyless(length);
    yy_push_state(FUNC_ARG);
}
	YY_BREAK
case 16:
#line 245 "scan_c.l"
case 17:
YY_RULE_SETUP
#line 245 "scan_c.l"
{
    /*
     * symbol func (type1 arg1, type2 arg2, etc...) {
     * symbol ** func (type1 arg1, type2 arg2, etc...) {
     */

    register size_t length = 0; 
    register char*  p      = yytext;

    /* Get return type */
    while ((*p != ' ') && (*p != '*') && (*p != '\n'))
        ++p;

    if (!is_native_type(yytext, p - yytext))
    {
        add2db(ANY,
               yytext,
               p - yytext,
               scope,
               scope_length,
               lineno);
    }
        
    /* Skip '*' and spaces */
    while ((*p == ' ') || (*p == '*') || (*p == '\n'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }

    /* Get function name */
    while ((p[length] != ' ') && (p[length] != '(') && (p[length] != '\n'))
        ++length;

    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    strncpy(scope, p, length);
    scope[length] = '\0';
    scope_length = length;
    
    yyless(length + (p - yytext));
    yy_push_state(FUNC_ARG);
}
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 295 "scan_c.l"
{
    /*
     * This is something like if (...)
     * We need to go back to the opening bracket since we might have a function
     * call inside (or something else).
     */

    register size_t length = 0;

    /* Find the '(' */

    while (yytext[length] != '(')
    {
        if (yytext[length] == '\n')
            ++lineno;
        ++length;
    }

    yyless(length);
}
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 316 "scan_c.l"
{ 
    register size_t length = 0; 
    
    /* Get symbol length */
    while ((yytext[length] != ' ') &&
           (yytext[length] != '(') &&
           (yytext[length] != '\n'))
        ++length;
    
    if (strcmp(scope, GLOBAL_SCOPE) != 0)
    {
        add2db(FUNC_CALL,
               yytext,
               length,
               scope,
               scope_length,
               lineno);
    }
    else
    {
        add2db(ANY,
               yytext,
               length,
               scope,
               scope_length,
               lineno);
    }

    if (call_level == 0)
        yy_push_state(FC);
    ++call_level;

    yyless(length);
}
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 351 "scan_c.l"
{
    if (--call_level == 0)
        yy_pop_state();
}
	YY_BREAK
case 21:
#line 357 "scan_c.l"
case 22:
YY_RULE_SETUP
#line 357 "scan_c.l"
{         /* "#endif SYMBOL;", etc...  are not var decl */
    register size_t      length = 0;

    /* Go to first space */
    while ((yytext[length] != ' ') &&
           (yytext[length] != '\n') &&
           (yytext[length] != '*'))
    {
        ++length;
    }
    
    yyless(length);
}
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 371 "scan_c.l"
{
    register char* p = yytext;

    /* skip "#   define " */
    p = strstr(yytext, "define") + 6;

    /* Go to first non-blank */
    while ((*p == ' ') || (*p == '\n'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }

    /* Go to first space */
    add2db(DEFINITION,
           p,
           yytext + yyleng - p,
           scope,
           scope_length,
           lineno);
}
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 394 "scan_c.l"
{
    /* TYPE ** var ; */

    register int   length = 0;
    register char* p;

    /* Add type in database */
    while ((yytext[length] != ' ') &&
           (yytext[length] != '\n') &&
           (yytext[length] != '*'))
    {
        ++length;
    }

    if (!is_native_type(yytext, length))
    {
        add2db(ANY,
               yytext,
               length,
               scope,
               scope_length,
               lineno);
    }

    p = yytext + length;

    /* Skip blanks and pointers */
    while ((*p == ' ') || (*p == '\n') || (*p == '*'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }
    
    /* Get variable */
    length = 0;

    while ((p[length] != ' ') && (p[length] != ';') &&(p[length] != '\n'))
    {
        ++length;
    }
    
    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

}
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 445 "scan_c.l"
{
    /* TYPE ** var [arg1] [arg2] ... ; */
    register int   length = 0;
    register char* p;

    /* Add type in database */
    while ((yytext[length] != ' ') &&
           (yytext[length] != '\n') &&
           (yytext[length] != '*'))
    {
        ++length;
    }

    if (!is_native_type(yytext, length))
    {
        add2db(ANY,
               yytext,
               length,
               scope,
               scope_length,
               lineno);
    }

    p = yytext + length;

    /* Skip blanks and pointers */
    while ((*p == ' ') || (*p == '\n') || (*p == '*'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }
    
    /* Get variable */
    length = 0;

    while ((p[length] != ' ') &&
           (p[length] != '\n') &&
           (p[length] != '['))
    {
        ++length;
    }
    
    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    yyless(length + (p - yytext));
}
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 498 "scan_c.l"
{
    /* TYPE ** var1, */
    register int   length = 0;
    register char* p;

    /* Add type in database */
    while ((yytext[length] != ' ') &&
           (yytext[length] != '\n') &&
           (yytext[length] != '*'))
    {
        ++length;
    }

    if (!is_native_type(yytext, length))
    {
        add2db(ANY,
               yytext,
               length,
               scope,
               scope_length,
               lineno);
    }

    p = yytext + length;

    /* Skip blanks and pointers */
    while ((*p == ' ') || (*p == '\n') || (*p == '*'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }
    
    /* Get variable */
    length = 0;

    while ((p[length] != ' ') &&
           (p[length] != '\n') &&
           (p[length] != ','))
    {
        ++length;
    }
    
    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);
    yy_push_state(MULTI_DECL);

    yyless(length + (p - yytext));
}
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 552 "scan_c.l"
{
    /* ** var , */
    register int   length = 0;
    register char* p = yytext;

    /* Skip blanks and pointers */
    while ((*p == ' ') || (*p == '\n') || (*p == '*'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }

    /* Get variable */
    while ((p[length] != ' ') &&
           (p[length] != '\n') &&
           (p[length] != ','))
    {
        ++length;
    }
    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    yyless(length + (p - yytext));
}
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 582 "scan_c.l"
{
    /* ** var ; */
    /* ** var , */
    register int   length = 0;
    register char* p = yytext;

    /* Skip blanks and pointers */
    while ((*p == ' ') || (*p == '\n') || (*p == '*'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }

    /* Get variable */
    while ((p[length] != ' ') &&
           (p[length] != '\n') &&
           (p[length] != ';'))
    {
        ++length;
    }
    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    yyless(length + (p - yytext));
    yy_pop_state();
}
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 614 "scan_c.l"
{
    /* TYPE ** var [arg1] [arg2] ... , */
    register int   length = 0;
    register char* p;

    /* Add type in database */
    while ((yytext[length] != ' ') &&
           (yytext[length] != '\n') &&
           (yytext[length] != '*'))
    {
        ++length;
    }

    if (!is_native_type(yytext, length))
    {
        add2db(ANY,
               yytext,
               length,
               scope,
               scope_length,
               lineno);
    }


    p = yytext + length;

    /* Skip blanks and pointers */
    while ((*p == ' ') || (*p == '\n') || (*p == '*'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }
    
    /* Get variable */
    length = 0;

    while ((p[length] != ' ') &&
           (p[length] != '\n') &&
           (p[length] != '['))
    {
        ++length;
    }
    
    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    yyless(length + (p - yytext));
    yy_push_state(MULTI_DECL);
}
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 669 "scan_c.l"
{
    /* ** var [arg1] [arg2] ... , */
    register int   length = 0;
    register char* p = yytext;

    /* Skip blanks and pointers */
    while ((*p == ' ') || (*p == '\n') || (*p == '*'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }

    /* Get variable */
    while ((p[length] != ' ') &&
           (p[length] != '\n') &&
           (p[length] != '['))
    {
        ++length;
    }
    
    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    yyless(length + (p - yytext));
}
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 700 "scan_c.l"
{
    /* ** var [arg1] [arg2] ... ; */
    register int   length = 0;
    register char* p = yytext;

    /* Skip blanks and pointers */
    while ((*p == ' ') || (*p == '\n') || (*p == '*'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }

    /* Get variable */
    while ((p[length] != ' ') &&
           (p[length] != '\n') &&
           (p[length] != '['))
    {
        ++length;
    }
    
    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    /* Skip blanks */
    while ((*p == ' ') || (*p == '\n'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }

    yyless(length + (p - yytext));
    yy_pop_state();
}
	YY_BREAK
case 32:
#line 741 "scan_c.l"
case 33:
YY_RULE_SETUP
#line 741 "scan_c.l"
{
    /*
     * TYPE ** var =
     * TYPE ** var [arg1] [arg2] ... =
     */
    register int   length = 0;
    register char* p;

    /* Add type in database */
    while ((yytext[length] != ' ') &&
           (yytext[length] != '\n') &&
           (yytext[length] != '*'))
    {
        ++length;
    }

    if (!is_native_type(yytext, length))
    {
        add2db(ANY,
               yytext,
               length,
               scope,
               scope_length,
               lineno);
    }

    p = yytext + length;

    /* Skip blanks and pointers */
    while ((*p == ' ') || (*p == '\n') || (*p == '*'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }
    
    /* Get variable */
    length = 0;

    while ((p[length] != ' ') &&
           (p[length] != '\n') &&
           (p[length] != '[') &&
           (p[length] != '='))
    {
        ++length;
    }
    
    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    yyless(length + (p - yytext));
}
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 798 "scan_c.l"
{
    /* TYPE ** var = ... , */
    register int   length = 0;
    register int   length2 = 0;
    register char* p;

    /* Add type in database */
    while ((yytext[length] != ' ') &&
           (yytext[length] != '\n') &&
           (yytext[length] != '*'))
    {
        ++length;
    }

    if (!is_native_type(yytext, length))
    {
        add2db(ANY,
               yytext,
               length,
               scope,
               scope_length,
               lineno);
    }

    p = yytext + length;

    /* Skip blanks and pointers */
    while ((*p == ' ') || (*p == '\n') || (*p == '*'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }
    
    /* Get variable */
    length = 0;

    while ((p[length] != ' ') &&
           (p[length] != '\n') &&
           (p[length] != ','))
    {
        ++length;
    }
    
    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    p += length;

    /* Skip blanks and '=' */
    while ((*p == ' ') || (*p == '\n') || (*p == '='))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }

    length = 0;

    /* Get initialiser */
    if ((*p != '"') && 
        (*p != '\'') &&
        (*p != '{') &&
        (*p < 60 || *p > 71))
    {
        while ((p[length2] != ' ') && (p[length2] != '\n') &&
               (p[length2] != ','))
        {
            ++length2;
        }

        add2db(ANY,
               p,
               length2,
               scope,
               scope_length,
               lineno);
    }
    else
    {
        yyless(length + (p - yytext));
    }
    yy_push_state(MULTI_DECL);
}
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 887 "scan_c.l"
{
    /* ** arg = ... , */
    register int   length = 0;
    register int   length2 = 0;
    register char* p      = yytext;

    /* Skip blanks and pointers */
    while ((*p == ' ') || (*p == '\n') || (*p == '*'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }
    
    /* Get variable */
    length = 0;

    while ((p[length] != ' ') &&
           (p[length] != '\n') &&
           (p[length] != '='))
    {
        ++length;
    }
    
    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    p += length;

    /* Skip blanks and '=' */
    while ((*p == ' ') || (*p == '\n') || (*p == '='))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }

    length2 = 0;

    /* Get initialiser */
    if ((*p != '"') && 
        (*p != '\'') &&
        (*p != '{') &&
        (*p < 60 || *p > 71))
    {
        while ((p[length2] != ' ') && (p[length2] != '\n') &&
               (p[length2] != ','))
        {
            ++length2;
        }

        add2db(ANY,
               p,
               length2,
               scope,
               scope_length,
               lineno);
    }
    else
    {
        yyless(length + (p - yytext));
    }
}
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 955 "scan_c.l"
{
    /* ** arg = ... ; */
    register int   length = 0;
    register char* p;

    /* Add type in database */
    while ((yytext[length] != ' ') &&
           (yytext[length] != '\n') &&
           (yytext[length] != '*'))
    {
        ++length;
    }

    if (!is_native_type(yytext, length))
    {
        add2db(ANY,
               yytext,
               length,
               scope,
               scope_length,
               lineno);
    }

    p = yytext + length;

    /* Skip blanks and pointers */
    while ((*p == ' ') || (*p == '\n') || (*p == '*'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }
    
    /* Get variable */
    length = 0;

    while ((p[length] != ' ') &&
           (p[length] != '\n') &&
           (p[length] != '='))
    {
        ++length;
    }
    
    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    yyless(length + (p - yytext));

    if (YYSTATE != INITIAL)
        yy_pop_state();
}
	YY_BREAK
case 37:
#line 1012 "scan_c.l"
case 38:
YY_RULE_SETUP
#line 1012 "scan_c.l"
{
    /*
     * struct var { 
     * union var { 
     */

    register int   length = 0;
    register char* p      = yytext;

    /* Go to first space */
    while ((*p != ' ') && (*p != '\n'))
        ++p;
    
    /* Go to first character */
    while ((*p == ' ') || (*p == '\n'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }

    /* Add type in database */
    while ((p[length] != ' ') && (p[length] != '\n') && (p[length] != '{'))
        ++length;

    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    yyless(length + (p - yytext));
}
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 1047 "scan_c.l"
{
    /* } (break|else|...) ; */
    if ((scope_level != 0) && (--scope_level == 0))
    {
        strcpy(scope, GLOBAL_SCOPE);
        scope_length = GLOBAL_SCOPE_LENGTH;
    }

    yyless(1);
}
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 1058 "scan_c.l"
{
    /* } ** var1, var2[arg1], ... ; */

    yyless(1);

    if ((scope_level != 0) && (--scope_level == 0))
    {
        strcpy(scope, GLOBAL_SCOPE);
        scope_length = GLOBAL_SCOPE_LENGTH;
    }

    yy_push_state(MULTI_DECL);
}
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 1072 "scan_c.l"
{
    /* enum var {...} */

    register int   length = 0;
    register char* p      = yytext + 5;

    /* Go to var */
    while ((*p == ' ') || (*p == '\n'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }

    /* Add type in database */
    while ((p[length] != ' ') && (p[length] != '\n'))
        ++length;

    add2db(DEFINITION,
           p,
           length,
           scope,
           scope_length,
           lineno);

    yyless(length + (p - yytext));

    yy_push_state(MULTI_DECL);
}
	YY_BREAK
case 42:
#line 1103 "scan_c.l"
case 43:
#line 1104 "scan_c.l"
case 44:
#line 1105 "scan_c.l"
case 45:
#line 1106 "scan_c.l"
case 46:
#line 1107 "scan_c.l"
case 47:
#line 1108 "scan_c.l"
case 48:
YY_RULE_SETUP
#line 1108 "scan_c.l"
{
}
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 1111 "scan_c.l"
{
    /* #include <...> */

    register char*  p;
    register char*  q;

    /* Get header file */
    p = strchr(yytext, '<') + 1;

    while ((*p == ' ') || (*p == '\n'))
    {
        if (*p == '\n')
            ++lineno;
        ++p;
    }

    q = strchr(yytext, '>') - 1;

    add2db(INCLUDE,
           p,
           q - p + 1,
           scope,
           scope_length,
           lineno);

    parse_later(p, (size_t)(q - p) + 1);
}
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 1139 "scan_c.l"
{
    /* #include "..." */

    register char*  p;
    register char*  q;

    /* Get header file */
    p = strchr(yytext, '"');
    q = p + 1;

    while (*q != '"')
    {
        if (*q == '\n')
            ++lineno;
        ++q;
    }

    add2db(INCLUDE,
           p + 1,
           q - p - 1,
           scope,
           scope_length,
           lineno);
}
	YY_BREAK
case 51:
YY_RULE_SETUP
#line 1164 "scan_c.l"
ECHO;
	YY_BREAK
#line 3319 "lex.yy.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(FC):
case YY_STATE_EOF(MULTI_DECL):
case YY_STATE_EOF(FUNC_ARG):
	yyterminate();

	case YY_END_OF_BUFFER:
		{
		/* Amount of text matched not including the EOB char. */
		int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;

		/* Undo the effects of YY_DO_BEFORE_ACTION. */
		*yy_cp = yy_hold_char;
		YY_RESTORE_YY_MORE_OFFSET

		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
			{
			/* We're scanning a new file or input source.  It's
			 * possible that this happened because the user
			 * just pointed yyin at a new source and called
			 * yylex().  If so, then we have to assure
			 * consistency between yy_current_buffer and our
			 * globals.  Here is the right place to do so, because
			 * this is the first action (other than possibly a
			 * back-up) that will match for the new input source.
			 */
			yy_n_chars = yy_current_buffer->yy_n_chars;
			yy_current_buffer->yy_input_file = yyin;
			yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
			}

		/* Note that here we test for yy_c_buf_p "<=" to the position
		 * of the first EOB in the buffer, since yy_c_buf_p will
		 * already have been incremented past the NUL character
		 * (since all states make transitions on EOB to the
		 * end-of-buffer state).  Contrast this with the test
		 * in input().
		 */
		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
			{ /* This was really a NUL. */
			yy_state_type yy_next_state;

			yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;

			yy_current_state = yy_get_previous_state();

			/* Okay, we're now positioned to make the NUL
			 * transition.  We couldn't have
			 * yy_get_previous_state() go ahead and do it
			 * for us because it doesn't know how to deal
			 * with the possibility of jamming (and we don't
			 * want to build jamming into it because then it
			 * will run more slowly).
			 */

			yy_next_state = yy_try_NUL_trans( yy_current_state );

			yy_bp = yytext_ptr + YY_MORE_ADJ;

			if ( yy_next_state )
				{
				/* Consume the NUL. */
				yy_cp = ++yy_c_buf_p;
				yy_current_state = yy_next_state;
				goto yy_match;
				}

			else
				{
				yy_cp = yy_c_buf_p;
				goto yy_find_action;
				}
			}

		else switch ( yy_get_next_buffer() )
			{
			case EOB_ACT_END_OF_FILE:
				{
				yy_did_buffer_switch_on_eof = 0;

				if ( yywrap() )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * yytext, we can now set up
					 * yy_c_buf_p so that if some total
					 * hoser (like flex itself) wants to
					 * call the scanner after we return the
					 * YY_NULL, it'll still work - another
					 * YY_NULL will get returned.
					 */
					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;

					yy_act = YY_STATE_EOF(YY_START);
					goto do_action;
					}

				else
					{
					if ( ! yy_did_buffer_switch_on_eof )
						YY_NEW_FILE;
					}
				break;
				}

			case EOB_ACT_CONTINUE_SCAN:
				yy_c_buf_p =
					yytext_ptr + yy_amount_of_matched_text;

				yy_current_state = yy_get_previous_state();

				yy_cp = yy_c_buf_p;
				yy_bp = yytext_ptr + YY_MORE_ADJ;
				goto yy_match;

			case EOB_ACT_LAST_MATCH:
				yy_c_buf_p =
				&yy_current_buffer->yy_ch_buf[yy_n_chars];

				yy_current_state = yy_get_previous_state();

				yy_cp = yy_c_buf_p;
				yy_bp = yytext_ptr + YY_MORE_ADJ;
				goto yy_find_action;
			}
		break;
		}

	default:
		YY_FATAL_ERROR(
			"fatal flex scanner internal error--no action found" );
	} /* end of action switch */
		} /* end of scanning one token */
	} /* end of yylex */


/* yy_get_next_buffer - try to read in a new buffer
 *
 * Returns a code representing an action:
 *	EOB_ACT_LAST_MATCH -
 *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
 *	EOB_ACT_END_OF_FILE - end of file
 */

static int yy_get_next_buffer()
	{
	register char *dest = yy_current_buffer->yy_ch_buf;
	register char *source = yytext_ptr;
	register int number_to_move, i;
	int ret_val;

	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
		YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

	if ( yy_current_buffer->yy_fill_buffer == 0 )
		{ /* Don't try to fill the buffer, so this is an EOF. */
		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
			{
			/* We matched a single character, the EOB, so
			 * treat this as a final EOF.
			 */
			return EOB_ACT_END_OF_FILE;
			}

		else
			{
			/* We matched some text prior to the EOB, first
			 * process it.
			 */
			return EOB_ACT_LAST_MATCH;
			}
		}

	/* Try to read more data. */

	/* First move last chars to start of buffer. */
	number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;

	for ( i = 0; i < number_to_move; ++i )
		*(dest++) = *(source++);

	if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
		/* don't do the read, it's not guaranteed to return an EOF,
		 * just force an EOF
		 */
		yy_current_buffer->yy_n_chars = yy_n_chars = 0;

	else
		{
		int num_to_read =
			yy_current_buffer->yy_buf_size - number_to_move - 1;

		while ( num_to_read <= 0 )
			{ /* Not enough room in the buffer - grow it. */
#ifdef YY_USES_REJECT
			YY_FATAL_ERROR(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
#else

			/* just a shorter name for the current buffer */
			YY_BUFFER_STATE b = yy_current_buffer;

			int yy_c_buf_p_offset =
				(int) (yy_c_buf_p - b->yy_ch_buf);

			if ( b->yy_is_our_buffer )
				{
				int new_size = b->yy_buf_size * 2;

				if ( new_size <= 0 )
					b->yy_buf_size += b->yy_buf_size / 8;
				else
					b->yy_buf_size *= 2;

				b->yy_ch_buf = (char *)
					/* Include room in for 2 EOB chars. */
					yy_flex_realloc( (void *) b->yy_ch_buf,
							 b->yy_buf_size + 2 );
				}
			else
				/* Can't grow it, we don't own it. */
				b->yy_ch_buf = 0;

			if ( ! b->yy_ch_buf )
				YY_FATAL_ERROR(
				"fatal error - scanner input buffer overflow" );

			yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];

			num_to_read = yy_current_buffer->yy_buf_size -
						number_to_move - 1;
#endif
			}

		if ( num_to_read > YY_READ_BUF_SIZE )
			num_to_read = YY_READ_BUF_SIZE;

		/* Read in more data. */
		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
			yy_n_chars, num_to_read );

		yy_current_buffer->yy_n_chars = yy_n_chars;
		}

	if ( yy_n_chars == 0 )
		{
		if ( number_to_move == YY_MORE_ADJ )
			{
			ret_val = EOB_ACT_END_OF_FILE;
			yyrestart( yyin );
			}

		else
			{
			ret_val = EOB_ACT_LAST_MATCH;
			yy_current_buffer->yy_buffer_status =
				YY_BUFFER_EOF_PENDING;
			}
		}

	else
		ret_val = EOB_ACT_CONTINUE_SCAN;

	yy_n_chars += number_to_move;
	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;

	yytext_ptr = &yy_current_buffer->yy_ch_buf[0];

	return ret_val;
	}


/* yy_get_previous_state - get the state just before the EOB char was reached */

static yy_state_type yy_get_previous_state()
	{
	register yy_state_type yy_current_state;
	register char *yy_cp;

	yy_current_state = yy_start;

	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
		{
		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
		if ( yy_accept[yy_current_state] )
			{
			yy_last_accepting_state = yy_current_state;
			yy_last_accepting_cpos = yy_cp;
			}
		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
			{
			yy_current_state = (int) yy_def[yy_current_state];
			if ( yy_current_state >= 1410 )
				yy_c = yy_meta[(unsigned int) yy_c];
			}
		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
		}

	return yy_current_state;
	}


/* yy_try_NUL_trans - try to make a transition on the NUL character
 *
 * synopsis
 *	next_state = yy_try_NUL_trans( current_state );
 */

#ifdef YY_USE_PROTOS
static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
#else
static yy_state_type yy_try_NUL_trans( yy_current_state )
yy_state_type yy_current_state;
#endif
	{
	register int yy_is_jam;
	register char *yy_cp = yy_c_buf_p;

	register YY_CHAR yy_c = 1;
	if ( yy_accept[yy_current_state] )
		{
		yy_last_accepting_state = yy_current_state;
		yy_last_accepting_cpos = yy_cp;
		}
	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
		{
		yy_current_state = (int) yy_def[yy_current_state];
		if ( yy_current_state >= 1410 )
			yy_c = yy_meta[(unsigned int) yy_c];
		}
	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
	yy_is_jam = (yy_current_state == 1409);

	return yy_is_jam ? 0 : yy_current_state;
	}


#ifndef YY_NO_UNPUT
#ifdef YY_USE_PROTOS
static void yyunput( int c, register char *yy_bp )
#else
static void yyunput( c, yy_bp )
int c;
register char *yy_bp;
#endif
	{
	register char *yy_cp = yy_c_buf_p;

	/* undo effects of setting up yytext */
	*yy_cp = yy_hold_char;

	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
		{ /* need to shift things up to make room */
		/* +2 for EOB chars. */
		register int number_to_move = yy_n_chars + 2;
		register char *dest = &yy_current_buffer->yy_ch_buf[
					yy_current_buffer->yy_buf_size + 2];
		register char *source =
				&yy_current_buffer->yy_ch_buf[number_to_move];

		while ( source > yy_current_buffer->yy_ch_buf )
			*--dest = *--source;

		yy_cp += (int) (dest - source);
		yy_bp += (int) (dest - source);
		yy_current_buffer->yy_n_chars =
			yy_n_chars = yy_current_buffer->yy_buf_size;

		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
			YY_FATAL_ERROR( "flex scanner push-back overflow" );
		}

	*--yy_cp = (char) c;


	yytext_ptr = yy_bp;
	yy_hold_char = *yy_cp;
	yy_c_buf_p = yy_cp;
	}
#endif	/* ifndef YY_NO_UNPUT */


#ifdef __cplusplus
static int yyinput()
#else
static int input()
#endif
	{
	int c;

	*yy_c_buf_p = yy_hold_char;

	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
		{
		/* yy_c_buf_p now points to the character we want to return.
		 * If this occurs *before* the EOB characters, then it's a
		 * valid NUL; if not, then we've hit the end of the buffer.
		 */
		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
			/* This was really a NUL. */
			*yy_c_buf_p = '\0';

		else
			{ /* need more input */
			int offset = yy_c_buf_p - yytext_ptr;
			++yy_c_buf_p;

			switch ( yy_get_next_buffer() )
				{
				case EOB_ACT_LAST_MATCH:
					/* This happens because yy_g_n_b()
					 * sees that we've accumulated a
					 * token and flags that we need to
					 * try matching the token before
					 * proceeding.  But for input(),
					 * there's no matching to consider.
					 * So convert the EOB_ACT_LAST_MATCH
					 * to EOB_ACT_END_OF_FILE.
					 */

					/* Reset buffer status. */
					yyrestart( yyin );

					/* fall through */

				case EOB_ACT_END_OF_FILE:
					{
					if ( yywrap() )
						return EOF;

					if ( ! yy_did_buffer_switch_on_eof )
						YY_NEW_FILE;
#ifdef __cplusplus
					return yyinput();
#else
					return input();
#endif
					}

				case EOB_ACT_CONTINUE_SCAN:
					yy_c_buf_p = yytext_ptr + offset;
					break;
				}
			}
		}

	c = *(unsigned char *) yy_c_buf_p;	/* cast for 8-bit char's */
	*yy_c_buf_p = '\0';	/* preserve yytext */
	yy_hold_char = *++yy_c_buf_p;


	return c;
	}


#ifdef YY_USE_PROTOS
void yyrestart( FILE *input_file )
#else
void yyrestart( input_file )
FILE *input_file;
#endif
	{
	if ( ! yy_current_buffer )
		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );

	yy_init_buffer( yy_current_buffer, input_file );
	yy_load_buffer_state();
	}


#ifdef YY_USE_PROTOS
void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
#else
void yy_switch_to_buffer( new_buffer )
YY_BUFFER_STATE new_buffer;
#endif
	{
	if ( yy_current_buffer == new_buffer )
		return;

	if ( yy_current_buffer )
		{
		/* Flush out information for old buffer. */
		*yy_c_buf_p = yy_hold_char;
		yy_current_buffer->yy_buf_pos = yy_c_buf_p;
		yy_current_buffer->yy_n_chars = yy_n_chars;
		}

	yy_current_buffer = new_buffer;
	yy_load_buffer_state();

	/* We don't actually know whether we did this switch during
	 * EOF (yywrap()) processing, but the only time this flag
	 * is looked at is after yywrap() is called, so it's safe
	 * to go ahead and always set it.
	 */
	yy_did_buffer_switch_on_eof = 1;
	}


#ifdef YY_USE_PROTOS
void yy_load_buffer_state( void )
#else
void yy_load_buffer_state()
#endif
	{
	yy_n_chars = yy_current_buffer->yy_n_chars;
	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
	yyin = yy_current_buffer->yy_input_file;
	yy_hold_char = *yy_c_buf_p;
	}


#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
#else
YY_BUFFER_STATE yy_create_buffer( file, size )
FILE *file;
int size;
#endif
	{
	YY_BUFFER_STATE b;

	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

	b->yy_buf_size = size;

	/* yy_ch_buf has to be 2 characters longer than the size given because
	 * we need to put in 2 end-of-buffer characters.
	 */
	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );

	b->yy_is_our_buffer = 1;

	yy_init_buffer( b, file );

	return b;
	}


#ifdef YY_USE_PROTOS
void yy_delete_buffer( YY_BUFFER_STATE b )
#else
void yy_delete_buffer( b )
YY_BUFFER_STATE b;
#endif
	{
	if ( ! b )
		return;

	if ( b == yy_current_buffer )
		yy_current_buffer = (YY_BUFFER_STATE) 0;

	if ( b->yy_is_our_buffer )
		yy_flex_free( (void *) b->yy_ch_buf );

	yy_flex_free( (void *) b );
	}


#ifndef YY_ALWAYS_INTERACTIVE
#ifndef YY_NEVER_INTERACTIVE
extern int isatty YY_PROTO(( int ));
#endif
#endif

#ifdef YY_USE_PROTOS
void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
#else
void yy_init_buffer( b, file )
YY_BUFFER_STATE b;
FILE *file;
#endif


	{
	yy_flush_buffer( b );

	b->yy_input_file = file;
	b->yy_fill_buffer = 1;

#if YY_ALWAYS_INTERACTIVE
	b->yy_is_interactive = 1;
#else
#if YY_NEVER_INTERACTIVE
	b->yy_is_interactive = 0;
#else
	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
#endif
#endif
	}


#ifdef YY_USE_PROTOS
void yy_flush_buffer( YY_BUFFER_STATE b )
#else
void yy_flush_buffer( b )
YY_BUFFER_STATE b;
#endif

	{
	if ( ! b )
		return;

	b->yy_n_chars = 0;

	/* We always need two end-of-buffer characters.  The first causes
	 * a transition to the end-of-buffer state.  The second causes
	 * a jam in that state.
	 */
	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;

	b->yy_buf_pos = &b->yy_ch_buf[0];

	b->yy_at_bol = 1;
	b->yy_buffer_status = YY_BUFFER_NEW;

	if ( b == yy_current_buffer )
		yy_load_buffer_state();
	}


#ifndef YY_NO_SCAN_BUFFER
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
#else
YY_BUFFER_STATE yy_scan_buffer( base, size )
char *base;
yy_size_t size;
#endif
	{
	YY_BUFFER_STATE b;

	if ( size < 2 ||
	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
	     base[size-1] != YY_END_OF_BUFFER_CHAR )
		/* They forgot to leave room for the EOB's. */
		return 0;

	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );

	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
	b->yy_buf_pos = b->yy_ch_buf = base;
	b->yy_is_our_buffer = 0;
	b->yy_input_file = 0;
	b->yy_n_chars = b->yy_buf_size;
	b->yy_is_interactive = 0;
	b->yy_at_bol = 1;
	b->yy_fill_buffer = 0;
	b->yy_buffer_status = YY_BUFFER_NEW;

	yy_switch_to_buffer( b );

	return b;
	}
#endif


#ifndef YY_NO_SCAN_STRING
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
#else
YY_BUFFER_STATE yy_scan_string( yy_str )
yyconst char *yy_str;
#endif
	{
	int len;
	for ( len = 0; yy_str[len]; ++len )
		;

	return yy_scan_bytes( yy_str, len );
	}
#endif


#ifndef YY_NO_SCAN_BYTES
#ifdef YY_USE_PROTOS
YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
#else
YY_BUFFER_STATE yy_scan_bytes( bytes, len )
yyconst char *bytes;
int len;
#endif
	{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	int i;

	/* Get memory for full buffer, including space for trailing EOB's. */
	n = len + 2;
	buf = (char *) yy_flex_alloc( n );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );

	for ( i = 0; i < len; ++i )
		buf[i] = bytes[i];

	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;

	b = yy_scan_buffer( buf, n );
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );

	/* It's okay to grow etc. this buffer, and we should throw it
	 * away when we're done.
	 */
	b->yy_is_our_buffer = 1;

	return b;
	}
#endif


#ifndef YY_NO_PUSH_STATE
#ifdef YY_USE_PROTOS
static void yy_push_state( int new_state )
#else
static void yy_push_state( new_state )
int new_state;
#endif
	{
	if ( yy_start_stack_ptr >= yy_start_stack_depth )
		{
		yy_size_t new_size;

		yy_start_stack_depth += YY_START_STACK_INCR;
		new_size = yy_start_stack_depth * sizeof( int );

		if ( ! yy_start_stack )
			yy_start_stack = (int *) yy_flex_alloc( new_size );

		else
			yy_start_stack = (int *) yy_flex_realloc(
					(void *) yy_start_stack, new_size );

		if ( ! yy_start_stack )
			YY_FATAL_ERROR(
			"out of memory expanding start-condition stack" );
		}

	yy_start_stack[yy_start_stack_ptr++] = YY_START;

	BEGIN(new_state);
	}
#endif


#ifndef YY_NO_POP_STATE
static void yy_pop_state()
	{
	if ( --yy_start_stack_ptr < 0 )
		YY_FATAL_ERROR( "start-condition stack underflow" );

	BEGIN(yy_start_stack[yy_start_stack_ptr]);
	}
#endif


#ifndef YY_NO_TOP_STATE
static int yy_top_state()
	{
	return yy_start_stack[yy_start_stack_ptr - 1];
	}
#endif

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

#ifdef YY_USE_PROTOS
static void yy_fatal_error( yyconst char msg[] )
#else
static void yy_fatal_error( msg )
char msg[];
#endif
	{
	(void) fprintf( stderr, "%s\n", msg );
	exit( YY_EXIT_FAILURE );
	}



/* Redefine yyless() so it works in section 3 code. */

#undef yyless
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up yytext. */ \
		yytext[yyleng] = yy_hold_char; \
		yy_c_buf_p = yytext + n; \
		yy_hold_char = *yy_c_buf_p; \
		*yy_c_buf_p = '\0'; \
		yyleng = n; \
		} \
	while ( 0 )


/* Internal utility routines. */

#ifndef yytext_ptr
#ifdef YY_USE_PROTOS
static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
#else
static void yy_flex_strncpy( s1, s2, n )
char *s1;
yyconst char *s2;
int n;
#endif
	{
	register int i;
	for ( i = 0; i < n; ++i )
		s1[i] = s2[i];
	}
#endif

#ifdef YY_NEED_STRLEN
#ifdef YY_USE_PROTOS
static int yy_flex_strlen( yyconst char *s )
#else
static int yy_flex_strlen( s )
yyconst char *s;
#endif
	{
	register int n;
	for ( n = 0; s[n]; ++n )
		;

	return n;
	}
#endif


#ifdef YY_USE_PROTOS
static void *yy_flex_alloc( yy_size_t size )
#else
static void *yy_flex_alloc( size )
yy_size_t size;
#endif
	{
	return (void *) malloc( size );
	}

#ifdef YY_USE_PROTOS
static void *yy_flex_realloc( void *ptr, yy_size_t size )
#else
static void *yy_flex_realloc( ptr, size )
void *ptr;
yy_size_t size;
#endif
	{
	/* The cast to (char *) in the following accommodates both
	 * implementations that use char* generic pointers, and those
	 * that use void* generic pointers.  It works with the latter
	 * because both ANSI C and C++ allow castless assignment from
	 * any pointer type to void*, and deal with argument conversions
	 * as though doing an assignment.
	 */
	return (void *) realloc( (char *) ptr, size );
	}

#ifdef YY_USE_PROTOS
static void yy_flex_free( void *ptr )
#else
static void yy_flex_free( ptr )
void *ptr;
#endif
	{
	free( ptr );
	}

#if YY_MAIN
int main()
	{
	yylex();
	return 0;
	}
#endif
#line 1164 "scan_c.l"


/*
 * FUNCTION:    scan_c
 *
 * DESCRIPTION: This is the entry point for the C file lexer
 *              This function starts by creating a copy of the passed file
 *              without any C comment.
 *              It then run the lexer on this temporary file. 
 *              Once the file has been parsed, it is removed.
 *
 * IN:          filename        The file to scan
 *              filename_length The number of charin the file name
 * IN-OUT:
 * RETURN CODE:
 */

void scan_c (char* filename, size_t filename_length)
{
    char*        src;
    static char* buf = NULL;
    int          fdin;
    int          length;
    int          remaining;
    struct stat  statbuf;
    YY_BUFFER_STATE yybuf;

    scope_level = 0;

    strncpy(file, filename, filename_length);
    file_length = filename_length;

    strcpy(scope, GLOBAL_SCOPE);
    scope_length = GLOBAL_SCOPE_LENGTH;

    /* Open input file */
    if ((fdin = open(filename, O_RDONLY | O_NONBLOCK)) < 0)
        return;

    /* Get size */
    if (fstat(fdin, &statbuf) < 0)
    {
        close(fdin);
        return;
    }

    /* Check if file is empty */
    if (statbuf.st_size == 0)
    {
        close(fdin);
        return;
    }

    /* Allocate memory for stripped file */
    if (buf == NULL)
        buf = (char*)calloc(statbuf.st_size, sizeof(char));
    else
        buf = (char*)realloc(buf, statbuf.st_size);
    
    if (buf == NULL)
    {
        fprintf(stderr, "Out of memory!\n");
        exit(-1);
    }

    /* Create a memory mapped region */
    if ((src = mmap(0,
                    statbuf.st_size,
                    PROT_READ,
                    MAP_FILE | MAP_SHARED,
                    fdin,
                    0)) == 0)
    {
        close(fdin);
        return;
    }

    /* Read the whole file in the buffer */
    remaining = statbuf.st_size;

    while (remaining != 0 && remaining >= SSIZE_MAX)
    {
        read(fdin, buf + statbuf.st_size - remaining, SSIZE_MAX);
        remaining -= SSIZE_MAX;
    }

    read(fdin, buf + statbuf.st_size - remaining, remaining);

    /* Remove all comments */
    length = strip_comments(src, buf, statbuf.st_size);

    munmap(src, statbuf.st_size);

    /* close file */
    close(fdin);

    if ((yyout = fopen("/dev/null", "rw")) == NULL)
        return;

    lineno = 1;

    /* Scan file */
    yybuf = yy_scan_bytes(buf, length);
    yylex();
    yy_delete_buffer(yybuf);

    fclose(yyout);
}

/*
 * FUNCTION:    strip_comments
 *
 * DESCRIPTION: This functions takes as argument two memory mapped region and
 *              copies one region to another stripping all C comments and
 *              quoted strings. A C comment can start with "//".
 *
 * IN:          src             The source region
 *              size            The size of the src region
 * IN-OUT:      dst             The destination region
 * OUT:
 * RETURN CODE: The number of bytes written in the temporary file
 */

static int strip_comments (register char* src,
                           register char* dst,
                                    off_t size)
{
    int i = 0;
    int j = 0;
    int one_line_comment = 0;

    /* Copy everything except comments and quoted strings*/
    while (i < size)
    {
        if ((src[i] == '/') && (i != size - 1) && 
            ((src[i + 1] == '*') || (src[i + 1] == '/')))
        {
            if (src[i + 1] == '/')
            {
                /* This is the start of a "//" comment */
                one_line_comment = 1;
            }

            dst[j++] = ' ';

            i += 2;

            if (one_line_comment == 0)
            {
                /* Skip everything except new lines until end of comment */
                while ((i != size - 1) && 
                       ((src[i] != '*') || (src[i+1] != '/')))
                {
                    if (src[i] == '\n')
                    {
                        dst[j++] = '\n';
                    }
                    ++i;
                }

                i += 2;
            }
            else
            {
                /* One line comment */
                while ((i != size - 1) && (src[i] != '\n'))
                {
                    ++i;
                }

                if (i != size - 1)
                    dst[j++] = '\n';

                ++i;
                one_line_comment = 0;
            }

            /* Did we reach end of file? */
            if (i == size - 1)
                break;
            
        }

        if ((i != size) && (src[i] == '"'))
        {
            /*
             * We need to go back and make sure that we haven't encountered an
             * include statement: # include "file.h"
             */
            
            int pos = j--;

            while (dst[j] == ' ')
                --j;
            
            if (dst[j] == 'e')
            {
                j -= 6;
                if (strncmp(&dst[j], "include", 7) == 0)
                {
                    j = pos;
                    dst[j++] = src[i++];
                    do
                    {
                        if (i == size)
                            break;    /* This should not happen! */

                        dst[j++] = src[i++];
                    } while (dst[j-1] != '"');
                    continue;
                }
            }

            j = pos;

            dst[j++] = '"';
            ++i;

            while ((i != size - 1) && (src[i] != '"'))
            {
                if (src[i] == '\n')
                {
                    dst[j++] = '\n';
                }
                ++i;
            }
            
            /* Did we reach end of file? */
            if (i == size -1)
                break;
        }

        /* This is not the beginning of a comment */
        if (src[i] != '\t')
            dst[j++] = src[i++];
        else
        {
            dst[j++] = ' ';
            ++i;
        }
    }

    return j;
}

/*
 * FUNCTION:    is_native_type
 *
 * DESCRIPTION: This function checks if a symbol is a native data type
 *
 * IN:          symbol          The symbol
 *              length          The symbol length
 * IN-OUT:
 * OUT:
 * RETURN CODE: 1 if the symbol is a native type. 0 otherwise.
 */

int is_native_type (register char* symbol, size_t length)
{
    if ((strncmp(symbol, "char", length) == 0) ||
        (strncmp(symbol, "int", length) == 0) ||
        (strncmp(symbol, "unsigned", length) == 0) ||
        (strncmp(symbol, "long", length) == 0) ||
        (strncmp(symbol, "short", length) == 0) ||
        (strncmp(symbol, "void", length) == 0)  ||
        (strncmp(symbol, "float", length) == 0) ||
        (strncmp(symbol, "double", length) == 0) ||
        (strncmp(symbol, "const", length) == 0) ||
        (strncmp(symbol, "signed", length) == 0))
    {
        return 1;
    }

    return 0;
}




syntax highlighted by Code2HTML, v. 0.9.1