#line 2 "ldlex.c"

#line 4 "ldlex.c"

#define  YY_INT_ALIGNED short int

/* A lexical scanner generated by flex */

#define yy_create_buffer ld_create_buffer
#define yy_delete_buffer ld_delete_buffer
#define yy_flex_debug ld_flex_debug
#define yy_init_buffer ld_init_buffer
#define yy_flush_buffer ld_flush_buffer
#define yy_load_buffer_state ld_load_buffer_state
#define yy_switch_to_buffer ld_switch_to_buffer
#define yyin ldin
#define yyleng ldleng
#define yylex ldlex
#define yylineno ldlineno
#define yyout ldout
#define yyrestart ldrestart
#define yytext ldtext
#define yywrap ldwrap
#define yyalloc ldalloc
#define yyrealloc ldrealloc
#define yyfree ldfree

#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
#define YY_FLEX_SUBMINOR_VERSION 35
#if YY_FLEX_SUBMINOR_VERSION > 0
#define FLEX_BETA
#endif

/* First, we deal with  platform-specific or compiler-specific issues. */

/* begin standard C headers. */
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>

/* end standard C headers. */

/* flex integer type definitions */

#ifndef FLEXINT_H
#define FLEXINT_H

/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */

#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L

/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
 * if you want the limit (max/min) macros for int types. 
 */
#ifndef __STDC_LIMIT_MACROS
#define __STDC_LIMIT_MACROS 1
#endif

#include <inttypes.h>
typedef int8_t flex_int8_t;
typedef uint8_t flex_uint8_t;
typedef int16_t flex_int16_t;
typedef uint16_t flex_uint16_t;
typedef int32_t flex_int32_t;
typedef uint32_t flex_uint32_t;
#else
typedef signed char flex_int8_t;
typedef short int flex_int16_t;
typedef int flex_int32_t;
typedef unsigned char flex_uint8_t; 
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;
#endif /* ! C99 */

/* Limits of integral types. */
#ifndef INT8_MIN
#define INT8_MIN               (-128)
#endif
#ifndef INT16_MIN
#define INT16_MIN              (-32767-1)
#endif
#ifndef INT32_MIN
#define INT32_MIN              (-2147483647-1)
#endif
#ifndef INT8_MAX
#define INT8_MAX               (127)
#endif
#ifndef INT16_MAX
#define INT16_MAX              (32767)
#endif
#ifndef INT32_MAX
#define INT32_MAX              (2147483647)
#endif
#ifndef UINT8_MAX
#define UINT8_MAX              (255U)
#endif
#ifndef UINT16_MAX
#define UINT16_MAX             (65535U)
#endif
#ifndef UINT32_MAX
#define UINT32_MAX             (4294967295U)
#endif

#endif /* ! FLEXINT_H */

#ifdef __cplusplus

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

#else	/* ! __cplusplus */

/* C99 requires __STDC__ to be defined as 1. */
#if defined (__STDC__)

#define YY_USE_CONST

#endif	/* defined (__STDC__) */
#endif	/* ! __cplusplus */

#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#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 ldrestart(ldin  )

#define YY_END_OF_BUFFER_CHAR 0

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

/* The state buf must be large enough to hold one state per character in the main buffer.
 */
#define YY_STATE_BUF_SIZE   ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))

#ifndef YY_TYPEDEF_YY_BUFFER_STATE
#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
#endif

extern int ldleng;

extern FILE *ldin, *ldout;

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

    /* Note: We specifically omit the test for yy_rule_can_match_eol because it requires
     *       access to the local variable yy_act. Since yyless() is a macro, it would break
     *       existing scanners that call yyless() from OUTSIDE ldlex. 
     *       One obvious solution it to make yy_act a global. I tried that, and saw
     *       a 5% performance hit in a non-ldlineno scanner, because yy_act is
     *       normally declared as a register variable-- so it is not worth it.
     */
    #define  YY_LESS_LINENO(n) \
            do { \
                int yyl;\
                for ( yyl = n; yyl < ldleng; ++yyl )\
                    if ( ldtext[yyl] == '\n' )\
                        --ldlineno;\
            }while(0)
    
/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
	do \
		{ \
		/* Undo effects of setting up ldtext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		*yy_cp = (yy_hold_char); \
		YY_RESTORE_YY_MORE_OFFSET \
		(yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
		YY_DO_BEFORE_ACTION; /* set up ldtext again */ \
		} \
	while ( 0 )

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

#ifndef YY_TYPEDEF_YY_SIZE_T
#define YY_TYPEDEF_YY_SIZE_T
typedef size_t yy_size_t;
#endif

#ifndef YY_STRUCT_YY_BUFFER_STATE
#define YY_STRUCT_YY_BUFFER_STATE
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;

    int yy_bs_lineno; /**< The line count. */
    int yy_bs_column; /**< The column count. */
    
	/* 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 ldrestart()), so that the user can continue scanning by
	 * just pointing ldin at a new input file.
	 */
#define YY_BUFFER_EOF_PENDING 2

	};
#endif /* !YY_STRUCT_YY_BUFFER_STATE */

/* Stack of input buffers. */
static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */

/* 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".
 *
 * Returns the top of the stack, or NULL.
 */
#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
                          ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
                          : NULL)

/* Same as previous macro, but useful when we know that the buffer stack is not
 * NULL or when we need an lvalue. For internal use only.
 */
#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]

/* yy_hold_char holds the character lost when ldtext is formed. */
static char yy_hold_char;
static int yy_n_chars;		/* number of characters read into yy_ch_buf */
int ldleng;

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

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

void ldrestart (FILE *input_file  );
void ld_switch_to_buffer (YY_BUFFER_STATE new_buffer  );
YY_BUFFER_STATE ld_create_buffer (FILE *file,int size  );
void ld_delete_buffer (YY_BUFFER_STATE b  );
void ld_flush_buffer (YY_BUFFER_STATE b  );
void ldpush_buffer_state (YY_BUFFER_STATE new_buffer  );
void ldpop_buffer_state (void );

static void ldensure_buffer_stack (void );
static void ld_load_buffer_state (void );
static void ld_init_buffer (YY_BUFFER_STATE b,FILE *file  );

#define YY_FLUSH_BUFFER ld_flush_buffer(YY_CURRENT_BUFFER )

YY_BUFFER_STATE ld_scan_buffer (char *base,yy_size_t size  );
YY_BUFFER_STATE ld_scan_string (yyconst char *yy_str  );
YY_BUFFER_STATE ld_scan_bytes (yyconst char *bytes,int len  );

void *ldalloc (yy_size_t  );
void *ldrealloc (void *,yy_size_t  );
void ldfree (void *  );

#define yy_new_buffer ld_create_buffer

#define yy_set_interactive(is_interactive) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){ \
        ldensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            ld_create_buffer(ldin,YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
	}

#define yy_set_bol(at_bol) \
	{ \
	if ( ! YY_CURRENT_BUFFER ){\
        ldensure_buffer_stack (); \
		YY_CURRENT_BUFFER_LVALUE =    \
            ld_create_buffer(ldin,YY_BUF_SIZE ); \
	} \
	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
	}

#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)

/* Begin user sect3 */

#define ldwrap(n) 1
#define YY_SKIP_YYWRAP

typedef unsigned char YY_CHAR;

FILE *ldin = (FILE *) 0, *ldout = (FILE *) 0;

typedef int yy_state_type;

extern int ldlineno;

int ldlineno = 1;

extern char *ldtext;
#define yytext_ptr ldtext

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

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

#define YY_NUM_RULES 50
#define YY_END_OF_BUFFER 51
/* This struct is not used in this scanner,
   but its presence is necessary. */
struct yy_trans_info
	{
	flex_int32_t yy_verify;
	flex_int32_t yy_nxt;
	};
static yyconst flex_int16_t yy_accept[219] =
    {   0,
        0,    0,    0,    0,   51,   49,   48,   48,   41,   42,
       32,   33,   39,   37,   44,   38,   46,   40,   45,   45,
       34,   35,   36,   46,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   49,   49,   46,   46,   30,   43,   31,
       49,    9,    9,   48,   46,   47,   46,   10,   45,   45,
       45,   46,   45,   46,   46,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   46,   46,    0,   29,   46,
       46,    0,    0,    0,    0,   45,   46,   46,   46,   46,
       46,   46,   46,   46,   46,   46,   46,   46,   46,   46,
       46,   46,    0,   46,   46,    0,    0,    0,    0,    0,

        0,   45,   46,   46,   46,   46,   46,   46,   46,   19,
       46,   46,   46,   46,   46,   46,   27,   46,    0,   46,
       46,    0,    0,    0,    0,    0,    0,    0,    0,   11,
       46,   13,   46,   16,   17,   46,   46,   46,   46,   46,
       46,   46,   46,   46,   46,    0,    0,    0,    0,    0,
        0,    0,    0,   46,   46,   18,   46,   46,   46,   46,
       46,   46,   46,   46,   20,    0,    2,    0,    0,    0,
        6,    0,    0,   46,   46,   46,   46,   23,   46,   25,
       46,   28,   15,    0,    4,    1,    0,    8,    5,   46,
       46,   46,   22,   46,   46,    0,    0,   12,   46,   46,

       46,   46,    3,    7,   46,   46,   24,   46,   46,   46,
       46,   14,   46,   46,   21,   46,   26,    0
    } ;

static yyconst flex_int32_t yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
        2,    2,    2,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    2,    1,    1,    4,    1,    5,    6,    1,    7,
        8,    9,   10,   11,   12,   13,   14,   15,   16,   16,
       16,   16,   16,   16,   16,   17,   17,   18,   19,    1,
       20,    1,   21,    1,   22,   23,   24,   25,   26,   27,
       28,   29,   30,   13,   31,   32,   33,   34,   35,   36,
       13,   37,   38,   39,   40,   41,   42,   43,   44,   45,
       46,   47,   48,    1,   49,    1,   50,   51,   52,   53,

       54,   55,   56,   13,   57,   13,   58,   59,   58,   60,
       61,   13,   13,   13,   62,   13,   13,   13,   13,   63,
       13,   13,   64,   65,   66,   47,    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 flex_int32_t yy_meta[67] =
    {   0,
        1,    2,    2,    1,    1,    1,    2,    2,    3,    1,
        1,    3,    3,    1,    3,    3,    3,    2,    2,    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,    2,    1,    2,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    2,    1,    2
    } ;

static yyconst flex_int16_t yy_base[223] =
    {   0,
        0,  217,    0,  216,  216, 2250,   65,   67, 2250, 2250,
     2250, 2250,    0, 2250, 2250, 2250,   70,  206,  135,   62,
     2250, 2250, 2250,    0,  186,   70,  127,  146,  179,  210,
      259,  308,  246,   46,    0,  268,  297, 2250, 2250, 2250,
       25, 2250,   42,   70,    0,    0,  304,    0,   48,  224,
      337,  386,  389,  438,  441,  444,  493,  496,  545,  532,
      554,  583,  589,  638,  634,  641,  672,   73, 2250,  691,
      695,   38,  159,   47,  158,   69,  728,  747,  751,  780,
      784,  813,  819,  842,  848,  871,  877,  900,  908,  929,
      937,  958,   81,  966,  987,   52,  158,  155,   69,  154,

      153,  995, 1018, 1031, 1039, 1070, 1062, 1091, 1120, 1127,
     1131, 1160, 1171, 1193, 1204, 1164, 1226, 1233,  151, 1237,
     1266,  142,  138,  134,  134,  132,  132,  124,  115, 1277,
     1288, 1301, 1322, 1341, 1345, 1374, 1380, 1409, 1430, 1433,
     1464, 1485, 1488, 1509, 1538,  114,  135,  110,  104,   81,
      145,   77,   75, 1545, 1549, 1578, 1582, 1589, 1611, 1633,
     1640, 1644, 1684, 1693, 2250,   68, 2250,  151,  154,   65,
     2250,  169,  171, 1697, 1728, 1737, 1750, 1772, 1781, 1794,
     1803, 1825, 2250,   57, 2250, 2250,   53, 2250, 2250, 1834,
     1847, 1838, 1869, 1878, 1900,  173,  181, 1907, 1929, 1936,

     1960, 1967, 2250, 2250, 1989, 1996, 2000, 2040, 2051, 2029,
     2064, 2085, 2108, 2119, 2142, 2148, 2177, 2250, 2240,   89,
     2243, 2246
    } ;

static yyconst flex_int16_t yy_def[223] =
    {   0,
      218,    1,  219,  219,  218,  218,  218,  218,  218,  218,
      218,  218,  220,  218,  218,  218,  221,  222,  221,   19,
      218,  218,  218,  220,   19,   19,   19,   19,   19,   19,
       19,   19,   19,  218,  222,   19,   19,  218,  218,  218,
      218,  218,  218,  218,  220,  222,   19,  222,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,  218,  218,   19,
       19,  218,  218,  218,  218,   52,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,  218,   19,   19,  218,  218,  218,  218,  218,

      218,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,   19,  218,   19,
       19,  218,  218,  218,  218,  218,  218,  218,  218,   19,
       19,   19,   19,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,  218,  218,  218,  218,  218,
      218,  218,  218,   19,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,  218,  218,  218,  218,  218,  218,
      218,  218,  218,   19,   19,   19,   19,   19,   19,   19,
       19,   19,  218,  218,  218,  218,  218,  218,  218,   19,
       19,   19,   19,   19,   19,  218,  218,   19,   19,   19,

       19,   19,  218,  218,   19,   19,   19,   19,   19,   19,
       19,   19,   19,   19,   19,   19,   19,    0,  218,  218,
      218,  218
    } ;

static yyconst flex_int16_t yy_nxt[2317] =
    {   0,
        6,    7,    8,    6,    9,   10,   11,   12,   13,   14,
       15,   16,   17,   18,   19,   20,   20,   21,   22,   23,
       24,   25,   17,   17,   17,   26,   17,   27,   17,   28,
       29,   17,   17,   17,   30,   31,   17,   32,   17,   17,
       33,   17,   17,   17,   17,   34,   35,    6,   17,   17,
       17,   17,   17,   17,   17,   36,   17,   17,   37,   17,
       17,   17,   17,   38,   39,   40,   44,   44,   44,   44,
       46,   44,   44,   46,   46,   46,   50,   50,   72,   46,
       46,   73,   68,   46,   47,   47,   47,   68,   68,   46,
       47,   45,   53,   69,   53,   74,   96,   97,   75,  102,

       47,  102,   47,   56,   47,   99,  100,  197,  122,   93,
       47,  196,   57,  123,   93,   93,   46,  119,  187,   53,
       69,  184,  119,  119,   47,  126,  102,   47,   69,  173,
      127,  172,   47,  170,   46,   46,  167,  167,   46,   46,
       46,   47,   47,   47,   46,   46,  171,  171,   46,   49,
       49,   50,  185,  185,   46,  186,  186,   47,  169,   47,
       47,   47,   47,   58,  168,   51,  166,   51,  153,   47,
      188,  188,  189,  189,  203,  203,   47,   52,   47,   59,
      152,   46,  204,  204,   47,  151,  150,  149,   47,   47,
      148,  147,   51,   47,   47,   47,  146,   52,   69,   46,

       47,   47,   47,   47,   60,  129,  128,  125,   47,   47,
      124,   47,  101,   98,   48,  218,   47,   54,   47,   43,
       41,   47,  218,   55,   47,   47,   47,  218,   47,  218,
      218,  218,  218,  218,  218,  218,   47,  218,   50,   50,
       47,   47,   47,   47,  218,  218,  218,  218,   47,   61,
      218,  218,   47,  218,   53,  218,   53,  218,  218,  218,
       47,   47,   47,  218,  218,  218,   47,   47,  218,  218,
      218,   67,   47,   47,   47,   47,   47,  218,   47,  218,
       62,   53,   47,   47,   47,  218,   47,  218,   47,   47,
      218,   47,  218,  218,  218,   63,  218,  218,   47,  218,

       47,   47,  218,   47,  218,  218,  218,  218,   47,  218,
       47,   47,   47,   47,  218,  218,   47,  218,   47,   47,
       47,   47,   47,   47,   47,   47,   70,   47,  218,   47,
       47,  218,  218,   64,   47,  218,   47,   65,   47,   47,
       47,  218,   66,  218,  218,  218,   47,  218,  218,  218,
       47,   47,   47,   47,   47,  218,  218,   71,  218,   47,
      218,   47,  218,  218,  218,   47,   47,   47,  218,   47,
       47,  218,  218,  218,  218,  218,  218,  218,  218,   47,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,   47,  218,  218,  218,  218,   47,

       76,   76,   76,   47,   47,   47,  218,   76,   76,   76,
       76,   76,   76,  218,  218,  218,   47,  218,   47,   47,
      218,   47,  218,  218,  218,  218,  218,  218,   47,  218,
      218,   47,  218,  218,  218,   76,   76,   76,   76,   76,
       76,  218,  218,   47,  218,  218,   47,  218,   47,  218,
      218,   47,   47,   47,   47,   47,   47,   47,   47,   47,
       47,  218,  218,  218,  218,  218,  218,   77,   47,  218,
       47,   47,  218,   47,   47,  218,   47,  218,  218,  218,
       47,  218,   79,   47,  218,  218,   47,  218,  218,   78,
      218,  218,  218,  218,  218,   47,  218,  218,   47,  218,

       47,   47,  218,   47,  218,  218,   47,   47,   47,   47,
       47,   47,   47,  218,  218,  218,   80,  218,  218,  218,
      218,  218,  218,   47,  218,   47,   47,  218,   47,  218,
       81,  218,  218,  218,  218,   47,  218,  218,   47,  218,
      218,  218,  218,  218,  218,  218,   47,   47,   47,  218,
       47,  218,  218,   47,  218,   47,  218,   84,   47,   47,
       47,   47,   47,  218,   47,  218,  218,  218,   47,   47,
       47,  218,  218,  218,   47,   47,  218,   47,  218,  218,
       82,  218,  218,   83,   47,  218,   47,   47,  218,   47,
      218,  218,   85,  218,   47,  218,   47,   47,   47,   47,

      218,  218,   47,   47,   47,   47,  218,   47,  218,  218,
       86,   47,  218,   47,  218,   47,   47,  218,  218,   47,
      218,   47,  218,   87,  218,   47,  218,  218,  218,  218,
      218,   47,  218,  218,  218,  218,  218,  218,  218,  218,
       47,  218,  218,  218,  218,   47,   47,  218,   47,   47,
       47,   47,   47,   47,   47,   47,   47,   47,  218,   88,
      218,  218,  218,  218,   47,   89,   47,  218,   47,  218,
       47,   47,  218,   47,  218,  218,   47,   91,   90,  218,
       47,  218,  218,   47,  218,  218,   47,   47,   47,  218,
      218,   47,  218,  218,  218,   47,   47,  218,   47,  218,

       47,  218,   47,   47,   47,   47,   47,   47,   92,   47,
       47,   47,  218,  218,   47,  218,  218,  218,  218,  218,
      218,   47,  218,   47,  218,   47,  218,   47,  218,   47,
      218,  218,  218,   47,   47,  218,  218,   47,  218,  218,
      218,  218,   47,   47,   47,  218,   95,  218,   47,  218,
      218,   94,   47,   47,  218,  103,  218,   47,   47,  218,
       47,   47,   47,   47,  218,   47,   47,   47,  218,  218,
       47,  218,  218,  218,  218,  218,  218,   47,  218,   47,
      104,   47,  218,   47,  218,   47,  218,  105,  218,   47,
       47,  218,  218,   47,   47,   47,   47,  218,   47,   47,

       47,  218,  218,  218,   47,  218,  218,  218,   47,   47,
       47,  106,   47,   47,   47,  218,   47,  218,  218,  218,
      218,  218,   47,  107,  218,  218,   47,   47,   47,   47,
      218,  218,  218,   47,   47,   47,  218,   47,  218,  218,
      218,   47,   47,   47,  109,   47,   47,  218,  218,   47,
      218,   47,  108,  218,  218,   47,   47,   47,   47,  218,
      218,   47,   47,   47,   47,  218,  218,  218,  218,  218,
       47,  218,   47,  218,   47,   47,   47,  110,   47,  218,
       47,   47,  218,  111,   47,   47,   47,   47,  218,  218,
       47,   47,   47,   47,  218,  218,  112,  218,  218,   47,

      218,   47,  218,   47,   47,   47,  218,   47,  218,   47,
       47,  218,  218,   47,   47,   47,   47,  113,  218,   47,
      218,  218,   47,   47,   47,  218,  218,  218,   47,  218,
       47,  218,   47,   47,   47,  218,  114,  218,   47,   47,
      115,  218,   47,   47,   47,   47,  218,  218,  218,  218,
       47,   47,   47,   47,  116,  218,  218,   47,  218,   47,
      218,   47,   47,  218,  218,   47,  218,   47,  218,   47,
       47,   47,   47,   47,   47,  117,  218,  218,  218,   47,
       47,   47,   47,  218,  218,  218,   47,  218,   47,  218,
       47,   47,  218,  218,   47,  118,   47,  218,   47,   47,

       47,   47,   47,   47,  218,  218,  218,  218,   47,   47,
       47,   47,  218,  218,  218,   47,  120,   47,  218,   47,
       47,  218,  218,   47,  218,   47,  218,   47,   47,   47,
      218,  218,   47,   47,   47,  218,  121,   47,  218,  218,
      218,  218,  218,  218,   47,   47,   47,   47,   47,   47,
       47,  130,   47,   47,   47,   47,  131,   47,  218,  218,
       47,   47,  218,   47,  218,  218,  218,  218,  218,   47,
      218,   47,  218,   47,  218,   47,   47,   47,   47,  218,
       47,   47,  132,  218,   47,   47,   47,  218,   47,  218,
      218,  218,   47,   47,   47,  218,   47,  134,  218,  218,

       47,   47,   47,  218,   47,   47,   47,   47,  218,  133,
      218,  218,   47,  218,  218,  218,  218,  218,  218,   47,
      218,   47,  218,   47,   47,  218,  218,   47,  218,  135,
      218,  218,   47,   47,   47,   47,   47,  218,  218,  218,
      218,   47,   47,   47,  218,   47,   47,   47,   47,  218,
       47,  218,   47,   47,  218,  218,  136,   47,  218,   47,
      218,   47,   47,   47,  218,  218,  218,  218,  218,   47,
      137,  218,  218,   47,   47,   47,   47,   47,   47,   47,
       47,  218,   47,  218,   47,   47,   47,   47,   47,   47,
       47,  218,   47,   47,   47,  218,   47,  138,  142,  218,

      139,   47,   47,   47,  218,  218,   47,   47,   47,   47,
      218,  218,  218,   47,  218,  218,  140,   47,   47,   47,
       47,   47,   47,   47,  218,   47,   47,  218,   47,  141,
      218,  218,  218,   47,   47,   47,   47,  218,  218,  218,
       47,   47,   47,  218,  218,  218,   47,   47,   47,   47,
       47,   47,   47,   47,  218,   47,   47,  218,   47,  218,
      218,   47,  143,   47,  218,   47,   47,   47,   47,   47,
      218,  218,  218,  218,  218,   47,  218,  218,  218,   47,
       47,   47,   47,   47,  218,  218,  144,  218,   47,  218,
       47,   47,   47,   47,   47,   47,   47,  218,   47,   47,

      218,  218,   47,   47,   47,  218,  218,   47,   47,   47,
      218,  218,  218,  154,  218,   47,   47,   47,   47,   47,
       47,  218,  218,   47,  145,  218,  218,  218,   47,  218,
       47,   47,  218,   47,   47,  218,   47,   47,   47,   47,
      218,  218,  218,   47,  218,   47,  155,  218,  218,  218,
       47,  218,   47,  218,   47,   47,   47,   47,   47,   47,
       47,   47,  218,   47,   47,  218,  218,  218,  218,  218,
      218,   47,  218,   47,  218,   47,  218,   47,  218,   47,
      218,  218,  218,   47,   47,  218,  218,   47,   47,   47,
       47,  218,  218,  218,   47,   47,   47,  218,   47,  218,

      218,  218,   47,   47,   47,  218,   47,   47,  218,  156,
       47,  218,   47,  218,  218,  218,   47,  218,  157,  218,
      218,  218,   47,   47,   47,   47,  218,  218,  218,  218,
      218,   47,  218,  218,  218,  218,   47,   47,  158,   47,
      218,   47,   47,  218,   47,   47,   47,   47,   47,   47,
      218,   47,  218,  218,  159,  218,  218,  218,  218,  218,
       47,  160,   47,   47,  218,   47,   47,  218,  218,  218,
      218,   47,   47,  218,  218,   47,  218,  218,   47,   47,
       47,  218,  218,  218,  218,  218,  218,   47,  218,  218,
       47,  218,   47,  218,   47,   47,   47,  161,  218,   47,

       47,   47,   47,   47,   47,  218,   47,  218,  218,  218,
      218,  162,  218,  218,  218,   47,  218,   47,   47,  218,
       47,   47,  163,   47,   47,   47,   47,   47,  218,  218,
       47,  218,  218,  218,  218,  218,  218,  218,  218,   47,
      218,   47,   47,  218,  218,   47,  218,   47,  218,  218,
       47,   47,   47,   47,   47,  165,  218,  218,  218,   47,
       47,   47,  218,   47,   47,   47,   47,  164,   47,  174,
       47,   47,  218,  218,  175,   47,  218,   47,  218,   47,
       47,   47,  218,  218,  218,  218,  218,   47,  218,  218,
      218,   47,   47,   47,   47,   47,   47,   47,   47,  218,

       47,  218,   47,   47,   47,   47,   47,   47,   47,  218,
       47,   47,   47,  218,   47,  218,  218,  218,  218,   47,
       47,   47,  218,  218,   47,   47,   47,   47,  218,  218,
      176,   47,  218,  177,  218,   47,  178,  218,  218,   47,
       47,   47,  218,   47,   47,  218,   47,   47,   47,   47,
      218,   47,  218,   47,   47,   47,   47,  218,   47,   47,
       47,  218,  218,   47,  218,   47,  218,  218,   47,  218,
       47,  218,   47,   47,   47,   47,   47,  218,  180,  218,
      218,  179,   47,  218,  218,  218,   47,  218,  218,  218,
       47,  218,  181,  218,  218,   47,  218,   47,   47,   47,

       47,   47,   47,  218,  218,  218,   47,   47,   47,   47,
      183,   47,   47,   47,   47,  218,   47,  182,  218,  218,
      218,  218,  190,   47,  218,   47,   47,   47,  218,   47,
      218,  218,  218,  218,  218,   47,  218,  218,  218,   47,
      218,   47,   47,   47,   47,  218,   47,  218,  218,  218,
       47,   47,   47,   47,   47,   47,  218,  218,   47,   47,
       47,  218,  218,  192,   47,   47,   47,   47,  218,   47,
       47,  218,  218,  218,  218,  193,  191,  218,  218,   47,
       47,  218,   47,  218,  218,   47,   47,   47,   47,  218,
       47,  218,   47,  218,   47,   47,   47,   47,  218,   47,

      218,  218,   47,  218,   47,  194,  218,   47,   47,   47,
       47,   47,   47,   47,   47,  218,  218,   47,   47,   47,
      218,  218,  218,   47,   47,  218,   47,  218,  218,   47,
      218,  195,  218,   47,   47,   47,   47,  218,   47,   47,
       47,   47,  218,   47,  218,   47,  218,  218,   47,   47,
       47,   47,   47,   47,   47,   47,   47,   47,  198,  218,
       47,   47,   47,   47,   47,   47,   47,   47,   47,  218,
       47,  218,  200,  199,  218,  218,   47,   47,  218,   47,
       47,  218,   47,   47,   47,   47,  218,   47,  218,   47,
      218,   47,   47,   47,   47,   47,   47,  218,  218,   47,

       47,   47,  218,  218,   47,  218,  218,  201,   47,   47,
       47,   47,  218,  218,   47,   47,   47,  218,  218,  218,
       47,   47,   47,   47,  218,  202,   47,  218,  218,  218,
       47,   47,   47,  218,  218,   47,  218,   47,  218,   47,
       47,  218,   47,   47,   47,   47,  218,  218,  218,   47,
       47,   47,   47,  218,  218,  218,  218,   47,  205,   47,
      218,   47,   47,  218,   47,  218,   47,  218,   47,   47,
      218,   47,  206,  218,   47,   47,   47,  218,   47,  218,
      218,   47,   47,   47,  218,  218,   47,  218,  208,  218,
       47,   47,   47,   47,  218,  218,  207,   47,   47,   47,

      218,  218,   47,   47,   47,   47,  218,  218,  218,   47,
       47,   47,   47,  218,   47,   47,   47,   47,  218,   47,
      209,   47,   47,  218,   47,  218,   47,  218,  210,   47,
       47,   47,   47,  218,  218,  218,  218,  218,   47,  218,
      218,  218,   47,   47,   47,   47,   47,  218,  218,  218,
      213,   47,  218,   47,   47,   47,   47,   47,   47,   47,
      218,   47,   47,  218,  211,   47,   47,   47,  218,  218,
       47,   47,   47,  218,  218,  218,  212,  218,   47,   47,
       47,   47,   47,   47,  218,  218,   47,  218,  218,  214,
      218,   47,  218,   47,   47,  218,   47,   47,  218,   47,

       47,   47,   47,  218,  218,  218,   47,  218,   47,  218,
      218,  218,  218,   47,  218,   47,  218,   47,  218,  218,
      218,   47,   47,   47,   47,  218,   47,   47,  218,  218,
      218,  218,  218,   47,   47,   47,  218,  218,   47,  218,
       47,  218,   47,  218,  218,  218,  215,   47,  218,   47,
       47,   47,  218,  218,  218,  216,   47,   47,   47,  218,
      218,   47,   47,   47,   47,   47,  218,  218,  218,  218,
       47,  218,   47,  218,   47,  218,   47,  218,   47,  218,
       47,   47,  218,  218,   47,  217,  218,  218,  218,  218,
       47,   47,   47,   47,  218,  218,  218,  218,  218,   47,

      218,  218,  218,  218,   47,   47,  218,   47,  218,   47,
       47,  218,  218,  218,  218,  218,  218,  218,  218,   47,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,   47,  218,  218,  218,  218,   47,
       42,   42,   42,   47,  218,   47,   46,  218,   46,    5,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,

      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218
    } ;

static yyconst flex_int16_t yy_chk[2317] =
    {   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,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    7,    7,    8,    8,
       17,   44,   44,   17,   17,   17,   20,   20,   41,   17,
       17,   41,   34,   17,   26,   26,   26,   34,   34,   17,
       49,  220,   20,   34,   20,   43,   72,   72,   43,   76,

       26,   76,   26,   26,   20,   74,   74,  187,   96,   68,
       49,  184,   26,   96,   68,   68,   17,   93,  170,   20,
       68,  166,   93,   93,   20,   99,   76,   26,   93,  153,
       99,  152,   26,  150,   17,   19,  147,  147,   19,   19,
       19,   27,   27,   27,   19,   19,  151,  151,   19,   19,
       19,   19,  168,  168,   19,  169,  169,   27,  149,   27,
       28,   28,   28,   27,  148,   19,  146,   19,  129,   27,
      172,  172,  173,  173,  196,  196,   28,   19,   28,   28,
      128,   19,  197,  197,   27,  127,  126,  125,   28,   27,
      124,  123,   19,   29,   29,   29,  122,   19,  119,   19,

       25,   25,   25,   28,   29,  101,  100,   98,   28,   29,
       97,   29,   75,   73,   18,    5,   25,   25,   25,    4,
        2,   29,    0,   25,   30,   30,   30,    0,   25,    0,
        0,    0,    0,    0,    0,    0,   29,    0,   50,   50,
       30,   29,   30,   25,    0,    0,    0,    0,   25,   30,
        0,    0,   30,    0,   50,    0,   50,    0,    0,    0,
       33,   33,   33,    0,    0,    0,   50,   30,    0,    0,
        0,   33,   30,   31,   31,   31,   33,    0,   33,    0,
       31,   50,   36,   36,   36,    0,   50,    0,   33,   31,
        0,   31,    0,    0,    0,   31,    0,    0,   36,    0,

       36,   31,    0,   33,    0,    0,    0,    0,   33,    0,
       36,   37,   37,   37,    0,    0,   31,    0,   47,   47,
       47,   31,   32,   32,   32,   36,   36,   37,    0,   37,
       36,    0,    0,   32,   47,    0,   47,   32,   32,   37,
       32,    0,   32,    0,    0,    0,   47,    0,    0,    0,
       32,   51,   51,   51,   37,    0,    0,   37,    0,   37,
        0,   47,    0,    0,    0,   32,   47,   51,    0,   51,
       32,    0,    0,    0,    0,    0,    0,    0,    0,   51,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,   51,    0,    0,    0,    0,   51,

       52,   52,   52,   53,   53,   53,    0,   52,   52,   52,
       52,   52,   52,    0,    0,    0,   52,    0,   52,   53,
        0,   53,    0,    0,    0,    0,    0,    0,   52,    0,
        0,   53,    0,    0,    0,   52,   52,   52,   52,   52,
       52,    0,    0,   52,    0,    0,   53,    0,   52,    0,
        0,   53,   54,   54,   54,   55,   55,   55,   56,   56,
       56,    0,    0,    0,    0,    0,    0,   54,   54,    0,
       54,   55,    0,   55,   56,    0,   56,    0,    0,    0,
       54,    0,   56,   55,    0,    0,   56,    0,    0,   55,
        0,    0,    0,    0,    0,   54,    0,    0,   55,    0,

       54,   56,    0,   55,    0,    0,   56,   57,   57,   57,
       58,   58,   58,    0,    0,    0,   57,    0,    0,    0,
        0,    0,    0,   57,    0,   57,   58,    0,   58,    0,
       58,    0,    0,    0,    0,   57,    0,    0,   58,    0,
        0,    0,    0,    0,    0,    0,   60,   60,   60,    0,
       57,    0,    0,   58,    0,   57,    0,   60,   58,   59,
       59,   59,   60,    0,   60,    0,    0,    0,   61,   61,
       61,    0,    0,    0,   60,   59,    0,   59,    0,    0,
       59,    0,    0,   59,   61,    0,   61,   59,    0,   60,
        0,    0,   61,    0,   60,    0,   61,   62,   62,   62,

        0,    0,   59,   63,   63,   63,    0,   59,    0,    0,
       62,   61,    0,   62,    0,   62,   61,    0,    0,   63,
        0,   63,    0,   63,    0,   62,    0,    0,    0,    0,
        0,   63,    0,    0,    0,    0,    0,    0,    0,    0,
       62,    0,    0,    0,    0,   62,   63,    0,   65,   65,
       65,   63,   64,   64,   64,   66,   66,   66,    0,   64,
        0,    0,    0,    0,   65,   64,   65,    0,   64,    0,
       64,   66,    0,   66,    0,    0,   65,   66,   65,    0,
       64,    0,    0,   66,    0,    0,   67,   67,   67,    0,
        0,   65,    0,    0,    0,   64,   65,    0,   66,    0,

       64,    0,   67,   66,   67,   70,   70,   70,   67,   71,
       71,   71,    0,    0,   67,    0,    0,    0,    0,    0,
        0,   70,    0,   70,    0,   71,    0,   71,    0,   67,
        0,    0,    0,   70,   67,    0,    0,   71,    0,    0,
        0,    0,   77,   77,   77,    0,   71,    0,   70,    0,
        0,   70,   71,   70,    0,   77,    0,   71,   77,    0,
       77,   78,   78,   78,    0,   79,   79,   79,    0,    0,
       77,    0,    0,    0,    0,    0,    0,   78,    0,   78,
       78,   79,    0,   79,    0,   77,    0,   79,    0,   78,
       77,    0,    0,   79,   80,   80,   80,    0,   81,   81,

       81,    0,    0,    0,   78,    0,    0,    0,   79,   78,
       80,   80,   80,   79,   81,    0,   81,    0,    0,    0,
        0,    0,   80,   81,    0,    0,   81,   82,   82,   82,
        0,    0,    0,   83,   83,   83,    0,   80,    0,    0,
        0,   81,   80,   82,   83,   82,   81,    0,    0,   83,
        0,   83,   82,    0,    0,   82,   84,   84,   84,    0,
        0,   83,   85,   85,   85,    0,    0,    0,    0,    0,
       82,    0,   84,    0,   84,   82,   83,   84,   85,    0,
       85,   83,    0,   85,   84,   86,   86,   86,    0,    0,
       85,   87,   87,   87,    0,    0,   86,    0,    0,   84,

        0,   86,    0,   86,   84,   85,    0,   87,    0,   87,
       85,    0,    0,   86,   88,   88,   88,   87,    0,   87,
        0,    0,   89,   89,   89,    0,    0,    0,   86,    0,
       88,    0,   88,   86,   87,    0,   88,    0,   89,   87,
       89,    0,   88,   90,   90,   90,    0,    0,    0,    0,
       89,   91,   91,   91,   90,    0,    0,   88,    0,   90,
        0,   90,   88,    0,    0,   89,    0,   91,    0,   91,
       89,   90,   92,   92,   92,   91,    0,    0,    0,   91,
       94,   94,   94,    0,    0,    0,   90,    0,   92,    0,
       92,   90,    0,    0,   91,   92,   94,    0,   94,   91,

       92,   95,   95,   95,    0,    0,    0,    0,   94,  102,
      102,  102,    0,    0,    0,   92,   94,   95,    0,   95,
       92,    0,    0,   94,    0,  102,    0,  102,   94,   95,
        0,    0,  103,  103,  103,    0,   95,  102,    0,    0,
        0,    0,    0,    0,   95,  104,  104,  104,  103,   95,
      103,  103,  102,  105,  105,  105,  104,  102,    0,    0,
      103,  104,    0,  104,    0,    0,    0,    0,    0,  105,
        0,  105,    0,  104,    0,  103,  107,  107,  107,    0,
      103,  105,  105,    0,  106,  106,  106,    0,  104,    0,
        0,    0,  107,  104,  107,    0,  105,  107,    0,    0,

      106,  105,  106,    0,  107,  108,  108,  108,    0,  106,
        0,    0,  106,    0,    0,    0,    0,    0,    0,  107,
        0,  108,    0,  108,  107,    0,    0,  106,    0,  108,
        0,    0,  106,  108,  109,  109,  109,    0,    0,    0,
        0,  110,  110,  110,    0,  111,  111,  111,  108,    0,
      109,    0,  109,  108,    0,    0,  109,  110,    0,  110,
        0,  111,  109,  111,    0,    0,    0,    0,    0,  110,
      111,    0,    0,  111,  112,  112,  112,  109,  116,  116,
      116,    0,  109,    0,  110,  113,  113,  113,  111,  110,
      112,    0,  112,  111,  116,    0,  116,  112,  116,    0,

      113,  113,  112,  113,    0,    0,  116,  114,  114,  114,
        0,    0,    0,  113,    0,    0,  114,  112,  115,  115,
      115,  116,  112,  114,    0,  114,  116,    0,  113,  115,
        0,    0,    0,  113,  115,  114,  115,    0,    0,    0,
      117,  117,  117,    0,    0,    0,  115,  118,  118,  118,
      114,  120,  120,  120,    0,  114,  117,    0,  117,    0,
        0,  115,  118,  118,    0,  118,  115,  120,  117,  120,
        0,    0,    0,    0,    0,  118,    0,    0,    0,  120,
      121,  121,  121,  117,    0,    0,  120,    0,  117,    0,
      118,  130,  130,  130,  120,  118,  121,    0,  121,  120,

        0,    0,  131,  131,  131,    0,    0,  130,  121,  130,
        0,    0,    0,  131,    0,  132,  132,  132,  131,  130,
      131,    0,    0,  121,  121,    0,    0,    0,  121,    0,
      131,  132,    0,  132,  130,    0,  133,  133,  133,  130,
        0,    0,    0,  132,    0,  131,  133,    0,    0,    0,
      131,    0,  133,    0,  133,  134,  134,  134,  132,  135,
      135,  135,    0,  132,  133,    0,    0,    0,    0,    0,
        0,  134,    0,  134,    0,  135,    0,  135,    0,  133,
        0,    0,    0,  134,  133,    0,    0,  135,  136,  136,
      136,    0,    0,    0,  137,  137,  137,    0,  134,    0,

        0,    0,  135,  134,  136,    0,  136,  135,    0,  136,
      137,    0,  137,    0,    0,    0,  136,    0,  137,    0,
        0,    0,  137,  138,  138,  138,    0,    0,    0,    0,
        0,  136,    0,    0,    0,    0,  136,  137,  138,  138,
        0,  138,  137,    0,  139,  139,  139,  140,  140,  140,
        0,  138,    0,    0,  139,    0,    0,    0,    0,    0,
      139,  140,  139,  140,    0,  140,  138,    0,    0,    0,
        0,  138,  139,    0,    0,  140,    0,    0,  141,  141,
      141,    0,    0,    0,    0,    0,    0,  139,    0,    0,
      140,    0,  139,    0,  141,  140,  141,  141,    0,  142,

      142,  142,  143,  143,  143,    0,  141,    0,    0,    0,
        0,  142,    0,    0,    0,  142,    0,  142,  143,    0,
      143,  141,  143,  144,  144,  144,  141,  142,    0,    0,
      143,    0,    0,    0,    0,    0,    0,    0,    0,  144,
        0,  144,  142,    0,    0,  143,    0,  142,    0,    0,
      143,  144,  145,  145,  145,  145,    0,    0,    0,  154,
      154,  154,    0,  155,  155,  155,  144,  144,  145,  154,
      145,  144,    0,    0,  155,  154,    0,  154,    0,  155,
      145,  155,    0,    0,    0,    0,    0,  154,    0,    0,
        0,  155,  156,  156,  156,  145,  157,  157,  157,    0,

      145,    0,  154,  158,  158,  158,  155,  154,  156,    0,
      156,  155,  157,    0,  157,    0,    0,    0,    0,  158,
      156,  158,    0,    0,  157,  159,  159,  159,    0,    0,
      157,  158,    0,  158,    0,  156,  159,    0,    0,  157,
      156,  159,    0,  159,  157,    0,  158,  160,  160,  160,
        0,  158,    0,  159,  161,  161,  161,    0,  162,  162,
      162,    0,    0,  160,    0,  160,    0,    0,  159,    0,
      161,    0,  161,  159,  162,  160,  162,    0,  161,    0,
        0,  160,  161,    0,    0,    0,  162,    0,    0,    0,
      160,    0,  162,    0,    0,  160,    0,  161,  163,  163,

      163,  162,  161,    0,    0,    0,  162,  164,  164,  164,
      164,  174,  174,  174,  163,    0,  163,  163,    0,    0,
        0,    0,  174,  164,    0,  164,  163,  174,    0,  174,
        0,    0,    0,    0,    0,  164,    0,    0,    0,  174,
        0,  163,  175,  175,  175,    0,  163,    0,    0,    0,
      164,  176,  176,  176,  174,  164,    0,    0,  175,  174,
      175,    0,    0,  176,  177,  177,  177,  176,    0,  176,
      175,    0,    0,    0,    0,  177,  175,    0,    0,  176,
      177,    0,  177,    0,    0,  175,  178,  178,  178,    0,
      175,    0,  177,    0,  176,  179,  179,  179,    0,  176,

        0,    0,  178,    0,  178,  179,    0,  177,  180,  180,
      180,  179,  177,  179,  178,    0,    0,  181,  181,  181,
        0,    0,    0,  179,  180,    0,  180,    0,    0,  178,
        0,  181,    0,  181,  178,  181,  180,    0,  179,  182,
      182,  182,    0,  179,    0,  181,    0,    0,  190,  190,
      190,  180,  192,  192,  192,  182,  180,  182,  190,    0,
      181,  191,  191,  191,  190,  181,  190,  182,  192,    0,
      192,    0,  192,  191,    0,    0,  190,  191,    0,  191,
      192,    0,  182,  193,  193,  193,    0,  182,    0,  191,
        0,  190,  194,  194,  194,  192,  190,    0,    0,  193,

      192,  193,    0,    0,  191,    0,    0,  194,  194,  191,
      194,  193,    0,    0,  195,  195,  195,    0,    0,    0,
      194,  198,  198,  198,    0,  195,  193,    0,    0,    0,
      195,  193,  195,    0,    0,  194,    0,  198,    0,  198,
      194,    0,  195,  199,  199,  199,    0,    0,    0,  198,
      200,  200,  200,    0,    0,    0,    0,  195,  199,  199,
        0,  199,  195,    0,  198,    0,  200,    0,  200,  198,
        0,  199,  200,    0,  201,  201,  201,    0,  200,    0,
        0,  202,  202,  202,    0,    0,  199,    0,  202,    0,
      201,  199,  201,  200,    0,    0,  201,  202,  200,  202,

        0,    0,  201,  205,  205,  205,    0,    0,    0,  202,
      206,  206,  206,    0,  207,  207,  207,  201,    0,  205,
      205,  205,  201,    0,  202,    0,  206,    0,  206,  202,
      207,  205,  207,    0,    0,    0,    0,    0,  206,    0,
        0,    0,  207,  210,  210,  210,  205,    0,    0,    0,
      210,  205,    0,  206,  208,  208,  208,  207,  206,  210,
        0,  210,  207,    0,  208,  209,  209,  209,    0,    0,
      208,  210,  208,    0,    0,    0,  209,    0,  211,  211,
      211,  209,  208,  209,    0,    0,  210,    0,    0,  211,
        0,  210,    0,  209,  211,    0,  211,  208,    0,  212,

      212,  212,  208,    0,    0,    0,  211,    0,  209,    0,
        0,    0,    0,  209,    0,  212,    0,  212,    0,    0,
        0,  211,  213,  213,  213,    0,  211,  212,    0,    0,
        0,    0,    0,  214,  214,  214,    0,    0,  213,    0,
      213,    0,  212,    0,    0,    0,  213,  212,    0,  214,
      213,  214,    0,    0,    0,  214,  215,  215,  215,    0,
        0,  214,  216,  216,  216,  213,    0,    0,    0,    0,
      213,    0,  215,    0,  215,    0,  214,    0,  216,    0,
      216,  214,    0,    0,  215,  216,    0,    0,    0,    0,
      216,  217,  217,  217,    0,    0,    0,    0,    0,  215,

        0,    0,    0,    0,  215,  216,    0,  217,    0,  217,
      216,    0,    0,    0,    0,    0,    0,    0,    0,  217,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,    0,    0,  217,    0,    0,    0,    0,  217,
      219,  219,  219,  221,    0,  221,  222,    0,  222,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,

      218,  218,  218,  218,  218,  218,  218,  218,  218,  218,
      218,  218,  218,  218,  218,  218
    } ;

/* Table of booleans, true if rule could match eol. */
static yyconst flex_int32_t yy_rule_can_match_eol[51] =
    {   0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 1, 0, 0,     };

static yy_state_type yy_last_accepting_state;
static char *yy_last_accepting_cpos;

extern int ld_flex_debug;
int ld_flex_debug = 0;

/* 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 *ldtext;
#line 1 "ldlex.l"
#line 2 "ldlex.l"
/* Copyright (C) 2001, 2002, 2003, 2004, 2005, 2008 Red Hat, Inc.
   This file is part of Red Hat elfutils.
   Written by Ulrich Drepper <drepper@redhat.com>, 2001.

   Red Hat elfutils 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; version 2 of the License.

   Red Hat elfutils 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 Red Hat elfutils; if not, write to the Free Software Foundation,
   Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.

   Red Hat elfutils is an included package of the Open Invention Network.
   An included package of the Open Invention Network is a package for which
   Open Invention Network licensees cross-license their patents.  No patent
   license is granted, either expressly or impliedly, by designation as an
   included package.  Should you wish to participate in the Open Invention
   Network licensing program, please visit www.openinventionnetwork.com
   <http://www.openinventionnetwork.com>.  */

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

#include <assert.h>
#include <ctype.h>
#include <elf.h>
#include <error.h>
#include <inttypes.h>
#include <libintl.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>

#include <system.h>
#include <ld.h>
#include "ldscript.h"

/* We sure use no threads to read the stream, so use the _unlocked
   variants of the functions.  */
#undef getc
#define getc(s) getc_unlocked (s)
#undef ferror
#define ferror(s) ferror_unlocked (s)
#undef fread
#define fread(b, m, n, s) fread_unlocked (b, m, n, s)
#undef fwrite
#define fwrite(b, m, n, s) fwrite_unlocked (b, m, n, s)

/* ECHO must be redefined since the default implementation ignores
   the return value of fwrite_unlocked.  */
#define ECHO do { size_t n__ __attribute__ ((unused)) \
			   = fwrite (ldtext, ldleng, 1, ldout); } while (0)

/* Defined in ld.c.  */
extern int ld_scan_version_script;

#define MAX_PREPDEPTH 20
static enum prepstate
{
  prep_normal,
  skip_if,
  skip_to_endif
} prepstate[MAX_PREPDEPTH];
static int prepdepth;

static void eat_comment (void);
static void eat_to_eol (bool empty);
static int attrib_convert (int c);
static void push_state (enum prepstate);
static int pop_state (void);
static int handle_ifdef (void);
static void invalid_char (int ch);

#line 1157 "ldlex.c"

#define INITIAL 0
#define IGNORE 1

#ifndef YY_NO_UNISTD_H
/* Special case for "unistd.h", since it is non-ANSI. We include it way
 * down here because we want the user's section 1 to have been scanned first.
 * The user has a chance to override it with an option.
 */
#include <unistd.h>
#endif

#ifndef YY_EXTRA_TYPE
#define YY_EXTRA_TYPE void *
#endif

static int yy_init_globals (void );

/* Accessor methods to globals.
   These are made visible to non-reentrant scanners for convenience. */

int ldlex_destroy (void );

int ldget_debug (void );

void ldset_debug (int debug_flag  );

YY_EXTRA_TYPE ldget_extra (void );

void ldset_extra (YY_EXTRA_TYPE user_defined  );

FILE *ldget_in (void );

void ldset_in  (FILE * in_str  );

FILE *ldget_out (void );

void ldset_out  (FILE * out_str  );

int ldget_leng (void );

char *ldget_text (void );

int ldget_lineno (void );

void ldset_lineno (int line_number  );

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

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

    static void yyunput (int c,char *buf_ptr  );
    
#ifndef yytext_ptr
static void yy_flex_strncpy (char *,yyconst char *,int );
#endif

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

#ifndef YY_NO_INPUT

#ifdef __cplusplus
static int yyinput (void );
#else
static int input (void );
#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 fwrite( ldtext, ldleng, 1, ldout )
#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_LVALUE->yy_is_interactive ) \
		{ \
		int c = '*'; \
		unsigned n; \
		for ( n = 0; n < max_size && \
			     (c = getc( ldin )) != EOF && c != '\n'; ++n ) \
			buf[n] = (char) c; \
		if ( c == '\n' ) \
			buf[n++] = (char) c; \
		if ( c == EOF && ferror( ldin ) ) \
			YY_FATAL_ERROR( "input in flex scanner failed" ); \
		result = n; \
		} \
	else \
		{ \
		errno=0; \
		while ( (result = fread(buf, 1, max_size, ldin))==0 && ferror(ldin)) \
			{ \
			if( errno != EINTR) \
				{ \
				YY_FATAL_ERROR( "input in flex scanner failed" ); \
				break; \
				} \
			errno=0; \
			clearerr(ldin); \
			} \
		}\
\

#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

/* end tables serialization structures and prototypes */

/* Default declaration of generated scanner - a define so the user can
 * easily add parameters.
 */
#ifndef YY_DECL
#define YY_DECL_IS_OURS 1

extern int ldlex (void);

#define YY_DECL int ldlex (void)
#endif /* !YY_DECL */

/* Code executed at the beginning of each rule, after ldtext and ldleng
 * 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 \
	if ( ldleng > 0 ) \
		YY_CURRENT_BUFFER_LVALUE->yy_at_bol = \
				(ldtext[ldleng - 1] == '\n'); \
	YY_USER_ACTION

/** The main scanner function which does all the work.
 */
YY_DECL
{
	register yy_state_type yy_current_state;
	register char *yy_cp, *yy_bp;
	register int yy_act;
    
#line 96 "ldlex.l"

				if (unlikely (ld_scan_version_script))
				  {
				    ld_scan_version_script = -1;
				    return kVERSION_SCRIPT;
				  }

#line 1351 "ldlex.c"

	if ( !(yy_init) )
		{
		(yy_init) = 1;

#ifdef YY_USER_INIT
		YY_USER_INIT;
#endif

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

		if ( ! ldin )
			ldin = stdin;

		if ( ! ldout )
			ldout = stdout;

		if ( ! YY_CURRENT_BUFFER ) {
			ldensure_buffer_stack ();
			YY_CURRENT_BUFFER_LVALUE =
				ld_create_buffer(ldin,YY_BUF_SIZE );
		}

		ld_load_buffer_state( );
		}

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

		/* Support of ldtext. */
		*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_current_state += YY_AT_BOL();
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 >= 219 )
					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_current_state != 218 );
		yy_cp = (yy_last_accepting_cpos);
		yy_current_state = (yy_last_accepting_state);

yy_find_action:
		yy_act = yy_accept[yy_current_state];

		YY_DO_BEFORE_ACTION;

		if ( yy_act != YY_END_OF_BUFFER && yy_rule_can_match_eol[yy_act] )
			{
			int yyl;
			for ( yyl = 0; yyl < ldleng; ++yyl )
				if ( ldtext[yyl] == '\n' )
					   
    ldlineno++;
;
			}

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:
/* rule 1 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 103 "ldlex.l"
{ BEGIN (handle_ifdef ()); }
	YY_BREAK
case 2:
/* rule 2 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 104 "ldlex.l"
{ eat_to_eol (true);
				  push_state (skip_to_endif);
				  BEGIN (IGNORE); }
	YY_BREAK
case 3:
/* rule 3 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 8;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 107 "ldlex.l"
{ eat_to_eol (false);
				  push_state (skip_to_endif);
				  BEGIN (IGNORE); }
	YY_BREAK
case 4:
/* rule 4 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 110 "ldlex.l"
{ eat_to_eol (true) ; }
	YY_BREAK
case 5:
/* rule 5 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 112 "ldlex.l"
{ eat_to_eol (false);
				  push_state (skip_to_endif); }
	YY_BREAK
case 6:
/* rule 6 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 114 "ldlex.l"
{ eat_to_eol (true);
				  assert (prepdepth > 0);
				  if (prepstate[prepdepth - 1] == skip_if)
				    {
				      /* Back to normal processing.  */
				      assert (prepdepth == 1);
				      BEGIN (pop_state ());
				    }
				}
	YY_BREAK
case 7:
/* rule 7 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 8;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 123 "ldlex.l"
{ assert (prepdepth > 0);
				  if (prepstate[prepdepth - 1] == skip_if)
				    {
				      /* Maybe this symbol is defined.  */
				      pop_state ();
				      BEGIN (handle_ifdef ());
				    }
				}
	YY_BREAK
case 8:
/* rule 8 can match eol */
*yy_cp = (yy_hold_char); /* undo effects of setting up ldtext */
(yy_c_buf_p) = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up ldtext again */
YY_RULE_SETUP
#line 131 "ldlex.l"
{ eat_to_eol (true);
				  BEGIN (pop_state ()); }
	YY_BREAK
case 9:
/* rule 9 can match eol */
YY_RULE_SETUP
#line 133 "ldlex.l"
{ /* nothing */ }
	YY_BREAK
case 10:
YY_RULE_SETUP
#line 136 "ldlex.l"
{ eat_comment (); }
	YY_BREAK
case 11:
YY_RULE_SETUP
#line 138 "ldlex.l"
{ return kALIGN; }
	YY_BREAK
case 12:
YY_RULE_SETUP
#line 139 "ldlex.l"
{ return kAS_NEEDED; }
	YY_BREAK
case 13:
YY_RULE_SETUP
#line 140 "ldlex.l"
{ return kENTRY; }
	YY_BREAK
case 14:
YY_RULE_SETUP
#line 141 "ldlex.l"
{ return kEXCLUDE_FILE; }
	YY_BREAK
case 15:
YY_RULE_SETUP
#line 142 "ldlex.l"
{ return kGLOBAL; }
	YY_BREAK
case 16:
YY_RULE_SETUP
#line 143 "ldlex.l"
{ return kGROUP; }
	YY_BREAK
case 17:
YY_RULE_SETUP
#line 144 "ldlex.l"
{ return kINPUT; }
	YY_BREAK
case 18:
YY_RULE_SETUP
#line 145 "ldlex.l"
{ return kINTERP; }
	YY_BREAK
case 19:
YY_RULE_SETUP
#line 146 "ldlex.l"
{ return kKEEP; }
	YY_BREAK
case 20:
YY_RULE_SETUP
#line 147 "ldlex.l"
{ return kLOCAL; }
	YY_BREAK
case 21:
YY_RULE_SETUP
#line 148 "ldlex.l"
{ return kOUTPUT_FORMAT; }
	YY_BREAK
case 22:
YY_RULE_SETUP
#line 149 "ldlex.l"
{ return kPAGESIZE; }
	YY_BREAK
case 23:
YY_RULE_SETUP
#line 150 "ldlex.l"
{ return kPROVIDE; }
	YY_BREAK
case 24:
YY_RULE_SETUP
#line 151 "ldlex.l"
{ return kSEARCH_DIR; }
	YY_BREAK
case 25:
YY_RULE_SETUP
#line 152 "ldlex.l"
{ return kSEGMENT; }
	YY_BREAK
case 26:
YY_RULE_SETUP
#line 153 "ldlex.l"
{ return kSIZEOF_HEADERS; }
	YY_BREAK
case 27:
YY_RULE_SETUP
#line 154 "ldlex.l"
{ return kSORT; }
	YY_BREAK
case 28:
YY_RULE_SETUP
#line 155 "ldlex.l"
{ return kVERSION; }
	YY_BREAK
case 29:
YY_RULE_SETUP
#line 157 "ldlex.l"
{ int cnt = 1 ;
				  ldlval.num = 0;
				  while (cnt < ldleng - 1)
				    ldlval.num |= attrib_convert (ldtext[cnt++]);
				  return kMODE; }
	YY_BREAK
case 30:
YY_RULE_SETUP
#line 163 "ldlex.l"
{ return '{'; }
	YY_BREAK
case 31:
YY_RULE_SETUP
#line 164 "ldlex.l"
{ return '}'; }
	YY_BREAK
case 32:
YY_RULE_SETUP
#line 165 "ldlex.l"
{ return '('; }
	YY_BREAK
case 33:
YY_RULE_SETUP
#line 166 "ldlex.l"
{ return ')'; }
	YY_BREAK
case 34:
YY_RULE_SETUP
#line 167 "ldlex.l"
{ return ':'; }
	YY_BREAK
case 35:
YY_RULE_SETUP
#line 168 "ldlex.l"
{ return ';'; }
	YY_BREAK
case 36:
YY_RULE_SETUP
#line 169 "ldlex.l"
{ return '='; }
	YY_BREAK
case 37:
YY_RULE_SETUP
#line 170 "ldlex.l"
{ ldlval.op = exp_plus; return kADD_OP; }
	YY_BREAK
case 38:
YY_RULE_SETUP
#line 171 "ldlex.l"
{ ldlval.op = exp_minus; return kADD_OP; }
	YY_BREAK
case 39:
YY_RULE_SETUP
#line 172 "ldlex.l"
{ return '*'; }
	YY_BREAK
case 40:
YY_RULE_SETUP
#line 173 "ldlex.l"
{ ldlval.op = exp_div; return kMUL_OP; }
	YY_BREAK
case 41:
YY_RULE_SETUP
#line 174 "ldlex.l"
{ ldlval.op = exp_mod; return kMUL_OP; }
	YY_BREAK
case 42:
YY_RULE_SETUP
#line 175 "ldlex.l"
{ return '&'; }
	YY_BREAK
case 43:
YY_RULE_SETUP
#line 176 "ldlex.l"
{ return '|'; }
	YY_BREAK
case 44:
YY_RULE_SETUP
#line 178 "ldlex.l"
{ return ','; }
	YY_BREAK
case 45:
YY_RULE_SETUP
#line 180 "ldlex.l"
{ char *endp;
				  ldlval.num = strtoumax (ldtext, &endp, 0);
				  if (*endp != '\0')
				    {
				      if (tolower (*endp) == 'k')
					ldlval.num *= 1024;
				      else
					{
					  assert (tolower (*endp) == 'm');
					  ldlval.num *= 1024 * 1024;
					}
				    }
				  return kNUM; }
	YY_BREAK
case 46:
YY_RULE_SETUP
#line 194 "ldlex.l"
{ ldlval.str = obstack_strndup (&ld_state.smem,
								ldtext, ldleng);
				  return kID; }
	YY_BREAK
case 47:
YY_RULE_SETUP
#line 198 "ldlex.l"
{ ldlval.str = obstack_strndup (&ld_state.smem,
								ldtext, ldleng);
				  return kFILENAME; }
	YY_BREAK
case 48:
/* rule 48 can match eol */
YY_RULE_SETUP
#line 202 "ldlex.l"
{ /* IGNORE */ }
	YY_BREAK
case 49:
YY_RULE_SETUP
#line 204 "ldlex.l"
{ invalid_char (*ldtext); }
	YY_BREAK
case 50:
YY_RULE_SETUP
#line 206 "ldlex.l"
ECHO;
	YY_BREAK
#line 1766 "ldlex.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(IGNORE):
	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_LVALUE->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 ldin at a new source and called
			 * ldlex().  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_LVALUE->yy_n_chars;
			YY_CURRENT_BUFFER_LVALUE->yy_input_file = ldin;
			YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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_last_accepting_cpos);
				yy_current_state = (yy_last_accepting_state);
				goto yy_find_action;
				}
			}

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

				if ( ldwrap( ) )
					{
					/* Note: because we've taken care in
					 * yy_get_next_buffer() to have set up
					 * ldtext, 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_LVALUE->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 ldlex */

/* 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 (void)
{
    	register char *dest = YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
		YY_FATAL_ERROR(
		"fatal flex scanner internal error--end of buffer missed" );

	if ( YY_CURRENT_BUFFER_LVALUE->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_LVALUE->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_LVALUE->yy_n_chars = (yy_n_chars) = 0;

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

		while ( num_to_read <= 0 )
			{ /* Not enough room in the buffer - grow it. */

			/* 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. */
					ldrealloc((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_LVALUE->yy_buf_size -
						number_to_move - 1;

			}

		if ( num_to_read > YY_READ_BUF_SIZE )
			num_to_read = YY_READ_BUF_SIZE;

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

		YY_CURRENT_BUFFER_LVALUE->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;
			ldrestart(ldin  );
			}

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

	else
		ret_val = EOB_ACT_CONTINUE_SCAN;

	if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
		/* Extend the array by 50%, plus the number we really need. */
		yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
		YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) ldrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size  );
		if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
			YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
	}

	(yy_n_chars) += number_to_move;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
	YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;

	(yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->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 (void)
{
	register yy_state_type yy_current_state;
	register char *yy_cp;
    
	yy_current_state = (yy_start);
	yy_current_state += YY_AT_BOL();

	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 >= 219 )
				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 );
 */
    static yy_state_type yy_try_NUL_trans  (yy_state_type yy_current_state )
{
	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 >= 219 )
			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 == 218);

	return yy_is_jam ? 0 : yy_current_state;
}

    static void yyunput (int c, register char * yy_bp )
{
	register char *yy_cp;
    
    yy_cp = (yy_c_buf_p);

	/* undo effects of setting up ldtext */
	*yy_cp = (yy_hold_char);

	if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->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_LVALUE->yy_ch_buf[
					YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
		register char *source =
				&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];

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

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

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

	*--yy_cp = (char) c;

    if ( c == '\n' ){
        --ldlineno;
    }

	(yytext_ptr) = yy_bp;
	(yy_hold_char) = *yy_cp;
	(yy_c_buf_p) = yy_cp;
}

#ifndef YY_NO_INPUT
#ifdef __cplusplus
    static int yyinput (void)
#else
    static int input  (void)
#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_LVALUE->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. */
					ldrestart(ldin );

					/*FALLTHROUGH*/

				case EOB_ACT_END_OF_FILE:
					{
					if ( ldwrap( ) )
						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 ldtext */
	(yy_hold_char) = *++(yy_c_buf_p);

	YY_CURRENT_BUFFER_LVALUE->yy_at_bol = (c == '\n');
	if ( YY_CURRENT_BUFFER_LVALUE->yy_at_bol )
		   
    ldlineno++;
;

	return c;
}
#endif	/* ifndef YY_NO_INPUT */

/** Immediately switch to a different input stream.
 * @param input_file A readable stream.
 * 
 * @note This function does not reset the start condition to @c INITIAL .
 */
    void ldrestart  (FILE * input_file )
{
    
	if ( ! YY_CURRENT_BUFFER ){
        ldensure_buffer_stack ();
		YY_CURRENT_BUFFER_LVALUE =
            ld_create_buffer(ldin,YY_BUF_SIZE );
	}

	ld_init_buffer(YY_CURRENT_BUFFER,input_file );
	ld_load_buffer_state( );
}

/** Switch to a different input buffer.
 * @param new_buffer The new input buffer.
 * 
 */
    void ld_switch_to_buffer  (YY_BUFFER_STATE  new_buffer )
{
    
	/* TODO. We should be able to replace this entire function body
	 * with
	 *		ldpop_buffer_state();
	 *		ldpush_buffer_state(new_buffer);
     */
	ldensure_buffer_stack ();
	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_LVALUE->yy_buf_pos = (yy_c_buf_p);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	YY_CURRENT_BUFFER_LVALUE = new_buffer;
	ld_load_buffer_state( );

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

static void ld_load_buffer_state  (void)
{
    	(yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
	(yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
	ldin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
	(yy_hold_char) = *(yy_c_buf_p);
}

/** Allocate and initialize an input buffer state.
 * @param file A readable stream.
 * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
 * 
 * @return the allocated buffer state.
 */
    YY_BUFFER_STATE ld_create_buffer  (FILE * file, int  size )
{
	YY_BUFFER_STATE b;
    
	b = (YY_BUFFER_STATE) ldalloc(sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in ld_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 *) ldalloc(b->yy_buf_size + 2  );
	if ( ! b->yy_ch_buf )
		YY_FATAL_ERROR( "out of dynamic memory in ld_create_buffer()" );

	b->yy_is_our_buffer = 1;

	ld_init_buffer(b,file );

	return b;
}

/** Destroy the buffer.
 * @param b a buffer created with ld_create_buffer()
 * 
 */
    void ld_delete_buffer (YY_BUFFER_STATE  b )
{
    
	if ( ! b )
		return;

	if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
		YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;

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

	ldfree((void *) b  );
}

/* Initializes or reinitializes a buffer.
 * This function is sometimes called more than once on the same buffer,
 * such as during a ldrestart() or at EOF.
 */
    static void ld_init_buffer  (YY_BUFFER_STATE  b, FILE * file )

{
	int oerrno = errno;
    
	ld_flush_buffer(b );

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

    /* If b is the current buffer, then ld_init_buffer was _probably_
     * called from ldrestart() or through yy_get_next_buffer.
     * In that case, we don't want to reset the lineno or column.
     */
    if (b != YY_CURRENT_BUFFER){
        b->yy_bs_lineno = 1;
        b->yy_bs_column = 0;
    }

        b->yy_is_interactive = 0;
    
	errno = oerrno;
}

/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
 * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
 * 
 */
    void ld_flush_buffer (YY_BUFFER_STATE  b )
{
    	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 )
		ld_load_buffer_state( );
}

/** Pushes the new state onto the stack. The new state becomes
 *  the current state. This function will allocate the stack
 *  if necessary.
 *  @param new_buffer The new state.
 *  
 */
void ldpush_buffer_state (YY_BUFFER_STATE new_buffer )
{
    	if (new_buffer == NULL)
		return;

	ldensure_buffer_stack();

	/* This block is copied from ld_switch_to_buffer. */
	if ( YY_CURRENT_BUFFER )
		{
		/* Flush out information for old buffer. */
		*(yy_c_buf_p) = (yy_hold_char);
		YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
		YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
		}

	/* Only push if top exists. Otherwise, replace top. */
	if (YY_CURRENT_BUFFER)
		(yy_buffer_stack_top)++;
	YY_CURRENT_BUFFER_LVALUE = new_buffer;

	/* copied from ld_switch_to_buffer. */
	ld_load_buffer_state( );
	(yy_did_buffer_switch_on_eof) = 1;
}

/** Removes and deletes the top of the stack, if present.
 *  The next element becomes the new top.
 *  
 */
void ldpop_buffer_state (void)
{
    	if (!YY_CURRENT_BUFFER)
		return;

	ld_delete_buffer(YY_CURRENT_BUFFER );
	YY_CURRENT_BUFFER_LVALUE = NULL;
	if ((yy_buffer_stack_top) > 0)
		--(yy_buffer_stack_top);

	if (YY_CURRENT_BUFFER) {
		ld_load_buffer_state( );
		(yy_did_buffer_switch_on_eof) = 1;
	}
}

/* Allocates the stack if it does not exist.
 *  Guarantees space for at least one push.
 */
static void ldensure_buffer_stack (void)
{
	int num_to_alloc;
    
	if (!(yy_buffer_stack)) {

		/* First allocation is just for 2 elements, since we don't know if this
		 * scanner will even need a stack. We use 2 instead of 1 to avoid an
		 * immediate realloc on the next call.
         */
		num_to_alloc = 1;
		(yy_buffer_stack) = (struct yy_buffer_state**)ldalloc
								(num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in ldensure_buffer_stack()" );
								  
		memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
				
		(yy_buffer_stack_max) = num_to_alloc;
		(yy_buffer_stack_top) = 0;
		return;
	}

	if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){

		/* Increase the buffer to prepare for a possible push. */
		int grow_size = 8 /* arbitrary grow size */;

		num_to_alloc = (yy_buffer_stack_max) + grow_size;
		(yy_buffer_stack) = (struct yy_buffer_state**)ldrealloc
								((yy_buffer_stack),
								num_to_alloc * sizeof(struct yy_buffer_state*)
								);
		if ( ! (yy_buffer_stack) )
			YY_FATAL_ERROR( "out of dynamic memory in ldensure_buffer_stack()" );

		/* zero only the new slots.*/
		memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
		(yy_buffer_stack_max) = num_to_alloc;
	}
}

/** Setup the input buffer state to scan directly from a user-specified character buffer.
 * @param base the character buffer
 * @param size the size in bytes of the character buffer
 * 
 * @return the newly allocated buffer state object. 
 */
YY_BUFFER_STATE ld_scan_buffer  (char * base, yy_size_t  size )
{
	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) ldalloc(sizeof( struct yy_buffer_state )  );
	if ( ! b )
		YY_FATAL_ERROR( "out of dynamic memory in ld_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;

	ld_switch_to_buffer(b  );

	return b;
}

/** Setup the input buffer state to scan a string. The next call to ldlex() will
 * scan from a @e copy of @a str.
 * @param yystr a NUL-terminated string to scan
 * 
 * @return the newly allocated buffer state object.
 * @note If you want to scan bytes that may contain NUL values, then use
 *       ld_scan_bytes() instead.
 */
YY_BUFFER_STATE ld_scan_string (yyconst char * yystr )
{
    
	return ld_scan_bytes(yystr,strlen(yystr) );
}

/** Setup the input buffer state to scan the given bytes. The next call to ldlex() will
 * scan from a @e copy of @a bytes.
 * @param bytes the byte buffer to scan
 * @param len the number of bytes in the buffer pointed to by @a bytes.
 * 
 * @return the newly allocated buffer state object.
 */
YY_BUFFER_STATE ld_scan_bytes  (yyconst char * yybytes, int  _yybytes_len )
{
	YY_BUFFER_STATE b;
	char *buf;
	yy_size_t n;
	int i;
    
	/* Get memory for full buffer, including space for trailing EOB's. */
	n = _yybytes_len + 2;
	buf = (char *) ldalloc(n  );
	if ( ! buf )
		YY_FATAL_ERROR( "out of dynamic memory in ld_scan_bytes()" );

	for ( i = 0; i < _yybytes_len; ++i )
		buf[i] = yybytes[i];

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

	b = ld_scan_buffer(buf,n );
	if ( ! b )
		YY_FATAL_ERROR( "bad buffer in ld_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;
}

#ifndef YY_EXIT_FAILURE
#define YY_EXIT_FAILURE 2
#endif

static void yy_fatal_error (yyconst char* msg )
{
    	(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 ldtext. */ \
        int yyless_macro_arg = (n); \
        YY_LESS_LINENO(yyless_macro_arg);\
		ldtext[ldleng] = (yy_hold_char); \
		(yy_c_buf_p) = ldtext + yyless_macro_arg; \
		(yy_hold_char) = *(yy_c_buf_p); \
		*(yy_c_buf_p) = '\0'; \
		ldleng = yyless_macro_arg; \
		} \
	while ( 0 )

/* Accessor  methods (get/set functions) to struct members. */

/** Get the current line number.
 * 
 */
int ldget_lineno  (void)
{
        
    return ldlineno;
}

/** Get the input stream.
 * 
 */
FILE *ldget_in  (void)
{
        return ldin;
}

/** Get the output stream.
 * 
 */
FILE *ldget_out  (void)
{
        return ldout;
}

/** Get the length of the current token.
 * 
 */
int ldget_leng  (void)
{
        return ldleng;
}

/** Get the current token.
 * 
 */

char *ldget_text  (void)
{
        return ldtext;
}

/** Set the current line number.
 * @param line_number
 * 
 */
void ldset_lineno (int  line_number )
{
    
    ldlineno = line_number;
}

/** Set the input stream. This does not discard the current
 * input buffer.
 * @param in_str A readable stream.
 * 
 * @see ld_switch_to_buffer
 */
void ldset_in (FILE *  in_str )
{
        ldin = in_str ;
}

void ldset_out (FILE *  out_str )
{
        ldout = out_str ;
}

int ldget_debug  (void)
{
        return ld_flex_debug;
}

void ldset_debug (int  bdebug )
{
        ld_flex_debug = bdebug ;
}

static int yy_init_globals (void)
{
        /* Initialization is the same as for the non-reentrant scanner.
     * This function is called from ldlex_destroy(), so don't allocate here.
     */

    /* We do not touch ldlineno unless the option is enabled. */
    ldlineno =  1;
    
    (yy_buffer_stack) = 0;
    (yy_buffer_stack_top) = 0;
    (yy_buffer_stack_max) = 0;
    (yy_c_buf_p) = (char *) 0;
    (yy_init) = 0;
    (yy_start) = 0;

/* Defined in main.c */
#ifdef YY_STDINIT
    ldin = stdin;
    ldout = stdout;
#else
    ldin = (FILE *) 0;
    ldout = (FILE *) 0;
#endif

    /* For future reference: Set errno on error, since we are called by
     * ldlex_init()
     */
    return 0;
}

/* ldlex_destroy is for both reentrant and non-reentrant scanners. */
int ldlex_destroy  (void)
{
    
    /* Pop the buffer stack, destroying each element. */
	while(YY_CURRENT_BUFFER){
		ld_delete_buffer(YY_CURRENT_BUFFER  );
		YY_CURRENT_BUFFER_LVALUE = NULL;
		ldpop_buffer_state();
	}

	/* Destroy the stack itself. */
	ldfree((yy_buffer_stack) );
	(yy_buffer_stack) = NULL;

    /* Reset the globals. This is important in a non-reentrant scanner so the next time
     * ldlex() is called, initialization will occur. */
    yy_init_globals( );

    return 0;
}

/*
 * Internal utility routines.
 */

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

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

	return n;
}
#endif

void *ldalloc (yy_size_t  size )
{
	return (void *) malloc( size );
}

void *ldrealloc  (void * ptr, yy_size_t  size )
{
	/* 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 );
}

void ldfree (void * ptr )
{
	free( (char *) ptr );	/* see ldrealloc() for (char *) cast */
}

#define YYTABLES_NAME "yytables"

#line 206 "ldlex.l"



static void
eat_comment (void)
{
  while (1)
    {
      int c = input ();

      while (c != '*' && c != EOF)
	c = input ();

      if (c == '*')
	{
	  c = input ();
	  while (c == '*')
	    c = input ();
	  if (c == '/')
	    break;
	}

      if (c == EOF)
	{
	  /* XXX Use the setjmp buffer and signal EOF in comment */
	  error (0, 0, gettext ("EOF in comment"));
	  break;
	}
    }
}


static void
eat_to_eol (bool empty)
{
  bool warned = false;

  while (1)
    {
      int c = input ();

      if (c == EOF)
	break;
      if (c == '\n')
	{
	  ++ldlineno;
	  break;
	}

      if (empty && ! isspace (c) && ! warned)
	{
	  error (0, 0, gettext ("%d: garbage at end of line"), ldlineno);
	  warned = true;
	}
    }
}


static int
attrib_convert (int c)
{
  if (c == 'X')
    return PF_X;
  if (c == 'W')
    return PF_W;
  assert (c == 'R');
  return PF_R;
}


static void
push_state (enum prepstate state)
{
  if (prepdepth >= MAX_PREPDEPTH)
    error (EXIT_FAILURE, 0, gettext ("%d: conditionals nested too deep"),
	   ldlineno);

  prepstate[prepdepth++] = state;
}


static int
pop_state (void)
{
  if (prepdepth == 0)
    error (0, 0, gettext ("%d: unexpected #endif"), ldlineno);
  else
    --prepdepth;

  return prepdepth == 0 ? INITIAL : IGNORE;
}


static int
handle_ifdef (void)
{
  char idbuf[50];
  char *id = idbuf;
  size_t idlen = 0;
  size_t idmax = sizeof (idbuf);
  bool ignore_ws = true;
  bool defined = false;
  int result;

  while (1)
    {
      int c = input ();

      if (isspace (c) && ignore_ws)
	continue;

      if (c != '_' && (c < 'a' || c > 'z') && (c < 'A' || c > 'Z')
	  && (idlen == 0 || c < '0' || c > '9'))
	{
	  unput (c);
	  break;
	}

      if (idlen == idmax)
	{
	  char *newp = (char *) alloca (idmax *= 2);
	  id = memcpy (newp, id, idlen);
	}

      id[idlen++] = c;
      ignore_ws = false;
    }

  /* XXX Compare in a better way.  */
  if (idlen == 6 && strncmp (id, "SHARED", 6) == 0)
    defined = ld_state.file_type == dso_file_type;

  if (defined)
    result = INITIAL;
  else
    {
      push_state (skip_if);
      result = IGNORE;
    }

  return result;
}


static void
invalid_char (int ch)
{
  error (0, 0, (isascii (ch)
		? gettext ("invalid character '%c' at line %d; ignored")
		: gettext ("invalid character '\\%o' at line %d; ignored")),
	 ch, ldlineno);
}


// Local Variables:
// mode: C
// End:

