]> git.wh0rd.org - ICEs.git/blobdiff - 264653/parse_.i
more ices
[ICEs.git] / 264653 / parse_.i
diff --git a/264653/parse_.i b/264653/parse_.i
new file mode 100644 (file)
index 0000000..2e24a58
--- /dev/null
@@ -0,0 +1,13723 @@
+   enum yytokentype {
+     keyword_class = 258,
+     keyword_module = 259,
+     keyword_def = 260,
+     keyword_undef = 261,
+     keyword_begin = 262,
+     keyword_rescue = 263,
+     keyword_ensure = 264,
+     keyword_end = 265,
+     keyword_if = 266,
+     keyword_unless = 267,
+     keyword_then = 268,
+     keyword_elsif = 269,
+     keyword_else = 270,
+     keyword_case = 271,
+     keyword_when = 272,
+     keyword_while = 273,
+     keyword_until = 274,
+     keyword_for = 275,
+     keyword_break = 276,
+     keyword_next = 277,
+     keyword_redo = 278,
+     keyword_retry = 279,
+     keyword_in = 280,
+     keyword_do = 281,
+     keyword_do_cond = 282,
+     keyword_do_block = 283,
+     keyword_do_LAMBDA = 284,
+     keyword_return = 285,
+     keyword_yield = 286,
+     keyword_super = 287,
+     keyword_self = 288,
+     keyword_nil = 289,
+     keyword_true = 290,
+     keyword_false = 291,
+     keyword_and = 292,
+     keyword_or = 293,
+     keyword_not = 294,
+     modifier_if = 295,
+     modifier_unless = 296,
+     modifier_while = 297,
+     modifier_until = 298,
+     modifier_rescue = 299,
+     keyword_alias = 300,
+     keyword_defined = 301,
+     keyword_BEGIN = 302,
+     keyword_END = 303,
+     keyword__LINE__ = 304,
+     keyword__FILE__ = 305,
+     keyword__ENCODING__ = 306,
+     tIDENTIFIER = 307,
+     tFID = 308,
+     tGVAR = 309,
+     tIVAR = 310,
+     tCONSTANT = 311,
+     tCVAR = 312,
+     tLABEL = 313,
+     tINTEGER = 314,
+     tFLOAT = 315,
+     tSTRING_CONTENT = 316,
+     tCHAR = 317,
+     tNTH_REF = 318,
+     tBACK_REF = 319,
+     tREGEXP_END = 320,
+     tUPLUS = 321,
+     tUMINUS = 322,
+     tPOW = 323,
+     tCMP = 324,
+     tEQ = 325,
+     tEQQ = 326,
+     tNEQ = 327,
+     tGEQ = 328,
+     tLEQ = 329,
+     tANDOP = 330,
+     tOROP = 331,
+     tMATCH = 332,
+     tNMATCH = 333,
+     tDOT2 = 334,
+     tDOT3 = 335,
+     tAREF = 336,
+     tASET = 337,
+     tLSHFT = 338,
+     tRSHFT = 339,
+     tCOLON2 = 340,
+     tCOLON3 = 341,
+     tOP_ASGN = 342,
+     tASSOC = 343,
+     tLPAREN = 344,
+     tLPAREN_ARG = 345,
+     tRPAREN = 346,
+     tLBRACK = 347,
+     tLBRACE = 348,
+     tLBRACE_ARG = 349,
+     tSTAR = 350,
+     tAMPER = 351,
+     tLAMBDA = 352,
+     tSYMBEG = 353,
+     tSTRING_BEG = 354,
+     tXSTRING_BEG = 355,
+     tREGEXP_BEG = 356,
+     tWORDS_BEG = 357,
+     tQWORDS_BEG = 358,
+     tSTRING_DBEG = 359,
+     tSTRING_DVAR = 360,
+     tSTRING_END = 361,
+     tLAMBEG = 362,
+     tLOWEST = 363,
+     tUMINUS_NUM = 364,
+     idNULL = 365,
+     idRespond_to = 366,
+     idIFUNC = 367,
+     idCFUNC = 368,
+     idThrowState = 369,
+     id_core_set_method_alias = 370,
+     id_core_set_variable_alias = 371,
+     id_core_undef_method = 372,
+     id_core_define_method = 373,
+     id_core_define_singleton_method = 374,
+     id_core_set_postexe = 375,
+     tLAST_TOKEN = 376
+   };
+typedef unsigned int size_t;
+typedef int wchar_t;
+union wait
+  {
+    int w_status;
+    struct
+      {
+ unsigned int __w_termsig:7;
+ unsigned int __w_coredump:1;
+ unsigned int __w_retcode:8;
+ unsigned int:16;
+      } __wait_terminated;
+    struct
+      {
+ unsigned int __w_stopval:8;
+ unsigned int __w_stopsig:8;
+ unsigned int:16;
+      } __wait_stopped;
+  };
+typedef union
+  {
+    union wait *__uptr;
+    int *__iptr;
+  } __WAIT_STATUS __attribute__ ((__transparent_union__));
+typedef struct
+  {
+    int quot;
+    int rem;
+  } div_t;
+typedef struct
+  {
+    long int quot;
+    long int rem;
+  } ldiv_t;
+__extension__ typedef struct
+  {
+    long long int quot;
+    long long int rem;
+  } lldiv_t;
+extern size_t __ctype_get_mb_cur_max (void) __attribute__ ((__nothrow__)) ;
+extern double atof (__const char *__nptr)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
+extern int atoi (__const char *__nptr)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
+extern long int atol (__const char *__nptr)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
+__extension__ extern long long int atoll (__const char *__nptr)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
+extern double strtod (__const char *__restrict __nptr,
+        char **__restrict __endptr)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern float strtof (__const char *__restrict __nptr,
+       char **__restrict __endptr) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern long double strtold (__const char *__restrict __nptr,
+       char **__restrict __endptr)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern long int strtol (__const char *__restrict __nptr,
+   char **__restrict __endptr, int __base)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern unsigned long int strtoul (__const char *__restrict __nptr,
+      char **__restrict __endptr, int __base)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+__extension__
+extern long long int strtoq (__const char *__restrict __nptr,
+        char **__restrict __endptr, int __base)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+__extension__
+extern unsigned long long int strtouq (__const char *__restrict __nptr,
+           char **__restrict __endptr, int __base)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+__extension__
+extern long long int strtoll (__const char *__restrict __nptr,
+         char **__restrict __endptr, int __base)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+__extension__
+extern unsigned long long int strtoull (__const char *__restrict __nptr,
+     char **__restrict __endptr, int __base)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+typedef struct __locale_struct
+{
+  struct locale_data *__locales[13];
+  const unsigned short int *__ctype_b;
+  const int *__ctype_tolower;
+  const int *__ctype_toupper;
+  const char *__names[13];
+} *__locale_t;
+extern long int strtol_l (__const char *__restrict __nptr,
+     char **__restrict __endptr, int __base,
+     __locale_t __loc) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 4))) ;
+extern unsigned long int strtoul_l (__const char *__restrict __nptr,
+        char **__restrict __endptr,
+        int __base, __locale_t __loc)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 4))) ;
+__extension__
+extern long long int strtoll_l (__const char *__restrict __nptr,
+    char **__restrict __endptr, int __base,
+    __locale_t __loc)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 4))) ;
+__extension__
+extern unsigned long long int strtoull_l (__const char *__restrict __nptr,
+       char **__restrict __endptr,
+       int __base, __locale_t __loc)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 4))) ;
+extern double strtod_l (__const char *__restrict __nptr,
+   char **__restrict __endptr, __locale_t __loc)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 3))) ;
+extern float strtof_l (__const char *__restrict __nptr,
+         char **__restrict __endptr, __locale_t __loc)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 3))) ;
+extern long double strtold_l (__const char *__restrict __nptr,
+         char **__restrict __endptr,
+         __locale_t __loc)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 3))) ;
+extern __inline double
+__attribute__ ((__nothrow__)) atof (__const char *__nptr)
+{
+  return strtod (__nptr, (char **) ((void *)0));
+}
+extern __inline int
+__attribute__ ((__nothrow__)) atoi (__const char *__nptr)
+{
+  return (int) strtol (__nptr, (char **) ((void *)0), 10);
+}
+extern __inline long int
+__attribute__ ((__nothrow__)) atol (__const char *__nptr)
+{
+  return strtol (__nptr, (char **) ((void *)0), 10);
+}
+__extension__ extern __inline long long int
+__attribute__ ((__nothrow__)) atoll (__const char *__nptr)
+{
+  return strtoll (__nptr, (char **) ((void *)0), 10);
+}
+extern char *l64a (long int __n) __attribute__ ((__nothrow__)) ;
+extern long int a64l (__const char *__s)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1))) ;
+typedef unsigned char __u_char;
+typedef unsigned short int __u_short;
+typedef unsigned int __u_int;
+typedef unsigned long int __u_long;
+typedef signed char __int8_t;
+typedef unsigned char __uint8_t;
+typedef signed short int __int16_t;
+typedef unsigned short int __uint16_t;
+typedef signed int __int32_t;
+typedef unsigned int __uint32_t;
+__extension__ typedef signed long long int __int64_t;
+__extension__ typedef unsigned long long int __uint64_t;
+__extension__ typedef long long int __quad_t;
+__extension__ typedef unsigned long long int __u_quad_t;
+__extension__ typedef __u_quad_t __dev_t;
+__extension__ typedef unsigned int __uid_t;
+__extension__ typedef unsigned int __gid_t;
+__extension__ typedef unsigned long int __ino_t;
+__extension__ typedef __u_quad_t __ino64_t;
+__extension__ typedef unsigned int __mode_t;
+__extension__ typedef unsigned int __nlink_t;
+__extension__ typedef long int __off_t;
+__extension__ typedef __quad_t __off64_t;
+__extension__ typedef int __pid_t;
+__extension__ typedef struct { int __val[2]; } __fsid_t;
+__extension__ typedef long int __clock_t;
+__extension__ typedef unsigned long int __rlim_t;
+__extension__ typedef __u_quad_t __rlim64_t;
+__extension__ typedef unsigned int __id_t;
+__extension__ typedef long int __time_t;
+__extension__ typedef unsigned int __useconds_t;
+__extension__ typedef long int __suseconds_t;
+__extension__ typedef int __daddr_t;
+__extension__ typedef long int __swblk_t;
+__extension__ typedef int __key_t;
+__extension__ typedef int __clockid_t;
+__extension__ typedef void * __timer_t;
+__extension__ typedef long int __blksize_t;
+__extension__ typedef long int __blkcnt_t;
+__extension__ typedef __quad_t __blkcnt64_t;
+__extension__ typedef unsigned long int __fsblkcnt_t;
+__extension__ typedef __u_quad_t __fsblkcnt64_t;
+__extension__ typedef unsigned long int __fsfilcnt_t;
+__extension__ typedef __u_quad_t __fsfilcnt64_t;
+__extension__ typedef int __ssize_t;
+typedef __off64_t __loff_t;
+typedef __quad_t *__qaddr_t;
+typedef char *__caddr_t;
+__extension__ typedef int __intptr_t;
+__extension__ typedef unsigned int __socklen_t;
+typedef __u_char u_char;
+typedef __u_short u_short;
+typedef __u_int u_int;
+typedef __u_long u_long;
+typedef __quad_t quad_t;
+typedef __u_quad_t u_quad_t;
+typedef __fsid_t fsid_t;
+typedef __loff_t loff_t;
+typedef __ino64_t ino_t;
+typedef __ino64_t ino64_t;
+typedef __dev_t dev_t;
+typedef __gid_t gid_t;
+typedef __mode_t mode_t;
+typedef __nlink_t nlink_t;
+typedef __uid_t uid_t;
+typedef __off64_t off_t;
+typedef __off64_t off64_t;
+typedef __pid_t pid_t;
+typedef __id_t id_t;
+typedef __ssize_t ssize_t;
+typedef __daddr_t daddr_t;
+typedef __caddr_t caddr_t;
+typedef __key_t key_t;
+typedef __clock_t clock_t;
+typedef __time_t time_t;
+typedef __clockid_t clockid_t;
+typedef __timer_t timer_t;
+typedef __useconds_t useconds_t;
+typedef __suseconds_t suseconds_t;
+typedef unsigned long int ulong;
+typedef unsigned short int ushort;
+typedef unsigned int uint;
+typedef int int8_t __attribute__ ((__mode__ (__QI__)));
+typedef int int16_t __attribute__ ((__mode__ (__HI__)));
+typedef int int32_t __attribute__ ((__mode__ (__SI__)));
+typedef int int64_t __attribute__ ((__mode__ (__DI__)));
+typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
+typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
+typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
+typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));
+typedef int register_t __attribute__ ((__mode__ (__word__)));
+typedef int __sig_atomic_t;
+typedef struct
+  {
+    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
+  } __sigset_t;
+typedef __sigset_t sigset_t;
+struct timespec
+  {
+    __time_t tv_sec;
+    long int tv_nsec;
+  };
+struct timeval
+  {
+    __time_t tv_sec;
+    __suseconds_t tv_usec;
+  };
+typedef long int __fd_mask;
+typedef struct
+  {
+    __fd_mask fds_bits[1024 / (8 * sizeof (__fd_mask))];
+  } fd_set;
+typedef __fd_mask fd_mask;
+extern int select (int __nfds, fd_set *__restrict __readfds,
+     fd_set *__restrict __writefds,
+     fd_set *__restrict __exceptfds,
+     struct timeval *__restrict __timeout);
+extern int pselect (int __nfds, fd_set *__restrict __readfds,
+      fd_set *__restrict __writefds,
+      fd_set *__restrict __exceptfds,
+      const struct timespec *__restrict __timeout,
+      const __sigset_t *__restrict __sigmask);
+__extension__
+extern unsigned int gnu_dev_major (unsigned long long int __dev)
+     __attribute__ ((__nothrow__));
+__extension__
+extern unsigned int gnu_dev_minor (unsigned long long int __dev)
+     __attribute__ ((__nothrow__));
+__extension__
+extern unsigned long long int gnu_dev_makedev (unsigned int __major,
+            unsigned int __minor)
+     __attribute__ ((__nothrow__));
+__extension__ extern __inline unsigned int
+__attribute__ ((__nothrow__)) gnu_dev_major (unsigned long long int __dev)
+{
+  return ((__dev >> 8) & 0xfff) | ((unsigned int) (__dev >> 32) & ~0xfff);
+}
+__extension__ extern __inline unsigned int
+__attribute__ ((__nothrow__)) gnu_dev_minor (unsigned long long int __dev)
+{
+  return (__dev & 0xff) | ((unsigned int) (__dev >> 12) & ~0xff);
+}
+__extension__ extern __inline unsigned long long int
+__attribute__ ((__nothrow__)) gnu_dev_makedev (unsigned int __major, unsigned int __minor)
+{
+  return ((__minor & 0xff) | ((__major & 0xfff) << 8)
+   | (((unsigned long long int) (__minor & ~0xff)) << 12)
+   | (((unsigned long long int) (__major & ~0xfff)) << 32));
+}
+typedef __blksize_t blksize_t;
+typedef __blkcnt64_t blkcnt_t;
+typedef __fsblkcnt64_t fsblkcnt_t;
+typedef __fsfilcnt64_t fsfilcnt_t;
+typedef __blkcnt64_t blkcnt64_t;
+typedef __fsblkcnt64_t fsblkcnt64_t;
+typedef __fsfilcnt64_t fsfilcnt64_t;
+typedef unsigned long int pthread_t;
+typedef union
+{
+  char __size[36];
+  long int __align;
+} pthread_attr_t;
+typedef struct __pthread_internal_slist
+{
+  struct __pthread_internal_slist *__next;
+} __pthread_slist_t;
+typedef union
+{
+  struct __pthread_mutex_s
+  {
+    int __lock;
+    unsigned int __count;
+    int __owner;
+    int __kind;
+    unsigned int __nusers;
+    __extension__ union
+    {
+      int __spins;
+      __pthread_slist_t __list;
+    };
+  } __data;
+  char __size[24];
+  long int __align;
+} pthread_mutex_t;
+typedef union
+{
+  char __size[4];
+  int __align;
+} pthread_mutexattr_t;
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __futex;
+    __extension__ unsigned long long int __total_seq;
+    __extension__ unsigned long long int __wakeup_seq;
+    __extension__ unsigned long long int __woken_seq;
+    void *__mutex;
+    unsigned int __nwaiters;
+    unsigned int __broadcast_seq;
+  } __data;
+  char __size[48];
+  __extension__ long long int __align;
+} pthread_cond_t;
+typedef union
+{
+  char __size[4];
+  int __align;
+} pthread_condattr_t;
+typedef unsigned int pthread_key_t;
+typedef int pthread_once_t;
+typedef union
+{
+  struct
+  {
+    int __lock;
+    unsigned int __nr_readers;
+    unsigned int __readers_wakeup;
+    unsigned int __writer_wakeup;
+    unsigned int __nr_readers_queued;
+    unsigned int __nr_writers_queued;
+    unsigned char __flags;
+    unsigned char __shared;
+    unsigned char __pad1;
+    unsigned char __pad2;
+    int __writer;
+  } __data;
+  char __size[32];
+  long int __align;
+} pthread_rwlock_t;
+typedef union
+{
+  char __size[8];
+  long int __align;
+} pthread_rwlockattr_t;
+typedef volatile int pthread_spinlock_t;
+typedef union
+{
+  char __size[20];
+  long int __align;
+} pthread_barrier_t;
+typedef union
+{
+  char __size[4];
+  int __align;
+} pthread_barrierattr_t;
+extern long int random (void) __attribute__ ((__nothrow__));
+extern void srandom (unsigned int __seed) __attribute__ ((__nothrow__));
+extern char *initstate (unsigned int __seed, char *__statebuf,
+   size_t __statelen) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
+extern char *setstate (char *__statebuf) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+struct random_data
+  {
+    int32_t *fptr;
+    int32_t *rptr;
+    int32_t *state;
+    int rand_type;
+    int rand_deg;
+    int rand_sep;
+    int32_t *end_ptr;
+  };
+extern int random_r (struct random_data *__restrict __buf,
+       int32_t *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int srandom_r (unsigned int __seed, struct random_data *__buf)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
+extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
+   size_t __statelen,
+   struct random_data *__restrict __buf)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 4)));
+extern int setstate_r (char *__restrict __statebuf,
+         struct random_data *__restrict __buf)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int rand (void) __attribute__ ((__nothrow__));
+extern void srand (unsigned int __seed) __attribute__ ((__nothrow__));
+extern int rand_r (unsigned int *__seed) __attribute__ ((__nothrow__));
+extern double drand48 (void) __attribute__ ((__nothrow__));
+extern double erand48 (unsigned short int __xsubi[3]) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern long int lrand48 (void) __attribute__ ((__nothrow__));
+extern long int nrand48 (unsigned short int __xsubi[3])
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern long int mrand48 (void) __attribute__ ((__nothrow__));
+extern long int jrand48 (unsigned short int __xsubi[3])
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern void srand48 (long int __seedval) __attribute__ ((__nothrow__));
+extern unsigned short int *seed48 (unsigned short int __seed16v[3])
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern void lcong48 (unsigned short int __param[7]) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+struct drand48_data
+  {
+    unsigned short int __x[3];
+    unsigned short int __old_x[3];
+    unsigned short int __c;
+    unsigned short int __init;
+    unsigned long long int __a;
+  };
+extern int drand48_r (struct drand48_data *__restrict __buffer,
+        double *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int erand48_r (unsigned short int __xsubi[3],
+        struct drand48_data *__restrict __buffer,
+        double *__restrict __result) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int lrand48_r (struct drand48_data *__restrict __buffer,
+        long int *__restrict __result)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int nrand48_r (unsigned short int __xsubi[3],
+        struct drand48_data *__restrict __buffer,
+        long int *__restrict __result)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int mrand48_r (struct drand48_data *__restrict __buffer,
+        long int *__restrict __result)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int jrand48_r (unsigned short int __xsubi[3],
+        struct drand48_data *__restrict __buffer,
+        long int *__restrict __result)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
+extern int seed48_r (unsigned short int __seed16v[3],
+       struct drand48_data *__buffer) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int lcong48_r (unsigned short int __param[7],
+        struct drand48_data *__buffer)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern void *malloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;
+extern void *calloc (size_t __nmemb, size_t __size)
+     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;
+extern void *realloc (void *__ptr, size_t __size)
+     __attribute__ ((__nothrow__)) __attribute__ ((__warn_unused_result__));
+extern void free (void *__ptr) __attribute__ ((__nothrow__));
+extern void cfree (void *__ptr) __attribute__ ((__nothrow__));
+extern void *alloca (size_t __size) __attribute__ ((__nothrow__));
+extern void *valloc (size_t __size) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;
+extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern void abort (void) __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
+extern int atexit (void (*__func) (void)) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern void exit (int __status) __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
+extern void _Exit (int __status) __attribute__ ((__nothrow__)) __attribute__ ((__noreturn__));
+extern char *getenv (__const char *__name) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern char *__secure_getenv (__const char *__name)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern int putenv (char *__string) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern int setenv (__const char *__name, __const char *__value, int __replace)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
+extern int unsetenv (__const char *__name) __attribute__ ((__nothrow__));
+extern int clearenv (void) __attribute__ ((__nothrow__));
+extern char *mktemp (char *__template) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern int mkstemp (char *__template) __asm__ ("" "mkstemp64")
+     __attribute__ ((__nonnull__ (1))) ;
+extern int mkstemp64 (char *__template) __attribute__ ((__nonnull__ (1))) ;
+extern char *mkdtemp (char *__template) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern int mkostemp (char *__template, int __flags) __asm__ ("" "mkostemp64")
+     __attribute__ ((__nonnull__ (1))) ;
+extern int mkostemp64 (char *__template, int __flags) __attribute__ ((__nonnull__ (1))) ;
+extern int system (__const char *__command) ;
+extern char *canonicalize_file_name (__const char *__name)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern char *realpath (__const char *__restrict __name,
+         char *__restrict __resolved) __attribute__ ((__nothrow__)) ;
+typedef int (*__compar_fn_t) (__const void *, __const void *);
+typedef __compar_fn_t comparison_fn_t;
+extern void *bsearch (__const void *__key, __const void *__base,
+        size_t __nmemb, size_t __size, __compar_fn_t __compar)
+     __attribute__ ((__nonnull__ (1, 2, 5))) ;
+extern void qsort (void *__base, size_t __nmemb, size_t __size,
+     __compar_fn_t __compar) __attribute__ ((__nonnull__ (1, 4)));
+extern int abs (int __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;
+extern long int labs (long int __x) __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;
+__extension__ extern long long int llabs (long long int __x)
+     __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;
+extern div_t div (int __numer, int __denom)
+     __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;
+extern ldiv_t ldiv (long int __numer, long int __denom)
+     __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;
+__extension__ extern lldiv_t lldiv (long long int __numer,
+        long long int __denom)
+     __attribute__ ((__nothrow__)) __attribute__ ((__const__)) ;
+extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
+     int *__restrict __sign) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4))) ;
+extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
+     int *__restrict __sign) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4))) ;
+extern char *gcvt (double __value, int __ndigit, char *__buf)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3))) ;
+extern char *qecvt (long double __value, int __ndigit,
+      int *__restrict __decpt, int *__restrict __sign)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4))) ;
+extern char *qfcvt (long double __value, int __ndigit,
+      int *__restrict __decpt, int *__restrict __sign)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4))) ;
+extern char *qgcvt (long double __value, int __ndigit, char *__buf)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3))) ;
+extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
+     int *__restrict __sign, char *__restrict __buf,
+     size_t __len) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
+extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
+     int *__restrict __sign, char *__restrict __buf,
+     size_t __len) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
+extern int qecvt_r (long double __value, int __ndigit,
+      int *__restrict __decpt, int *__restrict __sign,
+      char *__restrict __buf, size_t __len)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
+extern int qfcvt_r (long double __value, int __ndigit,
+      int *__restrict __decpt, int *__restrict __sign,
+      char *__restrict __buf, size_t __len)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (3, 4, 5)));
+extern int mblen (__const char *__s, size_t __n) __attribute__ ((__nothrow__)) ;
+extern int mbtowc (wchar_t *__restrict __pwc,
+     __const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__)) ;
+extern int wctomb (char *__s, wchar_t __wchar) __attribute__ ((__nothrow__)) ;
+extern size_t mbstowcs (wchar_t *__restrict __pwcs,
+   __const char *__restrict __s, size_t __n) __attribute__ ((__nothrow__));
+extern size_t wcstombs (char *__restrict __s,
+   __const wchar_t *__restrict __pwcs, size_t __n)
+     __attribute__ ((__nothrow__));
+extern int rpmatch (__const char *__response) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern int getsubopt (char **__restrict __optionp,
+        char *__const *__restrict __tokens,
+        char **__restrict __valuep)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2, 3))) ;
+extern void setkey (__const char *__key) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern int posix_openpt (int __oflag) ;
+extern int grantpt (int __fd) __attribute__ ((__nothrow__));
+extern int unlockpt (int __fd) __attribute__ ((__nothrow__));
+extern char *ptsname (int __fd) __attribute__ ((__nothrow__)) ;
+extern int ptsname_r (int __fd, char *__buf, size_t __buflen)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
+extern int getpt (void);
+extern int getloadavg (double __loadavg[], int __nelem)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern void *memcpy (void *__restrict __dest,
+       __const void *__restrict __src, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern void *memmove (void *__dest, __const void *__src, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
+        int __c, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern void *memset (void *__s, int __c, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern void *memchr (__const void *__s, int __c, size_t __n)
+      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern void *rawmemchr (__const void *__s, int __c)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern void *memrchr (__const void *__s, int __c, size_t __n)
+      __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *strncpy (char *__restrict __dest,
+        __const char *__restrict __src, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
+        size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int strcmp (__const char *__s1, __const char *__s2)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int strcoll (__const char *__s1, __const char *__s2)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern size_t strxfrm (char *__restrict __dest,
+         __const char *__restrict __src, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
+extern int strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
+extern size_t strxfrm_l (char *__dest, __const char *__src, size_t __n,
+    __locale_t __l) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 4)));
+extern char *strdup (__const char *__s)
+     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
+extern char *strndup (__const char *__string, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) __attribute__ ((__nonnull__ (1)));
+extern char *strchr (__const char *__s, int __c)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern char *strrchr (__const char *__s, int __c)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern char *strchrnul (__const char *__s, int __c)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern size_t strcspn (__const char *__s, __const char *__reject)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern size_t strspn (__const char *__s, __const char *__accept)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *strpbrk (__const char *__s, __const char *__accept)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *strstr (__const char *__haystack, __const char *__needle)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
+extern char *__strtok_r (char *__restrict __s,
+    __const char *__restrict __delim,
+    char **__restrict __save_ptr)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));
+extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
+         char **__restrict __save_ptr)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2, 3)));
+extern char *strcasestr (__const char *__haystack, __const char *__needle)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern void *memmem (__const void *__haystack, size_t __haystacklen,
+       __const void *__needle, size_t __needlelen)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 3)));
+extern void *__mempcpy (void *__restrict __dest,
+   __const void *__restrict __src, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern void *mempcpy (void *__restrict __dest,
+        __const void *__restrict __src, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern size_t strlen (__const char *__s)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern size_t strnlen (__const char *__string, size_t __maxlen)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern char *strerror (int __errnum) __attribute__ ((__nothrow__));
+extern char *strerror_r (int __errnum, char *__buf, size_t __buflen)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (2)));
+extern char *strerror_l (int __errnum, __locale_t __l) __attribute__ ((__nothrow__));
+extern void __bzero (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern void bcopy (__const void *__src, void *__dest, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern void bzero (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *index (__const char *__s, int __c)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern char *rindex (__const char *__s, int __c)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1)));
+extern int ffs (int __i) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
+extern int ffsl (long int __l) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
+__extension__ extern int ffsll (long long int __ll)
+     __attribute__ ((__nothrow__)) __attribute__ ((__const__));
+extern int strcasecmp (__const char *__s1, __const char *__s2)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int strcasecmp_l (__const char *__s1, __const char *__s2,
+    __locale_t __loc)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 3)));
+extern int strncasecmp_l (__const char *__s1, __const char *__s2,
+     size_t __n, __locale_t __loc)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2, 4)));
+extern char *strsep (char **__restrict __stringp,
+       __const char *__restrict __delim)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern int strverscmp (__const char *__s1, __const char *__s2)
+     __attribute__ ((__nothrow__)) __attribute__ ((__pure__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *strsignal (int __sig) __attribute__ ((__nothrow__));
+extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *__stpncpy (char *__restrict __dest,
+   __const char *__restrict __src, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *stpncpy (char *__restrict __dest,
+        __const char *__restrict __src, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1, 2)));
+extern char *strfry (char *__string) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern void *memfrob (void *__s, size_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern char *basename (__const char *__filename) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern void *__rawmemchr (const void *__s, int __c);
+extern __inline size_t __strcspn_c1 (__const char *__s, int __reject);
+extern __inline size_t
+__strcspn_c1 (__const char *__s, int __reject)
+{
+  register size_t __result = 0;
+  while (__s[__result] != '\0' && __s[__result] != __reject)
+    ++__result;
+  return __result;
+}
+extern __inline size_t __strcspn_c2 (__const char *__s, int __reject1,
+         int __reject2);
+extern __inline size_t
+__strcspn_c2 (__const char *__s, int __reject1, int __reject2)
+{
+  register size_t __result = 0;
+  while (__s[__result] != '\0' && __s[__result] != __reject1
+  && __s[__result] != __reject2)
+    ++__result;
+  return __result;
+}
+extern __inline size_t __strcspn_c3 (__const char *__s, int __reject1,
+         int __reject2, int __reject3);
+extern __inline size_t
+__strcspn_c3 (__const char *__s, int __reject1, int __reject2,
+       int __reject3)
+{
+  register size_t __result = 0;
+  while (__s[__result] != '\0' && __s[__result] != __reject1
+  && __s[__result] != __reject2 && __s[__result] != __reject3)
+    ++__result;
+  return __result;
+}
+extern __inline size_t __strspn_c1 (__const char *__s, int __accept);
+extern __inline size_t
+__strspn_c1 (__const char *__s, int __accept)
+{
+  register size_t __result = 0;
+  while (__s[__result] == __accept)
+    ++__result;
+  return __result;
+}
+extern __inline size_t __strspn_c2 (__const char *__s, int __accept1,
+        int __accept2);
+extern __inline size_t
+__strspn_c2 (__const char *__s, int __accept1, int __accept2)
+{
+  register size_t __result = 0;
+  while (__s[__result] == __accept1 || __s[__result] == __accept2)
+    ++__result;
+  return __result;
+}
+extern __inline size_t __strspn_c3 (__const char *__s, int __accept1,
+        int __accept2, int __accept3);
+extern __inline size_t
+__strspn_c3 (__const char *__s, int __accept1, int __accept2, int __accept3)
+{
+  register size_t __result = 0;
+  while (__s[__result] == __accept1 || __s[__result] == __accept2
+  || __s[__result] == __accept3)
+    ++__result;
+  return __result;
+}
+extern __inline char *__strpbrk_c2 (__const char *__s, int __accept1,
+         int __accept2);
+extern __inline char *
+__strpbrk_c2 (__const char *__s, int __accept1, int __accept2)
+{
+  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2)
+    ++__s;
+  return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
+}
+extern __inline char *__strpbrk_c3 (__const char *__s, int __accept1,
+         int __accept2, int __accept3);
+extern __inline char *
+__strpbrk_c3 (__const char *__s, int __accept1, int __accept2,
+       int __accept3)
+{
+  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2
+  && *__s != __accept3)
+    ++__s;
+  return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
+}
+extern __inline char *__strtok_r_1c (char *__s, char __sep, char **__nextp);
+extern __inline char *
+__strtok_r_1c (char *__s, char __sep, char **__nextp)
+{
+  char *__result;
+  if (__s == ((void *)0))
+    __s = *__nextp;
+  while (*__s == __sep)
+    ++__s;
+  __result = ((void *)0);
+  if (*__s != '\0')
+    {
+      __result = __s++;
+      while (*__s != '\0')
+ if (*__s++ == __sep)
+   {
+     __s[-1] = '\0';
+     break;
+   }
+      *__nextp = __s;
+    }
+  return __result;
+}
+extern char *__strsep_g (char **__stringp, __const char *__delim);
+extern __inline char *__strsep_1c (char **__s, char __reject);
+extern __inline char *
+__strsep_1c (char **__s, char __reject)
+{
+  register char *__retval = *__s;
+  if (__retval != ((void *)0) && (*__s = (__extension__ (__builtin_constant_p (__reject) && !__builtin_constant_p (__retval) && (__reject) == '\0' ? (char *) __rawmemchr (__retval, __reject) : __builtin_strchr (__retval, __reject)))) != ((void *)0))
+    *(*__s)++ = '\0';
+  return __retval;
+}
+extern __inline char *__strsep_2c (char **__s, char __reject1, char __reject2);
+extern __inline char *
+__strsep_2c (char **__s, char __reject1, char __reject2)
+{
+  register char *__retval = *__s;
+  if (__retval != ((void *)0))
+    {
+      register char *__cp = __retval;
+      while (1)
+ {
+   if (*__cp == '\0')
+     {
+       __cp = ((void *)0);
+   break;
+     }
+   if (*__cp == __reject1 || *__cp == __reject2)
+     {
+       *__cp++ = '\0';
+       break;
+     }
+   ++__cp;
+ }
+      *__s = __cp;
+    }
+  return __retval;
+}
+extern __inline char *__strsep_3c (char **__s, char __reject1, char __reject2,
+       char __reject3);
+extern __inline char *
+__strsep_3c (char **__s, char __reject1, char __reject2, char __reject3)
+{
+  register char *__retval = *__s;
+  if (__retval != ((void *)0))
+    {
+      register char *__cp = __retval;
+      while (1)
+ {
+   if (*__cp == '\0')
+     {
+       __cp = ((void *)0);
+   break;
+     }
+   if (*__cp == __reject1 || *__cp == __reject2 || *__cp == __reject3)
+     {
+       *__cp++ = '\0';
+       break;
+     }
+   ++__cp;
+ }
+      *__s = __cp;
+    }
+  return __retval;
+}
+extern char *__strdup (__const char *__string) __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
+extern char *__strndup (__const char *__string, size_t __n)
+     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__));
+typedef unsigned char uint8_t;
+typedef unsigned short int uint16_t;
+typedef unsigned int uint32_t;
+__extension__
+typedef unsigned long long int uint64_t;
+typedef signed char int_least8_t;
+typedef short int int_least16_t;
+typedef int int_least32_t;
+__extension__
+typedef long long int int_least64_t;
+typedef unsigned char uint_least8_t;
+typedef unsigned short int uint_least16_t;
+typedef unsigned int uint_least32_t;
+__extension__
+typedef unsigned long long int uint_least64_t;
+typedef signed char int_fast8_t;
+typedef int int_fast16_t;
+typedef int int_fast32_t;
+__extension__
+typedef long long int int_fast64_t;
+typedef unsigned char uint_fast8_t;
+typedef unsigned int uint_fast16_t;
+typedef unsigned int uint_fast32_t;
+__extension__
+typedef unsigned long long int uint_fast64_t;
+typedef int intptr_t;
+typedef unsigned int uintptr_t;
+__extension__
+typedef long long int intmax_t;
+__extension__
+typedef unsigned long long int uintmax_t;
+typedef int __gwchar_t;
+typedef struct
+  {
+    long long int quot;
+    long long int rem;
+  } imaxdiv_t;
+extern intmax_t imaxabs (intmax_t __n) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
+extern imaxdiv_t imaxdiv (intmax_t __numer, intmax_t __denom)
+      __attribute__ ((__nothrow__)) __attribute__ ((__const__));
+extern intmax_t strtoimax (__const char *__restrict __nptr,
+      char **__restrict __endptr, int __base) __attribute__ ((__nothrow__));
+extern uintmax_t strtoumax (__const char *__restrict __nptr,
+       char ** __restrict __endptr, int __base) __attribute__ ((__nothrow__));
+extern intmax_t wcstoimax (__const __gwchar_t *__restrict __nptr,
+      __gwchar_t **__restrict __endptr, int __base)
+     __attribute__ ((__nothrow__));
+extern uintmax_t wcstoumax (__const __gwchar_t *__restrict __nptr,
+       __gwchar_t ** __restrict __endptr, int __base)
+     __attribute__ ((__nothrow__));
+__extension__
+extern long long int __strtoll_internal (__const char *__restrict __nptr,
+      char **__restrict __endptr,
+      int __base, int __group)
+  __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern __inline intmax_t
+__attribute__ ((__nothrow__)) strtoimax (__const char *__restrict nptr, char **__restrict endptr, int base)
+{
+  return __strtoll_internal (nptr, endptr, base, 0);
+}
+__extension__
+extern unsigned long long int __strtoull_internal (__const char *
+         __restrict __nptr,
+         char **
+         __restrict __endptr,
+         int __base,
+         int __group)
+  __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern __inline uintmax_t
+__attribute__ ((__nothrow__)) strtoumax (__const char *__restrict nptr, char **__restrict endptr, int base)
+{
+  return __strtoull_internal (nptr, endptr, base, 0);
+}
+__extension__
+extern long long int __wcstoll_internal (__const __gwchar_t *
+      __restrict __nptr,
+      __gwchar_t **__restrict __endptr,
+      int __base, int __group)
+  __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern __inline intmax_t
+__attribute__ ((__nothrow__)) wcstoimax (__const __gwchar_t *__restrict nptr, __gwchar_t **__restrict endptr, int base)
+{
+  return __wcstoll_internal (nptr, endptr, base, 0);
+}
+__extension__
+extern unsigned long long int __wcstoull_internal (__const __gwchar_t *
+         __restrict __nptr,
+         __gwchar_t **
+         __restrict __endptr,
+         int __base,
+         int __group)
+  __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1))) ;
+extern __inline uintmax_t
+__attribute__ ((__nothrow__)) wcstoumax (__const __gwchar_t *__restrict nptr, __gwchar_t **__restrict endptr, int base)
+{
+  return __wcstoull_internal (nptr, endptr, base, 0);
+}
+typedef int ptrdiff_t;
+struct _IO_FILE;
+typedef struct _IO_FILE FILE;
+typedef struct _IO_FILE __FILE;
+typedef struct
+{
+  int __count;
+  union
+  {
+    unsigned int __wch;
+    char __wchb[4];
+  } __value;
+} __mbstate_t;
+typedef struct
+{
+  __off_t __pos;
+  __mbstate_t __state;
+} _G_fpos_t;
+typedef struct
+{
+  __off64_t __pos;
+  __mbstate_t __state;
+} _G_fpos64_t;
+typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
+typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
+typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
+typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
+typedef __builtin_va_list __gnuc_va_list;
+struct _IO_jump_t; struct _IO_FILE;
+typedef void _IO_lock_t;
+struct _IO_marker {
+  struct _IO_marker *_next;
+  struct _IO_FILE *_sbuf;
+  int _pos;
+};
+enum __codecvt_result
+{
+  __codecvt_ok,
+  __codecvt_partial,
+  __codecvt_error,
+  __codecvt_noconv
+};
+struct _IO_FILE {
+  int _flags;
+  char* _IO_read_ptr;
+  char* _IO_read_end;
+  char* _IO_read_base;
+  char* _IO_write_base;
+  char* _IO_write_ptr;
+  char* _IO_write_end;
+  char* _IO_buf_base;
+  char* _IO_buf_end;
+  char *_IO_save_base;
+  char *_IO_backup_base;
+  char *_IO_save_end;
+  struct _IO_marker *_markers;
+  struct _IO_FILE *_chain;
+  int _fileno;
+  int _flags2;
+  __off_t _old_offset;
+  unsigned short _cur_column;
+  signed char _vtable_offset;
+  char _shortbuf[1];
+  _IO_lock_t *_lock;
+  __off64_t _offset;
+  void *__pad1;
+  void *__pad2;
+  void *__pad3;
+  void *__pad4;
+  size_t __pad5;
+  int _mode;
+  char _unused2[15 * sizeof (int) - 4 * sizeof (void *) - sizeof (size_t)];
+};
+typedef struct _IO_FILE _IO_FILE;
+struct _IO_FILE_plus;
+extern struct _IO_FILE_plus _IO_2_1_stdin_;
+extern struct _IO_FILE_plus _IO_2_1_stdout_;
+extern struct _IO_FILE_plus _IO_2_1_stderr_;
+typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);
+typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
+     size_t __n);
+typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);
+typedef int __io_close_fn (void *__cookie);
+typedef __io_read_fn cookie_read_function_t;
+typedef __io_write_fn cookie_write_function_t;
+typedef __io_seek_fn cookie_seek_function_t;
+typedef __io_close_fn cookie_close_function_t;
+typedef struct
+{
+  __io_read_fn *read;
+  __io_write_fn *write;
+  __io_seek_fn *seek;
+  __io_close_fn *close;
+} _IO_cookie_io_functions_t;
+typedef _IO_cookie_io_functions_t cookie_io_functions_t;
+struct _IO_cookie_file;
+extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
+        void *__cookie, _IO_cookie_io_functions_t __fns);
+extern int __underflow (_IO_FILE *);
+extern int __uflow (_IO_FILE *);
+extern int __overflow (_IO_FILE *, int);
+extern int _IO_getc (_IO_FILE *__fp);
+extern int _IO_putc (int __c, _IO_FILE *__fp);
+extern int _IO_feof (_IO_FILE *__fp) __attribute__ ((__nothrow__));
+extern int _IO_ferror (_IO_FILE *__fp) __attribute__ ((__nothrow__));
+extern int _IO_peekc_locked (_IO_FILE *__fp);
+extern void _IO_flockfile (_IO_FILE *) __attribute__ ((__nothrow__));
+extern void _IO_funlockfile (_IO_FILE *) __attribute__ ((__nothrow__));
+extern int _IO_ftrylockfile (_IO_FILE *) __attribute__ ((__nothrow__));
+extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
+   __gnuc_va_list, int *__restrict);
+extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
+    __gnuc_va_list);
+extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t);
+extern size_t _IO_sgetn (_IO_FILE *, void *, size_t);
+extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int);
+extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int);
+extern void _IO_free_backup_area (_IO_FILE *) __attribute__ ((__nothrow__));
+typedef __gnuc_va_list va_list;
+typedef _G_fpos64_t fpos_t;
+typedef _G_fpos64_t fpos64_t;
+extern struct _IO_FILE *stdin;
+extern struct _IO_FILE *stdout;
+extern struct _IO_FILE *stderr;
+extern int remove (__const char *__filename) __attribute__ ((__nothrow__));
+extern int rename (__const char *__old, __const char *__new) __attribute__ ((__nothrow__));
+extern int renameat (int __oldfd, __const char *__old, int __newfd,
+       __const char *__new) __attribute__ ((__nothrow__));
+extern FILE *tmpfile (void) __asm__ ("" "tmpfile64") ;
+extern FILE *tmpfile64 (void) ;
+extern char *tmpnam (char *__s) __attribute__ ((__nothrow__)) ;
+extern char *tmpnam_r (char *__s) __attribute__ ((__nothrow__)) ;
+extern char *tempnam (__const char *__dir, __const char *__pfx)
+     __attribute__ ((__nothrow__)) __attribute__ ((__malloc__)) ;
+extern int fclose (FILE *__stream);
+extern int fflush (FILE *__stream);
+extern int fflush_unlocked (FILE *__stream);
+extern int fcloseall (void);
+extern FILE *fopen (__const char *__restrict __filename, __const char *__restrict __modes) __asm__ ("" "fopen64")
+  ;
+extern FILE *freopen (__const char *__restrict __filename, __const char *__restrict __modes, FILE *__restrict __stream) __asm__ ("" "freopen64")
+  ;
+extern FILE *fopen64 (__const char *__restrict __filename,
+        __const char *__restrict __modes) ;
+extern FILE *freopen64 (__const char *__restrict __filename,
+   __const char *__restrict __modes,
+   FILE *__restrict __stream) ;
+extern FILE *fdopen (int __fd, __const char *__modes) __attribute__ ((__nothrow__)) ;
+extern FILE *fopencookie (void *__restrict __magic_cookie,
+     __const char *__restrict __modes,
+     _IO_cookie_io_functions_t __io_funcs) __attribute__ ((__nothrow__)) ;
+extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes)
+  __attribute__ ((__nothrow__)) ;
+extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __attribute__ ((__nothrow__)) ;
+extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __attribute__ ((__nothrow__));
+extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
+      int __modes, size_t __n) __attribute__ ((__nothrow__));
+extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
+         size_t __size) __attribute__ ((__nothrow__));
+extern void setlinebuf (FILE *__stream) __attribute__ ((__nothrow__));
+extern int fprintf (FILE *__restrict __stream,
+      __const char *__restrict __format, ...);
+extern int printf (__const char *__restrict __format, ...);
+extern int sprintf (char *__restrict __s,
+      __const char *__restrict __format, ...) __attribute__ ((__nothrow__));
+extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
+       __gnuc_va_list __arg);
+extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg);
+extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
+       __gnuc_va_list __arg) __attribute__ ((__nothrow__));
+extern int snprintf (char *__restrict __s, size_t __maxlen,
+       __const char *__restrict __format, ...)
+     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 4)));
+extern int vsnprintf (char *__restrict __s, size_t __maxlen,
+        __const char *__restrict __format, __gnuc_va_list __arg)
+     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 3, 0)));
+extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
+        __gnuc_va_list __arg)
+     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 0))) ;
+extern int __asprintf (char **__restrict __ptr,
+         __const char *__restrict __fmt, ...)
+     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3))) ;
+extern int asprintf (char **__restrict __ptr,
+       __const char *__restrict __fmt, ...)
+     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3))) ;
+extern int vdprintf (int __fd, __const char *__restrict __fmt,
+       __gnuc_va_list __arg)
+     __attribute__ ((__format__ (__printf__, 2, 0)));
+extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
+     __attribute__ ((__format__ (__printf__, 2, 3)));
+extern int fscanf (FILE *__restrict __stream,
+     __const char *__restrict __format, ...) ;
+extern int scanf (__const char *__restrict __format, ...) ;
+extern int sscanf (__const char *__restrict __s,
+     __const char *__restrict __format, ...) __attribute__ ((__nothrow__));
+extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
+      __gnuc_va_list __arg)
+     __attribute__ ((__format__ (__scanf__, 2, 0))) ;
+extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)
+     __attribute__ ((__format__ (__scanf__, 1, 0))) ;
+extern int vsscanf (__const char *__restrict __s,
+      __const char *__restrict __format, __gnuc_va_list __arg)
+     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__scanf__, 2, 0)));
+extern int fgetc (FILE *__stream);
+extern int getc (FILE *__stream);
+extern int getchar (void);
+extern int getc_unlocked (FILE *__stream);
+extern int getchar_unlocked (void);
+extern int fgetc_unlocked (FILE *__stream);
+extern int fputc (int __c, FILE *__stream);
+extern int putc (int __c, FILE *__stream);
+extern int putchar (int __c);
+extern int fputc_unlocked (int __c, FILE *__stream);
+extern int putc_unlocked (int __c, FILE *__stream);
+extern int putchar_unlocked (int __c);
+extern int getw (FILE *__stream);
+extern int putw (int __w, FILE *__stream);
+extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
+     ;
+extern char *gets (char *__s) ;
+extern char *fgets_unlocked (char *__restrict __s, int __n,
+        FILE *__restrict __stream) ;
+extern __ssize_t __getdelim (char **__restrict __lineptr,
+          size_t *__restrict __n, int __delimiter,
+          FILE *__restrict __stream) ;
+extern __ssize_t getdelim (char **__restrict __lineptr,
+        size_t *__restrict __n, int __delimiter,
+        FILE *__restrict __stream) ;
+extern __ssize_t getline (char **__restrict __lineptr,
+       size_t *__restrict __n,
+       FILE *__restrict __stream) ;
+extern int fputs (__const char *__restrict __s, FILE *__restrict __stream);
+extern int puts (__const char *__s);
+extern int ungetc (int __c, FILE *__stream);
+extern size_t fread (void *__restrict __ptr, size_t __size,
+       size_t __n, FILE *__restrict __stream) ;
+extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
+        size_t __n, FILE *__restrict __s) ;
+extern int fputs_unlocked (__const char *__restrict __s,
+      FILE *__restrict __stream);
+extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
+         size_t __n, FILE *__restrict __stream) ;
+extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
+          size_t __n, FILE *__restrict __stream) ;
+extern int fseek (FILE *__stream, long int __off, int __whence);
+extern long int ftell (FILE *__stream) ;
+extern void rewind (FILE *__stream);
+extern int fseeko (FILE *__stream, __off64_t __off, int __whence) __asm__ ("" "fseeko64");
+extern __off64_t ftello (FILE *__stream) __asm__ ("" "ftello64");
+extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos) __asm__ ("" "fgetpos64");
+extern int fsetpos (FILE *__stream, __const fpos_t *__pos) __asm__ ("" "fsetpos64");
+extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
+extern __off64_t ftello64 (FILE *__stream) ;
+extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
+extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos);
+extern void clearerr (FILE *__stream) __attribute__ ((__nothrow__));
+extern int feof (FILE *__stream) __attribute__ ((__nothrow__)) ;
+extern int ferror (FILE *__stream) __attribute__ ((__nothrow__)) ;
+extern void clearerr_unlocked (FILE *__stream) __attribute__ ((__nothrow__));
+extern int feof_unlocked (FILE *__stream) __attribute__ ((__nothrow__)) ;
+extern int ferror_unlocked (FILE *__stream) __attribute__ ((__nothrow__)) ;
+extern void perror (__const char *__s);
+extern int sys_nerr;
+extern __const char *__const sys_errlist[];
+extern int _sys_nerr;
+extern __const char *__const _sys_errlist[];
+extern int fileno (FILE *__stream) __attribute__ ((__nothrow__)) ;
+extern int fileno_unlocked (FILE *__stream) __attribute__ ((__nothrow__)) ;
+extern FILE *popen (__const char *__command, __const char *__modes) ;
+extern int pclose (FILE *__stream);
+extern char *ctermid (char *__s) __attribute__ ((__nothrow__));
+extern char *cuserid (char *__s);
+struct obstack;
+extern int obstack_printf (struct obstack *__restrict __obstack,
+      __const char *__restrict __format, ...)
+     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 3)));
+extern int obstack_vprintf (struct obstack *__restrict __obstack,
+       __const char *__restrict __format,
+       __gnuc_va_list __args)
+     __attribute__ ((__nothrow__)) __attribute__ ((__format__ (__printf__, 2, 0)));
+extern void flockfile (FILE *__stream) __attribute__ ((__nothrow__));
+extern int ftrylockfile (FILE *__stream) __attribute__ ((__nothrow__)) ;
+extern void funlockfile (FILE *__stream) __attribute__ ((__nothrow__));
+extern __inline int
+vprintf (__const char *__restrict __fmt, __gnuc_va_list __arg)
+{
+  return vfprintf (stdout, __fmt, __arg);
+}
+extern __inline int
+getchar (void)
+{
+  return _IO_getc (stdin);
+}
+extern __inline int
+fgetc_unlocked (FILE *__fp)
+{
+  return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
+}
+extern __inline int
+getc_unlocked (FILE *__fp)
+{
+  return (__builtin_expect (((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end), 0) ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
+}
+extern __inline int
+getchar_unlocked (void)
+{
+  return (__builtin_expect (((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end), 0) ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
+}
+extern __inline int
+putchar (int __c)
+{
+  return _IO_putc (__c, stdout);
+}
+extern __inline int
+fputc_unlocked (int __c, FILE *__stream)
+{
+  return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
+}
+extern __inline int
+putc_unlocked (int __c, FILE *__stream)
+{
+  return (__builtin_expect (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end), 0) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
+}
+extern __inline int
+putchar_unlocked (int __c)
+{
+  return (__builtin_expect (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end), 0) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
+}
+extern __inline __ssize_t
+getline (char **__lineptr, size_t *__n, FILE *__stream)
+{
+  return __getdelim (__lineptr, __n, '\n', __stream);
+}
+extern __inline int
+__attribute__ ((__nothrow__)) feof_unlocked (FILE *__stream)
+{
+  return (((__stream)->_flags & 0x10) != 0);
+}
+extern __inline int
+__attribute__ ((__nothrow__)) ferror_unlocked (FILE *__stream)
+{
+  return (((__stream)->_flags & 0x20) != 0);
+}
+void *ruby_xmalloc(size_t);
+void *ruby_xmalloc2(size_t,size_t);
+void *ruby_xcalloc(size_t,size_t);
+void *ruby_xrealloc(void*,size_t);
+void *ruby_xrealloc2(void*,size_t,size_t);
+void ruby_xfree(void*);
+typedef unsigned long VALUE;
+typedef unsigned long ID;
+VALUE rb_int2inum(long);
+VALUE rb_uint2inum(VALUE);
+VALUE rb_ll2inum(long long);
+VALUE rb_ull2inum(unsigned long long);
+enum ruby_special_consts {
+    RUBY_Qfalse = 0,
+    RUBY_Qtrue = 2,
+    RUBY_Qnil = 4,
+    RUBY_Qundef = 6,
+    RUBY_IMMEDIATE_MASK = 0x03,
+    RUBY_FIXNUM_FLAG = 0x01,
+    RUBY_SYMBOL_FLAG = 0x0e,
+    RUBY_SPECIAL_SHIFT = 8
+};
+enum ruby_value_type {
+    RUBY_T_NONE = 0x00,
+    RUBY_T_OBJECT = 0x01,
+    RUBY_T_CLASS = 0x02,
+    RUBY_T_MODULE = 0x03,
+    RUBY_T_FLOAT = 0x04,
+    RUBY_T_STRING = 0x05,
+    RUBY_T_REGEXP = 0x06,
+    RUBY_T_ARRAY = 0x07,
+    RUBY_T_HASH = 0x08,
+    RUBY_T_STRUCT = 0x09,
+    RUBY_T_BIGNUM = 0x0a,
+    RUBY_T_FILE = 0x0b,
+    RUBY_T_DATA = 0x0c,
+    RUBY_T_MATCH = 0x0d,
+    RUBY_T_COMPLEX = 0x0e,
+    RUBY_T_RATIONAL = 0x0f,
+    RUBY_T_NIL = 0x11,
+    RUBY_T_TRUE = 0x12,
+    RUBY_T_FALSE = 0x13,
+    RUBY_T_SYMBOL = 0x14,
+    RUBY_T_FIXNUM = 0x15,
+    RUBY_T_UNDEF = 0x1b,
+    RUBY_T_NODE = 0x1c,
+    RUBY_T_ICLASS = 0x1d,
+    RUBY_T_ZOMBIE = 0x1e,
+    RUBY_T_MASK = 0x1f
+};
+void rb_check_type(VALUE,int);
+VALUE rb_str_to_str(VALUE);
+VALUE rb_string_value(volatile VALUE*);
+char *rb_string_value_ptr(volatile VALUE*);
+char *rb_string_value_cstr(volatile VALUE*);
+void rb_check_safe_obj(VALUE);
+void rb_check_safe_str(VALUE);
+VALUE rb_str_export(VALUE);
+VALUE rb_str_export_locale(VALUE);
+VALUE rb_get_path(VALUE);
+VALUE rb_get_path_no_checksafe(VALUE);
+void rb_secure(int);
+int rb_safe_level(void);
+void rb_set_safe_level(int);
+void rb_set_safe_level_force(int);
+void rb_secure_update(VALUE);
+VALUE rb_errinfo(void);
+void rb_set_errinfo(VALUE);
+long rb_num2long(VALUE);
+VALUE rb_num2ulong(VALUE);
+static inline long
+NUM2LONG(VALUE x)
+{
+    return (((long)(x))&RUBY_FIXNUM_FLAG) ? (((long)x)>>(int)1) : rb_num2long(x);
+}
+long long rb_num2ll(VALUE);
+unsigned long long rb_num2ull(VALUE);
+static inline long long
+NUM2LL(VALUE x)
+{
+    return (((long)(x))&RUBY_FIXNUM_FLAG) ? (((long)x)>>(int)1) : rb_num2ll(x);
+}
+double rb_num2dbl(VALUE);
+VALUE rb_uint2big(VALUE);
+VALUE rb_int2big(long);
+static inline VALUE
+INT2NUM(int v)
+{
+    if (!(((v) < (2147483647L>>1)+1) && ((v) >= (((long)(-2147483647L - 1L))>>(int)1))))
+ return rb_int2big(v);
+    return ((VALUE)(((long)(v))<<1 | RUBY_FIXNUM_FLAG));
+}
+static inline VALUE
+UINT2NUM(unsigned int v)
+{
+    if (!((v) < (2147483647L>>1)+1))
+ return rb_uint2big(v);
+    return ((VALUE)(((long)(v))<<1 | RUBY_FIXNUM_FLAG));
+}
+static inline VALUE
+LONG2NUM(long v)
+{
+    if ((((v) < (2147483647L>>1)+1) && ((v) >= (((long)(-2147483647L - 1L))>>(int)1)))) return ((VALUE)(((long)(v))<<1 | RUBY_FIXNUM_FLAG));
+    return rb_int2big(v);
+}
+static inline VALUE
+ULONG2NUM(unsigned long v)
+{
+    if (((v) < (2147483647L>>1)+1)) return ((VALUE)(((long)(v))<<1 | RUBY_FIXNUM_FLAG));
+    return rb_uint2big(v);
+}
+char *rb_str2cstr(VALUE,long*);
+VALUE rb_newobj(void);
+struct RBasic {
+    VALUE flags;
+    VALUE klass;
+};
+struct RObject {
+    struct RBasic basic;
+    union {
+ struct {
+     long numiv;
+     VALUE *ivptr;
+            struct st_table *iv_index_tbl;
+ } heap;
+ VALUE ary[3];
+    } as;
+};
+typedef struct {
+    VALUE super;
+    struct st_table *iv_tbl;
+} rb_classext_t;
+struct RClass {
+    struct RBasic basic;
+    rb_classext_t *ptr;
+    struct st_table *m_tbl;
+    struct st_table *iv_index_tbl;
+};
+struct RFloat {
+    struct RBasic basic;
+    double float_value;
+};
+struct RString {
+    struct RBasic basic;
+    union {
+ struct {
+     long len;
+     char *ptr;
+     union {
+  long capa;
+  VALUE shared;
+     } aux;
+ } heap;
+ char ary[((sizeof(VALUE)*3)/sizeof(char)-1) + 1];
+    } as;
+};
+struct RArray {
+    struct RBasic basic;
+    union {
+ struct {
+     long len;
+     union {
+  long capa;
+  VALUE shared;
+     } aux;
+     VALUE *ptr;
+ } heap;
+ VALUE ary[3];
+    } as;
+};
+struct RRegexp {
+    struct RBasic basic;
+    struct re_pattern_buffer *ptr;
+    VALUE src;
+    unsigned long usecnt;
+};
+struct RHash {
+    struct RBasic basic;
+    struct st_table *ntbl;
+    int iter_lev;
+    VALUE ifnone;
+};
+struct RFile {
+    struct RBasic basic;
+    struct rb_io_t *fptr;
+};
+struct RRational {
+    struct RBasic basic;
+    VALUE num;
+    VALUE den;
+};
+struct RComplex {
+    struct RBasic basic;
+    VALUE real;
+    VALUE imag;
+};
+struct RData {
+    struct RBasic basic;
+    void (*dmark)(void*);
+    void (*dfree)(void*);
+    void *data;
+};
+typedef void (*RUBY_DATA_FUNC)(void*);
+VALUE rb_data_object_alloc(VALUE,void*,RUBY_DATA_FUNC,RUBY_DATA_FUNC);
+struct RStruct {
+    struct RBasic basic;
+    union {
+ struct {
+     long len;
+     VALUE *ptr;
+ } heap;
+ VALUE ary[3];
+    } as;
+};
+struct RBignum {
+    struct RBasic basic;
+    union {
+        struct {
+            long len;
+            unsigned int *digits;
+        } heap;
+        unsigned int ary[((sizeof(VALUE)*3)/sizeof(unsigned int))];
+    } as;
+};
+void rb_obj_infect(VALUE,VALUE);
+typedef int ruby_glob_func(const char*,VALUE, void*);
+void rb_glob(const char*,void(*)(const char*,VALUE,void*),VALUE);
+int ruby_glob(const char*,int,ruby_glob_func*,VALUE);
+int ruby_brace_glob(const char*,int,ruby_glob_func*,VALUE);
+VALUE rb_define_class(const char*,VALUE);
+VALUE rb_define_module(const char*);
+VALUE rb_define_class_under(VALUE, const char*, VALUE);
+VALUE rb_define_module_under(VALUE, const char*);
+void rb_include_module(VALUE,VALUE);
+void rb_extend_object(VALUE,VALUE);
+struct rb_global_variable;
+typedef VALUE rb_gvar_getter_t(ID id, void *data, struct rb_global_variable *gvar);
+typedef void rb_gvar_setter_t(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
+typedef void rb_gvar_marker_t(VALUE *var);
+VALUE rb_gvar_undef_getter(ID id, void *data, struct rb_global_variable *gvar);
+void rb_gvar_undef_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
+void rb_gvar_undef_marker(VALUE *var);
+VALUE rb_gvar_val_getter(ID id, void *data, struct rb_global_variable *gvar);
+void rb_gvar_val_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
+void rb_gvar_val_marker(VALUE *var);
+VALUE rb_gvar_var_getter(ID id, void *data, struct rb_global_variable *gvar);
+void rb_gvar_var_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
+void rb_gvar_var_marker(VALUE *var);
+void rb_gvar_readonly_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
+void rb_define_variable(const char*,VALUE*);
+void rb_define_virtual_variable(const char*,VALUE(*)(),void(*)());
+void rb_define_hooked_variable(const char*,VALUE*,VALUE(*)(),void(*)());
+void rb_define_readonly_variable(const char*,VALUE*);
+void rb_define_const(VALUE,const char*,VALUE);
+void rb_define_global_const(const char*,VALUE);
+void rb_define_method(VALUE,const char*,VALUE(*)(),int);
+void rb_define_module_function(VALUE,const char*,VALUE(*)(),int);
+void rb_define_global_function(const char*,VALUE(*)(),int);
+void rb_undef_method(VALUE,const char*);
+void rb_define_alias(VALUE,const char*,const char*);
+void rb_define_attr(VALUE,const char*,int,int);
+void rb_global_variable(VALUE*);
+void rb_gc_register_mark_object(VALUE);
+void rb_gc_register_address(VALUE*);
+void rb_gc_unregister_address(VALUE*);
+ID rb_intern(const char*);
+ID rb_intern2(const char*, long);
+ID rb_intern_str(VALUE str);
+const char *rb_id2name(ID);
+ID rb_to_id(VALUE);
+VALUE rb_id2str(ID);
+const char *rb_class2name(VALUE);
+const char *rb_obj_classname(VALUE);
+void rb_p(VALUE);
+VALUE rb_eval_string(const char*);
+VALUE rb_eval_string_protect(const char*, int*);
+VALUE rb_eval_string_wrap(const char*, int*);
+VALUE rb_funcall(VALUE, ID, int, ...);
+VALUE rb_funcall2(VALUE, ID, int, const VALUE*);
+VALUE rb_funcall3(VALUE, ID, int, const VALUE*);
+int rb_scan_args(int, const VALUE*, const char*, ...);
+VALUE rb_call_super(int, const VALUE*);
+VALUE rb_gv_set(const char*, VALUE);
+VALUE rb_gv_get(const char*);
+VALUE rb_iv_get(VALUE, const char*);
+VALUE rb_iv_set(VALUE, const char*, VALUE);
+VALUE rb_equal(VALUE,VALUE);
+VALUE *rb_ruby_verbose_ptr(void);
+VALUE *rb_ruby_debug_ptr(void);
+__attribute__ ((noreturn)) void rb_raise(VALUE, const char*, ...) __attribute__((format(printf, 2, 3)));
+__attribute__ ((noreturn)) void rb_fatal(const char*, ...) __attribute__((format(printf, 1, 2)));
+__attribute__ ((noreturn)) void rb_bug(const char*, ...) __attribute__((format(printf, 1, 2)));
+__attribute__ ((noreturn)) void rb_sys_fail(const char*);
+__attribute__ ((noreturn)) void rb_iter_break(void);
+__attribute__ ((noreturn)) void rb_exit(int);
+__attribute__ ((noreturn)) void rb_notimplement(void);
+void rb_warning(const char*, ...) __attribute__((format(printf, 1, 2)));
+void rb_compile_warning(const char *, int, const char*, ...) __attribute__((format(printf, 3, 4)));
+void rb_sys_warning(const char*, ...) __attribute__((format(printf, 1, 2)));
+void rb_warn(const char*, ...) __attribute__((format(printf, 1, 2)));
+void rb_compile_warn(const char *, int, const char*, ...) __attribute__((format(printf, 3, 4)));
+typedef VALUE rb_block_call_func(VALUE, VALUE, int, VALUE*);
+VALUE rb_each(VALUE);
+VALUE rb_yield(VALUE);
+VALUE rb_yield_values(int n, ...);
+VALUE rb_yield_values2(int n, const VALUE *argv);
+VALUE rb_yield_splat(VALUE);
+int rb_block_given_p(void);
+void rb_need_block(void);
+VALUE rb_iterate(VALUE(*)(VALUE),VALUE,VALUE(*)(),VALUE);
+VALUE rb_block_call(VALUE,ID,int,VALUE*,VALUE(*)(),VALUE);
+VALUE rb_rescue(VALUE(*)(),VALUE,VALUE(*)(),VALUE);
+VALUE rb_rescue2(VALUE(*)(),VALUE,VALUE(*)(),VALUE,...);
+VALUE rb_ensure(VALUE(*)(),VALUE,VALUE(*)(),VALUE);
+VALUE rb_catch(const char*,VALUE(*)(),VALUE);
+VALUE rb_catch_obj(VALUE,VALUE(*)(),VALUE);
+__attribute__ ((noreturn)) void rb_throw(const char*,VALUE);
+__attribute__ ((noreturn)) void rb_throw_obj(VALUE,VALUE);
+VALUE rb_require(const char*);
+void ruby_init_stack(VALUE*);
+void ruby_init(void);
+void *ruby_options(int, char**);
+int ruby_run_node(void *);
+extern VALUE rb_mKernel;
+extern VALUE rb_mComparable;
+extern VALUE rb_mEnumerable;
+extern VALUE rb_mErrno;
+extern VALUE rb_mFileTest;
+extern VALUE rb_mGC;
+extern VALUE rb_mMath;
+extern VALUE rb_mProcess;
+extern VALUE rb_cBasicObject;
+extern VALUE rb_cObject;
+extern VALUE rb_cArray;
+extern VALUE rb_cBignum;
+extern VALUE rb_cBinding;
+extern VALUE rb_cClass;
+extern VALUE rb_cCont;
+extern VALUE rb_cDir;
+extern VALUE rb_cData;
+extern VALUE rb_cFalseClass;
+extern VALUE rb_cEncoding;
+extern VALUE rb_cEnumerator;
+extern VALUE rb_cFile;
+extern VALUE rb_cFixnum;
+extern VALUE rb_cFloat;
+extern VALUE rb_cHash;
+extern VALUE rb_cInteger;
+extern VALUE rb_cIO;
+extern VALUE rb_cMatch;
+extern VALUE rb_cMethod;
+extern VALUE rb_cModule;
+extern VALUE rb_cNameErrorMesg;
+extern VALUE rb_cNilClass;
+extern VALUE rb_cNumeric;
+extern VALUE rb_cProc;
+extern VALUE rb_cRange;
+extern VALUE rb_cRational;
+extern VALUE rb_cComplex;
+extern VALUE rb_cRegexp;
+extern VALUE rb_cStat;
+extern VALUE rb_cString;
+extern VALUE rb_cStruct;
+extern VALUE rb_cSymbol;
+extern VALUE rb_cThread;
+extern VALUE rb_cTime;
+extern VALUE rb_cTrueClass;
+extern VALUE rb_cUnboundMethod;
+extern VALUE rb_eException;
+extern VALUE rb_eStandardError;
+extern VALUE rb_eSystemExit;
+extern VALUE rb_eInterrupt;
+extern VALUE rb_eSignal;
+extern VALUE rb_eFatal;
+extern VALUE rb_eArgError;
+extern VALUE rb_eEOFError;
+extern VALUE rb_eIndexError;
+extern VALUE rb_eStopIteration;
+extern VALUE rb_eKeyError;
+extern VALUE rb_eRangeError;
+extern VALUE rb_eIOError;
+extern VALUE rb_eRuntimeError;
+extern VALUE rb_eSecurityError;
+extern VALUE rb_eSystemCallError;
+extern VALUE rb_eThreadError;
+extern VALUE rb_eTypeError;
+extern VALUE rb_eZeroDivError;
+extern VALUE rb_eNotImpError;
+extern VALUE rb_eNoMemError;
+extern VALUE rb_eNoMethodError;
+extern VALUE rb_eFloatDomainError;
+extern VALUE rb_eLocalJumpError;
+extern VALUE rb_eSysStackError;
+extern VALUE rb_eRegexpError;
+extern VALUE rb_eEncodingError;
+extern VALUE rb_eEncCompatError;
+extern VALUE rb_eScriptError;
+extern VALUE rb_eNameError;
+extern VALUE rb_eSyntaxError;
+extern VALUE rb_eLoadError;
+extern VALUE rb_stdin, rb_stdout, rb_stderr;
+static inline VALUE
+rb_class_of(VALUE obj)
+{
+    if (((VALUE)(obj) & RUBY_IMMEDIATE_MASK)) {
+ if ((((long)(obj))&RUBY_FIXNUM_FLAG)) return rb_cFixnum;
+ if (obj == ((VALUE)RUBY_Qtrue)) return rb_cTrueClass;
+ if ((((VALUE)(obj)&~(~(VALUE)0<<RUBY_SPECIAL_SHIFT))==RUBY_SYMBOL_FLAG)) return rb_cSymbol;
+    }
+    else if (!(((VALUE)(obj) & ~((VALUE)RUBY_Qnil)) != 0)) {
+ if (obj == ((VALUE)RUBY_Qnil)) return rb_cNilClass;
+ if (obj == ((VALUE)RUBY_Qfalse)) return rb_cFalseClass;
+    }
+    return ((struct RBasic*)(obj))->klass;
+}
+static inline int
+rb_type(VALUE obj)
+{
+    if (((VALUE)(obj) & RUBY_IMMEDIATE_MASK)) {
+ if ((((long)(obj))&RUBY_FIXNUM_FLAG)) return RUBY_T_FIXNUM;
+ if (obj == ((VALUE)RUBY_Qtrue)) return RUBY_T_TRUE;
+ if ((((VALUE)(obj)&~(~(VALUE)0<<RUBY_SPECIAL_SHIFT))==RUBY_SYMBOL_FLAG)) return RUBY_T_SYMBOL;
+ if (obj == ((VALUE)RUBY_Qundef)) return RUBY_T_UNDEF;
+    }
+    else if (!(((VALUE)(obj) & ~((VALUE)RUBY_Qnil)) != 0)) {
+ if (obj == ((VALUE)RUBY_Qnil)) return RUBY_T_NIL;
+ if (obj == ((VALUE)RUBY_Qfalse)) return RUBY_T_FALSE;
+    }
+    return (((struct RBasic*)(obj))->flags & RUBY_T_MASK);
+}
+static inline int
+rb_special_const_p(VALUE obj)
+{
+    if ((((VALUE)(obj) & RUBY_IMMEDIATE_MASK) || !(((VALUE)(obj) & ~((VALUE)RUBY_Qnil)) != 0))) return ((VALUE)RUBY_Qtrue);
+    return ((VALUE)RUBY_Qfalse);
+}
+struct timezone
+  {
+    int tz_minuteswest;
+    int tz_dsttime;
+  };
+typedef struct timezone *__restrict __timezone_ptr_t;
+extern int gettimeofday (struct timeval *__restrict __tv,
+    __timezone_ptr_t __tz) __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern int settimeofday (__const struct timeval *__tv,
+    __const struct timezone *__tz)
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern int adjtime (__const struct timeval *__delta,
+      struct timeval *__olddelta) __attribute__ ((__nothrow__));
+enum __itimer_which
+  {
+    ITIMER_REAL = 0,
+    ITIMER_VIRTUAL = 1,
+    ITIMER_PROF = 2
+  };
+struct itimerval
+  {
+    struct timeval it_interval;
+    struct timeval it_value;
+  };
+typedef enum __itimer_which __itimer_which_t;
+extern int getitimer (__itimer_which_t __which,
+        struct itimerval *__value) __attribute__ ((__nothrow__));
+extern int setitimer (__itimer_which_t __which,
+        __const struct itimerval *__restrict __new,
+        struct itimerval *__restrict __old) __attribute__ ((__nothrow__));
+extern int utimes (__const char *__file, __const struct timeval __tvp[2])
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern int lutimes (__const char *__file, __const struct timeval __tvp[2])
+     __attribute__ ((__nothrow__)) __attribute__ ((__nonnull__ (1)));
+extern int futimes (int __fd, __const struct timeval __tvp[2]) __attribute__ ((__nothrow__));
+extern int futimesat (int __fd, __const char *__file,
+        __const struct timeval __tvp[2]) __attribute__ ((__nothrow__));
+extern size_t strlcpy(char *, const char*, size_t);
+extern size_t strlcat(char *, const char*, size_t);
+typedef unsigned long st_data_t;
+typedef struct st_table st_table;
+typedef int st_compare_func(st_data_t, st_data_t);
+typedef int st_hash_func(st_data_t);
+struct st_hash_type {
+    int (*compare)( );
+    int (*hash)( );
+};
+typedef st_data_t st_index_t;
+struct st_table {
+    const struct st_hash_type *type;
+    st_index_t num_bins;
+    unsigned int entries_packed : 1;
+    __extension__
+    st_index_t num_entries : (sizeof(st_index_t) * 8) - 1;
+    struct st_table_entry **bins;
+    struct st_table_entry *head;
+};
+enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK};
+st_table *st_init_table(const struct st_hash_type *);
+st_table *st_init_table_with_size(const struct st_hash_type *, int);
+st_table *st_init_numtable(void);
+st_table *st_init_numtable_with_size(int);
+st_table *st_init_strtable(void);
+st_table *st_init_strtable_with_size(int);
+st_table *st_init_strcasetable(void);
+st_table *st_init_strcasetable_with_size(int);
+int st_delete(st_table *, st_data_t *, st_data_t *);
+int st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t);
+int st_insert(st_table *, st_data_t, st_data_t);
+int st_lookup(st_table *, st_data_t, st_data_t *);
+int st_get_key(st_table *, st_data_t, st_data_t *);
+int st_foreach(st_table *, int (*)(), st_data_t);
+int st_reverse_foreach(st_table *, int (*)(), st_data_t);
+void st_add_direct(st_table *, st_data_t, st_data_t);
+void st_free_table(st_table *);
+void st_cleanup_safe(st_table *, st_data_t);
+void st_clear(st_table *);
+st_table *st_copy(st_table *);
+int st_numcmp(st_data_t, st_data_t);
+int st_numhash(st_data_t);
+int st_strcasecmp(const char *s1, const char *s2);
+int st_strncasecmp(const char *s1, const char *s2, size_t n);
+void rb_mem_clear(register VALUE*, register long);
+VALUE rb_assoc_new(VALUE, VALUE);
+VALUE rb_check_array_type(VALUE);
+VALUE rb_ary_new(void);
+VALUE rb_ary_new2(long);
+VALUE rb_ary_new3(long,...);
+VALUE rb_ary_new4(long, const VALUE *);
+VALUE rb_ary_tmp_new(long);
+void rb_ary_free(VALUE);
+VALUE rb_ary_freeze(VALUE);
+VALUE rb_ary_aref(int, VALUE*, VALUE);
+VALUE rb_ary_subseq(VALUE, long, long);
+void rb_ary_store(VALUE, long, VALUE);
+VALUE rb_ary_dup(VALUE);
+VALUE rb_ary_to_ary(VALUE);
+VALUE rb_ary_to_s(VALUE);
+VALUE rb_ary_push(VALUE, VALUE);
+VALUE rb_ary_pop(VALUE);
+VALUE rb_ary_shift(VALUE);
+VALUE rb_ary_unshift(VALUE, VALUE);
+VALUE rb_ary_entry(VALUE, long);
+VALUE rb_ary_each(VALUE);
+VALUE rb_ary_join(VALUE, VALUE);
+VALUE rb_ary_print_on(VALUE, VALUE);
+VALUE rb_ary_reverse(VALUE);
+VALUE rb_ary_sort(VALUE);
+VALUE rb_ary_sort_bang(VALUE);
+VALUE rb_ary_delete(VALUE, VALUE);
+VALUE rb_ary_delete_at(VALUE, long);
+VALUE rb_ary_clear(VALUE);
+VALUE rb_ary_plus(VALUE, VALUE);
+VALUE rb_ary_concat(VALUE, VALUE);
+VALUE rb_ary_assoc(VALUE, VALUE);
+VALUE rb_ary_rassoc(VALUE, VALUE);
+VALUE rb_ary_includes(VALUE, VALUE);
+VALUE rb_ary_cmp(VALUE, VALUE);
+VALUE rb_ary_replace(VALUE copy, VALUE orig);
+VALUE rb_get_values_at(VALUE, long, int, VALUE*, VALUE(*)(VALUE,long));
+VALUE rb_big_clone(VALUE);
+void rb_big_2comp(VALUE);
+VALUE rb_big_norm(VALUE);
+void rb_big_resize(VALUE big, long len);
+VALUE rb_uint2big(VALUE);
+VALUE rb_int2big(long);
+VALUE rb_uint2inum(VALUE);
+VALUE rb_int2inum(long);
+VALUE rb_cstr_to_inum(const char*, int, int);
+VALUE rb_str_to_inum(VALUE, int, int);
+VALUE rb_cstr2inum(const char*, int);
+VALUE rb_str2inum(VALUE, int);
+VALUE rb_big2str(VALUE, int);
+VALUE rb_big2str0(VALUE, int, int);
+long rb_big2long(VALUE);
+VALUE rb_big2ulong(VALUE);
+VALUE rb_ll2inum(long long);
+VALUE rb_ull2inum(unsigned long long);
+long long rb_big2ll(VALUE);
+unsigned long long rb_big2ull(VALUE);
+void rb_quad_pack(char*,VALUE);
+VALUE rb_quad_unpack(const char*,int);
+int rb_uv_to_utf8(char[6],unsigned long);
+VALUE rb_dbl2big(double);
+double rb_big2dbl(VALUE);
+VALUE rb_big_cmp(VALUE, VALUE);
+VALUE rb_big_eq(VALUE, VALUE);
+VALUE rb_big_plus(VALUE, VALUE);
+VALUE rb_big_minus(VALUE, VALUE);
+VALUE rb_big_mul(VALUE, VALUE);
+VALUE rb_big_div(VALUE, VALUE);
+VALUE rb_big_modulo(VALUE, VALUE);
+VALUE rb_big_divmod(VALUE, VALUE);
+VALUE rb_big_pow(VALUE, VALUE);
+VALUE rb_big_and(VALUE, VALUE);
+VALUE rb_big_or(VALUE, VALUE);
+VALUE rb_big_xor(VALUE, VALUE);
+VALUE rb_big_lshift(VALUE, VALUE);
+VALUE rb_big_rshift(VALUE, VALUE);
+VALUE rb_rational_raw(VALUE, VALUE);
+VALUE rb_rational_new(VALUE, VALUE);
+VALUE rb_Rational(VALUE, VALUE);
+VALUE rb_complex_raw(VALUE, VALUE);
+VALUE rb_complex_new(VALUE, VALUE);
+VALUE rb_complex_polar(VALUE, VALUE);
+VALUE rb_Complex(VALUE, VALUE);
+VALUE rb_class_boot(VALUE);
+VALUE rb_class_new(VALUE);
+VALUE rb_mod_init_copy(VALUE, VALUE);
+VALUE rb_class_init_copy(VALUE, VALUE);
+VALUE rb_singleton_class_clone(VALUE);
+void rb_singleton_class_attached(VALUE,VALUE);
+VALUE rb_make_metaclass(VALUE, VALUE);
+void rb_check_inheritable(VALUE);
+VALUE rb_class_inherited(VALUE, VALUE);
+VALUE rb_define_class_id(ID, VALUE);
+VALUE rb_module_new(void);
+VALUE rb_define_module_id(ID);
+VALUE rb_mod_included_modules(VALUE);
+VALUE rb_mod_include_p(VALUE, VALUE);
+VALUE rb_mod_ancestors(VALUE);
+VALUE rb_class_instance_methods(int, VALUE*, VALUE);
+VALUE rb_class_public_instance_methods(int, VALUE*, VALUE);
+VALUE rb_class_protected_instance_methods(int, VALUE*, VALUE);
+VALUE rb_class_private_instance_methods(int, VALUE*, VALUE);
+VALUE rb_obj_singleton_methods(int, VALUE*, VALUE);
+void rb_define_method_id(VALUE, ID, VALUE (*)(), int);
+void rb_frozen_class_p(VALUE);
+void rb_undef(VALUE, ID);
+void rb_define_protected_method(VALUE, const char*, VALUE (*)(), int);
+void rb_define_private_method(VALUE, const char*, VALUE (*)(), int);
+void rb_define_singleton_method(VALUE, const char*, VALUE(*)(), int);
+VALUE rb_singleton_class(VALUE);
+int rb_cmpint(VALUE, VALUE, VALUE);
+__attribute__ ((noreturn)) void rb_cmperr(VALUE, VALUE);
+VALUE rb_fiber_new(VALUE (*)(), VALUE);
+VALUE rb_fiber_resume(VALUE fib, int argc, VALUE *args);
+VALUE rb_fiber_yield(int argc, VALUE *args);
+VALUE rb_fiber_current(void);
+VALUE rb_fiber_alive_p(VALUE);
+VALUE rb_enumeratorize(VALUE, VALUE, int, VALUE *);
+VALUE rb_exc_new(VALUE, const char*, long);
+VALUE rb_exc_new2(VALUE, const char*);
+VALUE rb_exc_new3(VALUE, VALUE);
+__attribute__ ((noreturn)) void rb_loaderror(const char*, ...) __attribute__((format(printf, 1, 2)));
+__attribute__ ((noreturn)) void rb_name_error(ID, const char*, ...) __attribute__((format(printf, 2, 3)));
+__attribute__ ((noreturn)) void rb_invalid_str(const char*, const char*);
+void rb_compile_error(const char*, int, const char*, ...) __attribute__((format(printf, 3, 4)));
+void rb_compile_error_append(const char*, ...) __attribute__((format(printf, 1, 2)));
+__attribute__ ((noreturn)) void rb_load_fail(const char*);
+__attribute__ ((noreturn)) void rb_error_frozen(const char*);
+void rb_check_frozen(VALUE);
+int rb_sourceline(void);
+const char *rb_sourcefile(void);
+typedef struct {
+    int maxfd;
+    fd_set *fdset;
+} rb_fdset_t;
+void rb_fd_init(volatile rb_fdset_t *);
+void rb_fd_term(rb_fdset_t *);
+void rb_fd_zero(rb_fdset_t *);
+void rb_fd_set(int, rb_fdset_t *);
+void rb_fd_clr(int, rb_fdset_t *);
+int rb_fd_isset(int, const rb_fdset_t *);
+void rb_fd_copy(rb_fdset_t *, const fd_set *, int);
+int rb_fd_select(int, rb_fdset_t *, rb_fdset_t *, rb_fdset_t *, struct timeval *);
+__attribute__ ((noreturn)) void rb_exc_raise(VALUE);
+__attribute__ ((noreturn)) void rb_exc_fatal(VALUE);
+VALUE rb_f_exit(int,VALUE*);
+VALUE rb_f_abort(int,VALUE*);
+void rb_remove_method(VALUE, const char*);
+typedef VALUE (*rb_alloc_func_t)(VALUE);
+void rb_define_alloc_func(VALUE, rb_alloc_func_t);
+void rb_undef_alloc_func(VALUE);
+rb_alloc_func_t rb_get_alloc_func(VALUE);
+void rb_clear_cache(void);
+void rb_clear_cache_by_class(VALUE);
+void rb_alias(VALUE, ID, ID);
+void rb_attr(VALUE,ID,int,int,int);
+int rb_method_boundp(VALUE, ID, int);
+int rb_method_basic_definition_p(VALUE, ID);
+VALUE rb_eval_cmd(VALUE, VALUE, int);
+int rb_obj_respond_to(VALUE, ID, int);
+int rb_respond_to(VALUE, ID);
+void rb_interrupt(void);
+VALUE rb_apply(VALUE, ID, VALUE);
+void rb_backtrace(void);
+ID rb_frame_this_func(void);
+VALUE rb_obj_instance_eval(int, VALUE*, VALUE);
+VALUE rb_obj_instance_exec(int, VALUE*, VALUE);
+VALUE rb_mod_module_eval(int, VALUE*, VALUE);
+VALUE rb_mod_module_exec(int, VALUE*, VALUE);
+void rb_load(VALUE, int);
+void rb_load_protect(VALUE, int, int*);
+__attribute__ ((noreturn)) void rb_jump_tag(int);
+int rb_provided(const char*);
+int rb_feature_provided(const char *, const char **);
+void rb_provide(const char*);
+VALUE rb_f_require(VALUE, VALUE);
+VALUE rb_require_safe(VALUE, int);
+void rb_obj_call_init(VALUE, int, VALUE*);
+VALUE rb_class_new_instance(int, VALUE*, VALUE);
+VALUE rb_block_proc(void);
+VALUE rb_f_lambda(void);
+VALUE rb_proc_new(VALUE (*)( ), VALUE);
+VALUE rb_proc_call(VALUE, VALUE);
+VALUE rb_proc_call_with_block(VALUE, int argc, VALUE *argv, VALUE);
+int rb_proc_arity(VALUE);
+VALUE rb_binding_new(void);
+VALUE rb_obj_method(VALUE, VALUE);
+VALUE rb_method_call(int, VALUE*, VALUE);
+int rb_mod_method_arity(VALUE, ID);
+int rb_obj_method_arity(VALUE, ID);
+VALUE rb_protect(VALUE (*)(VALUE), VALUE, int*);
+void rb_set_end_proc(void (*)(VALUE), VALUE);
+void rb_mark_end_proc(void);
+void rb_exec_end_proc(void);
+void Init_jump(void);
+void ruby_finalize(void);
+__attribute__ ((noreturn)) void ruby_stop(int);
+int ruby_cleanup(int);
+void rb_gc_mark_threads(void);
+void rb_thread_schedule(void);
+void rb_thread_wait_fd(int);
+int rb_thread_fd_writable(int);
+void rb_thread_fd_close(int);
+int rb_thread_alone(void);
+void rb_thread_polling(void);
+void rb_thread_sleep(int);
+void rb_thread_sleep_forever(void);
+VALUE rb_thread_stop(void);
+VALUE rb_thread_wakeup(VALUE);
+VALUE rb_thread_run(VALUE);
+VALUE rb_thread_kill(VALUE);
+VALUE rb_thread_create(VALUE (*)(), void*);
+void rb_thread_signal_raise(void *, int);
+void rb_thread_signal_exit(void *);
+int rb_thread_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
+void rb_thread_wait_for(struct timeval);
+VALUE rb_thread_current(void);
+VALUE rb_thread_main(void);
+VALUE rb_thread_local_aref(VALUE, ID);
+VALUE rb_thread_local_aset(VALUE, ID, VALUE);
+void rb_thread_atfork(void);
+void rb_thread_atfork_before_exec(void);
+VALUE rb_exec_recursive(VALUE(*)(VALUE, VALUE, int),VALUE,VALUE);
+VALUE rb_file_s_expand_path(int, VALUE *);
+VALUE rb_file_expand_path(VALUE, VALUE);
+VALUE rb_file_s_absolute_path(int, VALUE *);
+VALUE rb_file_absolute_path(VALUE, VALUE);
+void rb_file_const(const char*, VALUE);
+int rb_find_file_ext(VALUE*, const char* const*);
+VALUE rb_find_file(VALUE);
+char *rb_path_next(const char *);
+char *rb_path_skip_prefix(const char *);
+char *rb_path_last_separator(const char *);
+char *rb_path_end(const char *);
+VALUE rb_file_directory_p(VALUE,VALUE);
+void ruby_set_stack_size(size_t);
+__attribute__ ((noreturn)) void rb_memerror(void);
+int ruby_stack_check(void);
+size_t ruby_stack_length(VALUE**);
+int rb_during_gc(void);
+void rb_gc_mark_locations(VALUE*, VALUE*);
+void rb_mark_tbl(struct st_table*);
+void rb_mark_set(struct st_table*);
+void rb_mark_hash(struct st_table*);
+void rb_gc_mark_maybe(VALUE);
+void rb_gc_mark(VALUE);
+void rb_gc_force_recycle(VALUE);
+void rb_gc(void);
+void rb_gc_copy_finalizer(VALUE,VALUE);
+void rb_gc_finalize_deferred(void);
+void rb_gc_call_finalizer_at_exit(void);
+VALUE rb_gc_enable(void);
+VALUE rb_gc_disable(void);
+VALUE rb_gc_start(void);
+void st_foreach_safe(struct st_table *, int (*)(), st_data_t);
+void rb_hash_foreach(VALUE, int (*)(), VALUE);
+VALUE rb_hash(VALUE);
+VALUE rb_hash_new(void);
+VALUE rb_hash_dup(VALUE);
+VALUE rb_hash_freeze(VALUE);
+VALUE rb_hash_aref(VALUE, VALUE);
+VALUE rb_hash_lookup(VALUE, VALUE);
+VALUE rb_hash_lookup2(VALUE, VALUE, VALUE);
+VALUE rb_hash_fetch(VALUE, VALUE);
+VALUE rb_hash_aset(VALUE, VALUE, VALUE);
+VALUE rb_hash_delete_if(VALUE);
+VALUE rb_hash_delete(VALUE,VALUE);
+struct st_table *rb_hash_tbl(VALUE);
+int rb_path_check(const char*);
+int rb_env_path_tainted(void);
+VALUE rb_env_clear(void);
+extern VALUE rb_fs;
+extern VALUE rb_output_fs;
+extern VALUE rb_rs;
+extern VALUE rb_default_rs;
+extern VALUE rb_output_rs;
+VALUE rb_io_write(VALUE, VALUE);
+VALUE rb_io_gets(VALUE);
+VALUE rb_io_getbyte(VALUE);
+VALUE rb_io_ungetc(VALUE, VALUE);
+VALUE rb_io_ungetbyte(VALUE, VALUE);
+VALUE rb_io_close(VALUE);
+VALUE rb_io_flush(VALUE);
+VALUE rb_io_eof(VALUE);
+VALUE rb_io_binmode(VALUE);
+VALUE rb_io_ascii8bit_binmode(VALUE);
+VALUE rb_io_addstr(VALUE, VALUE);
+VALUE rb_io_printf(int, VALUE*, VALUE);
+VALUE rb_io_print(int, VALUE*, VALUE);
+VALUE rb_io_puts(int, VALUE*, VALUE);
+VALUE rb_io_fdopen(int, int, const char*);
+VALUE rb_file_open(const char*, const char*);
+VALUE rb_file_open_str(VALUE, const char*);
+VALUE rb_gets(void);
+void rb_write_error(const char*);
+void rb_write_error2(const char*, long);
+void rb_close_before_exec(int lowfd, int maxhint, VALUE noclose_fds);
+int rb_pipe(int *pipes);
+VALUE rb_marshal_dump(VALUE, VALUE);
+VALUE rb_marshal_load(VALUE);
+void rb_marshal_define_compat(VALUE newclass, VALUE oldclass, VALUE (*dumper)(VALUE), VALUE (*loader)(VALUE, VALUE));
+void rb_num_zerodiv(void);
+VALUE rb_num_coerce_bin(VALUE, VALUE, ID);
+VALUE rb_num_coerce_cmp(VALUE, VALUE, ID);
+VALUE rb_num_coerce_relop(VALUE, VALUE, ID);
+VALUE rb_float_new(double);
+VALUE rb_num2fix(VALUE);
+VALUE rb_fix2str(VALUE, int);
+VALUE rb_dbl_cmp(double, double);
+int rb_eql(VALUE, VALUE);
+VALUE rb_any_to_s(VALUE);
+VALUE rb_inspect(VALUE);
+VALUE rb_obj_is_instance_of(VALUE, VALUE);
+VALUE rb_obj_is_kind_of(VALUE, VALUE);
+VALUE rb_obj_alloc(VALUE);
+VALUE rb_obj_clone(VALUE);
+VALUE rb_obj_dup(VALUE);
+VALUE rb_obj_init_copy(VALUE,VALUE);
+VALUE rb_obj_taint(VALUE);
+VALUE rb_obj_tainted(VALUE);
+VALUE rb_obj_untaint(VALUE);
+VALUE rb_obj_freeze(VALUE);
+VALUE rb_obj_frozen_p(VALUE);
+VALUE rb_obj_id(VALUE);
+VALUE rb_obj_class(VALUE);
+VALUE rb_class_real(VALUE);
+VALUE rb_class_inherited_p(VALUE, VALUE);
+VALUE rb_convert_type(VALUE,int,const char*,const char*);
+VALUE rb_check_convert_type(VALUE,int,const char*,const char*);
+VALUE rb_check_to_integer(VALUE, const char *);
+VALUE rb_to_int(VALUE);
+VALUE rb_Integer(VALUE);
+VALUE rb_Float(VALUE);
+VALUE rb_String(VALUE);
+VALUE rb_Array(VALUE);
+double rb_cstr_to_dbl(const char*, int);
+double rb_str_to_dbl(VALUE, int);
+extern int ruby_sourceline;
+extern char *ruby_sourcefile;
+ID rb_id_attrset(ID);
+void rb_gc_mark_parser(void);
+int rb_is_const_id(ID);
+int rb_is_instance_id(ID);
+int rb_is_class_id(ID);
+int rb_is_local_id(ID);
+int rb_is_junk_id(ID);
+int rb_symname_p(const char*);
+int rb_sym_interned_p(VALUE);
+void rb_gc_mark_symbols(void);
+VALUE rb_backref_get(void);
+void rb_backref_set(VALUE);
+VALUE rb_lastline_get(void);
+void rb_lastline_set(VALUE);
+VALUE rb_sym_all_symbols(void);
+void rb_last_status_set(int status, pid_t pid);
+VALUE rb_last_status_get(void);
+struct rb_exec_arg {
+    int argc;
+    VALUE *argv;
+    const char *prog;
+    VALUE options;
+    VALUE redirect_fds;
+};
+int rb_proc_exec_n(int, VALUE*, const char*);
+int rb_proc_exec(const char*);
+VALUE rb_exec_arg_init(int argc, VALUE *argv, int accept_shell, struct rb_exec_arg *e);
+int rb_exec_arg_addopt(struct rb_exec_arg *e, VALUE key, VALUE val);
+void rb_exec_arg_fixup(struct rb_exec_arg *e);
+int rb_run_exec_options(const struct rb_exec_arg *e, struct rb_exec_arg *s);
+int rb_exec(const struct rb_exec_arg*);
+pid_t rb_fork(int*, int (*)(void*), void*, VALUE);
+VALUE rb_f_exec(int,VALUE*);
+pid_t rb_waitpid(pid_t pid, int *status, int flags);
+void rb_syswait(pid_t pid);
+pid_t rb_spawn(int, VALUE*);
+VALUE rb_proc_times(VALUE);
+VALUE rb_detach_process(pid_t pid);
+VALUE rb_range_new(VALUE, VALUE, int);
+VALUE rb_range_beg_len(VALUE, long*, long*, long, int);
+unsigned long rb_genrand_int32(void);
+double rb_genrand_real(void);
+void rb_reset_random_seed(void);
+int rb_memcicmp(const void*,const void*,long);
+void rb_match_busy(VALUE);
+VALUE rb_reg_nth_defined(int, VALUE);
+VALUE rb_reg_nth_match(int, VALUE);
+VALUE rb_reg_last_match(VALUE);
+VALUE rb_reg_match_pre(VALUE);
+VALUE rb_reg_match_post(VALUE);
+VALUE rb_reg_match_last(VALUE);
+VALUE rb_reg_new_str(VALUE, int);
+VALUE rb_reg_new(const char *, long, int);
+VALUE rb_reg_match(VALUE, VALUE);
+VALUE rb_reg_match2(VALUE);
+int rb_reg_options(VALUE);
+void rb_set_kcode(const char*);
+const char* rb_get_kcode(void);
+extern VALUE rb_argv0;
+VALUE rb_get_argv(void);
+void *rb_load_file(const char*);
+void ruby_script(const char*);
+void ruby_prog_init(void);
+void ruby_set_argv(int, char**);
+void *ruby_process_options(int, char**);
+void ruby_init_loadpath(void);
+void ruby_incpush(const char*);
+VALUE rb_f_kill(int, VALUE*);
+void rb_gc_mark_trap_list(void);
+void (*ruby_posix_signal(int, void (*)(int)))(int);
+void ruby_sig_finalize(void);
+void rb_trap_exit(void);
+void rb_trap_exec(void);
+const char *ruby_signal_name(int);
+void ruby_default_signal(int);
+VALUE rb_f_sprintf(int, const VALUE*);
+VALUE rb_sprintf(const char*, ...) __attribute__((format(printf, 1, 2)));
+VALUE rb_vsprintf(const char*, va_list);
+VALUE rb_str_catf(VALUE, const char*, ...) __attribute__((format(printf, 2, 3)));
+VALUE rb_str_vcatf(VALUE, const char*, va_list);
+VALUE rb_str_format(int, const VALUE *, VALUE);
+VALUE rb_str_new(const char*, long);
+VALUE rb_str_new_cstr(const char*);
+VALUE rb_str_new2(const char*);
+VALUE rb_str_new_shared(VALUE);
+VALUE rb_str_new3(VALUE);
+VALUE rb_str_new_frozen(VALUE);
+VALUE rb_str_new4(VALUE);
+VALUE rb_str_new_with_class(VALUE, const char*, long);
+VALUE rb_str_new5(VALUE, const char*, long);
+VALUE rb_tainted_str_new_cstr(const char*);
+VALUE rb_tainted_str_new(const char*, long);
+VALUE rb_tainted_str_new2(const char*);
+VALUE rb_external_str_new(const char*, long);
+VALUE rb_external_str_new_cstr(const char*);
+VALUE rb_locale_str_new(const char*, long);
+VALUE rb_locale_str_new_cstr(const char*);
+VALUE rb_str_buf_new(long);
+VALUE rb_str_buf_new_cstr(const char*);
+VALUE rb_str_buf_new2(const char*);
+VALUE rb_str_tmp_new(long);
+VALUE rb_usascii_str_new(const char*, long);
+VALUE rb_usascii_str_new_cstr(const char*);
+VALUE rb_usascii_str_new2(const char*);
+void rb_str_free(VALUE);
+void rb_str_shared_replace(VALUE, VALUE);
+VALUE rb_str_buf_append(VALUE, VALUE);
+VALUE rb_str_buf_cat(VALUE, const char*, long);
+VALUE rb_str_buf_cat2(VALUE, const char*);
+VALUE rb_str_buf_cat_ascii(VALUE, const char*);
+VALUE rb_obj_as_string(VALUE);
+VALUE rb_check_string_type(VALUE);
+VALUE rb_str_dup(VALUE);
+VALUE rb_str_locktmp(VALUE);
+VALUE rb_str_unlocktmp(VALUE);
+VALUE rb_str_dup_frozen(VALUE);
+VALUE rb_str_plus(VALUE, VALUE);
+VALUE rb_str_times(VALUE, VALUE);
+long rb_str_sublen(VALUE, long);
+VALUE rb_str_substr(VALUE, long, long);
+VALUE rb_str_subseq(VALUE, long, long);
+void rb_str_modify(VALUE);
+VALUE rb_str_freeze(VALUE);
+void rb_str_set_len(VALUE, long);
+VALUE rb_str_resize(VALUE, long);
+VALUE rb_str_cat(VALUE, const char*, long);
+VALUE rb_str_cat2(VALUE, const char*);
+VALUE rb_str_append(VALUE, VALUE);
+VALUE rb_str_concat(VALUE, VALUE);
+int rb_memhash(const void *ptr, long len);
+int rb_str_hash(VALUE);
+int rb_str_hash_cmp(VALUE,VALUE);
+int rb_str_comparable(VALUE, VALUE);
+int rb_str_cmp(VALUE, VALUE);
+VALUE rb_str_equal(VALUE str1, VALUE str2);
+VALUE rb_str_drop_bytes(VALUE, long);
+void rb_str_update(VALUE, long, long, VALUE);
+VALUE rb_str_inspect(VALUE);
+VALUE rb_str_dump(VALUE);
+VALUE rb_str_split(VALUE, const char*);
+void rb_str_associate(VALUE, VALUE);
+VALUE rb_str_associated(VALUE);
+void rb_str_setter(VALUE, ID, VALUE*);
+VALUE rb_str_intern(VALUE);
+VALUE rb_sym_to_s(VALUE);
+VALUE rb_str_length(VALUE);
+size_t rb_str_capacity(VALUE);
+VALUE rb_struct_new(VALUE, ...);
+VALUE rb_struct_define(const char*, ...);
+VALUE rb_struct_alloc(VALUE, VALUE);
+VALUE rb_struct_initialize(VALUE, VALUE);
+VALUE rb_struct_aref(VALUE, VALUE);
+VALUE rb_struct_aset(VALUE, VALUE, VALUE);
+VALUE rb_struct_getmember(VALUE, ID);
+VALUE rb_struct_iv_get(VALUE, const char*);
+VALUE rb_struct_s_members(VALUE);
+VALUE rb_struct_members(VALUE);
+VALUE rb_struct_alloc_noinit(VALUE);
+VALUE rb_struct_define_without_accessor(const char *, VALUE, rb_alloc_func_t, ...);
+typedef void rb_unblock_function_t(void *);
+typedef VALUE rb_blocking_function_t(void *);
+void rb_thread_check_ints(void);
+int rb_thread_interrupted(VALUE thval);
+VALUE rb_thread_blocking_region(rb_blocking_function_t *func, void *data1,
+    rb_unblock_function_t *ubf, void *data2);
+VALUE rb_mutex_new(void);
+VALUE rb_mutex_locked_p(VALUE mutex);
+VALUE rb_mutex_try_lock(VALUE mutex);
+VALUE rb_mutex_lock(VALUE mutex);
+VALUE rb_mutex_unlock(VALUE mutex);
+VALUE rb_mutex_sleep(VALUE self, VALUE timeout);
+VALUE rb_mutex_synchronize(VALUE mutex, VALUE (*func)(VALUE arg), VALUE arg);
+VALUE rb_barrier_new(void);
+VALUE rb_barrier_wait(VALUE self);
+VALUE rb_barrier_release(VALUE self);
+VALUE rb_barrier_destroy(VALUE self);
+VALUE rb_time_new(time_t, long);
+VALUE rb_time_nano_new(time_t, long);
+VALUE rb_mod_name(VALUE);
+VALUE rb_class_path(VALUE);
+void rb_set_class_path(VALUE, VALUE, const char*);
+VALUE rb_path2class(const char*);
+void rb_name_class(VALUE, ID);
+VALUE rb_class_name(VALUE);
+void rb_autoload(VALUE, ID, const char*);
+VALUE rb_autoload_load(VALUE, ID);
+VALUE rb_autoload_p(VALUE, ID);
+void rb_gc_mark_global_tbl(void);
+VALUE rb_f_trace_var(int, VALUE*);
+VALUE rb_f_untrace_var(int, VALUE*);
+VALUE rb_f_global_variables(void);
+void rb_alias_variable(ID, ID);
+struct st_table* rb_generic_ivar_table(VALUE);
+void rb_copy_generic_ivar(VALUE,VALUE);
+void rb_mark_generic_ivar(VALUE);
+void rb_mark_generic_ivar_tbl(void);
+void rb_free_generic_ivar(VALUE);
+VALUE rb_ivar_get(VALUE, ID);
+VALUE rb_ivar_set(VALUE, ID, VALUE);
+VALUE rb_ivar_defined(VALUE, ID);
+void rb_ivar_foreach(VALUE, int (*)(), st_data_t);
+VALUE rb_iv_set(VALUE, const char*, VALUE);
+VALUE rb_iv_get(VALUE, const char*);
+VALUE rb_attr_get(VALUE, ID);
+VALUE rb_obj_instance_variables(VALUE);
+VALUE rb_obj_remove_instance_variable(VALUE, VALUE);
+void *rb_mod_const_at(VALUE, void*);
+void *rb_mod_const_of(VALUE, void*);
+VALUE rb_const_list(void*);
+VALUE rb_mod_constants(int, VALUE *, VALUE);
+VALUE rb_mod_remove_const(VALUE, VALUE);
+int rb_const_defined(VALUE, ID);
+int rb_const_defined_at(VALUE, ID);
+int rb_const_defined_from(VALUE, ID);
+VALUE rb_const_get(VALUE, ID);
+VALUE rb_const_get_at(VALUE, ID);
+VALUE rb_const_get_from(VALUE, ID);
+void rb_const_set(VALUE, ID, VALUE);
+VALUE rb_mod_const_missing(VALUE,VALUE);
+VALUE rb_cvar_defined(VALUE, ID);
+void rb_cvar_set(VALUE, ID, VALUE);
+VALUE rb_cvar_get(VALUE, ID);
+void rb_cv_set(VALUE, const char*, VALUE);
+VALUE rb_cv_get(VALUE, const char*);
+void rb_define_class_variable(VALUE, const char*, VALUE);
+VALUE rb_mod_class_variables(VALUE);
+VALUE rb_mod_remove_cvar(VALUE, VALUE);
+void ruby_show_version(void);
+void ruby_show_copyright(void);
+ID rb_frame_callee(void);
+VALUE rb_str_succ(VALUE);
+VALUE rb_time_succ(VALUE);
+void rb_frame_pop(void);
+int rb_frame_method_id_and_class(ID *idp, VALUE *klassp);
+void ruby_sysinit(int *, char ***);
+int ruby_native_thread_p(void);
+typedef unsigned int rb_event_flag_t;
+typedef void (*rb_event_hook_func_t)(rb_event_flag_t, VALUE data, VALUE, ID, VALUE klass);
+typedef struct rb_event_hook_struct {
+    rb_event_flag_t flag;
+    rb_event_hook_func_t func;
+    VALUE data;
+    struct rb_event_hook_struct *next;
+} rb_event_hook_t;
+void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events,
+         VALUE data);
+int rb_remove_event_hook(rb_event_hook_func_t func);
+int rb_isalnum(int c);
+int rb_isalpha(int c);
+int rb_isblank(int c);
+int rb_iscntrl(int c);
+int rb_isdigit(int c);
+int rb_isgraph(int c);
+int rb_islower(int c);
+int rb_isprint(int c);
+int rb_ispunct(int c);
+int rb_isspace(int c);
+int rb_isupper(int c);
+int rb_isxdigit(int c);
+int rb_tolower(int c);
+int rb_toupper(int c);
+int st_strcasecmp(const char *s1, const char *s2);
+int st_strncasecmp(const char *s1, const char *s2, size_t n);
+unsigned long ruby_strtoul(const char *str, char **endptr, int base);
+typedef unsigned char OnigUChar;
+typedef unsigned int OnigCodePoint;
+typedef unsigned int OnigCtype;
+typedef unsigned int OnigDistance;
+typedef unsigned int OnigCaseFoldType;
+extern OnigCaseFoldType OnigDefaultCaseFoldFlag;
+typedef struct {
+  int byte_len;
+  int code_len;
+  OnigCodePoint code[3];
+} OnigCaseFoldCodeItem;
+typedef struct {
+  OnigCodePoint esc;
+  OnigCodePoint anychar;
+  OnigCodePoint anytime;
+  OnigCodePoint zero_or_one_time;
+  OnigCodePoint one_or_more_time;
+  OnigCodePoint anychar_anytime;
+} OnigMetaCharTableType;
+typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg);
+typedef struct OnigEncodingTypeST {
+  int (*precise_mbc_enc_len)(const OnigUChar* p,const OnigUChar* e, struct OnigEncodingTypeST* enc);
+  const char* name;
+  int max_enc_len;
+  int min_enc_len;
+  int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc);
+  OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc);
+  int (*code_to_mbclen)(OnigCodePoint code, struct OnigEncodingTypeST* enc);
+  int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf, struct OnigEncodingTypeST* enc);
+  int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to, struct OnigEncodingTypeST* enc);
+  int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, struct OnigEncodingTypeST* enc);
+  int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[], struct OnigEncodingTypeST* enc);
+  int (*property_name_to_ctype)(struct OnigEncodingTypeST* enc, OnigUChar* p, OnigUChar* end);
+  int (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype, struct OnigEncodingTypeST* enc);
+  int (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], struct OnigEncodingTypeST* enc);
+  OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc);
+  int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end, struct OnigEncodingTypeST* enc);
+  int ruby_encoding_index;
+} OnigEncodingType;
+typedef OnigEncodingType* OnigEncoding;
+extern OnigEncodingType OnigEncodingASCII;
+extern
+int onigenc_mbclen_approximate (const OnigUChar* p,const OnigUChar* e, struct OnigEncodingTypeST* enc);
+extern
+OnigUChar* onigenc_step_back (OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, int n);
+extern
+int onigenc_init (void);
+extern
+int onigenc_set_default_encoding (OnigEncoding enc);
+extern
+OnigEncoding onigenc_get_default_encoding (void);
+extern
+void onigenc_set_default_caseconv_table (const OnigUChar* table);
+extern
+OnigUChar* onigenc_get_right_adjust_char_head_with_prev (OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, const OnigUChar** prev);
+extern
+OnigUChar* onigenc_get_prev_char_head (OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
+extern
+OnigUChar* onigenc_get_left_adjust_char_head (OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
+extern
+OnigUChar* onigenc_get_right_adjust_char_head (OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar* end);
+extern
+int onigenc_strlen (OnigEncoding enc, const OnigUChar* p, const OnigUChar* end);
+extern
+int onigenc_strlen_null (OnigEncoding enc, const OnigUChar* p);
+extern
+int onigenc_str_bytelen_null (OnigEncoding enc, const OnigUChar* p);
+typedef unsigned int OnigOptionType;
+typedef struct {
+  unsigned int op;
+  unsigned int op2;
+  unsigned int behavior;
+  OnigOptionType options;
+  OnigMetaCharTableType meta_char_table;
+} OnigSyntaxType;
+extern const OnigSyntaxType OnigSyntaxASIS;
+extern const OnigSyntaxType OnigSyntaxPosixBasic;
+extern const OnigSyntaxType OnigSyntaxPosixExtended;
+extern const OnigSyntaxType OnigSyntaxEmacs;
+extern const OnigSyntaxType OnigSyntaxGrep;
+extern const OnigSyntaxType OnigSyntaxGnuRegex;
+extern const OnigSyntaxType OnigSyntaxJava;
+extern const OnigSyntaxType OnigSyntaxPerl;
+extern const OnigSyntaxType OnigSyntaxPerl_NG;
+extern const OnigSyntaxType OnigSyntaxRuby;
+extern const OnigSyntaxType* OnigDefaultSyntax;
+typedef struct OnigCaptureTreeNodeStruct {
+  int group;
+  int beg;
+  int end;
+  int allocated;
+  int num_childs;
+  struct OnigCaptureTreeNodeStruct** childs;
+} OnigCaptureTreeNode;
+struct re_registers {
+  int allocated;
+  int num_regs;
+  int* beg;
+  int* end;
+  OnigCaptureTreeNode* history_root;
+};
+typedef struct re_registers OnigRegion;
+typedef struct {
+  OnigEncoding enc;
+  OnigUChar* par;
+  OnigUChar* par_end;
+} OnigErrorInfo;
+typedef struct {
+  int lower;
+  int upper;
+} OnigRepeatRange;
+typedef void (*OnigWarnFunc) (const char* s);
+extern void onig_null_warn (const char* s);
+typedef struct re_pattern_buffer {
+  unsigned char* p;
+  unsigned int used;
+  unsigned int alloc;
+  int state;
+  int num_mem;
+  int num_repeat;
+  int num_null_check;
+  int num_comb_exp_check;
+  int num_call;
+  unsigned int capture_history;
+  unsigned int bt_mem_start;
+  unsigned int bt_mem_end;
+  int stack_pop_level;
+  int repeat_range_alloc;
+  OnigRepeatRange* repeat_range;
+  OnigEncoding enc;
+  OnigOptionType options;
+  const OnigSyntaxType* syntax;
+  OnigCaseFoldType case_fold_flag;
+  void* name_table;
+  int optimize;
+  int threshold_len;
+  int anchor;
+  OnigDistance anchor_dmin;
+  OnigDistance anchor_dmax;
+  int sub_anchor;
+  unsigned char *exact;
+  unsigned char *exact_end;
+  unsigned char map[256];
+  int *int_map;
+  int *int_map_backward;
+  OnigDistance dmin;
+  OnigDistance dmax;
+  struct re_pattern_buffer* chain;
+} OnigRegexType;
+typedef OnigRegexType* OnigRegex;
+  typedef OnigRegexType regex_t;
+typedef struct {
+  int num_of_elements;
+  OnigEncoding pattern_enc;
+  OnigEncoding target_enc;
+  OnigSyntaxType* syntax;
+  OnigOptionType option;
+  OnigCaseFoldType case_fold_flag;
+} OnigCompileInfo;
+extern
+int onig_init (void);
+extern
+int onig_error_code_to_str (OnigUChar* s, int err_code, ...);
+extern
+void onig_set_warn_func (OnigWarnFunc f);
+extern
+void onig_set_verb_warn_func (OnigWarnFunc f);
+extern
+int onig_new (OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, const OnigSyntaxType* syntax, OnigErrorInfo* einfo);
+extern
+int onig_new_deluxe (OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo);
+extern
+void onig_free (OnigRegex);
+extern
+int onig_recompile (OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo);
+extern
+int onig_recompile_deluxe (OnigRegex reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo);
+extern
+int onig_search (OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option);
+extern
+int onig_match (OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option);
+extern
+OnigRegion* onig_region_new (void);
+extern
+void onig_region_init (OnigRegion* region);
+extern
+void onig_region_free (OnigRegion* region, int free_self);
+extern
+void onig_region_copy (OnigRegion* to, OnigRegion* from);
+extern
+void onig_region_clear (OnigRegion* region);
+extern
+int onig_region_resize (OnigRegion* region, int n);
+extern
+int onig_region_set (OnigRegion* region, int at, int beg, int end);
+extern
+int onig_name_to_group_numbers (OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums);
+extern
+int onig_name_to_backref_number (OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, OnigRegion *region);
+extern
+int onig_foreach_name (OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg);
+extern
+int onig_number_of_names (OnigRegex reg);
+extern
+int onig_number_of_captures (OnigRegex reg);
+extern
+int onig_number_of_capture_histories (OnigRegex reg);
+extern
+OnigCaptureTreeNode* onig_get_capture_tree (OnigRegion* region);
+extern
+int onig_capture_tree_traverse (OnigRegion* region, int at, int(*callback_func)(int,int,int,int,int,void*), void* arg);
+extern
+int onig_noname_group_capture_is_active (OnigRegex reg);
+extern
+OnigEncoding onig_get_encoding (OnigRegex reg);
+extern
+OnigOptionType onig_get_options (OnigRegex reg);
+extern
+OnigCaseFoldType onig_get_case_fold_flag (OnigRegex reg);
+extern
+const OnigSyntaxType* onig_get_syntax (OnigRegex reg);
+extern
+int onig_set_default_syntax (const OnigSyntaxType* syntax);
+extern
+void onig_copy_syntax (OnigSyntaxType* to, const OnigSyntaxType* from);
+extern
+unsigned int onig_get_syntax_op (OnigSyntaxType* syntax);
+extern
+unsigned int onig_get_syntax_op2 (OnigSyntaxType* syntax);
+extern
+unsigned int onig_get_syntax_behavior (OnigSyntaxType* syntax);
+extern
+OnigOptionType onig_get_syntax_options (OnigSyntaxType* syntax);
+extern
+void onig_set_syntax_op (OnigSyntaxType* syntax, unsigned int op);
+extern
+void onig_set_syntax_op2 (OnigSyntaxType* syntax, unsigned int op2);
+extern
+void onig_set_syntax_behavior (OnigSyntaxType* syntax, unsigned int behavior);
+extern
+void onig_set_syntax_options (OnigSyntaxType* syntax, OnigOptionType options);
+extern
+int onig_set_meta_char (OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code);
+extern
+void onig_copy_encoding (OnigEncoding to, OnigEncoding from);
+extern
+OnigCaseFoldType onig_get_default_case_fold_flag (void);
+extern
+int onig_set_default_case_fold_flag (OnigCaseFoldType case_fold_flag);
+extern
+unsigned int onig_get_match_stack_limit_size (void);
+extern
+int onig_set_match_stack_limit_size (unsigned int size);
+extern
+int onig_end (void);
+extern
+const char* onig_version (void);
+extern
+const char* onig_copyright (void);
+typedef OnigEncodingType rb_encoding;
+int rb_enc_replicate(const char *, rb_encoding *);
+int rb_define_dummy_encoding(const char *);
+int rb_enc_get_index(VALUE obj);
+void rb_enc_set_index(VALUE obj, int encindex);
+int rb_enc_find_index(const char *name);
+int rb_to_encoding_index(VALUE);
+rb_encoding* rb_to_encoding(VALUE);
+rb_encoding* rb_enc_get(VALUE);
+rb_encoding* rb_enc_compatible(VALUE,VALUE);
+rb_encoding* rb_enc_check(VALUE,VALUE);
+VALUE rb_enc_associate_index(VALUE, int);
+VALUE rb_enc_associate(VALUE, rb_encoding*);
+void rb_enc_copy(VALUE dst, VALUE src);
+VALUE rb_enc_str_new(const char*, long, rb_encoding*);
+VALUE rb_enc_reg_new(const char*, long, rb_encoding*, int);
+VALUE rb_enc_sprintf(rb_encoding *, const char*, ...) __attribute__((format(printf, 2, 3)));
+VALUE rb_enc_vsprintf(rb_encoding *, const char*, va_list);
+long rb_enc_strlen(const char*, const char*, rb_encoding*);
+char* rb_enc_nth(const char*, const char*, int, rb_encoding*);
+VALUE rb_obj_encoding(VALUE);
+VALUE rb_enc_str_buf_cat(VALUE str, const char *ptr, long len, rb_encoding *enc);
+VALUE rb_external_str_new_with_enc(const char *ptr, long len, rb_encoding *);
+VALUE rb_str_export_to_enc(VALUE, rb_encoding *);
+VALUE rb_str_conv_enc(VALUE str, rb_encoding *from, rb_encoding *to);
+rb_encoding* rb_enc_from_index(int idx);
+rb_encoding * rb_enc_find(const char *name);
+int rb_enc_mbclen(const char *p, const char *e, rb_encoding *enc);
+int rb_enc_precise_mbclen(const char *p, const char *e, rb_encoding *enc);
+int rb_enc_ascget(const char *p, const char *e, int *len, rb_encoding *enc);
+unsigned int rb_enc_codepoint(const char *p, const char *e, rb_encoding *enc);
+int rb_enc_codelen(int code, rb_encoding *enc);
+int rb_enc_casefold(char *to, const char *p, const char *e, rb_encoding *enc);
+int rb_enc_toupper(int c, rb_encoding *enc);
+int rb_enc_tolower(int c, rb_encoding *enc);
+ID rb_intern3(const char*, long, rb_encoding*);
+ID rb_interned_id_p(const char *, long, rb_encoding *);
+int rb_enc_symname_p(const char*, rb_encoding*);
+int rb_enc_str_coderange(VALUE);
+long rb_str_coderange_scan_restartable(const char*, const char*, rb_encoding*, int*);
+int rb_enc_str_asciionly_p(VALUE);
+VALUE rb_enc_from_encoding(rb_encoding *enc);
+rb_encoding *rb_ascii8bit_encoding(void);
+rb_encoding *rb_utf8_encoding(void);
+rb_encoding *rb_usascii_encoding(void);
+rb_encoding *rb_locale_encoding(void);
+rb_encoding *rb_filesystem_encoding(void);
+rb_encoding *rb_default_external_encoding(void);
+rb_encoding *rb_default_internal_encoding(void);
+int rb_ascii8bit_encindex(void);
+int rb_utf8_encindex(void);
+int rb_usascii_encindex(void);
+VALUE rb_enc_default_external(void);
+VALUE rb_enc_default_internal(void);
+void rb_enc_set_default_external(VALUE encoding);
+void rb_enc_set_default_internal(VALUE encoding);
+VALUE rb_locale_charmap(VALUE klass);
+long rb_memsearch(const void*,long,const void*,long,rb_encoding*);
+extern VALUE rb_cEncoding;
+static inline int
+rb_enc_dummy_p(rb_encoding *enc)
+{
+    return ((enc)->ruby_encoding_index & (1<<24)) != 0;
+}
+typedef enum {
+    econv_invalid_byte_sequence,
+    econv_undefined_conversion,
+    econv_destination_buffer_full,
+    econv_source_buffer_empty,
+    econv_finished,
+    econv_after_output,
+    econv_incomplete_input
+} rb_econv_result_t;
+typedef struct rb_econv_t rb_econv_t;
+VALUE rb_str_encode(VALUE str, VALUE to, int ecflags, VALUE ecopts);
+int rb_econv_has_convpath_p(const char* from_encoding, const char* to_encoding);
+int rb_econv_prepare_opts(VALUE opthash, VALUE *ecopts);
+rb_econv_t *rb_econv_open(const char *source_encoding, const char *destination_encoding, int ecflags);
+rb_econv_t *rb_econv_open_opts(const char *source_encoding, const char *destination_encoding, int ecflags, VALUE ecopts);
+rb_econv_result_t rb_econv_convert(rb_econv_t *ec,
+    const unsigned char **source_buffer_ptr, const unsigned char *source_buffer_end,
+    unsigned char **destination_buffer_ptr, unsigned char *destination_buffer_end,
+    int flags);
+void rb_econv_close(rb_econv_t *ec);
+int rb_econv_set_replacement(rb_econv_t *ec, const unsigned char *str, size_t len, const char *encname);
+int rb_econv_decorate_at_first(rb_econv_t *ec, const char *decorator_name);
+int rb_econv_decorate_at_last(rb_econv_t *ec, const char *decorator_name);
+VALUE rb_econv_open_exc(const char *senc, const char *denc, int ecflags);
+int rb_econv_insert_output(rb_econv_t *ec,
+    const unsigned char *str, size_t len, const char *str_encoding);
+const char *rb_econv_encoding_to_insert_output(rb_econv_t *ec);
+void rb_econv_check_error(rb_econv_t *ec);
+VALUE rb_econv_make_exception(rb_econv_t *ec);
+int rb_econv_putbackable(rb_econv_t *ec);
+void rb_econv_putback(rb_econv_t *ec, unsigned char *p, int n);
+const char *rb_econv_asciicompat_encoding(const char *encname);
+VALUE rb_econv_str_convert(rb_econv_t *ec, VALUE src, int flags);
+VALUE rb_econv_substr_convert(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, int flags);
+VALUE rb_econv_str_append(rb_econv_t *ec, VALUE src, VALUE dst, int flags);
+VALUE rb_econv_substr_append(rb_econv_t *ec, VALUE src, long byteoff, long bytesize, VALUE dst, int flags);
+void rb_econv_binmode(rb_econv_t *ec);
+enum node_type {
+    NODE_METHOD,
+    NODE_FBODY,
+    NODE_CFUNC,
+    NODE_SCOPE,
+    NODE_BLOCK,
+    NODE_IF,
+    NODE_CASE,
+    NODE_WHEN,
+    NODE_OPT_N,
+    NODE_WHILE,
+    NODE_UNTIL,
+    NODE_ITER,
+    NODE_FOR,
+    NODE_BREAK,
+    NODE_NEXT,
+    NODE_REDO,
+    NODE_RETRY,
+    NODE_BEGIN,
+    NODE_RESCUE,
+    NODE_RESBODY,
+    NODE_ENSURE,
+    NODE_AND,
+    NODE_OR,
+    NODE_MASGN,
+    NODE_LASGN,
+    NODE_DASGN,
+    NODE_DASGN_CURR,
+    NODE_GASGN,
+    NODE_IASGN,
+    NODE_IASGN2,
+    NODE_CDECL,
+    NODE_CVASGN,
+    NODE_CVDECL,
+    NODE_OP_ASGN1,
+    NODE_OP_ASGN2,
+    NODE_OP_ASGN_AND,
+    NODE_OP_ASGN_OR,
+    NODE_CALL,
+    NODE_FCALL,
+    NODE_VCALL,
+    NODE_SUPER,
+    NODE_ZSUPER,
+    NODE_ARRAY,
+    NODE_ZARRAY,
+    NODE_VALUES,
+    NODE_HASH,
+    NODE_RETURN,
+    NODE_YIELD,
+    NODE_LVAR,
+    NODE_DVAR,
+    NODE_GVAR,
+    NODE_IVAR,
+    NODE_CONST,
+    NODE_CVAR,
+    NODE_NTH_REF,
+    NODE_BACK_REF,
+    NODE_MATCH,
+    NODE_MATCH2,
+    NODE_MATCH3,
+    NODE_LIT,
+    NODE_STR,
+    NODE_DSTR,
+    NODE_XSTR,
+    NODE_DXSTR,
+    NODE_EVSTR,
+    NODE_DREGX,
+    NODE_DREGX_ONCE,
+    NODE_ARGS,
+    NODE_ARGS_AUX,
+    NODE_OPT_ARG,
+    NODE_POSTARG,
+    NODE_ARGSCAT,
+    NODE_ARGSPUSH,
+    NODE_SPLAT,
+    NODE_TO_ARY,
+    NODE_BLOCK_ARG,
+    NODE_BLOCK_PASS,
+    NODE_DEFN,
+    NODE_DEFS,
+    NODE_ALIAS,
+    NODE_VALIAS,
+    NODE_UNDEF,
+    NODE_CLASS,
+    NODE_MODULE,
+    NODE_SCLASS,
+    NODE_COLON2,
+    NODE_COLON3,
+    NODE_DOT2,
+    NODE_DOT3,
+    NODE_FLIP2,
+    NODE_FLIP3,
+    NODE_ATTRSET,
+    NODE_SELF,
+    NODE_NIL,
+    NODE_TRUE,
+    NODE_FALSE,
+    NODE_ERRINFO,
+    NODE_DEFINED,
+    NODE_POSTEXE,
+    NODE_ALLOCA,
+    NODE_BMETHOD,
+    NODE_MEMO,
+    NODE_IFUNC,
+    NODE_DSYM,
+    NODE_ATTRASGN,
+    NODE_PRELUDE,
+    NODE_LAMBDA,
+    NODE_OPTBLOCK,
+    NODE_LAST
+};
+typedef struct RNode {
+    unsigned long flags;
+    char *nd_file;
+    union {
+ struct RNode *node;
+ ID id;
+ VALUE value;
+ VALUE (*cfunc)();
+ ID *tbl;
+    } u1;
+    union {
+ struct RNode *node;
+ ID id;
+ long argc;
+ VALUE value;
+    } u2;
+    union {
+ struct RNode *node;
+ ID id;
+ long state;
+ struct global_entry *entry;
+ long cnt;
+ VALUE value;
+    } u3;
+} NODE;
+VALUE rb_parser_new(void);
+VALUE rb_parser_end_seen_p(VALUE);
+VALUE rb_parser_encoding(VALUE);
+NODE *rb_parser_compile_cstr(volatile VALUE, const char*, const char*, int, int);
+NODE *rb_parser_compile_string(volatile VALUE, const char*, VALUE, int);
+NODE *rb_parser_compile_file(volatile VALUE, const char*, VALUE, int);
+NODE *rb_compile_cstr(const char*, const char*, int, int);
+NODE *rb_compile_string(const char*, VALUE, int);
+NODE *rb_compile_file(const char*, VALUE, int);
+void rb_add_method(VALUE, ID, NODE *, int);
+NODE *rb_node_newnode(enum node_type,VALUE,VALUE,VALUE);
+NODE* rb_method_node(VALUE klass, ID id);
+int rb_node_arity(NODE* node);
+struct global_entry *rb_global_entry(ID);
+VALUE rb_gvar_get(struct global_entry *);
+VALUE rb_gvar_set(struct global_entry *, VALUE);
+VALUE rb_gvar_defined(struct global_entry *);
+typedef union YYSTYPE
+{
+    VALUE val;
+    NODE *node;
+    ID id;
+    int num;
+}
+ YYSTYPE;
+enum ruby_method_ids {
+    idPLUS = '+',
+    idMINUS = '-',
+    idMULT = '*',
+    idDIV = '/',
+    idMOD = '%',
+    idLT = '<',
+    idLTLT = 338,
+    idLE = 329,
+    idGT = '>',
+    idGE = 328,
+    idEq = 325,
+    idEqq = 326,
+    idNeq = 327,
+    idNot = '!',
+    idBackquote = '`',
+    idEqTilde = 332,
+    idAREF = 336,
+    idASET = 337,
+    idLAST_TOKEN = 376 >> 3,
+    tIntern,
+    tMethodMissing,
+    tLength,
+    tGets,
+    tSucc,
+    tEach,
+    tLambda,
+    tSend,
+    t__send__,
+    tInitialize,
+    tLAST_ID,
+    idIntern = ((tIntern<<3)|0x00),
+    idMethodMissing = ((tMethodMissing<<3)|0x00),
+    idLength = ((tLength<<3)|0x00),
+    idGets = ((tGets<<3)|0x00),
+    idSucc = ((tSucc<<3)|0x00),
+    idEach = ((tEach<<3)|0x00),
+    idLambda = ((tLambda<<3)|0x00),
+    idSend = ((tSend<<3)|0x00),
+    id__send__ = ((t__send__<<3)|0x00),
+    idInitialize = ((tInitialize<<3)|0x00)
+};
+struct ruby_method_ids_check {
+int checking_for_tUPLUS[321 == 321 ? 1 : -1];
+int checking_for_tUMINUS[322 == 322 ? 1 : -1];
+int checking_for_tPOW[323 == 323 ? 1 : -1];
+int checking_for_tCMP[324 == 324 ? 1 : -1];
+int checking_for_tEQ[325 == 325 ? 1 : -1];
+int checking_for_tEQQ[326 == 326 ? 1 : -1];
+int checking_for_tNEQ[327 == 327 ? 1 : -1];
+int checking_for_tGEQ[328 == 328 ? 1 : -1];
+int checking_for_tLEQ[329 == 329 ? 1 : -1];
+int checking_for_tANDOP[330 == 330 ? 1 : -1];
+int checking_for_tOROP[331 == 331 ? 1 : -1];
+int checking_for_tMATCH[332 == 332 ? 1 : -1];
+int checking_for_tNMATCH[333 == 333 ? 1 : -1];
+int checking_for_tDOT2[334 == 334 ? 1 : -1];
+int checking_for_tDOT3[335 == 335 ? 1 : -1];
+int checking_for_tAREF[336 == 336 ? 1 : -1];
+int checking_for_tASET[337 == 337 ? 1 : -1];
+int checking_for_tLSHFT[338 == 338 ? 1 : -1];
+int checking_for_tRSHFT[339 == 339 ? 1 : -1];
+int checking_for_tLAMBDA[352 == 352 ? 1 : -1];
+int checking_for_idNULL[365 == 365 ? 1 : -1];
+int checking_for_idRespond_to[366 == 366 ? 1 : -1];
+int checking_for_idIFUNC[367 == 367 ? 1 : -1];
+int checking_for_idCFUNC[368 == 368 ? 1 : -1];
+int checking_for_idThrowState[369 == 369 ? 1 : -1];
+int checking_for_id_core_set_method_alias[370 == 370 ? 1 : -1];
+int checking_for_id_core_set_variable_alias[371 == 371 ? 1 : -1];
+int checking_for_id_core_undef_method[372 == 372 ? 1 : -1];
+int checking_for_id_core_define_method[373 == 373 ? 1 : -1];
+int checking_for_id_core_define_singleton_method[374 == 374 ? 1 : -1];
+int checking_for_id_core_set_postexe[375 == 375 ? 1 : -1];
+int checking_for_tLAST_TOKEN[376 == 376 ? 1 : -1];
+};
+typedef struct {
+  OnigCodePoint from;
+  OnigCodePoint to;
+} OnigPairCaseFoldCodes;
+typedef struct {
+  OnigUChar *name;
+  int ctype;
+  short int len;
+} PosixBracketEntryType;
+extern int onigenc_ascii_apply_all_case_fold (OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, OnigEncoding enc);
+extern int onigenc_ascii_get_case_fold_codes_by_str (OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[], OnigEncoding enc);
+extern int onigenc_apply_all_case_fold_with_map (int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg);
+extern int onigenc_get_case_fold_codes_by_str_with_map (int map_size, const OnigPairCaseFoldCodes map[], int ess_tsett_flag, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]);
+extern int onigenc_not_support_get_ctype_code_range (OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[], OnigEncoding enc);
+extern int onigenc_is_mbc_newline_0x0a (const OnigUChar* p, const OnigUChar* end, OnigEncoding enc);
+extern int onigenc_ascii_mbc_case_fold (OnigCaseFoldType flag, const OnigUChar** p, const OnigUChar* end, OnigUChar* lower, OnigEncoding enc);
+extern int onigenc_single_byte_mbc_enc_len (const OnigUChar* p, const OnigUChar* e, OnigEncoding enc);
+extern OnigCodePoint onigenc_single_byte_mbc_to_code (const OnigUChar* p, const OnigUChar* end, OnigEncoding enc);
+extern int onigenc_single_byte_code_to_mbclen (OnigCodePoint code, OnigEncoding enc);
+extern int onigenc_single_byte_code_to_mbc (OnigCodePoint code, OnigUChar *buf, OnigEncoding enc);
+extern OnigUChar* onigenc_single_byte_left_adjust_char_head (const OnigUChar* start, const OnigUChar* s, const OnigUChar* end, OnigEncoding enc);
+extern int onigenc_always_true_is_allowed_reverse_match (const OnigUChar* s, const OnigUChar* end, OnigEncoding enc);
+extern int onigenc_always_false_is_allowed_reverse_match (const OnigUChar* s, const OnigUChar* end, OnigEncoding enc);
+extern int onigenc_ascii_is_code_ctype (OnigCodePoint code, unsigned int ctype, OnigEncoding enc);
+extern OnigCodePoint onigenc_mbn_mbc_to_code (OnigEncoding enc, const OnigUChar* p, const OnigUChar* end);
+extern int onigenc_mbn_mbc_case_fold (OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar** p, const OnigUChar* end, OnigUChar* lower);
+extern int onigenc_mb2_code_to_mbclen (OnigCodePoint code, OnigEncoding enc);
+extern int onigenc_mb2_code_to_mbc (OnigEncoding enc, OnigCodePoint code, OnigUChar *buf);
+extern int onigenc_minimum_property_name_to_ctype (OnigEncoding enc, OnigUChar* p, OnigUChar* end);
+extern int onigenc_unicode_property_name_to_ctype (OnigEncoding enc, OnigUChar* p, OnigUChar* end);
+extern int onigenc_mb2_is_code_ctype (OnigEncoding enc, OnigCodePoint code, unsigned int ctype);
+extern int onigenc_mb4_code_to_mbclen (OnigCodePoint code, OnigEncoding enc);
+extern int onigenc_mb4_code_to_mbc (OnigEncoding enc, OnigCodePoint code, OnigUChar *buf);
+extern int onigenc_mb4_is_code_ctype (OnigEncoding enc, OnigCodePoint code, unsigned int ctype);
+extern int onigenc_unicode_is_code_ctype (OnigCodePoint code, unsigned int ctype, OnigEncoding enc);
+extern int onigenc_utf16_32_get_ctype_code_range (OnigCtype ctype, OnigCodePoint *sb_out, const OnigCodePoint* ranges[], OnigEncoding enc);
+extern int onigenc_unicode_ctype_code_range (int ctype, const OnigCodePoint* ranges[]);
+extern int onigenc_unicode_get_case_fold_codes_by_str (OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem items[]);
+extern int onigenc_unicode_mbc_case_fold (OnigEncoding enc, OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* fold);
+extern int onigenc_unicode_apply_all_case_fold (OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg, OnigEncoding enc);
+extern const OnigUChar OnigEncISO_8859_1_ToLowerCaseTable[];
+extern const OnigUChar OnigEncISO_8859_1_ToUpperCaseTable[];
+extern int
+onigenc_with_ascii_strncmp (OnigEncoding enc, const OnigUChar* p, const OnigUChar* end, const OnigUChar* sascii , int n);
+extern OnigUChar*
+onigenc_step (OnigEncoding enc, const OnigUChar* p, const OnigUChar* end, int n);
+extern int onig_is_in_code_range (const OnigUChar* p, OnigCodePoint code);
+extern OnigEncoding OnigEncDefaultCharEncoding;
+extern const OnigUChar OnigEncAsciiToLowerCaseTable[];
+extern const OnigUChar OnigEncAsciiToUpperCaseTable[];
+extern const unsigned short OnigEncAsciiCtypeTable[];
+extern int *__errno_location (void) __attribute__ ((__nothrow__)) __attribute__ ((__const__));
+extern char *program_invocation_name, *program_invocation_short_name;
+typedef int error_t;
+enum
+{
+  _ISupper = ((0) < 8 ? ((1 << (0)) << 8) : ((1 << (0)) >> 8)),
+  _ISlower = ((1) < 8 ? ((1 << (1)) << 8) : ((1 << (1)) >> 8)),
+  _ISalpha = ((2) < 8 ? ((1 << (2)) << 8) : ((1 << (2)) >> 8)),
+  _ISdigit = ((3) < 8 ? ((1 << (3)) << 8) : ((1 << (3)) >> 8)),
+  _ISxdigit = ((4) < 8 ? ((1 << (4)) << 8) : ((1 << (4)) >> 8)),
+  _ISspace = ((5) < 8 ? ((1 << (5)) << 8) : ((1 << (5)) >> 8)),
+  _ISprint = ((6) < 8 ? ((1 << (6)) << 8) : ((1 << (6)) >> 8)),
+  _ISgraph = ((7) < 8 ? ((1 << (7)) << 8) : ((1 << (7)) >> 8)),
+  _ISblank = ((8) < 8 ? ((1 << (8)) << 8) : ((1 << (8)) >> 8)),
+  _IScntrl = ((9) < 8 ? ((1 << (9)) << 8) : ((1 << (9)) >> 8)),
+  _ISpunct = ((10) < 8 ? ((1 << (10)) << 8) : ((1 << (10)) >> 8)),
+  _ISalnum = ((11) < 8 ? ((1 << (11)) << 8) : ((1 << (11)) >> 8))
+};
+extern __const unsigned short int **__ctype_b_loc (void)
+     __attribute__ ((__const));
+extern __const __int32_t **__ctype_tolower_loc (void)
+     __attribute__ ((__const));
+extern __const __int32_t **__ctype_toupper_loc (void)
+     __attribute__ ((__const));
+extern int isalnum (int) __attribute__ ((__nothrow__));
+extern int isalpha (int) __attribute__ ((__nothrow__));
+extern int iscntrl (int) __attribute__ ((__nothrow__));
+extern int isdigit (int) __attribute__ ((__nothrow__));
+extern int islower (int) __attribute__ ((__nothrow__));
+extern int isgraph (int) __attribute__ ((__nothrow__));
+extern int isprint (int) __attribute__ ((__nothrow__));
+extern int ispunct (int) __attribute__ ((__nothrow__));
+extern int isspace (int) __attribute__ ((__nothrow__));
+extern int isupper (int) __attribute__ ((__nothrow__));
+extern int isxdigit (int) __attribute__ ((__nothrow__));
+extern int tolower (int __c) __attribute__ ((__nothrow__));
+extern int toupper (int __c) __attribute__ ((__nothrow__));
+extern int isblank (int) __attribute__ ((__nothrow__));
+extern int isctype (int __c, int __mask) __attribute__ ((__nothrow__));
+extern int isascii (int __c) __attribute__ ((__nothrow__));
+extern int toascii (int __c) __attribute__ ((__nothrow__));
+extern int _toupper (int) __attribute__ ((__nothrow__));
+extern int _tolower (int) __attribute__ ((__nothrow__));
+extern __inline int
+__attribute__ ((__nothrow__)) tolower (int __c)
+{
+  return __c >= -128 && __c < 256 ? (*__ctype_tolower_loc ())[__c] : __c;
+}
+extern __inline int
+__attribute__ ((__nothrow__)) toupper (int __c)
+{
+  return __c >= -128 && __c < 256 ? (*__ctype_toupper_loc ())[__c] : __c;
+}
+extern int isalnum_l (int, __locale_t) __attribute__ ((__nothrow__));
+extern int isalpha_l (int, __locale_t) __attribute__ ((__nothrow__));
+extern int iscntrl_l (int, __locale_t) __attribute__ ((__nothrow__));
+extern int isdigit_l (int, __locale_t) __attribute__ ((__nothrow__));
+extern int islower_l (int, __locale_t) __attribute__ ((__nothrow__));
+extern int isgraph_l (int, __locale_t) __attribute__ ((__nothrow__));
+extern int isprint_l (int, __locale_t) __attribute__ ((__nothrow__));
+extern int ispunct_l (int, __locale_t) __attribute__ ((__nothrow__));
+extern int isspace_l (int, __locale_t) __attribute__ ((__nothrow__));
+extern int isupper_l (int, __locale_t) __attribute__ ((__nothrow__));
+extern int isxdigit_l (int, __locale_t) __attribute__ ((__nothrow__));
+extern int isblank_l (int, __locale_t) __attribute__ ((__nothrow__));
+extern int __tolower_l (int __c, __locale_t __l) __attribute__ ((__nothrow__));
+extern int tolower_l (int __c, __locale_t __l) __attribute__ ((__nothrow__));
+extern int __toupper_l (int __c, __locale_t __l) __attribute__ ((__nothrow__));
+extern int toupper_l (int __c, __locale_t __l) __attribute__ ((__nothrow__));
+static ID register_symid(ID, const char *, long, rb_encoding *);
+static void
+Init_id(void)
+{
+    rb_encoding *enc = rb_usascii_encoding();
+    register_symid(365, "", strlen(""), enc);
+    register_symid(367, "<IFUNC>", strlen("<IFUNC>"), enc),
+    register_symid(368, "<CFUNC>", strlen("<CFUNC>"), enc),
+    register_symid(366, "respond_to?", strlen("respond_to?"), enc),
+    register_symid(369, "#__ThrowState__", strlen("#__ThrowState__"), enc),
+    register_symid(370, "core#set_method_alias", strlen("core#set_method_alias"), enc),
+    register_symid(371, "core#set_variable_alias", strlen("core#set_variable_alias"), enc),
+    register_symid(372, "core#undef_method", strlen("core#undef_method"), enc),
+    register_symid(373, "core#define_method", strlen("core#define_method"), enc),
+    register_symid(374, "core#define_singleton_method", strlen("core#define_singleton_method"), enc),
+    register_symid(375, "core#set_postexe", strlen("core#set_postexe"), enc),
+    register_symid(idEach, "each", strlen("each"), enc);
+    register_symid(idLength, "length", strlen("length"), enc);
+    register_symid(idLambda, "lambda", strlen("lambda"), enc);
+    register_symid(idIntern, "intern", strlen("intern"), enc);
+    register_symid(idGets, "gets", strlen("gets"), enc);
+    register_symid(idSucc, "succ", strlen("succ"), enc);
+    register_symid(idMethodMissing, "method_missing", strlen("method_missing"), enc);
+    register_symid(idSend, "send", strlen("send"), enc);
+    register_symid(id__send__, "__send__", strlen("__send__"), enc);
+    register_symid(idInitialize, "initialize", strlen("initialize"), enc);
+}
+enum lex_state_e {
+    EXPR_BEG,
+    EXPR_END,
+    EXPR_ENDARG,
+    EXPR_ARG,
+    EXPR_CMDARG,
+    EXPR_MID,
+    EXPR_FNAME,
+    EXPR_DOT,
+    EXPR_CLASS,
+    EXPR_VALUE
+};
+typedef unsigned long long stack_type;
+struct vtable {
+    ID *tbl;
+    int pos;
+    int capa;
+    struct vtable *prev;
+};
+struct local_vars {
+    struct vtable *args;
+    struct vtable *vars;
+    struct local_vars *prev;
+};
+static int
+vtable_size(const struct vtable *tbl)
+{
+    if (((VALUE)(tbl) & ~(VALUE)3)) {
+        return tbl->pos;
+    }
+    else {
+        return 0;
+    }
+}
+static struct vtable *
+vtable_alloc(struct vtable *prev)
+{
+    struct vtable *tbl = (struct vtable*)ruby_xmalloc(sizeof(struct vtable));
+    tbl->pos = 0;
+    tbl->capa = 8;
+    tbl->tbl = (ID*)ruby_xmalloc2((tbl->capa),sizeof(ID));
+    tbl->prev = prev;
+    if (0) printf("vtable_alloc: %p\n", (void *)tbl);
+    return tbl;
+}
+static void
+vtable_free(struct vtable *tbl)
+{
+    if (0)printf("vtable_free: %p\n", (void *)tbl);
+    if (((VALUE)(tbl) & ~(VALUE)3)) {
+        if (tbl->tbl) {
+            ruby_xfree(tbl->tbl);
+        }
+        ruby_xfree(tbl);
+    }
+}
+static void
+vtable_add(struct vtable *tbl, ID id)
+{
+    if (!((VALUE)(tbl) & ~(VALUE)3)) {
+        rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
+    }
+    if (0) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
+    if (tbl->pos == tbl->capa) {
+        tbl->capa = tbl->capa * 2;
+        (tbl->tbl)=(ID*)ruby_xrealloc2((char*)(tbl->tbl),(tbl->capa),sizeof(ID));
+    }
+    tbl->tbl[tbl->pos++] = id;
+}
+static int
+vtable_included(const struct vtable * tbl, ID id)
+{
+    int i;
+    if (((VALUE)(tbl) & ~(VALUE)3)) {
+        for (i = 0; i < tbl->pos; i++) {
+            if (tbl->tbl[i] == id) {
+                return 1;
+            }
+        }
+    }
+    return 0;
+}
+typedef struct token_info {
+    const char *token;
+    int linenum;
+    int column;
+    int nonspc;
+    struct token_info *next;
+} token_info;
+struct parser_params {
+    int is_ripper;
+    NODE *heap;
+    YYSTYPE *parser_yylval;
+    VALUE eofp;
+    NODE *parser_lex_strterm;
+    enum lex_state_e parser_lex_state;
+    stack_type parser_cond_stack;
+    stack_type parser_cmdarg_stack;
+    int parser_class_nest;
+    int parser_paren_nest;
+    int parser_lpar_beg;
+    int parser_in_single;
+    int parser_in_def;
+    int parser_compile_for_eval;
+    VALUE parser_cur_mid;
+    int parser_in_defined;
+    char *parser_tokenbuf;
+    int parser_tokidx;
+    int parser_toksiz;
+    VALUE parser_lex_input;
+    VALUE parser_lex_lastline;
+    VALUE parser_lex_nextline;
+    const char *parser_lex_pbeg;
+    const char *parser_lex_p;
+    const char *parser_lex_pend;
+    int parser_heredoc_end;
+    int parser_command_start;
+    NODE *parser_deferred_nodes;
+    int parser_lex_gets_ptr;
+    VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
+    struct local_vars *parser_lvtbl;
+    int parser_ruby__end__seen;
+    int line_count;
+    int has_shebang;
+    char *parser_ruby_sourcefile;
+    int parser_ruby_sourceline;
+    rb_encoding *enc;
+    rb_encoding *utf8;
+    int parser_yydebug;
+    NODE *parser_eval_tree_begin;
+    NODE *parser_eval_tree;
+    VALUE debug_lines;
+    VALUE coverage;
+    int nerr;
+    token_info *parser_token_info;
+};
+void *rb_parser_malloc(struct parser_params *, size_t);
+void *rb_parser_realloc(struct parser_params *, void *, size_t);
+void *rb_parser_calloc(struct parser_params *, size_t, size_t);
+void rb_parser_free(struct parser_params *, void *);
+static int parser_yyerror(struct parser_params*, const char*);
+static int yylex(void*, void*);
+static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
+static NODE *cond_gen(struct parser_params*,NODE*);
+static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
+static NODE *newline_node(NODE*);
+static void fixpos(NODE*,NODE*);
+static int value_expr_gen(struct parser_params*,NODE*);
+static void void_expr_gen(struct parser_params*,NODE*);
+static NODE *remove_begin(NODE*);
+static void void_stmts_gen(struct parser_params*,NODE*);
+static void reduce_nodes_gen(struct parser_params*,NODE**);
+static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
+static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
+static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
+static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
+static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
+static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
+static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
+static NODE *new_evstr_gen(struct parser_params*,NODE*);
+static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
+static NODE *splat_array(NODE*);
+static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
+static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
+static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID);
+static void shadowing_lvar_gen(struct parser_params*,ID);
+static NODE *negate_lit(NODE*);
+static NODE *ret_args_gen(struct parser_params*,NODE*);
+static NODE *arg_blk_pass(NODE*,NODE*);
+static NODE *new_yield_gen(struct parser_params*,NODE*);
+static NODE *gettable_gen(struct parser_params*,ID);
+static NODE *assignable_gen(struct parser_params*,ID,NODE*);
+static void new_bv_gen(struct parser_params*,ID);
+static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
+static NODE *attrset_gen(struct parser_params*,NODE*,ID);
+static void rb_backref_error_gen(struct parser_params*,NODE*);
+static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
+static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
+static void local_push_gen(struct parser_params*,int);
+static void local_pop_gen(struct parser_params*);
+static int local_var_gen(struct parser_params*, ID);
+static int arg_var_gen(struct parser_params*, ID);
+static int local_id_gen(struct parser_params*, ID);
+static ID *local_tbl_gen(struct parser_params*);
+static ID internal_id_gen(struct parser_params*);
+static void dyna_push_gen(struct parser_params*);
+static void dyna_pop_gen(struct parser_params*);
+static int dyna_in_block_gen(struct parser_params*);
+static int dvar_defined_gen(struct parser_params*,ID);
+static int dvar_curr_gen(struct parser_params*,ID);
+static void fixup_nodes(NODE **);
+extern int rb_dvar_defined(ID);
+extern int rb_local_defined(ID);
+extern int rb_parse_in_eval(void);
+static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
+static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
+static void reg_fragment_check_gen(struct parser_params*, VALUE, int);
+static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
+int rb_enc_symname2_p(const char *, int, rb_encoding *);
+static int lvar_defined_gen(struct parser_params*, ID);
+static void token_info_push(struct parser_params*, const char *token);
+static void token_info_pop(struct parser_params*, const char *token);
+typedef unsigned char yytype_uint8;
+typedef signed char yytype_int8;
+typedef unsigned short int yytype_uint16;
+typedef short int yytype_int16;
+union yyalloc
+{
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
+static const yytype_uint8 yytranslate[] =
+{
+       0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+     148, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 147, 123, 2, 2, 2, 121, 116, 2,
+     143, 144, 119, 117, 141, 118, 140, 120, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 111, 146,
+     113, 109, 112, 110, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 139, 2, 145, 115, 2, 142, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 137, 114, 138, 124, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+       2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+       5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+      15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+      25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+      35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+      45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+      55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+      65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+      75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
+      85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
+      95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
+     105, 106, 107, 108, 122, 125, 126, 127, 128, 129,
+     130, 131, 132, 133, 134, 135, 136
+};
+static const yytype_uint16 yyprhs[] =
+{
+       0, 0, 3, 4, 7, 12, 15, 17, 19, 23,
+      26, 27, 32, 36, 40, 44, 47, 51, 55, 59,
+      63, 67, 68, 74, 79, 83, 87, 91, 98, 104,
+     110, 116, 120, 124, 128, 132, 134, 136, 140, 144,
+     148, 151, 153, 155, 157, 159, 162, 165, 168, 170,
+     175, 180, 181, 187, 190, 194, 199, 205, 210, 216,
+     219, 222, 224, 228, 230, 234, 236, 239, 243, 249,
+     252, 257, 260, 265, 267, 271, 273, 277, 280, 284,
+     286, 290, 292, 297, 301, 305, 309, 313, 316, 318,
+     320, 325, 329, 333, 337, 341, 344, 346, 348, 350,
+     353, 355, 359, 361, 363, 365, 367, 369, 371, 373,
+     375, 377, 379, 380, 385, 387, 389, 391, 393, 395,
+     397, 399, 401, 403, 405, 407, 409, 411, 413, 415,
+     417, 419, 421, 423, 425, 427, 429, 431, 433, 435,
+     437, 439, 441, 443, 445, 447, 449, 451, 453, 455,
+     457, 459, 461, 463, 465, 467, 469, 471, 473, 475,
+     477, 479, 481, 483, 485, 487, 489, 491, 493, 495,
+     497, 499, 501, 503, 505, 507, 509, 511, 513, 515,
+     517, 519, 521, 523, 525, 529, 535, 539, 545, 552,
+     558, 564, 570, 576, 581, 585, 589, 593, 597, 601,
+     605, 609, 613, 617, 622, 627, 630, 633, 637, 641,
+     645, 649, 653, 657, 661, 665, 669, 673, 677, 681,
+     685, 688, 691, 695, 699, 703, 707, 708, 713, 720,
+     722, 724, 726, 729, 734, 737, 741, 743, 745, 747,
+     749, 751, 754, 757, 762, 764, 765, 768, 771, 774,
+     776, 778, 780, 783, 787, 792, 796, 801, 804, 806,
+     808, 810, 812, 814, 816, 818, 820, 822, 823, 828,
+     829, 834, 838, 842, 845, 849, 853, 855, 860, 864,
+     866, 867, 874, 879, 883, 886, 888, 891, 894, 901,
+     908, 909, 910, 918, 919, 920, 928, 934, 939, 940,
+     941, 951, 952, 959, 960, 961, 970, 971, 977, 978,
+     985, 986, 987, 997, 999, 1001, 1003, 1005, 1007, 1009,
+    1011, 1013, 1015, 1017, 1019, 1021, 1023, 1025, 1027, 1029,
+    1031, 1033, 1036, 1038, 1040, 1042, 1048, 1050, 1053, 1055,
+    1057, 1059, 1063, 1065, 1069, 1071, 1076, 1083, 1087, 1093,
+    1096, 1101, 1103, 1107, 1114, 1123, 1128, 1135, 1140, 1143,
+    1150, 1153, 1158, 1165, 1168, 1173, 1176, 1181, 1183, 1185,
+    1187, 1191, 1193, 1198, 1200, 1203, 1205, 1209, 1211, 1213,
+    1214, 1218, 1223, 1225, 1229, 1233, 1234, 1240, 1243, 1248,
+    1253, 1256, 1261, 1266, 1270, 1274, 1278, 1281, 1283, 1288,
+    1289, 1295, 1296, 1302, 1308, 1310, 1312, 1319, 1321, 1323,
+    1325, 1327, 1330, 1332, 1335, 1337, 1339, 1341, 1343, 1345,
+    1347, 1349, 1352, 1356, 1360, 1364, 1368, 1372, 1373, 1377,
+    1379, 1382, 1386, 1390, 1391, 1395, 1396, 1399, 1400, 1403,
+    1405, 1406, 1410, 1411, 1416, 1418, 1420, 1422, 1424, 1427,
+    1429, 1431, 1433, 1435, 1439, 1441, 1443, 1446, 1449, 1451,
+    1453, 1455, 1457, 1459, 1461, 1463, 1465, 1467, 1469, 1471,
+    1473, 1475, 1477, 1479, 1481, 1483, 1484, 1489, 1492, 1496,
+    1499, 1506, 1515, 1520, 1527, 1532, 1539, 1542, 1547, 1554,
+    1557, 1562, 1565, 1570, 1572, 1573, 1575, 1577, 1579, 1581,
+    1583, 1585, 1587, 1591, 1593, 1597, 1601, 1605, 1607, 1611,
+    1613, 1617, 1619, 1621, 1624, 1626, 1628, 1630, 1633, 1636,
+    1638, 1640, 1641, 1646, 1648, 1651, 1653, 1657, 1661, 1664,
+    1666, 1668, 1670, 1672, 1674, 1676, 1678, 1680, 1682, 1684,
+    1686, 1688, 1689, 1691, 1692, 1694, 1697, 1700, 1701, 1703,
+    1705, 1707, 1709, 1711, 1714
+};
+static const yytype_int16 yyrhs[] =
+{
+     150, 0, -1, -1, 151, 153, -1, 153, 252, 228,
+     255, -1, 154, 307, -1, 314, -1, 155, -1, 154,
+     313, 155, -1, 1, 155, -1, -1, 45, 177, 156,
+     177, -1, 45, 54, 54, -1, 45, 54, 64, -1,
+      45, 54, 63, -1, 6, 178, -1, 155, 40, 159,
+      -1, 155, 41, 159, -1, 155, 42, 159, -1, 155,
+      43, 159, -1, 155, 44, 155, -1, -1, 47, 157,
+     137, 153, 138, -1, 48, 137, 153, 138, -1, 172,
+     109, 160, -1, 165, 109, 160, -1, 279, 87, 160,
+      -1, 213, 139, 188, 310, 87, 160, -1, 213, 140,
+      52, 87, 160, -1, 213, 140, 56, 87, 160, -1,
+     213, 85, 52, 87, 160, -1, 280, 87, 160, -1,
+     172, 109, 195, -1, 165, 109, 184, -1, 165, 109,
+     195, -1, 158, -1, 160, -1, 158, 37, 158, -1,
+     158, 38, 158, -1, 39, 308, 158, -1, 123, 160,
+      -1, 182, -1, 158, -1, 164, -1, 161, -1, 30,
+     189, -1, 21, 189, -1, 22, 189, -1, 245, -1,
+     245, 140, 304, 190, -1, 245, 85, 304, 190, -1,
+      -1, 94, 163, 234, 153, 138, -1, 303, 190, -1,
+     303, 190, 162, -1, 213, 140, 304, 190, -1, 213,
+     140, 304, 190, 162, -1, 213, 85, 304, 190, -1,
+     213, 85, 304, 190, 162, -1, 32, 190, -1, 31,
+     190, -1, 167, -1, 89, 166, 309, -1, 167, -1,
+      89, 166, 309, -1, 169, -1, 169, 168, -1, 169,
+      95, 171, -1, 169, 95, 171, 141, 170, -1, 169,
+      95, -1, 169, 95, 141, 170, -1, 95, 171, -1,
+      95, 171, 141, 170, -1, 95, -1, 95, 141, 170,
+      -1, 171, -1, 89, 166, 309, -1, 168, 141, -1,
+     169, 168, 141, -1, 168, -1, 170, 141, 168, -1,
+     277, -1, 213, 139, 188, 310, -1, 213, 140, 52,
+      -1, 213, 85, 52, -1, 213, 140, 56, -1, 213,
+      85, 56, -1, 86, 56, -1, 280, -1, 277, -1,
+     213, 139, 188, 310, -1, 213, 140, 52, -1, 213,
+      85, 52, -1, 213, 140, 56, -1, 213, 85, 56,
+      -1, 86, 56, -1, 280, -1, 52, -1, 56, -1,
+      86, 173, -1, 173, -1, 213, 85, 173, -1, 52,
+      -1, 56, -1, 53, -1, 180, -1, 181, -1, 175,
+      -1, 273, -1, 176, -1, 275, -1, 177, -1, -1,
+     178, 141, 179, 177, -1, 114, -1, 115, -1, 116,
+      -1, 69, -1, 70, -1, 71, -1, 77, -1, 78,
+      -1, 112, -1, 73, -1, 113, -1, 74, -1, 72,
+      -1, 83, -1, 84, -1, 117, -1, 118, -1, 119,
+      -1, 95, -1, 120, -1, 121, -1, 68, -1, 123,
+      -1, 124, -1, 66, -1, 67, -1, 81, -1, 82,
+      -1, 142, -1, 49, -1, 50, -1, 51, -1, 47,
+      -1, 48, -1, 45, -1, 37, -1, 7, -1, 21,
+      -1, 16, -1, 3, -1, 5, -1, 46, -1, 26,
+      -1, 15, -1, 14, -1, 10, -1, 9, -1, 36,
+      -1, 20, -1, 25, -1, 4, -1, 22, -1, 34,
+      -1, 39, -1, 38, -1, 23, -1, 8, -1, 24,
+      -1, 30, -1, 33, -1, 32, -1, 13, -1, 35,
+      -1, 6, -1, 17, -1, 31, -1, 11, -1, 12,
+      -1, 18, -1, 19, -1, 172, 109, 182, -1, 172,
+     109, 182, 44, 182, -1, 279, 87, 182, -1, 279,
+      87, 182, 44, 182, -1, 213, 139, 188, 310, 87,
+     182, -1, 213, 140, 52, 87, 182, -1, 213, 140,
+      56, 87, 182, -1, 213, 85, 52, 87, 182, -1,
+     213, 85, 56, 87, 182, -1, 86, 56, 87, 182,
+      -1, 280, 87, 182, -1, 182, 79, 182, -1, 182,
+      80, 182, -1, 182, 117, 182, -1, 182, 118, 182,
+      -1, 182, 119, 182, -1, 182, 120, 182, -1, 182,
+     121, 182, -1, 182, 68, 182, -1, 122, 59, 68,
+     182, -1, 122, 60, 68, 182, -1, 66, 182, -1,
+      67, 182, -1, 182, 114, 182, -1, 182, 115, 182,
+      -1, 182, 116, 182, -1, 182, 69, 182, -1, 182,
+     112, 182, -1, 182, 73, 182, -1, 182, 113, 182,
+      -1, 182, 74, 182, -1, 182, 70, 182, -1, 182,
+      71, 182, -1, 182, 72, 182, -1, 182, 77, 182,
+      -1, 182, 78, 182, -1, 123, 182, -1, 124, 182,
+      -1, 182, 83, 182, -1, 182, 84, 182, -1, 182,
+      75, 182, -1, 182, 76, 182, -1, -1, 46, 308,
+     183, 182, -1, 182, 110, 182, 308, 111, 182, -1,
+     196, -1, 182, -1, 314, -1, 194, 311, -1, 194,
+     141, 301, 311, -1, 301, 311, -1, 143, 188, 309,
+      -1, 314, -1, 186, -1, 314, -1, 189, -1, 164,
+      -1, 194, 193, -1, 301, 193, -1, 194, 141, 301,
+     193, -1, 192, -1, -1, 191, 189, -1, 96, 184,
+      -1, 141, 192, -1, 141, -1, 314, -1, 184, -1,
+      95, 184, -1, 194, 141, 184, -1, 194, 141, 95,
+     184, -1, 194, 141, 184, -1, 194, 141, 95, 184,
+      -1, 95, 184, -1, 256, -1, 257, -1, 260, -1,
+     261, -1, 262, -1, 265, -1, 278, -1, 280, -1,
+      53, -1, -1, 214, 197, 152, 224, -1, -1, 90,
+     158, 198, 309, -1, 89, 153, 144, -1, 213, 85,
+      56, -1, 86, 56, -1, 92, 185, 145, -1, 93,
+     300, 138, -1, 30, -1, 31, 143, 189, 309, -1,
+      31, 143, 309, -1, 31, -1, -1, 46, 308, 143,
+     199, 158, 309, -1, 39, 143, 158, 309, -1, 39,
+     143, 309, -1, 303, 247, -1, 246, -1, 246, 247,
+      -1, 97, 239, -1, 215, 159, 225, 153, 227, 224,
+      -1, 216, 159, 225, 153, 228, 224, -1, -1, -1,
+     217, 200, 159, 226, 201, 153, 224, -1, -1, -1,
+     218, 202, 159, 226, 203, 153, 224, -1, 219, 159,
+     307, 250, 224, -1, 219, 307, 250, 224, -1, -1,
+      -1, 220, 229, 25, 204, 159, 226, 205, 153, 224,
+      -1, -1, 221, 174, 281, 206, 152, 224, -1, -1,
+      -1, 221, 83, 158, 207, 312, 208, 152, 224, -1,
+      -1, 222, 174, 209, 152, 224, -1, -1, 223, 175,
+     210, 283, 152, 224, -1, -1, -1, 223, 298, 306,
+     211, 175, 212, 283, 152, 224, -1, 21, -1, 22,
+      -1, 23, -1, 24, -1, 196, -1, 7, -1, 11,
+      -1, 12, -1, 18, -1, 19, -1, 16, -1, 20,
+      -1, 3, -1, 4, -1, 5, -1, 10, -1, 312,
+      -1, 13, -1, 312, 13, -1, 312, -1, 27, -1,
+     228, -1, 14, 159, 225, 153, 227, -1, 314, -1,
+      15, 153, -1, 172, -1, 165, -1, 286, -1, 89,
+     232, 309, -1, 230, -1, 231, 141, 230, -1, 231,
+      -1, 231, 141, 95, 286, -1, 231, 141, 95, 286,
+     141, 231, -1, 231, 141, 95, -1, 231, 141, 95,
+     141, 231, -1, 95, 286, -1, 95, 286, 141, 231,
+      -1, 95, -1, 95, 141, 231, -1, 288, 141, 291,
+     141, 294, 297, -1, 288, 141, 291, 141, 294, 141,
+     288, 297, -1, 288, 141, 291, 297, -1, 288, 141,
+     291, 141, 288, 297, -1, 288, 141, 294, 297, -1,
+     288, 141, -1, 288, 141, 294, 141, 288, 297, -1,
+     288, 297, -1, 291, 141, 294, 297, -1, 291, 141,
+     294, 141, 288, 297, -1, 291, 297, -1, 291, 141,
+     288, 297, -1, 294, 297, -1, 294, 141, 288, 297,
+      -1, 296, -1, 314, -1, 235, -1, 114, 236, 114,
+      -1, 76, -1, 114, 233, 236, 114, -1, 314, -1,
+     146, 237, -1, 238, -1, 237, 141, 238, -1, 52,
+      -1, 285, -1, -1, 240, 241, 242, -1, 143, 284,
+     236, 309, -1, 284, -1, 107, 153, 138, -1, 29,
+     153, 10, -1, -1, 28, 244, 234, 153, 10, -1,
+     164, 243, -1, 245, 140, 304, 187, -1, 245, 85,
+     304, 187, -1, 303, 186, -1, 213, 140, 304, 187,
+      -1, 213, 85, 304, 186, -1, 213, 85, 305, -1,
+     213, 140, 186, -1, 213, 85, 186, -1, 32, 186,
+      -1, 32, -1, 213, 139, 188, 310, -1, -1, 137,
+     248, 234, 153, 138, -1, -1, 26, 249, 234, 153,
+      10, -1, 17, 194, 225, 153, 251, -1, 228, -1,
+     250, -1, 8, 253, 254, 225, 153, 252, -1, 314,
+      -1, 184, -1, 195, -1, 314, -1, 88, 172, -1,
+     314, -1, 9, 153, -1, 314, -1, 276, -1, 273,
+      -1, 275, -1, 258, -1, 62, -1, 259, -1, 258,
+     259, -1, 99, 267, 106, -1, 100, 268, 106, -1,
+     101, 268, 65, -1, 102, 147, 106, -1, 102, 263,
+     106, -1, -1, 263, 264, 147, -1, 269, -1, 264,
+     269, -1, 103, 147, 106, -1, 103, 266, 106, -1,
+      -1, 266, 61, 147, -1, -1, 267, 269, -1, -1,
+     268, 269, -1, 61, -1, -1, 105, 270, 272, -1,
+      -1, 104, 271, 153, 138, -1, 54, -1, 55, -1,
+      57, -1, 280, -1, 98, 274, -1, 175, -1, 55,
+      -1, 54, -1, 57, -1, 98, 268, 106, -1, 59,
+      -1, 60, -1, 122, 59, -1, 122, 60, -1, 52,
+      -1, 55, -1, 54, -1, 56, -1, 57, -1, 34,
+      -1, 33, -1, 35, -1, 36, -1, 50, -1, 49,
+      -1, 51, -1, 277, -1, 277, -1, 63, -1, 64,
+      -1, 312, -1, -1, 113, 282, 159, 312, -1, 1,
+     312, -1, 143, 284, 309, -1, 284, 312, -1, 288,
+     141, 292, 141, 294, 297, -1, 288, 141, 292, 141,
+     294, 141, 288, 297, -1, 288, 141, 292, 297, -1,
+     288, 141, 292, 141, 288, 297, -1, 288, 141, 294,
+     297, -1, 288, 141, 294, 141, 288, 297, -1, 288,
+     297, -1, 292, 141, 294, 297, -1, 292, 141, 294,
+     141, 288, 297, -1, 292, 297, -1, 292, 141, 288,
+     297, -1, 294, 297, -1, 294, 141, 288, 297, -1,
+     296, -1, -1, 56, -1, 55, -1, 54, -1, 57,
+      -1, 285, -1, 52, -1, 286, -1, 89, 232, 309,
+      -1, 287, -1, 288, 141, 287, -1, 52, 109, 184,
+      -1, 52, 109, 213, -1, 290, -1, 291, 141, 290,
+      -1, 289, -1, 292, 141, 289, -1, 119, -1, 95,
+      -1, 293, 52, -1, 293, -1, 116, -1, 96, -1,
+     295, 52, -1, 141, 296, -1, 314, -1, 278, -1,
+      -1, 143, 299, 158, 309, -1, 314, -1, 301, 311,
+      -1, 302, -1, 301, 141, 302, -1, 184, 88, 184,
+      -1, 58, 184, -1, 52, -1, 56, -1, 53, -1,
+      52, -1, 56, -1, 53, -1, 180, -1, 52, -1,
+      53, -1, 180, -1, 140, -1, 85, -1, -1, 313,
+      -1, -1, 148, -1, 308, 144, -1, 308, 145, -1,
+      -1, 148, -1, 141, -1, 146, -1, 148, -1, 312,
+      -1, 313, 146, -1, -1
+};
+static const yytype_uint16 yyrline[] =
+{
+       0, 763, 763, 763, 793, 826, 837, 846, 854, 862,
+     868, 868, 876, 884, 895, 905, 913, 922, 931, 944,
+     957, 967, 966, 988, 1000, 1009, 1019, 1048, 1069, 1086,
+    1103, 1120, 1130, 1139, 1148, 1157, 1160, 1161, 1169, 1177,
+    1185, 1193, 1196, 1208, 1209, 1210, 1218, 1226, 1236, 1237,
+    1246, 1258, 1257, 1279, 1288, 1300, 1309, 1321, 1330, 1342,
+    1351, 1362, 1363, 1373, 1374, 1384, 1392, 1400, 1408, 1416,
+    1424, 1432, 1440, 1448, 1456, 1466, 1467, 1477, 1485, 1495,
+    1503, 1513, 1521, 1529, 1537, 1545, 1553, 1565, 1575, 1587,
+    1595, 1603, 1611, 1619, 1627, 1640, 1653, 1664, 1672, 1675,
+    1683, 1691, 1701, 1702, 1703, 1704, 1714, 1726, 1727, 1730,
+    1738, 1741, 1749, 1749, 1759, 1760, 1761, 1762, 1763, 1764,
+    1765, 1766, 1767, 1768, 1769, 1770, 1771, 1772, 1773, 1774,
+    1775, 1776, 1777, 1778, 1779, 1780, 1781, 1782, 1783, 1784,
+    1785, 1786, 1787, 1790, 1790, 1790, 1791, 1791, 1792, 1792,
+    1792, 1793, 1793, 1793, 1793, 1794, 1794, 1794, 1794, 1795,
+    1795, 1795, 1796, 1796, 1796, 1796, 1797, 1797, 1797, 1797,
+    1798, 1798, 1798, 1798, 1799, 1799, 1799, 1799, 1800, 1800,
+    1800, 1800, 1801, 1801, 1804, 1813, 1823, 1852, 1883, 1904,
+    1921, 1938, 1955, 1966, 1977, 1988, 2002, 2016, 2024, 2032,
+    2040, 2048, 2056, 2064, 2073, 2082, 2090, 2098, 2106, 2114,
+    2122, 2130, 2138, 2146, 2154, 2162, 2170, 2178, 2186, 2197,
+    2205, 2213, 2221, 2229, 2237, 2245, 2253, 2253, 2263, 2273,
+    2279, 2291, 2292, 2296, 2304, 2314, 2324, 2325, 2328, 2329,
+    2332, 2340, 2348, 2358, 2367, 2376, 2376, 2388, 2398, 2402,
+    2406, 2412, 2420, 2428, 2442, 2458, 2472, 2487, 2497, 2498,
+    2499, 2500, 2501, 2502, 2503, 2504, 2505, 2514, 2513, 2538,
+    2538, 2547, 2555, 2563, 2571, 2584, 2592, 2600, 2608, 2616,
+    2624, 2624, 2634, 2642, 2650, 2661, 2662, 2673, 2677, 2689,
+    2701, 2701, 2701, 2712, 2712, 2712, 2723, 2734, 2743, 2745,
+    2742, 2809, 2808, 2830, 2835, 2829, 2857, 2856, 2878, 2877,
+    2904, 2905, 2904, 2929, 2937, 2945, 2953, 2963, 2975, 2982,
+    2989, 2996, 3003, 3010, 3017, 3024, 3031, 3038, 3045, 3052,
+    3057, 3058, 3065, 3070, 3073, 3074, 3087, 3088, 3098, 3099,
+    3102, 3110, 3120, 3128, 3138, 3146, 3154, 3162, 3170, 3178,
+    3186, 3197, 3205, 3215, 3223, 3231, 3239, 3247, 3255, 3264,
+    3272, 3280, 3288, 3296, 3304, 3312, 3320, 3328, 3338, 3339,
+    3345, 3354, 3363, 3374, 3375, 3385, 3392, 3401, 3409, 3415,
+    3415, 3437, 3445, 3455, 3459, 3466, 3465, 3486, 3502, 3511,
+    3522, 3531, 3541, 3551, 3559, 3570, 3581, 3589, 3597, 3612,
+    3611, 3633, 3632, 3653, 3665, 3666, 3669, 3688, 3691, 3699,
+    3707, 3710, 3714, 3717, 3725, 3728, 3729, 3737, 3740, 3757,
+    3758, 3759, 3769, 3779, 3806, 3848, 3856, 3863, 3870, 3880,
+    3888, 3898, 3906, 3913, 3920, 3931, 3938, 3949, 3956, 3966,
+    3968, 3967, 3984, 3983, 4005, 4013, 4021, 4029, 4032, 4044,
+    4045, 4046, 4047, 4050, 4081, 4082, 4083, 4091, 4101, 4102,
+    4103, 4104, 4105, 4106, 4107, 4108, 4109, 4110, 4111, 4112,
+    4115, 4125, 4135, 4136, 4139, 4148, 4147, 4155, 4167, 4179,
+    4185, 4193, 4201, 4209, 4217, 4225, 4233, 4241, 4249, 4257,
+    4265, 4273, 4281, 4289, 4298, 4307, 4316, 4325, 4334, 4345,
+    4346, 4358, 4366, 4385, 4392, 4405, 4419, 4433, 4441, 4457,
+    4465, 4481, 4482, 4485, 4497, 4508, 4509, 4512, 4528, 4532,
+    4542, 4552, 4552, 4581, 4582, 4592, 4599, 4609, 4617, 4627,
+    4628, 4629, 4632, 4633, 4634, 4635, 4638, 4639, 4640, 4643,
+    4648, 4655, 4656, 4659, 4660, 4663, 4666, 4669, 4670, 4671,
+    4674, 4675, 4678, 4679, 4683
+};
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "keyword_class", "keyword_module",
+  "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue",
+  "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless",
+  "keyword_then", "keyword_elsif", "keyword_else", "keyword_case",
+  "keyword_when", "keyword_while", "keyword_until", "keyword_for",
+  "keyword_break", "keyword_next", "keyword_redo", "keyword_retry",
+  "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block",
+  "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super",
+  "keyword_self", "keyword_nil", "keyword_true", "keyword_false",
+  "keyword_and", "keyword_or", "keyword_not", "modifier_if",
+  "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue",
+  "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END",
+  "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__",
+  "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL",
+  "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
+  "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
+  "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
+  "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
+  "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
+  "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
+  "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
+  "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
+  "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
+  "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL",
+  "idRespond_to", "idIFUNC", "idCFUNC", "idThrowState",
+  "id_core_set_method_alias", "id_core_set_variable_alias",
+  "id_core_undef_method", "id_core_define_method",
+  "id_core_define_singleton_method", "id_core_set_postexe", "tLAST_TOKEN",
+  "'{'", "'}'", "'['", "'.'", "','", "'`'", "'('", "')'", "']'", "';'",
+  "' '", "'\\n'", "$accept", "program", "@1", "bodystmt", "compstmt",
+  "stmts", "stmt", "@2", "@3", "expr", "expr_value", "command_call",
+  "block_command", "cmd_brace_block", "@4", "command", "mlhs",
+  "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
+  "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem",
+  "undef_list", "@5", "op", "reswords", "arg", "@6", "arg_value",
+  "aref_args", "paren_args", "opt_paren_args", "opt_call_args",
+  "call_args", "command_args", "@7", "block_arg", "opt_block_arg", "args",
+  "mrhs", "primary", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15",
+  "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "primary_value",
+  "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for",
+  "k_class", "k_module", "k_def", "k_end", "then", "do", "if_tail",
+  "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs", "block_param",
+  "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar",
+  "lambda", "@24", "f_larglist", "lambda_body", "do_block", "@25",
+  "block_call", "method_call", "brace_block", "@26", "@27", "case_body",
+  "cases", "opt_rescue", "exc_list", "exc_var", "opt_ensure", "literal",
+  "strings", "string", "string1", "xstring", "regexp", "words",
+  "word_list", "word", "qwords", "qword_list", "string_contents",
+  "xstring_contents", "string_content", "@28", "@29", "string_dvar",
+  "symbol", "sym", "dsym", "numeric", "variable", "var_ref", "var_lhs",
+  "backref", "superclass", "@30", "f_arglist", "f_args", "f_bad_arg",
+  "f_norm_arg", "f_arg_item", "f_arg", "f_opt", "f_block_opt",
+  "f_block_optarg", "f_optarg", "restarg_mark", "f_rest_arg",
+  "blkarg_mark", "f_block_arg", "opt_f_block_arg", "singleton", "@31",
+  "assoc_list", "assocs", "assoc", "operation", "operation2", "operation3",
+  "dot_or_colon", "opt_terms", "opt_nl", "rparen", "rbracket", "trailer",
+  "term", "terms", "none", 0
+};
+static const yytype_uint16 yyr1[] =
+{
+       0, 149, 151, 150, 152, 153, 154, 154, 154, 154,
+     156, 155, 155, 155, 155, 155, 155, 155, 155, 155,
+     155, 157, 155, 155, 155, 155, 155, 155, 155, 155,
+     155, 155, 155, 155, 155, 155, 158, 158, 158, 158,
+     158, 158, 159, 160, 160, 160, 160, 160, 161, 161,
+     161, 163, 162, 164, 164, 164, 164, 164, 164, 164,
+     164, 165, 165, 166, 166, 167, 167, 167, 167, 167,
+     167, 167, 167, 167, 167, 168, 168, 169, 169, 170,
+     170, 171, 171, 171, 171, 171, 171, 171, 171, 172,
+     172, 172, 172, 172, 172, 172, 172, 173, 173, 174,
+     174, 174, 175, 175, 175, 175, 175, 176, 176, 177,
+     177, 178, 179, 178, 180, 180, 180, 180, 180, 180,
+     180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
+     180, 180, 180, 180, 180, 180, 180, 180, 180, 180,
+     180, 180, 180, 181, 181, 181, 181, 181, 181, 181,
+     181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+     181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+     181, 181, 181, 181, 181, 181, 181, 181, 181, 181,
+     181, 181, 181, 181, 182, 182, 182, 182, 182, 182,
+     182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+     182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+     182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+     182, 182, 182, 182, 182, 182, 183, 182, 182, 182,
+     184, 185, 185, 185, 185, 186, 187, 187, 188, 188,
+     189, 189, 189, 189, 189, 191, 190, 192, 193, 193,
+     193, 194, 194, 194, 194, 195, 195, 195, 196, 196,
+     196, 196, 196, 196, 196, 196, 196, 197, 196, 198,
+     196, 196, 196, 196, 196, 196, 196, 196, 196, 196,
+     199, 196, 196, 196, 196, 196, 196, 196, 196, 196,
+     200, 201, 196, 202, 203, 196, 196, 196, 204, 205,
+     196, 206, 196, 207, 208, 196, 209, 196, 210, 196,
+     211, 212, 196, 196, 196, 196, 196, 213, 214, 215,
+     216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
+     225, 225, 226, 226, 227, 227, 228, 228, 229, 229,
+     230, 230, 231, 231, 232, 232, 232, 232, 232, 232,
+     232, 232, 232, 233, 233, 233, 233, 233, 233, 233,
+     233, 233, 233, 233, 233, 233, 233, 233, 234, 234,
+     235, 235, 235, 236, 236, 237, 237, 238, 238, 240,
+     239, 241, 241, 242, 242, 244, 243, 245, 245, 245,
+     246, 246, 246, 246, 246, 246, 246, 246, 246, 248,
+     247, 249, 247, 250, 251, 251, 252, 252, 253, 253,
+     253, 254, 254, 255, 255, 256, 256, 256, 257, 258,
+     258, 258, 259, 260, 261, 262, 262, 263, 263, 264,
+     264, 265, 265, 266, 266, 267, 267, 268, 268, 269,
+     270, 269, 271, 269, 272, 272, 272, 272, 273, 274,
+     274, 274, 274, 275, 276, 276, 276, 276, 277, 277,
+     277, 277, 277, 277, 277, 277, 277, 277, 277, 277,
+     278, 279, 280, 280, 281, 282, 281, 281, 283, 283,
+     284, 284, 284, 284, 284, 284, 284, 284, 284, 284,
+     284, 284, 284, 284, 284, 285, 285, 285, 285, 286,
+     286, 287, 287, 288, 288, 289, 290, 291, 291, 292,
+     292, 293, 293, 294, 294, 295, 295, 296, 297, 297,
+     298, 299, 298, 300, 300, 301, 301, 302, 302, 303,
+     303, 303, 304, 304, 304, 304, 305, 305, 305, 306,
+     306, 307, 307, 308, 308, 309, 310, 311, 311, 311,
+     312, 312, 313, 313, 314
+};
+static const yytype_uint8 yyr2[] =
+{
+       0, 2, 0, 2, 4, 2, 1, 1, 3, 2,
+       0, 4, 3, 3, 3, 2, 3, 3, 3, 3,
+       3, 0, 5, 4, 3, 3, 3, 6, 5, 5,
+       5, 3, 3, 3, 3, 1, 1, 3, 3, 3,
+       2, 1, 1, 1, 1, 2, 2, 2, 1, 4,
+       4, 0, 5, 2, 3, 4, 5, 4, 5, 2,
+       2, 1, 3, 1, 3, 1, 2, 3, 5, 2,
+       4, 2, 4, 1, 3, 1, 3, 2, 3, 1,
+       3, 1, 4, 3, 3, 3, 3, 2, 1, 1,
+       4, 3, 3, 3, 3, 2, 1, 1, 1, 2,
+       1, 3, 1, 1, 1, 1, 1, 1, 1, 1,
+       1, 1, 0, 4, 1, 1, 1, 1, 1, 1,
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+       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, 5, 3, 5, 6, 5,
+       5, 5, 5, 4, 3, 3, 3, 3, 3, 3,
+       3, 3, 3, 4, 4, 2, 2, 3, 3, 3,
+       3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+       2, 2, 3, 3, 3, 3, 0, 4, 6, 1,
+       1, 1, 2, 4, 2, 3, 1, 1, 1, 1,
+       1, 2, 2, 4, 1, 0, 2, 2, 2, 1,
+       1, 1, 2, 3, 4, 3, 4, 2, 1, 1,
+       1, 1, 1, 1, 1, 1, 1, 0, 4, 0,
+       4, 3, 3, 2, 3, 3, 1, 4, 3, 1,
+       0, 6, 4, 3, 2, 1, 2, 2, 6, 6,
+       0, 0, 7, 0, 0, 7, 5, 4, 0, 0,
+       9, 0, 6, 0, 0, 8, 0, 5, 0, 6,
+       0, 0, 9, 1, 1, 1, 1, 1, 1, 1,
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+       1, 2, 1, 1, 1, 5, 1, 2, 1, 1,
+       1, 3, 1, 3, 1, 4, 6, 3, 5, 2,
+       4, 1, 3, 6, 8, 4, 6, 4, 2, 6,
+       2, 4, 6, 2, 4, 2, 4, 1, 1, 1,
+       3, 1, 4, 1, 2, 1, 3, 1, 1, 0,
+       3, 4, 1, 3, 3, 0, 5, 2, 4, 4,
+       2, 4, 4, 3, 3, 3, 2, 1, 4, 0,
+       5, 0, 5, 5, 1, 1, 6, 1, 1, 1,
+       1, 2, 1, 2, 1, 1, 1, 1, 1, 1,
+       1, 2, 3, 3, 3, 3, 3, 0, 3, 1,
+       2, 3, 3, 0, 3, 0, 2, 0, 2, 1,
+       0, 3, 0, 4, 1, 1, 1, 1, 2, 1,
+       1, 1, 1, 3, 1, 1, 2, 2, 1, 1,
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+       1, 1, 1, 1, 1, 0, 4, 2, 3, 2,
+       6, 8, 4, 6, 4, 6, 2, 4, 6, 2,
+       4, 2, 4, 1, 0, 1, 1, 1, 1, 1,
+       1, 1, 3, 1, 3, 3, 3, 1, 3, 1,
+       3, 1, 1, 2, 1, 1, 1, 2, 2, 1,
+       1, 0, 4, 1, 2, 1, 3, 3, 2, 1,
+       1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+       1, 0, 1, 0, 1, 2, 2, 0, 1, 1,
+       1, 1, 1, 2, 0
+};
+static const yytype_uint16 yydefact[] =
+{
+       2, 0, 0, 1, 0, 325, 326, 327, 0, 318,
+     319, 320, 323, 321, 322, 324, 313, 314, 315, 316,
+     276, 245, 245, 464, 463, 465, 466, 543, 0, 543,
+      21, 0, 468, 467, 469, 458, 531, 460, 459, 461,
+     462, 454, 455, 419, 472, 473, 0, 0, 0, 0,
+       0, 554, 554, 73, 379, 437, 435, 437, 437, 427,
+     433, 0, 0, 0, 3, 541, 7, 35, 36, 44,
+      43, 0, 61, 0, 65, 75, 0, 41, 229, 0,
+     267, 0, 0, 290, 293, 541, 0, 0, 0, 0,
+      48, 285, 258, 259, 418, 420, 260, 261, 262, 263,
+     416, 417, 415, 470, 264, 0, 265, 245, 6, 9,
+     153, 164, 154, 177, 150, 170, 160, 159, 180, 181,
+     175, 158, 157, 152, 178, 182, 183, 162, 151, 165,
+     169, 171, 163, 156, 172, 179, 174, 173, 166, 176,
+     161, 149, 168, 167, 148, 155, 146, 147, 143, 144,
+     145, 102, 104, 103, 138, 139, 135, 117, 118, 119,
+     126, 123, 125, 120, 121, 140, 141, 127, 128, 132,
+     122, 124, 114, 115, 116, 129, 130, 131, 133, 134,
+     136, 137, 142, 107, 109, 111, 15, 105, 106, 108,
+     110, 313, 314, 276, 0, 0, 0, 0, 0, 0,
+       0, 240, 0, 230, 251, 46, 244, 554, 0, 470,
+       0, 265, 554, 525, 47, 45, 543, 60, 0, 554,
+     396, 59, 543, 544, 0, 0, 10, 226, 0, 0,
+     279, 397, 205, 0, 0, 206, 273, 0, 0, 543,
+      63, 269, 0, 547, 547, 231, 0, 0, 547, 523,
+     543, 0, 0, 0, 71, 317, 0, 81, 88, 287,
+     494, 451, 450, 452, 449, 0, 448, 0, 0, 0,
+       0, 0, 0, 0, 456, 457, 40, 220, 221, 550,
+     551, 5, 552, 542, 0, 0, 0, 0, 0, 0,
+       0, 385, 387, 0, 77, 0, 69, 66, 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, 554, 0, 0, 42,
+       0, 0, 0, 0, 541, 0, 542, 0, 339, 338,
+       0, 0, 470, 265, 97, 98, 0, 0, 100, 0,
+       0, 470, 265, 306, 173, 166, 176, 161, 143, 144,
+     145, 102, 103, 521, 308, 520, 0, 0, 0, 401,
+     399, 286, 421, 0, 0, 390, 53, 284, 112, 528,
+     273, 252, 247, 0, 0, 249, 241, 250, 0, 554,
+       0, 0, 0, 249, 242, 543, 0, 278, 246, 543,
+     239, 238, 543, 283, 39, 12, 14, 13, 0, 280,
+       0, 0, 0, 0, 0, 0, 543, 271, 62, 543,
+     274, 549, 548, 232, 549, 234, 275, 524, 0, 87,
+     456, 457, 79, 74, 0, 0, 554, 0, 500, 497,
+     496, 495, 498, 0, 512, 516, 515, 511, 494, 0,
+     382, 499, 501, 503, 554, 509, 554, 514, 554, 0,
+     493, 439, 442, 440, 453, 438, 422, 436, 423, 424,
+     425, 426, 0, 429, 431, 0, 432, 0, 0, 553,
+       8, 16, 17, 18, 19, 20, 37, 38, 554, 0,
+      25, 33, 0, 34, 543, 0, 67, 78, 24, 184,
+     251, 32, 202, 210, 215, 216, 217, 212, 214, 224,
+     225, 218, 219, 195, 196, 222, 223, 543, 211, 213,
+     207, 208, 209, 197, 198, 199, 200, 201, 532, 537,
+     533, 538, 395, 245, 393, 543, 532, 534, 533, 535,
+     394, 245, 0, 554, 330, 0, 329, 0, 0, 0,
+       0, 0, 0, 273, 0, 554, 0, 298, 303, 97,
+      98, 99, 0, 475, 301, 474, 0, 554, 0, 0,
+       0, 494, 540, 539, 310, 532, 533, 245, 245, 554,
+     554, 26, 186, 31, 194, 51, 54, 0, 184, 527,
+       0, 253, 248, 554, 536, 533, 543, 532, 533, 526,
+     277, 545, 235, 282, 11, 0, 227, 0, 23, 0,
+     554, 193, 64, 270, 547, 0, 72, 84, 86, 543,
+     532, 533, 0, 500, 0, 351, 342, 344, 543, 340,
+     554, 0, 0, 380, 0, 486, 519, 0, 489, 513,
+       0, 491, 517, 0, 0, 428, 430, 434, 203, 204,
+     371, 554, 0, 369, 368, 257, 0, 76, 70, 0,
+       0, 0, 0, 0, 392, 57, 0, 398, 0, 0,
+     237, 391, 55, 236, 328, 268, 554, 554, 407, 554,
+     331, 554, 333, 291, 332, 294, 0, 0, 297, 536,
+     272, 543, 532, 533, 0, 0, 477, 0, 0, 97,
+      98, 101, 543, 0, 543, 494, 0, 0, 0, 389,
+      50, 388, 49, 0, 0, 0, 554, 113, 254, 243,
+       0, 398, 0, 0, 543, 22, 233, 80, 82, 505,
+     543, 0, 349, 0, 502, 0, 543, 373, 0, 0,
+     504, 554, 554, 518, 554, 510, 554, 554, 0, 444,
+     445, 446, 441, 447, 500, 554, 0, 554, 507, 554,
+     554, 367, 0, 0, 255, 68, 185, 0, 30, 191,
+     192, 58, 546, 0, 28, 189, 29, 190, 56, 408,
+     409, 554, 410, 0, 554, 336, 0, 0, 334, 0,
+       0, 0, 296, 0, 0, 398, 0, 304, 0, 0,
+     398, 307, 522, 543, 0, 479, 311, 0, 0, 187,
+       0, 0, 281, 341, 352, 0, 347, 343, 377, 374,
+     375, 378, 381, 384, 383, 0, 482, 0, 484, 0,
+     490, 0, 487, 492, 443, 0, 0, 370, 358, 360,
+       0, 363, 0, 365, 386, 256, 228, 27, 188, 0,
+       0, 412, 337, 0, 4, 414, 0, 288, 289, 0,
+       0, 253, 554, 299, 0, 476, 302, 478, 309, 494,
+     402, 400, 0, 0, 350, 0, 345, 0, 554, 554,
+     554, 554, 0, 506, 372, 554, 554, 554, 508, 554,
+     554, 0, 411, 0, 89, 96, 0, 413, 0, 292,
+     295, 404, 405, 403, 0, 0, 0, 52, 348, 0,
+     376, 483, 0, 480, 485, 488, 273, 0, 0, 355,
+       0, 357, 364, 0, 361, 366, 95, 0, 554, 0,
+     554, 554, 0, 305, 0, 346, 554, 536, 272, 554,
+     554, 554, 554, 536, 94, 543, 532, 533, 406, 335,
+     300, 312, 481, 356, 0, 353, 359, 362, 398, 554,
+     354
+};
+static const yytype_int16 yydefgoto[] =
+{
+      -1, 1, 2, 542, 543, 65, 66, 408, 228, 67,
+     330, 68, 69, 586, 716, 70, 71, 239, 72, 73,
+      74, 433, 75, 202, 348, 349, 183, 184, 185, 186,
+     587, 539, 188, 77, 410, 204, 242, 532, 671, 399,
+     400, 217, 218, 206, 386, 207, 493, 78, 328, 419,
+     605, 332, 790, 333, 791, 694, 904, 698, 695, 864,
+     569, 571, 708, 869, 233, 80, 81, 82, 83, 84,
+      85, 86, 87, 88, 89, 675, 545, 683, 787, 788,
+     341, 626, 627, 628, 755, 652, 653, 736, 819, 820,
+     259, 260, 449, 633, 292, 488, 90, 91, 377, 580,
+     579, 552, 903, 677, 781, 850, 854, 92, 93, 94,
+      95, 96, 97, 98, 271, 472, 99, 273, 267, 265,
+     465, 644, 643, 752, 100, 266, 101, 102, 209, 104,
+     210, 211, 564, 697, 706, 707, 451, 452, 453, 454,
+     455, 758, 759, 456, 457, 458, 459, 743, 635, 366,
+     570, 247, 212, 213, 234, 609, 534, 574, 281, 396,
+     397, 667, 423, 546, 336, 108
+};
+static const yytype_int16 yypact[] =
+{
+    -747, 103, 2364, -747, 6711, -747, -747, -747, 6222, -747,
+    -747, -747, -747, -747, -747, -747, 6820, 6820, -747, -747,
+    6820, 3057, 2631, -747, -747, -747, -747, 282, 6082, -24,
+    -747, 64, -747, -747, -747, 5317, 2773, -747, -747, 5445,
+    -747, -747, -747, -747, -747, -747, 8019, 8019, 74, 4131,
+    8128, 7038, 7365, 6487, -747, 5942, -747, -747, -747, 142,
+     154, 84, 8237, 8019, -747, 473, 925, 71, -747, -747,
+     238, 234, -747, 205, 8346, -747, 268, 2472, 31, 46,
+    -747, 8128, 8128, -747, -747, 4792, 8451, 8556, 8661, 5189,
+      14, 70, -747, -747, 290, -747, -747, -747, -747, -747,
+    -747, -747, -747, 26, -747, 366, 355, 210, -747, 925,
+    -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
+    -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
+    -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
+    -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
+    -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
+    -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
+    -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
+    -747, -747, -747, -747, -747, -747, 321, -747, -747, -747,
+    -747, -747, -747, -747, 328, 8019, 433, 4262, 8019, 8019,
+    8019, -747, 403, 2472, 440, -747, -747, 418, 300, 13,
+     457, 24, 437, -747, -747, -747, 4670, -747, 6820, 6820,
+    -747, -747, 4923, -747, 8128, 438, -747, 436, 449, 4393,
+     452, 463, -747, 346, 210, 546, 451, 4131, 474, -24,
+     525, 71, 477, 165, 276, -747, 440, 498, 276, -747,
+     -24, 582, 250, 8766, 501, -747, 374, 384, 394, -747,
+     933, -747, -747, -747, -747, 595, -747, 659, 673, 76,
+     552, 721, 553, 43, 584, 596, -747, -747, -747, -747,
+    -747, -747, -747, 5045, 8128, 8128, 8128, 8128, 6711, 8128,
+    8128, -747, -747, 7474, -747, 4131, 6599, 524, 7474, 8019,
+    8019, 8019, 8019, 8019, 8019, 8019, 8019, 8019, 8019, 8019,
+    8019, 8019, 8019, 8019, 8019, 8019, 8019, 8019, 8019, 8019,
+    8019, 8019, 8019, 8019, 8019, 9033, 6820, 9111, 3431, 71,
+     119, 119, 8128, 8128, 473, 652, 528, 614, -747, -747,
+     424, 654, 56, 92, 335, 344, 8128, 131, -747, 42,
+     444, -747, -747, -747, 33, 35, 53, 217, 227, 235,
+     265, 298, 333, -747, -747, -747, 358, 10047, 10047, -747,
+    -747, -747, -747, 8237, 8237, -747, 587, -747, -747, -747,
+     305, -747, -747, 8019, 8019, 6929, -747, -747, 9189, 6820,
+    9267, 8019, 8019, 7147, -747, -24, 540, -747, -747, -24,
+    -747, -747, 242, -747, -747, -747, -747, -747, 6222, -747,
+    8019, 4393, 555, 9189, 9267, 8019, -24, -747, 556, -24,
+    -747, 7256, -747, -747, 7365, -747, -747, -747, 436, 470,
+    -747, -747, -747, 557, 8766, 9345, 6820, 9423, 585, -747,
+    -747, -747, -747, 843, -747, -747, -747, -747, 835, 49,
+    -747, -747, -747, -747, 564, -747, 565, 658, 572, 662,
+    -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
+    -747, -747, 21, -747, -747, 569, -747, 8019, 8019, -747,
+     925, -747, -747, -747, -747, -747, -747, -747, 38, 8019,
+    -747, 577, 578, -747, -24, 8766, 581, -747, -747, 2225,
+    -747, -747, 546, 2143, 2143, 2143, 2143, 1115, 1115, 2614,
+    2024, 2143, 2143, 1738, 1738, 718, 718, 1856, 1115, 1115,
+     619, 619, 692, 274, 274, 546, 546, 546, 3199, 5687,
+    3285, 5801, -747, 463, -747, -24, 460, -747, 471, -747,
+    -747, 2915, 715, 734, -747, 3577, 713, 3869, 175, 175,
+     652, 7583, 715, 96, 9501, 6820, 9579, -747, 71, -747,
+     470, -747, 473, -747, -747, -747, 9657, 6820, 9735, 3431,
+    8128, 1108, -747, -747, -747, -747, -747, 996, 996, 38,
+      38, -747, 2242, -747, 2472, -747, -747, 6222, 10104, -747,
+    8019, 440, -747, 437, 5573, 2489, -24, 367, 390, -747,
+    -747, -747, -747, -747, -747, 8128, 2472, 605, -747, 463,
+     463, 2472, -7, -747, 276, 8766, 557, 500, 267, -24,
+      48, 50, 8019, -747, 843, 592, -747, 603, -24, -747,
+     600, 4539, 4393, -747, 835, -747, -747, 835, -747, -747,
+     634, -747, -747, 4393, 865, -747, -747, -747, 546, 546,
+    -747, 411, 4539, -747, -747, 607, 7692, -747, 557, 8766,
+    8019, 644, 8237, 8019, -747, 587, 612, 544, 8237, 8237,
+    -747, -747, 587, -747, -747, -747, 7801, 744, -747, 413,
+    -747, 744, -747, -747, -747, -747, 715, 208, -747, 62,
+      85, -24, 117, 120, 8128, 473, -747, 8128, 3431, 500,
+     267, -747, -24, 715, 242, 835, 3431, 473, 6362, -747,
+    -747, -747, -747, 4539, 4393, 8019, 38, -747, -747, -747,
+    8019, 432, 8019, 8019, 242, -747, -747, -747, 465, -747,
+     -24, 788, 620, 854, -747, 885, -24, -747, 756, 631,
+    -747, 629, 633, -747, 639, -747, 642, 639, 657, -747,
+    -747, -747, -747, -747, 681, 600, 683, 665, -747, 666,
+     676, -747, 789, 8019, 680, 557, 2472, 8019, -747, 2472,
+    2472, -747, -747, 8237, -747, 2472, -747, 2472, -747, 577,
+    -747, 710, -747, 4000, 814, -747, 8128, 715, -747, 715,
+    4539, 4539, -747, 7910, 3723, 133, 175, -747, 473, 715,
+    -747, -747, -747, -24, 715, -747, -747, 822, 696, 2472,
+    4393, 8019, -747, -747, 700, 788, 621, -747, -747, 705,
+    -747, -747, -747, -747, -747, 835, -747, 634, -747, 634,
+    -747, 634, -747, -747, -747, 8871, 736, -747, 1125, -747,
+    1125, -747, 634, -747, -747, 711, 2472, -747, 2472, 8976,
+     119, -747, -747, 4539, -747, -747, 119, -747, -747, 715,
+     715, -747, 505, -747, 3431, -747, -747, -747, -747, 1108,
+    -747, -747, 717, 788, 700, 788, 716, 885, 639, 720,
+     639, 639, 807, 487, -747, 725, 726, 639, -747, 728,
+     639, 815, -747, 522, 384, 394, 3431, -747, 3577, -747,
+    -747, -747, -747, -747, 4539, 715, 3431, -747, 700, 788,
+    -747, -747, 634, -747, -747, -747, -747, 9813, 1125, -747,
+     634, -747, -747, 634, -747, -747, 470, 9891, 6820, 9969,
+     734, 413, 715, -747, 715, 700, 639, 727, 730, 639,
+     738, 639, 639, 212, 267, -24, 152, 187, -747, -747,
+    -747, -747, -747, -747, 634, -747, -747, -747, 193, 639,
+    -747
+};
+static const yytype_int16 yypgoto[] =
+{
+    -747, -747, -747, -537, 976, -747, 20, -747, -747, -14,
+      30, -45, -747, -133, -747, 22, 772, -149, 9, -69,
+    -747, -400, -4, 1540, -303, 793, -54, -747, -12, -747,
+    -747, 0, -747, 802, -747, -48, -747, -16, -29, -313,
+      81, 55, -747, -245, -192, -41, -272, -34, -747, -747,
+    -747, -747, -747, -747, -747, -747, -747, -747, -747, -747,
+    -747, -747, -747, -747, -2, -747, -747, -747, -747, -747,
+    -747, -747, -747, -747, -747, -31, -319, -519, -49, -607,
+    -747, -664, -641, 260, -747, -487, -747, -532, -747, 8,
+    -747, -747, -747, -747, -747, -747, -747, -747, 795, -747,
+    -747, -528, -747, -42, -747, -747, -747, -747, -747, -747,
+     799, -747, -747, -747, -747, -747, -747, -747, -747, 513,
+    -208, -747, -747, -747, -5, -747, 29, -747, 1251, 816,
+     747, 1369, -747, -747, 47, -235, -673, -393, -569, -40,
+    -576, -746, 69, 278, -747, -474, -747, -249, 959, -747,
+    -747, -747, -6, -288, 162, -261, -747, -747, -56, -20,
+      17, -563, -217, -44, 850, 752
+};
+static const yytype_int16 yytable[] =
+{
+      79, 264, 79, 189, 246, 297, 220, 224, 187, 227,
+     243, 460, 547, 535, 208, 208, 226, 276, 208, 255,
+     394, 282, 686, 189, 109, 450, 501, 425, 187, 335,
+     685, 427, 703, 721, 616, 364, 241, 190, 201, 201,
+     255, 282, 201, 562, 561, 244, 248, 79, 208, 254,
+     629, 256, 255, 255, 255, 187, 728, 190, 240, 467,
+     208, 745, 821, 473, 533, 740, 541, 329, 329, 817,
+     784, 329, 256, -83, 789, -85, 596, 221, 631, 208,
+     208, -89, 461, 208, 340, 350, 350, -92, 416, 187,
+     814, 375, 713, 714, 888, 658, 369, 205, 214, 367,
+    -471, 215, -62, 3, 475, 599, 577, 578, 289, 290,
+     -94, 392, 331, -471, 650, 334, -317, -96, -464, 756,
+    -463, -95, -89, 619, 223, 462, 463, 533, 795, 541,
+     236, 325, 544, -96, -76, -89, 599, 461, -465, 800,
+     592, 469, -91, 274, 275, -93, 494, 379, 592, 476,
+     381, 382, 651, 610, 368, 563, 632, -83, -90, -85,
+     742, 799, 376, 746, 107, -91, 107, -81, 645, 804,
+    -317, -317, 888, -464, 874, -463, 610, 760, 107, 107,
+     462, 463, 107, 559, 432, 326, 327, 560, 279, -83,
+     280, -85, -83, -465, -85, 79, -83, -81, -85, 460,
+     -93, 229, 682, -84, 821, -532, -90, 370, 402, 817,
+     404, 107, 107, 630, 208, 220, 208, 208, 375, 255,
+     208, 544, 208, 836, 107, -92, -86, 79, -533, 810,
+     428, 629, 732, -88, 908, 79, 369, -87, 201, 403,
+     201, 201, 691, 107, 107, 491, 240, 107, 490, 745,
+     500, 256, 492, 498, 702, 901, 418, 492, -83, 765,
+     740, -85, 255, 701, 646, 279, 291, 280, 935, 740,
+     329, 329, 329, 329, -82, 486, 487, 863, 550, 289,
+     290, 79, 208, 208, 208, 208, 79, 208, 208, 270,
+     282, 208, 496, 79, 256, 610, 208, 395, -91, 398,
+     -91, 272, -466, 480, 240, 565, 421, 610, 485, 430,
+     431, 540, -468, 422, 481, 482, 483, 484, 329, 329,
+    -467, 279, 460, 280, 208, 531, 79, 905, 581, 583,
+     208, 208, 558, -93, 902, -93, 589, 591, 629, -90,
+     629, -90, 299, 293, 208, 246, 294, 370, 201, 793,
+    -469, 879, -272, 219, 279, -532, 280, -466, -92, 107,
+     -92, -529, 548, 549, 886, 432, 889, -468, 794, 934,
+    -530, 208, 208, 591, 540, -467, 246, 298, 107, 593,
+     107, 107, 958, -458, 107, 388, 107, 208, 531, 56,
+     223, 107, 415, 322, 323, 324, 604, 726, 540, 107,
+     255, 719, 761, 189, 780, -469, -272, -272, 187, 79,
+    -533, 201, 600, 531, -95, 614, 602, 424, -461, 603,
+    -458, 540, 629, 876, 422, 222, 432, 786, 783, -461,
+     223, 413, 256, 612, 208, 531, 613, 190, -458, 389,
+     390, 655, 374, 572, 940, 107, 107, 107, 107, 107,
+     107, 107, 107, 373, 722, 107, 460, 107, 201, 435,
+     107, 255, 378, 754, -96, 439, 440, 441, 442, -470,
+     803, 222, -529, -461, -458, -458, -91, 723, -529, -265,
+     629, -530, 629, -461, -461, 389, 414, -530, 107, 380,
+     107, -398, 405, 256, 107, 107, -88, 661, 573, -93,
+     443, 406, 407, 500, 684, 684, 444, 445, 107, 554,
+     687, 657, 383, 436, 437, 666, 629, 664, 696, 811,
+     783, 688, 551, -470, -470, 670, -536, 446, 384, 566,
+     447, 896, 771, -265, -265, 107, 107, 898, 415, 778,
+     540, -90, 718, 79, 391, 79, 727, 668, 709, 711,
+    -398, 107, 540, 208, 531, -273, 704, 735, 669, 385,
+     -95, 670, 670, 555, 556, 208, 531, 79, 208, -91,
+     268, 269, 917, 107, 729, 717, 666, 201, 393, 409,
+     -93, 255, 189, 567, 568, -536, 411, 187, 665, 201,
+     432, 724, -87, 664, 670, 216, 672, 744, 107, 666,
+     747, -83, -398, 208, -398, -398, 219, 927, 764, -273,
+    -273, 757, -85, 256, 299, 945, 190, 768, 417, 279,
+     460, 280, 420, 774, 776, 255, 567, 568, 779, 79,
+      79, 773, 710, 712, -61, 492, 426, -536, 429, -536,
+    -536, 79, 434, -532, 623, 734, 439, 440, 441, 442,
+      79, 797, 477, -90, 806, 792, 461, 256, 470, 474,
+     208, 928, 929, 805, 478, 497, 208, 208, 610, 551,
+     553, 666, 801, 623, 479, 439, 440, 441, 442, 557,
+     329, 585, 666, 329, 601, -82, 623, 299, 439, 440,
+     441, 442, 208, 608, 622, 208, 79, -76, 615, 462,
+     463, 464, 312, 313, 79, 634, 637, 107, 187, 107,
+     639, 79, 79, 640, 642, 845, 647, 107, -251, 656,
+     461, 802, 659, 443, 796, 674, 680, 798, 847, 107,
+     445, 107, 107, 731, 461, 319, 320, 321, 322, 323,
+     324, 812, 676, 725, 733, 861, 735, 813, -252, 105,
+     446, 105, 684, 822, 865, 767, 857, 772, 858, 783,
+     299, 815, 875, 462, 463, 466, 823, 107, 866, 824,
+     825, 208, 329, 868, 827, 312, 313, 462, 463, 468,
+     829, 79, 461, 831, 208, 878, 299, 880, 79, 79,
+     835, 881, 79, 107, 107, 834, 105, 837, 849, 844,
+     887, 255, 890, 245, 249, 107, 838, 840, 79, 320,
+     321, 322, 323, 324, 107, 255, 856, 842, 203, 203,
+     867, -253, 203, 853, 107, 462, 463, 471, 899, 900,
+     107, 107, 870, 883, 871, 320, 321, 322, 323, 324,
+     623, 873, 439, 440, 441, 442, 877, 893, 232, 235,
+     884, 79, -254, 203, 203, 907, 107, 909, 338, 107,
+     107, 912, 79, 916, 277, 278, 918, 920, 107, 923,
+    -532, 926, 936, -533, 933, 107, 107, 624, 939, 954,
+     941, 353, 949, 942, 730, 910, 371, 438, 948, 439,
+     440, 441, 442, 372, 79, 623, 79, 439, 440, 441,
+     442, 950, 79, 951, 79, 365, 623, 885, 439, 440,
+     441, 442, 741, 540, 959, 283, 906, 531, 0, 749,
+     750, 0, 751, 0, 443, 666, 208, 531, 44, 45,
+     444, 445, 624, 0, 0, 107, 0, 818, 625, 439,
+     440, 441, 442, 624, 105, 107, 0, 0, 107, 816,
+     201, 446, 107, 107, 447, 0, 107, 0, 0, 387,
+       0, 0, 0, 0, 387, 284, 285, 286, 287, 288,
+       0, 401, 107, 0, 0, 0, 105, 0, 64, 0,
+       0, 0, 0, 0, 105, 438, 0, 439, 440, 441,
+     442, 0, 0, 0, 0, 0, -554, 203, 0, 0,
+     203, 203, 277, 0, -554, -554, -554, 0, 0, -554,
+    -554, -554, 0, -554, 0, 107, 0, 0, 203, 0,
+     203, 203, 443, -554, 0, 238, 107, 0, 444, 445,
+     105, 0, 0, -554, -554, 105, -554, -554, -554, -554,
+    -554, 0, 105, 0, 0, 0, 0, 0, 0, 446,
+       0, 0, 447, 0, 0, 0, 0, 0, 107, 0,
+     107, 0, 0, 0, 0, 0, 107, 0, 107, 0,
+       0, 0, 0, 0, 0, 105, 448, 0, 401, 0,
+       0, -554, 0, 0, 0, 0, 0, 0, 0, 0,
+     107, 0, 0, 0, 0, 203, 0, 0, 0, 0,
+     499, 502, 503, 504, 505, 506, 507, 508, 509, 510,
+     511, 512, 513, 514, 515, 516, 517, 518, 519, 520,
+     521, 522, 523, 524, 525, 526, 527, 0, 203, 0,
+       0, 0, 0, 0, -554, 0, -554, 0, 0, 219,
+    -554, 401, -554, 0, -554, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 105, 0,
+     438, 0, 439, 440, 441, 442, 0, 0, 0, 0,
+       0, 0, 0, 238, 0, 582, 584, 754, 0, 439,
+     440, 441, 442, 299, 0, 588, 203, 203, 401, 0,
+       0, 203, 0, 582, 584, 203, 0, 443, 312, 313,
+       0, 0, 0, 444, 445, 412, 636, 0, 636, 0,
+     636, 0, 606, 238, 443, 0, 0, 611, 0, 0,
+     444, 445, 0, 203, 446, 0, 203, 447, 0, 317,
+     318, 319, 320, 321, 322, 323, 324, 0, 203, 0,
+     654, 446, 0, 0, 447, 0, 0, 0, 0, 0,
+       0, 705, 0, 103, 0, 103, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 238, 0, 0, 0, 0, 0, 0, 0, 648,
+     649, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 203, 105, 673, 105, 678, 0, 0, 0, 0,
+     103, 0, 0, 0, 257, 0, 0, 401, 0, 0,
+       0, 0, 0, 0, 0, 0, 105, 0, 0, 401,
+       0, 0, 0, 0, 0, 257, 0, 0, 0, 673,
+     673, 654, 654, 0, 0, 0, 0, 342, 351, 351,
+     351, 0, 0, 0, 0, 387, 0, 0, 0, 0,
+       0, 0, 0, 203, 0, 0, 0, 203, 0, 0,
+       0, 0, 673, 0, 0, 0, 0, 0, 0, 203,
+       0, 106, 0, 106, 0, 0, 0, 0, 105, 105,
+       0, 0, 737, 0, 0, 0, 0, 607, 0, 0,
+     105, 0, 203, 0, 0, 0, 0, 0, 0, 105,
+       0, 0, 0, 737, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 638, 0, 641, 106, 0,
+       0, 0, 258, 0, 203, 0, 0, 0, 782, 785,
+       0, 785, 0, 785, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 258, 0, 105, 0, 0, 103, 0,
+       0, 0, 0, 105, 0, 343, 352, 352, 203, 0,
+     105, 105, 766, 0, 769, 770, 0, 0, 654, 0,
+     775, 777, 0, 0, 0, 0, 0, 0, 203, 0,
+     103, 0, 0, 0, 0, 0, 0, 0, 103, 0,
+       0, 0, 0, 636, 636, 0, 636, 0, 636, 636,
+       0, 0, 0, 0, 257, 0, 0, 737, 0, 636,
+       0, 636, 636, 0, 0, 0, 0, 809, 0, 0,
+       0, 679, 769, 681, 775, 777, 0, 0, 0, 0,
+     105, 0, 0, 851, 103, 0, 855, 105, 105, 103,
+       0, 105, 76, 0, 76, 0, 103, 257, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 105, 0, 0,
+       0, 0, 0, 0, 0, 203, 106, 0, 0, 846,
+       0, 0, 0, 0, 0, 848, 0, 0, 0, 103,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 76,
+       0, 0, 0, 0, 0, 203, 0, 0, 106, 0,
+     105, 0, 0, 0, 0, 0, 106, 738, 739, 0,
+       0, 105, 0, 848, 785, 0, 0, 0, 0, 748,
+       0, 0, 258, 0, 0, 0, 339, 0, 762, 0,
+     636, 636, 636, 636, 0, 0, 0, 636, 636, 636,
+       0, 636, 636, 105, 0, 105, 0, 0, 0, 0,
+       0, 105, 106, 105, 0, 0, 0, 106, 0, 0,
+       0, 0, 103, 0, 106, 258, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     401, 0, 678, 785, 0, 257, 0, 0, 636, 807,
+     808, 636, 636, 636, 636, 0, 0, 106, 0, 0,
+     826, 828, 0, 830, 0, 832, 833, 0, 0, 0,
+       0, 636, 0, 0, 0, 0, 839, 0, 841, 843,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     203, 0, 0, 0, 0, 0, 0, 76, 0, 0,
+       0, 0, 0, 0, 0, 0, 257, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 852,
+       0, 0, 0, 0, 0, 0, 859, 860, 0, 76,
+     862, 0, 0, 0, 0, 0, 0, 76, 0, 0,
+     106, 0, 0, 0, 0, 0, 872, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 103, 0, 103, 0,
+       0, 0, 0, 258, 0, 0, 299, 300, 301, 302,
+     303, 304, 305, 306, 307, 308, 309, -555, -555, 0,
+     103, 312, 313, 76, 0, 0, 0, 0, 76, 897,
+       0, 0, 0, 0, 0, 76, 0, 911, 913, 914,
+     915, 0, 0, 0, 919, 921, 922, 0, 924, 925,
+     315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
+       0, 0, 0, 0, 258, 0, 257, 0, 76, 0,
+       0, 0, 930, 0, 931, 0, 0, 0, 0, 0,
+     932, 0, 103, 103, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 103, 952, 0, 0, 953, 955,
+     956, 957, 0, 103, 0, 0, 0, 0, 0, 0,
+     257, 0, 0, 0, 106, 0, 106, 0, 960, 0,
+       0, 0, 0, 0, 299, 300, 301, 302, 303, 304,
+     305, 306, 307, 308, 309, 310, 311, 0, 106, 312,
+     313, 0, 0, 0, 0, 0, 0, 0, 0, 103,
+       0, 76, 0, 0, 0, 0, 0, 103, 0, 0,
+       0, 0, 0, 0, 103, 103, 314, 0, 315, 316,
+     317, 318, 319, 320, 321, 322, 323, 324, 0, 0,
+       0, 0, 0, 0, 258, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     106, 106, 0, 0, 223, 0, 0, 0, 0, 0,
+       0, 0, 106, 753, 0, 0, 0, 0, 0, 0,
+       0, 106, 0, 0, 0, 0, 0, 0, 258, 0,
+       0, 0, 0, 0, 103, 0, 0, 0, 0, 0,
+       0, 103, 103, 0, 0, 103, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 103, 0, 0, 0, 0, 0, 106, 0, 0,
+       0, 0, 0, 0, 0, 106, 0, 0, 0, 0,
+       0, 0, 106, 106, 0, 76, 351, 76, 0, 0,
+       0, 0, 299, 300, 301, 302, 303, 304, 305, 306,
+     894, 308, 309, 0, 103, 0, 0, 312, 313, 76,
+       0, 0, 0, 0, 0, 103, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 315, 316, 317, 318,
+     319, 320, 321, 322, 323, 324, 0, 103, 0, 103,
+       0, 0, 106, 0, 0, 103, 0, 103, 0, 106,
+     106, 0, 0, 106, 0, 0, 0, 0, 0, 0,
+       0, 76, 76, 0, 0, 0, 0, 0, 0, 106,
+       0, 0, 0, 76, 0, 0, 0, 0, 0, 0,
+       0, 0, 76, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 352, 0, 0, 0, 0, 0,
+       0, 299, -555, -555, -555, -555, 304, 305, 895, 0,
+    -555, -555, 106, 0, 0, 0, 312, 313, 0, 0,
+       0, 0, 0, 106, 0, 0, 0, 0, 76, 0,
+       0, 0, 0, 0, 0, 0, 76, 0, 0, 0,
+       0, 0, 0, 76, 76, 315, 316, 317, 318, 319,
+     320, 321, 322, 323, 324, 106, 0, 106, 0, 660,
+       0, 0, 0, 106, 0, 106, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 715, 0, 0, 0,
+       0, 0, 0, 299, 300, 301, 302, 303, 304, 305,
+     306, 307, 308, 309, 310, 311, 0, 0, 312, 313,
+     299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
+     309, 310, 311, 76, 0, 312, 313, 0, 0, 0,
+      76, 76, 0, 0, 76, 314, 0, 315, 316, 317,
+     318, 319, 320, 321, 322, 323, 324, 0, 0, 0,
+      76, 0, 314, 0, 315, 316, 317, 318, 319, 320,
+     321, 322, 323, 324, -554, 4, -230, 5, 6, 7,
+       8, 9, 0, 0, 0, 10, 11, 0, 0, 0,
+      12, 0, 13, 14, 15, 16, 17, 18, 19, 892,
+       0, 0, 0, 76, 20, 21, 22, 23, 24, 25,
+      26, 0, 0, 27, 76, 0, 0, 0, 0, 28,
+      29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
+      39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
+      46, 47, 0, 0, 0, 0, 76, 0, 76, 0,
+       0, 0, 0, 0, 76, 0, 76, 0, 0, 0,
+      48, 0, 0, 49, 50, 0, 51, 52, 0, 53,
+       0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 61, 62, 63, -272,
+       0, 0, 0, 0, 0, 0, 0, -272, -272, -272,
+       0, 0, -272, -272, -272, 0, -272, 0, 0, 0,
+    -554, 0, -554, 0, 0, 0, -272, -272, -272, 0,
+       0, 0, 0, 0, 0, 0, -272, -272, 0, -272,
+    -272, -272, -272, -272, 0, 0, 0, 0, 0, 0,
+     299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
+     309, 310, 311, 0, 0, 312, 313, -272, -272, -272,
+    -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
+       0, 0, -272, -272, -272, 0, 663, -272, 0, 0,
+       0, 0, 314, -272, 315, 316, 317, 318, 319, 320,
+     321, 322, 323, 324, 0, 0, -272, 0, -94, -272,
+    -272, -272, -272, -272, -272, -272, -272, -272, -272, -272,
+    -272, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, -272, -272, -272,
+    -272, -397, 0, -272, -272, -272, 0, -272, 0, -397,
+    -397, -397, 0, 0, -397, -397, -397, 0, -397, 0,
+       0, 0, 0, 0, 0, 0, 0, -397, -397, -397,
+       0, 0, 0, 0, 0, 0, 0, 0, -397, -397,
+       0, -397, -397, -397, -397, -397, 0, 0, 0, 0,
+       0, 0, 299, 300, 301, 302, 303, 304, 305, 0,
+       0, 308, 309, 0, 0, 0, 0, 312, 313, -397,
+    -397, -397, -397, -397, -397, -397, -397, -397, -397, -397,
+    -397, -397, 0, 0, -397, -397, -397, 0, 0, -397,
+       0, 0, 0, 0, 0, -397, 315, 316, 317, 318,
+     319, 320, 321, 322, 323, 324, 0, 0, 0, 0,
+       0, -397, 0, -397, -397, -397, -397, -397, -397, -397,
+    -397, -397, -397, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, -397, -397,
+    -397, -397, -397, -266, 219, -397, -397, -397, 0, -397,
+       0, -266, -266, -266, 0, 0, -266, -266, -266, 0,
+    -266, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    -266, -266, -266, 0, 0, 0, 0, 0, 0, 0,
+    -266, -266, 0, -266, -266, -266, -266, -266, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, -266, -266, -266, -266, -266, -266, -266, -266, -266,
+    -266, -266, -266, -266, 0, 0, -266, -266, -266, 0,
+       0, -266, 0, 0, 0, 0, 0, -266, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    -266, 0, 0, -266, -266, -266, -266, -266, -266, -266,
+    -266, -266, -266, -266, -266, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, -266, -266, -266, -266, -554, 0, -266, -266, -266,
+       0, -266, 0, -554, -554, -554, 0, 0, -554, -554,
+    -554, 0, -554, 0, 0, 0, 0, 0, 0, 0,
+       0, -554, -554, -554, 0, 0, 0, 0, 0, 0,
+       0, 0, -554, -554, 0, -554, -554, -554, -554, -554,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, -554, -554, -554, -554, -554, -554, -554,
+    -554, -554, -554, -554, -554, -554, 0, 0, -554, -554,
+    -554, 0, 0, -554, 0, 0, 0, 0, 0, -554,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, -554, 0, -554, -554, -554,
+    -554, -554, -554, -554, -554, -554, -554, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, -554, -554, -554, -554, -554, -279, 219, -554,
+    -554, -554, 0, -554, 0, -279, -279, -279, 0, 0,
+    -279, -279, -279, 0, -279, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, -279, -279, 0, 0, 0, 0,
+       0, 0, 0, 0, -279, -279, 0, -279, -279, -279,
+    -279, -279, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, -279, -279, -279, -279, -279,
+    -279, -279, -279, -279, -279, -279, -279, -279, 0, 0,
+    -279, -279, -279, 0, 0, -279, 0, 0, 0, 0,
+       0, -279, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, -279, 0, -279,
+    -279, -279, -279, -279, -279, -279, -279, -279, -279, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, -279, -279, -279, -279, -536,
+     216, -279, -279, -279, 0, -279, 0, -536, -536, -536,
+       0, 0, 0, -536, -536, 0, -536, 0, 0, 0,
+       0, 0, 0, 0, 0, -536, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, -536, -536, 0, -536,
+    -536, -536, -536, -536, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, -536, -536, -536,
+    -536, -536, -536, -536, -536, -536, -536, -536, -536, -536,
+       0, 0, -536, -536, -536, -272, 662, 0, 0, 0,
+       0, 0, 0, -272, -272, -272, 0, 0, 0, -272,
+    -272, 0, -272, 0, 0, 0, 0, 0, -92, -536,
+       0, -536, -536, -536, -536, -536, -536, -536, -536, -536,
+    -536, 0, -272, -272, 0, -272, -272, -272, -272, -272,
+       0, 0, 0, 0, 0, 0, -536, -536, -536, -536,
+     -84, 0, 0, -536, 0, -536, 0, -536, 0, 0,
+       0, 0, 0, -272, -272, -272, -272, -272, -272, -272,
+    -272, -272, -272, -272, -272, -272, 0, 0, -272, -272,
+    -272, 0, 663, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, -94, -272, 0, -272, -272, -272,
+    -272, -272, -272, -272, -272, -272, -272, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, -272, -272, -272, -86, 0, 0, -272,
+       0, -272, 4, -272, 5, 6, 7, 8, 9, -554,
+    -554, -554, 10, 11, 0, 0, -554, 12, 0, 13,
+      14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
+       0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
+      27, 0, 0, 0, 0, 0, 28, 29, 30, 31,
+      32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
+      41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
+      49, 50, 0, 51, 52, 0, 53, 0, 54, 55,
+      56, 57, 58, 59, 60, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 61, 62, 63, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, -554, 4, -554,
+       5, 6, 7, 8, 9, 0, 0, -554, 10, 11,
+       0, -554, -554, 12, 0, 13, 14, 15, 16, 17,
+      18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
+      23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
+       0, 0, 28, 29, 30, 31, 32, 33, 34, 35,
+      36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
+      44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 48, 0, 0, 49, 50, 0, 51,
+      52, 0, 53, 0, 54, 55, 56, 57, 58, 59,
+      60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 61,
+      62, 63, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, -554, 4, -554, 5, 6, 7, 8,
+       9, 0, 0, -554, 10, 11, 0, 0, -554, 12,
+    -554, 13, 14, 15, 16, 17, 18, 19, 0, 0,
+       0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
+       0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
+      30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+      40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
+      47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
+       0, 0, 49, 50, 0, 51, 52, 0, 53, 0,
+      54, 55, 56, 57, 58, 59, 60, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 61, 62, 63, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, -554,
+       4, -554, 5, 6, 7, 8, 9, 0, 0, -554,
+      10, 11, 0, 0, -554, 12, 0, 13, 14, 15,
+      16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
+      21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
+       0, 0, 0, 0, 28, 29, 30, 31, 32, 33,
+      34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
+       0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
+       0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
+      58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 61, 62, 63, 0, 0, 0, 0, 0, 0,
+       0, 4, 0, 5, 6, 7, 8, 9, 0, -554,
+    -554, 10, 11, 0, 0, -554, 12, -554, 13, 14,
+      15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
+      20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
+       0, 0, 0, 0, 0, 28, 29, 30, 31, 32,
+      33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
+      42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 48, 0, 0, 49,
+      50, 0, 51, 52, 0, 53, 0, 54, 55, 56,
+      57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 61, 62, 63, 0, 0, 0, 0, 0,
+       0, 0, 4, 0, 5, 6, 7, 8, 9, 0,
+       0, 0, 10, 11, 0, 0, -554, 12, -554, 13,
+      14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
+       0, 20, 21, 22, 23, 24, 25, 26, 0, 0,
+      27, 0, 0, 0, 0, 0, 28, 29, 30, 31,
+      32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
+      41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
+     237, 50, 0, 51, 52, 0, 53, 0, 54, 55,
+      56, 57, 58, 59, 60, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 61, 62, 63, 0, 0, 0, 0,
+       0, 0, 0, 4, 0, 5, 6, 7, 8, 9,
+       0, 0, 0, 10, 11, -554, 0, -554, 12, -554,
+      13, 14, 15, 16, 17, 18, 19, 0, 0, 0,
+       0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
+       0, 27, 0, 0, 0, 0, 0, 28, 29, 30,
+      31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+       0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 48, 0,
+       0, 49, 50, 0, 51, 52, 0, 53, 0, 54,
+      55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
+       0, 0, 0, 0, 4, 0, 5, 6, 7, 8,
+       9, 0, 0, 0, 10, 11, -554, 0, -554, 12,
+    -554, 13, 14, 15, 16, 17, 18, 19, 0, 0,
+       0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
+       0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
+      30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+      40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
+      47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 48,
+       0, 0, 49, 50, 0, 51, 52, 0, 53, 0,
+      54, 55, 56, 57, 58, 59, 60, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 61, 62, 63, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, -554, 0, 0, 0, 0, 0, 0, 0, -554,
+       4, -554, 5, 6, 7, 8, 9, 0, 0, -554,
+      10, 11, 0, 0, 0, 12, 0, 13, 14, 15,
+      16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
+      21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
+       0, 0, 0, 0, 28, 29, 30, 31, 32, 33,
+      34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
+       0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 48, 0, 0, 49, 50,
+       0, 51, 52, 0, 53, 0, 54, 55, 56, 57,
+      58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 61, 62, 63, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
+       0, 10, 11, 0, 0, -554, 12, -554, 13, 14,
+      15, 191, 192, 18, 19, 0, 0, 0, 0, 0,
+     193, 21, 22, 23, 24, 25, 26, 0, 0, 194,
+       0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
+      33, 34, 35, 36, 37, 38, 39, 40, 195, 41,
+      42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 196, 0, 0, 197,
+      50, 0, 51, 52, 0, 198, 199, 54, 55, 56,
+      57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 61, 200, 63, 5, 6, 7, 0, 9,
+       0, 0, 0, 10, 11, 0, 0, 0, 12, 0,
+      13, 14, 15, 16, 17, 18, 19, 0, 223, 0,
+       0, 0, 20, 21, 22, 23, 24, 25, 26, 0,
+       0, 27, 0, 0, 0, 0, 0, 0, 29, 0,
+       0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+       0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 196, 0,
+       0, 197, 50, 0, 51, 52, 0, 0, 0, 54,
+      55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 61, 62, 63, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
+       9, 0, 0, 0, 10, 11, 0, 0, 279, 12,
+     280, 13, 14, 15, 16, 17, 18, 19, 0, 0,
+       0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
+       0, 0, 27, 0, 0, 0, 0, 0, 0, 29,
+       0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
+      40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
+      47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 196,
+       0, 0, 197, 50, 0, 51, 52, 0, 0, 0,
+      54, 55, 56, 57, 58, 59, 60, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 61, 62, 63, 5, 6,
+       7, 8, 9, 0, 0, 0, 10, 11, 0, 0,
+       0, 12, 0, 13, 14, 15, 16, 17, 18, 19,
+       0, 223, 0, 0, 0, 20, 21, 22, 23, 24,
+      25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
+      28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+      38, 39, 40, 0, 41, 42, 0, 43, 44, 45,
+       0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 48, 0, 0, 49, 50, 0, 51, 52, 0,
+      53, 0, 54, 55, 56, 57, 58, 59, 60, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 61, 62, 63,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 479, 110, 111, 112, 113, 114, 115, 116, 117,
+     118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+     128, 129, 130, 131, 132, 133, 0, 0, 0, 134,
+     135, 136, 354, 355, 356, 357, 141, 142, 143, 0,
+       0, 0, 0, 0, 144, 145, 146, 147, 358, 359,
+     360, 361, 152, 37, 38, 362, 40, 0, 0, 0,
+       0, 0, 0, 0, 0, 154, 155, 156, 157, 158,
+     159, 160, 161, 162, 0, 0, 163, 164, 0, 0,
+     165, 166, 167, 168, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 169, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
+     179, 0, 180, 181, 0, 0, 0, 0, 0, 0,
+    -529, -529, -529, 0, -529, 0, 0, 0, -529, -529,
+       0, 182, 363, -529, 0, -529, -529, -529, -529, -529,
+    -529, -529, 0, -529, 0, 0, 0, -529, -529, -529,
+    -529, -529, -529, -529, 0, 0, -529, 0, 0, 0,
+       0, 0, 0, -529, 0, 0, -529, -529, -529, -529,
+    -529, -529, -529, -529, -529, -529, -529, -529, 0, -529,
+    -529, -529, 0, -529, -529, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, -529, 0, 0, -529, -529, 0, -529,
+    -529, 0, -529, -529, -529, -529, -529, -529, -529, -529,
+    -529, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, -529,
+    -529, -529, 0, 0, 0, 0, 0, 0, -530, -530,
+    -530, 0, -530, 0, -529, 0, -530, -530, 0, 0,
+    -529, -530, 0, -530, -530, -530, -530, -530, -530, -530,
+       0, -530, 0, 0, 0, -530, -530, -530, -530, -530,
+    -530, -530, 0, 0, -530, 0, 0, 0, 0, 0,
+       0, -530, 0, 0, -530, -530, -530, -530, -530, -530,
+    -530, -530, -530, -530, -530, -530, 0, -530, -530, -530,
+       0, -530, -530, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, -530, 0, 0, -530, -530, 0, -530, -530, 0,
+    -530, -530, -530, -530, -530, -530, -530, -530, -530, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, -530, -530, -530,
+       0, 0, 0, 0, 0, 0, -532, -532, -532, 0,
+    -532, 0, -530, 0, -532, -532, 0, 0, -530, -532,
+       0, -532, -532, -532, -532, -532, -532, -532, 0, 0,
+       0, 0, 0, -532, -532, -532, -532, -532, -532, -532,
+       0, 0, -532, 0, 0, 0, 0, 0, 0, -532,
+       0, 0, -532, -532, -532, -532, -532, -532, -532, -532,
+    -532, -532, -532, -532, 0, -532, -532, -532, 0, -532,
+    -532, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, -532,
+     720, 0, -532, -532, 0, -532, -532, 0, -532, -532,
+    -532, -532, -532, -532, -532, -532, -532, 0, 0, 0,
+       0, 0, -92, 0, 0, 0, 0, 0, 0, 0,
+    -534, -534, -534, 0, -534, -532, -532, -532, -534, -534,
+       0, 0, 0, -534, 0, -534, -534, -534, -534, -534,
+    -534, -534, 0, 0, 0, 0, -532, -534, -534, -534,
+    -534, -534, -534, -534, 0, 0, -534, 0, 0, 0,
+       0, 0, 0, -534, 0, 0, -534, -534, -534, -534,
+    -534, -534, -534, -534, -534, -534, -534, -534, 0, -534,
+    -534, -534, 0, -534, -534, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, -534, 0, 0, -534, -534, 0, -534,
+    -534, 0, -534, -534, -534, -534, -534, -534, -534, -534,
+    -534, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, -535, -535, -535, 0, -535, -534,
+    -534, -534, -535, -535, 0, 0, 0, -535, 0, -535,
+    -535, -535, -535, -535, -535, -535, 0, 0, 0, 0,
+    -534, -535, -535, -535, -535, -535, -535, -535, 0, 0,
+    -535, 0, 0, 0, 0, 0, 0, -535, 0, 0,
+    -535, -535, -535, -535, -535, -535, -535, -535, -535, -535,
+    -535, -535, 0, -535, -535, -535, 0, -535, -535, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, -535, 0, 0,
+    -535, -535, 0, -535, -535, 0, -535, -535, -535, -535,
+    -535, -535, -535, -535, -535, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, -535, -535, -535, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, -535, 110, 111, 112, 113, 114,
+     115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+     125, 126, 127, 128, 129, 130, 131, 132, 133, 0,
+       0, 0, 134, 135, 136, 137, 138, 139, 140, 141,
+     142, 143, 0, 0, 0, 0, 0, 144, 145, 146,
+     147, 148, 149, 150, 151, 152, 261, 262, 153, 263,
+       0, 0, 0, 0, 0, 0, 0, 0, 154, 155,
+     156, 157, 158, 159, 160, 161, 162, 0, 0, 163,
+     164, 0, 0, 165, 166, 167, 168, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 169, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 170, 171, 172, 173, 174, 175,
+     176, 177, 178, 179, 0, 180, 181, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 182, 110, 111, 112, 113, 114,
+     115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+     125, 126, 127, 128, 129, 130, 131, 132, 133, 0,
+       0, 0, 134, 135, 136, 137, 138, 139, 140, 141,
+     142, 143, 0, 0, 0, 0, 0, 144, 145, 146,
+     147, 148, 149, 150, 151, 152, 225, 0, 153, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 154, 155,
+     156, 157, 158, 159, 160, 161, 162, 0, 0, 163,
+     164, 0, 0, 165, 166, 167, 168, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 169, 0, 0,
+      55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 170, 171, 172, 173, 174, 175,
+     176, 177, 178, 179, 0, 180, 181, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 182, 110, 111, 112, 113, 114,
+     115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+     125, 126, 127, 128, 129, 130, 131, 132, 133, 0,
+       0, 0, 134, 135, 136, 137, 138, 139, 140, 141,
+     142, 143, 0, 0, 0, 0, 0, 144, 145, 146,
+     147, 148, 149, 150, 151, 152, 0, 0, 153, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 154, 155,
+     156, 157, 158, 159, 160, 161, 162, 0, 0, 163,
+     164, 0, 0, 165, 166, 167, 168, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 169, 0, 0,
+      55, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 170, 171, 172, 173, 174, 175,
+     176, 177, 178, 179, 0, 180, 181, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 182, 110, 111, 112, 113, 114,
+     115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+     125, 126, 127, 128, 129, 130, 131, 132, 133, 0,
+       0, 0, 134, 135, 136, 137, 138, 139, 140, 141,
+     142, 143, 0, 0, 0, 0, 0, 144, 145, 146,
+     147, 148, 149, 150, 151, 152, 0, 0, 153, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 154, 155,
+     156, 157, 158, 159, 160, 161, 162, 0, 0, 163,
+     164, 0, 0, 165, 166, 167, 168, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 169, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 170, 171, 172, 173, 174, 175,
+     176, 177, 178, 179, 0, 180, 181, 0, 0, 0,
+       5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
+       0, 0, 0, 12, 182, 13, 14, 15, 191, 192,
+      18, 19, 0, 0, 0, 0, 0, 193, 230, 231,
+      23, 24, 25, 26, 0, 0, 194, 0, 0, 0,
+       0, 0, 0, 250, 0, 0, 32, 33, 34, 35,
+      36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
+      44, 45, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 251, 0, 0, 197, 50, 0, 51,
+      52, 0, 0, 0, 54, 55, 56, 57, 58, 59,
+      60, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 5, 6, 7, 0, 9, 0, 0, 252,
+      10, 11, 0, 0, 0, 12, 0, 13, 14, 15,
+     191, 192, 18, 19, 0, 0, 0, 0, 253, 193,
+     230, 231, 23, 24, 25, 26, 0, 0, 194, 0,
+       0, 0, 0, 0, 0, 250, 0, 0, 32, 33,
+      34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
+       0, 43, 44, 45, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 251, 0, 0, 197, 50,
+       0, 51, 52, 0, 0, 0, 54, 55, 56, 57,
+      58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 5, 6, 7, 8, 9, 0,
+       0, 252, 10, 11, 0, 0, 0, 12, 0, 13,
+      14, 15, 16, 17, 18, 19, 0, 0, 0, 0,
+     495, 20, 21, 22, 23, 24, 25, 26, 0, 0,
+      27, 0, 0, 0, 0, 0, 28, 29, 30, 31,
+      32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
+      41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 48, 0, 0,
+      49, 50, 0, 51, 52, 0, 53, 0, 54, 55,
+      56, 57, 58, 59, 60, 0, 0, 0, 0, 0,
+       0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
+       0, 10, 11, 61, 62, 63, 12, 0, 13, 14,
+      15, 191, 192, 18, 19, 0, 0, 0, 0, 0,
+     193, 21, 22, 23, 24, 25, 26, 0, 0, 194,
+       0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
+      33, 34, 35, 36, 37, 38, 39, 40, 195, 41,
+      42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 196, 0, 0, 197,
+      50, 0, 51, 52, 0, 198, 199, 54, 55, 56,
+      57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
+       0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
+      10, 11, 61, 200, 63, 12, 0, 13, 14, 15,
+     191, 192, 18, 19, 0, 0, 0, 0, 0, 193,
+     230, 231, 23, 24, 25, 26, 0, 0, 194, 0,
+       0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
+      34, 35, 36, 37, 38, 39, 40, 195, 41, 42,
+       0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 196, 0, 0, 197, 50,
+       0, 51, 52, 0, 590, 199, 54, 55, 56, 57,
+      58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
+       0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
+      11, 61, 200, 63, 12, 0, 13, 14, 15, 191,
+     192, 18, 19, 0, 0, 0, 0, 0, 193, 230,
+     231, 23, 24, 25, 26, 0, 0, 194, 0, 0,
+       0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
+      35, 36, 37, 38, 39, 40, 195, 41, 42, 0,
+      43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 196, 0, 0, 197, 50, 0,
+      51, 52, 0, 198, 0, 54, 55, 56, 57, 58,
+      59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
+       5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
+      61, 200, 63, 12, 0, 13, 14, 15, 191, 192,
+      18, 19, 0, 0, 0, 0, 0, 193, 230, 231,
+      23, 24, 25, 26, 0, 0, 194, 0, 0, 0,
+       0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
+      36, 37, 38, 39, 40, 195, 41, 42, 0, 43,
+      44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 196, 0, 0, 197, 50, 0, 51,
+      52, 0, 0, 199, 54, 55, 56, 57, 58, 59,
+      60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+       6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
+     200, 63, 12, 0, 13, 14, 15, 191, 192, 18,
+      19, 0, 0, 0, 0, 0, 193, 230, 231, 23,
+      24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
+       0, 0, 29, 0, 0, 32, 33, 34, 35, 36,
+      37, 38, 39, 40, 195, 41, 42, 0, 43, 44,
+      45, 0, 46, 47, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 196, 0, 0, 197, 50, 0, 51, 52,
+       0, 590, 0, 54, 55, 56, 57, 58, 59, 60,
+       0, 0, 0, 0, 0, 0, 0, 0, 5, 6,
+       7, 0, 9, 0, 0, 0, 10, 11, 61, 200,
+      63, 12, 0, 13, 14, 15, 191, 192, 18, 19,
+       0, 0, 0, 0, 0, 193, 230, 231, 23, 24,
+      25, 26, 0, 0, 194, 0, 0, 0, 0, 0,
+       0, 29, 0, 0, 32, 33, 34, 35, 36, 37,
+      38, 39, 40, 195, 41, 42, 0, 43, 44, 45,
+       0, 46, 47, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 196, 0, 0, 197, 50, 0, 51, 52, 0,
+       0, 0, 54, 55, 56, 57, 58, 59, 60, 0,
+       0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
+       0, 9, 0, 0, 0, 10, 11, 61, 200, 63,
+      12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
+       0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
+      26, 0, 0, 194, 0, 0, 0, 0, 0, 0,
+      29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
+      39, 40, 0, 41, 42, 0, 43, 44, 45, 0,
+      46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     196, 0, 0, 197, 50, 0, 51, 52, 0, 489,
+       0, 54, 55, 56, 57, 58, 59, 60, 0, 0,
+       0, 0, 0, 0, 0, 0, 5, 6, 7, 0,
+       9, 0, 0, 0, 10, 11, 61, 200, 63, 12,
+       0, 13, 14, 15, 191, 192, 18, 19, 0, 0,
+       0, 0, 0, 193, 230, 231, 23, 24, 25, 26,
+       0, 0, 194, 0, 0, 0, 0, 0, 0, 29,
+       0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
+      40, 0, 41, 42, 0, 43, 44, 45, 0, 46,
+      47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 196,
+       0, 0, 197, 50, 0, 51, 52, 0, 198, 0,
+      54, 55, 56, 57, 58, 59, 60, 0, 0, 0,
+       0, 0, 0, 0, 0, 5, 6, 7, 0, 9,
+       0, 0, 0, 10, 11, 61, 200, 63, 12, 0,
+      13, 14, 15, 191, 192, 18, 19, 0, 0, 0,
+       0, 0, 193, 230, 231, 23, 24, 25, 26, 0,
+       0, 194, 0, 0, 0, 0, 0, 0, 29, 0,
+       0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+       0, 41, 42, 0, 43, 44, 45, 0, 46, 47,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 196, 0,
+       0, 197, 50, 0, 51, 52, 0, 763, 0, 54,
+      55, 56, 57, 58, 59, 60, 0, 0, 0, 0,
+       0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
+       0, 0, 10, 11, 61, 200, 63, 12, 0, 13,
+      14, 15, 191, 192, 18, 19, 0, 0, 0, 0,
+       0, 193, 230, 231, 23, 24, 25, 26, 0, 0,
+     194, 0, 0, 0, 0, 0, 0, 29, 0, 0,
+      32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
+      41, 42, 0, 43, 44, 45, 0, 46, 47, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 196, 0, 0,
+     197, 50, 0, 51, 52, 0, 489, 0, 54, 55,
+      56, 57, 58, 59, 60, 0, 0, 0, 0, 0,
+       0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
+       0, 10, 11, 61, 200, 63, 12, 0, 13, 14,
+      15, 191, 192, 18, 19, 0, 0, 0, 0, 0,
+     193, 230, 231, 23, 24, 25, 26, 0, 0, 194,
+       0, 0, 0, 0, 0, 0, 29, 0, 0, 32,
+      33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
+      42, 0, 43, 44, 45, 0, 46, 47, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 196, 0, 0, 197,
+      50, 0, 51, 52, 0, 590, 0, 54, 55, 56,
+      57, 58, 59, 60, 0, 0, 0, 0, 0, 0,
+       0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
+      10, 11, 61, 200, 63, 12, 0, 13, 14, 15,
+     191, 192, 18, 19, 0, 0, 0, 0, 0, 193,
+     230, 231, 23, 24, 25, 26, 0, 0, 194, 0,
+       0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
+      34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
+       0, 43, 44, 45, 0, 46, 47, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 196, 0, 0, 197, 50,
+       0, 51, 52, 0, 0, 0, 54, 55, 56, 57,
+      58, 59, 60, 0, 0, 0, 0, 0, 0, 0,
+       0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
+      11, 61, 200, 63, 12, 0, 13, 14, 15, 16,
+      17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
+      22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
+       0, 0, 0, 0, 29, 0, 0, 32, 33, 34,
+      35, 36, 37, 38, 39, 40, 0, 41, 42, 0,
+      43, 44, 45, 0, 46, 47, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 196, 0, 0, 197, 50, 0,
+      51, 52, 0, 0, 0, 54, 55, 56, 57, 58,
+      59, 60, 0, 0, 0, 0, 0, 0, 0, 0,
+       5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
+      61, 62, 63, 12, 0, 13, 14, 15, 16, 17,
+      18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
+      23, 24, 25, 26, 0, 0, 194, 0, 0, 0,
+       0, 0, 0, 29, 0, 0, 32, 33, 34, 35,
+      36, 37, 38, 39, 40, 0, 41, 42, 0, 43,
+      44, 45, 0, 46, 47, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 196, 0, 0, 197, 50, 0, 51,
+      52, 0, 0, 0, 54, 55, 56, 57, 58, 59,
+      60, 0, 0, 0, 0, 0, 0, 0, 0, 5,
+       6, 7, 0, 9, 0, 0, 0, 10, 11, 61,
+     200, 63, 12, 0, 13, 14, 15, 191, 192, 18,
+      19, 0, 0, 0, 0, 0, 193, 230, 231, 23,
+      24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
+       0, 0, 250, 0, 0, 32, 33, 34, 35, 36,
+      37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
+      45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 251, 0, 0, 295, 50, 0, 51, 52,
+       0, 296, 0, 54, 55, 56, 57, 58, 59, 60,
+       0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
+       0, 0, 10, 11, 0, 0, 0, 12, 252, 13,
+      14, 15, 191, 192, 18, 19, 0, 0, 0, 0,
+       0, 193, 230, 231, 23, 24, 25, 26, 0, 0,
+     194, 0, 0, 0, 0, 0, 0, 250, 0, 0,
+      32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
+      41, 42, 0, 43, 44, 45, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 337, 0, 0,
+      49, 50, 0, 51, 52, 0, 53, 0, 54, 55,
+      56, 57, 58, 59, 60, 0, 0, 0, 0, 5,
+       6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
+       0, 0, 12, 252, 13, 14, 15, 191, 192, 18,
+      19, 0, 0, 0, 0, 0, 193, 230, 231, 23,
+      24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
+       0, 0, 250, 0, 0, 32, 33, 34, 344, 36,
+      37, 38, 345, 40, 0, 41, 42, 0, 43, 44,
+      45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 346,
+       0, 0, 347, 0, 0, 197, 50, 0, 51, 52,
+       0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
+       0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
+       0, 0, 10, 11, 0, 0, 0, 12, 252, 13,
+      14, 15, 191, 192, 18, 19, 0, 0, 0, 0,
+       0, 193, 230, 231, 23, 24, 25, 26, 0, 0,
+     194, 0, 0, 0, 0, 0, 0, 250, 0, 0,
+      32, 33, 34, 344, 36, 37, 38, 345, 40, 0,
+      41, 42, 0, 43, 44, 45, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 347, 0, 0,
+     197, 50, 0, 51, 52, 0, 0, 0, 54, 55,
+      56, 57, 58, 59, 60, 0, 0, 0, 0, 5,
+       6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
+       0, 0, 12, 252, 13, 14, 15, 191, 192, 18,
+      19, 0, 0, 0, 0, 0, 193, 230, 231, 23,
+      24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
+       0, 0, 250, 0, 0, 32, 33, 34, 35, 36,
+      37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
+      45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 251, 0, 0, 295, 50, 0, 51, 52,
+       0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
+       0, 0, 0, 0, 5, 6, 7, 0, 9, 0,
+       0, 0, 10, 11, 0, 0, 0, 12, 252, 13,
+      14, 15, 191, 192, 18, 19, 0, 0, 0, 0,
+       0, 193, 230, 231, 23, 24, 25, 26, 0, 0,
+     194, 0, 0, 0, 0, 0, 0, 250, 0, 0,
+      32, 33, 34, 35, 36, 37, 38, 39, 40, 0,
+      41, 42, 0, 43, 44, 45, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 882, 0, 0,
+     197, 50, 0, 51, 52, 0, 0, 0, 54, 55,
+      56, 57, 58, 59, 60, 0, 0, 0, 0, 5,
+       6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
+       0, 0, 12, 252, 13, 14, 15, 191, 192, 18,
+      19, 0, 0, 0, 0, 0, 193, 230, 231, 23,
+      24, 25, 26, 0, 0, 194, 0, 0, 0, 0,
+       0, 0, 250, 0, 0, 32, 33, 34, 35, 36,
+      37, 38, 39, 40, 0, 41, 42, 0, 43, 44,
+      45, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 891, 0, 0, 197, 50, 0, 51, 52,
+       0, 0, 0, 54, 55, 56, 57, 58, 59, 60,
+       0, 0, 0, 0, 0, 528, 529, 0, 0, 530,
+       0, 0, 0, 0, 0, 0, 0, 0, 252, 154,
+     155, 156, 157, 158, 159, 160, 161, 162, 0, 0,
+     163, 164, 0, 0, 165, 166, 167, 168, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 169, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 170, 171, 172, 173, 174,
+     175, 176, 177, 178, 179, 0, 180, 181, 0, 0,
+       0, 0, 0, 536, 537, 0, 0, 538, 0, 0,
+       0, 0, 0, 0, 0, 182, 219, 154, 155, 156,
+     157, 158, 159, 160, 161, 162, 0, 0, 163, 164,
+       0, 0, 165, 166, 167, 168, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 169, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 170, 171, 172, 173, 174, 175, 176,
+     177, 178, 179, 0, 180, 181, 0, 0, 0, 0,
+       0, 594, 529, 0, 0, 595, 0, 0, 0, 0,
+       0, 0, 0, 182, 219, 154, 155, 156, 157, 158,
+     159, 160, 161, 162, 0, 0, 163, 164, 0, 0,
+     165, 166, 167, 168, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 169, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
+     179, 0, 180, 181, 0, 0, 0, 0, 0, 597,
+     537, 0, 0, 598, 0, 0, 0, 0, 0, 0,
+       0, 182, 219, 154, 155, 156, 157, 158, 159, 160,
+     161, 162, 0, 0, 163, 164, 0, 0, 165, 166,
+     167, 168, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 169, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
+     171, 172, 173, 174, 175, 176, 177, 178, 179, 0,
+     180, 181, 0, 0, 0, 0, 0, 617, 529, 0,
+       0, 618, 0, 0, 0, 0, 0, 0, 0, 182,
+     219, 154, 155, 156, 157, 158, 159, 160, 161, 162,
+       0, 0, 163, 164, 0, 0, 165, 166, 167, 168,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 170, 171, 172,
+     173, 174, 175, 176, 177, 178, 179, 0, 180, 181,
+       0, 0, 0, 0, 0, 620, 537, 0, 0, 621,
+       0, 0, 0, 0, 0, 0, 0, 182, 219, 154,
+     155, 156, 157, 158, 159, 160, 161, 162, 0, 0,
+     163, 164, 0, 0, 165, 166, 167, 168, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 169, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 170, 171, 172, 173, 174,
+     175, 176, 177, 178, 179, 0, 180, 181, 0, 0,
+       0, 0, 0, 689, 529, 0, 0, 690, 0, 0,
+       0, 0, 0, 0, 0, 182, 219, 154, 155, 156,
+     157, 158, 159, 160, 161, 162, 0, 0, 163, 164,
+       0, 0, 165, 166, 167, 168, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 169, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 170, 171, 172, 173, 174, 175, 176,
+     177, 178, 179, 0, 180, 181, 0, 0, 0, 0,
+       0, 692, 537, 0, 0, 693, 0, 0, 0, 0,
+       0, 0, 0, 182, 219, 154, 155, 156, 157, 158,
+     159, 160, 161, 162, 0, 0, 163, 164, 0, 0,
+     165, 166, 167, 168, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 169, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
+     179, 0, 180, 181, 0, 0, 0, 0, 0, 699,
+     529, 0, 0, 700, 0, 0, 0, 0, 0, 0,
+       0, 182, 219, 154, 155, 156, 157, 158, 159, 160,
+     161, 162, 0, 0, 163, 164, 0, 0, 165, 166,
+     167, 168, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 169, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
+     171, 172, 173, 174, 175, 176, 177, 178, 179, 0,
+     180, 181, 0, 0, 0, 0, 0, 575, 537, 0,
+       0, 576, 0, 0, 0, 0, 0, 0, 0, 182,
+     219, 154, 155, 156, 157, 158, 159, 160, 161, 162,
+       0, 0, 163, 164, 0, 0, 165, 166, 167, 168,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+     169, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 170, 171, 172,
+     173, 174, 175, 176, 177, 178, 179, 0, 180, 181,
+       0, 0, 0, 0, 0, 937, 529, 0, 0, 938,
+       0, 0, 0, 0, 0, 0, 0, 182, 219, 154,
+     155, 156, 157, 158, 159, 160, 161, 162, 0, 0,
+     163, 164, 0, 0, 165, 166, 167, 168, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 169, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 170, 171, 172, 173, 174,
+     175, 176, 177, 178, 179, 0, 180, 181, 0, 0,
+       0, 0, 0, 943, 529, 0, 0, 944, 0, 0,
+       0, 0, 0, 0, 0, 182, 219, 154, 155, 156,
+     157, 158, 159, 160, 161, 162, 0, 0, 163, 164,
+       0, 0, 165, 166, 167, 168, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 169, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 170, 171, 172, 173, 174, 175, 176,
+     177, 178, 179, 0, 180, 181, 0, 0, 0, 0,
+       0, 946, 537, 0, 0, 947, 0, 0, 0, 0,
+       0, 0, 0, 182, 219, 154, 155, 156, 157, 158,
+     159, 160, 161, 162, 0, 0, 163, 164, 0, 0,
+     165, 166, 167, 168, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 169, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 170, 171, 172, 173, 174, 175, 176, 177, 178,
+     179, 0, 180, 181, 0, 0, 0, 0, 0, 575,
+     537, 0, 0, 576, 0, 0, 0, 0, 0, 0,
+       0, 182, 219, 154, 155, 156, 157, 158, 159, 160,
+     161, 162, 0, 0, 163, 164, 0, 0, 165, 166,
+     167, 168, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 169, 0, 0, 0, 0, 0, 660, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 170,
+     171, 172, 173, 174, 175, 176, 177, 178, 179, 0,
+     180, 181, 299, 300, 301, 302, 303, 304, 305, 306,
+     307, 308, 309, 310, 311, 0, 0, 312, 313, 182,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+       0, 0, 0, 0, 314, 0, 315, 316, 317, 318,
+     319, 320, 321, 322, 323, 324
+};
+static const yytype_int16 yycheck[] =
+{
+       2, 55, 4, 8, 52, 74, 22, 27, 8, 29,
+      51, 260, 331, 326, 16, 17, 28, 62, 20, 53,
+     212, 65, 550, 28, 4, 260, 298, 244, 28, 85,
+     549, 248, 569, 596, 434, 89, 50, 8, 16, 17,
+      74, 85, 20, 1, 347, 51, 52, 49, 50, 53,
+     443, 53, 86, 87, 88, 55, 619, 28, 49, 267,
+      62, 637, 735, 271, 325, 634, 327, 81, 82, 733,
+     677, 85, 74, 25, 681, 25, 389, 22, 29, 81,
+      82, 25, 61, 85, 86, 87, 88, 25, 237, 89,
+     731, 107, 579, 580, 840, 495, 26, 16, 17, 85,
+      87, 20, 109, 0, 61, 393, 367, 368, 37, 38,
+      25, 87, 82, 87, 76, 85, 85, 25, 85, 651,
+      85, 25, 109, 436, 148, 104, 105, 388, 691, 390,
+      56, 85, 13, 109, 141, 109, 424, 61, 85, 702,
+     385, 65, 25, 59, 60, 25, 295, 195, 393, 106,
+     198, 199, 114, 414, 140, 113, 107, 109, 25, 109,
+     634, 698, 107, 637, 2, 13, 4, 141, 147, 706,
+     139, 140, 918, 140, 815, 140, 437, 651, 16, 17,
+     104, 105, 20, 52, 253, 139, 140, 56, 146, 141,
+     148, 141, 144, 140, 144, 197, 148, 141, 148, 448,
+      13, 137, 27, 141, 877, 143, 13, 137, 222, 873,
+     224, 49, 50, 448, 216, 231, 218, 219, 234, 253,
+     222, 13, 224, 755, 62, 13, 141, 229, 143, 716,
+     250, 624, 625, 141, 875, 237, 26, 141, 216, 222,
+     218, 219, 555, 81, 82, 293, 237, 85, 293, 825,
+     298, 253, 293, 298, 567, 862, 239, 298, 141, 659,
+     829, 141, 296, 566, 472, 146, 28, 148, 909, 838,
+     284, 285, 286, 287, 141, 289, 290, 796, 334, 37,
+      38, 283, 284, 285, 286, 287, 288, 289, 290, 147,
+     334, 293, 296, 295, 296, 556, 298, 216, 146, 218,
+     148, 147, 85, 283, 295, 349, 141, 568, 288, 59,
+      60, 327, 85, 148, 284, 285, 286, 287, 332, 333,
+      85, 146, 571, 148, 326, 325, 328, 864, 373, 374,
+     332, 333, 346, 146, 862, 148, 384, 385, 731, 146,
+     733, 148, 68, 109, 346, 393, 141, 137, 326, 141,
+      85, 825, 85, 143, 146, 143, 148, 140, 146, 197,
+     148, 26, 332, 333, 838, 434, 840, 140, 687, 906,
+      26, 373, 374, 421, 390, 140, 424, 109, 216, 385,
+     218, 219, 945, 85, 222, 85, 224, 389, 388, 99,
+     148, 229, 87, 119, 120, 121, 408, 614, 414, 237,
+     434, 593, 651, 408, 676, 140, 139, 140, 408, 411,
+     143, 389, 395, 413, 109, 421, 399, 141, 85, 402,
+      85, 437, 815, 816, 148, 143, 495, 14, 15, 85,
+     148, 85, 434, 416, 436, 435, 419, 408, 140, 139,
+     140, 489, 87, 85, 918, 283, 284, 285, 286, 287,
+     288, 289, 290, 87, 87, 293, 705, 295, 436, 85,
+     298, 495, 141, 52, 109, 54, 55, 56, 57, 85,
+     705, 143, 137, 140, 139, 140, 109, 87, 143, 85,
+     873, 137, 875, 139, 140, 139, 140, 143, 326, 56,
+     328, 26, 54, 495, 332, 333, 141, 517, 140, 109,
+      89, 63, 64, 551, 548, 549, 95, 96, 346, 85,
+     551, 494, 109, 139, 140, 535, 909, 533, 562, 87,
+      15, 552, 17, 139, 140, 541, 26, 116, 88, 85,
+     119, 850, 665, 139, 140, 373, 374, 856, 87, 672,
+     556, 109, 590, 545, 87, 547, 615, 87, 577, 578,
+      85, 389, 568, 555, 554, 85, 570, 146, 87, 141,
+     109, 577, 578, 139, 140, 567, 566, 569, 570, 109,
+      57, 58, 85, 411, 622, 587, 596, 555, 141, 143,
+     109, 615, 587, 139, 140, 85, 137, 587, 533, 567,
+     659, 605, 141, 609, 610, 143, 541, 637, 436, 619,
+     640, 141, 137, 605, 139, 140, 143, 85, 656, 139,
+     140, 651, 141, 615, 68, 928, 587, 662, 144, 146,
+     869, 148, 145, 668, 669, 659, 139, 140, 676, 631,
+     632, 87, 577, 578, 109, 676, 138, 137, 56, 139,
+     140, 643, 141, 143, 52, 628, 54, 55, 56, 57,
+     652, 695, 68, 109, 708, 686, 61, 659, 106, 106,
+     662, 139, 140, 707, 68, 141, 668, 669, 929, 17,
+      56, 691, 703, 52, 146, 54, 55, 56, 57, 25,
+     694, 94, 702, 697, 144, 141, 52, 68, 54, 55,
+      56, 57, 694, 138, 109, 697, 698, 141, 141, 104,
+     105, 106, 83, 84, 706, 141, 141, 545, 708, 547,
+      52, 713, 714, 141, 52, 763, 147, 555, 141, 141,
+      61, 704, 141, 89, 694, 10, 13, 697, 773, 567,
+      96, 569, 570, 141, 61, 116, 117, 118, 119, 120,
+     121, 724, 8, 138, 141, 793, 146, 730, 141, 2,
+     116, 4, 796, 736, 798, 111, 787, 145, 789, 15,
+      68, 141, 141, 104, 105, 106, 10, 605, 799, 138,
+     141, 773, 786, 804, 141, 83, 84, 104, 105, 106,
+     141, 783, 61, 141, 786, 825, 68, 827, 790, 791,
+     109, 831, 794, 631, 632, 138, 49, 114, 88, 10,
+     840, 835, 842, 51, 52, 643, 141, 141, 810, 117,
+     118, 119, 120, 121, 652, 849, 786, 141, 16, 17,
+     803, 141, 20, 9, 662, 104, 105, 106, 859, 860,
+     668, 669, 10, 835, 138, 117, 118, 119, 120, 121,
+      52, 141, 54, 55, 56, 57, 141, 849, 46, 47,
+     114, 853, 141, 51, 52, 138, 694, 141, 86, 697,
+     698, 141, 864, 56, 62, 63, 141, 141, 706, 141,
+     143, 56, 912, 143, 905, 713, 714, 89, 918, 141,
+     920, 88, 931, 923, 624, 877, 91, 52, 930, 54,
+      55, 56, 57, 94, 896, 52, 898, 54, 55, 56,
+      57, 932, 904, 934, 906, 89, 52, 838, 54, 55,
+      56, 57, 634, 929, 954, 65, 869, 917, -1, 54,
+      55, -1, 57, -1, 89, 945, 928, 927, 63, 64,
+      95, 96, 89, -1, -1, 773, -1, 52, 95, 54,
+      55, 56, 57, 89, 197, 783, -1, -1, 786, 95,
+     928, 116, 790, 791, 119, -1, 794, -1, -1, 207,
+      -1, -1, -1, -1, 212, 40, 41, 42, 43, 44,
+      -1, 219, 810, -1, -1, -1, 229, -1, 2, -1,
+      -1, -1, -1, -1, 237, 52, -1, 54, 55, 56,
+      57, -1, -1, -1, -1, -1, 0, 195, -1, -1,
+     198, 199, 200, -1, 8, 9, 10, -1, -1, 13,
+      14, 15, -1, 17, -1, 853, -1, -1, 216, -1,
+     218, 219, 89, 27, -1, 49, 864, -1, 95, 96,
+     283, -1, -1, 37, 38, 288, 40, 41, 42, 43,
+      44, -1, 295, -1, -1, -1, -1, -1, -1, 116,
+      -1, -1, 119, -1, -1, -1, -1, -1, 896, -1,
+     898, -1, -1, -1, -1, -1, 904, -1, 906, -1,
+      -1, -1, -1, -1, -1, 328, 143, -1, 326, -1,
+      -1, 85, -1, -1, -1, -1, -1, -1, -1, -1,
+     928, -1, -1, -1, -1, 293, -1, -1, -1, -1,
+     298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
+     308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+     318, 319, 320, 321, 322, 323, 324, -1, 326, -1,
+      -1, -1, -1, -1, 138, -1, 140, -1, -1, 143,
+     144, 389, 146, -1, 148, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, 411, -1,
+      52, -1, 54, 55, 56, 57, -1, -1, -1, -1,
+      -1, -1, -1, 197, -1, 373, 374, 52, -1, 54,
+      55, 56, 57, 68, -1, 383, 384, 385, 436, -1,
+      -1, 389, -1, 391, 392, 393, -1, 89, 83, 84,
+      -1, -1, -1, 95, 96, 229, 454, -1, 456, -1,
+     458, -1, 410, 237, 89, -1, -1, 415, -1, -1,
+      95, 96, -1, 421, 116, -1, 424, 119, -1, 114,
+     115, 116, 117, 118, 119, 120, 121, -1, 436, -1,
+     488, 116, -1, -1, 119, -1, -1, -1, -1, -1,
+      -1, 143, -1, 2, -1, 4, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 295, -1, -1, -1, -1, -1, -1, -1, 477,
+     478, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 489, 545, 541, 547, 543, -1, -1, -1, -1,
+      49, -1, -1, -1, 53, -1, -1, 555, -1, -1,
+      -1, -1, -1, -1, -1, -1, 569, -1, -1, 567,
+      -1, -1, -1, -1, -1, 74, -1, -1, -1, 577,
+     578, 579, 580, -1, -1, -1, -1, 86, 87, 88,
+      89, -1, -1, -1, -1, 593, -1, -1, -1, -1,
+      -1, -1, -1, 551, -1, -1, -1, 555, -1, -1,
+      -1, -1, 610, -1, -1, -1, -1, -1, -1, 567,
+      -1, 2, -1, 4, -1, -1, -1, -1, 631, 632,
+      -1, -1, 630, -1, -1, -1, -1, 411, -1, -1,
+     643, -1, 590, -1, -1, -1, -1, -1, -1, 652,
+      -1, -1, -1, 651, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 456, -1, 458, 49, -1,
+      -1, -1, 53, -1, 622, -1, -1, -1, 676, 677,
+      -1, 679, -1, 681, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 74, -1, 698, -1, -1, 197, -1,
+      -1, -1, -1, 706, -1, 86, 87, 88, 656, -1,
+     713, 714, 660, -1, 662, 663, -1, -1, 716, -1,
+     668, 669, -1, -1, -1, -1, -1, -1, 676, -1,
+     229, -1, -1, -1, -1, -1, -1, -1, 237, -1,
+      -1, -1, -1, 741, 742, -1, 744, -1, 746, 747,
+      -1, -1, -1, -1, 253, -1, -1, 755, -1, 757,
+      -1, 759, 760, -1, -1, -1, -1, 715, -1, -1,
+      -1, 545, 720, 547, 722, 723, -1, -1, -1, -1,
+     783, -1, -1, 781, 283, -1, 784, 790, 791, 288,
+      -1, 794, 2, -1, 4, -1, 295, 296, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 810, -1, -1,
+      -1, -1, -1, -1, -1, 763, 197, -1, -1, 767,
+      -1, -1, -1, -1, -1, 773, -1, -1, -1, 328,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 49,
+      -1, -1, -1, -1, -1, 793, -1, -1, 229, -1,
+     853, -1, -1, -1, -1, -1, 237, 631, 632, -1,
+      -1, 864, -1, 811, 862, -1, -1, -1, -1, 643,
+      -1, -1, 253, -1, -1, -1, 86, -1, 652, -1,
+     878, 879, 880, 881, -1, -1, -1, 885, 886, 887,
+      -1, 889, 890, 896, -1, 898, -1, -1, -1, -1,
+      -1, 904, 283, 906, -1, -1, -1, 288, -1, -1,
+      -1, -1, 411, -1, 295, 296, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+     928, -1, 930, 931, -1, 434, -1, -1, 936, 713,
+     714, 939, 940, 941, 942, -1, -1, 328, -1, -1,
+     741, 742, -1, 744, -1, 746, 747, -1, -1, -1,
+      -1, 959, -1, -1, -1, -1, 757, -1, 759, 760,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+     928, -1, -1, -1, -1, -1, -1, 197, -1, -1,
+      -1, -1, -1, -1, -1, -1, 495, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 783,
+      -1, -1, -1, -1, -1, -1, 790, 791, -1, 229,
+     794, -1, -1, -1, -1, -1, -1, 237, -1, -1,
+     411, -1, -1, -1, -1, -1, 810, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 545, -1, 547, -1,
+      -1, -1, -1, 434, -1, -1, 68, 69, 70, 71,
+      72, 73, 74, 75, 76, 77, 78, 79, 80, -1,
+     569, 83, 84, 283, -1, -1, -1, -1, 288, 853,
+      -1, -1, -1, -1, -1, 295, -1, 878, 879, 880,
+     881, -1, -1, -1, 885, 886, 887, -1, 889, 890,
+     112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+      -1, -1, -1, -1, 495, -1, 615, -1, 328, -1,
+      -1, -1, 896, -1, 898, -1, -1, -1, -1, -1,
+     904, -1, 631, 632, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 643, 936, -1, -1, 939, 940,
+     941, 942, -1, 652, -1, -1, -1, -1, -1, -1,
+     659, -1, -1, -1, 545, -1, 547, -1, 959, -1,
+      -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
+      74, 75, 76, 77, 78, 79, 80, -1, 569, 83,
+      84, -1, -1, -1, -1, -1, -1, -1, -1, 698,
+      -1, 411, -1, -1, -1, -1, -1, 706, -1, -1,
+      -1, -1, -1, -1, 713, 714, 110, -1, 112, 113,
+     114, 115, 116, 117, 118, 119, 120, 121, -1, -1,
+      -1, -1, -1, -1, 615, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+     631, 632, -1, -1, 148, -1, -1, -1, -1, -1,
+      -1, -1, 643, 644, -1, -1, -1, -1, -1, -1,
+      -1, 652, -1, -1, -1, -1, -1, -1, 659, -1,
+      -1, -1, -1, -1, 783, -1, -1, -1, -1, -1,
+      -1, 790, 791, -1, -1, 794, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 810, -1, -1, -1, -1, -1, 698, -1, -1,
+      -1, -1, -1, -1, -1, 706, -1, -1, -1, -1,
+      -1, -1, 713, 714, -1, 545, 835, 547, -1, -1,
+      -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
+     849, 77, 78, -1, 853, -1, -1, 83, 84, 569,
+      -1, -1, -1, -1, -1, 864, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 112, 113, 114, 115,
+     116, 117, 118, 119, 120, 121, -1, 896, -1, 898,
+      -1, -1, 783, -1, -1, 904, -1, 906, -1, 790,
+     791, -1, -1, 794, -1, -1, -1, -1, -1, -1,
+      -1, 631, 632, -1, -1, -1, -1, -1, -1, 810,
+      -1, -1, -1, 643, -1, -1, -1, -1, -1, -1,
+      -1, -1, 652, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 835, -1, -1, -1, -1, -1,
+      -1, 68, 69, 70, 71, 72, 73, 74, 849, -1,
+      77, 78, 853, -1, -1, -1, 83, 84, -1, -1,
+      -1, -1, -1, 864, -1, -1, -1, -1, 698, -1,
+      -1, -1, -1, -1, -1, -1, 706, -1, -1, -1,
+      -1, -1, -1, 713, 714, 112, 113, 114, 115, 116,
+     117, 118, 119, 120, 121, 896, -1, 898, -1, 44,
+      -1, -1, -1, 904, -1, 906, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 44, -1, -1, -1,
+      -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
+      75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
+      68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+      78, 79, 80, 783, -1, 83, 84, -1, -1, -1,
+     790, 791, -1, -1, 794, 110, -1, 112, 113, 114,
+     115, 116, 117, 118, 119, 120, 121, -1, -1, -1,
+     810, -1, 110, -1, 112, 113, 114, 115, 116, 117,
+     118, 119, 120, 121, 0, 1, 141, 3, 4, 5,
+       6, 7, -1, -1, -1, 11, 12, -1, -1, -1,
+      16, -1, 18, 19, 20, 21, 22, 23, 24, 849,
+      -1, -1, -1, 853, 30, 31, 32, 33, 34, 35,
+      36, -1, -1, 39, 864, -1, -1, -1, -1, 45,
+      46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+      56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
+      66, 67, -1, -1, -1, -1, 896, -1, 898, -1,
+      -1, -1, -1, -1, 904, -1, 906, -1, -1, -1,
+      86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
+      -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 122, 123, 124, 0,
+      -1, -1, -1, -1, -1, -1, -1, 8, 9, 10,
+      -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
+     146, -1, 148, -1, -1, -1, 27, 28, 29, -1,
+      -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
+      41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
+      68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+      78, 79, 80, -1, -1, 83, 84, 68, 69, 70,
+      71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+      -1, -1, 83, 84, 85, -1, 87, 88, -1, -1,
+      -1, -1, 110, 94, 112, 113, 114, 115, 116, 117,
+     118, 119, 120, 121, -1, -1, 107, -1, 109, 110,
+     111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
+     121, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 138, 139, 140,
+     141, 0, -1, 144, 145, 146, -1, 148, -1, 8,
+       9, 10, -1, -1, 13, 14, 15, -1, 17, -1,
+      -1, -1, -1, -1, -1, -1, -1, 26, 27, 28,
+      -1, -1, -1, -1, -1, -1, -1, -1, 37, 38,
+      -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
+      -1, -1, 68, 69, 70, 71, 72, 73, 74, -1,
+      -1, 77, 78, -1, -1, -1, -1, 83, 84, 68,
+      69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+      79, 80, -1, -1, 83, 84, 85, -1, -1, 88,
+      -1, -1, -1, -1, -1, 94, 112, 113, 114, 115,
+     116, 117, 118, 119, 120, 121, -1, -1, -1, -1,
+      -1, 110, -1, 112, 113, 114, 115, 116, 117, 118,
+     119, 120, 121, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, 137, 138,
+     139, 140, 141, 0, 143, 144, 145, 146, -1, 148,
+      -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
+      17, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      27, 28, 29, -1, -1, -1, -1, -1, -1, -1,
+      37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+      77, 78, 79, 80, -1, -1, 83, 84, 85, -1,
+      -1, 88, -1, -1, -1, -1, -1, 94, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+     107, -1, -1, 110, 111, 112, 113, 114, 115, 116,
+     117, 118, 119, 120, 121, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 138, 139, 140, 141, 0, -1, 144, 145, 146,
+      -1, 148, -1, 8, 9, 10, -1, -1, 13, 14,
+      15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
+      -1, 26, 27, 28, -1, -1, -1, -1, -1, -1,
+      -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
+      75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
+      85, -1, -1, 88, -1, -1, -1, -1, -1, 94,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 110, -1, 112, 113, 114,
+     115, 116, 117, 118, 119, 120, 121, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, 137, 138, 139, 140, 141, 0, 143, 144,
+     145, 146, -1, 148, -1, 8, 9, 10, -1, -1,
+      13, 14, 15, -1, 17, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 27, 28, -1, -1, -1, -1,
+      -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
+      43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 68, 69, 70, 71, 72,
+      73, 74, 75, 76, 77, 78, 79, 80, -1, -1,
+      83, 84, 85, -1, -1, 88, -1, -1, -1, -1,
+      -1, 94, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 110, -1, 112,
+     113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 138, 139, 140, 141, 0,
+     143, 144, 145, 146, -1, 148, -1, 8, 9, 10,
+      -1, -1, -1, 14, 15, -1, 17, -1, -1, -1,
+      -1, -1, -1, -1, -1, 26, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
+      41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
+      71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+      -1, -1, 83, 84, 85, 0, 87, -1, -1, -1,
+      -1, -1, -1, 8, 9, 10, -1, -1, -1, 14,
+      15, -1, 17, -1, -1, -1, -1, -1, 109, 110,
+      -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
+     121, -1, 37, 38, -1, 40, 41, 42, 43, 44,
+      -1, -1, -1, -1, -1, -1, 137, 138, 139, 140,
+     141, -1, -1, 144, -1, 146, -1, 148, -1, -1,
+      -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
+      75, 76, 77, 78, 79, 80, -1, -1, 83, 84,
+      85, -1, 87, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 109, 110, -1, 112, 113, 114,
+     115, 116, 117, 118, 119, 120, 121, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 138, 139, 140, 141, -1, -1, 144,
+      -1, 146, 1, 148, 3, 4, 5, 6, 7, 8,
+       9, 10, 11, 12, -1, -1, 15, 16, -1, 18,
+      19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
+      -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
+      39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
+      49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
+      59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
+      89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
+      99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 122, 123, 124, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 146, 1, 148,
+       3, 4, 5, 6, 7, -1, -1, 10, 11, 12,
+      -1, 14, 15, 16, -1, 18, 19, 20, 21, 22,
+      23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
+      33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
+      -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
+      53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
+      63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
+      93, -1, 95, -1, 97, 98, 99, 100, 101, 102,
+     103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
+     123, 124, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 146, 1, 148, 3, 4, 5, 6,
+       7, -1, -1, 10, 11, 12, -1, -1, 15, 16,
+      17, 18, 19, 20, 21, 22, 23, 24, -1, -1,
+      -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
+      -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
+      47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+      57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
+      67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
+      -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
+      97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 122, 123, 124, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 146,
+       1, 148, 3, 4, 5, 6, 7, -1, -1, 10,
+      11, 12, -1, -1, 15, 16, -1, 18, 19, 20,
+      21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
+      31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
+      -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
+      51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
+      -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
+      -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
+     101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 122, 123, 124, -1, -1, -1, -1, -1, -1,
+      -1, 1, -1, 3, 4, 5, 6, 7, -1, 9,
+      10, 11, 12, -1, -1, 146, 16, 148, 18, 19,
+      20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
+      30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+      -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
+      50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
+      60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
+      90, -1, 92, 93, -1, 95, -1, 97, 98, 99,
+     100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, 122, 123, 124, -1, -1, -1, -1, -1,
+      -1, -1, 1, -1, 3, 4, 5, 6, 7, -1,
+      -1, -1, 11, 12, -1, -1, 146, 16, 148, 18,
+      19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
+      -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
+      39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
+      49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
+      59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
+      89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
+      99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 122, 123, 124, -1, -1, -1, -1,
+      -1, -1, -1, 1, -1, 3, 4, 5, 6, 7,
+      -1, -1, -1, 11, 12, 144, -1, 146, 16, 148,
+      18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
+      -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+      -1, 39, -1, -1, -1, -1, -1, 45, 46, 47,
+      48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+      -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
+      -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
+      98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
+      -1, -1, -1, -1, 1, -1, 3, 4, 5, 6,
+       7, -1, -1, -1, 11, 12, 144, -1, 146, 16,
+     148, 18, 19, 20, 21, 22, 23, 24, -1, -1,
+      -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
+      -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
+      47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+      57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
+      67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
+      -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
+      97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 122, 123, 124, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 138, -1, -1, -1, -1, -1, -1, -1, 146,
+       1, 148, 3, 4, 5, 6, 7, -1, -1, 10,
+      11, 12, -1, -1, -1, 16, -1, 18, 19, 20,
+      21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
+      31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
+      -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
+      51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
+      -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
+      -1, 92, 93, -1, 95, -1, 97, 98, 99, 100,
+     101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 122, 123, 124, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
+      -1, 11, 12, -1, -1, 146, 16, 148, 18, 19,
+      20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
+      30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+      -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
+      50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+      60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
+      90, -1, 92, 93, -1, 95, 96, 97, 98, 99,
+     100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, 122, 123, 124, 3, 4, 5, -1, 7,
+      -1, -1, -1, 11, 12, -1, -1, -1, 16, -1,
+      18, 19, 20, 21, 22, 23, 24, -1, 148, -1,
+      -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+      -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
+      -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+      -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
+      -1, 89, 90, -1, 92, 93, -1, -1, -1, 97,
+      98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 122, 123, 124, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
+       7, -1, -1, -1, 11, 12, -1, -1, 146, 16,
+     148, 18, 19, 20, 21, 22, 23, 24, -1, -1,
+      -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
+      -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
+      -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
+      57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
+      67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
+      -1, -1, 89, 90, -1, 92, 93, -1, -1, -1,
+      97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 122, 123, 124, 3, 4,
+       5, 6, 7, -1, -1, -1, 11, 12, -1, -1,
+      -1, 16, -1, 18, 19, 20, 21, 22, 23, 24,
+      -1, 148, -1, -1, -1, 30, 31, 32, 33, 34,
+      35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
+      45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+      55, 56, 57, -1, 59, 60, -1, 62, 63, 64,
+      -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
+      95, -1, 97, 98, 99, 100, 101, 102, 103, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 122, 123, 124,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 146, 3, 4, 5, 6, 7, 8, 9, 10,
+      11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+      21, 22, 23, 24, 25, 26, -1, -1, -1, 30,
+      31, 32, 33, 34, 35, 36, 37, 38, 39, -1,
+      -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
+      51, 52, 53, 54, 55, 56, 57, -1, -1, -1,
+      -1, -1, -1, -1, -1, 66, 67, 68, 69, 70,
+      71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
+      81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 95, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
+     121, -1, 123, 124, -1, -1, -1, -1, -1, -1,
+       3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
+      -1, 142, 143, 16, -1, 18, 19, 20, 21, 22,
+      23, 24, -1, 26, -1, -1, -1, 30, 31, 32,
+      33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
+      -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
+      53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
+      63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
+      93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
+     103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 122,
+     123, 124, -1, -1, -1, -1, -1, -1, 3, 4,
+       5, -1, 7, -1, 137, -1, 11, 12, -1, -1,
+     143, 16, -1, 18, 19, 20, 21, 22, 23, 24,
+      -1, 26, -1, -1, -1, 30, 31, 32, 33, 34,
+      35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
+      -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
+      55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
+      -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
+      95, 96, 97, 98, 99, 100, 101, 102, 103, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 122, 123, 124,
+      -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
+       7, -1, 137, -1, 11, 12, -1, -1, 143, 16,
+      -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
+      -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
+      -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
+      -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
+      57, 58, 59, 60, -1, 62, 63, 64, -1, 66,
+      67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
+      87, -1, 89, 90, -1, 92, 93, -1, 95, 96,
+      97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
+      -1, -1, 109, -1, -1, -1, -1, -1, -1, -1,
+       3, 4, 5, -1, 7, 122, 123, 124, 11, 12,
+      -1, -1, -1, 16, -1, 18, 19, 20, 21, 22,
+      23, 24, -1, -1, -1, -1, 143, 30, 31, 32,
+      33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
+      -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
+      53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
+      63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
+      93, -1, 95, 96, 97, 98, 99, 100, 101, 102,
+     103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 3, 4, 5, -1, 7, 122,
+     123, 124, 11, 12, -1, -1, -1, 16, -1, 18,
+      19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
+     143, 30, 31, 32, 33, 34, 35, 36, -1, -1,
+      39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
+      49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
+      59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
+      89, 90, -1, 92, 93, -1, 95, 96, 97, 98,
+      99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 122, 123, 124, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 143, 3, 4, 5, 6, 7,
+       8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+      18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
+      -1, -1, 30, 31, 32, 33, 34, 35, 36, 37,
+      38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
+      48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+      -1, -1, -1, -1, -1, -1, -1, -1, 66, 67,
+      68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
+      78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
+     118, 119, 120, 121, -1, 123, 124, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 142, 3, 4, 5, 6, 7,
+       8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+      18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
+      -1, -1, 30, 31, 32, 33, 34, 35, 36, 37,
+      38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
+      48, 49, 50, 51, 52, 53, 54, -1, 56, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, 66, 67,
+      68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
+      78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
+      98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
+     118, 119, 120, 121, -1, 123, 124, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 142, 3, 4, 5, 6, 7,
+       8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+      18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
+      -1, -1, 30, 31, 32, 33, 34, 35, 36, 37,
+      38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
+      48, 49, 50, 51, 52, 53, -1, -1, 56, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, 66, 67,
+      68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
+      78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
+      98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
+     118, 119, 120, 121, -1, 123, 124, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 142, 3, 4, 5, 6, 7,
+       8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+      18, 19, 20, 21, 22, 23, 24, 25, 26, -1,
+      -1, -1, 30, 31, 32, 33, 34, 35, 36, 37,
+      38, 39, -1, -1, -1, -1, -1, 45, 46, 47,
+      48, 49, 50, 51, 52, 53, -1, -1, 56, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, 66, 67,
+      68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
+      78, -1, -1, 81, 82, 83, 84, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 95, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 112, 113, 114, 115, 116, 117,
+     118, 119, 120, 121, -1, 123, 124, -1, -1, -1,
+       3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
+      -1, -1, -1, 16, 142, 18, 19, 20, 21, 22,
+      23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
+      33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
+      -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
+      53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
+      63, 64, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
+      93, -1, -1, -1, 97, 98, 99, 100, 101, 102,
+     103, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, 3, 4, 5, -1, 7, -1, -1, 122,
+      11, 12, -1, -1, -1, 16, -1, 18, 19, 20,
+      21, 22, 23, 24, -1, -1, -1, -1, 141, 30,
+      31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
+      -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
+      51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
+      -1, 62, 63, 64, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
+      -1, 92, 93, -1, -1, -1, 97, 98, 99, 100,
+     101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 3, 4, 5, 6, 7, -1,
+      -1, 122, 11, 12, -1, -1, -1, 16, -1, 18,
+      19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
+     141, 30, 31, 32, 33, 34, 35, 36, -1, -1,
+      39, -1, -1, -1, -1, -1, 45, 46, 47, 48,
+      49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
+      59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
+      89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
+      99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
+      -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
+      -1, 11, 12, 122, 123, 124, 16, -1, 18, 19,
+      20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
+      30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+      -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
+      50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+      60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
+      90, -1, 92, 93, -1, 95, 96, 97, 98, 99,
+     100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
+      -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
+      11, 12, 122, 123, 124, 16, -1, 18, 19, 20,
+      21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
+      31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
+      -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
+      51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
+      -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
+      -1, 92, 93, -1, 95, 96, 97, 98, 99, 100,
+     101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
+      -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
+      12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
+      22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
+      32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
+      -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
+      52, 53, 54, 55, 56, 57, 58, 59, 60, -1,
+      62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
+      92, 93, -1, 95, -1, 97, 98, 99, 100, 101,
+     102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
+       3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
+     122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
+      23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
+      33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
+      -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
+      53, 54, 55, 56, 57, 58, 59, 60, -1, 62,
+      63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
+      93, -1, -1, 96, 97, 98, 99, 100, 101, 102,
+     103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
+       4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
+     123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
+      24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
+      34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
+      -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
+      54, 55, 56, 57, 58, 59, 60, -1, 62, 63,
+      64, -1, 66, 67, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
+      -1, 95, -1, 97, 98, 99, 100, 101, 102, 103,
+      -1, -1, -1, -1, -1, -1, -1, -1, 3, 4,
+       5, -1, 7, -1, -1, -1, 11, 12, 122, 123,
+     124, 16, -1, 18, 19, 20, 21, 22, 23, 24,
+      -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
+      35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
+      -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
+      55, 56, 57, 58, 59, 60, -1, 62, 63, 64,
+      -1, 66, 67, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 86, -1, -1, 89, 90, -1, 92, 93, -1,
+      -1, -1, 97, 98, 99, 100, 101, 102, 103, -1,
+      -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
+      -1, 7, -1, -1, -1, 11, 12, 122, 123, 124,
+      16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
+      -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
+      36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
+      46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
+      56, 57, -1, 59, 60, -1, 62, 63, 64, -1,
+      66, 67, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      86, -1, -1, 89, 90, -1, 92, 93, -1, 95,
+      -1, 97, 98, 99, 100, 101, 102, 103, -1, -1,
+      -1, -1, -1, -1, -1, -1, 3, 4, 5, -1,
+       7, -1, -1, -1, 11, 12, 122, 123, 124, 16,
+      -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
+      -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
+      -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
+      -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
+      57, -1, 59, 60, -1, 62, 63, 64, -1, 66,
+      67, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 86,
+      -1, -1, 89, 90, -1, 92, 93, -1, 95, -1,
+      97, 98, 99, 100, 101, 102, 103, -1, -1, -1,
+      -1, -1, -1, -1, -1, 3, 4, 5, -1, 7,
+      -1, -1, -1, 11, 12, 122, 123, 124, 16, -1,
+      18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
+      -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
+      -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
+      -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+      -1, 59, 60, -1, 62, 63, 64, -1, 66, 67,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, 86, -1,
+      -1, 89, 90, -1, 92, 93, -1, 95, -1, 97,
+      98, 99, 100, 101, 102, 103, -1, -1, -1, -1,
+      -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
+      -1, -1, 11, 12, 122, 123, 124, 16, -1, 18,
+      19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
+      -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
+      39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
+      49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
+      59, 60, -1, 62, 63, 64, -1, 66, 67, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
+      89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
+      99, 100, 101, 102, 103, -1, -1, -1, -1, -1,
+      -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
+      -1, 11, 12, 122, 123, 124, 16, -1, 18, 19,
+      20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
+      30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
+      -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
+      50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
+      60, -1, 62, 63, 64, -1, 66, 67, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 86, -1, -1, 89,
+      90, -1, 92, 93, -1, 95, -1, 97, 98, 99,
+     100, 101, 102, 103, -1, -1, -1, -1, -1, -1,
+      -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
+      11, 12, 122, 123, 124, 16, -1, 18, 19, 20,
+      21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
+      31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
+      -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
+      51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
+      -1, 62, 63, 64, -1, 66, 67, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 86, -1, -1, 89, 90,
+      -1, 92, 93, -1, -1, -1, 97, 98, 99, 100,
+     101, 102, 103, -1, -1, -1, -1, -1, -1, -1,
+      -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
+      12, 122, 123, 124, 16, -1, 18, 19, 20, 21,
+      22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
+      32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
+      -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
+      52, 53, 54, 55, 56, 57, -1, 59, 60, -1,
+      62, 63, 64, -1, 66, 67, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 86, -1, -1, 89, 90, -1,
+      92, 93, -1, -1, -1, 97, 98, 99, 100, 101,
+     102, 103, -1, -1, -1, -1, -1, -1, -1, -1,
+       3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
+     122, 123, 124, 16, -1, 18, 19, 20, 21, 22,
+      23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
+      33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
+      -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
+      53, 54, 55, 56, 57, -1, 59, 60, -1, 62,
+      63, 64, -1, 66, 67, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 86, -1, -1, 89, 90, -1, 92,
+      93, -1, -1, -1, 97, 98, 99, 100, 101, 102,
+     103, -1, -1, -1, -1, -1, -1, -1, -1, 3,
+       4, 5, -1, 7, -1, -1, -1, 11, 12, 122,
+     123, 124, 16, -1, 18, 19, 20, 21, 22, 23,
+      24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
+      34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
+      -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
+      54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
+      64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
+      -1, 95, -1, 97, 98, 99, 100, 101, 102, 103,
+      -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
+      -1, -1, 11, 12, -1, -1, -1, 16, 122, 18,
+      19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
+      -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
+      39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
+      49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
+      59, 60, -1, 62, 63, 64, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
+      89, 90, -1, 92, 93, -1, 95, -1, 97, 98,
+      99, 100, 101, 102, 103, -1, -1, -1, -1, 3,
+       4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
+      -1, -1, 16, 122, 18, 19, 20, 21, 22, 23,
+      24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
+      34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
+      -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
+      54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
+      64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 83,
+      -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
+      -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
+      -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
+      -1, -1, 11, 12, -1, -1, -1, 16, 122, 18,
+      19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
+      -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
+      39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
+      49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
+      59, 60, -1, 62, 63, 64, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
+      89, 90, -1, 92, 93, -1, -1, -1, 97, 98,
+      99, 100, 101, 102, 103, -1, -1, -1, -1, 3,
+       4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
+      -1, -1, 16, 122, 18, 19, 20, 21, 22, 23,
+      24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
+      34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
+      -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
+      54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
+      64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
+      -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
+      -1, -1, -1, -1, 3, 4, 5, -1, 7, -1,
+      -1, -1, 11, 12, -1, -1, -1, 16, 122, 18,
+      19, 20, 21, 22, 23, 24, -1, -1, -1, -1,
+      -1, 30, 31, 32, 33, 34, 35, 36, -1, -1,
+      39, -1, -1, -1, -1, -1, -1, 46, -1, -1,
+      49, 50, 51, 52, 53, 54, 55, 56, 57, -1,
+      59, 60, -1, 62, 63, 64, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 86, -1, -1,
+      89, 90, -1, 92, 93, -1, -1, -1, 97, 98,
+      99, 100, 101, 102, 103, -1, -1, -1, -1, 3,
+       4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
+      -1, -1, 16, 122, 18, 19, 20, 21, 22, 23,
+      24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
+      34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
+      -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
+      54, 55, 56, 57, -1, 59, 60, -1, 62, 63,
+      64, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, 86, -1, -1, 89, 90, -1, 92, 93,
+      -1, -1, -1, 97, 98, 99, 100, 101, 102, 103,
+      -1, -1, -1, -1, -1, 52, 53, -1, -1, 56,
+      -1, -1, -1, -1, -1, -1, -1, -1, 122, 66,
+      67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
+      77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, 95, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
+     117, 118, 119, 120, 121, -1, 123, 124, -1, -1,
+      -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
+      -1, -1, -1, -1, -1, 142, 143, 66, 67, 68,
+      69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
+      -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 95, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 112, 113, 114, 115, 116, 117, 118,
+     119, 120, 121, -1, 123, 124, -1, -1, -1, -1,
+      -1, 52, 53, -1, -1, 56, -1, -1, -1, -1,
+      -1, -1, -1, 142, 143, 66, 67, 68, 69, 70,
+      71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
+      81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 95, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
+     121, -1, 123, 124, -1, -1, -1, -1, -1, 52,
+      53, -1, -1, 56, -1, -1, -1, -1, -1, -1,
+      -1, 142, 143, 66, 67, 68, 69, 70, 71, 72,
+      73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
+      83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, 95, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 112,
+     113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
+     123, 124, -1, -1, -1, -1, -1, 52, 53, -1,
+      -1, 56, -1, -1, -1, -1, -1, -1, -1, 142,
+     143, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+      -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
+     115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
+      -1, -1, -1, -1, -1, 52, 53, -1, -1, 56,
+      -1, -1, -1, -1, -1, -1, -1, 142, 143, 66,
+      67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
+      77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, 95, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
+     117, 118, 119, 120, 121, -1, 123, 124, -1, -1,
+      -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
+      -1, -1, -1, -1, -1, 142, 143, 66, 67, 68,
+      69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
+      -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 95, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 112, 113, 114, 115, 116, 117, 118,
+     119, 120, 121, -1, 123, 124, -1, -1, -1, -1,
+      -1, 52, 53, -1, -1, 56, -1, -1, -1, -1,
+      -1, -1, -1, 142, 143, 66, 67, 68, 69, 70,
+      71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
+      81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 95, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
+     121, -1, 123, 124, -1, -1, -1, -1, -1, 52,
+      53, -1, -1, 56, -1, -1, -1, -1, -1, -1,
+      -1, 142, 143, 66, 67, 68, 69, 70, 71, 72,
+      73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
+      83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, 95, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 112,
+     113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
+     123, 124, -1, -1, -1, -1, -1, 52, 53, -1,
+      -1, 56, -1, -1, -1, -1, -1, -1, -1, 142,
+     143, 66, 67, 68, 69, 70, 71, 72, 73, 74,
+      -1, -1, 77, 78, -1, -1, 81, 82, 83, 84,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      95, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, 112, 113, 114,
+     115, 116, 117, 118, 119, 120, 121, -1, 123, 124,
+      -1, -1, -1, -1, -1, 52, 53, -1, -1, 56,
+      -1, -1, -1, -1, -1, -1, -1, 142, 143, 66,
+      67, 68, 69, 70, 71, 72, 73, 74, -1, -1,
+      77, 78, -1, -1, 81, 82, 83, 84, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, 95, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, 112, 113, 114, 115, 116,
+     117, 118, 119, 120, 121, -1, 123, 124, -1, -1,
+      -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
+      -1, -1, -1, -1, -1, 142, 143, 66, 67, 68,
+      69, 70, 71, 72, 73, 74, -1, -1, 77, 78,
+      -1, -1, 81, 82, 83, 84, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, 95, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, 112, 113, 114, 115, 116, 117, 118,
+     119, 120, 121, -1, 123, 124, -1, -1, -1, -1,
+      -1, 52, 53, -1, -1, 56, -1, -1, -1, -1,
+      -1, -1, -1, 142, 143, 66, 67, 68, 69, 70,
+      71, 72, 73, 74, -1, -1, 77, 78, -1, -1,
+      81, 82, 83, 84, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 95, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, 112, 113, 114, 115, 116, 117, 118, 119, 120,
+     121, -1, 123, 124, -1, -1, -1, -1, -1, 52,
+      53, -1, -1, 56, -1, -1, -1, -1, -1, -1,
+      -1, 142, 143, 66, 67, 68, 69, 70, 71, 72,
+      73, 74, -1, -1, 77, 78, -1, -1, 81, 82,
+      83, 84, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, 95, -1, -1, -1, -1, -1, 44, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, 112,
+     113, 114, 115, 116, 117, 118, 119, 120, 121, -1,
+     123, 124, 68, 69, 70, 71, 72, 73, 74, 75,
+      76, 77, 78, 79, 80, -1, -1, 83, 84, 142,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+      -1, -1, -1, -1, 110, -1, 112, 113, 114, 115,
+     116, 117, 118, 119, 120, 121
+};
+static const yytype_uint16 yystos[] =
+{
+       0, 150, 151, 0, 1, 3, 4, 5, 6, 7,
+      11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
+      30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
+      47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+      57, 59, 60, 62, 63, 64, 66, 67, 86, 89,
+      90, 92, 93, 95, 97, 98, 99, 100, 101, 102,
+     103, 122, 123, 124, 153, 154, 155, 158, 160, 161,
+     164, 165, 167, 168, 169, 171, 172, 182, 196, 213,
+     214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
+     245, 246, 256, 257, 258, 259, 260, 261, 262, 265,
+     273, 275, 276, 277, 278, 279, 280, 303, 314, 155,
+       3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+      13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+      23, 24, 25, 26, 30, 31, 32, 33, 34, 35,
+      36, 37, 38, 39, 45, 46, 47, 48, 49, 50,
+      51, 52, 53, 56, 66, 67, 68, 69, 70, 71,
+      72, 73, 74, 77, 78, 81, 82, 83, 84, 95,
+     112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+     123, 124, 142, 175, 176, 177, 178, 180, 181, 273,
+     275, 21, 22, 30, 39, 58, 86, 89, 95, 96,
+     123, 164, 172, 182, 184, 189, 192, 194, 213, 277,
+     279, 280, 301, 302, 189, 189, 143, 190, 191, 143,
+     186, 190, 143, 148, 308, 54, 177, 308, 157, 137,
+      31, 32, 182, 213, 303, 182, 56, 89, 153, 166,
+     167, 158, 185, 194, 301, 314, 184, 300, 301, 314,
+      46, 86, 122, 141, 171, 196, 213, 277, 280, 239,
+     240, 54, 55, 57, 175, 268, 274, 267, 268, 268,
+     147, 263, 147, 266, 59, 60, 160, 182, 182, 146,
+     148, 307, 312, 313, 40, 41, 42, 43, 44, 37,
+      38, 28, 243, 109, 141, 89, 95, 168, 109, 68,
+      69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+      79, 80, 83, 84, 110, 112, 113, 114, 115, 116,
+     117, 118, 119, 120, 121, 85, 139, 140, 197, 158,
+     159, 159, 200, 202, 159, 307, 313, 86, 165, 172,
+     213, 229, 277, 280, 52, 56, 83, 86, 173, 174,
+     213, 277, 280, 174, 33, 34, 35, 36, 49, 50,
+      51, 52, 56, 143, 175, 278, 298, 85, 140, 26,
+     137, 247, 259, 87, 87, 186, 190, 247, 141, 184,
+      56, 184, 184, 109, 88, 141, 193, 314, 85, 139,
+     140, 87, 87, 141, 193, 189, 308, 309, 189, 188,
+     189, 314, 158, 309, 158, 54, 63, 64, 156, 143,
+     183, 137, 153, 85, 140, 87, 166, 144, 309, 198,
+     145, 141, 148, 311, 141, 311, 138, 311, 308, 56,
+      59, 60, 168, 170, 141, 85, 139, 140, 52, 54,
+      55, 56, 57, 89, 95, 96, 116, 119, 143, 241,
+     284, 285, 286, 287, 288, 289, 292, 293, 294, 295,
+     296, 61, 104, 105, 106, 269, 106, 269, 106, 65,
+     106, 106, 264, 269, 106, 61, 106, 68, 68, 146,
+     155, 159, 159, 159, 159, 155, 158, 158, 244, 95,
+     160, 184, 194, 195, 166, 141, 171, 141, 160, 182,
+     184, 195, 182, 182, 182, 182, 182, 182, 182, 182,
+     182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
+     182, 182, 182, 182, 182, 182, 182, 182, 52, 53,
+      56, 180, 186, 304, 305, 188, 52, 53, 56, 180,
+     186, 304, 152, 153, 13, 225, 312, 225, 159, 159,
+     307, 17, 250, 56, 85, 139, 140, 25, 158, 52,
+      56, 173, 1, 113, 281, 312, 85, 139, 140, 209,
+     299, 210, 85, 140, 306, 52, 56, 304, 304, 249,
+     248, 160, 182, 160, 182, 94, 162, 179, 182, 184,
+      95, 184, 192, 301, 52, 56, 188, 52, 56, 302,
+     309, 144, 309, 309, 177, 199, 182, 153, 138, 304,
+     304, 182, 309, 309, 301, 141, 170, 52, 56, 188,
+      52, 56, 109, 52, 89, 95, 230, 231, 232, 286,
+     284, 29, 107, 242, 141, 297, 314, 141, 297, 52,
+     141, 297, 52, 271, 270, 147, 269, 147, 182, 182,
+      76, 114, 234, 235, 314, 184, 141, 309, 170, 141,
+      44, 308, 87, 87, 186, 190, 308, 310, 87, 87,
+     186, 187, 190, 314, 10, 224, 8, 252, 314, 153,
+      13, 153, 27, 226, 312, 226, 250, 194, 224, 52,
+      56, 188, 52, 56, 204, 207, 312, 282, 206, 52,
+      56, 173, 188, 152, 158, 143, 283, 284, 211, 187,
+     190, 187, 190, 234, 234, 44, 163, 177, 184, 193,
+      87, 310, 87, 87, 158, 138, 311, 168, 310, 184,
+     232, 141, 286, 141, 309, 146, 236, 314, 153, 153,
+     287, 292, 294, 296, 288, 289, 294, 288, 153, 54,
+      55, 57, 272, 280, 52, 233, 236, 288, 290, 291,
+     294, 296, 153, 95, 184, 170, 182, 111, 160, 182,
+     182, 162, 145, 87, 160, 182, 160, 182, 162, 184,
+     195, 253, 314, 15, 228, 314, 14, 227, 228, 228,
+     201, 203, 224, 141, 225, 310, 159, 312, 159, 152,
+     310, 224, 309, 284, 152, 312, 175, 153, 153, 182,
+     234, 87, 309, 309, 231, 141, 95, 230, 52, 237,
+     238, 285, 309, 10, 138, 141, 297, 141, 297, 141,
+     297, 141, 297, 297, 138, 109, 236, 114, 141, 297,
+     141, 297, 141, 297, 10, 184, 182, 160, 182, 88,
+     254, 314, 153, 9, 255, 314, 159, 224, 224, 153,
+     153, 184, 153, 226, 208, 312, 224, 309, 224, 212,
+      10, 138, 153, 141, 231, 141, 286, 141, 288, 294,
+     288, 288, 86, 213, 114, 291, 294, 288, 290, 294,
+     288, 86, 172, 213, 277, 280, 225, 153, 225, 224,
+     224, 228, 250, 251, 205, 152, 283, 138, 231, 141,
+     238, 297, 141, 297, 297, 297, 56, 85, 141, 297,
+     141, 297, 297, 141, 297, 297, 56, 85, 139, 140,
+     153, 153, 153, 224, 152, 231, 288, 52, 56, 288,
+     294, 288, 288, 52, 56, 188, 52, 56, 252, 227,
+     224, 224, 297, 297, 141, 297, 297, 297, 310, 288,
+     297
+};
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
+{
+  if (!yyvaluep)
+    return;
+  ((void) (parser));
+  ((void) (yyoutput));
+  switch (yytype)
+    {
+      default:
+ break;
+    }
+}
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
+{
+  if (yytype < 149)
+    fprintf (yyoutput, "token %s (", yytname[yytype]);
+  else
+    fprintf (yyoutput, "nterm %s (", yytname[yytype]);
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
+  fprintf (yyoutput, ")");
+}
+static void
+yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
+{
+  fprintf (stderr, "Stack now");
+  for (; bottom <= top; ++bottom)
+    fprintf (stderr, " %d", *bottom);
+  fprintf (stderr, "\n");
+}
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  fprintf (stderr, "Reducing stack by rule %d (line %lu):\n",
+      yyrule - 1, yylno);
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+         &(yyvsp[(yyi + 1) - (yynrhs)])
+                  , parser);
+      fprintf (stderr, "\n");
+    }
+}
+static unsigned int
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      unsigned int yyn = 0;
+      char const *yyp = yystr;
+      for (;;)
+ switch (*++yyp)
+   {
+   case '\'':
+   case ',':
+     goto do_not_strip_quotes;
+   case '\\':
+     if (*++yyp != '\\')
+       goto do_not_strip_quotes;
+   default:
+     if (yyres)
+       yyres[yyn] = *yyp;
+     yyn++;
+     break;
+   case '"':
+     if (yyres)
+       yyres[yyn] = '\0';
+     return yyn;
+   }
+    do_not_strip_quotes: ;
+    }
+  if (! yyres)
+    return strlen (yystr);
+  return __builtin_stpcpy (yyres, yystr) - yyres;
+}
+static unsigned int
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+  if (! (-747 < yyn && yyn <= 10225))
+    return 0;
+  else
+    {
+      int yytype = ((unsigned int) (yychar) <= 376 ? yytranslate[yychar] : 2);
+      unsigned int yysize0 = yytnamerr (0, yytname[yytype]);
+      unsigned int yysize = yysize0;
+      unsigned int yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+      + sizeof yyexpecting - 1
+      + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+         * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+      int yychecklim = 10225 - yyn + 1;
+      int yyxend = yychecklim < 149 ? yychecklim : 149;
+      int yycount = 1;
+      yyarg[0] = yytname[yytype];
+      yyfmt = __builtin_stpcpy (yyformat, yyunexpected);
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != 1)
+   {
+     if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+       {
+  yycount = 1;
+  yysize = yysize0;
+  yyformat[sizeof yyunexpected - 1] = '\0';
+  break;
+       }
+     yyarg[yycount++] = yytname[yyx];
+     yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+     yysize_overflow |= (yysize1 < yysize);
+     yysize = yysize1;
+     yyfmt = __builtin_stpcpy (yyfmt, yyprefix);
+     yyprefix = yyor;
+   }
+      yyf = yyformat;
+      yysize1 = yysize + strlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+      if (yysize_overflow)
+ return ((unsigned int) -1);
+      if (yyresult)
+ {
+   char *yyp = yyresult;
+   int yyi = 0;
+   while ((*yyp = *yyf) != '\0')
+     {
+       if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+  {
+    yyp += yytnamerr (yyp, yyarg[yyi++]);
+    yyf += 2;
+  }
+       else
+  {
+    yyp++;
+    yyf++;
+  }
+     }
+ }
+      return yysize;
+    }
+}
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
+{
+  ((void) (yyvaluep));
+  ((void) (parser));
+  if (!yymsg)
+    yymsg = "Deleting";
+  do { if ((parser->parser_yydebug)) { fprintf (stderr, "%s ", yymsg); yy_symbol_print (stderr, yytype, yyvaluep, parser); fprintf (stderr, "\n"); } } while ((0));
+  switch (yytype)
+    {
+      default:
+ break;
+    }
+}
+int ruby_yyparse (struct parser_params *parser);
+int
+ruby_yyparse (struct parser_params *parser)
+{
+int yychar;
+YYSTYPE yylval;
+int yynerrs;
+  int yystate;
+  int yyn;
+  int yyresult;
+  int yyerrstatus;
+  int yytoken = 0;
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  unsigned int yymsg_alloc = sizeof yymsgbuf;
+  yytype_int16 yyssa[200];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+  YYSTYPE yyvsa[200];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+  unsigned int yystacksize = 200;
+  YYSTYPE yyval;
+  int yylen = 0;
+  do { if ((parser->parser_yydebug)) fprintf (stderr, "Starting parse\n"); } while ((0));
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = (-2);
+  yyssp = yyss;
+  yyvsp = yyvs;
+  goto yysetstate;
+ yynewstate:
+  yyssp++;
+ yysetstate:
+  *yyssp = yystate;
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      unsigned int yysize = yyssp - yyss + 1;
+      if (10000 <= yystacksize)
+ goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (10000 < yystacksize)
+ yystacksize = 10000;
+      {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+   (union yyalloc *) rb_parser_malloc(parser, ((yystacksize) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) + (sizeof (union yyalloc) - 1)));
+ if (! yyptr)
+   goto yyexhaustedlab;
+ do { unsigned int yynewbytes; __builtin_memcpy (&yyptr->yyss, yyss, (yysize) * sizeof (*(yyss))); yyss = &yyptr->yyss; yynewbytes = yystacksize * sizeof (*yyss) + (sizeof (union yyalloc) - 1); yyptr += yynewbytes / sizeof (*yyptr); } while ((0));
+ do { unsigned int yynewbytes; __builtin_memcpy (&yyptr->yyvs, yyvs, (yysize) * sizeof (*(yyvs))); yyvs = &yyptr->yyvs; yynewbytes = yystacksize * sizeof (*yyvs) + (sizeof (union yyalloc) - 1); yyptr += yynewbytes / sizeof (*yyptr); } while ((0));
+ if (yyss1 != yyssa)
+   rb_parser_free(parser, yyss1);
+      }
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+      do { if ((parser->parser_yydebug)) fprintf (stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize); } while ((0));
+      if (yyss + yystacksize - 1 <= yyssp)
+ goto yyabortlab;
+    }
+  do { if ((parser->parser_yydebug)) fprintf (stderr, "Entering state %d\n", yystate); } while ((0));
+  goto yybackup;
+yybackup:
+  yyn = yypact[yystate];
+  if (yyn == -747)
+    goto yydefault;
+  if (yychar == (-2))
+    {
+      do { if ((parser->parser_yydebug)) fprintf (stderr, "Reading a token: "); } while ((0));
+      yychar = yylex (&yylval, parser);
+    }
+  if (yychar <= 0)
+    {
+      yychar = yytoken = 0;
+      do { if ((parser->parser_yydebug)) fprintf (stderr, "Now at end of input.\n"); } while ((0));
+    }
+  else
+    {
+      yytoken = ((unsigned int) (yychar) <= 376 ? yytranslate[yychar] : 2);
+      do { if ((parser->parser_yydebug)) { fprintf (stderr, "%s ", "Next token is"); yy_symbol_print (stderr, yytoken, &yylval, parser); fprintf (stderr, "\n"); } } while ((0));
+    }
+  yyn += yytoken;
+  if (yyn < 0 || 10225 < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == -555)
+ goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  if (yyn == 3)
+    goto yyacceptlab;
+  if (yyerrstatus)
+    yyerrstatus--;
+  do { if ((parser->parser_yydebug)) { fprintf (stderr, "%s ", "Shifting"); yy_symbol_print (stderr, yytoken, &yylval, parser); fprintf (stderr, "\n"); } } while ((0));
+  if (yychar != 0)
+    yychar = (-2);
+  yystate = yyn;
+  *++yyvsp = yylval;
+  goto yynewstate;
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+yyreduce:
+  yylen = yyr2[yyn];
+  yyval = yyvsp[1-yylen];
+  do { if ((parser->parser_yydebug)) yy_reduce_print (yyvsp, yyn, parser); } while ((0));
+  switch (yyn)
+    {
+        case 2:
+    {
+   (parser->parser_lex_state) = EXPR_BEG;
+   local_push_gen(parser,(parser->parser_compile_for_eval));
+      ;}
+    break;
+  case 3:
+    {
+   if ((yyvsp[(2) - (2)].node) && !(parser->parser_compile_for_eval)) {
+       if (((int) (((((struct RNode*)((yyvsp[(2) - (2)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) != NODE_BLOCK) void_expr_gen(parser, (((yyvsp[(2) - (2)].node)) = remove_begin((yyvsp[(2) - (2)].node))));
+       else {
+    NODE *node = (yyvsp[(2) - (2)].node);
+    while (node->u3.node) {
+        node = node->u3.node;
+    }
+    void_expr_gen(parser, ((node->u1.node) = remove_begin(node->u1.node)));
+       }
+   }
+   (parser->parser_eval_tree) = node_newnode(parser, (NODE_SCOPE), (VALUE)(local_tbl_gen(parser)), (VALUE)(block_append_gen(parser,(parser->parser_eval_tree),(yyvsp[(2) - (2)].node))), (VALUE)(0));
+   local_pop_gen(parser);
+      ;}
+    break;
+  case 4:
+    {
+   (yyval.node) = (yyvsp[(1) - (4)].node);
+   if ((yyvsp[(2) - (4)].node)) {
+       (yyval.node) = node_newnode(parser, (NODE_RESCUE), (VALUE)((yyvsp[(1) - (4)].node)), (VALUE)((yyvsp[(2) - (4)].node)), (VALUE)((yyvsp[(3) - (4)].node)));
+   }
+   else if ((yyvsp[(3) - (4)].node)) {
+       rb_compile_warn((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "else without rescue is useless");
+       (yyval.node) = block_append_gen(parser,(yyval.node),(yyvsp[(3) - (4)].node));
+   }
+   if ((yyvsp[(4) - (4)].node)) {
+       if ((yyval.node)) {
+    (yyval.node) = node_newnode(parser, (NODE_ENSURE), (VALUE)((yyval.node)), (VALUE)(0), (VALUE)((yyvsp[(4) - (4)].node)));
+       }
+       else {
+    (yyval.node) = block_append_gen(parser,(yyvsp[(4) - (4)].node),node_newnode(parser, (NODE_NIL), (VALUE)(0), (VALUE)(0), (VALUE)(0)));
+       }
+   }
+   fixpos((yyval.node), (yyvsp[(1) - (4)].node));
+      ;}
+    break;
+  case 5:
+    {
+   void_stmts_gen(parser, (yyvsp[(1) - (2)].node));
+   fixup_nodes(&(parser->parser_deferred_nodes));
+   (yyval.node) = (yyvsp[(1) - (2)].node);
+      ;}
+    break;
+  case 6:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 7:
+    {
+   (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
+      ;}
+    break;
+  case 8:
+    {
+   (yyval.node) = block_append_gen(parser,(yyvsp[(1) - (3)].node),newline_node((yyvsp[(3) - (3)].node)));
+      ;}
+    break;
+  case 9:
+    {
+   (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 10:
+    {(parser->parser_lex_state) = EXPR_FNAME;;}
+    break;
+  case 11:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ALIAS), (VALUE)((yyvsp[(2) - (4)].node)), (VALUE)((yyvsp[(4) - (4)].node)), (VALUE)(0));
+      ;}
+    break;
+  case 12:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_VALIAS), (VALUE)((yyvsp[(2) - (3)].id)), (VALUE)((yyvsp[(3) - (3)].id)), (VALUE)(0));
+      ;}
+    break;
+  case 13:
+    {
+   char buf[3];
+   sprintf(buf, "$%c", (char)(yyvsp[(3) - (3)].node)->u2.argc);
+   (yyval.node) = node_newnode(parser, (NODE_VALIAS), (VALUE)((yyvsp[(2) - (3)].id)), (VALUE)((__builtin_constant_p(buf) ? __extension__ (rb_intern2(buf, strlen(buf))) : (rb_intern)(buf))), (VALUE)(0));
+      ;}
+    break;
+  case 14:
+    {
+   parser_yyerror(parser, "can't make alias for the number variables");
+   (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 15:
+    {
+   (yyval.node) = (yyvsp[(2) - (2)].node);
+      ;}
+    break;
+  case 16:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_IF), (VALUE)(cond_gen(parser, (yyvsp[(3) - (3)].node))), (VALUE)(remove_begin((yyvsp[(1) - (3)].node))), (VALUE)(0));
+   fixpos((yyval.node), (yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 17:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_IF), (VALUE)(cond_gen(parser, (yyvsp[(3) - (3)].node))), (VALUE)(0), (VALUE)(remove_begin((yyvsp[(1) - (3)].node))));
+   fixpos((yyval.node), (yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 18:
+    {
+   if ((yyvsp[(1) - (3)].node) && ((int) (((((struct RNode*)((yyvsp[(1) - (3)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_BEGIN) {
+       (yyval.node) = node_newnode(parser, (NODE_WHILE), (VALUE)(cond_gen(parser, (yyvsp[(3) - (3)].node))), (VALUE)((yyvsp[(1) - (3)].node)->u2.node), (VALUE)(0));
+   }
+   else {
+       (yyval.node) = node_newnode(parser, (NODE_WHILE), (VALUE)(cond_gen(parser, (yyvsp[(3) - (3)].node))), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)(1));
+   }
+      ;}
+    break;
+  case 19:
+    {
+   if ((yyvsp[(1) - (3)].node) && ((int) (((((struct RNode*)((yyvsp[(1) - (3)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_BEGIN) {
+       (yyval.node) = node_newnode(parser, (NODE_UNTIL), (VALUE)(cond_gen(parser, (yyvsp[(3) - (3)].node))), (VALUE)((yyvsp[(1) - (3)].node)->u2.node), (VALUE)(0));
+   }
+   else {
+       (yyval.node) = node_newnode(parser, (NODE_UNTIL), (VALUE)(cond_gen(parser, (yyvsp[(3) - (3)].node))), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)(1));
+   }
+      ;}
+    break;
+  case 20:
+    {
+   NODE *resq = node_newnode(parser, (NODE_RESBODY), (VALUE)(0), (VALUE)(remove_begin((yyvsp[(3) - (3)].node))), (VALUE)(0));
+   (yyval.node) = node_newnode(parser, (NODE_RESCUE), (VALUE)(remove_begin((yyvsp[(1) - (3)].node))), (VALUE)(resq), (VALUE)(0));
+      ;}
+    break;
+  case 21:
+    {
+   if ((parser->parser_in_def) || (parser->parser_in_single)) {
+       parser_yyerror(parser, "BEGIN in method");
+   }
+      ;}
+    break;
+  case 22:
+    {
+   (parser->parser_eval_tree_begin) = block_append_gen(parser,(parser->parser_eval_tree_begin),(yyvsp[(4) - (5)].node));
+   (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 23:
+    {
+   if ((parser->parser_in_def) || (parser->parser_in_single)) {
+       rb_compile_warn((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "END in method; use at_exit");
+   }
+   (yyval.node) = node_newnode(parser, (NODE_POSTEXE), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_SCOPE), (VALUE)(0), (VALUE)((yyvsp[(3) - (4)].node)), (VALUE)(0))), (VALUE)(0));
+      ;}
+    break;
+  case 24:
+    {
+   value_expr_gen(parser, ((yyvsp[(3) - (3)].node)) = remove_begin((yyvsp[(3) - (3)].node)));
+   (yyval.node) = node_assign_gen(parser, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 25:
+    {
+   value_expr_gen(parser, ((yyvsp[(3) - (3)].node)) = remove_begin((yyvsp[(3) - (3)].node)));
+   (yyvsp[(1) - (3)].node)->u2.node = (yyvsp[(3) - (3)].node);
+   (yyval.node) = (yyvsp[(1) - (3)].node);
+      ;}
+    break;
+  case 26:
+    {
+   value_expr_gen(parser, ((yyvsp[(3) - (3)].node)) = remove_begin((yyvsp[(3) - (3)].node)));
+   if ((yyvsp[(1) - (3)].node)) {
+       ID vid = (yyvsp[(1) - (3)].node)->u1.id;
+       if ((yyvsp[(2) - (3)].id) == 331) {
+    (yyvsp[(1) - (3)].node)->u2.node = (yyvsp[(3) - (3)].node);
+    (yyval.node) = node_newnode(parser, (NODE_OP_ASGN_OR), (VALUE)(gettable_gen(parser,vid)), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)(0));
+    if (((((vid)>376)) && (((vid)&0x07) == 0x03 || ((vid)&0x07) == 0x01 || ((vid)&0x07) == 0x06))) {
+        (yyval.node)->u3.id = vid;
+    }
+       }
+       else if ((yyvsp[(2) - (3)].id) == 330) {
+    (yyvsp[(1) - (3)].node)->u2.node = (yyvsp[(3) - (3)].node);
+    (yyval.node) = node_newnode(parser, (NODE_OP_ASGN_AND), (VALUE)(gettable_gen(parser,vid)), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)(0));
+       }
+       else {
+    (yyval.node) = (yyvsp[(1) - (3)].node);
+    (yyval.node)->u2.node = node_newnode(parser, (NODE_CALL), (VALUE)(gettable_gen(parser,vid)), (VALUE)((yyvsp[(2) - (3)].id)), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)((yyvsp[(3) - (3)].node)), (VALUE)(1), (VALUE)(0))));
+       }
+   }
+   else {
+       (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+   }
+      ;}
+    break;
+  case 27:
+    {
+   NODE *args;
+   value_expr_gen(parser, ((yyvsp[(6) - (6)].node)) = remove_begin((yyvsp[(6) - (6)].node)));
+   if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = node_newnode(parser, (NODE_ZARRAY), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+   args = arg_concat_gen(parser,(yyvsp[(6) - (6)].node),(yyvsp[(3) - (6)].node));
+   if ((yyvsp[(5) - (6)].id) == 331) {
+       (yyvsp[(5) - (6)].id) = 0;
+   }
+   else if ((yyvsp[(5) - (6)].id) == 330) {
+       (yyvsp[(5) - (6)].id) = 1;
+   }
+   (yyval.node) = node_newnode(parser, (NODE_OP_ASGN1), (VALUE)((yyvsp[(1) - (6)].node)), (VALUE)((yyvsp[(5) - (6)].id)), (VALUE)(args));
+   fixpos((yyval.node), (yyvsp[(1) - (6)].node));
+      ;}
+    break;
+  case 28:
+    {
+   value_expr_gen(parser, ((yyvsp[(5) - (5)].node)) = remove_begin((yyvsp[(5) - (5)].node)));
+   if ((yyvsp[(4) - (5)].id) == 331) {
+       (yyvsp[(4) - (5)].id) = 0;
+   }
+   else if ((yyvsp[(4) - (5)].id) == 330) {
+       (yyvsp[(4) - (5)].id) = 1;
+   }
+   (yyval.node) = node_newnode(parser, (NODE_OP_ASGN2), (VALUE)((yyvsp[(1) - (5)].node)), (VALUE)((yyvsp[(5) - (5)].node)), (VALUE)(node_newnode(parser, (NODE_OP_ASGN2), (VALUE)((yyvsp[(3) - (5)].id)), (VALUE)((yyvsp[(4) - (5)].id)), (VALUE)(rb_id_attrset((yyvsp[(3) - (5)].id))))));
+   fixpos((yyval.node), (yyvsp[(1) - (5)].node));
+      ;}
+    break;
+  case 29:
+    {
+   value_expr_gen(parser, ((yyvsp[(5) - (5)].node)) = remove_begin((yyvsp[(5) - (5)].node)));
+   if ((yyvsp[(4) - (5)].id) == 331) {
+       (yyvsp[(4) - (5)].id) = 0;
+   }
+   else if ((yyvsp[(4) - (5)].id) == 330) {
+       (yyvsp[(4) - (5)].id) = 1;
+   }
+   (yyval.node) = node_newnode(parser, (NODE_OP_ASGN2), (VALUE)((yyvsp[(1) - (5)].node)), (VALUE)((yyvsp[(5) - (5)].node)), (VALUE)(node_newnode(parser, (NODE_OP_ASGN2), (VALUE)((yyvsp[(3) - (5)].id)), (VALUE)((yyvsp[(4) - (5)].id)), (VALUE)(rb_id_attrset((yyvsp[(3) - (5)].id))))));
+   fixpos((yyval.node), (yyvsp[(1) - (5)].node));
+      ;}
+    break;
+  case 30:
+    {
+   value_expr_gen(parser, ((yyvsp[(5) - (5)].node)) = remove_begin((yyvsp[(5) - (5)].node)));
+   if ((yyvsp[(4) - (5)].id) == 331) {
+       (yyvsp[(4) - (5)].id) = 0;
+   }
+   else if ((yyvsp[(4) - (5)].id) == 330) {
+       (yyvsp[(4) - (5)].id) = 1;
+   }
+   (yyval.node) = node_newnode(parser, (NODE_OP_ASGN2), (VALUE)((yyvsp[(1) - (5)].node)), (VALUE)((yyvsp[(5) - (5)].node)), (VALUE)(node_newnode(parser, (NODE_OP_ASGN2), (VALUE)((yyvsp[(3) - (5)].id)), (VALUE)((yyvsp[(4) - (5)].id)), (VALUE)(rb_id_attrset((yyvsp[(3) - (5)].id))))));
+   fixpos((yyval.node), (yyvsp[(1) - (5)].node));
+      ;}
+    break;
+  case 31:
+    {
+   rb_backref_error_gen(parser,(yyvsp[(1) - (3)].node));
+   (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 32:
+    {
+   value_expr_gen(parser, ((yyvsp[(3) - (3)].node)) = remove_begin((yyvsp[(3) - (3)].node)));
+   (yyval.node) = node_assign_gen(parser, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 33:
+    {
+   (yyvsp[(1) - (3)].node)->u2.node = (yyvsp[(3) - (3)].node);
+   (yyval.node) = (yyvsp[(1) - (3)].node);
+      ;}
+    break;
+  case 34:
+    {
+   (yyvsp[(1) - (3)].node)->u2.node = (yyvsp[(3) - (3)].node);
+   (yyval.node) = (yyvsp[(1) - (3)].node);
+      ;}
+    break;
+  case 37:
+    {
+   (yyval.node) = logop_gen(parser, NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 38:
+    {
+   (yyval.node) = logop_gen(parser, NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 39:
+    {
+   (yyval.node) = call_uni_op_gen(parser, cond_gen(parser, (yyvsp[(3) - (3)].node)),'!');
+      ;}
+    break;
+  case 40:
+    {
+   (yyval.node) = call_uni_op_gen(parser, cond_gen(parser, (yyvsp[(2) - (2)].node)),'!');
+      ;}
+    break;
+  case 42:
+    {
+   value_expr_gen(parser, ((yyvsp[(1) - (1)].node)) = remove_begin((yyvsp[(1) - (1)].node)));
+   (yyval.node) = (yyvsp[(1) - (1)].node);
+          if (!(yyval.node)) (yyval.node) = node_newnode(parser, (NODE_NIL), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 45:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_RETURN), (VALUE)(ret_args_gen(parser, (yyvsp[(2) - (2)].node))), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 46:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_BREAK), (VALUE)(ret_args_gen(parser, (yyvsp[(2) - (2)].node))), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 47:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_NEXT), (VALUE)(ret_args_gen(parser, (yyvsp[(2) - (2)].node))), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 49:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (4)].node)), (VALUE)((yyvsp[(3) - (4)].id)), (VALUE)((yyvsp[(4) - (4)].node)));
+      ;}
+    break;
+  case 50:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (4)].node)), (VALUE)((yyvsp[(3) - (4)].id)), (VALUE)((yyvsp[(4) - (4)].node)));
+      ;}
+    break;
+  case 51:
+    {
+   dyna_push_gen(parser);
+   (yyval.num) = (parser->parser_ruby_sourceline);
+      ;}
+    break;
+  case 52:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ITER), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_SCOPE), (VALUE)(local_tbl_gen(parser)), (VALUE)((yyvsp[(4) - (5)].node)), (VALUE)((yyvsp[(3) - (5)].node)))), (VALUE)(0));
+   ((struct RNode*)((yyval.node)))->flags=((((struct RNode*)((yyval.node)))->flags&~(-1<<(8 +7)))|((((yyvsp[(2) - (5)].num))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+   dyna_pop_gen(parser);
+      ;}
+    break;
+  case 53:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_FCALL), (VALUE)(0), (VALUE)((yyvsp[(1) - (2)].id)), (VALUE)((yyvsp[(2) - (2)].node)));
+   fixpos((yyval.node), (yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 54:
+    {
+   block_dup_check_gen(parser,(yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
+          (yyvsp[(3) - (3)].node)->u3.node = node_newnode(parser, (NODE_FCALL), (VALUE)(0), (VALUE)((yyvsp[(1) - (3)].id)), (VALUE)((yyvsp[(2) - (3)].node)));
+   (yyval.node) = (yyvsp[(3) - (3)].node);
+   fixpos((yyval.node), (yyvsp[(2) - (3)].node));
+      ;}
+    break;
+  case 55:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (4)].node)), (VALUE)((yyvsp[(3) - (4)].id)), (VALUE)((yyvsp[(4) - (4)].node)));
+   fixpos((yyval.node), (yyvsp[(1) - (4)].node));
+      ;}
+    break;
+  case 56:
+    {
+   block_dup_check_gen(parser,(yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
+          (yyvsp[(5) - (5)].node)->u3.node = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (5)].node)), (VALUE)((yyvsp[(3) - (5)].id)), (VALUE)((yyvsp[(4) - (5)].node)));
+   (yyval.node) = (yyvsp[(5) - (5)].node);
+   fixpos((yyval.node), (yyvsp[(1) - (5)].node));
+     ;}
+    break;
+  case 57:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (4)].node)), (VALUE)((yyvsp[(3) - (4)].id)), (VALUE)((yyvsp[(4) - (4)].node)));
+   fixpos((yyval.node), (yyvsp[(1) - (4)].node));
+      ;}
+    break;
+  case 58:
+    {
+   block_dup_check_gen(parser,(yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
+          (yyvsp[(5) - (5)].node)->u3.node = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (5)].node)), (VALUE)((yyvsp[(3) - (5)].id)), (VALUE)((yyvsp[(4) - (5)].node)));
+   (yyval.node) = (yyvsp[(5) - (5)].node);
+   fixpos((yyval.node), (yyvsp[(1) - (5)].node));
+     ;}
+    break;
+  case 59:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_SUPER), (VALUE)(0), (VALUE)(0), (VALUE)((yyvsp[(2) - (2)].node)));
+   fixpos((yyval.node), (yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 60:
+    {
+   (yyval.node) = new_yield_gen(parser, (yyvsp[(2) - (2)].node));
+   fixpos((yyval.node), (yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 62:
+    {
+   (yyval.node) = (yyvsp[(2) - (3)].node);
+      ;}
+    break;
+  case 64:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)((yyvsp[(2) - (3)].node)), (VALUE)(1), (VALUE)(0))), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 65:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)((yyvsp[(1) - (1)].node)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 66:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)(list_append_gen(parser,(yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node))), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 67:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)(0), (VALUE)((yyvsp[(3) - (3)].node)));
+      ;}
+    break;
+  case 68:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)((yyvsp[(1) - (5)].node)), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_POSTARG), (VALUE)((yyvsp[(3) - (5)].node)), (VALUE)((yyvsp[(5) - (5)].node)), (VALUE)(0))));
+      ;}
+    break;
+  case 69:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)((yyvsp[(1) - (2)].node)), (VALUE)(0), (VALUE)(-1));
+      ;}
+    break;
+  case 70:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)((yyvsp[(1) - (4)].node)), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_POSTARG), (VALUE)(-1), (VALUE)((yyvsp[(4) - (4)].node)), (VALUE)(0))));
+      ;}
+    break;
+  case 71:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)(0), (VALUE)(0), (VALUE)((yyvsp[(2) - (2)].node)));
+      ;}
+    break;
+  case 72:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)(0), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_POSTARG), (VALUE)((yyvsp[(2) - (4)].node)), (VALUE)((yyvsp[(4) - (4)].node)), (VALUE)(0))));
+      ;}
+    break;
+  case 73:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)(0), (VALUE)(0), (VALUE)(-1));
+      ;}
+    break;
+  case 74:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)(0), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_POSTARG), (VALUE)(-1), (VALUE)((yyvsp[(3) - (3)].node)), (VALUE)(0))));
+      ;}
+    break;
+  case 76:
+    {
+   (yyval.node) = (yyvsp[(2) - (3)].node);
+      ;}
+    break;
+  case 77:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ARRAY), (VALUE)((yyvsp[(1) - (2)].node)), (VALUE)(1), (VALUE)(0));
+      ;}
+    break;
+  case 78:
+    {
+   (yyval.node) = list_append_gen(parser,(yyvsp[(1) - (3)].node),(yyvsp[(2) - (3)].node));
+      ;}
+    break;
+  case 79:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ARRAY), (VALUE)((yyvsp[(1) - (1)].node)), (VALUE)(1), (VALUE)(0));
+      ;}
+    break;
+  case 80:
+    {
+   (yyval.node) = list_append_gen(parser,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 81:
+    {
+   (yyval.node) = assignable_gen(parser, (yyvsp[(1) - (1)].id), 0);
+      ;}
+    break;
+  case 82:
+    {
+   (yyval.node) = aryset_gen(parser, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
+      ;}
+    break;
+  case 83:
+    {
+   (yyval.node) = attrset_gen(parser, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+      ;}
+    break;
+  case 84:
+    {
+   (yyval.node) = attrset_gen(parser, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+      ;}
+    break;
+  case 85:
+    {
+   (yyval.node) = attrset_gen(parser, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+      ;}
+    break;
+  case 86:
+    {
+   if ((parser->parser_in_def) || (parser->parser_in_single))
+       parser_yyerror(parser, "dynamic constant assignment");
+   (yyval.node) = node_newnode(parser, (NODE_CDECL), (VALUE)(0), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_COLON2), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)((yyvsp[(3) - (3)].id)), (VALUE)(0))));
+      ;}
+    break;
+  case 87:
+    {
+   if ((parser->parser_in_def) || (parser->parser_in_single))
+       parser_yyerror(parser, "dynamic constant assignment");
+   (yyval.node) = node_newnode(parser, (NODE_CDECL), (VALUE)(0), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_COLON3), (VALUE)(0), (VALUE)((yyvsp[(2) - (2)].id)), (VALUE)(0))));
+      ;}
+    break;
+  case 88:
+    {
+   rb_backref_error_gen(parser,(yyvsp[(1) - (1)].node));
+   (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 89:
+    {
+   if (!((yyval.node) = assignable_gen(parser, (yyvsp[(1) - (1)].id), 0))) (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 90:
+    {
+   (yyval.node) = aryset_gen(parser, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
+      ;}
+    break;
+  case 91:
+    {
+   (yyval.node) = attrset_gen(parser, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+      ;}
+    break;
+  case 92:
+    {
+   (yyval.node) = attrset_gen(parser, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+      ;}
+    break;
+  case 93:
+    {
+   (yyval.node) = attrset_gen(parser, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
+      ;}
+    break;
+  case 94:
+    {
+   if ((parser->parser_in_def) || (parser->parser_in_single))
+       parser_yyerror(parser, "dynamic constant assignment");
+   (yyval.node) = node_newnode(parser, (NODE_CDECL), (VALUE)(0), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_COLON2), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)((yyvsp[(3) - (3)].id)), (VALUE)(0))));
+      ;}
+    break;
+  case 95:
+    {
+   if ((parser->parser_in_def) || (parser->parser_in_single))
+       parser_yyerror(parser, "dynamic constant assignment");
+   (yyval.node) = node_newnode(parser, (NODE_CDECL), (VALUE)(0), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_COLON3), (VALUE)(0), (VALUE)((yyvsp[(2) - (2)].id)), (VALUE)(0))));
+      ;}
+    break;
+  case 96:
+    {
+   rb_backref_error_gen(parser,(yyvsp[(1) - (1)].node));
+   (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 97:
+    {
+   parser_yyerror(parser, "class/module name must be CONSTANT");
+      ;}
+    break;
+  case 99:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_COLON3), (VALUE)(0), (VALUE)((yyvsp[(2) - (2)].id)), (VALUE)(0));
+      ;}
+    break;
+  case 100:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_COLON2), (VALUE)(0), (VALUE)((yyval.node)), (VALUE)(0));
+      ;}
+    break;
+  case 101:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_COLON2), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)((yyvsp[(3) - (3)].id)), (VALUE)(0));
+      ;}
+    break;
+  case 105:
+    {
+   (parser->parser_lex_state) = EXPR_END;
+   (yyval.id) = (yyvsp[(1) - (1)].id);
+      ;}
+    break;
+  case 106:
+    {
+   (parser->parser_lex_state) = EXPR_END;
+   (yyval.id) = (yyvsp[(1) - (1)].id);
+      ;}
+    break;
+  case 109:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_LIT), (VALUE)((((VALUE)((yyvsp[(1) - (1)].id))<<RUBY_SPECIAL_SHIFT)|RUBY_SYMBOL_FLAG)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 111:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_UNDEF), (VALUE)(0), (VALUE)((yyvsp[(1) - (1)].node)), (VALUE)(0));
+      ;}
+    break;
+  case 112:
+    {(parser->parser_lex_state) = EXPR_FNAME;;}
+    break;
+  case 113:
+    {
+   (yyval.node) = block_append_gen(parser,(yyvsp[(1) - (4)].node),node_newnode(parser, (NODE_UNDEF), (VALUE)(0), (VALUE)((yyvsp[(4) - (4)].node)), (VALUE)(0)));
+      ;}
+    break;
+  case 114:
+    { (yyval.id) = '|'; ;}
+    break;
+  case 115:
+    { (yyval.id) = '^'; ;}
+    break;
+  case 116:
+    { (yyval.id) = '&'; ;}
+    break;
+  case 117:
+    { (yyval.id) = 324; ;}
+    break;
+  case 118:
+    { (yyval.id) = 325; ;}
+    break;
+  case 119:
+    { (yyval.id) = 326; ;}
+    break;
+  case 120:
+    { (yyval.id) = 332; ;}
+    break;
+  case 121:
+    { (yyval.id) = 333; ;}
+    break;
+  case 122:
+    { (yyval.id) = '>'; ;}
+    break;
+  case 123:
+    { (yyval.id) = 328; ;}
+    break;
+  case 124:
+    { (yyval.id) = '<'; ;}
+    break;
+  case 125:
+    { (yyval.id) = 329; ;}
+    break;
+  case 126:
+    { (yyval.id) = 327; ;}
+    break;
+  case 127:
+    { (yyval.id) = 338; ;}
+    break;
+  case 128:
+    { (yyval.id) = 339; ;}
+    break;
+  case 129:
+    { (yyval.id) = '+'; ;}
+    break;
+  case 130:
+    { (yyval.id) = '-'; ;}
+    break;
+  case 131:
+    { (yyval.id) = '*'; ;}
+    break;
+  case 132:
+    { (yyval.id) = '*'; ;}
+    break;
+  case 133:
+    { (yyval.id) = '/'; ;}
+    break;
+  case 134:
+    { (yyval.id) = '%'; ;}
+    break;
+  case 135:
+    { (yyval.id) = 323; ;}
+    break;
+  case 136:
+    { (yyval.id) = '!'; ;}
+    break;
+  case 137:
+    { (yyval.id) = '~'; ;}
+    break;
+  case 138:
+    { (yyval.id) = 321; ;}
+    break;
+  case 139:
+    { (yyval.id) = 322; ;}
+    break;
+  case 140:
+    { (yyval.id) = 336; ;}
+    break;
+  case 141:
+    { (yyval.id) = 337; ;}
+    break;
+  case 142:
+    { (yyval.id) = '`'; ;}
+    break;
+  case 184:
+    {
+   value_expr_gen(parser, ((yyvsp[(3) - (3)].node)) = remove_begin((yyvsp[(3) - (3)].node)));
+   (yyval.node) = node_assign_gen(parser, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 185:
+    {
+   value_expr_gen(parser, ((yyvsp[(3) - (5)].node)) = remove_begin((yyvsp[(3) - (5)].node)));
+          (yyvsp[(3) - (5)].node) = node_newnode(parser, (NODE_RESCUE), (VALUE)((yyvsp[(3) - (5)].node)), (VALUE)(node_newnode(parser, (NODE_RESBODY), (VALUE)(0), (VALUE)((yyvsp[(5) - (5)].node)), (VALUE)(0))), (VALUE)(0));
+   (yyval.node) = node_assign_gen(parser, (yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
+      ;}
+    break;
+  case 186:
+    {
+   value_expr_gen(parser, ((yyvsp[(3) - (3)].node)) = remove_begin((yyvsp[(3) - (3)].node)));
+   if ((yyvsp[(1) - (3)].node)) {
+       ID vid = (yyvsp[(1) - (3)].node)->u1.id;
+       if ((yyvsp[(2) - (3)].id) == 331) {
+    (yyvsp[(1) - (3)].node)->u2.node = (yyvsp[(3) - (3)].node);
+    (yyval.node) = node_newnode(parser, (NODE_OP_ASGN_OR), (VALUE)(gettable_gen(parser,vid)), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)(0));
+    if (((((vid)>376)) && (((vid)&0x07) == 0x03 || ((vid)&0x07) == 0x01 || ((vid)&0x07) == 0x06))) {
+        (yyval.node)->u3.id = vid;
+    }
+       }
+       else if ((yyvsp[(2) - (3)].id) == 330) {
+    (yyvsp[(1) - (3)].node)->u2.node = (yyvsp[(3) - (3)].node);
+    (yyval.node) = node_newnode(parser, (NODE_OP_ASGN_AND), (VALUE)(gettable_gen(parser,vid)), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)(0));
+       }
+       else {
+    (yyval.node) = (yyvsp[(1) - (3)].node);
+    (yyval.node)->u2.node = node_newnode(parser, (NODE_CALL), (VALUE)(gettable_gen(parser,vid)), (VALUE)((yyvsp[(2) - (3)].id)), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)((yyvsp[(3) - (3)].node)), (VALUE)(1), (VALUE)(0))));
+       }
+   }
+   else {
+       (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+   }
+      ;}
+    break;
+  case 187:
+    {
+   value_expr_gen(parser, ((yyvsp[(3) - (5)].node)) = remove_begin((yyvsp[(3) - (5)].node)));
+          (yyvsp[(3) - (5)].node) = node_newnode(parser, (NODE_RESCUE), (VALUE)((yyvsp[(3) - (5)].node)), (VALUE)(node_newnode(parser, (NODE_RESBODY), (VALUE)(0), (VALUE)((yyvsp[(5) - (5)].node)), (VALUE)(0))), (VALUE)(0));
+   if ((yyvsp[(1) - (5)].node)) {
+       ID vid = (yyvsp[(1) - (5)].node)->u1.id;
+       if ((yyvsp[(2) - (5)].id) == 331) {
+    (yyvsp[(1) - (5)].node)->u2.node = (yyvsp[(3) - (5)].node);
+    (yyval.node) = node_newnode(parser, (NODE_OP_ASGN_OR), (VALUE)(gettable_gen(parser,vid)), (VALUE)((yyvsp[(1) - (5)].node)), (VALUE)(0));
+    if (((((vid)>376)) && (((vid)&0x07) == 0x03 || ((vid)&0x07) == 0x01 || ((vid)&0x07) == 0x06))) {
+        (yyval.node)->u3.id = vid;
+    }
+       }
+       else if ((yyvsp[(2) - (5)].id) == 330) {
+    (yyvsp[(1) - (5)].node)->u2.node = (yyvsp[(3) - (5)].node);
+    (yyval.node) = node_newnode(parser, (NODE_OP_ASGN_AND), (VALUE)(gettable_gen(parser,vid)), (VALUE)((yyvsp[(1) - (5)].node)), (VALUE)(0));
+       }
+       else {
+    (yyval.node) = (yyvsp[(1) - (5)].node);
+    (yyval.node)->u2.node = node_newnode(parser, (NODE_CALL), (VALUE)(gettable_gen(parser,vid)), (VALUE)((yyvsp[(2) - (5)].id)), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)((yyvsp[(3) - (5)].node)), (VALUE)(1), (VALUE)(0))));
+       }
+   }
+   else {
+       (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+   }
+      ;}
+    break;
+  case 188:
+    {
+   NODE *args;
+   value_expr_gen(parser, ((yyvsp[(6) - (6)].node)) = remove_begin((yyvsp[(6) - (6)].node)));
+   if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = node_newnode(parser, (NODE_ZARRAY), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+   args = arg_concat_gen(parser,(yyvsp[(6) - (6)].node),(yyvsp[(3) - (6)].node));
+   if ((yyvsp[(5) - (6)].id) == 331) {
+       (yyvsp[(5) - (6)].id) = 0;
+   }
+   else if ((yyvsp[(5) - (6)].id) == 330) {
+       (yyvsp[(5) - (6)].id) = 1;
+   }
+   (yyval.node) = node_newnode(parser, (NODE_OP_ASGN1), (VALUE)((yyvsp[(1) - (6)].node)), (VALUE)((yyvsp[(5) - (6)].id)), (VALUE)(args));
+   fixpos((yyval.node), (yyvsp[(1) - (6)].node));
+      ;}
+    break;
+  case 189:
+    {
+   value_expr_gen(parser, ((yyvsp[(5) - (5)].node)) = remove_begin((yyvsp[(5) - (5)].node)));
+   if ((yyvsp[(4) - (5)].id) == 331) {
+       (yyvsp[(4) - (5)].id) = 0;
+   }
+   else if ((yyvsp[(4) - (5)].id) == 330) {
+       (yyvsp[(4) - (5)].id) = 1;
+   }
+   (yyval.node) = node_newnode(parser, (NODE_OP_ASGN2), (VALUE)((yyvsp[(1) - (5)].node)), (VALUE)((yyvsp[(5) - (5)].node)), (VALUE)(node_newnode(parser, (NODE_OP_ASGN2), (VALUE)((yyvsp[(3) - (5)].id)), (VALUE)((yyvsp[(4) - (5)].id)), (VALUE)(rb_id_attrset((yyvsp[(3) - (5)].id))))));
+   fixpos((yyval.node), (yyvsp[(1) - (5)].node));
+      ;}
+    break;
+  case 190:
+    {
+   value_expr_gen(parser, ((yyvsp[(5) - (5)].node)) = remove_begin((yyvsp[(5) - (5)].node)));
+   if ((yyvsp[(4) - (5)].id) == 331) {
+       (yyvsp[(4) - (5)].id) = 0;
+   }
+   else if ((yyvsp[(4) - (5)].id) == 330) {
+       (yyvsp[(4) - (5)].id) = 1;
+   }
+   (yyval.node) = node_newnode(parser, (NODE_OP_ASGN2), (VALUE)((yyvsp[(1) - (5)].node)), (VALUE)((yyvsp[(5) - (5)].node)), (VALUE)(node_newnode(parser, (NODE_OP_ASGN2), (VALUE)((yyvsp[(3) - (5)].id)), (VALUE)((yyvsp[(4) - (5)].id)), (VALUE)(rb_id_attrset((yyvsp[(3) - (5)].id))))));
+   fixpos((yyval.node), (yyvsp[(1) - (5)].node));
+      ;}
+    break;
+  case 191:
+    {
+   value_expr_gen(parser, ((yyvsp[(5) - (5)].node)) = remove_begin((yyvsp[(5) - (5)].node)));
+   if ((yyvsp[(4) - (5)].id) == 331) {
+       (yyvsp[(4) - (5)].id) = 0;
+   }
+   else if ((yyvsp[(4) - (5)].id) == 330) {
+       (yyvsp[(4) - (5)].id) = 1;
+   }
+   (yyval.node) = node_newnode(parser, (NODE_OP_ASGN2), (VALUE)((yyvsp[(1) - (5)].node)), (VALUE)((yyvsp[(5) - (5)].node)), (VALUE)(node_newnode(parser, (NODE_OP_ASGN2), (VALUE)((yyvsp[(3) - (5)].id)), (VALUE)((yyvsp[(4) - (5)].id)), (VALUE)(rb_id_attrset((yyvsp[(3) - (5)].id))))));
+   fixpos((yyval.node), (yyvsp[(1) - (5)].node));
+      ;}
+    break;
+  case 192:
+    {
+   parser_yyerror(parser, "constant re-assignment");
+   (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 193:
+    {
+   parser_yyerror(parser, "constant re-assignment");
+   (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 194:
+    {
+   rb_backref_error_gen(parser,(yyvsp[(1) - (3)].node));
+   (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 195:
+    {
+   value_expr_gen(parser, ((yyvsp[(1) - (3)].node)) = remove_begin((yyvsp[(1) - (3)].node)));
+   value_expr_gen(parser, ((yyvsp[(3) - (3)].node)) = remove_begin((yyvsp[(3) - (3)].node)));
+   (yyval.node) = node_newnode(parser, (NODE_DOT2), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)((yyvsp[(3) - (3)].node)), (VALUE)(0));
+   if (((int) (((((struct RNode*)((yyvsp[(1) - (3)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_LIT && (((long)((yyvsp[(1) - (3)].node)->u1.value))&RUBY_FIXNUM_FLAG) &&
+       ((int) (((((struct RNode*)((yyvsp[(3) - (3)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_LIT && (((long)((yyvsp[(3) - (3)].node)->u1.value))&RUBY_FIXNUM_FLAG)) {
+       (parser->parser_deferred_nodes) = list_append_gen(parser,(parser->parser_deferred_nodes),(yyval.node));
+   }
+      ;}
+    break;
+  case 196:
+    {
+   value_expr_gen(parser, ((yyvsp[(1) - (3)].node)) = remove_begin((yyvsp[(1) - (3)].node)));
+   value_expr_gen(parser, ((yyvsp[(3) - (3)].node)) = remove_begin((yyvsp[(3) - (3)].node)));
+   (yyval.node) = node_newnode(parser, (NODE_DOT3), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)((yyvsp[(3) - (3)].node)), (VALUE)(0));
+   if (((int) (((((struct RNode*)((yyvsp[(1) - (3)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_LIT && (((long)((yyvsp[(1) - (3)].node)->u1.value))&RUBY_FIXNUM_FLAG) &&
+       ((int) (((((struct RNode*)((yyvsp[(3) - (3)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_LIT && (((long)((yyvsp[(3) - (3)].node)->u1.value))&RUBY_FIXNUM_FLAG)) {
+       (parser->parser_deferred_nodes) = list_append_gen(parser,(parser->parser_deferred_nodes),(yyval.node));
+   }
+      ;}
+    break;
+  case 197:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),'+',(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 198:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),'-',(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 199:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),'*',(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 200:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),'/',(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 201:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),'%',(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 202:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),323,(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 203:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)(call_bin_op_gen(parser, (yyvsp[(2) - (4)].node),323,(yyvsp[(4) - (4)].node))), (VALUE)(322), (VALUE)(0));
+      ;}
+    break;
+  case 204:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)(call_bin_op_gen(parser, (yyvsp[(2) - (4)].node),323,(yyvsp[(4) - (4)].node))), (VALUE)(322), (VALUE)(0));
+      ;}
+    break;
+  case 205:
+    {
+   (yyval.node) = call_uni_op_gen(parser, (yyvsp[(2) - (2)].node),321);
+      ;}
+    break;
+  case 206:
+    {
+   (yyval.node) = call_uni_op_gen(parser, (yyvsp[(2) - (2)].node),322);
+      ;}
+    break;
+  case 207:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),'|',(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 208:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),'^',(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 209:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),'&',(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 210:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),324,(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 211:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),'>',(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 212:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),328,(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 213:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),'<',(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 214:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),329,(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 215:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),325,(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 216:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),326,(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 217:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),327,(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 218:
+    {
+   (yyval.node) = match_op_gen(parser, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+                        if (((int) (((((struct RNode*)((yyvsp[(1) - (3)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_LIT && rb_type((VALUE)((yyvsp[(1) - (3)].node)->u1.value)) == RUBY_T_REGEXP) {
+                            (yyval.node) = reg_named_capture_assign_gen(parser,(yyvsp[(1) - (3)].node)->u1.value,(yyval.node));
+                        }
+      ;}
+    break;
+  case 219:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),333,(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 220:
+    {
+   (yyval.node) = call_uni_op_gen(parser, cond_gen(parser, (yyvsp[(2) - (2)].node)),'!');
+      ;}
+    break;
+  case 221:
+    {
+   (yyval.node) = call_uni_op_gen(parser, (yyvsp[(2) - (2)].node),'~');
+      ;}
+    break;
+  case 222:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),338,(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 223:
+    {
+   (yyval.node) = call_bin_op_gen(parser, (yyvsp[(1) - (3)].node),339,(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 224:
+    {
+   (yyval.node) = logop_gen(parser, NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 225:
+    {
+   (yyval.node) = logop_gen(parser, NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 226:
+    {(parser->parser_in_defined) = 1;;}
+    break;
+  case 227:
+    {
+   (parser->parser_in_defined) = 0;
+   (yyval.node) = node_newnode(parser, (NODE_DEFINED), (VALUE)((yyvsp[(4) - (4)].node)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 228:
+    {
+   value_expr_gen(parser, ((yyvsp[(1) - (6)].node)) = remove_begin((yyvsp[(1) - (6)].node)));
+   (yyval.node) = node_newnode(parser, (NODE_IF), (VALUE)(cond_gen(parser, (yyvsp[(1) - (6)].node))), (VALUE)((yyvsp[(3) - (6)].node)), (VALUE)((yyvsp[(6) - (6)].node)));
+   fixpos((yyval.node), (yyvsp[(1) - (6)].node));
+      ;}
+    break;
+  case 229:
+    {
+   (yyval.node) = (yyvsp[(1) - (1)].node);
+      ;}
+    break;
+  case 230:
+    {
+   value_expr_gen(parser, ((yyvsp[(1) - (1)].node)) = remove_begin((yyvsp[(1) - (1)].node)));
+   (yyval.node) = (yyvsp[(1) - (1)].node);
+          if (!(yyval.node)) (yyval.node) = node_newnode(parser, (NODE_NIL), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 232:
+    {
+   (yyval.node) = (yyvsp[(1) - (2)].node);
+      ;}
+    break;
+  case 233:
+    {
+   (yyval.node) = arg_append_gen(parser,(yyvsp[(1) - (4)].node),node_newnode(parser, (NODE_HASH), (VALUE)((yyvsp[(3) - (4)].node)), (VALUE)(0), (VALUE)(0)));
+      ;}
+    break;
+  case 234:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ARRAY), (VALUE)(node_newnode(parser, (NODE_HASH), (VALUE)((yyvsp[(1) - (2)].node)), (VALUE)(0), (VALUE)(0))), (VALUE)(1), (VALUE)(0));
+      ;}
+    break;
+  case 235:
+    {
+   (yyval.node) = (yyvsp[(2) - (3)].node);
+      ;}
+    break;
+  case 240:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ARRAY), (VALUE)((yyvsp[(1) - (1)].node)), (VALUE)(1), (VALUE)(0));
+      ;}
+    break;
+  case 241:
+    {
+   (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 242:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ARRAY), (VALUE)(node_newnode(parser, (NODE_HASH), (VALUE)((yyvsp[(1) - (2)].node)), (VALUE)(0), (VALUE)(0))), (VALUE)(1), (VALUE)(0));
+   (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 243:
+    {
+   (yyval.node) = arg_append_gen(parser,(yyvsp[(1) - (4)].node),node_newnode(parser, (NODE_HASH), (VALUE)((yyvsp[(3) - (4)].node)), (VALUE)(0), (VALUE)(0)));
+   (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
+      ;}
+    break;
+  case 245:
+    {
+   (yyval.num) = (parser->parser_cmdarg_stack);
+   ((parser->parser_cmdarg_stack) = ((parser->parser_cmdarg_stack)<<1)|((1)&1));
+      ;}
+    break;
+  case 246:
+    {
+   (parser->parser_cmdarg_stack) = (yyvsp[(1) - (2)].num);
+   (yyval.node) = (yyvsp[(2) - (2)].node);
+      ;}
+    break;
+  case 247:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_BLOCK_PASS), (VALUE)(0), (VALUE)((yyvsp[(2) - (2)].node)), (VALUE)(0));
+      ;}
+    break;
+  case 248:
+    {
+   (yyval.node) = (yyvsp[(2) - (2)].node);
+      ;}
+    break;
+  case 249:
+    {
+   (yyval.node) = 0;
+      ;}
+    break;
+  case 250:
+    {
+   (yyval.node) = 0;
+      ;}
+    break;
+  case 251:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ARRAY), (VALUE)((yyvsp[(1) - (1)].node)), (VALUE)(1), (VALUE)(0));
+      ;}
+    break;
+  case 252:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_SPLAT), (VALUE)((yyvsp[(2) - (2)].node)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 253:
+    {
+   NODE *n1;
+   if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
+       (yyval.node) = list_append_gen(parser,n1,(yyvsp[(3) - (3)].node));
+   }
+   else {
+       (yyval.node) = arg_append_gen(parser,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));
+   }
+      ;}
+    break;
+  case 254:
+    {
+   NODE *n1;
+   if ((((int) (((((struct RNode*)((yyvsp[(4) - (4)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
+       (yyval.node) = list_concat_gen(parser,n1,(yyvsp[(4) - (4)].node));
+   }
+   else {
+       (yyval.node) = arg_concat_gen(parser,(yyvsp[(1) - (4)].node),(yyvsp[(4) - (4)].node));
+   }
+      ;}
+    break;
+  case 255:
+    {
+   NODE *n1;
+   if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
+       (yyval.node) = list_append_gen(parser,n1,(yyvsp[(3) - (3)].node));
+   }
+   else {
+       (yyval.node) = arg_append_gen(parser,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));
+   }
+      ;}
+    break;
+  case 256:
+    {
+   NODE *n1;
+   if (((int) (((((struct RNode*)((yyvsp[(4) - (4)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_ARRAY &&
+       (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
+       (yyval.node) = list_concat_gen(parser,n1,(yyvsp[(4) - (4)].node));
+   }
+   else {
+       (yyval.node) = arg_concat_gen(parser,(yyvsp[(1) - (4)].node),(yyvsp[(4) - (4)].node));
+   }
+      ;}
+    break;
+  case 257:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_SPLAT), (VALUE)((yyvsp[(2) - (2)].node)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 266:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_FCALL), (VALUE)(0), (VALUE)((yyvsp[(1) - (1)].id)), (VALUE)(0));
+      ;}
+    break;
+  case 267:
+    {
+   (yyval.num) = (parser->parser_ruby_sourceline);
+      ;}
+    break;
+  case 268:
+    {
+   if ((yyvsp[(3) - (4)].node) == ((void *)0)) {
+       (yyval.node) = node_newnode(parser, (NODE_NIL), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+   }
+   else {
+       if (((int) (((((struct RNode*)((yyvsp[(3) - (4)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_RESCUE ||
+    ((int) (((((struct RNode*)((yyvsp[(3) - (4)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_ENSURE)
+    ((struct RNode*)((yyvsp[(3) - (4)].node)))->flags=((((struct RNode*)((yyvsp[(3) - (4)].node)))->flags&~(-1<<(8 +7)))|((((yyvsp[(2) - (4)].num))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+       (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)((yyvsp[(3) - (4)].node)), (VALUE)(0));
+   }
+   ((struct RNode*)((yyval.node)))->flags=((((struct RNode*)((yyval.node)))->flags&~(-1<<(8 +7)))|((((yyvsp[(2) - (4)].num))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+      ;}
+    break;
+  case 269:
+    {(parser->parser_lex_state) = EXPR_ENDARG;;}
+    break;
+  case 270:
+    {
+   rb_compile_warning((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "(...) interpreted as grouped expression");
+   (yyval.node) = (yyvsp[(2) - (4)].node);
+      ;}
+    break;
+  case 271:
+    {
+   (yyval.node) = (yyvsp[(2) - (3)].node);
+      ;}
+    break;
+  case 272:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_COLON2), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)((yyvsp[(3) - (3)].id)), (VALUE)(0));
+      ;}
+    break;
+  case 273:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_COLON3), (VALUE)(0), (VALUE)((yyvsp[(2) - (2)].id)), (VALUE)(0));
+      ;}
+    break;
+  case 274:
+    {
+   if ((yyvsp[(2) - (3)].node) == 0) {
+       (yyval.node) = node_newnode(parser, (NODE_ZARRAY), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+   }
+   else {
+       (yyval.node) = (yyvsp[(2) - (3)].node);
+   }
+      ;}
+    break;
+  case 275:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_HASH), (VALUE)((yyvsp[(2) - (3)].node)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 276:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_RETURN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 277:
+    {
+   (yyval.node) = new_yield_gen(parser, (yyvsp[(3) - (4)].node));
+      ;}
+    break;
+  case 278:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_YIELD), (VALUE)(0), (VALUE)(0), (VALUE)(((VALUE)RUBY_Qfalse)));
+      ;}
+    break;
+  case 279:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_YIELD), (VALUE)(0), (VALUE)(0), (VALUE)(((VALUE)RUBY_Qfalse)));
+      ;}
+    break;
+  case 280:
+    {(parser->parser_in_defined) = 1;;}
+    break;
+  case 281:
+    {
+   (parser->parser_in_defined) = 0;
+   (yyval.node) = node_newnode(parser, (NODE_DEFINED), (VALUE)((yyvsp[(5) - (6)].node)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 282:
+    {
+   (yyval.node) = call_uni_op_gen(parser, cond_gen(parser, (yyvsp[(3) - (4)].node)),'!');
+      ;}
+    break;
+  case 283:
+    {
+   (yyval.node) = call_uni_op_gen(parser, cond_gen(parser, node_newnode(parser, (NODE_NIL), (VALUE)(0), (VALUE)(0), (VALUE)(0))),'!');
+      ;}
+    break;
+  case 284:
+    {
+   (yyvsp[(2) - (2)].node)->u3.node = node_newnode(parser, (NODE_FCALL), (VALUE)(0), (VALUE)((yyvsp[(1) - (2)].id)), (VALUE)(0));
+   (yyval.node) = (yyvsp[(2) - (2)].node);
+   fixpos((yyvsp[(2) - (2)].node)->u3.node, (yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 286:
+    {
+   block_dup_check_gen(parser,(yyvsp[(1) - (2)].node)->u3.node,(yyvsp[(2) - (2)].node));
+   (yyvsp[(2) - (2)].node)->u3.node = (yyvsp[(1) - (2)].node);
+   (yyval.node) = (yyvsp[(2) - (2)].node);
+   fixpos((yyval.node), (yyvsp[(1) - (2)].node));
+      ;}
+    break;
+  case 287:
+    {
+   (yyval.node) = (yyvsp[(2) - (2)].node);
+      ;}
+    break;
+  case 288:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_IF), (VALUE)(cond_gen(parser, (yyvsp[(2) - (6)].node))), (VALUE)((yyvsp[(4) - (6)].node)), (VALUE)((yyvsp[(5) - (6)].node)));
+   fixpos((yyval.node), (yyvsp[(2) - (6)].node));
+      ;}
+    break;
+  case 289:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_IF), (VALUE)(cond_gen(parser, (yyvsp[(2) - (6)].node))), (VALUE)((yyvsp[(5) - (6)].node)), (VALUE)((yyvsp[(4) - (6)].node)));
+   fixpos((yyval.node), (yyvsp[(2) - (6)].node));
+      ;}
+    break;
+  case 290:
+    {((parser->parser_cond_stack) = ((parser->parser_cond_stack)<<1)|((1)&1));;}
+    break;
+  case 291:
+    {((parser->parser_cond_stack) = (parser->parser_cond_stack) >> 1);;}
+    break;
+  case 292:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_WHILE), (VALUE)(cond_gen(parser, (yyvsp[(3) - (7)].node))), (VALUE)((yyvsp[(6) - (7)].node)), (VALUE)(1));
+   fixpos((yyval.node), (yyvsp[(3) - (7)].node));
+      ;}
+    break;
+  case 293:
+    {((parser->parser_cond_stack) = ((parser->parser_cond_stack)<<1)|((1)&1));;}
+    break;
+  case 294:
+    {((parser->parser_cond_stack) = (parser->parser_cond_stack) >> 1);;}
+    break;
+  case 295:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_UNTIL), (VALUE)(cond_gen(parser, (yyvsp[(3) - (7)].node))), (VALUE)((yyvsp[(6) - (7)].node)), (VALUE)(1));
+   fixpos((yyval.node), (yyvsp[(3) - (7)].node));
+      ;}
+    break;
+  case 296:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CASE), (VALUE)((yyvsp[(2) - (5)].node)), (VALUE)((yyvsp[(4) - (5)].node)), (VALUE)(0));
+   fixpos((yyval.node), (yyvsp[(2) - (5)].node));
+      ;}
+    break;
+  case 297:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CASE), (VALUE)(0), (VALUE)((yyvsp[(3) - (4)].node)), (VALUE)(0));
+      ;}
+    break;
+  case 298:
+    {((parser->parser_cond_stack) = ((parser->parser_cond_stack)<<1)|((1)&1));;}
+    break;
+  case 299:
+    {((parser->parser_cond_stack) = (parser->parser_cond_stack) >> 1);;}
+    break;
+  case 300:
+    {
+   ID id = internal_id_gen(parser);
+   ID *tbl = (ID*)ruby_xmalloc2((2),sizeof(ID));
+   NODE *m = node_newnode(parser, (NODE_ARGS_AUX), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+   NODE *args, *scope;
+   if (((int) (((((struct RNode*)((yyvsp[(2) - (9)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_MASGN) {
+       NODE *one = node_newnode(parser, (NODE_ARRAY), (VALUE)(node_newnode(parser, (NODE_LIT), (VALUE)(((VALUE)(((long)(1))<<1 | RUBY_FIXNUM_FLAG))), (VALUE)(0), (VALUE)(0))), (VALUE)(1), (VALUE)(0));
+       NODE *zero = node_newnode(parser, (NODE_ARRAY), (VALUE)(node_newnode(parser, (NODE_LIT), (VALUE)(((VALUE)(((long)(0))<<1 | RUBY_FIXNUM_FLAG))), (VALUE)(0), (VALUE)(0))), (VALUE)(1), (VALUE)(0));
+       m->u3.node = block_append_gen(parser,node_newnode(parser, (NODE_IF), (VALUE)(node_newnode(parser, (NODE_AND), (VALUE)(node_newnode(parser, (NODE_CALL), (VALUE)(node_newnode(parser, (NODE_CALL), (VALUE)(node_newnode(parser, (NODE_DVAR), (VALUE)(id), (VALUE)(0), (VALUE)(0))), (VALUE)((__builtin_constant_p("length") ? __extension__ (rb_intern2("length", strlen("length"))) : (rb_intern)("length"))), (VALUE)(0))), (VALUE)((__builtin_constant_p("==") ? __extension__ (rb_intern2("==", strlen("=="))) : (rb_intern)("=="))), (VALUE)(one))), (VALUE)(node_newnode(parser, (NODE_CALL), (VALUE)(node_newnode(parser, (NODE_CALL), (VALUE)(node_newnode(parser, (NODE_DVAR), (VALUE)(id), (VALUE)(0), (VALUE)(0))), (VALUE)((__builtin_constant_p("[]") ? __extension__ (rb_intern2("[]", strlen("[]"))) : (rb_intern)("[]"))), (VALUE)(zero))), (VALUE)((__builtin_constant_p("kind_of?") ? __extension__ (rb_intern2("kind_of?", strlen("kind_of?"))) : (rb_intern)("kind_of?"))), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)(node_newnode(parser, (NODE_LIT), (VALUE)(rb_cArray), (VALUE)(0), (VALUE)(0))), (VALUE)(1), (VALUE)(0))))), (VALUE)(0))), (VALUE)(node_newnode(parser, (NODE_DASGN_CURR), (VALUE)(id), (VALUE)(node_newnode(parser, (NODE_CALL), (VALUE)(node_newnode(parser, (NODE_DVAR), (VALUE)(id), (VALUE)(0), (VALUE)(0))), (VALUE)((__builtin_constant_p("[]") ? __extension__ (rb_intern2("[]", strlen("[]"))) : (rb_intern)("[]"))), (VALUE)(zero))), (VALUE)(0))), (VALUE)(0)),node_assign_gen(parser, (yyvsp[(2) - (9)].node), node_newnode(parser, (NODE_DVAR), (VALUE)(id), (VALUE)(0), (VALUE)(0))));
+       args = new_args_gen(parser, m,0,id,0,0);
+   }
+   else {
+       if (((int) (((((struct RNode*)((yyvsp[(2) - (9)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_LASGN ||
+    ((int) (((((struct RNode*)((yyvsp[(2) - (9)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_DASGN ||
+    ((int) (((((struct RNode*)((yyvsp[(2) - (9)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_DASGN_CURR) {
+    (yyvsp[(2) - (9)].node)->u2.node = node_newnode(parser, (NODE_DVAR), (VALUE)(id), (VALUE)(0), (VALUE)(0));
+    m->u2.argc = 1;
+    m->u3.node = (yyvsp[(2) - (9)].node);
+    args = new_args_gen(parser, m,0,0,0,0);
+       }
+       else {
+    m->u3.node = node_assign_gen(parser, node_newnode(parser, (NODE_MASGN), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)((yyvsp[(2) - (9)].node)), (VALUE)(1), (VALUE)(0))), (VALUE)(0), (VALUE)(0)), node_newnode(parser, (NODE_DVAR), (VALUE)(id), (VALUE)(0), (VALUE)(0)));
+    args = new_args_gen(parser, m,0,id,0,0);
+       }
+   }
+   scope = node_newnode(parser, (NODE_SCOPE), (VALUE)(tbl), (VALUE)((yyvsp[(8) - (9)].node)), (VALUE)(args));
+   tbl[0] = 1; tbl[1] = id;
+   (yyval.node) = node_newnode(parser, (NODE_FOR), (VALUE)(0), (VALUE)(scope), (VALUE)((yyvsp[(5) - (9)].node)));
+   fixpos((yyval.node), (yyvsp[(2) - (9)].node));
+      ;}
+    break;
+  case 301:
+    {
+   if ((parser->parser_in_def) || (parser->parser_in_single))
+       parser_yyerror(parser, "class definition in method body");
+   local_push_gen(parser,0);
+   (yyval.num) = (parser->parser_ruby_sourceline);
+      ;}
+    break;
+  case 302:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CLASS), (VALUE)((yyvsp[(2) - (6)].node)), (VALUE)(node_newnode(parser, (NODE_SCOPE), (VALUE)(local_tbl_gen(parser)), (VALUE)((yyvsp[(5) - (6)].node)), (VALUE)(0))), (VALUE)(((yyvsp[(3) - (6)].node))));
+   ((struct RNode*)((yyval.node)))->flags=((((struct RNode*)((yyval.node)))->flags&~(-1<<(8 +7)))|((((yyvsp[(4) - (6)].num))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+   local_pop_gen(parser);
+      ;}
+    break;
+  case 303:
+    {
+   (yyval.num) = (parser->parser_in_def);
+   (parser->parser_in_def) = 0;
+      ;}
+    break;
+  case 304:
+    {
+   (yyval.num) = (parser->parser_in_single);
+   (parser->parser_in_single) = 0;
+   local_push_gen(parser,0);
+      ;}
+    break;
+  case 305:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_SCLASS), (VALUE)((yyvsp[(3) - (8)].node)), (VALUE)(node_newnode(parser, (NODE_SCOPE), (VALUE)(local_tbl_gen(parser)), (VALUE)((yyvsp[(7) - (8)].node)), (VALUE)(0))), (VALUE)(0));
+   fixpos((yyval.node), (yyvsp[(3) - (8)].node));
+   local_pop_gen(parser);
+   (parser->parser_in_def) = (yyvsp[(4) - (8)].num);
+   (parser->parser_in_single) = (yyvsp[(6) - (8)].num);
+      ;}
+    break;
+  case 306:
+    {
+   if ((parser->parser_in_def) || (parser->parser_in_single))
+       parser_yyerror(parser, "module definition in method body");
+   local_push_gen(parser,0);
+   (yyval.num) = (parser->parser_ruby_sourceline);
+      ;}
+    break;
+  case 307:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MODULE), (VALUE)((yyvsp[(2) - (5)].node)), (VALUE)(node_newnode(parser, (NODE_SCOPE), (VALUE)(local_tbl_gen(parser)), (VALUE)((yyvsp[(4) - (5)].node)), (VALUE)(0))), (VALUE)(0));
+   ((struct RNode*)((yyval.node)))->flags=((((struct RNode*)((yyval.node)))->flags&~(-1<<(8 +7)))|((((yyvsp[(3) - (5)].num))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+   local_pop_gen(parser);
+      ;}
+    break;
+  case 308:
+    {
+   (yyval.id) = (parser->parser_cur_mid);
+   (parser->parser_cur_mid) = (yyvsp[(2) - (2)].id);
+   (parser->parser_in_def)++;
+   local_push_gen(parser,0);
+      ;}
+    break;
+  case 309:
+    {
+   NODE *body = remove_begin((yyvsp[(5) - (6)].node));
+   reduce_nodes_gen(parser,&body);
+   (yyval.node) = node_newnode(parser, (NODE_DEFN), (VALUE)(0), (VALUE)((yyvsp[(2) - (6)].id)), (VALUE)(node_newnode(parser, (NODE_SCOPE), (VALUE)(local_tbl_gen(parser)), (VALUE)(body), (VALUE)((yyvsp[(4) - (6)].node)))));
+   fixpos((yyval.node), (yyvsp[(4) - (6)].node));
+   fixpos((yyval.node)->u3.node, (yyvsp[(4) - (6)].node));
+   local_pop_gen(parser);
+   (parser->parser_in_def)--;
+   (parser->parser_cur_mid) = (yyvsp[(3) - (6)].id);
+      ;}
+    break;
+  case 310:
+    {(parser->parser_lex_state) = EXPR_FNAME;;}
+    break;
+  case 311:
+    {
+   (parser->parser_in_single)++;
+   (parser->parser_lex_state) = EXPR_END;
+   local_push_gen(parser,0);
+      ;}
+    break;
+  case 312:
+    {
+   NODE *body = remove_begin((yyvsp[(8) - (9)].node));
+   reduce_nodes_gen(parser,&body);
+   (yyval.node) = node_newnode(parser, (NODE_DEFS), (VALUE)((yyvsp[(2) - (9)].node)), (VALUE)((yyvsp[(5) - (9)].id)), (VALUE)(node_newnode(parser, (NODE_SCOPE), (VALUE)(local_tbl_gen(parser)), (VALUE)(body), (VALUE)((yyvsp[(7) - (9)].node)))));
+   fixpos((yyval.node), (yyvsp[(2) - (9)].node));
+   fixpos((yyval.node)->u3.node, (yyvsp[(2) - (9)].node));
+   local_pop_gen(parser);
+   (parser->parser_in_single)--;
+      ;}
+    break;
+  case 313:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_BREAK), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 314:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_NEXT), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 315:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_REDO), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 316:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_RETRY), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 317:
+    {
+   value_expr_gen(parser, ((yyvsp[(1) - (1)].node)) = remove_begin((yyvsp[(1) - (1)].node)));
+   (yyval.node) = (yyvsp[(1) - (1)].node);
+          if (!(yyval.node)) (yyval.node) = node_newnode(parser, (NODE_NIL), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 318:
+    {
+   if ((((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) token_info_push(parser, "begin");
+      ;}
+    break;
+  case 319:
+    {
+   if ((((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) token_info_push(parser, "if");
+      ;}
+    break;
+  case 320:
+    {
+   if ((((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) token_info_push(parser, "unless");
+      ;}
+    break;
+  case 321:
+    {
+   if ((((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) token_info_push(parser, "while");
+      ;}
+    break;
+  case 322:
+    {
+   if ((((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) token_info_push(parser, "until");
+      ;}
+    break;
+  case 323:
+    {
+   if ((((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) token_info_push(parser, "case");
+      ;}
+    break;
+  case 324:
+    {
+   if ((((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) token_info_push(parser, "for");
+      ;}
+    break;
+  case 325:
+    {
+   if ((((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) token_info_push(parser, "class");
+      ;}
+    break;
+  case 326:
+    {
+   if ((((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) token_info_push(parser, "module");
+      ;}
+    break;
+  case 327:
+    {
+   if ((((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) token_info_push(parser, "def");
+      ;}
+    break;
+  case 328:
+    {
+   if ((((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) token_info_pop(parser, "end");
+      ;}
+    break;
+  case 335:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_IF), (VALUE)(cond_gen(parser, (yyvsp[(2) - (5)].node))), (VALUE)((yyvsp[(4) - (5)].node)), (VALUE)((yyvsp[(5) - (5)].node)));
+   fixpos((yyval.node), (yyvsp[(2) - (5)].node));
+      ;}
+    break;
+  case 337:
+    {
+   (yyval.node) = (yyvsp[(2) - (2)].node);
+      ;}
+    break;
+  case 340:
+    {
+   (yyval.node) = assignable_gen(parser, (yyvsp[(1) - (1)].id), 0);
+      ;}
+    break;
+  case 341:
+    {
+   (yyval.node) = (yyvsp[(2) - (3)].node);
+      ;}
+    break;
+  case 342:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ARRAY), (VALUE)((yyvsp[(1) - (1)].node)), (VALUE)(1), (VALUE)(0));
+      ;}
+    break;
+  case 343:
+    {
+   (yyval.node) = list_append_gen(parser,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 344:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)((yyvsp[(1) - (1)].node)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 345:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)((yyvsp[(1) - (4)].node)), (VALUE)(0), (VALUE)(assignable_gen(parser, (yyvsp[(4) - (4)].id), 0)));
+      ;}
+    break;
+  case 346:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)((yyvsp[(1) - (6)].node)), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_POSTARG), (VALUE)(assignable_gen(parser, (yyvsp[(4) - (6)].id), 0)), (VALUE)((yyvsp[(6) - (6)].node)), (VALUE)(0))));
+      ;}
+    break;
+  case 347:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)(0), (VALUE)(-1));
+      ;}
+    break;
+  case 348:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)((yyvsp[(1) - (5)].node)), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_POSTARG), (VALUE)(-1), (VALUE)((yyvsp[(5) - (5)].node)), (VALUE)(0))));
+      ;}
+    break;
+  case 349:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)(0), (VALUE)(0), (VALUE)(assignable_gen(parser, (yyvsp[(2) - (2)].id), 0)));
+      ;}
+    break;
+  case 350:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)(0), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_POSTARG), (VALUE)(assignable_gen(parser, (yyvsp[(2) - (4)].id), 0)), (VALUE)((yyvsp[(4) - (4)].node)), (VALUE)(0))));
+      ;}
+    break;
+  case 351:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)(0), (VALUE)(0), (VALUE)(-1));
+      ;}
+    break;
+  case 352:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_MASGN), (VALUE)(0), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_POSTARG), (VALUE)(-1), (VALUE)((yyvsp[(3) - (3)].node)), (VALUE)(0))));
+      ;}
+    break;
+  case 353:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (6)].node),(yyvsp[(3) - (6)].node),(yyvsp[(5) - (6)].id),0,(yyvsp[(6) - (6)].id));
+      ;}
+    break;
+  case 354:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (8)].node),(yyvsp[(3) - (8)].node),(yyvsp[(5) - (8)].id),(yyvsp[(7) - (8)].node),(yyvsp[(8) - (8)].id));
+      ;}
+    break;
+  case 355:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (4)].node),(yyvsp[(3) - (4)].node),0,0,(yyvsp[(4) - (4)].id));
+      ;}
+    break;
+  case 356:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (6)].node),(yyvsp[(3) - (6)].node),0,(yyvsp[(5) - (6)].node),(yyvsp[(6) - (6)].id));
+      ;}
+    break;
+  case 357:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (4)].node),0,(yyvsp[(3) - (4)].id),0,(yyvsp[(4) - (4)].id));
+      ;}
+    break;
+  case 358:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (2)].node),0,1,0,0);
+      ;}
+    break;
+  case 359:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (6)].node),0,(yyvsp[(3) - (6)].id),(yyvsp[(5) - (6)].node),(yyvsp[(6) - (6)].id));
+      ;}
+    break;
+  case 360:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (2)].node),0,0,0,(yyvsp[(2) - (2)].id));
+      ;}
+    break;
+  case 361:
+    {
+   (yyval.node) = new_args_gen(parser, 0,(yyvsp[(1) - (4)].node),(yyvsp[(3) - (4)].id),0,(yyvsp[(4) - (4)].id));
+      ;}
+    break;
+  case 362:
+    {
+   (yyval.node) = new_args_gen(parser, 0,(yyvsp[(1) - (6)].node),(yyvsp[(3) - (6)].id),(yyvsp[(5) - (6)].node),(yyvsp[(6) - (6)].id));
+      ;}
+    break;
+  case 363:
+    {
+   (yyval.node) = new_args_gen(parser, 0,(yyvsp[(1) - (2)].node),0,0,(yyvsp[(2) - (2)].id));
+      ;}
+    break;
+  case 364:
+    {
+   (yyval.node) = new_args_gen(parser, 0,(yyvsp[(1) - (4)].node),0,(yyvsp[(3) - (4)].node),(yyvsp[(4) - (4)].id));
+      ;}
+    break;
+  case 365:
+    {
+   (yyval.node) = new_args_gen(parser, 0,0,(yyvsp[(1) - (2)].id),0,(yyvsp[(2) - (2)].id));
+      ;}
+    break;
+  case 366:
+    {
+   (yyval.node) = new_args_gen(parser, 0,0,(yyvsp[(1) - (4)].id),(yyvsp[(3) - (4)].node),(yyvsp[(4) - (4)].id));
+      ;}
+    break;
+  case 367:
+    {
+   (yyval.node) = new_args_gen(parser, 0,0,0,0,(yyvsp[(1) - (1)].id));
+      ;}
+    break;
+  case 369:
+    {
+   (parser->parser_command_start) = ((VALUE)RUBY_Qtrue);
+      ;}
+    break;
+  case 370:
+    {
+   (yyval.node) = 0;
+      ;}
+    break;
+  case 371:
+    {
+   (yyval.node) = 0;
+      ;}
+    break;
+  case 372:
+    {
+   (yyval.node) = (yyvsp[(2) - (4)].node);
+      ;}
+    break;
+  case 374:
+    {
+   (yyval.node) = 0;
+      ;}
+    break;
+  case 377:
+    {
+   new_bv_gen(parser, (yyvsp[(1) - (1)].id));
+      ;}
+    break;
+  case 378:
+    {
+   (yyval.node) = 0;
+      ;}
+    break;
+  case 379:
+    {
+   dyna_push_gen(parser);
+   (yyval.num) = (parser->parser_lpar_beg);
+   (parser->parser_lpar_beg) = ++(parser->parser_paren_nest);
+      ;}
+    break;
+  case 380:
+    {
+   (parser->parser_lpar_beg) = (yyvsp[(1) - (3)].num);
+   (yyval.node) = (yyvsp[(2) - (3)].node);
+   (yyval.node)->u2.node = node_newnode(parser, (NODE_SCOPE), (VALUE)(local_tbl_gen(parser)), (VALUE)((yyvsp[(3) - (3)].node)), (VALUE)((yyvsp[(2) - (3)].node)->u1.node));
+   dyna_pop_gen(parser);
+      ;}
+    break;
+  case 381:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_LAMBDA), (VALUE)((yyvsp[(2) - (4)].node)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 382:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_LAMBDA), (VALUE)((yyvsp[(1) - (1)].node)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 383:
+    {
+   (yyval.node) = (yyvsp[(2) - (3)].node);
+      ;}
+    break;
+  case 384:
+    {
+   (yyval.node) = (yyvsp[(2) - (3)].node);
+      ;}
+    break;
+  case 385:
+    {
+   dyna_push_gen(parser);
+   (yyval.num) = (parser->parser_ruby_sourceline);
+      ;}
+    break;
+  case 386:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ITER), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_SCOPE), (VALUE)(local_tbl_gen(parser)), (VALUE)((yyvsp[(4) - (5)].node)), (VALUE)((yyvsp[(3) - (5)].node)))), (VALUE)(0));
+   ((struct RNode*)((yyval.node)))->flags=((((struct RNode*)((yyval.node)))->flags&~(-1<<(8 +7)))|((((yyvsp[(2) - (5)].num))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+   dyna_pop_gen(parser);
+      ;}
+    break;
+  case 387:
+    {
+   if (((int) (((((struct RNode*)((yyvsp[(1) - (2)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_YIELD) {
+       parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "block given to yield");
+   }
+   else {
+       block_dup_check_gen(parser,(yyvsp[(1) - (2)].node)->u3.node,(yyvsp[(2) - (2)].node));
+   }
+   (yyvsp[(2) - (2)].node)->u3.node = (yyvsp[(1) - (2)].node);
+   (yyval.node) = (yyvsp[(2) - (2)].node);
+   fixpos((yyval.node), (yyvsp[(1) - (2)].node));
+      ;}
+    break;
+  case 388:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (4)].node)), (VALUE)((yyvsp[(3) - (4)].id)), (VALUE)((yyvsp[(4) - (4)].node)));
+      ;}
+    break;
+  case 389:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (4)].node)), (VALUE)((yyvsp[(3) - (4)].id)), (VALUE)((yyvsp[(4) - (4)].node)));
+      ;}
+    break;
+  case 390:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_FCALL), (VALUE)(0), (VALUE)((yyvsp[(1) - (2)].id)), (VALUE)((yyvsp[(2) - (2)].node)));
+   fixpos((yyval.node), (yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 391:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (4)].node)), (VALUE)((yyvsp[(3) - (4)].id)), (VALUE)((yyvsp[(4) - (4)].node)));
+   fixpos((yyval.node), (yyvsp[(1) - (4)].node));
+      ;}
+    break;
+  case 392:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (4)].node)), (VALUE)((yyvsp[(3) - (4)].id)), (VALUE)((yyvsp[(4) - (4)].node)));
+   fixpos((yyval.node), (yyvsp[(1) - (4)].node));
+      ;}
+    break;
+  case 393:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)((yyvsp[(3) - (3)].id)), (VALUE)(0));
+      ;}
+    break;
+  case 394:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)((__builtin_constant_p("call") ? __extension__ (rb_intern2("call", strlen("call"))) : (rb_intern)("call"))), (VALUE)((yyvsp[(3) - (3)].node)));
+   fixpos((yyval.node), (yyvsp[(1) - (3)].node));
+      ;}
+    break;
+  case 395:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)((__builtin_constant_p("call") ? __extension__ (rb_intern2("call", strlen("call"))) : (rb_intern)("call"))), (VALUE)((yyvsp[(3) - (3)].node)));
+   fixpos((yyval.node), (yyvsp[(1) - (3)].node));
+      ;}
+    break;
+  case 396:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_SUPER), (VALUE)(0), (VALUE)(0), (VALUE)((yyvsp[(2) - (2)].node)));
+      ;}
+    break;
+  case 397:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ZSUPER), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 398:
+    {
+   if ((yyvsp[(1) - (4)].node) && ((int) (((((struct RNode*)((yyvsp[(1) - (4)].node))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_SELF)
+       (yyval.node) = node_newnode(parser, (NODE_FCALL), (VALUE)(0), (VALUE)(336), (VALUE)((yyvsp[(3) - (4)].node)));
+   else
+       (yyval.node) = node_newnode(parser, (NODE_CALL), (VALUE)((yyvsp[(1) - (4)].node)), (VALUE)(336), (VALUE)((yyvsp[(3) - (4)].node)));
+   fixpos((yyval.node), (yyvsp[(1) - (4)].node));
+      ;}
+    break;
+  case 399:
+    {
+   dyna_push_gen(parser);
+   (yyval.num) = (parser->parser_ruby_sourceline);
+      ;}
+    break;
+  case 400:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ITER), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_SCOPE), (VALUE)(local_tbl_gen(parser)), (VALUE)((yyvsp[(4) - (5)].node)), (VALUE)((yyvsp[(3) - (5)].node)))), (VALUE)(0));
+   ((struct RNode*)((yyval.node)))->flags=((((struct RNode*)((yyval.node)))->flags&~(-1<<(8 +7)))|((((yyvsp[(2) - (5)].num))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+   ((struct RNode*)((yyval.node)->u2.node))->flags=((((struct RNode*)((yyval.node)->u2.node))->flags&~(-1<<(8 +7)))|((((yyvsp[(2) - (5)].num))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+   ((struct RNode*)((yyval.node)->u2.node->u2.node))->flags=((((struct RNode*)((yyval.node)->u2.node->u2.node))->flags&~(-1<<(8 +7)))|((((yyvsp[(2) - (5)].num))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+   dyna_pop_gen(parser);
+      ;}
+    break;
+  case 401:
+    {
+   dyna_push_gen(parser);
+   (yyval.num) = (parser->parser_ruby_sourceline);
+      ;}
+    break;
+  case 402:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ITER), (VALUE)(0), (VALUE)(node_newnode(parser, (NODE_SCOPE), (VALUE)(local_tbl_gen(parser)), (VALUE)((yyvsp[(4) - (5)].node)), (VALUE)((yyvsp[(3) - (5)].node)))), (VALUE)(0));
+   ((struct RNode*)((yyval.node)))->flags=((((struct RNode*)((yyval.node)))->flags&~(-1<<(8 +7)))|((((yyvsp[(2) - (5)].num))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+   dyna_pop_gen(parser);
+      ;}
+    break;
+  case 403:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_WHEN), (VALUE)((yyvsp[(2) - (5)].node)), (VALUE)((yyvsp[(4) - (5)].node)), (VALUE)((yyvsp[(5) - (5)].node)));
+      ;}
+    break;
+  case 406:
+    {
+   if ((yyvsp[(3) - (6)].node)) {
+       (yyvsp[(3) - (6)].node) = node_assign_gen(parser, (yyvsp[(3) - (6)].node), node_newnode(parser, (NODE_ERRINFO), (VALUE)(0), (VALUE)(0), (VALUE)(0)));
+       (yyvsp[(5) - (6)].node) = block_append_gen(parser,(yyvsp[(3) - (6)].node),(yyvsp[(5) - (6)].node));
+   }
+   (yyval.node) = node_newnode(parser, (NODE_RESBODY), (VALUE)((yyvsp[(6) - (6)].node)), (VALUE)((yyvsp[(5) - (6)].node)), (VALUE)((yyvsp[(2) - (6)].node)));
+   fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
+      ;}
+    break;
+  case 408:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ARRAY), (VALUE)((yyvsp[(1) - (1)].node)), (VALUE)(1), (VALUE)(0));
+      ;}
+    break;
+  case 409:
+    {
+   if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
+      ;}
+    break;
+  case 411:
+    {
+   (yyval.node) = (yyvsp[(2) - (2)].node);
+      ;}
+    break;
+  case 413:
+    {
+   (yyval.node) = (yyvsp[(2) - (2)].node);
+      ;}
+    break;
+  case 416:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_LIT), (VALUE)((((VALUE)((yyvsp[(1) - (1)].id))<<RUBY_SPECIAL_SHIFT)|RUBY_SYMBOL_FLAG)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 418:
+    {
+   NODE *node = (yyvsp[(1) - (1)].node);
+   if (!node) {
+       node = node_newnode(parser, (NODE_STR), (VALUE)(rb_enc_str_new(0,0,parser->enc)), (VALUE)(0), (VALUE)(0));
+   }
+   else {
+       node = evstr2dstr_gen(parser,node);
+   }
+   (yyval.node) = node;
+      ;}
+    break;
+  case 421:
+    {
+   (yyval.node) = literal_concat_gen(parser,(yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 422:
+    {
+   (yyval.node) = (yyvsp[(2) - (3)].node);
+      ;}
+    break;
+  case 423:
+    {
+   NODE *node = (yyvsp[(2) - (3)].node);
+   if (!node) {
+       node = node_newnode(parser, (NODE_XSTR), (VALUE)(rb_enc_str_new(0,0,parser->enc)), (VALUE)(0), (VALUE)(0));
+   }
+   else {
+       switch (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+         case NODE_STR:
+    ((struct RNode*)(node))->flags=((((struct RNode*)(node))->flags&~(((VALUE)0x7f)<<8))|(((NODE_XSTR)<<8)&(((VALUE)0x7f)<<8)));
+    break;
+         case NODE_DSTR:
+    ((struct RNode*)(node))->flags=((((struct RNode*)(node))->flags&~(((VALUE)0x7f)<<8))|(((NODE_DXSTR)<<8)&(((VALUE)0x7f)<<8)));
+    break;
+         default:
+    node = node_newnode(parser, (NODE_DXSTR), (VALUE)(rb_enc_str_new(0,0,parser->enc)), (VALUE)(1), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)(node), (VALUE)(1), (VALUE)(0))));
+    break;
+       }
+   }
+   (yyval.node) = node;
+      ;}
+    break;
+  case 424:
+    {
+   int options = (yyvsp[(3) - (3)].num);
+   NODE *node = (yyvsp[(2) - (3)].node);
+                        NODE *list;
+   if (!node) {
+       node = node_newnode(parser, (NODE_LIT), (VALUE)(reg_compile_gen(parser, rb_enc_str_new(0,0,parser->enc), options)), (VALUE)(0), (VALUE)(0));
+   }
+   else switch (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+     case NODE_STR:
+       {
+    VALUE src = node->u1.value;
+    ((struct RNode*)(node))->flags=((((struct RNode*)(node))->flags&~(((VALUE)0x7f)<<8))|(((NODE_LIT)<<8)&(((VALUE)0x7f)<<8)));
+    node->u1.value = reg_compile_gen(parser, src, options);
+       }
+       break;
+     default:
+       node = node_newnode(parser, (NODE_DSTR), (VALUE)(rb_enc_str_new(0,0,parser->enc)), (VALUE)(1), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)(node), (VALUE)(1), (VALUE)(0))));
+     case NODE_DSTR:
+       if (options & (1<<16)) {
+    ((struct RNode*)(node))->flags=((((struct RNode*)(node))->flags&~(((VALUE)0x7f)<<8))|(((NODE_DREGX_ONCE)<<8)&(((VALUE)0x7f)<<8)));
+       }
+       else {
+    ((struct RNode*)(node))->flags=((((struct RNode*)(node))->flags&~(((VALUE)0x7f)<<8))|(((NODE_DREGX)<<8)&(((VALUE)0x7f)<<8)));
+       }
+       node->u2.id = options & 0xff;
+                            reg_fragment_check_gen(parser, node->u1.value, options);
+                            for (list = node->u3.node; list; list = list->u3.node) {
+                                if (((int) (((((struct RNode*)(list->u1.node)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_STR) {
+                                    reg_fragment_check_gen(parser, list->u1.node->u1.value, options);
+                                }
+                            }
+       break;
+   }
+   (yyval.node) = node;
+      ;}
+    break;
+  case 425:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ZARRAY), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 426:
+    {
+   (yyval.node) = (yyvsp[(2) - (3)].node);
+      ;}
+    break;
+  case 427:
+    {
+   (yyval.node) = 0;
+      ;}
+    break;
+  case 428:
+    {
+   (yyval.node) = list_append_gen(parser,(yyvsp[(1) - (3)].node),evstr2dstr_gen(parser,(yyvsp[(2) - (3)].node)));
+      ;}
+    break;
+  case 430:
+    {
+   (yyval.node) = literal_concat_gen(parser,(yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 431:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_ZARRAY), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 432:
+    {
+   (yyval.node) = (yyvsp[(2) - (3)].node);
+      ;}
+    break;
+  case 433:
+    {
+   (yyval.node) = 0;
+      ;}
+    break;
+  case 434:
+    {
+   (yyval.node) = list_append_gen(parser,(yyvsp[(1) - (3)].node),(yyvsp[(2) - (3)].node));
+      ;}
+    break;
+  case 435:
+    {
+   (yyval.node) = 0;
+      ;}
+    break;
+  case 436:
+    {
+   (yyval.node) = literal_concat_gen(parser,(yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 437:
+    {
+   (yyval.node) = 0;
+      ;}
+    break;
+  case 438:
+    {
+   (yyval.node) = literal_concat_gen(parser,(yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 440:
+    {
+   (yyval.node) = (parser->parser_lex_strterm);
+   (parser->parser_lex_strterm) = 0;
+   (parser->parser_lex_state) = EXPR_BEG;
+      ;}
+    break;
+  case 441:
+    {
+   (parser->parser_lex_strterm) = (yyvsp[(2) - (3)].node);
+   (yyval.node) = node_newnode(parser, (NODE_EVSTR), (VALUE)(0), (VALUE)(((yyvsp[(3) - (3)].node))), (VALUE)(0));
+      ;}
+    break;
+  case 442:
+    {
+   (yyval.node) = (parser->parser_lex_strterm);
+   (parser->parser_lex_strterm) = 0;
+   (parser->parser_lex_state) = EXPR_BEG;
+   ((parser->parser_cond_stack) = ((parser->parser_cond_stack)<<1)|((0)&1));
+   ((parser->parser_cmdarg_stack) = ((parser->parser_cmdarg_stack)<<1)|((0)&1));
+      ;}
+    break;
+  case 443:
+    {
+   (parser->parser_lex_strterm) = (yyvsp[(2) - (4)].node);
+   ((parser->parser_cond_stack) = ((parser->parser_cond_stack) >> 1) | ((parser->parser_cond_stack) & 1));
+   ((parser->parser_cmdarg_stack) = ((parser->parser_cmdarg_stack) >> 1) | ((parser->parser_cmdarg_stack) & 1));
+   if ((yyvsp[(3) - (4)].node)) (yyvsp[(3) - (4)].node)->flags &= ~(((VALUE)1)<<7);
+   (yyval.node) = new_evstr_gen(parser,(yyvsp[(3) - (4)].node));
+      ;}
+    break;
+  case 444:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_GVAR), (VALUE)((yyvsp[(1) - (1)].id)), (VALUE)(0), (VALUE)(rb_global_entry((yyvsp[(1) - (1)].id))));
+      ;}
+    break;
+  case 445:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_IVAR), (VALUE)((yyvsp[(1) - (1)].id)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 446:
+    {
+   (yyval.node) = node_newnode(parser, (NODE_CVAR), (VALUE)((yyvsp[(1) - (1)].id)), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 448:
+    {
+   (parser->parser_lex_state) = EXPR_END;
+   (yyval.id) = (yyvsp[(2) - (2)].id);
+      ;}
+    break;
+  case 453:
+    {
+   (parser->parser_lex_state) = EXPR_END;
+   if (!((yyval.node) = (yyvsp[(2) - (3)].node))) {
+       (yyval.node) = node_newnode(parser, (NODE_LIT), (VALUE)((((VALUE)((__builtin_constant_p("") ? __extension__ (rb_intern2("", strlen(""))) : (rb_intern)("")))<<RUBY_SPECIAL_SHIFT)|RUBY_SYMBOL_FLAG)), (VALUE)(0), (VALUE)(0));
+   }
+   else {
+       VALUE lit;
+       switch (((int) (((((struct RNode*)((yyval.node))))->flags & (((VALUE)0x7f)<<8))>>8))) {
+         case NODE_DSTR:
+    ((struct RNode*)((yyval.node)))->flags=((((struct RNode*)((yyval.node)))->flags&~(((VALUE)0x7f)<<8))|(((NODE_DSYM)<<8)&(((VALUE)0x7f)<<8)));
+    break;
+         case NODE_STR:
+    lit = (yyval.node)->u1.value;
+    (yyval.node)->u1.value = (((VALUE)(rb_intern_str(lit))<<RUBY_SPECIAL_SHIFT)|RUBY_SYMBOL_FLAG);
+    ((struct RNode*)((yyval.node)))->flags=((((struct RNode*)((yyval.node)))->flags&~(((VALUE)0x7f)<<8))|(((NODE_LIT)<<8)&(((VALUE)0x7f)<<8)));
+    break;
+         default:
+    (yyval.node) = node_newnode(parser, (NODE_DSYM), (VALUE)(rb_enc_str_new(0,0,parser->enc)), (VALUE)(1), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)((yyval.node)), (VALUE)(1), (VALUE)(0))));
+    break;
+       }
+   }
+      ;}
+    break;
+  case 456:
+    {
+   (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 457:
+    {
+   (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 463:
+    {(yyval.id) = 289;;}
+    break;
+  case 464:
+    {(yyval.id) = 288;;}
+    break;
+  case 465:
+    {(yyval.id) = 290;;}
+    break;
+  case 466:
+    {(yyval.id) = 291;;}
+    break;
+  case 467:
+    {(yyval.id) = 305;;}
+    break;
+  case 468:
+    {(yyval.id) = 304;;}
+    break;
+  case 469:
+    {(yyval.id) = 306;;}
+    break;
+  case 470:
+    {
+   if (!((yyval.node) = gettable_gen(parser,(yyvsp[(1) - (1)].id)))) (yyval.node) = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 471:
+    {
+   (yyval.node) = assignable_gen(parser, (yyvsp[(1) - (1)].id), 0);
+      ;}
+    break;
+  case 474:
+    {
+   (yyval.node) = 0;
+      ;}
+    break;
+  case 475:
+    {
+   (parser->parser_lex_state) = EXPR_BEG;
+      ;}
+    break;
+  case 476:
+    {
+   (yyval.node) = (yyvsp[(3) - (4)].node);
+      ;}
+    break;
+  case 477:
+    {
+   (yyerrstatus = 0);
+   (yyval.node) = 0;
+      ;}
+    break;
+  case 478:
+    {
+   (yyval.node) = (yyvsp[(2) - (3)].node);
+   (parser->parser_lex_state) = EXPR_BEG;
+   (parser->parser_command_start) = ((VALUE)RUBY_Qtrue);
+      ;}
+    break;
+  case 479:
+    {
+   (yyval.node) = (yyvsp[(1) - (2)].node);
+      ;}
+    break;
+  case 480:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (6)].node),(yyvsp[(3) - (6)].node),(yyvsp[(5) - (6)].id),0,(yyvsp[(6) - (6)].id));
+      ;}
+    break;
+  case 481:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (8)].node),(yyvsp[(3) - (8)].node),(yyvsp[(5) - (8)].id),(yyvsp[(7) - (8)].node),(yyvsp[(8) - (8)].id));
+      ;}
+    break;
+  case 482:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (4)].node),(yyvsp[(3) - (4)].node),0,0,(yyvsp[(4) - (4)].id));
+      ;}
+    break;
+  case 483:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (6)].node),(yyvsp[(3) - (6)].node),0,(yyvsp[(5) - (6)].node),(yyvsp[(6) - (6)].id));
+      ;}
+    break;
+  case 484:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (4)].node),0,(yyvsp[(3) - (4)].id),0,(yyvsp[(4) - (4)].id));
+      ;}
+    break;
+  case 485:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (6)].node),0,(yyvsp[(3) - (6)].id),(yyvsp[(5) - (6)].node),(yyvsp[(6) - (6)].id));
+      ;}
+    break;
+  case 486:
+    {
+   (yyval.node) = new_args_gen(parser, (yyvsp[(1) - (2)].node),0,0,0,(yyvsp[(2) - (2)].id));
+      ;}
+    break;
+  case 487:
+    {
+   (yyval.node) = new_args_gen(parser, 0,(yyvsp[(1) - (4)].node),(yyvsp[(3) - (4)].id),0,(yyvsp[(4) - (4)].id));
+      ;}
+    break;
+  case 488:
+    {
+   (yyval.node) = new_args_gen(parser, 0,(yyvsp[(1) - (6)].node),(yyvsp[(3) - (6)].id),(yyvsp[(5) - (6)].node),(yyvsp[(6) - (6)].id));
+      ;}
+    break;
+  case 489:
+    {
+   (yyval.node) = new_args_gen(parser, 0,(yyvsp[(1) - (2)].node),0,0,(yyvsp[(2) - (2)].id));
+      ;}
+    break;
+  case 490:
+    {
+   (yyval.node) = new_args_gen(parser, 0,(yyvsp[(1) - (4)].node),0,(yyvsp[(3) - (4)].node),(yyvsp[(4) - (4)].id));
+      ;}
+    break;
+  case 491:
+    {
+   (yyval.node) = new_args_gen(parser, 0,0,(yyvsp[(1) - (2)].id),0,(yyvsp[(2) - (2)].id));
+      ;}
+    break;
+  case 492:
+    {
+   (yyval.node) = new_args_gen(parser, 0,0,(yyvsp[(1) - (4)].id),(yyvsp[(3) - (4)].node),(yyvsp[(4) - (4)].id));
+      ;}
+    break;
+  case 493:
+    {
+   (yyval.node) = new_args_gen(parser, 0,0,0,0,(yyvsp[(1) - (1)].id));
+      ;}
+    break;
+  case 494:
+    {
+   (yyval.node) = new_args_gen(parser, 0,0,0,0,0);
+      ;}
+    break;
+  case 495:
+    {
+   parser_yyerror(parser, "formal argument cannot be a constant");
+   (yyval.id) = 0;
+      ;}
+    break;
+  case 496:
+    {
+   parser_yyerror(parser, "formal argument cannot be an instance variable");
+   (yyval.id) = 0;
+      ;}
+    break;
+  case 497:
+    {
+   parser_yyerror(parser, "formal argument cannot be a global variable");
+   (yyval.id) = 0;
+      ;}
+    break;
+  case 498:
+    {
+   parser_yyerror(parser, "formal argument cannot be a class variable");
+   (yyval.id) = 0;
+      ;}
+    break;
+  case 500:
+    {
+   if (!((((yyvsp[(1) - (1)].id))>376)&&(((yyvsp[(1) - (1)].id))&0x07)==0x00))
+       parser_yyerror(parser, "formal argument must be local variable");
+   shadowing_lvar_gen(parser, (yyvsp[(1) - (1)].id));
+   (yyval.id) = (yyvsp[(1) - (1)].id);
+      ;}
+    break;
+  case 501:
+    {
+   arg_var_gen(parser, (yyvsp[(1) - (1)].id));
+   (yyval.node) = node_newnode(parser, (NODE_ARGS_AUX), (VALUE)((yyvsp[(1) - (1)].id)), (VALUE)(1), (VALUE)(0));
+      ;}
+    break;
+  case 502:
+    {
+   ID tid = internal_id_gen(parser);
+   arg_var_gen(parser, tid);
+   if (dyna_in_block_gen(parser)) {
+       (yyvsp[(2) - (3)].node)->u2.node = node_newnode(parser, (NODE_DVAR), (VALUE)(tid), (VALUE)(0), (VALUE)(0));
+   }
+   else {
+       (yyvsp[(2) - (3)].node)->u2.node = node_newnode(parser, (NODE_LVAR), (VALUE)(tid), (VALUE)(0), (VALUE)(0));
+   }
+   (yyval.node) = node_newnode(parser, (NODE_ARGS_AUX), (VALUE)(tid), (VALUE)(1), (VALUE)(0));
+   (yyval.node)->u3.node = (yyvsp[(2) - (3)].node);
+      ;}
+    break;
+  case 504:
+    {
+   (yyval.node) = (yyvsp[(1) - (3)].node);
+   (yyval.node)->u2.argc++;
+   (yyval.node)->u3.node = block_append_gen(parser,(yyval.node)->u3.node,(yyvsp[(3) - (3)].node)->u3.node);
+   rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 505:
+    {
+   if (!((((yyvsp[(1) - (3)].id))>376)&&(((yyvsp[(1) - (3)].id))&0x07)==0x00))
+       parser_yyerror(parser, "formal argument must be local variable");
+   shadowing_lvar_gen(parser, (yyvsp[(1) - (3)].id));
+   arg_var_gen(parser, (yyvsp[(1) - (3)].id));
+   (yyval.node) = node_newnode(parser, (NODE_OPT_ARG), (VALUE)(0), (VALUE)(assignable_gen(parser, (yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node))), (VALUE)(0));
+      ;}
+    break;
+  case 506:
+    {
+   if (!((((yyvsp[(1) - (3)].id))>376)&&(((yyvsp[(1) - (3)].id))&0x07)==0x00))
+       parser_yyerror(parser, "formal argument must be local variable");
+   shadowing_lvar_gen(parser, (yyvsp[(1) - (3)].id));
+   arg_var_gen(parser, (yyvsp[(1) - (3)].id));
+   (yyval.node) = node_newnode(parser, (NODE_OPT_ARG), (VALUE)(0), (VALUE)(assignable_gen(parser, (yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node))), (VALUE)(0));
+      ;}
+    break;
+  case 507:
+    {
+   (yyval.node) = (yyvsp[(1) - (1)].node);
+      ;}
+    break;
+  case 508:
+    {
+   NODE *opts = (yyvsp[(1) - (3)].node);
+   while (opts->u3.node) {
+       opts = opts->u3.node;
+   }
+   opts->u3.node = (yyvsp[(3) - (3)].node);
+   (yyval.node) = (yyvsp[(1) - (3)].node);
+      ;}
+    break;
+  case 509:
+    {
+   (yyval.node) = (yyvsp[(1) - (1)].node);
+      ;}
+    break;
+  case 510:
+    {
+   NODE *opts = (yyvsp[(1) - (3)].node);
+   while (opts->u3.node) {
+       opts = opts->u3.node;
+   }
+   opts->u3.node = (yyvsp[(3) - (3)].node);
+   (yyval.node) = (yyvsp[(1) - (3)].node);
+      ;}
+    break;
+  case 513:
+    {
+   if (!((((yyvsp[(2) - (2)].id))>376)&&(((yyvsp[(2) - (2)].id))&0x07)==0x00))
+       parser_yyerror(parser, "rest argument must be local variable");
+   shadowing_lvar_gen(parser, (yyvsp[(2) - (2)].id));
+   arg_var_gen(parser, (yyvsp[(2) - (2)].id));
+   (yyval.id) = (yyvsp[(2) - (2)].id);
+      ;}
+    break;
+  case 514:
+    {
+   (yyval.id) = internal_id_gen(parser);
+   arg_var_gen(parser, (yyval.id));
+      ;}
+    break;
+  case 517:
+    {
+   if (!((((yyvsp[(2) - (2)].id))>376)&&(((yyvsp[(2) - (2)].id))&0x07)==0x00))
+       parser_yyerror(parser, "block argument must be local variable");
+   else if (!dyna_in_block_gen(parser) && local_id_gen(parser, (yyvsp[(2) - (2)].id)))
+       parser_yyerror(parser, "duplicated block argument name");
+   shadowing_lvar_gen(parser, (yyvsp[(2) - (2)].id));
+   arg_var_gen(parser, (yyvsp[(2) - (2)].id));
+   (yyval.id) = (yyvsp[(2) - (2)].id);
+      ;}
+    break;
+  case 518:
+    {
+   (yyval.id) = (yyvsp[(2) - (2)].id);
+      ;}
+    break;
+  case 519:
+    {
+   (yyval.id) = 0;
+      ;}
+    break;
+  case 520:
+    {
+   value_expr_gen(parser, ((yyvsp[(1) - (1)].node)) = remove_begin((yyvsp[(1) - (1)].node)));
+   (yyval.node) = (yyvsp[(1) - (1)].node);
+          if (!(yyval.node)) (yyval.node) = node_newnode(parser, (NODE_NIL), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+      ;}
+    break;
+  case 521:
+    {(parser->parser_lex_state) = EXPR_BEG;;}
+    break;
+  case 522:
+    {
+   if ((yyvsp[(3) - (4)].node) == 0) {
+       parser_yyerror(parser, "can't define singleton method for ().");
+   }
+   else {
+       switch (((int) (((((struct RNode*)((yyvsp[(3) - (4)].node))))->flags & (((VALUE)0x7f)<<8))>>8))) {
+         case NODE_STR:
+         case NODE_DSTR:
+         case NODE_XSTR:
+         case NODE_DXSTR:
+         case NODE_DREGX:
+         case NODE_LIT:
+         case NODE_ARRAY:
+         case NODE_ZARRAY:
+    parser_yyerror(parser, "can't define singleton method for literals");
+         default:
+    value_expr_gen(parser, ((yyvsp[(3) - (4)].node)) = remove_begin((yyvsp[(3) - (4)].node)));
+    break;
+       }
+   }
+   (yyval.node) = (yyvsp[(3) - (4)].node);
+      ;}
+    break;
+  case 524:
+    {
+   (yyval.node) = (yyvsp[(1) - (2)].node);
+      ;}
+    break;
+  case 526:
+    {
+   (yyval.node) = list_concat_gen(parser,(yyvsp[(1) - (3)].node),(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 527:
+    {
+   (yyval.node) = list_append_gen(parser,node_newnode(parser, (NODE_ARRAY), (VALUE)((yyvsp[(1) - (3)].node)), (VALUE)(1), (VALUE)(0)),(yyvsp[(3) - (3)].node));
+      ;}
+    break;
+  case 528:
+    {
+   (yyval.node) = list_append_gen(parser,node_newnode(parser, (NODE_ARRAY), (VALUE)(node_newnode(parser, (NODE_LIT), (VALUE)((((VALUE)((yyvsp[(1) - (2)].id))<<RUBY_SPECIAL_SHIFT)|RUBY_SYMBOL_FLAG)), (VALUE)(0), (VALUE)(0))), (VALUE)(1), (VALUE)(0)),(yyvsp[(2) - (2)].node));
+      ;}
+    break;
+  case 550:
+    {(yyerrstatus = 0);;}
+    break;
+  case 553:
+    {(yyerrstatus = 0);;}
+    break;
+  case 554:
+    {
+   (yyval.node) = 0;
+      ;}
+    break;
+      default: break;
+    }
+  do { if ((parser->parser_yydebug)) { fprintf (stderr, "%s ", "-> $$ ="); yy_symbol_print (stderr, yyr1[yyn], &yyval, parser); fprintf (stderr, "\n"); } } while ((0));
+  (yyvsp -= (yylen), yyssp -= (yylen));
+  yylen = 0;
+  do { if ((parser->parser_yydebug)) yy_stack_print ((yyss), (yyssp)); } while ((0));
+  *++yyvsp = yyval;
+  yyn = yyr1[yyn];
+  yystate = yypgoto[yyn - 149] + *yyssp;
+  if (0 <= yystate && yystate <= 10225 && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - 149];
+  goto yynewstate;
+yyerrlab:
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+      {
+ unsigned int yysize = yysyntax_error (0, yystate, yychar);
+ if (yymsg_alloc < yysize && yymsg_alloc < ((unsigned int) -1))
+   {
+     unsigned int yyalloc = 2 * yysize;
+     if (! (yysize <= yyalloc && yyalloc <= ((unsigned int) -1)))
+       yyalloc = ((unsigned int) -1);
+     if (yymsg != yymsgbuf)
+       rb_parser_free(parser, yymsg);
+     yymsg = (char *) rb_parser_malloc(parser, yyalloc);
+     if (yymsg)
+       yymsg_alloc = yyalloc;
+     else
+       {
+  yymsg = yymsgbuf;
+  yymsg_alloc = sizeof yymsgbuf;
+       }
+   }
+ if (0 < yysize && yysize <= yymsg_alloc)
+   {
+     (void) yysyntax_error (yymsg, yystate, yychar);
+     parser_yyerror (parser, yymsg);
+   }
+ else
+   {
+     parser_yyerror (parser, "syntax error");
+     if (yysize != 0)
+       goto yyexhaustedlab;
+   }
+      }
+    }
+  if (yyerrstatus == 3)
+    {
+      if (yychar <= 0)
+ {
+   if (yychar == 0)
+     goto yyabortlab;
+ }
+      else
+ {
+   yydestruct ("Error: discarding",
+        yytoken, &yylval, parser);
+   yychar = (-2);
+ }
+    }
+  goto yyerrlab1;
+yyerrorlab:
+  if ( 0)
+     goto yyerrorlab;
+  (yyvsp -= (yylen), yyssp -= (yylen));
+  yylen = 0;
+  do { if ((parser->parser_yydebug)) yy_stack_print ((yyss), (yyssp)); } while ((0));
+  yystate = *yyssp;
+  goto yyerrlab1;
+yyerrlab1:
+  yyerrstatus = 3;
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != -747)
+ {
+   yyn += 1;
+   if (0 <= yyn && yyn <= 10225 && yycheck[yyn] == 1)
+     {
+       yyn = yytable[yyn];
+       if (0 < yyn)
+  break;
+     }
+ }
+      if (yyssp == yyss)
+ goto yyabortlab;
+      yydestruct ("Error: popping",
+    yystos[yystate], yyvsp, parser);
+      (yyvsp -= (1), yyssp -= (1));
+      yystate = *yyssp;
+      do { if ((parser->parser_yydebug)) yy_stack_print ((yyss), (yyssp)); } while ((0));
+    }
+  if (yyn == 3)
+    goto yyacceptlab;
+  *++yyvsp = yylval;
+  do { if ((parser->parser_yydebug)) { fprintf (stderr, "%s ", "Shifting"); yy_symbol_print (stderr, yystos[yyn], yyvsp, parser); fprintf (stderr, "\n"); } } while ((0));
+  yystate = yyn;
+  goto yynewstate;
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+yyexhaustedlab:
+  parser_yyerror (parser, "memory exhausted");
+  yyresult = 2;
+yyreturn:
+  if (yychar != 0 && yychar != (-2))
+     yydestruct ("Cleanup: discarding lookahead",
+   yytoken, &yylval, parser);
+  (yyvsp -= (yylen), yyssp -= (yylen));
+  do { if ((parser->parser_yydebug)) yy_stack_print ((yyss), (yyssp)); } while ((0));
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+    yystos[*yyssp], yyvsp, parser);
+      (yyvsp -= (1), yyssp -= (1));
+    }
+  if (yyss != yyssa)
+    rb_parser_free(parser, yyss);
+  if (yymsg != yymsgbuf)
+    rb_parser_free(parser, yymsg);
+  return (yyresult);
+}
+static int parser_regx_options(struct parser_params*);
+static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
+static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
+static int parser_parse_string(struct parser_params*,NODE*);
+static int parser_here_document(struct parser_params*,NODE*);
+extern OnigEncoding OnigEncDefaultCharEncoding;
+unsigned long ruby_scan_oct(const char *, int, int *);
+unsigned long ruby_scan_hex(const char *, int, int *);
+void ruby_qsort(void *, const int, const int,
+  int (*)(const void *, const void *, void *), void *);
+void ruby_setenv(const char *, const char *);
+void ruby_unsetenv(const char *);
+char *ruby_strdup(const char *);
+char *ruby_getcwd(void);
+double ruby_strtod(const char *, char **);
+void ruby_each_words(const char *, void (*)(const char*, int, void*), void *);
+static int
+token_info_get_column(struct parser_params *parser, const char *token)
+{
+    int column = 1;
+    const char *p, *pend = (parser->parser_lex_p) - strlen(token);
+    for (p = (parser->parser_lex_pbeg); p < pend; p++) {
+ if (*p == '\t') {
+     column = (((column - 1) / 8) + 1) * 8;
+ }
+ column++;
+    }
+    return column;
+}
+static int
+token_info_has_nonspaces(struct parser_params *parser, const char *token)
+{
+    const char *p, *pend = (parser->parser_lex_p) - strlen(token);
+    for (p = (parser->parser_lex_pbeg); p < pend; p++) {
+ if (*p != ' ' && *p != '\t') {
+     return 1;
+ }
+    }
+    return 0;
+}
+static void
+token_info_push(struct parser_params *parser, const char *token)
+{
+    token_info *ptinfo;
+    if ((parser->parser_compile_for_eval)) return;
+    ptinfo = (token_info*)ruby_xmalloc(sizeof(token_info));
+    ptinfo->token = token;
+    ptinfo->linenum = (parser->parser_ruby_sourceline);
+    ptinfo->column = token_info_get_column(parser, token);
+    ptinfo->nonspc = token_info_has_nonspaces(parser, token);
+    ptinfo->next = parser->parser_token_info;
+    parser->parser_token_info = ptinfo;
+}
+static void
+token_info_pop(struct parser_params *parser, const char *token)
+{
+    int linenum;
+    token_info *ptinfo = parser->parser_token_info;
+    if (!ptinfo) return;
+    parser->parser_token_info = ptinfo->next;
+    if (token_info_get_column(parser, token) == ptinfo->column) {
+ goto finish;
+    }
+    linenum = (parser->parser_ruby_sourceline);
+    if (linenum == ptinfo->linenum) {
+ goto finish;
+    }
+    if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) {
+ goto finish;
+    }
+    rb_compile_warning((parser->parser_ruby_sourcefile), linenum,
+               "mismatched indentations at '%s' with '%s' at %d",
+        token, ptinfo->token, ptinfo->linenum);
+  finish:
+    ruby_xfree(ptinfo);
+}
+static int
+parser_yyerror(struct parser_params *parser, const char *msg)
+{
+    const int max_line_margin = 30;
+    const char *p, *pe;
+    char *buf;
+    int len, i;
+    parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "%s", msg);
+    p = (parser->parser_lex_p);
+    while ((parser->parser_lex_pbeg) <= p) {
+ if (*p == '\n') break;
+ p--;
+    }
+    p++;
+    pe = (parser->parser_lex_p);
+    while (pe < (parser->parser_lex_pend)) {
+ if (*pe == '\n') break;
+ pe++;
+    }
+    len = pe - p;
+    if (len > 4) {
+ char *p2;
+ const char *pre = "", *post = "";
+ if (len > max_line_margin * 2 + 10) {
+     if ((parser->parser_lex_p) - p > max_line_margin) {
+  p = (char *)onigenc_get_prev_char_head(rb_enc_get((parser->parser_lex_lastline)),(OnigUChar*)(p),(OnigUChar*)((parser->parser_lex_p) - max_line_margin),(OnigUChar*)(pe));
+  pre = "...";
+     }
+     if (pe - (parser->parser_lex_p) > max_line_margin) {
+  pe = (char *)onigenc_get_prev_char_head(rb_enc_get((parser->parser_lex_lastline)),(OnigUChar*)((parser->parser_lex_p)),(OnigUChar*)((parser->parser_lex_p) + max_line_margin),(OnigUChar*)(pe));
+  post = "...";
+     }
+     len = pe - p;
+ }
+ buf = (char*)__builtin_alloca (sizeof(char)*(len+2));
+ memcpy((buf), (p), sizeof(char)*(len));
+ buf[len] = '\0';
+ rb_compile_error_append("%s%s%s", pre, buf, post);
+ i = (parser->parser_lex_p) - p;
+ p2 = buf; pe = buf + len;
+ while (p2 < pe) {
+     if (*p2 != '\t') *p2 = ' ';
+     p2++;
+ }
+ buf[i] = '^';
+ buf[i+1] = '\0';
+ rb_compile_error_append("%s%s", pre, buf);
+    }
+    return 0;
+}
+static void parser_prepare(struct parser_params *parser);
+VALUE ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always);
+static VALUE
+debug_lines(const char *f)
+{
+    if (rb_const_defined_at(rb_cObject, (__builtin_constant_p("SCRIPT_LINES__") ? __extension__ (rb_intern2("SCRIPT_LINES__", strlen("SCRIPT_LINES__"))) : (rb_intern)("SCRIPT_LINES__")))) {
+ VALUE hash = rb_const_get_at(rb_cObject, (__builtin_constant_p("SCRIPT_LINES__") ? __extension__ (rb_intern2("SCRIPT_LINES__", strlen("SCRIPT_LINES__"))) : (rb_intern)("SCRIPT_LINES__")));
+ if (rb_type((VALUE)(hash)) == RUBY_T_HASH) {
+     VALUE fname = __extension__ ( { (__builtin_constant_p(f)) ? rb_str_new(f, strlen(f)) : rb_str_new_cstr(f); });
+     VALUE lines = rb_ary_new();
+     rb_hash_aset(hash, fname, lines);
+     return lines;
+ }
+    }
+    return 0;
+}
+static VALUE
+coverage(const char *f, int n)
+{
+    extern VALUE rb_get_coverages(void);
+    VALUE coverages = rb_get_coverages();
+    if ((((VALUE)(coverages) & ~((VALUE)RUBY_Qnil)) != 0) && ((struct RBasic*)(coverages))->klass == 0) {
+ VALUE fname = __extension__ ( { (__builtin_constant_p(f)) ? rb_str_new(f, strlen(f)) : rb_str_new_cstr(f); });
+ VALUE lines = rb_ary_new2(n);
+ int i;
+ ((struct RBasic*)(lines))->klass = 0;
+ for (i = 0; i < n; i++) ((((struct RBasic*)(lines))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RArray*)(lines))->as.ary : ((struct RArray*)(lines))->as.heap.ptr)[i] = ((VALUE)RUBY_Qnil);
+ ((struct RArray*)(lines))->as.heap.len = n;
+ rb_hash_aset(coverages, fname, lines);
+ return lines;
+    }
+    return 0;
+}
+static int
+e_option_supplied(struct parser_params *parser)
+{
+    if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ((parser->parser_ruby_sourcefile)) && __builtin_constant_p ("-e") && (__s1_len = strlen ((parser->parser_ruby_sourcefile)), __s2_len = strlen ("-e"), (!((size_t)(const void *)(((parser->parser_ruby_sourcefile)) + 1) - (size_t)(const void *)((parser->parser_ruby_sourcefile)) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("-e") + 1) - (size_t)(const void *)("-e") == 1) || __s2_len >= 4)) ? __builtin_strcmp ((parser->parser_ruby_sourcefile), "-e") : (__builtin_constant_p ((parser->parser_ruby_sourcefile)) && ((size_t)(const void *)(((parser->parser_ruby_sourcefile)) + 1) - (size_t)(const void *)((parser->parser_ruby_sourcefile)) == 1) && (__s1_len = strlen ((parser->parser_ruby_sourcefile)), __s1_len < 4) ? (__builtin_constant_p ("-e") && ((size_t)(const void *)(("-e") + 1) - (size_t)(const void *)("-e") == 1) ? __builtin_strcmp ((parser->parser_ruby_sourcefile), "-e") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("-e"); register int __result = (((__const unsigned char *) (__const char *) ((parser->parser_ruby_sourcefile)))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) ((parser->parser_ruby_sourcefile)))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) ((parser->parser_ruby_sourcefile)))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) ((parser->parser_ruby_sourcefile)))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("-e") && ((size_t)(const void *)(("-e") + 1) - (size_t)(const void *)("-e") == 1) && (__s2_len = strlen ("-e"), __s2_len < 4) ? (__builtin_constant_p ((parser->parser_ruby_sourcefile)) && ((size_t)(const void *)(((parser->parser_ruby_sourcefile)) + 1) - (size_t)(const void *)((parser->parser_ruby_sourcefile)) == 1) ? __builtin_strcmp ((parser->parser_ruby_sourcefile), "-e") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) ((parser->parser_ruby_sourcefile)); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("-e"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("-e"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("-e"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("-e"))[3]); } } __result; }))) : __builtin_strcmp ((parser->parser_ruby_sourcefile), "-e")))); }) == 0)
+ return ((VALUE)RUBY_Qtrue);
+    return ((VALUE)RUBY_Qfalse);
+}
+static VALUE
+yycompile0(VALUE arg, int tracing)
+{
+    int n;
+    NODE *tree;
+    struct parser_params *parser = (struct parser_params *)arg;
+    if (!(parser->parser_compile_for_eval) && rb_safe_level() == 0) {
+ (parser->debug_lines) = debug_lines((parser->parser_ruby_sourcefile));
+ if ((parser->debug_lines) && (parser->parser_ruby_sourceline) > 0) {
+     VALUE str = rb_enc_str_new(0,0,parser->enc);
+     n = (parser->parser_ruby_sourceline);
+     do {
+  rb_ary_push((parser->debug_lines), str);
+     } while (--n);
+ }
+ if (!e_option_supplied(parser)) {
+     (parser->coverage) = coverage((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline));
+ }
+    }
+    parser_prepare(parser);
+    (parser->parser_deferred_nodes) = 0;
+    n = ruby_yyparse((void*)parser);
+    (parser->debug_lines) = 0;
+    (parser->coverage) = 0;
+    (parser->parser_compile_for_eval) = 0;
+    (parser->parser_lex_strterm) = 0;
+    (parser->parser_lex_p) = (parser->parser_lex_pbeg) = (parser->parser_lex_pend) = 0;
+    (parser->parser_lex_lastline) = (parser->parser_lex_nextline) = 0;
+    if (parser->nerr) {
+ return 0;
+    }
+    tree = (parser->parser_eval_tree);
+    if (!tree) {
+ tree = node_newnode(parser, (NODE_NIL), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+    }
+    if ((parser->parser_eval_tree_begin)) {
+ NODE *scope = (parser->parser_eval_tree);
+        if (scope) {
+     scope->u2.node = node_newnode(parser, (NODE_PRELUDE), (VALUE)((parser->parser_eval_tree_begin)), (VALUE)(scope->u2.node), (VALUE)(0));
+ }
+ tree = scope;
+    }
+    else {
+ tree = (parser->parser_eval_tree);
+    }
+    return (VALUE)tree;
+}
+static NODE*
+yycompile(struct parser_params *parser, const char *f, int line)
+{
+    (parser->parser_ruby_sourcefile) = ruby_strdup(f);
+    (parser->parser_ruby_sourceline) = line - 1;
+    return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, ((VALUE)RUBY_Qtrue));
+}
+static VALUE
+lex_get_str(struct parser_params *parser, VALUE s)
+{
+    char *beg, *end, *pend;
+    beg = (!(((struct RBasic*)(s))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(s))->as.ary : ((struct RString*)(s))->as.heap.ptr);
+    if ((parser->parser_lex_gets_ptr)) {
+ if ((!(((struct RBasic*)(s))->flags & (((VALUE)1)<<(12 +1))) ? (long)((((struct RBasic*)(s))->flags >> (12 +2)) & (((((VALUE)1)<<(12 +2))|(((VALUE)1)<<(12 +3))|(((VALUE)1)<<(12 +4))|(((VALUE)1)<<(12 +5))|(((VALUE)1)<<(12 +6))) >> (12 +2))) : ((struct RString*)(s))->as.heap.len) == (parser->parser_lex_gets_ptr)) return ((VALUE)RUBY_Qnil);
+ beg += (parser->parser_lex_gets_ptr);
+    }
+    pend = (!(((struct RBasic*)(s))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(s))->as.ary : ((struct RString*)(s))->as.heap.ptr) + (!(((struct RBasic*)(s))->flags & (((VALUE)1)<<(12 +1))) ? (long)((((struct RBasic*)(s))->flags >> (12 +2)) & (((((VALUE)1)<<(12 +2))|(((VALUE)1)<<(12 +3))|(((VALUE)1)<<(12 +4))|(((VALUE)1)<<(12 +5))|(((VALUE)1)<<(12 +6))) >> (12 +2))) : ((struct RString*)(s))->as.heap.len);
+    end = beg;
+    while (end < pend) {
+ if (*end++ == '\n') break;
+    }
+    (parser->parser_lex_gets_ptr) = end - (!(((struct RBasic*)(s))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(s))->as.ary : ((struct RString*)(s))->as.heap.ptr);
+    return rb_enc_str_new(beg, end - beg, rb_enc_get(s));
+}
+static VALUE
+lex_getline(struct parser_params *parser)
+{
+    VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
+    if ((parser->debug_lines) && !((VALUE)(line) == ((VALUE)RUBY_Qnil))) {
+ rb_ary_push((parser->debug_lines), line);
+    }
+    if ((parser->coverage) && !((VALUE)(line) == ((VALUE)RUBY_Qnil))) {
+ rb_ary_push((parser->coverage), ((VALUE)RUBY_Qnil));
+    }
+    return line;
+}
+NODE*
+rb_compile_string(const char *f, VALUE s, int line)
+{
+    VALUE volatile vparser = rb_parser_new();
+    return rb_parser_compile_string(vparser, f, s, line);
+}
+NODE*
+rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
+{
+    struct parser_params *parser;
+    NODE *node;
+    volatile VALUE tmp;
+    do { rb_check_type((VALUE)(vparser),RUBY_T_DATA); parser = (struct parser_params*)(((struct RData*)(vparser))->data);} while (0);
+    (parser->parser_lex_gets) = lex_get_str;
+    (parser->parser_lex_gets_ptr) = 0;
+    (parser->parser_lex_input) = s;
+    (parser->parser_lex_pbeg) = (parser->parser_lex_p) = (parser->parser_lex_pend) = 0;
+    (parser->parser_compile_for_eval) = rb_parse_in_eval();
+    node = yycompile(parser, f, line);
+    tmp = vparser;
+    return node;
+}
+NODE*
+rb_compile_cstr(const char *f, const char *s, int len, int line)
+{
+    return rb_compile_string(f, rb_str_new(s, len), line);
+}
+NODE*
+rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
+{
+    return rb_parser_compile_string(vparser, f, rb_str_new(s, len), line);
+}
+static VALUE
+lex_io_gets(struct parser_params *parser, VALUE io)
+{
+    return rb_io_gets(io);
+}
+NODE*
+rb_compile_file(const char *f, VALUE file, int start)
+{
+    VALUE volatile vparser = rb_parser_new();
+    return rb_parser_compile_file(vparser, f, file, start);
+}
+NODE*
+rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
+{
+    struct parser_params *parser;
+    volatile VALUE tmp;
+    NODE *node;
+    do { rb_check_type((VALUE)(vparser),RUBY_T_DATA); parser = (struct parser_params*)(((struct RData*)(vparser))->data);} while (0);
+    (parser->parser_lex_gets) = lex_io_gets;
+    (parser->parser_lex_input) = file;
+    (parser->parser_lex_pbeg) = (parser->parser_lex_p) = (parser->parser_lex_pend) = 0;
+    (parser->parser_compile_for_eval) = rb_parse_in_eval();
+    node = yycompile(parser, f, start);
+    tmp = vparser;
+    return node;
+}
+enum string_type {
+    str_squote = (0),
+    str_dquote = (0x02),
+    str_xquote = (0x02),
+    str_regexp = (0x04|0x01|0x02),
+    str_sword = (0x08),
+    str_dword = (0x08|0x02),
+    str_ssym = (0x10),
+    str_dsym = (0x10|0x02)
+};
+static VALUE
+parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
+{
+    VALUE str;
+    str = rb_enc_str_new(p, n, enc);
+    if (!(func & 0x04) && ((enc)->min_enc_len==1 && !rb_enc_dummy_p(enc))) {
+ if (rb_enc_str_coderange(str) == (((VALUE)1)<<(12 +8))) {
+ }
+ else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
+     rb_enc_associate(str, rb_ascii8bit_encoding());
+ }
+    }
+    return str;
+}
+static inline int
+parser_nextc(struct parser_params *parser)
+{
+    int c;
+    if ((parser->parser_lex_p) == (parser->parser_lex_pend)) {
+ VALUE v = (parser->parser_lex_nextline);
+ (parser->parser_lex_nextline) = 0;
+ if (!v) {
+     if (parser->eofp)
+  return -1;
+     if (!(parser->parser_lex_input) || ((VALUE)(v = lex_getline(parser)) == ((VALUE)RUBY_Qnil))) {
+  parser->eofp = ((VALUE)RUBY_Qtrue);
+  (parser->parser_lex_p = parser->parser_lex_pend);
+  return -1;
+     }
+ }
+ {
+     if ((parser->parser_heredoc_end) > 0) {
+  (parser->parser_ruby_sourceline) = (parser->parser_heredoc_end);
+  (parser->parser_heredoc_end) = 0;
+     }
+     (parser->parser_ruby_sourceline)++;
+     parser->line_count++;
+     (parser->parser_lex_pbeg) = (parser->parser_lex_p) = (!(((struct RBasic*)(v))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(v))->as.ary : ((struct RString*)(v))->as.heap.ptr);
+     (parser->parser_lex_pend) = (parser->parser_lex_p) + (!(((struct RBasic*)(v))->flags & (((VALUE)1)<<(12 +1))) ? (long)((((struct RBasic*)(v))->flags >> (12 +2)) & (((((VALUE)1)<<(12 +2))|(((VALUE)1)<<(12 +3))|(((VALUE)1)<<(12 +4))|(((VALUE)1)<<(12 +5))|(((VALUE)1)<<(12 +6))) >> (12 +2))) : ((struct RString*)(v))->as.heap.len);
+     (parser->parser_lex_lastline) = v;
+ }
+    }
+    c = (unsigned char)*(parser->parser_lex_p)++;
+    if (c == '\r' && ((parser->parser_lex_p) < (parser->parser_lex_pend) && ('\n') == *(parser->parser_lex_p))) {
+ (parser->parser_lex_p)++;
+ c = '\n';
+    }
+    return c;
+}
+static void
+parser_pushback(struct parser_params *parser, int c)
+{
+    if (c == -1) return;
+    (parser->parser_lex_p)--;
+    if ((parser->parser_lex_p) > (parser->parser_lex_pbeg) && (parser->parser_lex_p)[0] == '\n' && (parser->parser_lex_p)[-1] == '\r') {
+ (parser->parser_lex_p)--;
+    }
+}
+static char*
+parser_newtok(struct parser_params *parser)
+{
+    (parser->parser_tokidx) = 0;
+    if (!(parser->parser_tokenbuf)) {
+ (parser->parser_toksiz) = 60;
+ (parser->parser_tokenbuf) = (char*)ruby_xmalloc2((60),sizeof(char));
+    }
+    if ((parser->parser_toksiz) > 4096) {
+ (parser->parser_toksiz) = 60;
+ ((parser->parser_tokenbuf))=(char*)ruby_xrealloc2((char*)((parser->parser_tokenbuf)),(60),sizeof(char));
+    }
+    return (parser->parser_tokenbuf);
+}
+static char *
+parser_tokspace(struct parser_params *parser, int n)
+{
+    (parser->parser_tokidx) += n;
+    if ((parser->parser_tokidx) >= (parser->parser_toksiz)) {
+ do {(parser->parser_toksiz) *= 2;} while ((parser->parser_toksiz) < (parser->parser_tokidx));
+ ((parser->parser_tokenbuf))=(char*)ruby_xrealloc2((char*)((parser->parser_tokenbuf)),((parser->parser_toksiz)),sizeof(char));
+    }
+    return &(parser->parser_tokenbuf)[(parser->parser_tokidx)-n];
+}
+static void
+parser_tokadd(struct parser_params *parser, int c)
+{
+    (parser->parser_tokenbuf)[(parser->parser_tokidx)++] = (char)c;
+    if ((parser->parser_tokidx) >= (parser->parser_toksiz)) {
+ (parser->parser_toksiz) *= 2;
+ ((parser->parser_tokenbuf))=(char*)ruby_xrealloc2((char*)((parser->parser_tokenbuf)),((parser->parser_toksiz)),sizeof(char));
+    }
+}
+static int
+parser_tok_hex(struct parser_params *parser, int *numlen)
+{
+    int c;
+    c = ruby_scan_hex((parser->parser_lex_p), 2, numlen);
+    if (!*numlen) {
+ parser_yyerror(parser, "invalid hex escape");
+ return 0;
+    }
+    (parser->parser_lex_p) += *numlen;
+    return c;
+}
+static int
+parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
+                   int string_literal, int symbol_literal, int regexp_literal)
+{
+    int codepoint;
+    int numlen;
+    if (regexp_literal) { parser_tokadd(parser, '\\'); parser_tokadd(parser, 'u'); }
+    if (((parser->parser_lex_p) < (parser->parser_lex_pend) && ('{') == *(parser->parser_lex_p))) {
+ do {
+            if (regexp_literal) { parser_tokadd(parser, *(parser->parser_lex_p)); }
+     parser_nextc(parser);
+     codepoint = ruby_scan_hex((parser->parser_lex_p), 6, &numlen);
+     if (numlen == 0) {
+  parser_yyerror(parser, "invalid Unicode escape");
+  return 0;
+     }
+     if (codepoint > 0x10ffff) {
+  parser_yyerror(parser, "invalid Unicode codepoint (too large)");
+  return 0;
+     }
+     (parser->parser_lex_p) += numlen;
+            if (regexp_literal) {
+                memcpy(parser_tokspace(parser, numlen), (parser->parser_lex_p) - (numlen), (numlen));
+            }
+            else if (codepoint >= 0x80) {
+  *encp = (parser->utf8 ? parser->utf8 : (parser->utf8 = rb_utf8_encoding()));
+  if (string_literal) parser_tokaddmbc(parser, codepoint, *encp);
+     }
+     else if (string_literal) {
+  if (codepoint == 0 && symbol_literal) {
+      parser_yyerror(parser, "symbol cannot contain '\\u{0}'");
+      return 0;
+  }
+  parser_tokadd(parser, codepoint);
+     }
+ } while (string_literal && (((parser->parser_lex_p) < (parser->parser_lex_pend) && (' ') == *(parser->parser_lex_p)) || ((parser->parser_lex_p) < (parser->parser_lex_pend) && ('\t') == *(parser->parser_lex_p))));
+ if (!((parser->parser_lex_p) < (parser->parser_lex_pend) && ('}') == *(parser->parser_lex_p))) {
+     parser_yyerror(parser, "unterminated Unicode escape");
+     return 0;
+ }
+        if (regexp_literal) { parser_tokadd(parser, '}'); }
+ parser_nextc(parser);
+    }
+    else {
+ codepoint = ruby_scan_hex((parser->parser_lex_p), 4, &numlen);
+ if (numlen < 4) {
+     parser_yyerror(parser, "invalid Unicode escape");
+     return 0;
+ }
+ (parser->parser_lex_p) += 4;
+        if (regexp_literal) {
+            memcpy(parser_tokspace(parser, 4), (parser->parser_lex_p) - (4), (4));
+        }
+ else if (codepoint >= 0x80) {
+     *encp = (parser->utf8 ? parser->utf8 : (parser->utf8 = rb_utf8_encoding()));
+     if (string_literal) parser_tokaddmbc(parser, codepoint, *encp);
+ }
+ else if (string_literal) {
+     if (codepoint == 0 && symbol_literal) {
+  parser_yyerror(parser, "symbol cannot contain '\\u0000'");
+  return 0;
+     }
+     parser_tokadd(parser, codepoint);
+ }
+    }
+    return codepoint;
+}
+static int
+parser_read_escape(struct parser_params *parser, int flags,
+     rb_encoding **encp)
+{
+    int c;
+    int numlen;
+    switch (c = parser_nextc(parser)) {
+      case '\\':
+ return c;
+      case 'n':
+ return '\n';
+      case 't':
+ return '\t';
+      case 'r':
+ return '\r';
+      case 'f':
+ return '\f';
+      case 'v':
+ return '\13';
+      case 'a':
+ return '\007';
+      case 'e':
+ return 033;
+      case '0': case '1': case '2': case '3':
+      case '4': case '5': case '6': case '7':
+ if (flags & (1|2)) goto eof;
+ {
+     int numlen;
+     parser_pushback(parser, c);
+     c = ruby_scan_oct((parser->parser_lex_p), 3, &numlen);
+     (parser->parser_lex_p) += numlen;
+ }
+ return c;
+      case 'x':
+ if (flags & (1|2)) goto eof;
+ c = parser_tok_hex(parser, &numlen);
+ if (numlen == 0) return 0;
+ return c;
+      case 'b':
+ return '\010';
+      case 's':
+ return ' ';
+      case 'M':
+ if (flags & 2) goto eof;
+ if ((c = parser_nextc(parser)) != '-') {
+     parser_pushback(parser, c);
+     goto eof;
+ }
+ if ((c = parser_nextc(parser)) == '\\') {
+     return parser_read_escape(parser, flags|2, encp) | 0x80;
+ }
+ else if (c == -1 || !((unsigned long)((unsigned char)(c)) < 128)) goto eof;
+ else {
+     return ((c & 0xff) | 0x80);
+ }
+      case 'C':
+ if ((c = parser_nextc(parser)) != '-') {
+     parser_pushback(parser, c);
+     goto eof;
+ }
+      case 'c':
+ if (flags & 1) goto eof;
+ if ((c = parser_nextc(parser))== '\\') {
+     c = parser_read_escape(parser, flags|1, encp);
+ }
+ else if (c == '?')
+     return 0177;
+ else if (c == -1 || !((unsigned long)((unsigned char)(c)) < 128)) goto eof;
+ return c & 0x9f;
+      eof:
+      case -1:
+        parser_yyerror(parser, "Invalid escape character syntax");
+ return '\0';
+      default:
+ return c;
+    }
+}
+static void
+parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
+{
+    int len = rb_enc_codelen(c, enc);
+    (enc)->code_to_mbc(c,(OnigUChar*)(parser_tokspace(parser, len)),enc);
+}
+static int
+parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
+{
+    int c;
+    int flags = 0;
+  first:
+    switch (c = parser_nextc(parser)) {
+      case '\n':
+ return 0;
+      case '0': case '1': case '2': case '3':
+      case '4': case '5': case '6': case '7':
+ if (flags & (1|2)) goto eof;
+ {
+     int numlen;
+     int oct;
+     oct = ruby_scan_oct(--(parser->parser_lex_p), 3, &numlen);
+     if (numlen == 0) goto eof;
+     (parser->parser_lex_p) += numlen;
+     memcpy(parser_tokspace(parser, numlen + 1), (parser->parser_lex_p) - (numlen + 1), (numlen + 1));
+ }
+ return 0;
+      case 'x':
+ if (flags & (1|2)) goto eof;
+ {
+     int numlen;
+     int hex;
+     hex = parser_tok_hex(parser, &numlen);
+     if (numlen == 0) goto eof;
+     memcpy(parser_tokspace(parser, numlen + 2), (parser->parser_lex_p) - (numlen + 2), (numlen + 2));
+ }
+ return 0;
+      case 'M':
+ if (flags & 2) goto eof;
+ if ((c = parser_nextc(parser)) != '-') {
+     parser_pushback(parser, c);
+     goto eof;
+ }
+ memcpy(parser_tokspace(parser, 3), (parser->parser_lex_p) - (3), (3));
+ flags |= 2;
+ goto escaped;
+      case 'C':
+ if (flags & 1) goto eof;
+ if ((c = parser_nextc(parser)) != '-') {
+     parser_pushback(parser, c);
+     goto eof;
+ }
+ memcpy(parser_tokspace(parser, 3), (parser->parser_lex_p) - (3), (3));
+ goto escaped;
+      case 'c':
+ if (flags & 1) goto eof;
+ memcpy(parser_tokspace(parser, 2), (parser->parser_lex_p) - (2), (2));
+ flags |= 1;
+      escaped:
+ if ((c = parser_nextc(parser)) == '\\') {
+     goto first;
+ }
+ else if (c == -1) goto eof;
+ parser_tokadd(parser, c);
+ return 0;
+      eof:
+      case -1:
+        parser_yyerror(parser, "Invalid escape character syntax");
+ return -1;
+      default:
+        parser_tokadd(parser, '\\');
+ parser_tokadd(parser, c);
+    }
+    return 0;
+}
+extern int rb_char_to_option_kcode(int c, int *option, int *kcode);
+static int
+parser_regx_options(struct parser_params *parser)
+{
+    int kcode = 0;
+    int options = 0;
+    int c, opt, kc;
+    parser_newtok(parser);
+    while (c = parser_nextc(parser), rb_isalpha((unsigned char)(c))) {
+        if (c == 'o') {
+            options |= (1<<16);
+        }
+        else if (rb_char_to_option_kcode(c, &opt, &kc)) {
+            options |= opt;
+     if (kc >= 0) kcode = c;
+        }
+        else {
+     parser_tokadd(parser, c);
+        }
+    }
+    parser_pushback(parser, c);
+    if ((parser->parser_tokidx)) {
+ ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+ parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "unknown regexp option%s - %s",
+        (parser->parser_tokidx) > 1 ? "s" : "", (parser->parser_tokenbuf));
+    }
+    return options | (((kcode)&0xff)<<8);
+}
+static void
+dispose_string(VALUE str)
+{
+    if (((struct RBasic*)(str))->flags & (((VALUE)1)<<(12 +1)))
+ ruby_xfree((!(((struct RBasic*)(str))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(str))->as.ary : ((struct RString*)(str))->as.heap.ptr));
+    rb_gc_force_recycle(str);
+}
+static int
+parser_tokadd_mbchar(struct parser_params *parser, int c)
+{
+    int len = rb_enc_precise_mbclen(((parser->parser_lex_p)-1),(parser->parser_lex_pend),parser->enc);
+    if (!(0 < (len))) {
+ parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "invalid multibyte char (%s)", (parser->enc->name));
+ return -1;
+    }
+    parser_tokadd(parser, c);
+    (parser->parser_lex_p) += --len;
+    if (len > 0) memcpy(parser_tokspace(parser, len), (parser->parser_lex_p) - (len), (len));
+    return c;
+}
+static int
+parser_tokadd_string(struct parser_params *parser,
+       int func, int term, int paren, long *nest,
+       rb_encoding **encp)
+{
+    int c;
+    int has_nonascii = 0;
+    rb_encoding *enc = *encp;
+    char *errbuf = 0;
+    static const char mixed_msg[] = "%s mixed within %s source";
+    while ((c = parser_nextc(parser)) != -1) {
+ if (paren && c == paren) {
+     ++*nest;
+ }
+ else if (c == term) {
+     if (!nest || !*nest) {
+  parser_pushback(parser, c);
+  break;
+     }
+     --*nest;
+ }
+ else if ((func & 0x02) && c == '#' && (parser->parser_lex_p) < (parser->parser_lex_pend)) {
+     int c2 = *(parser->parser_lex_p);
+     if (c2 == '$' || c2 == '@' || c2 == '{') {
+  parser_pushback(parser, c);
+  break;
+     }
+ }
+ else if (c == '\\') {
+     const char *beg = (parser->parser_lex_p) - 1;
+     c = parser_nextc(parser);
+     switch (c) {
+       case '\n':
+  if (func & 0x08) break;
+  if (func & 0x02) continue;
+  parser_tokadd(parser, '\\');
+  break;
+       case '\\':
+  if (func & 0x01) parser_tokadd(parser, c);
+  break;
+       case 'u':
+  if ((func & 0x02) == 0) {
+      parser_tokadd(parser, '\\');
+      break;
+  }
+  parser_tokadd_utf8(parser, &enc, 1,
+       func & 0x10,
+                                   func & 0x04);
+  if (has_nonascii && enc != *encp) {
+      do { const char *pos = (parser->parser_lex_p); (parser->parser_lex_p) = beg; if (!errbuf) { int len = sizeof(mixed_msg) - 4; len += strlen((enc)->name); len += strlen((*encp)->name); errbuf = (char*)__builtin_alloca (sizeof(char)*(len)); snprintf(errbuf, len, mixed_msg, (enc)->name, (*encp)->name); parser_yyerror(parser, errbuf); }; (parser->parser_lex_p) = pos; } while (0);
+  }
+  continue;
+       default:
+  if (func & 0x04) {
+      parser_pushback(parser, c);
+      if ((c = parser_tokadd_escape(parser, &enc)) < 0)
+   return -1;
+      if (has_nonascii && enc != *encp) {
+   do { const char *pos = (parser->parser_lex_p); (parser->parser_lex_p) = beg; if (!errbuf) { int len = sizeof(mixed_msg) - 4; len += strlen((enc)->name); len += strlen((*encp)->name); errbuf = (char*)__builtin_alloca (sizeof(char)*(len)); snprintf(errbuf, len, mixed_msg, (enc)->name, (*encp)->name); parser_yyerror(parser, errbuf); }; (parser->parser_lex_p) = pos; } while (0);
+      }
+      continue;
+  }
+  else if (func & 0x02) {
+      parser_pushback(parser, c);
+      if (func & 0x01) parser_tokadd(parser, '\\');
+      c = parser_read_escape(parser, 0, &enc);
+  }
+  else if ((func & 0x08) && rb_isspace((unsigned char)(c))) {
+  }
+  else if (c != term && !(paren && c == paren)) {
+      parser_tokadd(parser, '\\');
+  }
+     }
+ }
+ else if (!((unsigned long)((unsigned char)(*((parser->parser_lex_p)-1))) < 128)) {
+     has_nonascii = 1;
+     if (enc != *encp) {
+  if (!errbuf) { int len = sizeof(mixed_msg) - 4; len += strlen((enc)->name); len += strlen((*encp)->name); errbuf = (char*)__builtin_alloca (sizeof(char)*(len)); snprintf(errbuf, len, mixed_msg, (enc)->name, (*encp)->name); parser_yyerror(parser, errbuf); };
+  continue;
+     }
+     if (parser_tokadd_mbchar(parser, c) == -1) return -1;
+     continue;
+ }
+ else if ((func & 0x08) && rb_isspace((unsigned char)(c))) {
+     parser_pushback(parser, c);
+     break;
+ }
+ if (!c && (func & 0x10)) {
+     func &= ~0x10;
+     parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "symbol cannot contain '\\0'");
+     continue;
+ }
+        if (c & 0x80) {
+            has_nonascii = 1;
+     if (enc != *encp) {
+  if (!errbuf) { int len = sizeof(mixed_msg) - 4; len += strlen((enc)->name); len += strlen((*encp)->name); errbuf = (char*)__builtin_alloca (sizeof(char)*(len)); snprintf(errbuf, len, mixed_msg, (enc)->name, (*encp)->name); parser_yyerror(parser, errbuf); };
+  continue;
+     }
+        }
+ parser_tokadd(parser, c);
+    }
+    *encp = enc;
+    return c;
+}
+static int
+parser_parse_string(struct parser_params *parser, NODE *quote)
+{
+    int func = quote->u1.id;
+    int term = ((signed short)(quote)->u2.id);
+    int paren = (char)((quote)->u2.id >> 8*2);
+    int c, space = 0;
+    rb_encoding *enc = parser->enc;
+    if (func == -1) return 361;
+    c = parser_nextc(parser);
+    if ((func & 0x08) && rb_isspace((unsigned char)(c))) {
+ do {c = parser_nextc(parser);} while (rb_isspace((unsigned char)(c)));
+ space = 1;
+    }
+    if (c == term && !quote->u3.cnt) {
+ if (func & 0x08) {
+     quote->u1.id = -1;
+     return ' ';
+ }
+ if (!(func & 0x04)) return 361;
+        (*((YYSTYPE*)(parser->parser_yylval))).num = parser_regx_options(parser);
+ return 320;
+    }
+    if (space) {
+ parser_pushback(parser, c);
+ return ' ';
+    }
+    parser_newtok(parser);
+    if ((func & 0x02) && c == '#') {
+ switch (c = parser_nextc(parser)) {
+   case '$':
+   case '@':
+     parser_pushback(parser, c);
+     return 360;
+   case '{':
+     return 359;
+ }
+ parser_tokadd(parser, '#');
+    }
+    parser_pushback(parser, c);
+    if (parser_tokadd_string(parser,func,term,paren,&quote->u3.cnt,&enc) == -1) {
+ (parser->parser_ruby_sourceline) = ((VALUE)(((((struct RNode*)(quote)))->flags>>(8 +7))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1)));
+ if (func & 0x04) {
+     if (parser->eofp)
+  parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "unterminated regexp meets end of file");
+     return 320;
+ }
+ else {
+     if (parser->eofp)
+  parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "unterminated string meets end of file");
+     return 361;
+ }
+    }
+    ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+    (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_STR), (VALUE)(parser_str_new(((parser->parser_tokenbuf)),((parser->parser_tokidx)),(enc),(func),parser->enc)), (VALUE)(0), (VALUE)(0));
+    return 316;
+}
+static int
+parser_heredoc_identifier(struct parser_params *parser)
+{
+    int c = parser_nextc(parser), term, func = 0, len;
+    if (c == '-') {
+ c = parser_nextc(parser);
+ func = 0x20;
+    }
+    switch (c) {
+      case '\'':
+ func |= str_squote; goto quoted;
+      case '"':
+ func |= str_dquote; goto quoted;
+      case '`':
+ func |= str_xquote;
+      quoted:
+ parser_newtok(parser);
+ parser_tokadd(parser, func);
+ term = c;
+ while ((c = parser_nextc(parser)) != -1 && c != term) {
+     if (parser_tokadd_mbchar(parser, c) == -1) return 0;
+ }
+ if (c == -1) {
+     parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "unterminated here document identifier");
+     return 0;
+ }
+ break;
+      default:
+ if (!(!parser->eofp && ((parser->enc)->is_code_ctype(*((parser->parser_lex_p)-1),13,parser->enc) || (*((parser->parser_lex_p)-1)) == '_' || !((unsigned long)((unsigned char)(*((parser->parser_lex_p)-1))) < 128)))) {
+     parser_pushback(parser, c);
+     if (func & 0x20) {
+  parser_pushback(parser, '-');
+     }
+     return 0;
+ }
+ parser_newtok(parser);
+ term = '"';
+ parser_tokadd(parser, func |= str_dquote);
+ do {
+     if (parser_tokadd_mbchar(parser, c) == -1) return 0;
+ } while ((c = parser_nextc(parser)) != -1 && (!parser->eofp && ((parser->enc)->is_code_ctype(*((parser->parser_lex_p)-1),13,parser->enc) || (*((parser->parser_lex_p)-1)) == '_' || !((unsigned long)((unsigned char)(*((parser->parser_lex_p)-1))) < 128))));
+ parser_pushback(parser, c);
+ break;
+    }
+    ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+    len = (parser->parser_lex_p) - (parser->parser_lex_pbeg);
+    (parser->parser_lex_p = parser->parser_lex_pend);
+    (parser->parser_lex_strterm) = node_newnode(parser, NODE_ARRAY, rb_enc_str_new(((parser->parser_tokenbuf)),((parser->parser_tokidx)),parser->enc), len, (parser->parser_lex_lastline));
+    ((struct RNode*)((parser->parser_lex_strterm)))->flags=((((struct RNode*)((parser->parser_lex_strterm)))->flags&~(-1<<(8 +7)))|((((parser->parser_ruby_sourceline))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+    return term == '`' ? 355 : 354;
+}
+static void
+parser_heredoc_restore(struct parser_params *parser, NODE *here)
+{
+    VALUE line;
+    line = here->u3.value;
+    (parser->parser_lex_lastline) = line;
+    (parser->parser_lex_pbeg) = (!(((struct RBasic*)(line))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(line))->as.ary : ((struct RString*)(line))->as.heap.ptr);
+    (parser->parser_lex_pend) = (parser->parser_lex_pbeg) + (!(((struct RBasic*)(line))->flags & (((VALUE)1)<<(12 +1))) ? (long)((((struct RBasic*)(line))->flags >> (12 +2)) & (((((VALUE)1)<<(12 +2))|(((VALUE)1)<<(12 +3))|(((VALUE)1)<<(12 +4))|(((VALUE)1)<<(12 +5))|(((VALUE)1)<<(12 +6))) >> (12 +2))) : ((struct RString*)(line))->as.heap.len);
+    (parser->parser_lex_p) = (parser->parser_lex_pbeg) + here->u2.argc;
+    (parser->parser_heredoc_end) = (parser->parser_ruby_sourceline);
+    (parser->parser_ruby_sourceline) = ((VALUE)(((((struct RNode*)(here)))->flags>>(8 +7))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1)));
+    dispose_string(here->u1.value);
+    rb_gc_force_recycle((VALUE)here);
+}
+static int
+parser_whole_match_p(struct parser_params *parser,
+    const char *eos, int len, int indent)
+{
+    const char *p = (parser->parser_lex_pbeg);
+    int n;
+    if (indent) {
+ while (*p && rb_isspace((unsigned char)(*p))) p++;
+    }
+    n= (parser->parser_lex_pend) - (p + len);
+    if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return ((VALUE)RUBY_Qfalse);
+    if ((__extension__ (__builtin_constant_p (len) && ((__builtin_constant_p (eos) && strlen (eos) < ((size_t) (len))) || (__builtin_constant_p (p) && strlen (p) < ((size_t) (len)))) ? __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (eos) && __builtin_constant_p (p) && (__s1_len = strlen (eos), __s2_len = strlen (p), (!((size_t)(const void *)((eos) + 1) - (size_t)(const void *)(eos) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((p) + 1) - (size_t)(const void *)(p) == 1) || __s2_len >= 4)) ? __builtin_strcmp (eos, p) : (__builtin_constant_p (eos) && ((size_t)(const void *)((eos) + 1) - (size_t)(const void *)(eos) == 1) && (__s1_len = strlen (eos), __s1_len < 4) ? (__builtin_constant_p (p) && ((size_t)(const void *)((p) + 1) - (size_t)(const void *)(p) == 1) ? __builtin_strcmp (eos, p) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (p); register int __result = (((__const unsigned char *) (__const char *) (eos))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (eos))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (eos))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (eos))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (p) && ((size_t)(const void *)((p) + 1) - (size_t)(const void *)(p) == 1) && (__s2_len = strlen (p), __s2_len < 4) ? (__builtin_constant_p (eos) && ((size_t)(const void *)((eos) + 1) - (size_t)(const void *)(eos) == 1) ? __builtin_strcmp (eos, p) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (eos); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (p))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (p))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (p))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (p))[3]); } } __result; }))) : __builtin_strcmp (eos, p)))); }) : strncmp (eos, p, len))) == 0) return ((VALUE)RUBY_Qtrue);
+    return ((VALUE)RUBY_Qfalse);
+}
+static int
+parser_here_document(struct parser_params *parser, NODE *here)
+{
+    int c, func, indent = 0;
+    const char *eos, *p, *pend;
+    long len;
+    VALUE str = 0;
+    eos = (!(((struct RBasic*)(here->u1.value))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(here->u1.value))->as.ary : ((struct RString*)(here->u1.value))->as.heap.ptr);
+    len = (!(((struct RBasic*)(here->u1.value))->flags & (((VALUE)1)<<(12 +1))) ? (long)((((struct RBasic*)(here->u1.value))->flags >> (12 +2)) & (((((VALUE)1)<<(12 +2))|(((VALUE)1)<<(12 +3))|(((VALUE)1)<<(12 +4))|(((VALUE)1)<<(12 +5))|(((VALUE)1)<<(12 +6))) >> (12 +2))) : ((struct RString*)(here->u1.value))->as.heap.len) - 1;
+    indent = (func = *eos++) & 0x20;
+    if ((c = parser_nextc(parser)) == -1) {
+      error:
+ parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "can't find string \"%s\" anywhere before EOF", eos);
+      restore:
+ parser_heredoc_restore(parser,(parser->parser_lex_strterm));
+ (parser->parser_lex_strterm) = 0;
+ return 0;
+    }
+    if (((parser->parser_lex_p) == (parser->parser_lex_pbeg) + 1) && parser_whole_match_p(parser,eos,len,indent)) {
+ parser_heredoc_restore(parser,(parser->parser_lex_strterm));
+ return 361;
+    }
+    if (!(func & 0x02)) {
+ do {
+     p = (!(((struct RBasic*)((parser->parser_lex_lastline)))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)((parser->parser_lex_lastline)))->as.ary : ((struct RString*)((parser->parser_lex_lastline)))->as.heap.ptr);
+     pend = (parser->parser_lex_pend);
+     if (pend > p) {
+  switch (pend[-1]) {
+    case '\n':
+      if (--pend == p || pend[-1] != '\r') {
+   pend++;
+   break;
+      }
+    case '\r':
+      --pend;
+  }
+     }
+     if (str)
+  rb_str_cat(str, p, pend - p);
+     else
+  str = rb_enc_str_new((p),(pend - p),parser->enc);
+     if (pend < (parser->parser_lex_pend)) rb_str_cat(str, "\n", 1);
+     (parser->parser_lex_p = parser->parser_lex_pend);
+     if (parser_nextc(parser) == -1) {
+  if (str) dispose_string(str);
+  goto error;
+     }
+ } while (!parser_whole_match_p(parser,eos,len,indent));
+    }
+    else {
+ rb_encoding *enc = parser->enc;
+ parser_newtok(parser);
+ if (c == '#') {
+     switch (c = parser_nextc(parser)) {
+       case '$':
+       case '@':
+  parser_pushback(parser, c);
+  return 360;
+       case '{':
+  return 359;
+     }
+     parser_tokadd(parser, '#');
+ }
+ do {
+     parser_pushback(parser, c);
+     if ((c = parser_tokadd_string(parser,func,'\n',0,((void *)0),&enc)) == -1) {
+  if (parser->eofp) goto error;
+  goto restore;
+     }
+     if (c != '\n') {
+  (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_STR), (VALUE)(parser_str_new(((parser->parser_tokenbuf)),((parser->parser_tokidx)),(enc),(func),parser->enc)), (VALUE)(0), (VALUE)(0));
+  return 316;
+     }
+     parser_tokadd(parser, parser_nextc(parser));
+     if ((c = parser_nextc(parser)) == -1) goto error;
+ } while (!parser_whole_match_p(parser,eos,len,indent));
+ str = parser_str_new(((parser->parser_tokenbuf)),((parser->parser_tokidx)),(enc),(func),parser->enc);
+    }
+    parser_heredoc_restore(parser,(parser->parser_lex_strterm));
+    (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (-1), (0) | ((0) << (8 * 2)), 0);
+    (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_STR), (VALUE)(str), (VALUE)(0), (VALUE)(0));
+    return 316;
+}
+struct kwtable {const char *name; int id[2]; enum lex_state_e state;};
+const struct kwtable *rb_reserved_word(const char *, unsigned int);
+struct kwtable;
+__inline
+static unsigned int
+hash (str, len)
+     register const char *str;
+     register unsigned int len;
+{
+  static const unsigned char asso_values[] =
+    {
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 26, 51, 51, 14, 51, 16, 8,
+      11, 13, 51, 51, 51, 51, 10, 51, 13, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 11, 51, 13, 1, 26,
+       4, 1, 8, 28, 51, 23, 51, 1, 1, 27,
+       5, 19, 21, 51, 8, 3, 3, 11, 51, 21,
+      24, 16, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
+      51, 51, 51, 51, 51, 51
+    };
+  register int hval = len;
+  switch (hval)
+    {
+      default:
+        hval += asso_values[(unsigned char)str[2]];
+      case 2:
+      case 1:
+        hval += asso_values[(unsigned char)str[0]];
+        break;
+    }
+  return hval + asso_values[(unsigned char)str[len - 1]];
+}
+__inline
+const struct kwtable *
+rb_reserved_word (str, len)
+     register const char *str;
+     register unsigned int len;
+{
+  static const struct kwtable wordlist[] =
+    {
+      {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""},
+      {"break", {276, 276}, EXPR_MID},
+      {"else", {270, 270}, EXPR_BEG},
+      {"nil", {289, 289}, EXPR_END},
+      {"ensure", {264, 264}, EXPR_BEG},
+      {"end", {265, 265}, EXPR_END},
+      {"then", {268, 268}, EXPR_BEG},
+      {"not", {294, 294}, EXPR_ARG},
+      {"false", {291, 291}, EXPR_END},
+      {"self", {288, 288}, EXPR_END},
+      {"elsif", {269, 269}, EXPR_VALUE},
+      {"rescue", {263, 299}, EXPR_MID},
+      {"true", {290, 290}, EXPR_END},
+      {"until", {274, 298}, EXPR_VALUE},
+      {"unless", {267, 296}, EXPR_VALUE},
+      {"return", {285, 285}, EXPR_MID},
+      {"def", {260, 260}, EXPR_FNAME},
+      {"and", {292, 292}, EXPR_VALUE},
+      {"do", {281, 281}, EXPR_BEG},
+      {"yield", {286, 286}, EXPR_ARG},
+      {"for", {275, 275}, EXPR_VALUE},
+      {"undef", {261, 261}, EXPR_FNAME},
+      {"or", {293, 293}, EXPR_VALUE},
+      {"in", {280, 280}, EXPR_VALUE},
+      {"when", {272, 272}, EXPR_VALUE},
+      {"retry", {279, 279}, EXPR_END},
+      {"if", {266, 295}, EXPR_VALUE},
+      {"case", {271, 271}, EXPR_VALUE},
+      {"redo", {278, 278}, EXPR_END},
+      {"next", {277, 277}, EXPR_MID},
+      {"super", {287, 287}, EXPR_ARG},
+      {"module", {259, 259}, EXPR_VALUE},
+      {"begin", {262, 262}, EXPR_BEG},
+      {"__LINE__", {304, 304}, EXPR_END},
+      {"__FILE__", {305, 305}, EXPR_END},
+      {"__ENCODING__", {306, 306}, EXPR_END},
+      {"END", {303, 303}, EXPR_END},
+      {"alias", {300, 300}, EXPR_FNAME},
+      {"BEGIN", {302, 302}, EXPR_END},
+      {"defined?", {301, 301}, EXPR_ARG},
+      {"class", {258, 258}, EXPR_CLASS},
+      {""}, {""},
+      {"while", {273, 297}, EXPR_VALUE}
+    };
+  if (len <= 12 && len >= 2)
+    {
+      register int key = hash (str, len);
+      if (key <= 50 && key >= 0)
+        {
+          register const char *s = wordlist[key].name;
+          if (*str == *s && !__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (str + 1) && __builtin_constant_p (s + 1) && (__s1_len = strlen (str + 1), __s2_len = strlen (s + 1), (!((size_t)(const void *)((str + 1) + 1) - (size_t)(const void *)(str + 1) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((s + 1) + 1) - (size_t)(const void *)(s + 1) == 1) || __s2_len >= 4)) ? __builtin_strcmp (str + 1, s + 1) : (__builtin_constant_p (str + 1) && ((size_t)(const void *)((str + 1) + 1) - (size_t)(const void *)(str + 1) == 1) && (__s1_len = strlen (str + 1), __s1_len < 4) ? (__builtin_constant_p (s + 1) && ((size_t)(const void *)((s + 1) + 1) - (size_t)(const void *)(s + 1) == 1) ? __builtin_strcmp (str + 1, s + 1) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (s + 1); register int __result = (((__const unsigned char *) (__const char *) (str + 1))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (str + 1))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (str + 1))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (str + 1))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (s + 1) && ((size_t)(const void *)((s + 1) + 1) - (size_t)(const void *)(s + 1) == 1) && (__s2_len = strlen (s + 1), __s2_len < 4) ? (__builtin_constant_p (str + 1) && ((size_t)(const void *)((str + 1) + 1) - (size_t)(const void *)(str + 1) == 1) ? __builtin_strcmp (str + 1, s + 1) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (str + 1); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (s + 1))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (s + 1))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (s + 1))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (s + 1))[3]); } } __result; }))) : __builtin_strcmp (str + 1, s + 1)))); }))
+            return &wordlist[key];
+        }
+    }
+  return 0;
+}
+static void
+arg_ambiguous_gen(struct parser_params *parser)
+{
+    rb_compile_warning((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "ambiguous first argument; put parentheses or even spaces");
+}
+static int
+lvar_defined_gen(struct parser_params *parser, ID id)
+{
+    return (dyna_in_block_gen(parser) && dvar_defined_gen(parser, id)) || local_id_gen(parser, id);
+}
+static int
+parser_encode_length(struct parser_params *parser, const char *name, int len)
+{
+    int nlen;
+    if (len > 5 && name[nlen = len - 5] == '-') {
+ if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
+     return nlen;
+    }
+    if (len > 4 && name[nlen = len - 5] == '-') {
+ if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
+     return nlen;
+ if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0)
+     return nlen;
+    }
+    return len;
+}
+static void
+parser_set_encode(struct parser_params *parser, const char *name)
+{
+    int idx = rb_enc_find_index(name);
+    rb_encoding *enc;
+    if (idx < 0) {
+ rb_raise(rb_eArgError, "unknown encoding name: %s", name);
+    }
+    enc = rb_enc_from_index(idx);
+    if (!((enc)->min_enc_len==1 && !rb_enc_dummy_p(enc))) {
+ rb_raise(rb_eArgError, "%s is not ASCII compatible", (enc)->name);
+    }
+    parser->enc = enc;
+}
+static int
+comment_at_top(struct parser_params *parser)
+{
+    const char *p = (parser->parser_lex_pbeg), *pend = (parser->parser_lex_p) - 1;
+    if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
+    while (p < pend) {
+ if (!rb_isspace((unsigned char)(*p))) return 0;
+ p++;
+    }
+    return 1;
+}
+typedef int (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, int len);
+typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
+static void
+magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
+{
+    if (!comment_at_top(parser)) {
+ rb_warning("encoding '%s' is ignored, valid only in the first line except for shebang line.",
+     val);
+ return;
+    }
+    parser_set_encode(parser, val);
+}
+struct magic_comment {
+    const char *name;
+    rb_magic_comment_setter_t func;
+    rb_magic_comment_length_t length;
+};
+static const struct magic_comment magic_comments[] = {
+    {"coding", magic_comment_encoding, parser_encode_length},
+    {"encoding", magic_comment_encoding, parser_encode_length},
+};
+static const char *
+magic_comment_marker(const char *str, int len)
+{
+    int i = 2;
+    while (i < len) {
+ switch (str[i]) {
+   case '-':
+     if (str[i-1] == '*' && str[i-2] == '-') {
+  return str + i + 1;
+     }
+     i += 2;
+     break;
+   case '*':
+     if (i + 1 >= len) return 0;
+     if (str[i+1] != '-') {
+  i += 4;
+     }
+     else if (str[i-1] != '-') {
+  i += 2;
+     }
+     else {
+  return str + i + 2;
+     }
+     break;
+   default:
+     i += 3;
+     break;
+ }
+    }
+    return 0;
+}
+static int
+parser_magic_comment(struct parser_params *parser, const char *str, int len)
+{
+    VALUE name = 0, val = 0;
+    const char *beg, *end, *vbeg, *vend;
+    if (len <= 7) return ((VALUE)RUBY_Qfalse);
+    if (!(beg = magic_comment_marker(str, len))) return ((VALUE)RUBY_Qfalse);
+    if (!(end = magic_comment_marker(beg, str + len - beg))) return ((VALUE)RUBY_Qfalse);
+    str = beg;
+    len = end - beg - 3;
+    while (len > 0) {
+ const struct magic_comment *p = magic_comments;
+ char *s;
+ int i, n = 0;
+ for (; len > 0 && *str; str++, --len) {
+     switch (*str) {
+       case '\'': case '"': case ':': case ';':
+  continue;
+     }
+     if (!rb_isspace((unsigned char)(*str))) break;
+ }
+ for (beg = str; len > 0; str++, --len) {
+     switch (*str) {
+       case '\'': case '"': case ':': case ';':
+  break;
+       default:
+  if (rb_isspace((unsigned char)(*str))) break;
+  continue;
+     }
+     break;
+ }
+ for (end = str; len > 0 && rb_isspace((unsigned char)(*str)); str++, --len);
+ if (!len) break;
+ if (*str != ':') continue;
+ do str++; while (--len > 0 && rb_isspace((unsigned char)(*str)));
+ if (!len) break;
+ if (*str == '"') {
+     for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
+  if (*str == '\\') {
+      --len;
+      ++str;
+  }
+     }
+     vend = str;
+     if (len) {
+  --len;
+  ++str;
+     }
+ }
+ else {
+     for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !rb_isspace((unsigned char)(*str)); --len, str++);
+     vend = str;
+ }
+ while (len > 0 && (*str == ';' || rb_isspace((unsigned char)(*str)))) --len, str++;
+ n = end - beg;
+ ((name) ? (rb_str_resize((name), (n)), memcpy(((!(((struct RBasic*)(name))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(name))->as.ary : ((struct RString*)(name))->as.heap.ptr)), ((beg)), sizeof(char)*((n))), (name)) : ((name) = rb_enc_str_new(((beg)),((n)),parser->enc)));
+ s = (!(((struct RBasic*)(name))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(name))->as.ary : ((struct RString*)(name))->as.heap.ptr);
+ for (i = 0; i < n; ++i) {
+     if (*s == '-') *s = '_';
+ }
+ do {
+     if ((st_strncasecmp(p->name, s, n)) == 0) {
+  n = vend - vbeg;
+  if (p->length) {
+      n = (*p->length)(parser, vbeg, n);
+  }
+  ((val) ? (rb_str_resize((val), (n)), memcpy(((!(((struct RBasic*)(val))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(val))->as.ary : ((struct RString*)(val))->as.heap.ptr)), ((vbeg)), sizeof(char)*((n))), (val)) : ((val) = rb_enc_str_new(((vbeg)),((n)),parser->enc)));
+  (*p->func)(parser, s, (!(((struct RBasic*)(val))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(val))->as.ary : ((struct RString*)(val))->as.heap.ptr));
+  break;
+     }
+ } while (++p < magic_comments + sizeof(magic_comments) / sizeof(*p));
+    }
+    return ((VALUE)RUBY_Qtrue);
+}
+static void
+set_file_encoding(struct parser_params *parser, const char *str, const char *send)
+{
+    int sep = 0;
+    const char *beg = str;
+    VALUE s;
+    for (;;) {
+ if (send - str <= 6) return;
+ switch (str[6]) {
+   case 'C': case 'c': str += 6; continue;
+   case 'O': case 'o': str += 5; continue;
+   case 'D': case 'd': str += 4; continue;
+   case 'I': case 'i': str += 3; continue;
+   case 'N': case 'n': str += 2; continue;
+   case 'G': case 'g': str += 1; continue;
+   case '=': case ':':
+     sep = 1;
+     str += 6;
+     break;
+   default:
+     str += 6;
+     if (rb_isspace((unsigned char)(*str))) break;
+     continue;
+ }
+ if ((st_strncasecmp(str-6, "coding", 6)) == 0) break;
+    }
+    for (;;) {
+ do {
+     if (++str >= send) return;
+ } while (rb_isspace((unsigned char)(*str)));
+ if (sep) break;
+ if (*str != '=' && *str != ':') return;
+ sep = 1;
+ str++;
+    }
+    beg = str;
+    while ((*str == '-' || *str == '_' || rb_isalnum((unsigned char)(*str))) && ++str < send);
+    s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
+    parser_set_encode(parser, (!(((struct RBasic*)(s))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(s))->as.ary : ((struct RString*)(s))->as.heap.ptr));
+    rb_str_resize(s, 0);
+}
+static void
+parser_prepare(struct parser_params *parser)
+{
+    int c = parser_nextc(parser);
+    switch (c) {
+      case '#':
+ if (((parser->parser_lex_p) < (parser->parser_lex_pend) && ('!') == *(parser->parser_lex_p))) parser->has_shebang = 1;
+ break;
+      case 0xef:
+ if ((parser->parser_lex_pend) - (parser->parser_lex_p) >= 2 &&
+     (unsigned char)(parser->parser_lex_p)[0] == 0xbb &&
+     (unsigned char)(parser->parser_lex_p)[1] == 0xbf) {
+     parser->enc = rb_utf8_encoding();
+     (parser->parser_lex_p) += 2;
+     (parser->parser_lex_pbeg) = (parser->parser_lex_p);
+     return;
+ }
+ break;
+      case (-1):
+ return;
+    }
+    parser_pushback(parser, c);
+    parser->enc = rb_enc_get((parser->parser_lex_lastline));
+}
+static int
+parser_yylex(struct parser_params *parser)
+{
+    register int c;
+    int space_seen = 0;
+    int cmd_state;
+    enum lex_state_e last_state;
+    rb_encoding *enc;
+    int mb;
+    if ((parser->parser_lex_strterm)) {
+ int token;
+ if (((int) (((((struct RNode*)((parser->parser_lex_strterm))))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_ARRAY) {
+     token = parser_here_document(parser,(parser->parser_lex_strterm));
+     if (token == 361) {
+  (parser->parser_lex_strterm) = 0;
+  (parser->parser_lex_state) = EXPR_END;
+     }
+ }
+ else {
+     token = parser_parse_string(parser,(parser->parser_lex_strterm));
+     if (token == 361 || token == 320) {
+  rb_gc_force_recycle((VALUE)(parser->parser_lex_strterm));
+  (parser->parser_lex_strterm) = 0;
+  (parser->parser_lex_state) = EXPR_END;
+     }
+ }
+ return token;
+    }
+    cmd_state = (parser->parser_command_start);
+    (parser->parser_command_start) = ((VALUE)RUBY_Qfalse);
+  retry:
+    switch (c = parser_nextc(parser)) {
+      case '\0':
+      case '\004':
+      case '\032':
+      case -1:
+ return 0;
+      case ' ': case '\t': case '\f': case '\r':
+      case '\13':
+ space_seen++;
+ goto retry;
+      case '#':
+ if (!parser_magic_comment(parser, (parser->parser_lex_p), (parser->parser_lex_pend) - (parser->parser_lex_p))) {
+     if (comment_at_top(parser)) {
+  set_file_encoding(parser, (parser->parser_lex_p), (parser->parser_lex_pend));
+     }
+ }
+ (parser->parser_lex_p) = (parser->parser_lex_pend);
+      case '\n':
+ switch ((parser->parser_lex_state)) {
+   case EXPR_BEG:
+   case EXPR_FNAME:
+   case EXPR_DOT:
+   case EXPR_CLASS:
+   case EXPR_VALUE:
+     goto retry;
+   default:
+     break;
+ }
+ while ((c = parser_nextc(parser))) {
+     switch (c) {
+       case ' ': case '\t': case '\f': case '\r':
+       case '\13':
+  space_seen++;
+  break;
+       case '.': {
+    if ((c = parser_nextc(parser)) != '.') {
+        parser_pushback(parser, c);
+        parser_pushback(parser, '.');
+        goto retry;
+    }
+       }
+       default:
+  --(parser->parser_ruby_sourceline);
+  (parser->parser_lex_nextline) = (parser->parser_lex_lastline);
+       case -1:
+  (parser->parser_lex_p = parser->parser_lex_pend);
+  goto normal_newline;
+     }
+ }
+      normal_newline:
+ (parser->parser_command_start) = ((VALUE)RUBY_Qtrue);
+ (parser->parser_lex_state) = EXPR_BEG;
+ return '\n';
+      case '*':
+ if ((c = parser_nextc(parser)) == '*') {
+     if ((c = parser_nextc(parser)) == '=') {
+                (*((YYSTYPE*)(parser->parser_yylval))).id = 323;
+  (parser->parser_lex_state) = EXPR_BEG;
+  return 342;
+     }
+     parser_pushback(parser, c);
+     c = 323;
+ }
+ else {
+     if (c == '=') {
+                (*((YYSTYPE*)(parser->parser_yylval))).id = '*';
+  (parser->parser_lex_state) = EXPR_BEG;
+  return 342;
+     }
+     parser_pushback(parser, c);
+     if (((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG) && space_seen && !rb_isspace((unsigned char)(c))) {
+  rb_compile_warning((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "`*' interpreted as argument prefix");
+  c = 350;
+     }
+     else if (((parser->parser_lex_state) == EXPR_BEG || (parser->parser_lex_state) == EXPR_MID || (parser->parser_lex_state) == EXPR_VALUE || (parser->parser_lex_state) == EXPR_CLASS)) {
+  c = 350;
+     }
+     else {
+  c = '*';
+     }
+ }
+ switch ((parser->parser_lex_state)) {
+   case EXPR_FNAME: case EXPR_DOT:
+     (parser->parser_lex_state) = EXPR_ARG; break;
+   default:
+     (parser->parser_lex_state) = EXPR_BEG; break;
+ }
+ return c;
+      case '!':
+ c = parser_nextc(parser);
+ if ((parser->parser_lex_state) == EXPR_FNAME || (parser->parser_lex_state) == EXPR_DOT) {
+     (parser->parser_lex_state) = EXPR_ARG;
+     if (c == '@') {
+  return '!';
+     }
+ }
+ else {
+     (parser->parser_lex_state) = EXPR_BEG;
+ }
+ if (c == '=') {
+     return 327;
+ }
+ if (c == '~') {
+     return 333;
+ }
+ parser_pushback(parser, c);
+ return '!';
+      case '=':
+ if (((parser->parser_lex_p) == (parser->parser_lex_pbeg) + 1)) {
+     if ((__extension__ (__builtin_constant_p (5) && ((__builtin_constant_p ((parser->parser_lex_p)) && strlen ((parser->parser_lex_p)) < ((size_t) (5))) || (__builtin_constant_p ("begin") && strlen ("begin") < ((size_t) (5)))) ? __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ((parser->parser_lex_p)) && __builtin_constant_p ("begin") && (__s1_len = strlen ((parser->parser_lex_p)), __s2_len = strlen ("begin"), (!((size_t)(const void *)(((parser->parser_lex_p)) + 1) - (size_t)(const void *)((parser->parser_lex_p)) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("begin") + 1) - (size_t)(const void *)("begin") == 1) || __s2_len >= 4)) ? __builtin_strcmp ((parser->parser_lex_p), "begin") : (__builtin_constant_p ((parser->parser_lex_p)) && ((size_t)(const void *)(((parser->parser_lex_p)) + 1) - (size_t)(const void *)((parser->parser_lex_p)) == 1) && (__s1_len = strlen ((parser->parser_lex_p)), __s1_len < 4) ? (__builtin_constant_p ("begin") && ((size_t)(const void *)(("begin") + 1) - (size_t)(const void *)("begin") == 1) ? __builtin_strcmp ((parser->parser_lex_p), "begin") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("begin"); register int __result = (((__const unsigned char *) (__const char *) ((parser->parser_lex_p)))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) ((parser->parser_lex_p)))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) ((parser->parser_lex_p)))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) ((parser->parser_lex_p)))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("begin") && ((size_t)(const void *)(("begin") + 1) - (size_t)(const void *)("begin") == 1) && (__s2_len = strlen ("begin"), __s2_len < 4) ? (__builtin_constant_p ((parser->parser_lex_p)) && ((size_t)(const void *)(((parser->parser_lex_p)) + 1) - (size_t)(const void *)((parser->parser_lex_p)) == 1) ? __builtin_strcmp ((parser->parser_lex_p), "begin") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) ((parser->parser_lex_p)); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("begin"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("begin"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("begin"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("begin"))[3]); } } __result; }))) : __builtin_strcmp ((parser->parser_lex_p), "begin")))); }) : strncmp ((parser->parser_lex_p), "begin", 5))) == 0 && rb_isspace((unsigned char)((parser->parser_lex_p)[5]))) {
+  for (;;) {
+      (parser->parser_lex_p = parser->parser_lex_pend);
+      c = parser_nextc(parser);
+      if (c == -1) {
+   parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "embedded document meets end of file");
+   return 0;
+      }
+      if (c != '=') continue;
+      if ((__extension__ (__builtin_constant_p (3) && ((__builtin_constant_p ((parser->parser_lex_p)) && strlen ((parser->parser_lex_p)) < ((size_t) (3))) || (__builtin_constant_p ("end") && strlen ("end") < ((size_t) (3)))) ? __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p ((parser->parser_lex_p)) && __builtin_constant_p ("end") && (__s1_len = strlen ((parser->parser_lex_p)), __s2_len = strlen ("end"), (!((size_t)(const void *)(((parser->parser_lex_p)) + 1) - (size_t)(const void *)((parser->parser_lex_p)) == 1) || __s1_len >= 4) && (!((size_t)(const void *)(("end") + 1) - (size_t)(const void *)("end") == 1) || __s2_len >= 4)) ? __builtin_strcmp ((parser->parser_lex_p), "end") : (__builtin_constant_p ((parser->parser_lex_p)) && ((size_t)(const void *)(((parser->parser_lex_p)) + 1) - (size_t)(const void *)((parser->parser_lex_p)) == 1) && (__s1_len = strlen ((parser->parser_lex_p)), __s1_len < 4) ? (__builtin_constant_p ("end") && ((size_t)(const void *)(("end") + 1) - (size_t)(const void *)("end") == 1) ? __builtin_strcmp ((parser->parser_lex_p), "end") : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) ("end"); register int __result = (((__const unsigned char *) (__const char *) ((parser->parser_lex_p)))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) ((parser->parser_lex_p)))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) ((parser->parser_lex_p)))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) ((parser->parser_lex_p)))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p ("end") && ((size_t)(const void *)(("end") + 1) - (size_t)(const void *)("end") == 1) && (__s2_len = strlen ("end"), __s2_len < 4) ? (__builtin_constant_p ((parser->parser_lex_p)) && ((size_t)(const void *)(((parser->parser_lex_p)) + 1) - (size_t)(const void *)((parser->parser_lex_p)) == 1) ? __builtin_strcmp ((parser->parser_lex_p), "end") : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) ((parser->parser_lex_p)); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) ("end"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) ("end"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) ("end"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) ("end"))[3]); } } __result; }))) : __builtin_strcmp ((parser->parser_lex_p), "end")))); }) : strncmp ((parser->parser_lex_p), "end", 3))) == 0 &&
+   ((parser->parser_lex_p) + 3 == (parser->parser_lex_pend) || rb_isspace((unsigned char)((parser->parser_lex_p)[3])))) {
+   break;
+      }
+  }
+  (parser->parser_lex_p = parser->parser_lex_pend);
+  goto retry;
+     }
+ }
+ switch ((parser->parser_lex_state)) {
+   case EXPR_FNAME: case EXPR_DOT:
+     (parser->parser_lex_state) = EXPR_ARG; break;
+   default:
+     (parser->parser_lex_state) = EXPR_BEG; break;
+ }
+ if ((c = parser_nextc(parser)) == '=') {
+     if ((c = parser_nextc(parser)) == '=') {
+  return 326;
+     }
+     parser_pushback(parser, c);
+     return 325;
+ }
+ if (c == '~') {
+     return 332;
+ }
+ else if (c == '>') {
+     return 343;
+ }
+ parser_pushback(parser, c);
+ return '=';
+      case '<':
+ c = parser_nextc(parser);
+ if (c == '<' &&
+     (parser->parser_lex_state) != EXPR_END &&
+     (parser->parser_lex_state) != EXPR_DOT &&
+     (parser->parser_lex_state) != EXPR_ENDARG &&
+     (parser->parser_lex_state) != EXPR_CLASS &&
+     (!((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG) || space_seen)) {
+     int token = parser_heredoc_identifier(parser);
+     if (token) return token;
+ }
+ switch ((parser->parser_lex_state)) {
+   case EXPR_FNAME: case EXPR_DOT:
+     (parser->parser_lex_state) = EXPR_ARG; break;
+   default:
+     (parser->parser_lex_state) = EXPR_BEG; break;
+ }
+ if (c == '=') {
+     if ((c = parser_nextc(parser)) == '>') {
+  return 324;
+     }
+     parser_pushback(parser, c);
+     return 329;
+ }
+ if (c == '<') {
+     if ((c = parser_nextc(parser)) == '=') {
+                (*((YYSTYPE*)(parser->parser_yylval))).id = 338;
+  (parser->parser_lex_state) = EXPR_BEG;
+  return 342;
+     }
+     parser_pushback(parser, c);
+     return 338;
+ }
+ parser_pushback(parser, c);
+ return '<';
+      case '>':
+ switch ((parser->parser_lex_state)) {
+   case EXPR_FNAME: case EXPR_DOT:
+     (parser->parser_lex_state) = EXPR_ARG; break;
+   default:
+     (parser->parser_lex_state) = EXPR_BEG; break;
+ }
+ if ((c = parser_nextc(parser)) == '=') {
+     return 328;
+ }
+ if (c == '>') {
+     if ((c = parser_nextc(parser)) == '=') {
+                (*((YYSTYPE*)(parser->parser_yylval))).id = 339;
+  (parser->parser_lex_state) = EXPR_BEG;
+  return 342;
+     }
+     parser_pushback(parser, c);
+     return 339;
+ }
+ parser_pushback(parser, c);
+ return '>';
+      case '"':
+ (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_dquote), ('"') | ((0) << (8 * 2)), 0);
+ return 354;
+      case '`':
+ if ((parser->parser_lex_state) == EXPR_FNAME) {
+     (parser->parser_lex_state) = EXPR_END;
+     return c;
+ }
+ if ((parser->parser_lex_state) == EXPR_DOT) {
+     if (cmd_state)
+  (parser->parser_lex_state) = EXPR_CMDARG;
+     else
+  (parser->parser_lex_state) = EXPR_ARG;
+     return c;
+ }
+ (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_xquote), ('`') | ((0) << (8 * 2)), 0);
+ return 355;
+      case '\'':
+ (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_squote), ('\'') | ((0) << (8 * 2)), 0);
+ return 354;
+      case '?':
+ if ((parser->parser_lex_state) == EXPR_END || (parser->parser_lex_state) == EXPR_ENDARG) {
+     (parser->parser_lex_state) = EXPR_VALUE;
+     return '?';
+ }
+ c = parser_nextc(parser);
+ if (c == -1) {
+     parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "incomplete character syntax");
+     return 0;
+ }
+ if ((parser->enc)->is_code_ctype(c,9,parser->enc)) {
+     if (!((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG)) {
+  int c2 = 0;
+  switch (c) {
+    case ' ':
+      c2 = 's';
+      break;
+    case '\n':
+      c2 = 'n';
+      break;
+    case '\t':
+      c2 = 't';
+      break;
+    case '\v':
+      c2 = 'v';
+      break;
+    case '\r':
+      c2 = 'r';
+      break;
+    case '\f':
+      c2 = 'f';
+      break;
+  }
+  if (c2) {
+      rb_compile_warn((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "invalid character syntax; use ?\\%c", c2);
+  }
+     }
+   ternary:
+     parser_pushback(parser, c);
+     (parser->parser_lex_state) = EXPR_VALUE;
+     return '?';
+ }
+ parser_newtok(parser);
+ enc = parser->enc;
+ if (!((unsigned long)((unsigned char)(*((parser->parser_lex_p)-1))) < 128)) {
+     if (parser_tokadd_mbchar(parser, c) == -1) return 0;
+ }
+ else if (((parser->enc)->is_code_ctype(c,13,parser->enc) || c == '_') &&
+   (parser->parser_lex_p) < (parser->parser_lex_pend) && ((parser->enc)->is_code_ctype(*(parser->parser_lex_p),13,parser->enc) || (*(parser->parser_lex_p)) == '_' || !((unsigned long)((unsigned char)(*(parser->parser_lex_p))) < 128))) {
+     goto ternary;
+ }
+        else if (c == '\\') {
+            if (((parser->parser_lex_p) < (parser->parser_lex_pend) && ('u') == *(parser->parser_lex_p))) {
+                parser_nextc(parser);
+                c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
+                if (0x80 <= c) {
+                    parser_tokaddmbc(parser, c, enc);
+                }
+                else {
+                    parser_tokadd(parser, c);
+                }
+            }
+            else {
+                c = parser_read_escape(parser, 0, &enc);
+                parser_tokadd(parser, c);
+            }
+        }
+        else {
+     parser_tokadd(parser, c);
+        }
+ ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+ (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_STR), (VALUE)(parser_str_new(((parser->parser_tokenbuf)),((parser->parser_tokidx)),(enc),(0),parser->enc)), (VALUE)(0), (VALUE)(0));
+ (parser->parser_lex_state) = EXPR_END;
+ return 317;
+      case '&':
+ if ((c = parser_nextc(parser)) == '&') {
+     (parser->parser_lex_state) = EXPR_BEG;
+     if ((c = parser_nextc(parser)) == '=') {
+                (*((YYSTYPE*)(parser->parser_yylval))).id = 330;
+  (parser->parser_lex_state) = EXPR_BEG;
+  return 342;
+     }
+     parser_pushback(parser, c);
+     return 330;
+ }
+ else if (c == '=') {
+            (*((YYSTYPE*)(parser->parser_yylval))).id = '&';
+     (parser->parser_lex_state) = EXPR_BEG;
+     return 342;
+ }
+ parser_pushback(parser, c);
+ if (((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG) && space_seen && !rb_isspace((unsigned char)(c))) {
+     rb_compile_warning((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "`&' interpreted as argument prefix");
+     c = 351;
+ }
+ else if (((parser->parser_lex_state) == EXPR_BEG || (parser->parser_lex_state) == EXPR_MID || (parser->parser_lex_state) == EXPR_VALUE || (parser->parser_lex_state) == EXPR_CLASS)) {
+     c = 351;
+ }
+ else {
+     c = '&';
+ }
+ switch ((parser->parser_lex_state)) {
+   case EXPR_FNAME: case EXPR_DOT:
+     (parser->parser_lex_state) = EXPR_ARG; break;
+   default:
+     (parser->parser_lex_state) = EXPR_BEG;
+ }
+ return c;
+      case '|':
+ if ((c = parser_nextc(parser)) == '|') {
+     (parser->parser_lex_state) = EXPR_BEG;
+     if ((c = parser_nextc(parser)) == '=') {
+                (*((YYSTYPE*)(parser->parser_yylval))).id = 331;
+  (parser->parser_lex_state) = EXPR_BEG;
+  return 342;
+     }
+     parser_pushback(parser, c);
+     return 331;
+ }
+ if (c == '=') {
+            (*((YYSTYPE*)(parser->parser_yylval))).id = '|';
+     (parser->parser_lex_state) = EXPR_BEG;
+     return 342;
+ }
+ if ((parser->parser_lex_state) == EXPR_FNAME || (parser->parser_lex_state) == EXPR_DOT) {
+     (parser->parser_lex_state) = EXPR_ARG;
+ }
+ else {
+     (parser->parser_lex_state) = EXPR_BEG;
+ }
+ parser_pushback(parser, c);
+ return '|';
+      case '+':
+ c = parser_nextc(parser);
+ if ((parser->parser_lex_state) == EXPR_FNAME || (parser->parser_lex_state) == EXPR_DOT) {
+     (parser->parser_lex_state) = EXPR_ARG;
+     if (c == '@') {
+  return 321;
+     }
+     parser_pushback(parser, c);
+     return '+';
+ }
+ if (c == '=') {
+            (*((YYSTYPE*)(parser->parser_yylval))).id = '+';
+     (parser->parser_lex_state) = EXPR_BEG;
+     return 342;
+ }
+ if (((parser->parser_lex_state) == EXPR_BEG || (parser->parser_lex_state) == EXPR_MID || (parser->parser_lex_state) == EXPR_VALUE || (parser->parser_lex_state) == EXPR_CLASS) ||
+     (((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG) && space_seen && !rb_isspace((unsigned char)(c)))) {
+     if (((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG)) arg_ambiguous_gen(parser);
+     (parser->parser_lex_state) = EXPR_BEG;
+     parser_pushback(parser, c);
+     if (c != -1 && rb_isdigit((unsigned char)(c))) {
+  c = '+';
+  goto start_num;
+     }
+     return 321;
+ }
+ (parser->parser_lex_state) = EXPR_BEG;
+ parser_pushback(parser, c);
+ return '+';
+      case '-':
+ c = parser_nextc(parser);
+ if ((parser->parser_lex_state) == EXPR_FNAME || (parser->parser_lex_state) == EXPR_DOT) {
+     (parser->parser_lex_state) = EXPR_ARG;
+     if (c == '@') {
+  return 322;
+     }
+     parser_pushback(parser, c);
+     return '-';
+ }
+ if (c == '=') {
+            (*((YYSTYPE*)(parser->parser_yylval))).id = '-';
+     (parser->parser_lex_state) = EXPR_BEG;
+     return 342;
+ }
+ if (c == '>') {
+     (parser->parser_lex_state) = EXPR_ARG;
+     return 352;
+ }
+ if (((parser->parser_lex_state) == EXPR_BEG || (parser->parser_lex_state) == EXPR_MID || (parser->parser_lex_state) == EXPR_VALUE || (parser->parser_lex_state) == EXPR_CLASS) ||
+     (((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG) && space_seen && !rb_isspace((unsigned char)(c)))) {
+     if (((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG)) arg_ambiguous_gen(parser);
+     (parser->parser_lex_state) = EXPR_BEG;
+     parser_pushback(parser, c);
+     if (c != -1 && rb_isdigit((unsigned char)(c))) {
+  return 364;
+     }
+     return 322;
+ }
+ (parser->parser_lex_state) = EXPR_BEG;
+ parser_pushback(parser, c);
+ return '-';
+      case '.':
+ (parser->parser_lex_state) = EXPR_BEG;
+ if ((c = parser_nextc(parser)) == '.') {
+     if ((c = parser_nextc(parser)) == '.') {
+  return 335;
+     }
+     parser_pushback(parser, c);
+     return 334;
+ }
+ parser_pushback(parser, c);
+ if (c != -1 && rb_isdigit((unsigned char)(c))) {
+     parser_yyerror(parser, "no .<digit> floating literal anymore; put 0 before dot");
+ }
+ (parser->parser_lex_state) = EXPR_DOT;
+ return '.';
+      start_num:
+      case '0': case '1': case '2': case '3': case '4':
+      case '5': case '6': case '7': case '8': case '9':
+ {
+     int is_float, seen_point, seen_e, nondigit;
+     is_float = seen_point = seen_e = nondigit = 0;
+     (parser->parser_lex_state) = EXPR_END;
+     parser_newtok(parser);
+     if (c == '-' || c == '+') {
+  parser_tokadd(parser, c);
+  c = parser_nextc(parser);
+     }
+     if (c == '0') {
+  int start = (parser->parser_tokidx);
+  c = parser_nextc(parser);
+  if (c == 'x' || c == 'X') {
+      c = parser_nextc(parser);
+      if (c != -1 && rb_isxdigit((unsigned char)(c))) {
+   do {
+       if (c == '_') {
+    if (nondigit) break;
+    nondigit = c;
+    continue;
+       }
+       if (!rb_isxdigit((unsigned char)(c))) break;
+       nondigit = 0;
+       parser_tokadd(parser, c);
+   } while ((c = parser_nextc(parser)) != -1);
+      }
+      parser_pushback(parser, c);
+      ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+      if ((parser->parser_tokidx) == start) {
+   parser_yyerror(parser, "numeric literal without digits");
+      }
+      else if (nondigit) goto trailing_uc;
+                    (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_LIT), (VALUE)(rb_cstr_to_inum((parser->parser_tokenbuf), 16, ((VALUE)RUBY_Qfalse))), (VALUE)(0), (VALUE)(0));
+      return 314;
+  }
+  if (c == 'b' || c == 'B') {
+      c = parser_nextc(parser);
+      if (c == '0' || c == '1') {
+   do {
+       if (c == '_') {
+    if (nondigit) break;
+    nondigit = c;
+    continue;
+       }
+       if (c != '0' && c != '1') break;
+       nondigit = 0;
+       parser_tokadd(parser, c);
+   } while ((c = parser_nextc(parser)) != -1);
+      }
+      parser_pushback(parser, c);
+      ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+      if ((parser->parser_tokidx) == start) {
+   parser_yyerror(parser, "numeric literal without digits");
+      }
+      else if (nondigit) goto trailing_uc;
+                    (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_LIT), (VALUE)(rb_cstr_to_inum((parser->parser_tokenbuf), 2, ((VALUE)RUBY_Qfalse))), (VALUE)(0), (VALUE)(0));
+      return 314;
+  }
+  if (c == 'd' || c == 'D') {
+      c = parser_nextc(parser);
+      if (c != -1 && rb_isdigit((unsigned char)(c))) {
+   do {
+       if (c == '_') {
+    if (nondigit) break;
+    nondigit = c;
+    continue;
+       }
+       if (!rb_isdigit((unsigned char)(c))) break;
+       nondigit = 0;
+       parser_tokadd(parser, c);
+   } while ((c = parser_nextc(parser)) != -1);
+      }
+      parser_pushback(parser, c);
+      ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+      if ((parser->parser_tokidx) == start) {
+   parser_yyerror(parser, "numeric literal without digits");
+      }
+      else if (nondigit) goto trailing_uc;
+                    (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_LIT), (VALUE)(rb_cstr_to_inum((parser->parser_tokenbuf), 10, ((VALUE)RUBY_Qfalse))), (VALUE)(0), (VALUE)(0));
+      return 314;
+  }
+  if (c == '_') {
+      goto octal_number;
+  }
+  if (c == 'o' || c == 'O') {
+      c = parser_nextc(parser);
+      if (c == -1 || c == '_' || !rb_isdigit((unsigned char)(c))) {
+   parser_yyerror(parser, "numeric literal without digits");
+      }
+  }
+  if (c >= '0' && c <= '7') {
+    octal_number:
+             do {
+   if (c == '_') {
+       if (nondigit) break;
+       nondigit = c;
+       continue;
+   }
+   if (c < '0' || c > '9') break;
+   if (c > '7') goto invalid_octal;
+   nondigit = 0;
+   parser_tokadd(parser, c);
+      } while ((c = parser_nextc(parser)) != -1);
+      if ((parser->parser_tokidx) > start) {
+   parser_pushback(parser, c);
+   ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+   if (nondigit) goto trailing_uc;
+                        (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_LIT), (VALUE)(rb_cstr_to_inum((parser->parser_tokenbuf), 8, ((VALUE)RUBY_Qfalse))), (VALUE)(0), (VALUE)(0));
+   return 314;
+      }
+      if (nondigit) {
+   parser_pushback(parser, c);
+   goto trailing_uc;
+      }
+  }
+  if (c > '7' && c <= '9') {
+    invalid_octal:
+      parser_yyerror(parser, "Invalid octal digit");
+  }
+  else if (c == '.' || c == 'e' || c == 'E') {
+      parser_tokadd(parser, '0');
+  }
+  else {
+      parser_pushback(parser, c);
+                    (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_LIT), (VALUE)(((VALUE)(((long)(0))<<1 | RUBY_FIXNUM_FLAG))), (VALUE)(0), (VALUE)(0));
+      return 314;
+  }
+     }
+     for (;;) {
+  switch (c) {
+    case '0': case '1': case '2': case '3': case '4':
+    case '5': case '6': case '7': case '8': case '9':
+      nondigit = 0;
+      parser_tokadd(parser, c);
+      break;
+    case '.':
+      if (nondigit) goto trailing_uc;
+      if (seen_point || seen_e) {
+   goto decode_num;
+      }
+      else {
+   int c0 = parser_nextc(parser);
+   if (c == -1 || !rb_isdigit((unsigned char)(c0))) {
+       parser_pushback(parser, c0);
+       goto decode_num;
+   }
+   c = c0;
+      }
+      parser_tokadd(parser, '.');
+      parser_tokadd(parser, c);
+      is_float++;
+      seen_point++;
+      nondigit = 0;
+      break;
+    case 'e':
+    case 'E':
+      if (nondigit) {
+   parser_pushback(parser, c);
+   c = nondigit;
+   goto decode_num;
+      }
+      if (seen_e) {
+   goto decode_num;
+      }
+      parser_tokadd(parser, c);
+      seen_e++;
+      is_float++;
+      nondigit = c;
+      c = parser_nextc(parser);
+      if (c != '-' && c != '+') continue;
+      parser_tokadd(parser, c);
+      nondigit = c;
+      break;
+    case '_':
+      if (nondigit) goto decode_num;
+      nondigit = c;
+      break;
+    default:
+      goto decode_num;
+  }
+  c = parser_nextc(parser);
+     }
+   decode_num:
+     parser_pushback(parser, c);
+     ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+     if (nondigit) {
+  char tmp[30];
+       trailing_uc:
+  sprintf(tmp, "trailing `%c' in number", nondigit);
+  parser_yyerror(parser, tmp);
+     }
+     if (is_float) {
+  double d = ruby_strtod((parser->parser_tokenbuf),0);
+  if ((*__errno_location ()) == 34) {
+      rb_compile_warning((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "Float %s out of range", (parser->parser_tokenbuf));
+      (*__errno_location ()) = 0;
+  }
+                (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_LIT), (VALUE)(rb_float_new(d)), (VALUE)(0), (VALUE)(0));
+  return 315;
+     }
+            (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_LIT), (VALUE)(rb_cstr_to_inum((parser->parser_tokenbuf), 10, ((VALUE)RUBY_Qfalse))), (VALUE)(0), (VALUE)(0));
+     return 314;
+ }
+      case ')':
+      case ']':
+ (parser->parser_paren_nest)--;
+      case '}':
+ ((parser->parser_cond_stack) = ((parser->parser_cond_stack) >> 1) | ((parser->parser_cond_stack) & 1));
+ ((parser->parser_cmdarg_stack) = ((parser->parser_cmdarg_stack) >> 1) | ((parser->parser_cmdarg_stack) & 1));
+ if (c == ')')
+     (parser->parser_lex_state) = EXPR_END;
+ else
+     (parser->parser_lex_state) = EXPR_ENDARG;
+ return c;
+      case ':':
+ c = parser_nextc(parser);
+ if (c == ':') {
+     if (((parser->parser_lex_state) == EXPR_BEG || (parser->parser_lex_state) == EXPR_MID || (parser->parser_lex_state) == EXPR_VALUE || (parser->parser_lex_state) == EXPR_CLASS) ||
+  (parser->parser_lex_state) == EXPR_CLASS || (((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG) && space_seen)) {
+  (parser->parser_lex_state) = EXPR_BEG;
+  return 341;
+     }
+     (parser->parser_lex_state) = EXPR_DOT;
+     return 340;
+ }
+ if ((parser->parser_lex_state) == EXPR_END || (parser->parser_lex_state) == EXPR_ENDARG || (c != -1 && rb_isspace((unsigned char)(c)))) {
+     parser_pushback(parser, c);
+     (parser->parser_lex_state) = EXPR_BEG;
+     return ':';
+ }
+ switch (c) {
+   case '\'':
+     (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_ssym), (c) | ((0) << (8 * 2)), 0);
+     break;
+   case '"':
+     (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_dsym), (c) | ((0) << (8 * 2)), 0);
+     break;
+   default:
+     parser_pushback(parser, c);
+     break;
+ }
+ (parser->parser_lex_state) = EXPR_FNAME;
+ return 353;
+      case '/':
+ if (((parser->parser_lex_state) == EXPR_BEG || (parser->parser_lex_state) == EXPR_MID || (parser->parser_lex_state) == EXPR_VALUE || (parser->parser_lex_state) == EXPR_CLASS)) {
+     (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_regexp), ('/') | ((0) << (8 * 2)), 0);
+     return 356;
+ }
+ if ((c = parser_nextc(parser)) == '=') {
+            (*((YYSTYPE*)(parser->parser_yylval))).id = '/';
+     (parser->parser_lex_state) = EXPR_BEG;
+     return 342;
+ }
+ parser_pushback(parser, c);
+ if (((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG) && space_seen) {
+     if (!rb_isspace((unsigned char)(c))) {
+  arg_ambiguous_gen(parser);
+  (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_regexp), ('/') | ((0) << (8 * 2)), 0);
+  return 356;
+     }
+ }
+ switch ((parser->parser_lex_state)) {
+   case EXPR_FNAME: case EXPR_DOT:
+     (parser->parser_lex_state) = EXPR_ARG; break;
+   default:
+     (parser->parser_lex_state) = EXPR_BEG; break;
+ }
+ return '/';
+      case '^':
+ if ((c = parser_nextc(parser)) == '=') {
+            (*((YYSTYPE*)(parser->parser_yylval))).id = '^';
+     (parser->parser_lex_state) = EXPR_BEG;
+     return 342;
+ }
+ switch ((parser->parser_lex_state)) {
+   case EXPR_FNAME: case EXPR_DOT:
+     (parser->parser_lex_state) = EXPR_ARG; break;
+   default:
+     (parser->parser_lex_state) = EXPR_BEG; break;
+ }
+ parser_pushback(parser, c);
+ return '^';
+      case ';':
+ (parser->parser_lex_state) = EXPR_BEG;
+ (parser->parser_command_start) = ((VALUE)RUBY_Qtrue);
+ return ';';
+      case ',':
+ (parser->parser_lex_state) = EXPR_BEG;
+ return ',';
+      case '~':
+ if ((parser->parser_lex_state) == EXPR_FNAME || (parser->parser_lex_state) == EXPR_DOT) {
+     if ((c = parser_nextc(parser)) != '@') {
+  parser_pushback(parser, c);
+     }
+     (parser->parser_lex_state) = EXPR_ARG;
+ }
+ else {
+     (parser->parser_lex_state) = EXPR_BEG;
+ }
+ return '~';
+      case '(':
+ if (((parser->parser_lex_state) == EXPR_BEG || (parser->parser_lex_state) == EXPR_MID || (parser->parser_lex_state) == EXPR_VALUE || (parser->parser_lex_state) == EXPR_CLASS)) {
+     c = 344;
+ }
+ else if (space_seen) {
+     if (((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG)) {
+  c = 345;
+     }
+ }
+ (parser->parser_paren_nest)++;
+ ((parser->parser_cond_stack) = ((parser->parser_cond_stack)<<1)|((0)&1));
+ ((parser->parser_cmdarg_stack) = ((parser->parser_cmdarg_stack)<<1)|((0)&1));
+ (parser->parser_lex_state) = EXPR_BEG;
+ return c;
+      case '[':
+ (parser->parser_paren_nest)++;
+ if ((parser->parser_lex_state) == EXPR_FNAME || (parser->parser_lex_state) == EXPR_DOT) {
+     (parser->parser_lex_state) = EXPR_ARG;
+     if ((c = parser_nextc(parser)) == ']') {
+  if ((c = parser_nextc(parser)) == '=') {
+      return 337;
+  }
+  parser_pushback(parser, c);
+  return 336;
+     }
+     parser_pushback(parser, c);
+     return '[';
+ }
+ else if (((parser->parser_lex_state) == EXPR_BEG || (parser->parser_lex_state) == EXPR_MID || (parser->parser_lex_state) == EXPR_VALUE || (parser->parser_lex_state) == EXPR_CLASS)) {
+     c = 347;
+ }
+ else if (((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG) && space_seen) {
+     c = 347;
+ }
+ (parser->parser_lex_state) = EXPR_BEG;
+ ((parser->parser_cond_stack) = ((parser->parser_cond_stack)<<1)|((0)&1));
+ ((parser->parser_cmdarg_stack) = ((parser->parser_cmdarg_stack)<<1)|((0)&1));
+ return c;
+      case '{':
+ if ((parser->parser_lpar_beg) && (parser->parser_lpar_beg) == (parser->parser_paren_nest)) {
+     (parser->parser_lex_state) = EXPR_BEG;
+     (parser->parser_lpar_beg) = 0;
+     --(parser->parser_paren_nest);
+     return 362;
+ }
+ if (((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG) || (parser->parser_lex_state) == EXPR_END)
+     c = '{';
+ else if ((parser->parser_lex_state) == EXPR_ENDARG)
+     c = 349;
+ else
+     c = 348;
+ ((parser->parser_cond_stack) = ((parser->parser_cond_stack)<<1)|((0)&1));
+ ((parser->parser_cmdarg_stack) = ((parser->parser_cmdarg_stack)<<1)|((0)&1));
+ (parser->parser_lex_state) = EXPR_BEG;
+ if (c != 348) (parser->parser_command_start) = ((VALUE)RUBY_Qtrue);
+ return c;
+      case '\\':
+ c = parser_nextc(parser);
+ if (c == '\n') {
+     space_seen = 1;
+     goto retry;
+ }
+ parser_pushback(parser, c);
+ return '\\';
+      case '%':
+ if (((parser->parser_lex_state) == EXPR_BEG || (parser->parser_lex_state) == EXPR_MID || (parser->parser_lex_state) == EXPR_VALUE || (parser->parser_lex_state) == EXPR_CLASS)) {
+     int term;
+     int paren;
+     c = parser_nextc(parser);
+   quotation:
+     if (c == -1 || !rb_isalnum((unsigned char)(c))) {
+  term = c;
+  c = 'Q';
+     }
+     else {
+  term = parser_nextc(parser);
+  if ((parser->enc)->is_code_ctype(term,13,parser->enc) || !((unsigned long)((unsigned char)(*((parser->parser_lex_p)-1))) < 128)) {
+      parser_yyerror(parser, "unknown type of %string");
+      return 0;
+  }
+     }
+     if (c == -1 || term == -1) {
+  parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "unterminated quoted string meets end of file");
+  return 0;
+     }
+     paren = term;
+     if (term == '(') term = ')';
+     else if (term == '[') term = ']';
+     else if (term == '{') term = '}';
+     else if (term == '<') term = '>';
+     else paren = 0;
+     switch (c) {
+       case 'Q':
+  (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_dquote), (term) | ((paren) << (8 * 2)), 0);
+  return 354;
+       case 'q':
+  (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_squote), (term) | ((paren) << (8 * 2)), 0);
+  return 354;
+       case 'W':
+  (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_dword), (term) | ((paren) << (8 * 2)), 0);
+  do {c = parser_nextc(parser);} while (rb_isspace((unsigned char)(c)));
+  parser_pushback(parser, c);
+  return 357;
+       case 'w':
+  (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_sword), (term) | ((paren) << (8 * 2)), 0);
+  do {c = parser_nextc(parser);} while (rb_isspace((unsigned char)(c)));
+  parser_pushback(parser, c);
+  return 358;
+       case 'x':
+  (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_xquote), (term) | ((paren) << (8 * 2)), 0);
+  return 355;
+       case 'r':
+  (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_regexp), (term) | ((paren) << (8 * 2)), 0);
+  return 356;
+       case 's':
+  (parser->parser_lex_strterm) = node_newnode(parser, NODE_ZARRAY, (str_ssym), (term) | ((paren) << (8 * 2)), 0);
+  (parser->parser_lex_state) = EXPR_FNAME;
+  return 353;
+       default:
+  parser_yyerror(parser, "unknown type of %string");
+  return 0;
+     }
+ }
+ if ((c = parser_nextc(parser)) == '=') {
+            (*((YYSTYPE*)(parser->parser_yylval))).id = '%';
+     (parser->parser_lex_state) = EXPR_BEG;
+     return 342;
+ }
+ if (((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG) && space_seen && !rb_isspace((unsigned char)(c))) {
+     goto quotation;
+ }
+ switch ((parser->parser_lex_state)) {
+   case EXPR_FNAME: case EXPR_DOT:
+     (parser->parser_lex_state) = EXPR_ARG; break;
+   default:
+     (parser->parser_lex_state) = EXPR_BEG; break;
+ }
+ parser_pushback(parser, c);
+ return '%';
+      case '$':
+ last_state = (parser->parser_lex_state);
+ (parser->parser_lex_state) = EXPR_END;
+ parser_newtok(parser);
+ c = parser_nextc(parser);
+ switch (c) {
+   case '_':
+     c = parser_nextc(parser);
+     if ((!parser->eofp && ((parser->enc)->is_code_ctype(*((parser->parser_lex_p)-1),13,parser->enc) || (*((parser->parser_lex_p)-1)) == '_' || !((unsigned long)((unsigned char)(*((parser->parser_lex_p)-1))) < 128)))) {
+  parser_tokadd(parser, '$');
+  parser_tokadd(parser, '_');
+  break;
+     }
+     parser_pushback(parser, c);
+     c = '_';
+   case '~':
+   case '*':
+   case '$':
+   case '?':
+   case '!':
+   case '@':
+   case '/':
+   case '\\':
+   case ';':
+   case ',':
+   case '.':
+   case '=':
+   case ':':
+   case '<':
+   case '>':
+   case '\"':
+     parser_tokadd(parser, '$');
+     parser_tokadd(parser, c);
+     ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+            (*((YYSTYPE*)(parser->parser_yylval))).id = (__builtin_constant_p((parser->parser_tokenbuf)) ? __extension__ (rb_intern2((parser->parser_tokenbuf), strlen((parser->parser_tokenbuf)))) : (rb_intern)((parser->parser_tokenbuf)));
+     return 309;
+   case '-':
+     parser_tokadd(parser, '$');
+     parser_tokadd(parser, c);
+     c = parser_nextc(parser);
+     if ((!parser->eofp && ((parser->enc)->is_code_ctype(*((parser->parser_lex_p)-1),13,parser->enc) || (*((parser->parser_lex_p)-1)) == '_' || !((unsigned long)((unsigned char)(*((parser->parser_lex_p)-1))) < 128)))) {
+  if (parser_tokadd_mbchar(parser, c) == -1) return 0;
+     }
+     else {
+  parser_pushback(parser, c);
+     }
+   gvar:
+     ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+            (*((YYSTYPE*)(parser->parser_yylval))).id = (__builtin_constant_p((parser->parser_tokenbuf)) ? __extension__ (rb_intern2((parser->parser_tokenbuf), strlen((parser->parser_tokenbuf)))) : (rb_intern)((parser->parser_tokenbuf)));
+     return 309;
+   case '&':
+   case '`':
+   case '\'':
+   case '+':
+     if (last_state == EXPR_FNAME) {
+  parser_tokadd(parser, '$');
+  parser_tokadd(parser, c);
+  goto gvar;
+     }
+     (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_BACK_REF), (VALUE)(0), (VALUE)(c), (VALUE)(0));
+     return 319;
+   case '1': case '2': case '3':
+   case '4': case '5': case '6':
+   case '7': case '8': case '9':
+     parser_tokadd(parser, '$');
+     do {
+  parser_tokadd(parser, c);
+  c = parser_nextc(parser);
+     } while (c != -1 && rb_isdigit((unsigned char)(c)));
+     parser_pushback(parser, c);
+     if (last_state == EXPR_FNAME) goto gvar;
+     ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+     (*((YYSTYPE*)(parser->parser_yylval))).node = node_newnode(parser, (NODE_NTH_REF), (VALUE)(0), (VALUE)(atoi((parser->parser_tokenbuf)+1)), (VALUE)(0));
+     return 318;
+   default:
+     if (!(!parser->eofp && ((parser->enc)->is_code_ctype(*((parser->parser_lex_p)-1),13,parser->enc) || (*((parser->parser_lex_p)-1)) == '_' || !((unsigned long)((unsigned char)(*((parser->parser_lex_p)-1))) < 128)))) {
+  parser_pushback(parser, c);
+  return '$';
+     }
+   case '0':
+     parser_tokadd(parser, '$');
+ }
+ break;
+      case '@':
+ c = parser_nextc(parser);
+ parser_newtok(parser);
+ parser_tokadd(parser, '@');
+ if (c == '@') {
+     parser_tokadd(parser, '@');
+     c = parser_nextc(parser);
+ }
+ if (c != -1 && rb_isdigit((unsigned char)(c))) {
+     if ((parser->parser_tokidx) == 1) {
+  parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "`@%c' is not allowed as an instance variable name", c);
+     }
+     else {
+  parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "`@@%c' is not allowed as a class variable name", c);
+     }
+     return 0;
+ }
+ if (!(!parser->eofp && ((parser->enc)->is_code_ctype(*((parser->parser_lex_p)-1),13,parser->enc) || (*((parser->parser_lex_p)-1)) == '_' || !((unsigned long)((unsigned char)(*((parser->parser_lex_p)-1))) < 128)))) {
+     parser_pushback(parser, c);
+     return '@';
+ }
+ break;
+      case '_':
+ if (((parser->parser_lex_p) == (parser->parser_lex_pbeg) + 1) && parser_whole_match_p(parser,"__END__",7,0)) {
+     (parser->parser_ruby__end__seen) = 1;
+     parser->eofp = ((VALUE)RUBY_Qtrue);
+     return -1;
+ }
+ parser_newtok(parser);
+ break;
+      default:
+ if (!(!parser->eofp && ((parser->enc)->is_code_ctype(*((parser->parser_lex_p)-1),13,parser->enc) || (*((parser->parser_lex_p)-1)) == '_' || !((unsigned long)((unsigned char)(*((parser->parser_lex_p)-1))) < 128)))) {
+     rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "Invalid char `\\x%02X' in expression", c);
+     goto retry;
+ }
+ parser_newtok(parser);
+ break;
+    }
+    mb = (((VALUE)1)<<(12 +8));
+    do {
+ if (!((unsigned long)((unsigned char)(c)) < 128)) mb = 0;
+ if (parser_tokadd_mbchar(parser, c) == -1) return 0;
+ c = parser_nextc(parser);
+    } while ((!parser->eofp && ((parser->enc)->is_code_ctype(*((parser->parser_lex_p)-1),13,parser->enc) || (*((parser->parser_lex_p)-1)) == '_' || !((unsigned long)((unsigned char)(*((parser->parser_lex_p)-1))) < 128))));
+    switch ((parser->parser_tokenbuf)[0]) {
+      case '@': case '$':
+ parser_pushback(parser, c);
+ break;
+      default:
+ if ((c == '!' || c == '?') && !((parser->parser_lex_p) < (parser->parser_lex_pend) && ('=') == *(parser->parser_lex_p))) {
+     parser_tokadd(parser, c);
+ }
+ else {
+     parser_pushback(parser, c);
+ }
+    }
+    ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+    {
+ int result = 0;
+ last_state = (parser->parser_lex_state);
+ switch ((parser->parser_tokenbuf)[0]) {
+   case '$':
+     (parser->parser_lex_state) = EXPR_END;
+     result = 309;
+     break;
+   case '@':
+     (parser->parser_lex_state) = EXPR_END;
+     if ((parser->parser_tokenbuf)[1] == '@')
+  result = 312;
+     else
+  result = 310;
+     break;
+   default:
+     if (((parser->parser_tokidx)>0?(parser->parser_tokenbuf)[(parser->parser_tokidx)-1]:0) == '!' || ((parser->parser_tokidx)>0?(parser->parser_tokenbuf)[(parser->parser_tokidx)-1]:0) == '?') {
+  result = 308;
+     }
+     else {
+  if ((parser->parser_lex_state) == EXPR_FNAME) {
+      if ((c = parser_nextc(parser)) == '=' && !((parser->parser_lex_p) < (parser->parser_lex_pend) && ('~') == *(parser->parser_lex_p)) && !((parser->parser_lex_p) < (parser->parser_lex_pend) && ('>') == *(parser->parser_lex_p)) &&
+   (!((parser->parser_lex_p) < (parser->parser_lex_pend) && ('=') == *(parser->parser_lex_p)) || ((parser->parser_lex_p) + 1 < (parser->parser_lex_pend) && (parser->parser_lex_p)[1] == '>'))) {
+   result = 307;
+   parser_tokadd(parser, c);
+   ((parser->parser_tokenbuf)[(parser->parser_tokidx)]='\0');
+      }
+      else {
+   parser_pushback(parser, c);
+      }
+  }
+  if (result == 0 && rb_isupper((unsigned char)((parser->parser_tokenbuf)[0]))) {
+      result = 311;
+  }
+  else {
+      result = 307;
+  }
+     }
+     if (((parser->parser_lex_state) == EXPR_BEG && !cmd_state) ||
+  (parser->parser_lex_state) == EXPR_ARG ||
+  (parser->parser_lex_state) == EXPR_CMDARG) {
+  if (((parser->parser_lex_p) < (parser->parser_lex_pend) && (':') == *(parser->parser_lex_p)) && !((parser->parser_lex_p) + 1 < (parser->parser_lex_pend) && (parser->parser_lex_p)[1] == ':')) {
+      (parser->parser_lex_state) = EXPR_BEG;
+      parser_nextc(parser);
+      (*((YYSTYPE*)(parser->parser_yylval))).id = rb_intern3((parser->parser_tokenbuf), (parser->parser_tokidx), parser->enc);
+      return 313;
+  }
+     }
+     if (mb == (((VALUE)1)<<(12 +8)) && (parser->parser_lex_state) != EXPR_DOT) {
+  const struct kwtable *kw;
+  kw = rb_reserved_word((parser->parser_tokenbuf), (parser->parser_tokidx));
+  if (kw) {
+      enum lex_state_e state = (parser->parser_lex_state);
+      (parser->parser_lex_state) = kw->state;
+      if (state == EXPR_FNAME) {
+                        (*((YYSTYPE*)(parser->parser_yylval))).id = (__builtin_constant_p(kw->name) ? __extension__ (rb_intern2(kw->name, strlen(kw->name))) : (rb_intern)(kw->name));
+   return kw->id[0];
+      }
+      if (kw->id[0] == 281) {
+   (parser->parser_command_start) = ((VALUE)RUBY_Qtrue);
+   if ((parser->parser_lpar_beg) && (parser->parser_lpar_beg) == (parser->parser_paren_nest)) {
+       (parser->parser_lpar_beg) = 0;
+       --(parser->parser_paren_nest);
+       return 284;
+   }
+   if (((parser->parser_cond_stack)&1)) return 282;
+   if (((parser->parser_cmdarg_stack)&1) && state != EXPR_CMDARG)
+       return 283;
+   if (state == EXPR_ENDARG || state == EXPR_BEG)
+       return 283;
+   return 281;
+      }
+      if (state == EXPR_BEG || state == EXPR_VALUE)
+   return kw->id[0];
+      else {
+   if (kw->id[0] != kw->id[1])
+       (parser->parser_lex_state) = EXPR_BEG;
+   return kw->id[1];
+      }
+  }
+     }
+     if (((parser->parser_lex_state) == EXPR_BEG || (parser->parser_lex_state) == EXPR_MID || (parser->parser_lex_state) == EXPR_VALUE || (parser->parser_lex_state) == EXPR_CLASS) ||
+  (parser->parser_lex_state) == EXPR_DOT ||
+  ((parser->parser_lex_state) == EXPR_ARG || (parser->parser_lex_state) == EXPR_CMDARG)) {
+  if (cmd_state) {
+      (parser->parser_lex_state) = EXPR_CMDARG;
+  }
+  else {
+      (parser->parser_lex_state) = EXPR_ARG;
+  }
+     }
+     else {
+  (parser->parser_lex_state) = EXPR_END;
+     }
+ }
+        {
+            ID ident = rb_intern3((parser->parser_tokenbuf), (parser->parser_tokidx), parser->enc);
+            (*((YYSTYPE*)(parser->parser_yylval))).id = ident;
+            if (last_state != EXPR_DOT && (((ident)>376)&&((ident)&0x07)==0x00) && lvar_defined_gen(parser, ident)) {
+                (parser->parser_lex_state) = EXPR_END;
+            }
+        }
+ return result;
+    }
+}
+static int
+yylex(void *lval, void *p)
+{
+    struct parser_params *parser = (struct parser_params*)p;
+    int t;
+    parser->parser_yylval = lval;
+    parser->parser_yylval->val = ((VALUE)RUBY_Qundef);
+    t = parser_yylex(parser);
+    return t;
+}
+static NODE*
+node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
+{
+    NODE *n = (rb_node_newnode)(type, a0, a1, a2);
+    ((struct RNode*)(n))->flags=((((struct RNode*)(n))->flags&~(-1<<(8 +7)))|((((parser->parser_ruby_sourceline))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+    return n;
+}
+enum node_type
+nodetype(NODE *node)
+{
+    return (enum node_type)((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8));
+}
+int
+nodeline(NODE *node)
+{
+    return ((VALUE)(((((struct RNode*)(node)))->flags>>(8 +7))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1)));
+}
+static NODE*
+newline_node(NODE *node)
+{
+    if (node) {
+ node = remove_begin(node);
+ node->flags |= (((VALUE)1)<<7);
+    }
+    return node;
+}
+static void
+fixpos(NODE *node, NODE *orig)
+{
+    if (!node) return;
+    if (!orig) return;
+    if (orig == (NODE*)1) return;
+    ((struct RNode*)(node))->flags=((((struct RNode*)(node))->flags&~(-1<<(8 +7)))|(((((VALUE)(((((struct RNode*)(orig)))->flags>>(8 +7))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))<<(8 +7)));
+}
+static void
+parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
+{
+    rb_compile_warning((parser->parser_ruby_sourcefile), ((VALUE)(((((struct RNode*)(node)))->flags>>(8 +7))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))), "%s", mesg);
+}
+static void
+parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
+{
+    rb_compile_warn((parser->parser_ruby_sourcefile), ((VALUE)(((((struct RNode*)(node)))->flags>>(8 +7))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1))), "%s", mesg);
+}
+static NODE*
+block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
+{
+    NODE *end, *h = head, *nd;
+    if (tail == 0) return head;
+    if (h == 0) return tail;
+    switch (((int) (((((struct RNode*)(h)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+      case NODE_LIT:
+      case NODE_STR:
+      case NODE_SELF:
+      case NODE_TRUE:
+      case NODE_FALSE:
+      case NODE_NIL:
+ parser_warning(parser, h, "unused literal ignored");
+ return tail;
+      default:
+ h = end = node_newnode(parser, (NODE_BLOCK), (VALUE)(head), (VALUE)(0), (VALUE)(0));
+ end->u2.node = end;
+ fixpos(end, head);
+ head = end;
+ break;
+      case NODE_BLOCK:
+ end = h->u2.node;
+ break;
+    }
+    nd = end->u1.node;
+    switch (((int) (((((struct RNode*)(nd)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+      case NODE_RETURN:
+      case NODE_BREAK:
+      case NODE_NEXT:
+      case NODE_REDO:
+      case NODE_RETRY:
+ if ((((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) {
+     parser_warning(parser, nd, "statement not reached");
+ }
+ break;
+      default:
+ break;
+    }
+    if (((int) (((((struct RNode*)(tail)))->flags & (((VALUE)0x7f)<<8))>>8)) != NODE_BLOCK) {
+ tail = node_newnode(parser, (NODE_BLOCK), (VALUE)(tail), (VALUE)(0), (VALUE)(0));
+ tail->u2.node = tail;
+    }
+    end->u3.node = tail;
+    h->u2.node = tail->u2.node;
+    return head;
+}
+static NODE*
+list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
+{
+    NODE *last;
+    if (list == 0) return node_newnode(parser, (NODE_ARRAY), (VALUE)(item), (VALUE)(1), (VALUE)(0));
+    if (list->u3.node) {
+ last = list->u3.node->u2.node;
+    }
+    else {
+ last = list;
+    }
+    list->u2.argc += 1;
+    last->u3.node = node_newnode(parser, (NODE_ARRAY), (VALUE)(item), (VALUE)(1), (VALUE)(0));
+    list->u3.node->u2.node = last->u3.node;
+    return list;
+}
+static NODE*
+list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
+{
+    NODE *last;
+    if (head->u3.node) {
+ last = head->u3.node->u2.node;
+    }
+    else {
+ last = head;
+    }
+    head->u2.argc += tail->u2.argc;
+    last->u3.node = tail;
+    if (tail->u3.node) {
+ head->u3.node->u2.node = tail->u3.node->u2.node;
+    }
+    else {
+ head->u3.node->u2.node = tail;
+    }
+    return head;
+}
+static int
+literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
+{
+    if (!rb_enc_compatible(head, tail)) {
+ parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "string literal encodings differ (%s / %s)",
+        (rb_enc_get(head))->name,
+        (rb_enc_get(tail))->name);
+ rb_str_resize(head, 0);
+ rb_str_resize(tail, 0);
+ return 0;
+    }
+    rb_str_buf_append(head, tail);
+    return 1;
+}
+static NODE *
+literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
+{
+    enum node_type htype;
+    if (!head) return tail;
+    if (!tail) return head;
+    htype = ((int) (((((struct RNode*)(head)))->flags & (((VALUE)0x7f)<<8))>>8));
+    if (htype == NODE_EVSTR) {
+ NODE *node = node_newnode(parser, (NODE_DSTR), (VALUE)(rb_enc_str_new(0,0,parser->enc)), (VALUE)(1), (VALUE)(0));
+ head = list_append_gen(parser,node,head);
+    }
+    switch (((int) (((((struct RNode*)(tail)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+      case NODE_STR:
+ if (htype == NODE_STR) {
+     if (!literal_concat0(parser, head->u1.value, tail->u1.value)) {
+       error:
+  rb_gc_force_recycle((VALUE)head);
+  rb_gc_force_recycle((VALUE)tail);
+  return 0;
+     }
+     rb_gc_force_recycle((VALUE)tail);
+ }
+ else {
+     list_append_gen(parser,head,tail);
+ }
+ break;
+      case NODE_DSTR:
+ if (htype == NODE_STR) {
+     if (!literal_concat0(parser, head->u1.value, tail->u1.value))
+  goto error;
+     tail->u1.value = head->u1.value;
+     rb_gc_force_recycle((VALUE)head);
+     head = tail;
+ }
+ else {
+     ((struct RNode*)(tail))->flags=((((struct RNode*)(tail))->flags&~(((VALUE)0x7f)<<8))|(((NODE_ARRAY)<<8)&(((VALUE)0x7f)<<8)));
+     tail->u1.node = node_newnode(parser, (NODE_STR), (VALUE)(tail->u1.value), (VALUE)(0), (VALUE)(0));
+     list_concat_gen(parser,head,tail);
+ }
+ break;
+      case NODE_EVSTR:
+ if (htype == NODE_STR) {
+     ((struct RNode*)(head))->flags=((((struct RNode*)(head))->flags&~(((VALUE)0x7f)<<8))|(((NODE_DSTR)<<8)&(((VALUE)0x7f)<<8)));
+     head->u2.argc = 1;
+ }
+ list_append_gen(parser,head,tail);
+ break;
+    }
+    return head;
+}
+static NODE *
+evstr2dstr_gen(struct parser_params *parser, NODE *node)
+{
+    if (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_EVSTR) {
+ node = list_append_gen(parser,node_newnode(parser, (NODE_DSTR), (VALUE)(rb_enc_str_new(0,0,parser->enc)), (VALUE)(1), (VALUE)(0)),node);
+    }
+    return node;
+}
+static NODE *
+new_evstr_gen(struct parser_params *parser, NODE *node)
+{
+    NODE *head = node;
+    if (node) {
+ switch (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+   case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
+     return node;
+ }
+    }
+    return node_newnode(parser, (NODE_EVSTR), (VALUE)(0), (VALUE)((head)), (VALUE)(0));
+}
+static NODE *
+call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
+{
+    value_expr_gen(parser, (recv) = remove_begin(recv));
+    value_expr_gen(parser, (arg1) = remove_begin(arg1));
+    return node_newnode(parser, (NODE_CALL), (VALUE)(recv), (VALUE)(id), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)(arg1), (VALUE)(1), (VALUE)(0))));
+}
+static NODE *
+call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
+{
+    value_expr_gen(parser, (recv) = remove_begin(recv));
+    return node_newnode(parser, (NODE_CALL), (VALUE)(recv), (VALUE)(id), (VALUE)(0));
+}
+static NODE*
+match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
+{
+    value_expr_gen(parser, (node1) = remove_begin(node1));
+    value_expr_gen(parser, (node2) = remove_begin(node2));
+    if (node1) {
+ switch (((int) (((((struct RNode*)(node1)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+   case NODE_DREGX:
+   case NODE_DREGX_ONCE:
+     return node_newnode(parser, (NODE_MATCH2), (VALUE)(node1), (VALUE)(node2), (VALUE)(0));
+   case NODE_LIT:
+     if (rb_type((VALUE)(node1->u1.value)) == RUBY_T_REGEXP) {
+  return node_newnode(parser, (NODE_MATCH2), (VALUE)(node1), (VALUE)(node2), (VALUE)(0));
+     }
+ }
+    }
+    if (node2) {
+ switch (((int) (((((struct RNode*)(node2)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+   case NODE_DREGX:
+   case NODE_DREGX_ONCE:
+     return node_newnode(parser, (NODE_MATCH3), (VALUE)(node2), (VALUE)(node1), (VALUE)(0));
+   case NODE_LIT:
+     if (rb_type((VALUE)(node2->u1.value)) == RUBY_T_REGEXP) {
+  return node_newnode(parser, (NODE_MATCH3), (VALUE)(node2), (VALUE)(node1), (VALUE)(0));
+     }
+ }
+    }
+    return node_newnode(parser, (NODE_CALL), (VALUE)(node1), (VALUE)(332), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)(node2), (VALUE)(1), (VALUE)(0))));
+}
+static NODE*
+gettable_gen(struct parser_params *parser, ID id)
+{
+    if (id == 288) {
+ return node_newnode(parser, (NODE_SELF), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+    }
+    else if (id == 289) {
+ return node_newnode(parser, (NODE_NIL), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+    }
+    else if (id == 290) {
+ return node_newnode(parser, (NODE_TRUE), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+    }
+    else if (id == 291) {
+ return node_newnode(parser, (NODE_FALSE), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+    }
+    else if (id == 305) {
+ return node_newnode(parser, (NODE_STR), (VALUE)(rb_external_str_new_with_enc((parser->parser_ruby_sourcefile), strlen((parser->parser_ruby_sourcefile)), rb_filesystem_encoding())), (VALUE)(0), (VALUE)(0));
+    }
+    else if (id == 304) {
+ return node_newnode(parser, (NODE_LIT), (VALUE)(((VALUE)(((long)((parser->parser_ruby_sourceline)))<<1 | RUBY_FIXNUM_FLAG))), (VALUE)(0), (VALUE)(0));
+    }
+    else if (id == 306) {
+ return node_newnode(parser, (NODE_LIT), (VALUE)(rb_enc_from_encoding(parser->enc)), (VALUE)(0), (VALUE)(0));
+    }
+    else if ((((id)>376)&&((id)&0x07)==0x00)) {
+ if (dyna_in_block_gen(parser) && dvar_defined_gen(parser, id)) return node_newnode(parser, (NODE_DVAR), (VALUE)(id), (VALUE)(0), (VALUE)(0));
+ if (local_id_gen(parser, id)) return node_newnode(parser, (NODE_LVAR), (VALUE)(id), (VALUE)(0), (VALUE)(0));
+ return node_newnode(parser, (NODE_VCALL), (VALUE)(0), (VALUE)(id), (VALUE)(0));
+    }
+    else if ((((id)>376)&&((id)&0x07)==0x03)) {
+ return node_newnode(parser, (NODE_GVAR), (VALUE)(id), (VALUE)(0), (VALUE)(rb_global_entry(id)));
+    }
+    else if ((((id)>376)&&((id)&0x07)==0x01)) {
+ return node_newnode(parser, (NODE_IVAR), (VALUE)(id), (VALUE)(0), (VALUE)(0));
+    }
+    else if ((((id)>376)&&((id)&0x07)==0x05)) {
+ return node_newnode(parser, (NODE_CONST), (VALUE)(id), (VALUE)(0), (VALUE)(0));
+    }
+    else if ((((id)>376)&&((id)&0x07)==0x06)) {
+ return node_newnode(parser, (NODE_CVAR), (VALUE)(id), (VALUE)(0), (VALUE)(0));
+    }
+    parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "identifier %s is not valid to get", rb_id2name(id));
+    return 0;
+}
+static NODE*
+assignable_gen(struct parser_params *parser, ID id, NODE *val)
+{
+    if (!id) return 0;
+    if (id == 288) {
+ parser_yyerror(parser, "Can't change the value of self");
+    }
+    else if (id == 289) {
+ parser_yyerror(parser, "Can't assign to nil");
+    }
+    else if (id == 290) {
+ parser_yyerror(parser, "Can't assign to true");
+    }
+    else if (id == 291) {
+ parser_yyerror(parser, "Can't assign to false");
+    }
+    else if (id == 305) {
+ parser_yyerror(parser, "Can't assign to __FILE__");
+    }
+    else if (id == 304) {
+ parser_yyerror(parser, "Can't assign to __LINE__");
+    }
+    else if (id == 306) {
+ parser_yyerror(parser, "Can't assign to __ENCODING__");
+    }
+    else if ((((id)>376)&&((id)&0x07)==0x00)) {
+ if (dyna_in_block_gen(parser)) {
+     if (dvar_curr_gen(parser, id)) {
+  return node_newnode(parser, (NODE_DASGN_CURR), (VALUE)(id), (VALUE)(val), (VALUE)(0));
+     }
+     else if (dvar_defined_gen(parser, id)) {
+  return node_newnode(parser, (NODE_DASGN), (VALUE)(id), (VALUE)(val), (VALUE)(0));
+     }
+     else if (local_id_gen(parser, id)) {
+  return node_newnode(parser, (NODE_LASGN), (VALUE)(id), (VALUE)(val), (VALUE)(0));
+     }
+     else{
+  local_var_gen(parser, id);;
+  return node_newnode(parser, (NODE_DASGN_CURR), (VALUE)(id), (VALUE)(val), (VALUE)(0));
+     }
+ }
+ else {
+     if (!local_id_gen(parser, id)) {
+  local_var_gen(parser, id);;
+     }
+     return node_newnode(parser, (NODE_LASGN), (VALUE)(id), (VALUE)(val), (VALUE)(0));
+ }
+    }
+    else if ((((id)>376)&&((id)&0x07)==0x03)) {
+ return node_newnode(parser, (NODE_GASGN), (VALUE)(id), (VALUE)(val), (VALUE)(rb_global_entry(id)));
+    }
+    else if ((((id)>376)&&((id)&0x07)==0x01)) {
+ return node_newnode(parser, (NODE_IASGN), (VALUE)(id), (VALUE)(val), (VALUE)(0));
+    }
+    else if ((((id)>376)&&((id)&0x07)==0x05)) {
+ if ((parser->parser_in_def) || (parser->parser_in_single))
+     parser_yyerror(parser, "dynamic constant assignment");
+ return node_newnode(parser, (NODE_CDECL), (VALUE)(id), (VALUE)(val), (VALUE)(0));
+    }
+    else if ((((id)>376)&&((id)&0x07)==0x06)) {
+ return node_newnode(parser, (NODE_CVASGN), (VALUE)(id), (VALUE)(val), (VALUE)(0));
+    }
+    else {
+ parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "identifier %s is not valid to set", rb_id2name(id));
+    }
+    return 0;
+}
+static void
+shadowing_lvar_gen(struct parser_params *parser, ID name)
+{
+    ID uscore;
+    do { static ID rb_intern_id_cache; if (!rb_intern_id_cache) rb_intern_id_cache = rb_intern2("_", strlen("_")); uscore = rb_intern_id_cache; } while (0);
+    if (uscore == name) return;
+    if (dyna_in_block_gen(parser)) {
+ if (dvar_curr_gen(parser, name)) {
+     parser_yyerror(parser, "duplicated argument name");
+ }
+ else if (dvar_defined_gen(parser, name) || local_id_gen(parser, name)) {
+     rb_compile_warning((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "shadowing outer local variable - %s", rb_id2name(name));
+     vtable_add((parser->parser_lvtbl)->vars, name);
+ }
+    }
+    else {
+ if (local_id_gen(parser, name)) {
+     parser_yyerror(parser, "duplicated argument name");
+ }
+    }
+}
+static void
+new_bv_gen(struct parser_params *parser, ID name)
+{
+    if (!name) return;
+    if (!(((name)>376)&&((name)&0x07)==0x00)) {
+ parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "invalid local variable - %s",
+        rb_id2name(name));
+ return;
+    }
+    shadowing_lvar_gen(parser, name);
+    local_var_gen(parser, name);;
+}
+static NODE *
+aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
+{
+    if (recv && ((int) (((((struct RNode*)(recv)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_SELF)
+ recv = (NODE *)1;
+    return node_newnode(parser, (NODE_ATTRASGN), (VALUE)(recv), (VALUE)(337), (VALUE)(idx));
+}
+static void
+block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
+{
+    if (node2 && node1 && ((int) (((((struct RNode*)(node1)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_BLOCK_PASS) {
+ parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "both block arg and actual block given");
+    }
+}
+ID
+rb_id_attrset(ID id)
+{
+    id &= ~0x07;
+    id |= 0x04;
+    return id;
+}
+static NODE *
+attrset_gen(struct parser_params *parser, NODE *recv, ID id)
+{
+    if (recv && ((int) (((((struct RNode*)(recv)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_SELF)
+ recv = (NODE *)1;
+    return node_newnode(parser, (NODE_ATTRASGN), (VALUE)(recv), (VALUE)(rb_id_attrset(id)), (VALUE)(0));
+}
+static void
+rb_backref_error_gen(struct parser_params *parser, NODE *node)
+{
+    switch (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+      case NODE_NTH_REF:
+ parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "Can't set variable $%ld", node->u2.argc);
+ break;
+      case NODE_BACK_REF:
+ parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "Can't set variable $%c", (int)node->u2.argc);
+ break;
+    }
+}
+static NODE *
+arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
+{
+    if (!node2) return node1;
+    switch (((int) (((((struct RNode*)(node1)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+      case NODE_BLOCK_PASS:
+ node1->u3.node = arg_concat_gen(parser,node1->u3.node,node2);
+ return node1;
+      case NODE_ARGSPUSH:
+ if (((int) (((((struct RNode*)(node2)))->flags & (((VALUE)0x7f)<<8))>>8)) != NODE_ARRAY) break;
+ node1->u2.node = list_concat_gen(parser,node_newnode(parser, (NODE_ARRAY), (VALUE)(node1->u2.node), (VALUE)(1), (VALUE)(0)),node2);
+ ((struct RNode*)(node1))->flags=((((struct RNode*)(node1))->flags&~(((VALUE)0x7f)<<8))|(((NODE_ARGSCAT)<<8)&(((VALUE)0x7f)<<8)));
+ return node1;
+      case NODE_ARGSCAT:
+ if (((int) (((((struct RNode*)(node2)))->flags & (((VALUE)0x7f)<<8))>>8)) != NODE_ARRAY ||
+     ((int) (((((struct RNode*)(node1->u2.node)))->flags & (((VALUE)0x7f)<<8))>>8)) != NODE_ARRAY) break;
+ node1->u2.node = list_concat_gen(parser,node1->u2.node,node2);
+ return node1;
+    }
+    return node_newnode(parser, (NODE_ARGSCAT), (VALUE)(node1), (VALUE)(node2), (VALUE)(0));
+}
+static NODE *
+arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
+{
+    if (!node1) return node_newnode(parser, (NODE_ARRAY), (VALUE)(node2), (VALUE)(1), (VALUE)(0));
+    switch (((int) (((((struct RNode*)(node1)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+      case NODE_ARRAY:
+ return list_append_gen(parser,node1,node2);
+      case NODE_BLOCK_PASS:
+ node1->u1.node = arg_append_gen(parser,node1->u1.node,node2);
+ return node1;
+      case NODE_ARGSPUSH:
+ node1->u2.node = list_append_gen(parser,node_newnode(parser, (NODE_ARRAY), (VALUE)(node1->u2.node), (VALUE)(1), (VALUE)(0)),node2);
+ ((struct RNode*)(node1))->flags=((((struct RNode*)(node1))->flags&~(((VALUE)0x7f)<<8))|(((NODE_ARGSCAT)<<8)&(((VALUE)0x7f)<<8)));
+ return node1;
+    }
+    return node_newnode(parser, (NODE_ARGSPUSH), (VALUE)(node1), (VALUE)(node2), (VALUE)(0));
+}
+static NODE *
+splat_array(NODE* node)
+{
+    if (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_SPLAT) node = node->u1.node;
+    if (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_ARRAY) return node;
+    return 0;
+}
+static NODE *
+node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
+{
+    if (!lhs) return 0;
+    switch (((int) (((((struct RNode*)(lhs)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+      case NODE_GASGN:
+      case NODE_IASGN:
+      case NODE_IASGN2:
+      case NODE_LASGN:
+      case NODE_DASGN:
+      case NODE_DASGN_CURR:
+      case NODE_MASGN:
+      case NODE_CDECL:
+      case NODE_CVASGN:
+ lhs->u2.node = rhs;
+ break;
+      case NODE_ATTRASGN:
+      case NODE_CALL:
+ lhs->u3.node = arg_append_gen(parser,lhs->u3.node,rhs);
+ break;
+      default:
+ break;
+    }
+    return lhs;
+}
+static int
+value_expr_gen(struct parser_params *parser, NODE *node)
+{
+    int cond = 0;
+    if (!node) {
+ rb_compile_warning((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "empty expression");
+    }
+    while (node) {
+ switch (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+   case NODE_DEFN:
+   case NODE_DEFS:
+     parser_warning(parser, node, "void value expression");
+     return ((VALUE)RUBY_Qfalse);
+   case NODE_RETURN:
+   case NODE_BREAK:
+   case NODE_NEXT:
+   case NODE_REDO:
+   case NODE_RETRY:
+     if (!cond) parser_yyerror(parser, "void value expression");
+     return ((VALUE)RUBY_Qfalse);
+   case NODE_BLOCK:
+     while (node->u3.node) {
+  node = node->u3.node;
+     }
+     node = node->u1.node;
+     break;
+   case NODE_BEGIN:
+     node = node->u2.node;
+     break;
+   case NODE_IF:
+     if (!node->u2.node) {
+  node = node->u3.node;
+  break;
+     }
+     else if (!node->u3.node) {
+  node = node->u2.node;
+  break;
+     }
+     if (!value_expr_gen(parser, (node->u2.node) = remove_begin(node->u2.node))) return ((VALUE)RUBY_Qfalse);
+     node = node->u3.node;
+     break;
+   case NODE_AND:
+   case NODE_OR:
+     cond = 1;
+     node = node->u2.node;
+     break;
+   default:
+     return ((VALUE)RUBY_Qtrue);
+ }
+    }
+    return ((VALUE)RUBY_Qtrue);
+}
+static void
+void_expr_gen(struct parser_params *parser, NODE *node)
+{
+    const char *useless = 0;
+    if (!(((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) return;
+    if (!node) return;
+    switch (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+      case NODE_CALL:
+ switch (node->u2.id) {
+   case '+':
+   case '-':
+   case '*':
+   case '/':
+   case '%':
+   case 323:
+   case 321:
+   case 322:
+   case '|':
+   case '^':
+   case '&':
+   case 324:
+   case '>':
+   case 328:
+   case '<':
+   case 329:
+   case 325:
+   case 327:
+     useless = rb_id2name(node->u2.id);
+     break;
+ }
+ break;
+      case NODE_LVAR:
+      case NODE_DVAR:
+      case NODE_GVAR:
+      case NODE_IVAR:
+      case NODE_CVAR:
+      case NODE_NTH_REF:
+      case NODE_BACK_REF:
+ useless = "a variable";
+ break;
+      case NODE_CONST:
+ useless = "a constant";
+ break;
+      case NODE_LIT:
+      case NODE_STR:
+      case NODE_DSTR:
+      case NODE_DREGX:
+      case NODE_DREGX_ONCE:
+ useless = "a literal";
+ break;
+      case NODE_COLON2:
+      case NODE_COLON3:
+ useless = "::";
+ break;
+      case NODE_DOT2:
+ useless = "..";
+ break;
+      case NODE_DOT3:
+ useless = "...";
+ break;
+      case NODE_SELF:
+ useless = "self";
+ break;
+      case NODE_NIL:
+ useless = "nil";
+ break;
+      case NODE_TRUE:
+ useless = "true";
+ break;
+      case NODE_FALSE:
+ useless = "false";
+ break;
+      case NODE_DEFINED:
+ useless = "defined?";
+ break;
+    }
+    if (useless) {
+ int line = (parser->parser_ruby_sourceline);
+ (parser->parser_ruby_sourceline) = ((VALUE)(((((struct RNode*)(node)))->flags>>(8 +7))&(((long)1<<(sizeof(VALUE)*8 -(8 +7)))-1)));
+ rb_compile_warn((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "useless use of %s in void context", useless);
+ (parser->parser_ruby_sourceline) = line;
+    }
+}
+static void
+void_stmts_gen(struct parser_params *parser, NODE *node)
+{
+    if (!(((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0)) return;
+    if (!node) return;
+    if (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8)) != NODE_BLOCK) return;
+    for (;;) {
+ if (!node->u3.node) return;
+ void_expr_gen(parser, (node->u1.node));
+ node = node->u3.node;
+    }
+}
+static NODE *
+remove_begin(NODE *node)
+{
+    NODE **n = &node, *n1 = node;
+    while (n1 && ((int) (((((struct RNode*)(n1)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_BEGIN && n1->u2.node) {
+ *n = n1 = n1->u2.node;
+    }
+    return node;
+}
+static void
+reduce_nodes_gen(struct parser_params *parser, NODE **body)
+{
+    NODE *node = *body;
+    if (!node) {
+ *body = node_newnode(parser, (NODE_NIL), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+ return;
+    }
+    while (node) {
+ switch (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+   end:
+   case NODE_NIL:
+     *body = 0;
+     return;
+   case NODE_RETURN:
+     *body = node = node->u1.node;
+     continue;
+   case NODE_BEGIN:
+     *body = node = node->u2.node;
+     continue;
+   case NODE_BLOCK:
+     body = &node->u2.node->u1.node;
+     break;
+   case NODE_IF:
+     if (((!node->u2.node) ? (node->u3.node ? (body = &node->u3.node, 1) : 0) : (!node->u3.node) ? (body = &node->u2.node, 1) : (reduce_nodes_gen(parser,&node->u2.node), body = &node->u3.node, 1))) break;
+     return;
+   case NODE_CASE:
+     body = &node->u2.node;
+     break;
+   case NODE_WHEN:
+     if (!((!node->u2.node) ? (node->u3.node ? (body = &node->u3.node, 1) : 0) : (!node->u3.node) ? (body = &node->u2.node, 1) : (reduce_nodes_gen(parser,&node->u2.node), body = &node->u3.node, 1))) goto end;
+     break;
+   case NODE_ENSURE:
+     if (!((!node->u1.node) ? (node->u2.node ? (body = &node->u2.node, 1) : 0) : (!node->u2.node) ? (body = &node->u1.node, 1) : (reduce_nodes_gen(parser,&node->u1.node), body = &node->u2.node, 1))) goto end;
+     break;
+   case NODE_RESCUE:
+     if (!((!node->u1.node) ? (node->u2.node ? (body = &node->u2.node, 1) : 0) : (!node->u2.node) ? (body = &node->u1.node, 1) : (reduce_nodes_gen(parser,&node->u1.node), body = &node->u2.node, 1))) goto end;
+     break;
+   default:
+     return;
+ }
+ node = *body;
+    }
+}
+static int
+assign_in_cond(struct parser_params *parser, NODE *node)
+{
+    switch (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+      case NODE_MASGN:
+ parser_yyerror(parser, "multiple assignment in conditional");
+ return 1;
+      case NODE_LASGN:
+      case NODE_DASGN:
+      case NODE_GASGN:
+      case NODE_IASGN:
+ break;
+      default:
+ return 0;
+    }
+    switch (((int) (((((struct RNode*)(node->u2.node)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+      case NODE_LIT:
+      case NODE_STR:
+      case NODE_NIL:
+      case NODE_TRUE:
+      case NODE_FALSE:
+ parser_warn(parser, node->u2.node, "found = in conditional, should be ==");
+ return 1;
+      case NODE_DSTR:
+      case NODE_XSTR:
+      case NODE_DXSTR:
+      case NODE_EVSTR:
+      case NODE_DREGX:
+      default:
+ break;
+    }
+    return 1;
+}
+static void
+warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
+{
+    if (!e_option_supplied(parser)) parser_warn(parser, node, str);
+}
+static void
+warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
+{
+    if (!e_option_supplied(parser)) parser_warning(parser, node, str);
+}
+static void
+fixup_nodes(NODE **rootnode)
+{
+    NODE *node, *next, *head;
+    for (node = *rootnode; node; node = next) {
+ enum node_type type;
+ VALUE val;
+ next = node->u3.node;
+ head = node->u1.node;
+ rb_gc_force_recycle((VALUE)node);
+ *rootnode = next;
+ switch (type = ((int) (((((struct RNode*)(head)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+   case NODE_DOT2:
+   case NODE_DOT3:
+     val = rb_range_new(head->u1.node->u1.value, head->u2.node->u1.value,
+          type == NODE_DOT3 ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse));
+     rb_gc_force_recycle((VALUE)head->u1.node);
+     rb_gc_force_recycle((VALUE)head->u2.node);
+     ((struct RNode*)(head))->flags=((((struct RNode*)(head))->flags&~(((VALUE)0x7f)<<8))|(((NODE_LIT)<<8)&(((VALUE)0x7f)<<8)));
+     head->u1.value = val;
+     break;
+   default:
+     break;
+ }
+    }
+}
+static NODE *cond0(struct parser_params*,NODE*);
+static NODE*
+range_op(struct parser_params *parser, NODE *node)
+{
+    enum node_type type;
+    if (node == 0) return 0;
+    type = ((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8));
+    value_expr_gen(parser, (node) = remove_begin(node));
+    if (type == NODE_LIT && (((long)(node->u1.value))&RUBY_FIXNUM_FLAG)) {
+ warn_unless_e_option(parser, node, "integer literal in conditional range");
+ return node_newnode(parser, (NODE_CALL), (VALUE)(node), (VALUE)(325), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)(node_newnode(parser, (NODE_GVAR), (VALUE)((__builtin_constant_p("$.") ? __extension__ (rb_intern2("$.", strlen("$."))) : (rb_intern)("$."))), (VALUE)(0), (VALUE)(rb_global_entry((__builtin_constant_p("$.") ? __extension__ (rb_intern2("$.", strlen("$."))) : (rb_intern)("$.")))))), (VALUE)(1), (VALUE)(0))));
+    }
+    return cond0(parser, node);
+}
+static int
+literal_node(NODE *node)
+{
+    if (!node) return 1;
+    switch (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+      case NODE_LIT:
+      case NODE_STR:
+      case NODE_DSTR:
+      case NODE_EVSTR:
+      case NODE_DREGX:
+      case NODE_DREGX_ONCE:
+      case NODE_DSYM:
+ return 2;
+      case NODE_TRUE:
+      case NODE_FALSE:
+      case NODE_NIL:
+ return 1;
+    }
+    return 0;
+}
+static NODE*
+cond0(struct parser_params *parser, NODE *node)
+{
+    if (node == 0) return 0;
+    assign_in_cond(parser, node);
+    switch (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8))) {
+      case NODE_DSTR:
+      case NODE_EVSTR:
+      case NODE_STR:
+ rb_compile_warn((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "string literal in condition");
+ break;
+      case NODE_DREGX:
+      case NODE_DREGX_ONCE:
+ warning_unless_e_option(parser, node, "regex literal in condition");
+ return node_newnode(parser, (NODE_MATCH2), (VALUE)(node), (VALUE)(node_newnode(parser, (NODE_GVAR), (VALUE)((__builtin_constant_p("$_") ? __extension__ (rb_intern2("$_", strlen("$_"))) : (rb_intern)("$_"))), (VALUE)(0), (VALUE)(rb_global_entry((__builtin_constant_p("$_") ? __extension__ (rb_intern2("$_", strlen("$_"))) : (rb_intern)("$_")))))), (VALUE)(0));
+      case NODE_AND:
+      case NODE_OR:
+ node->u1.node = cond0(parser, node->u1.node);
+ node->u2.node = cond0(parser, node->u2.node);
+ break;
+      case NODE_DOT2:
+      case NODE_DOT3:
+ node->u1.node = range_op(parser, node->u1.node);
+ node->u2.node = range_op(parser, node->u2.node);
+ if (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_DOT2) ((struct RNode*)(node))->flags=((((struct RNode*)(node))->flags&~(((VALUE)0x7f)<<8))|(((NODE_FLIP2)<<8)&(((VALUE)0x7f)<<8)));
+ else if (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_DOT3) ((struct RNode*)(node))->flags=((((struct RNode*)(node))->flags&~(((VALUE)0x7f)<<8))|(((NODE_FLIP3)<<8)&(((VALUE)0x7f)<<8)));
+ if (!e_option_supplied(parser)) {
+     int b = literal_node(node->u1.node);
+     int e = literal_node(node->u2.node);
+     if ((b == 1 && e == 1) || (b + e >= 2 && (((VALUE)((*rb_ruby_verbose_ptr())) & ~((VALUE)RUBY_Qnil)) != 0))) {
+  parser_warn(parser, node, "range literal in condition");
+     }
+ }
+ break;
+      case NODE_DSYM:
+ parser_warning(parser, node, "literal in condition");
+ break;
+      case NODE_LIT:
+ if (rb_type((VALUE)(node->u1.value)) == RUBY_T_REGEXP) {
+     warn_unless_e_option(parser, node, "regex literal in condition");
+     ((struct RNode*)(node))->flags=((((struct RNode*)(node))->flags&~(((VALUE)0x7f)<<8))|(((NODE_MATCH)<<8)&(((VALUE)0x7f)<<8)));
+ }
+ else {
+     parser_warning(parser, node, "literal in condition");
+ }
+      default:
+ break;
+    }
+    return node;
+}
+static NODE*
+cond_gen(struct parser_params *parser, NODE *node)
+{
+    if (node == 0) return 0;
+    return cond0(parser, node);
+}
+static NODE*
+logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
+{
+    value_expr_gen(parser, (left) = remove_begin(left));
+    if (left && ((int) (((((struct RNode*)(left)))->flags & (((VALUE)0x7f)<<8))>>8)) == type) {
+ NODE *node = left, *second;
+ while ((second = node->u2.node) != 0 && ((int) (((((struct RNode*)(second)))->flags & (((VALUE)0x7f)<<8))>>8)) == type) {
+     node = second;
+ }
+ node->u2.node = node_newnode(parser, (type), (VALUE)(second), (VALUE)(right), (VALUE)(0));
+ return left;
+    }
+    return node_newnode(parser, (type), (VALUE)(left), (VALUE)(right), (VALUE)(0));
+}
+static void
+no_blockarg(struct parser_params *parser, NODE *node)
+{
+    if (node && ((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_BLOCK_PASS) {
+ parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "block argument should not be given");
+    }
+}
+static NODE *
+ret_args_gen(struct parser_params *parser, NODE *node)
+{
+    if (node) {
+ no_blockarg(parser, node);
+ if (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_ARRAY) {
+     if (node->u3.node == 0) {
+  node = node->u1.node;
+     }
+     else {
+  ((struct RNode*)(node))->flags=((((struct RNode*)(node))->flags&~(((VALUE)0x7f)<<8))|(((NODE_VALUES)<<8)&(((VALUE)0x7f)<<8)));
+     }
+ }
+    }
+    return node;
+}
+static NODE *
+new_yield_gen(struct parser_params *parser, NODE *node)
+{
+    long state = ((VALUE)RUBY_Qtrue);
+    if (node) {
+        no_blockarg(parser, node);
+ if (node && ((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_SPLAT) {
+     state = ((VALUE)RUBY_Qtrue);
+ }
+    }
+    else {
+        state = ((VALUE)RUBY_Qfalse);
+    }
+    return node_newnode(parser, (NODE_YIELD), (VALUE)(node), (VALUE)(0), (VALUE)(state));
+}
+static NODE*
+negate_lit(NODE *node)
+{
+    switch (rb_type((VALUE)(node->u1.value))) {
+      case RUBY_T_FIXNUM:
+ node->u1.value = ((VALUE)(((long)(-(((long)node->u1.value)>>(int)1)))<<1 | RUBY_FIXNUM_FLAG));
+ break;
+      case RUBY_T_BIGNUM:
+ node->u1.value = rb_funcall(node->u1.value,322,0,0);
+ break;
+      case RUBY_T_FLOAT:
+ ((struct RFloat*)(node->u1.value))->float_value = -(((struct RFloat*)(node->u1.value))->float_value);
+ break;
+      default:
+ break;
+    }
+    return node;
+}
+static NODE *
+arg_blk_pass(NODE *node1, NODE *node2)
+{
+    if (node2) {
+ node2->u1.node = node1;
+ return node2;
+    }
+    return node1;
+}
+static NODE*
+new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
+{
+    int saved_line = (parser->parser_ruby_sourceline);
+    NODE *node;
+    NODE *i1, *i2 = 0;
+    node = node_newnode(parser, (NODE_ARGS), (VALUE)(o), (VALUE)(m ? m->u2.argc : 0), (VALUE)(0));
+    i1 = m ? m->u3.node : 0;
+    node->u3.node = node_newnode(parser, (NODE_ARGS_AUX), (VALUE)(r), (VALUE)(b), (VALUE)(0));
+    if (p) {
+ i2 = p->u3.node;
+ node->u3.node->u3.node = node_newnode(parser, (NODE_ARGS_AUX), (VALUE)(p->u1.id), (VALUE)(p->u2.argc), (VALUE)(0));
+    }
+    else if (i1) {
+ node->u3.node->u3.node = node_newnode(parser, (NODE_ARGS_AUX), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+    }
+    if (i1 || i2) {
+ node->u3.node->u3.node->u3.node = node_newnode(parser, (NODE_AND), (VALUE)(i1), (VALUE)(i2), (VALUE)(0));
+    }
+    (parser->parser_ruby_sourceline) = saved_line;
+    return node;
+}
+static void
+local_push_gen(struct parser_params *parser, int inherit_dvars)
+{
+    struct local_vars *local;
+    local = (struct local_vars*)ruby_xmalloc(sizeof(struct local_vars));
+    local->prev = (parser->parser_lvtbl);
+    local->args = vtable_alloc(0);
+    local->vars = vtable_alloc(inherit_dvars ? ((void*)1) : ((void *)0));
+    (parser->parser_lvtbl) = local;
+}
+static void
+local_pop_gen(struct parser_params *parser)
+{
+    struct local_vars *local = (parser->parser_lvtbl)->prev;
+    vtable_free((parser->parser_lvtbl)->args);
+    vtable_free((parser->parser_lvtbl)->vars);
+    ruby_xfree((parser->parser_lvtbl));
+    (parser->parser_lvtbl) = local;
+}
+static ID*
+vtable_tblcpy(ID *buf, const struct vtable *src)
+{
+    int i, cnt = vtable_size(src);
+    if (cnt > 0) {
+        buf[0] = cnt;
+        for (i = 0; i < cnt; i++) {
+            buf[i] = src->tbl[i];
+        }
+        return buf;
+    }
+    return 0;
+}
+static ID*
+local_tbl_gen(struct parser_params *parser)
+{
+    int cnt = vtable_size((parser->parser_lvtbl)->args) + vtable_size((parser->parser_lvtbl)->vars);
+    ID *buf;
+    if (cnt <= 0) return 0;
+    buf = (ID*)ruby_xmalloc2((cnt + 1),sizeof(ID));
+    vtable_tblcpy(buf+1, (parser->parser_lvtbl)->args);
+    vtable_tblcpy(buf+vtable_size((parser->parser_lvtbl)->args)+1, (parser->parser_lvtbl)->vars);
+    buf[0] = cnt;
+    return buf;
+}
+static int
+arg_var_gen(struct parser_params *parser, ID id)
+{
+    vtable_add((parser->parser_lvtbl)->args, id);
+    return vtable_size((parser->parser_lvtbl)->args) - 1;
+}
+static int
+local_var_gen(struct parser_params *parser, ID id)
+{
+    vtable_add((parser->parser_lvtbl)->vars, id);
+    return vtable_size((parser->parser_lvtbl)->vars) - 1;
+}
+static int
+local_id_gen(struct parser_params *parser, ID id)
+{
+    struct vtable *vars, *args;
+    vars = (parser->parser_lvtbl)->vars;
+    args = (parser->parser_lvtbl)->args;
+    while (vars && ((VALUE)(vars->prev) & ~(VALUE)3)) {
+ vars = vars->prev;
+ args = args->prev;
+    }
+    if (vars && vars->prev == ((void*)1)) {
+ return rb_local_defined(id);
+    }
+    else {
+ return (vtable_included(args, id) ||
+  vtable_included(vars, id));
+    }
+}
+static void
+dyna_push_gen(struct parser_params *parser)
+{
+    (parser->parser_lvtbl)->args = vtable_alloc((parser->parser_lvtbl)->args);
+    (parser->parser_lvtbl)->vars = vtable_alloc((parser->parser_lvtbl)->vars);
+}
+static void
+dyna_pop_gen(struct parser_params *parser)
+{
+    struct vtable *tmp;
+    tmp = (parser->parser_lvtbl)->args;
+    (parser->parser_lvtbl)->args = (parser->parser_lvtbl)->args->prev;
+    vtable_free(tmp);
+    tmp = (parser->parser_lvtbl)->vars;
+    (parser->parser_lvtbl)->vars = (parser->parser_lvtbl)->vars->prev;
+    vtable_free(tmp);
+}
+static int
+dyna_in_block_gen(struct parser_params *parser)
+{
+    return ((VALUE)((parser->parser_lvtbl)->vars) & ~(VALUE)3) && (parser->parser_lvtbl)->vars->prev != ((void *)0);
+}
+static int
+dvar_defined_gen(struct parser_params *parser, ID id)
+{
+    struct vtable *vars, *args;
+    args = (parser->parser_lvtbl)->args;
+    vars = (parser->parser_lvtbl)->vars;
+    while (((VALUE)(vars) & ~(VALUE)3)) {
+ if (vtable_included(args, id)) {
+     return 1;
+ }
+ if (vtable_included(vars, id)) {
+     return 1;
+ }
+ args = args->prev;
+ vars = vars->prev;
+    }
+    if (vars == ((void*)1)) {
+        return rb_dvar_defined(id);
+    }
+    return 0;
+}
+static int
+dvar_curr_gen(struct parser_params *parser, ID id)
+{
+    return (vtable_included((parser->parser_lvtbl)->args, id) ||
+     vtable_included((parser->parser_lvtbl)->vars, id));
+}
+VALUE rb_reg_compile(VALUE str, int options);
+VALUE rb_reg_check_preprocess(VALUE);
+static void
+reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
+{
+    int c = (((options)>>8)&0xff);
+    if (c) {
+ int opt, idx;
+ rb_char_to_option_kcode(c, &opt, &idx);
+ if (idx != (((((struct RBasic*)(str))->flags & (1023<<(12 +10)))>>(12 +10)) != 1023 ? ((((struct RBasic*)(str))->flags & (1023<<(12 +10)))>>(12 +10)) : rb_enc_get_index(str)) &&
+     rb_enc_str_coderange(str) != (((VALUE)1)<<(12 +8))) {
+            goto error;
+ }
+ do { VALUE rb_encoding_set_obj = (str); int encoding_set_enc_index = (idx); if (encoding_set_enc_index < 1023) do { ((struct RBasic*)(rb_encoding_set_obj))->flags &= ~(1023<<(12 +10)); ((struct RBasic*)(rb_encoding_set_obj))->flags |= (encoding_set_enc_index) << (12 +10);} while (0); else rb_enc_set_index(rb_encoding_set_obj, encoding_set_enc_index); } while (0);
+    }
+    else if (((options)&32)) {
+        if (!(((((struct RBasic*)(str))->flags & (1023<<(12 +10)))>>(12 +10)) == 0) &&
+            rb_enc_str_coderange(str) != (((VALUE)1)<<(12 +8))) {
+            c = 'n';
+            goto error;
+        }
+ rb_enc_associate(str, rb_ascii8bit_encoding());
+    }
+    else if (parser->enc == rb_usascii_encoding()) {
+ if (rb_enc_str_coderange(str) != (((VALUE)1)<<(12 +8))) {
+     rb_enc_associate(str, rb_usascii_encoding());
+ }
+ else {
+     rb_enc_associate(str, rb_ascii8bit_encoding());
+ }
+    }
+    return;
+  error:
+    parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline),
+        "regexp encoding option '%c' differs from source encoding '%s'",
+        c, (rb_enc_get(str))->name);
+}
+static void
+reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
+{
+    VALUE err;
+    reg_fragment_setenc_gen(parser, str, options);
+    err = rb_reg_check_preprocess(str);
+    if (err != ((VALUE)RUBY_Qnil)) {
+        err = rb_obj_as_string(err);
+        parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "%s", (!(((struct RBasic*)(err))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(err))->as.ary : ((struct RString*)(err))->as.heap.ptr));
+ (*(volatile VALUE *)&(err));
+    }
+}
+typedef struct {
+    struct parser_params* parser;
+    rb_encoding *enc;
+    NODE *succ_block;
+    NODE *fail_block;
+    int num;
+} reg_named_capture_assign_t;
+static int
+reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
+          int back_num, int *back_refs, OnigRegex regex, void *arg0)
+{
+    reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
+    struct parser_params* parser = arg->parser;
+    rb_encoding *enc = arg->enc;
+    int len = name_end - name;
+    const char *s = (const char *)name;
+    ID var;
+    arg->num++;
+    if (arg->succ_block == 0) {
+        arg->succ_block = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+        arg->fail_block = node_newnode(parser, (NODE_BEGIN), (VALUE)(0), (VALUE)(0), (VALUE)(0));
+    }
+    if (!len || (*name != '_' && ((unsigned long)((unsigned char)(*name)) < 128) && !(enc)->is_code_ctype(*name,6,enc)) ||
+ rb_reserved_word(s, len) || !rb_enc_symname2_p(s, len, enc)) {
+        return ST_CONTINUE;
+    }
+    var = rb_intern3(s, len, enc);
+    if (dvar_defined_gen(parser, var) || local_id_gen(parser, var)) {
+        rb_compile_warning((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "named capture conflicts a local variable - %s", rb_id2name(var));
+    }
+    arg->succ_block = block_append_gen(parser,arg->succ_block,newline_node(node_assign_gen(parser, assignable_gen(parser, var, 0), node_newnode(parser, (NODE_CALL), (VALUE)(gettable_gen(parser,(__builtin_constant_p("$~") ? __extension__ (rb_intern2("$~", strlen("$~"))) : (rb_intern)("$~")))), (VALUE)(idAREF), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)(node_newnode(parser, (NODE_LIT), (VALUE)((((VALUE)(var)<<RUBY_SPECIAL_SHIFT)|RUBY_SYMBOL_FLAG)), (VALUE)(0), (VALUE)(0))), (VALUE)(1), (VALUE)(0)))))));
+    arg->fail_block = block_append_gen(parser,arg->fail_block,newline_node(node_assign_gen(parser, assignable_gen(parser, var, 0), node_newnode(parser, (NODE_LIT), (VALUE)(((VALUE)RUBY_Qnil)), (VALUE)(0), (VALUE)(0)))));
+    return ST_CONTINUE;
+}
+static NODE *
+reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
+{
+    reg_named_capture_assign_t arg;
+    arg.parser = parser;
+    arg.enc = rb_enc_get(regexp);
+    arg.succ_block = 0;
+    arg.fail_block = 0;
+    arg.num = 0;
+    onig_foreach_name(((struct RRegexp*)(regexp))->ptr, reg_named_capture_assign_iter, (void*)&arg);
+    if (arg.num == 0)
+        return match;
+    return
+        block_append_gen(parser,newline_node(match),node_newnode(parser, (NODE_IF), (VALUE)(gettable_gen(parser,(__builtin_constant_p("$~") ? __extension__ (rb_intern2("$~", strlen("$~"))) : (rb_intern)("$~")))), (VALUE)(block_append_gen(parser,newline_node(arg.succ_block),newline_node( node_newnode(parser, (NODE_CALL), (VALUE)(gettable_gen(parser,(__builtin_constant_p("$~") ? __extension__ (rb_intern2("$~", strlen("$~"))) : (rb_intern)("$~")))), (VALUE)((__builtin_constant_p("begin") ? __extension__ (rb_intern2("begin", strlen("begin"))) : (rb_intern)("begin"))), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)(node_newnode(parser, (NODE_LIT), (VALUE)(((VALUE)(((long)(0))<<1 | RUBY_FIXNUM_FLAG))), (VALUE)(0), (VALUE)(0))), (VALUE)(1), (VALUE)(0))))))), (VALUE)(block_append_gen(parser,newline_node(arg.fail_block),newline_node( node_newnode(parser, (NODE_LIT), (VALUE)(((VALUE)RUBY_Qnil)), (VALUE)(0), (VALUE)(0)))))));
+}
+static VALUE
+reg_compile_gen(struct parser_params* parser, VALUE str, int options)
+{
+    VALUE re;
+    VALUE err;
+    reg_fragment_setenc_gen(parser, str, options);
+    err = rb_errinfo();
+    re = rb_reg_compile(str, options & 0xff);
+    if (((VALUE)(re) == ((VALUE)RUBY_Qnil))) {
+ ID mesg = (__builtin_constant_p("mesg") ? __extension__ (rb_intern2("mesg", strlen("mesg"))) : (rb_intern)("mesg"));
+ VALUE m = rb_attr_get(rb_errinfo(), mesg);
+ rb_set_errinfo(err);
+ if (!((VALUE)(err) == ((VALUE)RUBY_Qnil))) {
+     rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
+ }
+ else {
+     parser->nerr++,rb_compile_error((parser->parser_ruby_sourcefile), (parser->parser_ruby_sourceline), "%s", (!(((struct RBasic*)(m))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(m))->as.ary : ((struct RString*)(m))->as.heap.ptr));
+ }
+ return ((VALUE)RUBY_Qnil);
+    }
+    return re;
+}
+void
+rb_gc_mark_parser(void)
+{
+}
+NODE*
+rb_parser_append_print(VALUE vparser, NODE *node)
+{
+    NODE *prelude = 0;
+    NODE *scope = node;
+    struct parser_params *parser;
+    if (!node) return node;
+    do { rb_check_type((VALUE)(vparser),RUBY_T_DATA); parser = (struct parser_params*)(((struct RData*)(vparser))->data);} while (0);
+    node = node->u2.node;
+    if (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_PRELUDE) {
+ prelude = node;
+ node = node->u2.node;
+    }
+    node = block_append_gen(parser,node,node_newnode(parser, (NODE_FCALL), (VALUE)(0), (VALUE)((__builtin_constant_p("print") ? __extension__ (rb_intern2("print", strlen("print"))) : (rb_intern)("print"))), (VALUE)(node_newnode(parser, (NODE_ARRAY), (VALUE)(node_newnode(parser, (NODE_GVAR), (VALUE)((__builtin_constant_p("$_") ? __extension__ (rb_intern2("$_", strlen("$_"))) : (rb_intern)("$_"))), (VALUE)(0), (VALUE)(rb_global_entry((__builtin_constant_p("$_") ? __extension__ (rb_intern2("$_", strlen("$_"))) : (rb_intern)("$_")))))), (VALUE)(1), (VALUE)(0)))));
+    if (prelude) {
+ prelude->u2.node = node;
+ scope->u2.node = prelude;
+    }
+    else {
+ scope->u2.node = node;
+    }
+    return scope;
+}
+NODE *
+rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
+{
+    NODE *prelude = 0;
+    NODE *scope = node;
+    struct parser_params *parser;
+    if (!node) return node;
+    do { rb_check_type((VALUE)(vparser),RUBY_T_DATA); parser = (struct parser_params*)(((struct RData*)(vparser))->data);} while (0);
+    node = node->u2.node;
+    if (((int) (((((struct RNode*)(node)))->flags & (((VALUE)0x7f)<<8))>>8)) == NODE_PRELUDE) {
+ prelude = node;
+ node = node->u2.node;
+    }
+    if (split) {
+ node = block_append_gen(parser,node_newnode(parser, (NODE_GASGN), (VALUE)((__builtin_constant_p("$F") ? __extension__ (rb_intern2("$F", strlen("$F"))) : (rb_intern)("$F"))), (VALUE)(node_newnode(parser, (NODE_CALL), (VALUE)(node_newnode(parser, (NODE_GVAR), (VALUE)((__builtin_constant_p("$_") ? __extension__ (rb_intern2("$_", strlen("$_"))) : (rb_intern)("$_"))), (VALUE)(0), (VALUE)(rb_global_entry((__builtin_constant_p("$_") ? __extension__ (rb_intern2("$_", strlen("$_"))) : (rb_intern)("$_")))))), (VALUE)((__builtin_constant_p("split") ? __extension__ (rb_intern2("split", strlen("split"))) : (rb_intern)("split"))), (VALUE)(0))), (VALUE)(rb_global_entry((__builtin_constant_p("$F") ? __extension__ (rb_intern2("$F", strlen("$F"))) : (rb_intern)("$F"))))),node);
+    }
+    if (chop) {
+ node = block_append_gen(parser,node_newnode(parser, (NODE_CALL), (VALUE)(node_newnode(parser, (NODE_GVAR), (VALUE)((__builtin_constant_p("$_") ? __extension__ (rb_intern2("$_", strlen("$_"))) : (rb_intern)("$_"))), (VALUE)(0), (VALUE)(rb_global_entry((__builtin_constant_p("$_") ? __extension__ (rb_intern2("$_", strlen("$_"))) : (rb_intern)("$_")))))), (VALUE)((__builtin_constant_p("chop!") ? __extension__ (rb_intern2("chop!", strlen("chop!"))) : (rb_intern)("chop!"))), (VALUE)(0)),node);
+    }
+    node = node_newnode(parser, (NODE_OPT_N), (VALUE)(0), (VALUE)(node), (VALUE)(0));
+    if (prelude) {
+ prelude->u2.node = node;
+ scope->u2.node = prelude;
+    }
+    else {
+ scope->u2.node = node;
+    }
+    return scope;
+}
+static const struct {
+    ID token;
+    const char *name;
+} op_tbl[] = {
+    {334, ".."},
+    {335, "..."},
+    {'+', "+(binary)"},
+    {'-', "-(binary)"},
+    {323, "**"},
+    {321, "+@"},
+    {322, "-@"},
+    {324, "<=>"},
+    {328, ">="},
+    {329, "<="},
+    {325, "=="},
+    {326, "==="},
+    {327, "!="},
+    {332, "=~"},
+    {333, "!~"},
+    {336, "[]"},
+    {337, "[]="},
+    {338, "<<"},
+    {339, ">>"},
+    {340, "::"},
+};
+static struct symbols {
+    ID last_id;
+    st_table *sym_id;
+    st_table *id_str;
+    st_table *ivar2_id;
+    st_table *id_ivar2;
+    VALUE op_sym[376];
+} global_symbols = {tLAST_ID};
+static const struct st_hash_type symhash = {
+    rb_str_hash_cmp,
+    rb_str_hash,
+};
+struct ivar2_key {
+    ID id;
+    VALUE klass;
+};
+static int
+ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
+{
+    if (key1->id == key2->id && key1->klass == key2->klass) {
+ return 0;
+    }
+    return 1;
+}
+static int
+ivar2_hash(struct ivar2_key *key)
+{
+    return (key->id << 8) ^ (key->klass >> 2);
+}
+static const struct st_hash_type ivar2_hash_type = {
+    ivar2_cmp,
+    ivar2_hash,
+};
+void
+Init_sym(void)
+{
+    global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
+    global_symbols.id_str = st_init_numtable_with_size(1000);
+    global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
+    global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
+    Init_id();
+}
+void
+rb_gc_mark_symbols(void)
+{
+    rb_mark_tbl(global_symbols.id_str);
+    rb_gc_mark_locations(global_symbols.op_sym,
+    global_symbols.op_sym + 376);
+}
+static ID
+internal_id_gen(struct parser_params *parser)
+{
+    ID id = (ID)vtable_size((parser->parser_lvtbl)->args) + (ID)vtable_size((parser->parser_lvtbl)->vars);
+    id += ((376 - 0x07) >> 3) + 1;
+    return 0x07 | (id << 3);
+}
+static int
+is_special_global_name(const char *m, const char *e, rb_encoding *enc)
+{
+    int mb = 0;
+    if (m >= e) return 0;
+    switch (*m) {
+      case '~': case '*': case '$': case '?': case '!': case '@':
+      case '/': case '\\': case ';': case ',': case '.': case '=':
+      case ':': case '<': case '>': case '\"':
+      case '&': case '`': case '\'': case '+':
+      case '0':
+ ++m;
+ break;
+      case '-':
+ ++m;
+ if (m < e && ((enc)->is_code_ctype(*m,13,enc) || (*m) == '_' || !((unsigned long)((unsigned char)(*m)) < 128))) {
+     if (!((unsigned long)((unsigned char)(*m)) < 128)) mb = 1;
+     m += rb_enc_mbclen(m, e, enc);
+ }
+ break;
+      default:
+ if (!(enc)->is_code_ctype(*m,4,enc)) return 0;
+ do {
+     if (!((unsigned long)((unsigned char)(*m)) < 128)) mb = 1;
+     ++m;
+ } while ((enc)->is_code_ctype(*m,4,enc));
+    }
+    return m == e ? mb + 1 : 0;
+}
+int
+rb_symname_p(const char *name)
+{
+    return rb_enc_symname_p(name, rb_ascii8bit_encoding());
+}
+int
+rb_enc_symname_p(const char *name, rb_encoding *enc)
+{
+    return rb_enc_symname2_p(name, strlen(name), enc);
+}
+int
+rb_enc_symname2_p(const char *name, int len, rb_encoding *enc)
+{
+    const char *m = name;
+    const char *e = m + len;
+    int localid = ((VALUE)RUBY_Qfalse);
+    if (!m) return ((VALUE)RUBY_Qfalse);
+    switch (*m) {
+      case '\0':
+ return ((VALUE)RUBY_Qfalse);
+      case '$':
+ if (is_special_global_name(++m, e, enc)) return ((VALUE)RUBY_Qtrue);
+ goto id;
+      case '@':
+ if (*++m == '@') ++m;
+ goto id;
+      case '<':
+ switch (*++m) {
+   case '<': ++m; break;
+   case '=': if (*++m == '>') ++m; break;
+   default: break;
+ }
+ break;
+      case '>':
+ switch (*++m) {
+   case '>': case '=': ++m; break;
+ }
+ break;
+      case '=':
+ switch (*++m) {
+   case '~': ++m; break;
+   case '=': if (*++m == '=') ++m; break;
+   default: return ((VALUE)RUBY_Qfalse);
+ }
+ break;
+      case '*':
+ if (*++m == '*') ++m;
+ break;
+      case '+': case '-':
+ if (*++m == '@') ++m;
+ break;
+      case '|': case '^': case '&': case '/': case '%': case '~': case '`':
+ ++m;
+ break;
+      case '[':
+ if (*++m != ']') return ((VALUE)RUBY_Qfalse);
+ if (*++m == '=') ++m;
+ break;
+      case '!':
+ switch (*++m) {
+   case '\0': return ((VALUE)RUBY_Qtrue);
+   case '=': case '~': ++m; break;
+   default: return ((VALUE)RUBY_Qfalse);
+ }
+ break;
+      default:
+ localid = !(enc)->is_code_ctype(*m,10,enc);
+      id:
+ if (m >= e || (*m != '_' && !(enc)->is_code_ctype(*m,1,enc) && ((unsigned long)((unsigned char)(*m)) < 128)))
+     return ((VALUE)RUBY_Qfalse);
+ while (m < e && ((enc)->is_code_ctype(*m,13,enc) || (*m) == '_' || !((unsigned long)((unsigned char)(*m)) < 128))) m += rb_enc_mbclen(m, e, enc);
+ if (localid) {
+     switch (*m) {
+       case '!': case '?': case '=': ++m;
+     }
+ }
+ break;
+    }
+    return *m ? ((VALUE)RUBY_Qfalse) : ((VALUE)RUBY_Qtrue);
+}
+static ID
+register_symid(ID id, const char *name, long len, rb_encoding *enc)
+{
+    VALUE str = rb_enc_str_new(name, len, enc);
+    do {if ((!(((VALUE)((str)) & RUBY_IMMEDIATE_MASK) || !(((VALUE)((str)) & ~((VALUE)RUBY_Qnil)) != 0)) && (((struct RBasic*)((str)))->flags & RUBY_T_MASK) != RUBY_T_NODE)) ((struct RBasic*)((str)))->flags |= ((((VALUE)1)<<11));} while (0);
+    st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
+    st_add_direct(global_symbols.id_str, id, (st_data_t)str);
+    return id;
+}
+ID
+rb_intern3(const char *name, long len, rb_encoding *enc)
+{
+    const char *m = name;
+    const char *e = m + len;
+    unsigned char c;
+    VALUE str;
+    ID id;
+    int last;
+    int mb;
+    struct RString fake_str;
+    fake_str.basic.flags = RUBY_T_STRING|(((VALUE)1)<<(12 +1))|(((VALUE)1)<<11);
+    fake_str.basic.klass = rb_cString;
+    fake_str.as.heap.len = len;
+    fake_str.as.heap.ptr = (char *)name;
+    fake_str.as.heap.aux.capa = len;
+    str = (VALUE)&fake_str;
+    rb_enc_associate(str, enc);
+    if (st_lookup(global_symbols.sym_id, str, (st_data_t *)&id))
+ return id;
+    if (rb_cString && !((enc)->min_enc_len==1 && !rb_enc_dummy_p(enc))) {
+ id = 0x07;
+ goto new_id;
+    }
+    last = len-1;
+    id = 0;
+    switch (*m) {
+      case '$':
+ id |= 0x03;
+ if ((mb = is_special_global_name(++m, e, enc)) != 0) {
+     if (!--mb) enc = rb_ascii8bit_encoding();
+     goto new_id;
+ }
+ break;
+      case '@':
+ if (m[1] == '@') {
+     m++;
+     id |= 0x06;
+ }
+ else {
+     id |= 0x01;
+ }
+ m++;
+ break;
+      default:
+ c = m[0];
+ if (c != '_' && ((c) < 128) && (enc)->is_code_ctype(c,8,enc)) {
+     int i;
+     if (len == 1) {
+  id = c;
+  goto id_register;
+     }
+     for (i = 0; i < (sizeof(op_tbl) / sizeof(op_tbl[0])); i++) {
+  if (*op_tbl[i].name == *m &&
+      __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (op_tbl[i].name) && __builtin_constant_p (m) && (__s1_len = strlen (op_tbl[i].name), __s2_len = strlen (m), (!((size_t)(const void *)((op_tbl[i].name) + 1) - (size_t)(const void *)(op_tbl[i].name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((m) + 1) - (size_t)(const void *)(m) == 1) || __s2_len >= 4)) ? __builtin_strcmp (op_tbl[i].name, m) : (__builtin_constant_p (op_tbl[i].name) && ((size_t)(const void *)((op_tbl[i].name) + 1) - (size_t)(const void *)(op_tbl[i].name) == 1) && (__s1_len = strlen (op_tbl[i].name), __s1_len < 4) ? (__builtin_constant_p (m) && ((size_t)(const void *)((m) + 1) - (size_t)(const void *)(m) == 1) ? __builtin_strcmp (op_tbl[i].name, m) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (m); register int __result = (((__const unsigned char *) (__const char *) (op_tbl[i].name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (op_tbl[i].name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (op_tbl[i].name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (op_tbl[i].name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (m) && ((size_t)(const void *)((m) + 1) - (size_t)(const void *)(m) == 1) && (__s2_len = strlen (m), __s2_len < 4) ? (__builtin_constant_p (op_tbl[i].name) && ((size_t)(const void *)((op_tbl[i].name) + 1) - (size_t)(const void *)(op_tbl[i].name) == 1) ? __builtin_strcmp (op_tbl[i].name, m) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (op_tbl[i].name); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (m))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (m))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (m))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (m))[3]); } } __result; }))) : __builtin_strcmp (op_tbl[i].name, m)))); }) == 0) {
+      id = op_tbl[i].token;
+      goto id_register;
+  }
+     }
+ }
+ if (m[last] == '=') {
+     id = rb_intern3(name, last, enc);
+     if (id > 376 && !(((id)>376)&&((id)&0x07)==0x04)) {
+  enc = rb_enc_get(rb_id2str(id));
+  id = rb_id_attrset(id);
+  goto id_register;
+     }
+     id = 0x04;
+ }
+ else if ((enc)->is_code_ctype(m[0],10,enc)) {
+     id = 0x05;
+        }
+ else {
+     id = 0x00;
+ }
+ break;
+    }
+    mb = 0;
+    if (!(enc)->is_code_ctype(*m,4,enc)) {
+ while (m <= name + last && ((enc)->is_code_ctype(*m,13,enc) || (*m) == '_' || !((unsigned long)((unsigned char)(*m)) < 128))) {
+     if (((unsigned long)((unsigned char)(*m)) < 128)) {
+  m++;
+     }
+     else {
+  mb = 1;
+  m += rb_enc_mbclen(m, e, enc);
+     }
+ }
+    }
+    if (m - name < len) id = 0x07;
+    if (enc != rb_usascii_encoding()) {
+ if (!mb) {
+     for (; m <= name + len; ++m) {
+  if (!((unsigned long)((unsigned char)(*m)) < 128)) goto mbstr;
+     }
+     enc = rb_usascii_encoding();
+ }
+      mbstr:;
+    }
+  new_id:
+    id |= ++global_symbols.last_id << 3;
+  id_register:
+    return register_symid(id, name, len, enc);
+}
+ID
+rb_intern2(const char *name, long len)
+{
+    return rb_intern3(name, len, rb_usascii_encoding());
+}
+ID
+rb_intern(const char *name)
+{
+    return rb_intern2(name, strlen(name));
+}
+ID
+rb_intern_str(VALUE str)
+{
+    rb_encoding *enc;
+    ID id;
+    if (rb_enc_str_coderange(str) == (((VALUE)1)<<(12 +8))) {
+ enc = rb_usascii_encoding();
+    }
+    else {
+ enc = rb_enc_get(str);
+    }
+    id = rb_intern3((!(((struct RBasic*)(str))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(str))->as.ary : ((struct RString*)(str))->as.heap.ptr), (!(((struct RBasic*)(str))->flags & (((VALUE)1)<<(12 +1))) ? (long)((((struct RBasic*)(str))->flags >> (12 +2)) & (((((VALUE)1)<<(12 +2))|(((VALUE)1)<<(12 +3))|(((VALUE)1)<<(12 +4))|(((VALUE)1)<<(12 +5))|(((VALUE)1)<<(12 +6))) >> (12 +2))) : ((struct RString*)(str))->as.heap.len), enc);
+    (*(volatile VALUE *)&(str));
+    return id;
+}
+VALUE
+rb_id2str(ID id)
+{
+    st_data_t data;
+    if (id < 376) {
+ int i = 0;
+ if (rb_ispunct(id)) {
+     VALUE str = global_symbols.op_sym[i = (int)id];
+     if (!str) {
+  char name[2];
+  name[0] = (char)id;
+  name[1] = 0;
+  str = rb_usascii_str_new(name, 1);
+  do {if ((!(((VALUE)((str)) & RUBY_IMMEDIATE_MASK) || !(((VALUE)((str)) & ~((VALUE)RUBY_Qnil)) != 0)) && (((struct RBasic*)((str)))->flags & RUBY_T_MASK) != RUBY_T_NODE)) ((struct RBasic*)((str)))->flags |= ((((VALUE)1)<<11));} while (0);
+  global_symbols.op_sym[i] = str;
+     }
+     return str;
+ }
+ for (i = 0; i < (sizeof(op_tbl) / sizeof(op_tbl[0])); i++) {
+     if (op_tbl[i].token == id) {
+  VALUE str = global_symbols.op_sym[i];
+  if (!str) {
+      str = __extension__ ( { (__builtin_constant_p(op_tbl[i].name)) ? rb_usascii_str_new(op_tbl[i].name, strlen(op_tbl[i].name)) : rb_usascii_str_new_cstr(op_tbl[i].name); });
+      do {if ((!(((VALUE)((str)) & RUBY_IMMEDIATE_MASK) || !(((VALUE)((str)) & ~((VALUE)RUBY_Qnil)) != 0)) && (((struct RBasic*)((str)))->flags & RUBY_T_MASK) != RUBY_T_NODE)) ((struct RBasic*)((str)))->flags |= ((((VALUE)1)<<11));} while (0);
+      global_symbols.op_sym[i] = str;
+  }
+  return str;
+     }
+ }
+    }
+    if (st_lookup(global_symbols.id_str, id, &data)) {
+        VALUE str = (VALUE)data;
+        if (((struct RBasic*)(str))->klass == 0)
+            ((struct RBasic*)(str))->klass = rb_cString;
+ return str;
+    }
+    if ((((id)>376)&&((id)&0x07)==0x04)) {
+ ID id2 = (id & ~0x07) | 0x00;
+ VALUE str;
+ while (!(str = rb_id2str(id2))) {
+     if (!(((id2)>376)&&((id2)&0x07)==0x00)) return 0;
+     id2 = (id & ~0x07) | 0x05;
+ }
+ str = rb_str_dup(str);
+ rb_str_cat(str, "=", 1);
+ rb_intern_str(str);
+ if (st_lookup(global_symbols.id_str, id, &data)) {
+            VALUE str = (VALUE)data;
+            if (((struct RBasic*)(str))->klass == 0)
+                ((struct RBasic*)(str))->klass = rb_cString;
+            return str;
+        }
+    }
+    return 0;
+}
+const char *
+rb_id2name(ID id)
+{
+    VALUE str = rb_id2str(id);
+    if (!str) return 0;
+    return (!(((struct RBasic*)(str))->flags & (((VALUE)1)<<(12 +1))) ? ((struct RString*)(str))->as.ary : ((struct RString*)(str))->as.heap.ptr);
+}
+static int
+symbols_i(VALUE sym, ID value, VALUE ary)
+{
+    rb_ary_push(ary, (((VALUE)(value)<<RUBY_SPECIAL_SHIFT)|RUBY_SYMBOL_FLAG));
+    return ST_CONTINUE;
+}
+VALUE
+rb_sym_all_symbols(void)
+{
+    VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
+    st_foreach(global_symbols.sym_id, symbols_i, ary);
+    return ary;
+}
+int
+rb_is_const_id(ID id)
+{
+    if ((((id)>376)&&((id)&0x07)==0x05)) return ((VALUE)RUBY_Qtrue);
+    return ((VALUE)RUBY_Qfalse);
+}
+int
+rb_is_class_id(ID id)
+{
+    if ((((id)>376)&&((id)&0x07)==0x06)) return ((VALUE)RUBY_Qtrue);
+    return ((VALUE)RUBY_Qfalse);
+}
+int
+rb_is_instance_id(ID id)
+{
+    if ((((id)>376)&&((id)&0x07)==0x01)) return ((VALUE)RUBY_Qtrue);
+    return ((VALUE)RUBY_Qfalse);
+}
+int
+rb_is_local_id(ID id)
+{
+    if ((((id)>376)&&((id)&0x07)==0x00)) return ((VALUE)RUBY_Qtrue);
+    return ((VALUE)RUBY_Qfalse);
+}
+int
+rb_is_junk_id(ID id)
+{
+    if ((((id)>376)&&((id)&0x07)==0x07)) return ((VALUE)RUBY_Qtrue);
+    return ((VALUE)RUBY_Qfalse);
+}
+static void
+parser_initialize(struct parser_params *parser)
+{
+    parser->eofp = ((VALUE)RUBY_Qfalse);
+    parser->parser_lex_strterm = 0;
+    parser->parser_cond_stack = 0;
+    parser->parser_cmdarg_stack = 0;
+    parser->parser_class_nest = 0;
+    parser->parser_paren_nest = 0;
+    parser->parser_lpar_beg = 0;
+    parser->parser_in_single = 0;
+    parser->parser_in_def = 0;
+    parser->parser_in_defined = 0;
+    parser->parser_compile_for_eval = 0;
+    parser->parser_cur_mid = 0;
+    parser->parser_tokenbuf = ((void *)0);
+    parser->parser_tokidx = 0;
+    parser->parser_toksiz = 0;
+    parser->parser_heredoc_end = 0;
+    parser->parser_command_start = ((VALUE)RUBY_Qtrue);
+    parser->parser_deferred_nodes = 0;
+    parser->parser_lex_pbeg = 0;
+    parser->parser_lex_p = 0;
+    parser->parser_lex_pend = 0;
+    parser->parser_lvtbl = 0;
+    parser->parser_ruby__end__seen = 0;
+    parser->parser_ruby_sourcefile = 0;
+    parser->is_ripper = 0;
+    parser->parser_eval_tree_begin = 0;
+    parser->parser_eval_tree = 0;
+    parser->heap = ((void *)0);
+    parser->enc = rb_usascii_encoding();
+}
+static void
+parser_mark(void *ptr)
+{
+    struct parser_params *p = (struct parser_params*)ptr;
+    rb_gc_mark((VALUE)p->parser_lex_strterm);
+    rb_gc_mark((VALUE)p->parser_deferred_nodes);
+    rb_gc_mark(p->parser_lex_input);
+    rb_gc_mark(p->parser_lex_lastline);
+    rb_gc_mark(p->parser_lex_nextline);
+    rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
+    rb_gc_mark((VALUE)p->parser_eval_tree) ;
+    rb_gc_mark(p->debug_lines);
+    rb_gc_mark((VALUE)p->heap);
+}
+static void
+parser_free(void *ptr)
+{
+    struct parser_params *p = (struct parser_params*)ptr;
+    struct local_vars *local, *prev;
+    if (p->parser_tokenbuf) {
+        ruby_xfree(p->parser_tokenbuf);
+    }
+    for (local = p->parser_lvtbl; local; local = prev) {
+ if (local->vars) ruby_xfree(local->vars);
+ prev = local->prev;
+ ruby_xfree(local);
+    }
+    ruby_xfree(p->parser_ruby_sourcefile);
+    ruby_xfree(p);
+}
+VALUE rb_parser_get_yydebug(VALUE);
+VALUE rb_parser_set_yydebug(VALUE, VALUE);
+static struct parser_params *
+parser_new(void)
+{
+    struct parser_params *p;
+    p = (struct parser_params*)ruby_xmalloc2((1),sizeof(struct parser_params));
+    memset((p), 0, sizeof(struct parser_params)*(1));
+    parser_initialize(p);
+    return p;
+}
+VALUE
+rb_parser_new(void)
+{
+    struct parser_params *p = parser_new();
+    return rb_data_object_alloc(0,p,(RUBY_DATA_FUNC)parser_mark,(RUBY_DATA_FUNC)parser_free);
+}
+VALUE
+rb_parser_end_seen_p(VALUE vparser)
+{
+    struct parser_params *parser;
+    do { rb_check_type((VALUE)(vparser),RUBY_T_DATA); parser = (struct parser_params*)(((struct RData*)(vparser))->data);} while (0);
+    return (parser->parser_ruby__end__seen) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse);
+}
+VALUE
+rb_parser_encoding(VALUE vparser)
+{
+    struct parser_params *parser;
+    do { rb_check_type((VALUE)(vparser),RUBY_T_DATA); parser = (struct parser_params*)(((struct RData*)(vparser))->data);} while (0);
+    return rb_enc_from_encoding(parser->enc);
+}
+VALUE
+rb_parser_get_yydebug(VALUE self)
+{
+    struct parser_params *parser;
+    do { rb_check_type((VALUE)(self),RUBY_T_DATA); parser = (struct parser_params*)(((struct RData*)(self))->data);} while (0);
+    return (parser->parser_yydebug) ? ((VALUE)RUBY_Qtrue) : ((VALUE)RUBY_Qfalse);
+}
+VALUE
+rb_parser_set_yydebug(VALUE self, VALUE flag)
+{
+    struct parser_params *parser;
+    do { rb_check_type((VALUE)(self),RUBY_T_DATA); parser = (struct parser_params*)(((struct RData*)(self))->data);} while (0);
+    (parser->parser_yydebug) = (((VALUE)(flag) & ~((VALUE)RUBY_Qnil)) != 0);
+    return flag;
+}
+void *
+rb_parser_malloc(struct parser_params *parser, size_t size)
+{
+    size_t cnt = ((1) * (size) / sizeof(YYSTYPE));
+    NODE *n = node_newnode(parser, NODE_ALLOCA, 0, (VALUE)parser->heap, 0);
+    void *ptr = ruby_xmalloc(size);
+    return ((parser->heap = (n))->u1.node = (ptr), (n)->u3.cnt = (cnt), (ptr));
+}
+void *
+rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
+{
+    size_t cnt = ((nelem) * (size) / sizeof(YYSTYPE));
+    NODE *n = node_newnode(parser, NODE_ALLOCA, 0, (VALUE)parser->heap, 0);
+    void *ptr = ruby_xcalloc(nelem, size);
+    return ((parser->heap = (n))->u1.node = (ptr), (n)->u3.cnt = (cnt), (ptr));
+}
+void *
+rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
+{
+    NODE *n;
+    size_t cnt = ((1) * (size) / sizeof(YYSTYPE));
+    if (ptr && (n = parser->heap) != ((void *)0)) {
+ do {
+     if (n->u1.node == ptr) {
+  n->u1.node = ptr = ruby_xrealloc(ptr, size);
+  if (n->u3.cnt) n->u3.cnt = cnt;
+  return ptr;
+     }
+ } while ((n = n->u2.node) != ((void *)0));
+    }
+    n = node_newnode(parser, NODE_ALLOCA, 0, (VALUE)parser->heap, 0);
+    ptr = ruby_xrealloc(ptr, size);
+    return ((parser->heap = (n))->u1.node = (ptr), (n)->u3.cnt = (cnt), (ptr));
+}
+void
+rb_parser_free(struct parser_params *parser, void *ptr)
+{
+    NODE **prev = &parser->heap, *n;
+    while ((n = *prev) != ((void *)0)) {
+ if (n->u1.node == ptr) {
+     *prev = n->u2.node;
+     rb_gc_force_recycle((VALUE)n);
+     break;
+ }
+ prev = &n->u2.node;
+    }
+    ruby_xfree(ptr);
+}