#ifndef lint /* static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; */ /* static char nhsccsid[] = "@(#)yaccpar 1.9.0-nh (NetHack) 12/03/2015"; */ #endif #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 #define YYSUBMINOR "0-nh" #define yyclearin (yychar=(-1)) #define yyerrok (yyerrflag=0) #define YYRECOVERING (yyerrflag!=0) #define YYPREFIX "yy" /* NetHack 3.6 lev_comp.y $NHDT-Date: 1455747019 2016/02/17 22:10:19 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.22 $ */ /* Copyright (c) 1989 by Jean-Christophe Collet */ /* NetHack may be freely redistributed. See license for details. */ /* * This file contains the Level Compiler code * It may handle special mazes & special room-levels */ /* In case we're using bison in AIX. This definition must be * placed before any other C-language construct in the file * excluding comments and preprocessor directives (thanks IBM * for this wonderful feature...). * * Note: some cpps barf on this 'undefined control' (#pragma). * Addition of the leading space seems to prevent barfage for now, * and AIX will still see the directive. */ #ifdef _AIX #pragma alloca /* keep leading space! */ #endif #define SPEC_LEV /* for USE_OLDARGS (sp_lev.h) */ #include "hack.h" #include "sp_lev.h" #define ERR (-1) /* many types of things are put in chars for transference to NetHack. * since some systems will use signed chars, limit everybody to the * same number for portability. */ #define MAX_OF_TYPE 128 #define MAX_NESTED_IFS 20 #define MAX_SWITCH_CASES 20 #define New(type) \ (type *) memset((genericptr_t) alloc(sizeof (type)), 0, sizeof (type)) #define NewTab(type, size) (type **) alloc(sizeof (type *) * size) #define Free(ptr) free((genericptr_t) ptr) extern void VDECL(lc_error, (const char *, ...)); extern void VDECL(lc_warning, (const char *, ...)); extern void FDECL(yyerror, (const char *)); extern void FDECL(yywarning, (const char *)); extern int NDECL(yylex); int NDECL(yyparse); extern int FDECL(get_floor_type, (CHAR_P)); extern int FDECL(get_room_type, (char *)); extern int FDECL(get_trap_type, (char *)); extern int FDECL(get_monster_id, (char *,CHAR_P)); extern int FDECL(get_object_id, (char *,CHAR_P)); extern boolean FDECL(check_monster_char, (CHAR_P)); extern boolean FDECL(check_object_char, (CHAR_P)); extern char FDECL(what_map_char, (CHAR_P)); extern void FDECL(scan_map, (char *, sp_lev *)); extern void FDECL(add_opcode, (sp_lev *, int, genericptr_t)); extern genericptr_t FDECL(get_last_opcode_data1, (sp_lev *, int)); extern genericptr_t FDECL(get_last_opcode_data2, (sp_lev *, int, int)); extern boolean FDECL(check_subrooms, (sp_lev *)); extern boolean FDECL(write_level_file, (char *,sp_lev *)); extern struct opvar *FDECL(set_opvar_int, (struct opvar *, long)); extern void VDECL(add_opvars, (sp_lev *, const char *, ...)); extern void FDECL(start_level_def, (sp_lev * *, char *)); extern struct lc_funcdefs *FDECL(funcdef_new, (long,char *)); extern void FDECL(funcdef_free_all, (struct lc_funcdefs *)); extern struct lc_funcdefs *FDECL(funcdef_defined, (struct lc_funcdefs *, char *, int)); extern char *FDECL(funcdef_paramtypes, (struct lc_funcdefs *)); extern char *FDECL(decode_parm_str, (char *)); extern struct lc_vardefs *FDECL(vardef_new, (long,char *)); extern void FDECL(vardef_free_all, (struct lc_vardefs *)); extern struct lc_vardefs *FDECL(vardef_defined, (struct lc_vardefs *, char *, int)); extern void NDECL(break_stmt_start); extern void FDECL(break_stmt_end, (sp_lev *)); extern void FDECL(break_stmt_new, (sp_lev *, long)); extern void FDECL(splev_add_from, (sp_lev *, sp_lev *)); extern void FDECL(check_vardef_type, (struct lc_vardefs *, char *, long)); extern void FDECL(vardef_used, (struct lc_vardefs *, char *)); extern struct lc_vardefs *FDECL(add_vardef_type, (struct lc_vardefs *, char *, long)); extern int FDECL(reverse_jmp_opcode, (int)); struct coord { long x; long y; }; struct forloopdef { char *varname; long jmp_point; }; static struct forloopdef forloop_list[MAX_NESTED_IFS]; static short n_forloops = 0; sp_lev *splev = NULL; static struct opvar *if_list[MAX_NESTED_IFS]; static short n_if_list = 0; unsigned int max_x_map, max_y_map; int obj_containment = 0; int in_container_obj = 0; /* integer value is possibly an inconstant value (eg. dice notation or a variable) */ int is_inconstant_number = 0; int in_switch_statement = 0; static struct opvar *switch_check_jump = NULL; static struct opvar *switch_default_case = NULL; static struct opvar *switch_case_list[MAX_SWITCH_CASES]; static long switch_case_value[MAX_SWITCH_CASES]; int n_switch_case_list = 0; int allow_break_statements = 0; struct lc_breakdef *break_list = NULL; extern struct lc_vardefs *variable_definitions; struct lc_vardefs *function_tmp_var_defs = NULL; extern struct lc_funcdefs *function_definitions; struct lc_funcdefs *curr_function = NULL; struct lc_funcdefs_parm * curr_function_param = NULL; int in_function_definition = 0; sp_lev *function_splev_backup = NULL; extern int fatal_error; extern int got_errors; extern int line_number; extern const char *fname; extern char curr_token[512]; typedef union { long i; char* map; struct { long room; long wall; long door; } corpos; struct { long area; long x1; long y1; long x2; long y2; } lregn; struct { long x; long y; } crd; struct { long ter; long lit; } terr; struct { long height; long width; } sze; struct { long die; long num; } dice; struct { long cfunc; char *varstr; } meth; } YYSTYPE; #define CHAR 257 #define INTEGER 258 #define BOOLEAN 259 #define PERCENT 260 #define SPERCENT 261 #define MINUS_INTEGER 262 #define PLUS_INTEGER 263 #define MAZE_GRID_ID 264 #define SOLID_FILL_ID 265 #define MINES_ID 266 #define ROGUELEV_ID 267 #define MESSAGE_ID 268 #define MAZE_ID 269 #define LEVEL_ID 270 #define LEV_INIT_ID 271 #define GEOMETRY_ID 272 #define NOMAP_ID 273 #define OBJECT_ID 274 #define COBJECT_ID 275 #define MONSTER_ID 276 #define TRAP_ID 277 #define DOOR_ID 278 #define DRAWBRIDGE_ID 279 #define object_ID 280 #define monster_ID 281 #define terrain_ID 282 #define MAZEWALK_ID 283 #define WALLIFY_ID 284 #define REGION_ID 285 #define FILLING 286 #define IRREGULAR 287 #define JOINED 288 #define ALTAR_ID 289 #define LADDER_ID 290 #define STAIR_ID 291 #define NON_DIGGABLE_ID 292 #define NON_PASSWALL_ID 293 #define ROOM_ID 294 #define PORTAL_ID 295 #define TELEPRT_ID 296 #define BRANCH_ID 297 #define LEV 298 #define MINERALIZE_ID 299 #define CORRIDOR_ID 300 #define GOLD_ID 301 #define ENGRAVING_ID 302 #define FOUNTAIN_ID 303 #define POOL_ID 304 #define SINK_ID 305 #define NONE 306 #define RAND_CORRIDOR_ID 307 #define DOOR_STATE 308 #define LIGHT_STATE 309 #define CURSE_TYPE 310 #define ENGRAVING_TYPE 311 #define DIRECTION 312 #define RANDOM_TYPE 313 #define RANDOM_TYPE_BRACKET 314 #define A_REGISTER 315 #define ALIGNMENT 316 #define LEFT_OR_RIGHT 317 #define CENTER 318 #define TOP_OR_BOT 319 #define ALTAR_TYPE 320 #define UP_OR_DOWN 321 #define SUBROOM_ID 322 #define NAME_ID 323 #define FLAGS_ID 324 #define FLAG_TYPE 325 #define MON_ATTITUDE 326 #define MON_ALERTNESS 327 #define MON_APPEARANCE 328 #define ROOMDOOR_ID 329 #define IF_ID 330 #define ELSE_ID 331 #define TERRAIN_ID 332 #define HORIZ_OR_VERT 333 #define REPLACE_TERRAIN_ID 334 #define EXIT_ID 335 #define SHUFFLE_ID 336 #define QUANTITY_ID 337 #define BURIED_ID 338 #define LOOP_ID 339 #define FOR_ID 340 #define TO_ID 341 #define SWITCH_ID 342 #define CASE_ID 343 #define BREAK_ID 344 #define DEFAULT_ID 345 #define ERODED_ID 346 #define TRAPPED_STATE 347 #define RECHARGED_ID 348 #define INVIS_ID 349 #define GREASED_ID 350 #define FEMALE_ID 351 #define CANCELLED_ID 352 #define REVIVED_ID 353 #define AVENGE_ID 354 #define FLEEING_ID 355 #define BLINDED_ID 356 #define PARALYZED_ID 357 #define STUNNED_ID 358 #define CONFUSED_ID 359 #define SEENTRAPS_ID 360 #define ALL_ID 361 #define MONTYPE_ID 362 #define GRAVE_ID 363 #define ERODEPROOF_ID 364 #define FUNCTION_ID 365 #define MSG_OUTPUT_TYPE 366 #define COMPARE_TYPE 367 #define UNKNOWN_TYPE 368 #define rect_ID 369 #define fillrect_ID 370 #define line_ID 371 #define randline_ID 372 #define grow_ID 373 #define selection_ID 374 #define flood_ID 375 #define rndcoord_ID 376 #define circle_ID 377 #define ellipse_ID 378 #define filter_ID 379 #define complement_ID 380 #define gradient_ID 381 #define GRADIENT_TYPE 382 #define LIMITED 383 #define HUMIDITY_TYPE 384 #define STRING 385 #define MAP_ID 386 #define NQSTRING 387 #define VARSTRING 388 #define CFUNC 389 #define CFUNC_INT 390 #define CFUNC_STR 391 #define CFUNC_COORD 392 #define CFUNC_REGION 393 #define VARSTRING_INT 394 #define VARSTRING_INT_ARRAY 395 #define VARSTRING_STRING 396 #define VARSTRING_STRING_ARRAY 397 #define VARSTRING_VAR 398 #define VARSTRING_VAR_ARRAY 399 #define VARSTRING_COORD 400 #define VARSTRING_COORD_ARRAY 401 #define VARSTRING_REGION 402 #define VARSTRING_REGION_ARRAY 403 #define VARSTRING_MAPCHAR 404 #define VARSTRING_MAPCHAR_ARRAY 405 #define VARSTRING_MONST 406 #define VARSTRING_MONST_ARRAY 407 #define VARSTRING_OBJ 408 #define VARSTRING_OBJ_ARRAY 409 #define VARSTRING_SEL 410 #define VARSTRING_SEL_ARRAY 411 #define METHOD_INT 412 #define METHOD_INT_ARRAY 413 #define METHOD_STRING 414 #define METHOD_STRING_ARRAY 415 #define METHOD_VAR 416 #define METHOD_VAR_ARRAY 417 #define METHOD_COORD 418 #define METHOD_COORD_ARRAY 419 #define METHOD_REGION 420 #define METHOD_REGION_ARRAY 421 #define METHOD_MAPCHAR 422 #define METHOD_MAPCHAR_ARRAY 423 #define METHOD_MONST 424 #define METHOD_MONST_ARRAY 425 #define METHOD_OBJ 426 #define METHOD_OBJ_ARRAY 427 #define METHOD_SEL 428 #define METHOD_SEL_ARRAY 429 #define DICE 430 #define YYERRCODE 256 short yylhs[] = { -1, 0, 0, 73, 73, 74, 57, 57, 56, 56, 76, 76, 76, 76, 55, 55, 54, 54, 46, 46, 14, 14, 75, 75, 26, 26, 22, 22, 23, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 59, 59, 59, 59, 59, 59, 59, 59, 59, 58, 58, 58, 58, 58, 58, 58, 58, 58, 60, 60, 60, 61, 61, 85, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 38, 38, 44, 44, 43, 43, 42, 42, 41, 41, 39, 39, 40, 40, 129, 130, 100, 101, 98, 45, 45, 31, 31, 31, 131, 133, 93, 134, 134, 136, 135, 137, 135, 99, 138, 138, 139, 140, 94, 141, 95, 142, 97, 144, 96, 143, 145, 143, 79, 110, 110, 110, 83, 83, 65, 146, 147, 113, 148, 112, 10, 10, 68, 68, 69, 69, 70, 70, 71, 71, 87, 87, 15, 15, 13, 13, 16, 16, 11, 11, 103, 103, 103, 1, 1, 2, 2, 105, 150, 105, 149, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 35, 35, 35, 106, 152, 106, 151, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 120, 88, 104, 104, 121, 121, 102, 117, 118, 109, 119, 82, 17, 17, 91, 114, 108, 72, 72, 116, 115, 86, 107, 154, 111, 24, 24, 80, 81, 81, 81, 92, 89, 90, 90, 3, 3, 4, 4, 29, 29, 28, 28, 27, 27, 27, 5, 5, 6, 6, 7, 7, 7, 12, 12, 12, 8, 8, 9, 155, 155, 155, 132, 77, 77, 77, 77, 32, 32, 32, 30, 30, 127, 127, 127, 33, 124, 124, 124, 34, 34, 125, 125, 125, 36, 36, 36, 36, 126, 126, 126, 37, 37, 37, 37, 123, 123, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, 50, 50, 157, 158, 158, 128, 128, 64, 64, 63, 63, 62, 62, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 48, 48, 156, 47, 47, 47, 153, 153, 153, 153, 51, 51, 52, 52, 53, 53, 25, 25, 67, 67, 66, }; short yylen[] = { 2, 0, 1, 1, 2, 3, 3, 5, 1, 1, 5, 5, 3, 16, 0, 2, 0, 2, 0, 2, 1, 1, 0, 3, 3, 1, 0, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 5, 3, 5, 5, 5, 3, 3, 5, 5, 5, 7, 7, 7, 5, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 0, 0, 8, 4, 1, 0, 1, 1, 5, 3, 0, 0, 9, 0, 2, 0, 5, 0, 4, 1, 2, 1, 6, 0, 3, 0, 6, 0, 4, 0, 4, 1, 0, 4, 3, 1, 3, 3, 5, 5, 7, 4, 0, 10, 0, 12, 0, 2, 5, 1, 5, 1, 5, 1, 5, 1, 9, 5, 1, 1, 1, 1, 1, 3, 1, 1, 1, 7, 5, 1, 1, 1, 1, 3, 0, 5, 4, 0, 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 3, 1, 1, 3, 3, 0, 5, 2, 0, 3, 1, 3, 1, 3, 3, 1, 1, 3, 1, 1, 1, 3, 1, 1, 1, 5, 7, 5, 8, 1, 3, 5, 5, 7, 7, 6, 5, 0, 2, 3, 3, 3, 1, 5, 9, 5, 3, 3, 0, 10, 0, 1, 7, 5, 5, 3, 5, 7, 9, 1, 1, 1, 1, 1, 0, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 4, 1, 1, 4, 1, 1, 4, 1, 4, 5, 1, 3, 1, 3, 1, 1, 4, 9, 1, 1, 4, 1, 5, 1, 1, 4, 1, 1, 5, 1, 1, 1, 4, 1, 1, 5, 1, 1, 3, 1, 1, 3, 1, 4, 3, 3, 3, 3, 3, 3, 1, 1, 3, 1, 3, 0, 1, 1, 1, 1, 3, 0, 1, 1, 2, 2, 4, 6, 4, 6, 6, 6, 6, 2, 6, 8, 8, 10, 14, 2, 1, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 9, }; short yydefred[] = { 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 4, 0, 6, 0, 133, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 0, 0, 0, 136, 145, 0, 0, 0, 0, 93, 82, 73, 83, 74, 84, 75, 85, 76, 86, 77, 87, 78, 88, 79, 89, 80, 90, 81, 5, 0, 92, 91, 0, 30, 0, 29, 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, 149, 0, 0, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 0, 0, 0, 0, 94, 95, 0, 0, 0, 0, 342, 0, 345, 0, 387, 0, 343, 0, 153, 0, 27, 0, 9, 8, 7, 0, 304, 305, 0, 0, 340, 0, 0, 0, 12, 313, 0, 195, 196, 0, 0, 310, 0, 0, 308, 0, 337, 339, 0, 336, 334, 0, 333, 228, 224, 225, 330, 332, 0, 329, 327, 0, 326, 0, 0, 281, 280, 0, 291, 292, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 383, 250, 0, 366, 0, 318, 0, 317, 0, 0, 0, 0, 0, 403, 0, 0, 266, 267, 283, 282, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 261, 260, 390, 388, 389, 163, 162, 0, 184, 185, 0, 0, 0, 0, 96, 0, 0, 0, 0, 126, 0, 0, 0, 0, 135, 0, 0, 0, 0, 0, 0, 0, 362, 0, 0, 0, 396, 398, 395, 397, 399, 400, 0, 0, 0, 0, 0, 0, 103, 0, 0, 104, 0, 150, 24, 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, 367, 368, 0, 0, 0, 376, 0, 0, 0, 382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 0, 0, 151, 0, 0, 0, 0, 344, 352, 0, 0, 0, 0, 349, 350, 351, 129, 0, 154, 0, 0, 120, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 341, 11, 262, 0, 10, 0, 0, 314, 0, 0, 0, 198, 197, 0, 173, 194, 0, 0, 0, 226, 0, 0, 203, 201, 245, 183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 324, 0, 0, 322, 0, 321, 0, 0, 0, 384, 386, 0, 0, 293, 294, 0, 297, 0, 295, 0, 296, 251, 0, 0, 0, 252, 0, 175, 0, 0, 0, 0, 0, 256, 0, 0, 165, 164, 276, 401, 402, 0, 177, 0, 0, 0, 0, 0, 265, 0, 0, 147, 0, 0, 137, 274, 0, 0, 0, 356, 0, 346, 134, 363, 98, 0, 0, 105, 0, 111, 0, 106, 0, 107, 0, 102, 0, 101, 0, 100, 28, 306, 0, 0, 316, 309, 0, 311, 0, 0, 335, 393, 391, 392, 239, 236, 230, 0, 0, 235, 0, 240, 0, 242, 243, 0, 238, 229, 244, 232, 394, 0, 328, 0, 0, 0, 369, 0, 0, 0, 371, 0, 0, 0, 0, 0, 0, 0, 0, 0, 319, 0, 0, 0, 0, 0, 0, 167, 0, 0, 0, 0, 0, 255, 0, 0, 0, 0, 0, 0, 0, 0, 152, 146, 0, 0, 0, 127, 0, 0, 0, 0, 121, 119, 112, 0, 114, 0, 116, 0, 0, 0, 312, 193, 338, 0, 0, 0, 0, 0, 331, 0, 246, 0, 0, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 302, 301, 272, 0, 0, 253, 0, 179, 0, 0, 254, 258, 0, 0, 0, 0, 181, 0, 0, 187, 0, 186, 159, 0, 0, 353, 354, 355, 0, 357, 0, 110, 0, 109, 0, 108, 0, 0, 0, 234, 237, 241, 231, 0, 298, 206, 207, 0, 211, 210, 212, 213, 214, 0, 0, 0, 218, 219, 0, 299, 208, 204, 0, 0, 248, 0, 372, 0, 377, 0, 373, 0, 323, 374, 375, 0, 0, 0, 268, 303, 0, 0, 0, 0, 0, 0, 190, 191, 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, 128, 113, 115, 117, 263, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 325, 0, 0, 288, 289, 290, 0, 285, 0, 0, 0, 174, 0, 0, 278, 166, 176, 0, 0, 182, 264, 0, 143, 138, 140, 0, 300, 215, 216, 217, 222, 0, 220, 378, 0, 379, 0, 0, 0, 271, 269, 0, 0, 0, 170, 0, 169, 141, 0, 0, 0, 0, 0, 0, 320, 287, 0, 405, 178, 0, 180, 0, 144, 0, 223, 380, 15, 0, 404, 171, 142, 0, 0, 0, 0, 20, 21, 0, 0, 0, 13, 17, 381, }; short yydgoto[] = { 3, 209, 449, 233, 271, 236, 486, 490, 671, 491, 351, 757, 729, 689, 859, 294, 467, 614, 354, 578, 584, 730, 80, 337, 822, 512, 133, 788, 789, 747, 345, 81, 210, 258, 476, 814, 228, 218, 636, 425, 426, 427, 428, 640, 638, 387, 733, 290, 375, 253, 696, 329, 330, 331, 861, 835, 190, 4, 82, 83, 84, 172, 314, 315, 316, 280, 264, 265, 500, 515, 678, 687, 440, 5, 6, 10, 85, 254, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 277, 318, 478, 229, 219, 259, 529, 408, 697, 173, 278, 626, 765, 766, 843, 830, 524, 130, 187, 521, 319, 401, 295, 517, 272, 800, 841, 230, 359, 220, 355, 580, 790, 196, 182, 530, 531, }; short yysindex[] = { 68, 17, 31, 0, -217, 0, 68, -257, -226, 112, 5680, 0, 136, 0, -136, 0, 170, 185, 201, 0, 225, 229, 238, 244, 248, 251, 255, 266, 272, 275, 283, 304, 309, 346, 366, 378, 380, 382, 383, 396, 397, 398, 400, 401, 404, 405, 413, 415, -46, 417, 420, 0, 426, 108, 489, 0, 0, 428, 101, -35, 449, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 432, 0, 0, 430, 0, 5680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -190, 450, 0, -234, 62, -13, 41, 41, 40, -252, -121, 109, 109, 1644, -34, 109, 109, 92, -34, -34, -249, -20, -20, -20, -35, 458, -35, 109, 1644, 1644, 1644, -160, -249, -174, 0, 1644, -34, 288, -35, 0, 0, 439, 414, 109, 467, 0, -22, 0, 421, 0, -9, 0, -14, 0, 163, 0, 385, 0, 0, 0, -136, 0, 0, 423, 465, 0, 471, 473, 475, 0, 0, 137, 0, 0, 490, 271, 0, 441, 496, 0, 503, 0, 0, 276, 0, 0, 452, 0, 0, 0, 0, 0, 0, 292, 0, 0, 470, 0, 512, 0, 0, 0, 518, 0, 0, 523, 524, 526, -34, -34, 109, 109, 540, 109, 542, 544, 545, 1644, 548, 5537, 0, 0, 533, 0, 331, 0, 500, 0, 555, 558, 559, 564, 347, 0, 571, 582, 0, 0, 0, 0, 367, 584, 379, 592, 594, 595, 141, 596, 402, 597, 588, 611, 0, 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, 628, 385, 638, 640, 0, 593, -35, -35, 644, 0, 649, 159, -35, -35, 0, -35, -35, -35, -35, -35, 651, 650, 0, 141, 465, 5680, 0, 0, 0, 0, 0, 0, 642, -1, 4, 643, 647, 653, 0, 141, 465, 0, 5680, 0, 0, -35, -234, 445, 14, 455, 654, 614, 1644, 678, -35, 38, 476, 338, 682, -35, 688, 385, 690, -35, 109, 385, 109, 1644, 424, 431, 0, 0, 694, 696, 1298, 0, 109, 109, 5435, 0, 360, 704, 1644, 702, -35, -165, -83, 429, 491, 703, -20, 433, 0, 707, -24, 708, -20, -20, -20, -35, 709, 10, 109, -91, -19, -121, 0, 0, 9, 9, 0, 45, 655, -254, 560, 0, 0, 75, 148, 79, 79, 0, 0, 0, 0, -14, 0, 1644, 711, 0, 0, 16, 25, 27, 29, 141, 465, 22, -10, -28, 631, 427, 0, 0, 0, 501, 0, 715, 137, 0, 719, 505, 459, 0, 0, 503, 0, 0, 381, 499, 2, 0, 403, 508, 0, 0, 0, 0, 721, 723, 109, 109, 662, 743, 748, 746, 749, 0, 750, 5448, 0, 701, 0, 751, 752, 753, 0, 0, 554, 536, 0, 0, 754, 0, 726, 0, 774, 0, 0, 775, 579, 785, 0, -165, 0, 581, 796, 583, 798, 800, 0, 802, 535, 0, 0, 0, 0, 0, 804, 0, 591, 806, 807, 521, 598, 0, 810, 385, 0, 811, -35, 0, 0, 465, 801, 815, 0, 814, 0, 0, 0, 0, 604, -35, 0, -234, 0, -21, 0, 824, 0, 57, 0, 98, 0, 23, 0, 0, 0, 825, 621, 0, 0, 827, 0, 493, 839, 0, 0, 0, 0, 0, 0, 0, 823, 826, 0, 828, 0, 830, 0, 0, 832, 0, 0, 0, 0, 0, 841, 0, 848, -121, 641, 0, 857, 590, 1644, 0, -35, -35, 1644, 859, -35, 1644, 1644, 864, 861, 0, -249, 648, -148, 652, 135, 586, 0, 867, -5, 868, 528, 587, 0, -35, 870, -234, 871, 6, 72, 385, 9, 0, 0, 141, 793, 1, 0, 560, 166, 141, 465, 0, 0, 0, 32, 0, 33, 0, 35, -165, 873, 0, 0, 0, -234, -35, -35, -35, 40, 0, 5526, 0, 876, -35, 0, 880, 174, 686, 881, -165, 569, 882, 883, -35, 685, 900, 852, 0, 0, 0, 902, 691, 0, 693, 0, 110, 908, 0, 0, 928, -184, 465, 716, 0, 717, 900, 0, 929, 0, 0, 932, 90, 0, 0, 0, 385, 0, 57, 0, 98, 0, 23, 0, 936, 722, 465, 0, 0, 0, 0, 56, 0, 0, 0, -234, 0, 0, 0, 0, 0, 920, 921, 924, 0, 0, 925, 0, 0, 0, 465, 727, 0, 141, 0, 699, 0, -35, 0, 945, 0, 0, 0, 481, 943, 59, 0, 0, 744, 957, 965, 963, 6, -35, 0, 0, 967, 977, 982, 0, -184, 767, -50, 971, 905, 90, 0, 0, 0, 0, 0, 987, 724, 465, -35, -35, -35, -261, 0, 991, 576, 0, -35, 777, 0, 0, 0, 989, 0, 385, 992, 780, 0, 38, 900, 0, 0, 0, 781, 385, 0, 0, 983, 0, 0, 0, 784, 0, 0, 0, 0, 0, 916, 0, 0, 758, 0, 93, 1004, 59, 0, 0, 788, 1006, 1007, 0, 1010, 0, 0, 5680, 1009, -261, 1016, 675, 1020, 0, 0, 1025, 0, 0, 385, 0, 5680, 0, -165, 0, 0, 0, 1023, 0, 0, 0, 1024, 109, -149, 1026, 0, 0, 876, 109, 1028, 0, 0, 0, }; short yyrindex[] = { 1071, 0, 0, 0, 5225, 0, 1072, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2985, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3174, 0, 0, 0, 0, 0, 0, 3331, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5382, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1032, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1947, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1098, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 0, 0, 0, 0, 0, 720, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3677, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1033, 0, 241, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3866, 4023, 0, 951, 0, 0, 0, 0, 0, 0, 0, 984, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2293, 0, 0, 0, 0, 0, 0, 0, 1037, 0, 0, 0, 0, 374, 531, 0, 0, 0, 0, 0, 0, 0, 553, 0, 0, 0, 0, 0, 0, 42, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4212, 0, 0, 1035, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4558, 0, 0, 0, 1039, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2482, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 958, 0, 0, 0, 0, 0, 50, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4715, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2639, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4904, 0, 0, 0, 959, 0, 0, 0, 0, 0, 961, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1444, 0, 0, 909, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 961, 0, 0, 0, 0, 0, 0, 0, 1601, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2828, 0, 5061, 0, 0, 0, 0, 959, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1790, 0, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1043, 0, 0, 4715, 0, 0, 0, 0, 0, }; short yygindex[] = { 0, 410, 294, 0, 487, -329, -480, 0, 0, 438, 645, 330, 0, 0, 0, 0, -474, 0, 0, 0, 0, 0, -86, -287, 0, 0, 901, 0, 273, -629, 657, 1047, -296, -297, -509, 264, -504, -494, 0, 0, 0, 0, 0, 0, 0, 0, 242, -384, -137, 849, 0, 0, 0, 0, 0, 0, 0, 0, 1046, 934, -371, 0, 0, 0, 684, 710, 0, -48, 0, 0, 0, 351, 0, 1100, 0, 0, 0, -133, 790, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -58, -130, -355, -375, 679, -84, 0, 0, 0, 0, -167, 0, 345, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 949, 0, 0, 0, 0, 975, 0, 0, 0, 792, 680, 504, 0, }; #define YYTABLESIZE 6091 short yytable[] = { 186, 181, 299, 211, 195, 177, 255, 252, 400, 237, 238, 507, 518, 260, 261, 266, 499, 608, 177, 206, 273, 514, 283, 284, 285, 282, 177, 206, 313, 296, 224, 424, 423, 311, 309, 677, 310, 528, 312, 177, 639, 302, 206, 637, 327, 59, 686, 519, 520, 518, 279, 635, 332, 26, 439, 334, 26, 548, 760, 526, 537, 231, 214, 518, 269, 267, 268, 188, 455, 539, 516, 541, 459, 543, 755, 7, 699, 701, 550, 703, 224, 214, 313, 297, 308, 292, 122, 311, 309, 8, 310, 523, 312, 124, 123, 549, 125, 214, 286, 281, 812, 335, 287, 288, 274, 275, 276, 9, 366, 367, 857, 369, 313, 547, 773, 656, 313, 311, 309, 305, 310, 311, 312, 189, 813, 317, 312, 333, 12, 756, 313, 192, 263, 232, 406, 311, 270, 834, 224, 293, 312, 538, 193, 194, 484, 545, 690, 603, 485, 206, 540, 192, 542, 289, 544, 364, 365, 700, 702, 13, 704, 705, 193, 194, 858, 669, 826, 122, 532, 14, 14, 348, 670, 348, 124, 123, 643, 125, 313, 673, 131, 740, 26, 311, 309, 313, 310, 234, 312, 132, 311, 309, 235, 310, 770, 312, 313, 769, 430, 169, 410, 311, 309, 327, 310, 768, 312, 643, 286, 444, 666, 313, 287, 288, 15, 737, 311, 309, 736, 310, 510, 312, 511, 176, 461, 458, 505, 460, 134, 471, 487, 468, 488, 489, 623, 477, 176, 469, 470, 481, 304, 533, 405, 135, 176, 633, 634, 222, 411, 412, 434, 413, 414, 415, 416, 417, 653, 422, 528, 136, 562, 304, 176, 509, 563, 564, 471, 692, 286, 305, 429, 438, 287, 288, 26, 711, 26, 527, 262, 212, 471, 435, 360, 137, 535, 360, 328, 138, 361, 498, 446, 361, 201, 202, 513, 453, 139, 222, 212, 457, 201, 202, 140, 223, 203, 204, 141, 26, 676, 142, 565, 566, 567, 143, 212, 201, 202, 201, 202, 685, 483, 579, 26, 26, 144, 568, 197, 198, 199, 200, 145, 587, 588, 146, 691, 213, 495, 1, 2, 569, 570, 147, 502, 503, 504, 785, 786, 787, 571, 572, 573, 574, 575, 223, 213, 222, 447, 448, 307, 178, 179, 317, 148, 205, 576, 853, 577, 149, 256, 257, 213, 192, 178, 179, 347, 225, 474, 475, 205, 803, 178, 179, 193, 194, 466, 688, 522, 207, 208, 192, 262, 694, 695, 178, 179, 180, 226, 227, 178, 179, 193, 194, 207, 208, 150, 201, 202, 215, 180, 632, 767, 223, 347, 474, 475, 347, 180, 347, 347, 347, 347, 176, 201, 202, 151, 225, 215, 203, 204, 180, 216, 217, 180, 763, 180, 764, 152, 320, 153, 321, 154, 155, 215, 322, 323, 324, 226, 227, 681, 216, 217, 26, 26, 657, 156, 157, 158, 660, 159, 160, 663, 664, 161, 162, 313, 347, 625, 347, 205, 311, 309, 163, 310, 164, 312, 166, 201, 202, 167, 631, 708, 709, 710, 225, 168, 205, 174, 683, 175, 183, 184, 185, 207, 208, 191, 325, 313, 347, 279, 347, 300, 311, 309, 821, 310, 301, 312, 303, 336, 207, 208, 340, 306, 828, 339, 341, 707, 342, 313, 343, 552, 344, 731, 311, 309, 26, 783, 26, 312, 347, 346, 348, 348, 352, 658, 659, 313, 326, 662, 205, 349, 311, 309, 353, 310, 313, 312, 350, 192, 356, 311, 309, 558, 310, 851, 312, 358, 178, 179, 193, 194, 357, 360, 207, 208, 256, 257, 361, 362, 348, 363, 376, 348, 313, 348, 348, 348, 348, 311, 309, 368, 310, 370, 312, 371, 372, 774, 796, 374, 377, 342, 378, 561, 180, 342, 342, 342, 734, 342, 379, 342, 583, 380, 381, 382, 383, 313, 744, 809, 810, 811, 311, 309, 313, 310, 384, 312, 817, 311, 309, 816, 310, 348, 312, 348, 313, 385, 386, 388, 601, 311, 309, 396, 310, 347, 312, 390, 389, 391, 392, 393, 395, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 348, 397, 348, 347, 347, 347, 394, 398, 741, 347, 347, 347, 347, 347, 347, 347, 347, 347, 399, 347, 347, 347, 347, 347, 347, 347, 781, 347, 402, 63, 403, 65, 404, 67, 407, 69, 409, 71, 418, 73, 419, 75, 347, 77, 442, 79, 421, 431, 437, 347, 347, 432, 347, 443, 347, 347, 347, 433, 441, 347, 347, 347, 347, 347, 347, 347, 307, 856, 445, 313, 451, 818, 452, 863, 311, 309, 738, 310, 454, 312, 456, 450, 462, 347, 464, 347, 465, 347, 479, 463, 844, 480, 482, 494, 525, 493, 492, 497, 501, 506, 496, 536, 551, 852, 553, 554, 556, 347, 347, 557, 307, 585, 560, 586, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 347, 589, 590, 582, 591, 592, 348, 596, 593, 594, 597, 598, 599, 602, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 307, 600, 307, 348, 348, 348, 603, 604, 605, 348, 348, 348, 348, 348, 348, 348, 348, 348, 607, 348, 348, 348, 348, 348, 348, 348, 606, 348, 609, 610, 611, 612, 307, 613, 307, 615, 616, 617, 618, 619, 620, 621, 348, 622, 595, 628, 624, 629, 627, 348, 348, 630, 348, 255, 348, 348, 348, 643, 641, 348, 348, 348, 348, 348, 348, 348, 170, 642, 644, 645, 646, 651, 62, 647, 64, 648, 66, 649, 68, 650, 70, 652, 72, 348, 74, 348, 76, 348, 78, 654, 655, 466, 661, 665, 666, 668, 674, 680, 370, 672, 675, 673, 679, 682, 684, 693, 706, 348, 348, 732, 735, 739, 742, 743, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 745, 746, 748, 749, 370, 61, 750, 370, 751, 753, 370, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 754, 761, 758, 759, 762, 771, 775, 776, 307, 772, 777, 778, 779, 780, 782, 784, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 370, 792, 791, 307, 307, 307, 793, 794, 797, 307, 307, 307, 307, 307, 307, 307, 307, 307, 798, 307, 307, 307, 307, 307, 307, 307, 799, 307, 802, 804, 805, 807, 815, 820, 370, 819, 823, 808, 824, 827, 832, 829, 307, 831, 833, 836, 838, 839, 840, 307, 307, 842, 307, 845, 307, 307, 307, 847, 848, 307, 307, 849, 307, 307, 307, 307, 850, 854, 855, 864, 860, 1, 3, 364, 365, 172, 26, 315, 358, 188, 359, 148, 284, 307, 16, 307, 139, 752, 825, 667, 728, 801, 338, 837, 559, 165, 846, 373, 385, 555, 171, 862, 298, 534, 795, 508, 11, 307, 307, 420, 546, 806, 291, 221, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 307, 436, 698, 581, 0, 0, 0, 0, 385, 0, 0, 385, 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, 370, 0, 0, 0, 0, 0, 0, 0, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 385, 0, 0, 370, 370, 370, 0, 0, 0, 370, 370, 370, 370, 370, 370, 370, 370, 370, 0, 370, 370, 370, 370, 370, 370, 370, 0, 370, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 370, 0, 0, 0, 0, 0, 0, 370, 370, 0, 370, 0, 370, 370, 370, 0, 0, 370, 370, 0, 370, 370, 370, 370, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 0, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 370, 370, 0, 233, 0, 0, 0, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 0, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 233, 0, 233, 385, 385, 385, 0, 0, 0, 385, 385, 385, 385, 385, 385, 385, 385, 385, 0, 385, 385, 385, 385, 385, 385, 385, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 0, 0, 0, 0, 0, 385, 385, 0, 385, 0, 385, 385, 385, 0, 0, 385, 385, 0, 385, 385, 385, 385, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 0, 385, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 385, 385, 0, 205, 0, 0, 0, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 385, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 205, 0, 0, 233, 233, 233, 0, 0, 0, 233, 233, 233, 233, 233, 233, 233, 233, 233, 0, 233, 233, 233, 233, 233, 233, 233, 0, 233, 0, 0, 0, 0, 205, 0, 205, 0, 0, 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 233, 233, 0, 233, 0, 233, 233, 233, 0, 0, 233, 233, 0, 233, 233, 233, 233, 209, 0, 0, 0, 0, 0, 0, 0, 0, 466, 201, 202, 0, 0, 0, 0, 0, 233, 0, 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, 233, 0, 209, 0, 0, 0, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 239, 240, 241, 242, 243, 0, 244, 205, 245, 246, 247, 248, 249, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 207, 208, 0, 0, 0, 0, 205, 0, 0, 0, 251, 0, 0, 0, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 209, 0, 209, 205, 205, 205, 0, 0, 0, 205, 205, 205, 205, 205, 205, 205, 205, 205, 0, 205, 205, 205, 205, 205, 205, 205, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, 0, 0, 0, 205, 205, 0, 205, 0, 205, 205, 205, 0, 0, 205, 205, 0, 205, 205, 205, 205, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 0, 205, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 205, 0, 221, 0, 0, 0, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 205, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 221, 0, 0, 209, 209, 209, 0, 0, 0, 209, 209, 209, 209, 209, 209, 209, 209, 209, 0, 209, 209, 209, 209, 209, 209, 209, 0, 209, 0, 0, 0, 0, 221, 0, 221, 0, 0, 0, 0, 0, 0, 0, 209, 0, 0, 0, 0, 0, 0, 209, 209, 0, 209, 0, 209, 209, 209, 0, 0, 209, 209, 0, 209, 209, 209, 209, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 202, 0, 0, 0, 0, 0, 209, 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 209, 209, 0, 0, 0, 0, 0, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 239, 240, 241, 242, 243, 0, 244, 205, 245, 246, 247, 248, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 207, 208, 0, 0, 0, 0, 221, 0, 0, 0, 251, 0, 0, 0, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 200, 0, 199, 221, 221, 221, 0, 0, 0, 221, 221, 221, 221, 221, 221, 221, 221, 221, 0, 221, 221, 221, 221, 221, 221, 221, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 221, 221, 0, 221, 0, 221, 221, 221, 0, 0, 221, 221, 0, 221, 221, 221, 221, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 0, 221, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 221, 0, 0, 0, 0, 0, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 0, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 227, 0, 0, 199, 199, 199, 0, 0, 0, 199, 199, 199, 199, 199, 199, 199, 199, 199, 0, 199, 199, 199, 199, 199, 199, 199, 0, 199, 0, 0, 0, 0, 227, 0, 227, 0, 0, 0, 0, 0, 0, 0, 199, 0, 0, 0, 0, 0, 0, 199, 199, 0, 199, 0, 199, 199, 199, 0, 0, 199, 199, 0, 199, 199, 199, 199, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 0, 199, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 199, 0, 0, 0, 0, 0, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 199, 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, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 0, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 0, 0, 157, 227, 227, 227, 0, 0, 0, 227, 227, 227, 227, 227, 227, 227, 227, 227, 0, 227, 227, 227, 227, 227, 227, 227, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, 0, 0, 0, 0, 227, 227, 0, 227, 0, 227, 227, 227, 0, 0, 227, 227, 0, 227, 227, 227, 227, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 0, 227, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 227, 227, 0, 0, 0, 0, 0, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 0, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 202, 0, 0, 157, 157, 157, 0, 0, 0, 157, 157, 157, 157, 157, 157, 157, 157, 157, 0, 157, 157, 157, 157, 157, 157, 157, 0, 157, 0, 0, 0, 0, 202, 0, 202, 0, 0, 0, 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, 0, 157, 157, 158, 157, 0, 157, 157, 157, 0, 0, 157, 157, 0, 157, 157, 157, 157, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 0, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 157, 0, 0, 0, 0, 0, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 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, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 0, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 284, 0, 284, 202, 202, 202, 0, 0, 0, 202, 202, 202, 202, 202, 202, 202, 202, 202, 0, 202, 202, 202, 202, 202, 202, 202, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 0, 0, 0, 0, 202, 202, 0, 202, 0, 202, 202, 202, 0, 0, 202, 202, 0, 202, 202, 202, 202, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 202, 0, 0, 0, 0, 0, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 0, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 286, 0, 0, 284, 284, 284, 0, 0, 0, 284, 284, 284, 284, 284, 284, 284, 284, 284, 0, 284, 284, 284, 284, 284, 284, 284, 0, 284, 0, 0, 0, 0, 286, 0, 286, 0, 0, 0, 0, 0, 0, 0, 284, 0, 0, 0, 0, 0, 0, 284, 284, 0, 284, 0, 284, 284, 284, 0, 0, 284, 284, 0, 284, 284, 284, 284, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 0, 284, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 284, 284, 0, 0, 0, 0, 0, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 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, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 0, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 0, 0, 249, 286, 286, 286, 0, 0, 0, 286, 286, 286, 286, 286, 286, 286, 286, 286, 0, 286, 286, 286, 286, 286, 286, 286, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 0, 0, 0, 0, 0, 286, 286, 0, 286, 0, 286, 286, 286, 0, 0, 286, 286, 0, 286, 286, 286, 286, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 0, 286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 286, 286, 0, 0, 0, 0, 0, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 286, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 279, 0, 0, 249, 249, 249, 0, 0, 0, 249, 249, 249, 249, 249, 249, 249, 249, 249, 0, 249, 249, 249, 249, 249, 249, 249, 0, 249, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 249, 249, 0, 249, 0, 249, 249, 249, 0, 0, 249, 249, 0, 249, 249, 249, 249, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 249, 0, 0, 0, 0, 0, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 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, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 0, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 0, 0, 161, 279, 279, 279, 0, 0, 0, 279, 279, 279, 279, 279, 279, 279, 279, 279, 0, 279, 279, 279, 279, 279, 279, 279, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 0, 0, 0, 0, 0, 279, 279, 0, 279, 0, 279, 279, 279, 0, 0, 279, 279, 0, 279, 279, 279, 279, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 0, 279, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 279, 279, 0, 0, 0, 0, 0, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 0, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 160, 0, 0, 161, 161, 161, 0, 0, 0, 161, 161, 161, 161, 161, 161, 161, 161, 161, 0, 161, 161, 161, 161, 161, 161, 161, 0, 161, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, 0, 0, 0, 0, 161, 161, 0, 161, 0, 161, 161, 161, 0, 0, 161, 161, 0, 161, 161, 161, 161, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 161, 0, 0, 0, 0, 0, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 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, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, 0, 275, 160, 160, 160, 0, 0, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, 160, 160, 160, 160, 160, 160, 160, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 0, 0, 0, 0, 0, 160, 160, 0, 160, 0, 160, 160, 160, 0, 0, 160, 160, 0, 160, 160, 160, 160, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 0, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 160, 0, 0, 0, 0, 0, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 0, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 97, 0, 0, 275, 275, 275, 0, 0, 0, 275, 275, 275, 275, 275, 275, 275, 275, 275, 0, 275, 275, 275, 275, 275, 275, 275, 0, 275, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 275, 0, 0, 0, 0, 0, 0, 275, 275, 0, 275, 0, 275, 275, 275, 0, 0, 275, 275, 0, 275, 275, 275, 275, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 0, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 275, 275, 0, 0, 0, 0, 0, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 275, 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, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 99, 97, 97, 97, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 97, 97, 97, 97, 97, 97, 97, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, 0, 97, 97, 0, 97, 0, 97, 97, 97, 0, 0, 97, 97, 0, 97, 97, 97, 97, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 97, 97, 0, 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 247, 0, 0, 99, 99, 99, 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, 0, 99, 99, 99, 99, 99, 99, 99, 0, 99, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 99, 0, 0, 0, 0, 0, 0, 99, 99, 0, 99, 0, 99, 99, 99, 0, 0, 99, 99, 0, 99, 99, 99, 99, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 99, 0, 0, 0, 0, 0, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 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, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 0, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 0, 0, 257, 247, 247, 247, 0, 0, 0, 247, 247, 247, 247, 247, 247, 247, 247, 247, 0, 247, 247, 247, 247, 247, 247, 247, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 0, 0, 0, 0, 0, 247, 247, 0, 247, 0, 247, 247, 247, 0, 0, 247, 247, 0, 247, 247, 247, 247, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 0, 247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 247, 247, 0, 0, 0, 0, 0, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 0, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 273, 0, 0, 257, 257, 257, 0, 0, 0, 257, 257, 257, 257, 257, 257, 257, 257, 257, 0, 257, 257, 257, 257, 257, 257, 257, 0, 257, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 257, 0, 0, 0, 0, 0, 0, 257, 257, 0, 257, 0, 257, 257, 257, 0, 0, 257, 257, 0, 257, 257, 257, 257, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 257, 257, 0, 0, 0, 0, 0, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 257, 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, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 0, 0, 18, 273, 273, 273, 0, 0, 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 0, 273, 273, 273, 273, 273, 273, 273, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 0, 0, 0, 0, 0, 273, 273, 0, 273, 0, 273, 273, 273, 0, 0, 273, 273, 0, 273, 273, 273, 273, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 0, 273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 273, 273, 0, 0, 0, 0, 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 277, 0, 0, 18, 18, 18, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, 0, 18, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 18, 18, 0, 18, 0, 18, 18, 18, 0, 0, 18, 18, 0, 18, 18, 18, 18, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 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, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 0, 0, 0, 0, 0, 0, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 0, 0, 270, 277, 277, 277, 0, 0, 0, 277, 277, 277, 277, 277, 277, 277, 277, 277, 0, 277, 277, 277, 277, 277, 277, 277, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 277, 0, 0, 0, 0, 0, 0, 277, 277, 0, 277, 0, 277, 277, 277, 0, 0, 277, 277, 0, 277, 277, 277, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 0, 277, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 277, 277, 0, 0, 0, 0, 0, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 22, 0, 0, 0, 0, 270, 0, 0, 0, 0, 0, 0, 0, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 0, 0, 0, 270, 270, 270, 0, 0, 0, 270, 270, 270, 270, 270, 270, 270, 270, 270, 0, 270, 270, 270, 270, 270, 270, 270, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 270, 0, 0, 0, 0, 0, 0, 270, 270, 0, 270, 0, 270, 270, 270, 0, 0, 270, 270, 0, 270, 270, 270, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 270, 270, 0, 0, 0, 0, 0, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, 25, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 250, 0, 0, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 22, 22, 22, 0, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 22, 22, 22, 22, 22, 22, 22, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 22, 22, 0, 22, 0, 22, 22, 22, 0, 0, 22, 22, 0, 22, 0, 22, 0, 0, 0, 0, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 22, 0, 0, 0, 0, 0, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 0, 0, 25, 25, 25, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 25, 25, 25, 25, 25, 25, 25, 0, 25, 0, 0, 471, 0, 0, 0, 472, 0, 0, 0, 0, 0, 0, 0, 25, 595, 347, 0, 0, 0, 0, 25, 25, 0, 25, 0, 25, 25, 25, 0, 0, 25, 25, 0, 25, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 25, 201, 202, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 202, 0, 0, 0, 0, 0, 0, 25, 25, 59, 0, 0, 0, 0, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 239, 240, 241, 242, 243, 0, 244, 205, 245, 246, 247, 248, 249, 239, 240, 241, 242, 243, 0, 244, 205, 245, 246, 247, 248, 249, 0, 0, 0, 0, 0, 207, 208, 0, 0, 474, 475, 712, 713, 0, 0, 251, 0, 0, 207, 208, 201, 202, 714, 715, 716, 0, 0, 0, 251, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 717, 0, 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 239, 240, 241, 242, 243, 192, 244, 205, 245, 246, 247, 248, 249, 0, 0, 0, 193, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 207, 208, 0, 15, 0, 0, 0, 0, 0, 0, 251, 16, 0, 0, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0, 0, 0, 26, 27, 28, 0, 0, 0, 29, 30, 31, 32, 33, 34, 35, 36, 37, 0, 38, 39, 40, 41, 42, 43, 44, 0, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 0, 0, 0, 0, 0, 0, 47, 48, 0, 49, 0, 50, 51, 52, 0, 0, 53, 54, 0, 55, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 61, 0, 0, 0, 0, 0, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, }; short yycheck[] = { 86, 59, 169, 136, 134, 40, 40, 144, 295, 142, 143, 395, 40, 146, 147, 148, 40, 497, 40, 40, 40, 40, 159, 160, 161, 158, 40, 40, 37, 166, 40, 328, 328, 42, 43, 40, 45, 408, 47, 40, 549, 174, 40, 547, 40, 91, 40, 402, 403, 40, 40, 545, 185, 0, 40, 185, 125, 432, 687, 313, 44, 313, 40, 40, 313, 149, 150, 257, 355, 44, 399, 44, 359, 44, 258, 58, 44, 44, 433, 44, 40, 40, 37, 167, 93, 259, 44, 42, 43, 58, 45, 46, 47, 44, 44, 123, 44, 40, 258, 157, 361, 185, 262, 263, 152, 153, 154, 324, 241, 242, 259, 244, 37, 123, 58, 589, 37, 42, 43, 177, 45, 42, 47, 313, 385, 183, 47, 185, 385, 313, 37, 385, 40, 385, 301, 42, 385, 44, 40, 313, 47, 125, 396, 397, 309, 123, 620, 91, 313, 40, 125, 385, 125, 313, 125, 239, 240, 125, 125, 385, 125, 641, 396, 397, 313, 313, 795, 125, 93, 41, 58, 43, 320, 45, 125, 125, 41, 125, 37, 44, 44, 661, 0, 42, 43, 37, 45, 308, 47, 325, 42, 43, 313, 45, 703, 47, 37, 701, 328, 91, 41, 42, 43, 40, 45, 699, 47, 41, 258, 346, 44, 37, 262, 263, 260, 41, 42, 43, 44, 45, 311, 47, 313, 258, 361, 358, 393, 360, 58, 257, 313, 368, 315, 316, 521, 372, 258, 370, 371, 376, 262, 93, 300, 58, 258, 541, 543, 257, 306, 307, 336, 309, 310, 311, 312, 313, 585, 258, 629, 58, 258, 262, 258, 396, 262, 263, 257, 622, 258, 327, 328, 257, 262, 263, 343, 650, 345, 407, 298, 257, 257, 339, 41, 58, 421, 44, 123, 58, 41, 313, 348, 44, 313, 314, 313, 353, 58, 257, 257, 357, 313, 314, 58, 313, 317, 318, 58, 125, 313, 58, 308, 309, 310, 58, 257, 313, 314, 313, 314, 313, 378, 454, 269, 270, 58, 323, 264, 265, 266, 267, 58, 464, 465, 58, 621, 313, 384, 269, 270, 337, 338, 58, 390, 391, 392, 286, 287, 288, 346, 347, 348, 349, 350, 313, 313, 257, 318, 319, 367, 394, 395, 419, 58, 376, 362, 845, 364, 58, 402, 403, 313, 385, 394, 395, 0, 385, 404, 405, 376, 763, 394, 395, 396, 397, 312, 313, 341, 400, 401, 385, 298, 390, 391, 394, 395, 430, 406, 407, 394, 395, 396, 397, 400, 401, 58, 313, 314, 385, 430, 539, 697, 313, 38, 404, 405, 41, 430, 43, 44, 45, 46, 258, 313, 314, 58, 385, 385, 317, 318, 430, 408, 409, 430, 343, 430, 345, 58, 274, 58, 276, 58, 58, 385, 280, 281, 282, 406, 407, 615, 408, 409, 269, 270, 590, 58, 58, 58, 594, 58, 58, 597, 598, 58, 58, 37, 91, 524, 93, 376, 42, 43, 58, 45, 58, 47, 58, 313, 314, 58, 537, 647, 648, 649, 385, 58, 376, 58, 617, 387, 40, 58, 61, 400, 401, 44, 332, 37, 123, 40, 125, 61, 42, 43, 790, 45, 91, 47, 40, 123, 400, 401, 46, 91, 800, 91, 44, 646, 44, 37, 44, 93, 384, 652, 42, 43, 343, 45, 345, 47, 258, 40, 0, 91, 257, 592, 593, 37, 374, 596, 376, 44, 42, 43, 91, 45, 37, 47, 44, 385, 257, 42, 43, 93, 45, 841, 47, 44, 394, 395, 396, 397, 91, 44, 400, 401, 402, 403, 44, 44, 38, 44, 38, 41, 37, 43, 44, 45, 46, 42, 43, 40, 45, 40, 47, 40, 40, 716, 754, 40, 258, 37, 91, 93, 430, 41, 42, 43, 655, 45, 44, 47, 93, 44, 44, 40, 258, 37, 665, 775, 776, 777, 42, 43, 37, 45, 44, 47, 41, 42, 43, 44, 45, 91, 47, 93, 37, 44, 260, 44, 93, 42, 43, 44, 45, 260, 47, 44, 258, 44, 44, 44, 44, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 123, 44, 125, 283, 284, 285, 258, 44, 93, 289, 290, 291, 292, 293, 294, 295, 296, 297, 44, 299, 300, 301, 302, 303, 304, 305, 738, 307, 44, 395, 44, 397, 93, 399, 44, 401, 41, 403, 41, 405, 44, 407, 322, 409, 44, 411, 58, 58, 257, 329, 330, 58, 332, 93, 334, 335, 336, 58, 257, 339, 340, 341, 342, 343, 344, 345, 0, 854, 44, 37, 386, 783, 44, 860, 42, 43, 44, 45, 44, 47, 44, 259, 312, 363, 44, 365, 44, 367, 382, 312, 830, 41, 44, 44, 93, 258, 321, 44, 44, 44, 321, 44, 125, 843, 257, 44, 41, 387, 388, 258, 44, 44, 385, 44, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 124, 44, 385, 41, 44, 260, 91, 44, 44, 44, 44, 44, 44, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, 258, 93, 283, 284, 285, 91, 44, 44, 289, 290, 291, 292, 293, 294, 295, 296, 297, 44, 299, 300, 301, 302, 303, 304, 305, 258, 307, 258, 44, 258, 44, 123, 44, 125, 44, 312, 44, 258, 44, 44, 331, 322, 44, 257, 41, 46, 44, 58, 329, 330, 258, 332, 40, 334, 335, 336, 41, 44, 339, 340, 341, 342, 343, 344, 345, 388, 257, 386, 41, 58, 41, 394, 58, 396, 58, 398, 58, 400, 58, 402, 44, 404, 363, 406, 365, 408, 367, 410, 259, 44, 312, 44, 40, 44, 258, 321, 321, 0, 258, 44, 44, 385, 44, 44, 123, 44, 387, 388, 44, 41, 41, 41, 41, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 258, 44, 93, 44, 38, 388, 258, 41, 258, 44, 44, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 44, 44, 258, 258, 44, 41, 58, 58, 260, 259, 58, 58, 257, 286, 41, 44, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, 44, 258, 283, 284, 285, 41, 44, 41, 289, 290, 291, 292, 293, 294, 295, 296, 297, 41, 299, 300, 301, 302, 303, 304, 305, 44, 307, 261, 58, 125, 44, 41, 44, 125, 258, 44, 313, 258, 258, 124, 58, 322, 259, 286, 41, 258, 41, 41, 329, 330, 41, 332, 44, 334, 335, 336, 41, 383, 339, 340, 41, 342, 343, 344, 345, 41, 44, 44, 41, 44, 0, 0, 41, 41, 386, 125, 93, 41, 44, 41, 123, 123, 363, 41, 365, 125, 677, 794, 602, 652, 761, 191, 820, 449, 48, 832, 248, 0, 442, 54, 859, 168, 419, 753, 395, 6, 387, 388, 319, 431, 766, 163, 138, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 340, 629, 454, -1, -1, -1, -1, 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, 44, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 123, -1, 125, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, 44, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, 312, 313, 314, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, 44, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 369, 370, 371, 372, 373, -1, 375, 376, 377, 378, 379, 380, 381, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, 260, -1, -1, -1, 410, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 123, -1, 125, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, 44, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, 314, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 369, 370, 371, 372, 373, -1, 375, 376, 377, 378, 379, 380, 381, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, 400, 401, -1, -1, -1, -1, 260, -1, -1, -1, 410, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 123, -1, 125, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, 125, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, 331, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 123, -1, 125, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, 123, -1, 125, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, 125, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, 125, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, 125, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, 125, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, 125, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, 125, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 91, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 91, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, 125, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 91, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, 343, 344, 345, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 91, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, 260, -1, -1, 40, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, -1, 344, -1, -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, -1, -1, -1, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, 257, -1, -1, -1, 261, -1, -1, -1, -1, -1, -1, -1, 322, 257, 258, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, 313, 314, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 313, 314, -1, -1, -1, -1, -1, -1, 387, 388, 91, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, -1, 258, -1, -1, -1, -1, -1, -1, -1, -1, 369, 370, 371, 372, 373, -1, 375, 376, 377, 378, 379, 380, 381, 369, 370, 371, 372, 373, -1, 375, 376, 377, 378, 379, 380, 381, -1, -1, -1, -1, -1, 400, 401, -1, -1, 404, 405, 315, 316, -1, -1, 410, -1, -1, 400, 401, 313, 314, 326, 327, 328, -1, -1, -1, 410, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 349, -1, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 369, 370, 371, 372, 373, 385, 375, 376, 377, 378, 379, 380, 381, -1, -1, -1, 396, 397, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 400, 401, -1, 260, -1, -1, -1, -1, -1, -1, 410, 268, -1, -1, 271, 272, 273, 274, 275, 276, 277, 278, 279, -1, -1, -1, 283, 284, 285, -1, -1, -1, 289, 290, 291, 292, 293, 294, 295, 296, 297, -1, 299, 300, 301, 302, 303, 304, 305, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, 329, 330, -1, 332, -1, 334, 335, 336, -1, -1, 339, 340, -1, 342, -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, -1, 365, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 387, 388, -1, -1, -1, -1, -1, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, }; #define YYFINAL 3 #ifndef YYDEBUG #define YYDEBUG 0 #endif #define YYMAXTOKEN 430 #if YYDEBUG char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,0,0,0, 0,0,0,0,"':'",0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,"'['",0,"']'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'", "'|'","'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"CHAR","INTEGER","BOOLEAN","PERCENT", "SPERCENT","MINUS_INTEGER","PLUS_INTEGER","MAZE_GRID_ID","SOLID_FILL_ID", "MINES_ID","ROGUELEV_ID","MESSAGE_ID","MAZE_ID","LEVEL_ID","LEV_INIT_ID", "GEOMETRY_ID","NOMAP_ID","OBJECT_ID","COBJECT_ID","MONSTER_ID","TRAP_ID", "DOOR_ID","DRAWBRIDGE_ID","object_ID","monster_ID","terrain_ID","MAZEWALK_ID", "WALLIFY_ID","REGION_ID","FILLING","IRREGULAR","JOINED","ALTAR_ID","LADDER_ID", "STAIR_ID","NON_DIGGABLE_ID","NON_PASSWALL_ID","ROOM_ID","PORTAL_ID", "TELEPRT_ID","BRANCH_ID","LEV","MINERALIZE_ID","CORRIDOR_ID","GOLD_ID", "ENGRAVING_ID","FOUNTAIN_ID","POOL_ID","SINK_ID","NONE","RAND_CORRIDOR_ID", "DOOR_STATE","LIGHT_STATE","CURSE_TYPE","ENGRAVING_TYPE","DIRECTION", "RANDOM_TYPE","RANDOM_TYPE_BRACKET","A_REGISTER","ALIGNMENT","LEFT_OR_RIGHT", "CENTER","TOP_OR_BOT","ALTAR_TYPE","UP_OR_DOWN","SUBROOM_ID","NAME_ID", "FLAGS_ID","FLAG_TYPE","MON_ATTITUDE","MON_ALERTNESS","MON_APPEARANCE", "ROOMDOOR_ID","IF_ID","ELSE_ID","TERRAIN_ID","HORIZ_OR_VERT", "REPLACE_TERRAIN_ID","EXIT_ID","SHUFFLE_ID","QUANTITY_ID","BURIED_ID","LOOP_ID", "FOR_ID","TO_ID","SWITCH_ID","CASE_ID","BREAK_ID","DEFAULT_ID","ERODED_ID", "TRAPPED_STATE","RECHARGED_ID","INVIS_ID","GREASED_ID","FEMALE_ID", "CANCELLED_ID","REVIVED_ID","AVENGE_ID","FLEEING_ID","BLINDED_ID", "PARALYZED_ID","STUNNED_ID","CONFUSED_ID","SEENTRAPS_ID","ALL_ID","MONTYPE_ID", "GRAVE_ID","ERODEPROOF_ID","FUNCTION_ID","MSG_OUTPUT_TYPE","COMPARE_TYPE", "UNKNOWN_TYPE","rect_ID","fillrect_ID","line_ID","randline_ID","grow_ID", "selection_ID","flood_ID","rndcoord_ID","circle_ID","ellipse_ID","filter_ID", "complement_ID","gradient_ID","GRADIENT_TYPE","LIMITED","HUMIDITY_TYPE", "STRING","MAP_ID","NQSTRING","VARSTRING","CFUNC","CFUNC_INT","CFUNC_STR", "CFUNC_COORD","CFUNC_REGION","VARSTRING_INT","VARSTRING_INT_ARRAY", "VARSTRING_STRING","VARSTRING_STRING_ARRAY","VARSTRING_VAR", "VARSTRING_VAR_ARRAY","VARSTRING_COORD","VARSTRING_COORD_ARRAY", "VARSTRING_REGION","VARSTRING_REGION_ARRAY","VARSTRING_MAPCHAR", "VARSTRING_MAPCHAR_ARRAY","VARSTRING_MONST","VARSTRING_MONST_ARRAY", "VARSTRING_OBJ","VARSTRING_OBJ_ARRAY","VARSTRING_SEL","VARSTRING_SEL_ARRAY", "METHOD_INT","METHOD_INT_ARRAY","METHOD_STRING","METHOD_STRING_ARRAY", "METHOD_VAR","METHOD_VAR_ARRAY","METHOD_COORD","METHOD_COORD_ARRAY", "METHOD_REGION","METHOD_REGION_ARRAY","METHOD_MAPCHAR","METHOD_MAPCHAR_ARRAY", "METHOD_MONST","METHOD_MONST_ARRAY","METHOD_OBJ","METHOD_OBJ_ARRAY", "METHOD_SEL","METHOD_SEL_ARRAY","DICE", }; char *yyrule[] = { "$accept : file", "file :", "file : levels", "levels : level", "levels : level levels", "level : level_def flags levstatements", "level_def : LEVEL_ID ':' STRING", "level_def : MAZE_ID ':' STRING ',' mazefiller", "mazefiller : RANDOM_TYPE", "mazefiller : CHAR", "lev_init : LEV_INIT_ID ':' SOLID_FILL_ID ',' terrain_type", "lev_init : LEV_INIT_ID ':' MAZE_GRID_ID ',' CHAR", "lev_init : LEV_INIT_ID ':' ROGUELEV_ID", "lev_init : LEV_INIT_ID ':' MINES_ID ',' CHAR ',' CHAR ',' BOOLEAN ',' BOOLEAN ',' light_state ',' walled opt_fillchar", "opt_limited :", "opt_limited : ',' LIMITED", "opt_coord_or_var :", "opt_coord_or_var : ',' coord_or_var", "opt_fillchar :", "opt_fillchar : ',' CHAR", "walled : BOOLEAN", "walled : RANDOM_TYPE", "flags :", "flags : FLAGS_ID ':' flag_list", "flag_list : FLAG_TYPE ',' flag_list", "flag_list : FLAG_TYPE", "levstatements :", "levstatements : levstatement levstatements", "stmt_block : '{' levstatements '}'", "levstatement : message", "levstatement : lev_init", "levstatement : altar_detail", "levstatement : grave_detail", "levstatement : branch_region", "levstatement : corridor", "levstatement : variable_define", "levstatement : shuffle_detail", "levstatement : diggable_detail", "levstatement : door_detail", "levstatement : drawbridge_detail", "levstatement : engraving_detail", "levstatement : mineralize", "levstatement : fountain_detail", "levstatement : gold_detail", "levstatement : switchstatement", "levstatement : forstatement", "levstatement : loopstatement", "levstatement : ifstatement", "levstatement : chancestatement", "levstatement : exitstatement", "levstatement : breakstatement", "levstatement : function_define", "levstatement : function_call", "levstatement : ladder_detail", "levstatement : map_definition", "levstatement : mazewalk_detail", "levstatement : monster_detail", "levstatement : object_detail", "levstatement : passwall_detail", "levstatement : pool_detail", "levstatement : portal_region", "levstatement : random_corridors", "levstatement : region_detail", "levstatement : room_def", "levstatement : subroom_def", "levstatement : sink_detail", "levstatement : terrain_detail", "levstatement : replace_terrain_detail", "levstatement : stair_detail", "levstatement : stair_region", "levstatement : teleprt_region", "levstatement : trap_detail", "levstatement : wallify_detail", "any_var_array : VARSTRING_INT_ARRAY", "any_var_array : VARSTRING_STRING_ARRAY", "any_var_array : VARSTRING_VAR_ARRAY", "any_var_array : VARSTRING_COORD_ARRAY", "any_var_array : VARSTRING_REGION_ARRAY", "any_var_array : VARSTRING_MAPCHAR_ARRAY", "any_var_array : VARSTRING_MONST_ARRAY", "any_var_array : VARSTRING_OBJ_ARRAY", "any_var_array : VARSTRING_SEL_ARRAY", "any_var : VARSTRING_INT", "any_var : VARSTRING_STRING", "any_var : VARSTRING_VAR", "any_var : VARSTRING_COORD", "any_var : VARSTRING_REGION", "any_var : VARSTRING_MAPCHAR", "any_var : VARSTRING_MONST", "any_var : VARSTRING_OBJ", "any_var : VARSTRING_SEL", "any_var_or_arr : any_var_array", "any_var_or_arr : any_var", "any_var_or_arr : VARSTRING", "any_var_or_unk : VARSTRING", "any_var_or_unk : any_var", "shuffle_detail : SHUFFLE_ID ':' any_var_array", "variable_define : any_var_or_arr '=' math_expr_var", "variable_define : any_var_or_arr '=' selection_ID ':' ter_selection", "variable_define : any_var_or_arr '=' string_expr", "variable_define : any_var_or_arr '=' terrainid ':' mapchar_or_var", "variable_define : any_var_or_arr '=' monsterid ':' monster_or_var", "variable_define : any_var_or_arr '=' objectid ':' object_or_var", "variable_define : any_var_or_arr '=' coord_or_var", "variable_define : any_var_or_arr '=' region_or_var", "variable_define : any_var_or_arr '=' '{' integer_list '}'", "variable_define : any_var_or_arr '=' '{' encodecoord_list '}'", "variable_define : any_var_or_arr '=' '{' encoderegion_list '}'", "variable_define : any_var_or_arr '=' terrainid ':' '{' mapchar_list '}'", "variable_define : any_var_or_arr '=' monsterid ':' '{' encodemonster_list '}'", "variable_define : any_var_or_arr '=' objectid ':' '{' encodeobj_list '}'", "variable_define : any_var_or_arr '=' '{' string_list '}'", "encodeobj_list : encodeobj", "encodeobj_list : encodeobj_list ',' encodeobj", "encodemonster_list : encodemonster", "encodemonster_list : encodemonster_list ',' encodemonster", "mapchar_list : mapchar", "mapchar_list : mapchar_list ',' mapchar", "encoderegion_list : encoderegion", "encoderegion_list : encoderegion_list ',' encoderegion", "encodecoord_list : encodecoord", "encodecoord_list : encodecoord_list ',' encodecoord", "integer_list : math_expr_var", "integer_list : integer_list ',' math_expr_var", "string_list : string_expr", "string_list : string_list ',' string_expr", "$$1 :", "$$2 :", "function_define : FUNCTION_ID NQSTRING '(' $$1 func_params_list ')' $$2 stmt_block", "function_call : NQSTRING '(' func_call_params_list ')'", "exitstatement : EXIT_ID", "opt_percent :", "opt_percent : PERCENT", "comparestmt : PERCENT", "comparestmt : '[' math_expr_var COMPARE_TYPE math_expr_var ']'", "comparestmt : '[' math_expr_var ']'", "$$3 :", "$$4 :", "switchstatement : SWITCH_ID $$3 '[' integer_or_var ']' $$4 '{' switchcases '}'", "switchcases :", "switchcases : switchcase switchcases", "$$5 :", "switchcase : CASE_ID all_integers ':' $$5 levstatements", "$$6 :", "switchcase : DEFAULT_ID ':' $$6 levstatements", "breakstatement : BREAK_ID", "for_to_span : '.' '.'", "for_to_span : TO_ID", "forstmt_start : FOR_ID any_var_or_unk '=' math_expr_var for_to_span math_expr_var", "$$7 :", "forstatement : forstmt_start $$7 stmt_block", "$$8 :", "loopstatement : LOOP_ID '[' integer_or_var ']' $$8 stmt_block", "$$9 :", "chancestatement : comparestmt ':' $$9 levstatement", "$$10 :", "ifstatement : IF_ID comparestmt $$10 if_ending", "if_ending : stmt_block", "$$11 :", "if_ending : stmt_block $$11 ELSE_ID stmt_block", "message : MESSAGE_ID ':' string_expr", "random_corridors : RAND_CORRIDOR_ID", "random_corridors : RAND_CORRIDOR_ID ':' all_integers", "random_corridors : RAND_CORRIDOR_ID ':' RANDOM_TYPE", "corridor : CORRIDOR_ID ':' corr_spec ',' corr_spec", "corridor : CORRIDOR_ID ':' corr_spec ',' all_integers", "corr_spec : '(' INTEGER ',' DIRECTION ',' door_pos ')'", "room_begin : room_type opt_percent ',' light_state", "$$12 :", "subroom_def : SUBROOM_ID ':' room_begin ',' subroom_pos ',' room_size optroomregionflags $$12 stmt_block", "$$13 :", "room_def : ROOM_ID ':' room_begin ',' room_pos ',' room_align ',' room_size optroomregionflags $$13 stmt_block", "roomfill :", "roomfill : ',' BOOLEAN", "room_pos : '(' INTEGER ',' INTEGER ')'", "room_pos : RANDOM_TYPE", "subroom_pos : '(' INTEGER ',' INTEGER ')'", "subroom_pos : RANDOM_TYPE", "room_align : '(' h_justif ',' v_justif ')'", "room_align : RANDOM_TYPE", "room_size : '(' INTEGER ',' INTEGER ')'", "room_size : RANDOM_TYPE", "door_detail : ROOMDOOR_ID ':' secret ',' door_state ',' door_wall ',' door_pos", "door_detail : DOOR_ID ':' door_state ',' ter_selection", "secret : BOOLEAN", "secret : RANDOM_TYPE", "door_wall : dir_list", "door_wall : RANDOM_TYPE", "dir_list : DIRECTION", "dir_list : DIRECTION '|' dir_list", "door_pos : INTEGER", "door_pos : RANDOM_TYPE", "map_definition : NOMAP_ID", "map_definition : GEOMETRY_ID ':' h_justif ',' v_justif roomfill MAP_ID", "map_definition : GEOMETRY_ID ':' coord_or_var roomfill MAP_ID", "h_justif : LEFT_OR_RIGHT", "h_justif : CENTER", "v_justif : TOP_OR_BOT", "v_justif : CENTER", "monster_detail : MONSTER_ID ':' monster_desc", "$$14 :", "monster_detail : MONSTER_ID ':' monster_desc $$14 stmt_block", "monster_desc : monster_or_var ',' coord_or_var monster_infos", "monster_infos :", "monster_infos : monster_infos ',' monster_info", "monster_info : string_expr", "monster_info : MON_ATTITUDE", "monster_info : MON_ALERTNESS", "monster_info : alignment_prfx", "monster_info : MON_APPEARANCE string_expr", "monster_info : FEMALE_ID", "monster_info : INVIS_ID", "monster_info : CANCELLED_ID", "monster_info : REVIVED_ID", "monster_info : AVENGE_ID", "monster_info : FLEEING_ID ':' integer_or_var", "monster_info : BLINDED_ID ':' integer_or_var", "monster_info : PARALYZED_ID ':' integer_or_var", "monster_info : STUNNED_ID", "monster_info : CONFUSED_ID", "monster_info : SEENTRAPS_ID ':' seen_trap_mask", "seen_trap_mask : STRING", "seen_trap_mask : ALL_ID", "seen_trap_mask : STRING '|' seen_trap_mask", "object_detail : OBJECT_ID ':' object_desc", "$$15 :", "object_detail : COBJECT_ID ':' object_desc $$15 stmt_block", "object_desc : object_or_var object_infos", "object_infos :", "object_infos : object_infos ',' object_info", "object_info : CURSE_TYPE", "object_info : MONTYPE_ID ':' monster_or_var", "object_info : all_ints_push", "object_info : NAME_ID ':' string_expr", "object_info : QUANTITY_ID ':' integer_or_var", "object_info : BURIED_ID", "object_info : LIGHT_STATE", "object_info : ERODED_ID ':' integer_or_var", "object_info : ERODEPROOF_ID", "object_info : DOOR_STATE", "object_info : TRAPPED_STATE", "object_info : RECHARGED_ID ':' integer_or_var", "object_info : INVIS_ID", "object_info : GREASED_ID", "object_info : coord_or_var", "trap_detail : TRAP_ID ':' trap_name ',' coord_or_var", "drawbridge_detail : DRAWBRIDGE_ID ':' coord_or_var ',' DIRECTION ',' door_state", "mazewalk_detail : MAZEWALK_ID ':' coord_or_var ',' DIRECTION", "mazewalk_detail : MAZEWALK_ID ':' coord_or_var ',' DIRECTION ',' BOOLEAN opt_fillchar", "wallify_detail : WALLIFY_ID", "wallify_detail : WALLIFY_ID ':' ter_selection", "ladder_detail : LADDER_ID ':' coord_or_var ',' UP_OR_DOWN", "stair_detail : STAIR_ID ':' coord_or_var ',' UP_OR_DOWN", "stair_region : STAIR_ID ':' lev_region ',' lev_region ',' UP_OR_DOWN", "portal_region : PORTAL_ID ':' lev_region ',' lev_region ',' STRING", "teleprt_region : TELEPRT_ID ':' lev_region ',' lev_region teleprt_detail", "branch_region : BRANCH_ID ':' lev_region ',' lev_region", "teleprt_detail :", "teleprt_detail : ',' UP_OR_DOWN", "fountain_detail : FOUNTAIN_ID ':' ter_selection", "sink_detail : SINK_ID ':' ter_selection", "pool_detail : POOL_ID ':' ter_selection", "terrain_type : CHAR", "terrain_type : '(' CHAR ',' light_state ')'", "replace_terrain_detail : REPLACE_TERRAIN_ID ':' region_or_var ',' mapchar_or_var ',' mapchar_or_var ',' SPERCENT", "terrain_detail : TERRAIN_ID ':' ter_selection ',' mapchar_or_var", "diggable_detail : NON_DIGGABLE_ID ':' region_or_var", "passwall_detail : NON_PASSWALL_ID ':' region_or_var", "$$16 :", "region_detail : REGION_ID ':' region_or_var ',' light_state ',' room_type optroomregionflags $$16 region_detail_end", "region_detail_end :", "region_detail_end : stmt_block", "altar_detail : ALTAR_ID ':' coord_or_var ',' alignment ',' altar_type", "grave_detail : GRAVE_ID ':' coord_or_var ',' string_expr", "grave_detail : GRAVE_ID ':' coord_or_var ',' RANDOM_TYPE", "grave_detail : GRAVE_ID ':' coord_or_var", "gold_detail : GOLD_ID ':' math_expr_var ',' coord_or_var", "engraving_detail : ENGRAVING_ID ':' coord_or_var ',' engraving_type ',' string_expr", "mineralize : MINERALIZE_ID ':' integer_or_var ',' integer_or_var ',' integer_or_var ',' integer_or_var", "mineralize : MINERALIZE_ID", "trap_name : STRING", "trap_name : RANDOM_TYPE", "room_type : STRING", "room_type : RANDOM_TYPE", "optroomregionflags :", "optroomregionflags : ',' roomregionflags", "roomregionflags : roomregionflag", "roomregionflags : roomregionflag ',' roomregionflags", "roomregionflag : FILLING", "roomregionflag : IRREGULAR", "roomregionflag : JOINED", "door_state : DOOR_STATE", "door_state : RANDOM_TYPE", "light_state : LIGHT_STATE", "light_state : RANDOM_TYPE", "alignment : ALIGNMENT", "alignment : a_register", "alignment : RANDOM_TYPE", "alignment_prfx : ALIGNMENT", "alignment_prfx : a_register", "alignment_prfx : A_REGISTER ':' RANDOM_TYPE", "altar_type : ALTAR_TYPE", "altar_type : RANDOM_TYPE", "a_register : A_REGISTER '[' INTEGER ']'", "string_or_var : STRING", "string_or_var : VARSTRING_STRING", "string_or_var : VARSTRING_STRING_ARRAY '[' math_expr_var ']'", "integer_or_var : math_expr_var", "coord_or_var : encodecoord", "coord_or_var : rndcoord_ID '(' ter_selection ')'", "coord_or_var : VARSTRING_COORD", "coord_or_var : VARSTRING_COORD_ARRAY '[' math_expr_var ']'", "encodecoord : '(' INTEGER ',' INTEGER ')'", "encodecoord : RANDOM_TYPE", "encodecoord : RANDOM_TYPE_BRACKET humidity_flags ']'", "humidity_flags : HUMIDITY_TYPE", "humidity_flags : HUMIDITY_TYPE ',' humidity_flags", "region_or_var : encoderegion", "region_or_var : VARSTRING_REGION", "region_or_var : VARSTRING_REGION_ARRAY '[' math_expr_var ']'", "encoderegion : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'", "mapchar_or_var : mapchar", "mapchar_or_var : VARSTRING_MAPCHAR", "mapchar_or_var : VARSTRING_MAPCHAR_ARRAY '[' math_expr_var ']'", "mapchar : CHAR", "mapchar : '(' CHAR ',' light_state ')'", "monster_or_var : encodemonster", "monster_or_var : VARSTRING_MONST", "monster_or_var : VARSTRING_MONST_ARRAY '[' math_expr_var ']'", "encodemonster : STRING", "encodemonster : CHAR", "encodemonster : '(' CHAR ',' STRING ')'", "encodemonster : RANDOM_TYPE", "object_or_var : encodeobj", "object_or_var : VARSTRING_OBJ", "object_or_var : VARSTRING_OBJ_ARRAY '[' math_expr_var ']'", "encodeobj : STRING", "encodeobj : CHAR", "encodeobj : '(' CHAR ',' STRING ')'", "encodeobj : RANDOM_TYPE", "string_expr : string_or_var", "string_expr : string_expr '.' string_or_var", "math_expr_var : INTEGER", "math_expr_var : dice", "math_expr_var : '(' MINUS_INTEGER ')'", "math_expr_var : VARSTRING_INT", "math_expr_var : VARSTRING_INT_ARRAY '[' math_expr_var ']'", "math_expr_var : math_expr_var '+' math_expr_var", "math_expr_var : math_expr_var '-' math_expr_var", "math_expr_var : math_expr_var '*' math_expr_var", "math_expr_var : math_expr_var '/' math_expr_var", "math_expr_var : math_expr_var '%' math_expr_var", "math_expr_var : '(' math_expr_var ')'", "func_param_type : CFUNC_INT", "func_param_type : CFUNC_STR", "func_param_part : any_var_or_arr ':' func_param_type", "func_param_list : func_param_part", "func_param_list : func_param_list ',' func_param_part", "func_params_list :", "func_params_list : func_param_list", "func_call_param_part : math_expr_var", "func_call_param_part : string_expr", "func_call_param_list : func_call_param_part", "func_call_param_list : func_call_param_list ',' func_call_param_part", "func_call_params_list :", "func_call_params_list : func_call_param_list", "ter_selection_x : coord_or_var", "ter_selection_x : rect_ID region_or_var", "ter_selection_x : fillrect_ID region_or_var", "ter_selection_x : line_ID coord_or_var ',' coord_or_var", "ter_selection_x : randline_ID coord_or_var ',' coord_or_var ',' math_expr_var", "ter_selection_x : grow_ID '(' ter_selection ')'", "ter_selection_x : grow_ID '(' dir_list ',' ter_selection ')'", "ter_selection_x : filter_ID '(' SPERCENT ',' ter_selection ')'", "ter_selection_x : filter_ID '(' ter_selection ',' ter_selection ')'", "ter_selection_x : filter_ID '(' mapchar_or_var ',' ter_selection ')'", "ter_selection_x : flood_ID coord_or_var", "ter_selection_x : circle_ID '(' coord_or_var ',' math_expr_var ')'", "ter_selection_x : circle_ID '(' coord_or_var ',' math_expr_var ',' FILLING ')'", "ter_selection_x : ellipse_ID '(' coord_or_var ',' math_expr_var ',' math_expr_var ')'", "ter_selection_x : ellipse_ID '(' coord_or_var ',' math_expr_var ',' math_expr_var ',' FILLING ')'", "ter_selection_x : gradient_ID '(' GRADIENT_TYPE ',' '(' math_expr_var '-' math_expr_var opt_limited ')' ',' coord_or_var opt_coord_or_var ')'", "ter_selection_x : complement_ID ter_selection_x", "ter_selection_x : VARSTRING_SEL", "ter_selection_x : '(' ter_selection ')'", "ter_selection : ter_selection_x", "ter_selection : ter_selection_x '&' ter_selection", "dice : DICE", "all_integers : MINUS_INTEGER", "all_integers : PLUS_INTEGER", "all_integers : INTEGER", "all_ints_push : MINUS_INTEGER", "all_ints_push : PLUS_INTEGER", "all_ints_push : INTEGER", "all_ints_push : dice", "objectid : object_ID", "objectid : OBJECT_ID", "monsterid : monster_ID", "monsterid : MONSTER_ID", "terrainid : terrain_ID", "terrainid : TERRAIN_ID", "engraving_type : ENGRAVING_TYPE", "engraving_type : RANDOM_TYPE", "lev_region : region", "lev_region : LEV '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'", "region : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'", }; #endif #ifdef YYSTACKSIZE #undef YYMAXDEPTH #define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else #define YYSTACKSIZE 500 #define YYMAXDEPTH 500 #endif #endif int yydebug; int yynerrs; int yyerrflag; int yychar; short *yyssp; YYSTYPE *yyvsp; YYSTYPE yyval; YYSTYPE yylval; short yyss[YYSTACKSIZE]; YYSTYPE yyvs[YYSTACKSIZE]; #define yystacksize YYSTACKSIZE /*lev_comp.y*/ #define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept #define YYERROR goto yyerrlab int yyparse() { register int yym, yyn, yystate; #if YYDEBUG register char *yys; extern char *getenv(); if ((yys = getenv("YYDEBUG")) != 0) { yyn = *yys; if (yyn >= '0' && yyn <= '9') yydebug = yyn - '0'; } #endif yynerrs = 0; yyerrflag = 0; yychar = (-1); yyssp = yyss; yyvsp = yyvs; *yyssp = yystate = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif } if ((yyn = yysindex[yystate]) != 0 && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; yychar = (-1); if (yyerrflag > 0) --yyerrflag; goto yyloop; } if ((yyn = yyrindex[yystate]) != 0 && (yyn += yychar) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yychar) { yyn = yytable[yyn]; goto yyreduce; } if (yyerrflag) goto yyinrecovery; goto yynewerror; yynewerror: yyerror("syntax error"); goto yyerrlab; yyerrlab: ++yynerrs; yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { if ((yyn = yysindex[*yyssp]) != 0 && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } *++yyssp = yystate = yytable[yyn]; *++yyvsp = yylval; goto yyloop; } else { #if YYDEBUG if (yydebug) printf("%sdebug: error recovery discarding state %d\n", YYPREFIX, *yyssp); #endif if (yyssp <= yyss) goto yyabort; --yyssp; --yyvsp; } } } else { if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif yychar = (-1); goto yyloop; } yyreduce: #if YYDEBUG if (yydebug) printf("%sdebug: state %d, reducing by rule %d (%s)\n", YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; yyval = yyvsp[1-yym]; switch (yyn) { case 5: { if (fatal_error > 0) { (void) fprintf(stderr, "%s: %d errors detected for level \"%s\". No output created!\n", fname, fatal_error, yyvsp[-2].map); fatal_error = 0; got_errors++; } else if (!got_errors) { if (!write_level_file(yyvsp[-2].map, splev)) { lc_error("Can't write output file for '%s'!", yyvsp[-2].map); exit(EXIT_FAILURE); } } Free(yyvsp[-2].map); Free(splev); splev = NULL; vardef_free_all(variable_definitions); variable_definitions = NULL; } break; case 6: { start_level_def(&splev, yyvsp[0].map); yyval.map = yyvsp[0].map; } break; case 7: { start_level_def(&splev, yyvsp[-2].map); if (yyvsp[0].i == -1) { add_opvars(splev, "iiiiiiiio", VA_PASS9(LVLINIT_MAZEGRID,HWALL,0,0, 0,0,0,0, SPO_INITLEVEL)); } else { long bg = what_map_char((char) yyvsp[0].i); add_opvars(splev, "iiiiiiiio", VA_PASS9(LVLINIT_SOLIDFILL, bg, 0,0, 0,0,0,0, SPO_INITLEVEL)); } add_opvars(splev, "io", VA_PASS2(MAZELEVEL, SPO_LEVEL_FLAGS)); max_x_map = COLNO-1; max_y_map = ROWNO; yyval.map = yyvsp[-2].map; } break; case 8: { yyval.i = -1; } break; case 9: { yyval.i = what_map_char((char) yyvsp[0].i); } break; case 10: { long filling = yyvsp[0].terr.ter; if (filling == INVALID_TYPE || filling >= MAX_TYPE) lc_error("INIT_MAP: Invalid fill char type."); add_opvars(splev, "iiiiiiiio", LVLINIT_SOLIDFILL,filling,0,(long)yyvsp[0].terr.lit, 0,0,0,0, SPO_INITLEVEL); max_x_map = COLNO-1; max_y_map = ROWNO; } break; case 11: { long filling = what_map_char((char) yyvsp[0].i); if (filling == INVALID_TYPE || filling >= MAX_TYPE) lc_error("INIT_MAP: Invalid fill char type."); add_opvars(splev, "iiiiiiiio", VA_PASS9(LVLINIT_MAZEGRID,filling,0,0, 0,0,0,0, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; } break; case 12: { add_opvars(splev, "iiiiiiiio", VA_PASS9(LVLINIT_ROGUE,0,0,0, 0,0,0,0, SPO_INITLEVEL)); } break; case 13: { long fg = what_map_char((char) yyvsp[-11].i); long bg = what_map_char((char) yyvsp[-9].i); long smoothed = yyvsp[-7].i; long joined = yyvsp[-5].i; long lit = yyvsp[-3].i; long walled = yyvsp[-1].i; long filling = yyvsp[0].i; if (fg == INVALID_TYPE || fg >= MAX_TYPE) lc_error("INIT_MAP: Invalid foreground type."); if (bg == INVALID_TYPE || bg >= MAX_TYPE) lc_error("INIT_MAP: Invalid background type."); if (joined && fg != CORR && fg != ROOM) lc_error("INIT_MAP: Invalid foreground type for joined map."); if (filling == INVALID_TYPE) lc_error("INIT_MAP: Invalid fill char type."); add_opvars(splev, "iiiiiiiio", VA_PASS9(LVLINIT_MINES,filling,walled,lit, joined,smoothed,bg,fg, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; } break; case 14: { yyval.i = 0; } break; case 15: { yyval.i = yyvsp[0].i; } break; case 16: { add_opvars(splev, "o", VA_PASS1(SPO_COPY)); yyval.i = 0; } break; case 17: { yyval.i = 1; } break; case 18: { yyval.i = -1; } break; case 19: { yyval.i = what_map_char((char) yyvsp[0].i); } break; case 22: { add_opvars(splev, "io", VA_PASS2(0, SPO_LEVEL_FLAGS)); } break; case 23: { add_opvars(splev, "io", VA_PASS2(yyvsp[0].i, SPO_LEVEL_FLAGS)); } break; case 24: { yyval.i = (yyvsp[-2].i | yyvsp[0].i); } break; case 25: { yyval.i = yyvsp[0].i; } break; case 26: { yyval.i = 0; } break; case 27: { yyval.i = 1 + yyvsp[0].i; } break; case 28: { yyval.i = yyvsp[-1].i; } break; case 96: { struct lc_vardefs *vd; if ((vd = vardef_defined(variable_definitions, yyvsp[0].map, 1))) { if (!(vd->var_type & SPOVAR_ARRAY)) lc_error("Trying to shuffle non-array variable '%s'", yyvsp[0].map); } else lc_error("Trying to shuffle undefined variable '%s'", yyvsp[0].map); add_opvars(splev, "so", VA_PASS2(yyvsp[0].map, SPO_SHUFFLE_ARRAY)); Free(yyvsp[0].map); } break; case 97: { variable_definitions = add_vardef_type(variable_definitions, yyvsp[-2].map, SPOVAR_INT); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT)); Free(yyvsp[-2].map); } break; case 98: { variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_SEL); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); } break; case 99: { variable_definitions = add_vardef_type(variable_definitions, yyvsp[-2].map, SPOVAR_STRING); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT)); Free(yyvsp[-2].map); } break; case 100: { variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_MAPCHAR); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); } break; case 101: { variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_MONST); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); } break; case 102: { variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_OBJ); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); } break; case 103: { variable_definitions = add_vardef_type(variable_definitions, yyvsp[-2].map, SPOVAR_COORD); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT)); Free(yyvsp[-2].map); } break; case 104: { variable_definitions = add_vardef_type(variable_definitions, yyvsp[-2].map, SPOVAR_REGION); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT)); Free(yyvsp[-2].map); } break; case 105: { long n_items = yyvsp[-1].i; variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_INT|SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); } break; case 106: { long n_items = yyvsp[-1].i; variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_COORD|SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); } break; case 107: { long n_items = yyvsp[-1].i; variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_REGION|SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); } break; case 108: { long n_items = yyvsp[-1].i; variable_definitions = add_vardef_type(variable_definitions, yyvsp[-6].map, SPOVAR_MAPCHAR|SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); Free(yyvsp[-6].map); } break; case 109: { long n_items = yyvsp[-1].i; variable_definitions = add_vardef_type(variable_definitions, yyvsp[-6].map, SPOVAR_MONST|SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); Free(yyvsp[-6].map); } break; case 110: { long n_items = yyvsp[-1].i; variable_definitions = add_vardef_type(variable_definitions, yyvsp[-6].map, SPOVAR_OBJ|SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); Free(yyvsp[-6].map); } break; case 111: { long n_items = yyvsp[-1].i; variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_STRING|SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); } break; case 112: { add_opvars(splev, "O", VA_PASS1(yyvsp[0].i)); yyval.i = 1; } break; case 113: { add_opvars(splev, "O", VA_PASS1(yyvsp[0].i)); yyval.i = 1 + yyvsp[-2].i; } break; case 114: { add_opvars(splev, "M", VA_PASS1(yyvsp[0].i)); yyval.i = 1; } break; case 115: { add_opvars(splev, "M", VA_PASS1(yyvsp[0].i)); yyval.i = 1 + yyvsp[-2].i; } break; case 116: { add_opvars(splev, "m", VA_PASS1(yyvsp[0].i)); yyval.i = 1; } break; case 117: { add_opvars(splev, "m", VA_PASS1(yyvsp[0].i)); yyval.i = 1 + yyvsp[-2].i; } break; case 118: { yyval.i = 1; } break; case 119: { yyval.i = 1 + yyvsp[-2].i; } break; case 120: { add_opvars(splev, "c", VA_PASS1(yyvsp[0].i)); yyval.i = 1; } break; case 121: { add_opvars(splev, "c", VA_PASS1(yyvsp[0].i)); yyval.i = 1 + yyvsp[-2].i; } break; case 122: { yyval.i = 1; } break; case 123: { yyval.i = 1 + yyvsp[-2].i; } break; case 124: { yyval.i = 1; } break; case 125: { yyval.i = 1 + yyvsp[-2].i; } break; case 126: { struct lc_funcdefs *funcdef; if (in_function_definition) lc_error("Recursively defined functions not allowed (function %s).", yyvsp[-1].map); in_function_definition++; if (funcdef_defined(function_definitions, yyvsp[-1].map, 1)) lc_error("Function '%s' already defined once.", yyvsp[-1].map); funcdef = funcdef_new(-1, yyvsp[-1].map); funcdef->next = function_definitions; function_definitions = funcdef; function_splev_backup = splev; splev = &(funcdef->code); Free(yyvsp[-1].map); curr_function = funcdef; function_tmp_var_defs = variable_definitions; variable_definitions = NULL; } break; case 127: { /* nothing */ } break; case 128: { add_opvars(splev, "io", VA_PASS2(0, SPO_RETURN)); splev = function_splev_backup; in_function_definition--; curr_function = NULL; vardef_free_all(variable_definitions); variable_definitions = function_tmp_var_defs; } break; case 129: { struct lc_funcdefs *tmpfunc; tmpfunc = funcdef_defined(function_definitions, yyvsp[-3].map, 1); if (tmpfunc) { long l; long nparams = strlen( yyvsp[-1].map ); char *fparamstr = funcdef_paramtypes(tmpfunc); if (strcmp(yyvsp[-1].map, fparamstr)) { char *tmps = strdup(decode_parm_str(fparamstr)); lc_error("Function '%s' requires params '%s', got '%s' instead.", yyvsp[-3].map, tmps, decode_parm_str(yyvsp[-1].map)); Free(tmps); } Free(fparamstr); Free(yyvsp[-1].map); if (!(tmpfunc->n_called)) { /* we haven't called the function yet, so insert it in the code */ struct opvar *jmp = New(struct opvar); set_opvar_int(jmp, splev->n_opcodes+1); add_opcode(splev, SPO_PUSH, jmp); add_opcode(splev, SPO_JMP, NULL); /* we must jump past it first, then CALL it, due to RETURN. */ tmpfunc->addr = splev->n_opcodes; { /* init function parameter variables */ struct lc_funcdefs_parm *tfp = tmpfunc->params; while (tfp) { add_opvars(splev, "iso", VA_PASS3(0, tfp->name, SPO_VAR_INIT)); tfp = tfp->next; } } splev_add_from(splev, &(tmpfunc->code)); set_opvar_int(jmp, splev->n_opcodes - jmp->vardata.l); } l = tmpfunc->addr - splev->n_opcodes - 2; add_opvars(splev, "iio", VA_PASS3(nparams, l, SPO_CALL)); tmpfunc->n_called++; } else { lc_error("Function '%s' not defined.", yyvsp[-3].map); } Free(yyvsp[-3].map); } break; case 130: { add_opcode(splev, SPO_EXIT, NULL); } break; case 131: { yyval.i = 100; } break; case 132: { yyval.i = yyvsp[0].i; } break; case 133: { /* val > rn2(100) */ add_opvars(splev, "iio", VA_PASS3((long)yyvsp[0].i, 100, SPO_RN2)); yyval.i = SPO_JG; } break; case 134: { yyval.i = yyvsp[-2].i; } break; case 135: { /* boolean, explicit foo != 0 */ add_opvars(splev, "i", VA_PASS1(0)); yyval.i = SPO_JNE; } break; case 136: { is_inconstant_number = 0; } break; case 137: { struct opvar *chkjmp; if (in_switch_statement > 0) lc_error("Cannot nest switch-statements."); in_switch_statement++; n_switch_case_list = 0; switch_default_case = NULL; if (!is_inconstant_number) add_opvars(splev, "o", VA_PASS1(SPO_RN2)); is_inconstant_number = 0; chkjmp = New(struct opvar); set_opvar_int(chkjmp, splev->n_opcodes+1); switch_check_jump = chkjmp; add_opcode(splev, SPO_PUSH, chkjmp); add_opcode(splev, SPO_JMP, NULL); break_stmt_start(); } break; case 138: { struct opvar *endjump = New(struct opvar); int i; set_opvar_int(endjump, splev->n_opcodes+1); add_opcode(splev, SPO_PUSH, endjump); add_opcode(splev, SPO_JMP, NULL); set_opvar_int(switch_check_jump, splev->n_opcodes - switch_check_jump->vardata.l); for (i = 0; i < n_switch_case_list; i++) { add_opvars(splev, "oio", VA_PASS3(SPO_COPY, switch_case_value[i], SPO_CMP)); set_opvar_int(switch_case_list[i], switch_case_list[i]->vardata.l - splev->n_opcodes-1); add_opcode(splev, SPO_PUSH, switch_case_list[i]); add_opcode(splev, SPO_JE, NULL); } if (switch_default_case) { set_opvar_int(switch_default_case, switch_default_case->vardata.l - splev->n_opcodes-1); add_opcode(splev, SPO_PUSH, switch_default_case); add_opcode(splev, SPO_JMP, NULL); } set_opvar_int(endjump, splev->n_opcodes - endjump->vardata.l); break_stmt_end(splev); add_opcode(splev, SPO_POP, NULL); /* get rid of the value in stack */ in_switch_statement--; } break; case 141: { if (n_switch_case_list < MAX_SWITCH_CASES) { struct opvar *tmppush = New(struct opvar); set_opvar_int(tmppush, splev->n_opcodes); switch_case_value[n_switch_case_list] = yyvsp[-1].i; switch_case_list[n_switch_case_list++] = tmppush; } else lc_error("Too many cases in a switch."); } break; case 142: { } break; case 143: { struct opvar *tmppush = New(struct opvar); if (switch_default_case) lc_error("Switch default case already used."); set_opvar_int(tmppush, splev->n_opcodes); switch_default_case = tmppush; } break; case 144: { } break; case 145: { if (!allow_break_statements) lc_error("Cannot use BREAK outside a statement block."); else { break_stmt_new(splev, splev->n_opcodes); } } break; case 148: { char buf[256], buf2[256]; if (n_forloops >= MAX_NESTED_IFS) { lc_error("FOR: Too deeply nested loops."); n_forloops = MAX_NESTED_IFS - 1; } /* first, define a variable for the for-loop end value */ Sprintf(buf, "%s end", yyvsp[-4].map); /* the value of which is already in stack (the 2nd math_expr) */ add_opvars(splev, "iso", VA_PASS3(0, buf, SPO_VAR_INIT)); variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_INT); /* define the for-loop variable. value is in stack (1st math_expr) */ add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); /* calculate value for the loop "step" variable */ Sprintf(buf2, "%s step", yyvsp[-4].map); /* end - start */ add_opvars(splev, "vvo", VA_PASS3(buf, yyvsp[-4].map, SPO_MATH_SUB)); /* sign of that */ add_opvars(splev, "o", VA_PASS1(SPO_MATH_SIGN)); /* save the sign into the step var */ add_opvars(splev, "iso", VA_PASS3(0, buf2, SPO_VAR_INIT)); forloop_list[n_forloops].varname = strdup(yyvsp[-4].map); forloop_list[n_forloops].jmp_point = splev->n_opcodes; n_forloops++; Free(yyvsp[-4].map); } break; case 149: { /* nothing */ break_stmt_start(); } break; case 150: { char buf[256], buf2[256]; n_forloops--; Sprintf(buf, "%s step", forloop_list[n_forloops].varname); Sprintf(buf2, "%s end", forloop_list[n_forloops].varname); /* compare for-loop var to end value */ add_opvars(splev, "vvo", VA_PASS3(forloop_list[n_forloops].varname, buf2, SPO_CMP)); /* var + step */ add_opvars(splev, "vvo", VA_PASS3(buf, forloop_list[n_forloops].varname, SPO_MATH_ADD)); /* for-loop var = (for-loop var + step) */ add_opvars(splev, "iso", VA_PASS3(0, forloop_list[n_forloops].varname, SPO_VAR_INIT)); /* jump back if compared values were not equal */ add_opvars(splev, "io", VA_PASS2( forloop_list[n_forloops].jmp_point - splev->n_opcodes - 1, SPO_JNE)); Free(forloop_list[n_forloops].varname); break_stmt_end(splev); } break; case 151: { struct opvar *tmppush = New(struct opvar); if (n_if_list >= MAX_NESTED_IFS) { lc_error("LOOP: Too deeply nested conditionals."); n_if_list = MAX_NESTED_IFS - 1; } set_opvar_int(tmppush, splev->n_opcodes); if_list[n_if_list++] = tmppush; add_opvars(splev, "o", VA_PASS1(SPO_DEC)); break_stmt_start(); } break; case 152: { struct opvar *tmppush; add_opvars(splev, "oio", VA_PASS3(SPO_COPY, 0, SPO_CMP)); tmppush = (struct opvar *) if_list[--n_if_list]; set_opvar_int(tmppush, tmppush->vardata.l - splev->n_opcodes-1); add_opcode(splev, SPO_PUSH, tmppush); add_opcode(splev, SPO_JG, NULL); add_opcode(splev, SPO_POP, NULL); /* get rid of the count value in stack */ break_stmt_end(splev); } break; case 153: { struct opvar *tmppush2 = New(struct opvar); if (n_if_list >= MAX_NESTED_IFS) { lc_error("IF: Too deeply nested conditionals."); n_if_list = MAX_NESTED_IFS - 1; } add_opcode(splev, SPO_CMP, NULL); set_opvar_int(tmppush2, splev->n_opcodes+1); if_list[n_if_list++] = tmppush2; add_opcode(splev, SPO_PUSH, tmppush2); add_opcode(splev, reverse_jmp_opcode( yyvsp[-1].i ), NULL); } break; case 154: { if (n_if_list > 0) { struct opvar *tmppush; tmppush = (struct opvar *) if_list[--n_if_list]; set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l); } else lc_error("IF: Huh?! No start address?"); } break; case 155: { struct opvar *tmppush2 = New(struct opvar); if (n_if_list >= MAX_NESTED_IFS) { lc_error("IF: Too deeply nested conditionals."); n_if_list = MAX_NESTED_IFS - 1; } add_opcode(splev, SPO_CMP, NULL); set_opvar_int(tmppush2, splev->n_opcodes+1); if_list[n_if_list++] = tmppush2; add_opcode(splev, SPO_PUSH, tmppush2); add_opcode(splev, reverse_jmp_opcode( yyvsp[0].i ), NULL); } break; case 156: { /* do nothing */ } break; case 157: { if (n_if_list > 0) { struct opvar *tmppush; tmppush = (struct opvar *) if_list[--n_if_list]; set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l); } else lc_error("IF: Huh?! No start address?"); } break; case 158: { if (n_if_list > 0) { struct opvar *tmppush = New(struct opvar); struct opvar *tmppush2; set_opvar_int(tmppush, splev->n_opcodes+1); add_opcode(splev, SPO_PUSH, tmppush); add_opcode(splev, SPO_JMP, NULL); tmppush2 = (struct opvar *) if_list[--n_if_list]; set_opvar_int(tmppush2, splev->n_opcodes - tmppush2->vardata.l); if_list[n_if_list++] = tmppush; } else lc_error("IF: Huh?! No else-part address?"); } break; case 159: { if (n_if_list > 0) { struct opvar *tmppush; tmppush = (struct opvar *) if_list[--n_if_list]; set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l); } else lc_error("IF: Huh?! No end address?"); } break; case 160: { add_opvars(splev, "o", VA_PASS1(SPO_MESSAGE)); } break; case 161: { add_opvars(splev, "iiiiiio", VA_PASS7(-1, 0, -1, -1, -1, -1, SPO_CORRIDOR)); } break; case 162: { add_opvars(splev, "iiiiiio", VA_PASS7(-1, yyvsp[0].i, -1, -1, -1, -1, SPO_CORRIDOR)); } break; case 163: { add_opvars(splev, "iiiiiio", VA_PASS7(-1, -1, -1, -1, -1, -1, SPO_CORRIDOR)); } break; case 164: { add_opvars(splev, "iiiiiio", VA_PASS7(yyvsp[-2].corpos.room, yyvsp[-2].corpos.door, yyvsp[-2].corpos.wall, yyvsp[0].corpos.room, yyvsp[0].corpos.door, yyvsp[0].corpos.wall, SPO_CORRIDOR)); } break; case 165: { add_opvars(splev, "iiiiiio", VA_PASS7(yyvsp[-2].corpos.room, yyvsp[-2].corpos.door, yyvsp[-2].corpos.wall, -1, -1, (long)yyvsp[0].i, SPO_CORRIDOR)); } break; case 166: { yyval.corpos.room = yyvsp[-5].i; yyval.corpos.wall = yyvsp[-3].i; yyval.corpos.door = yyvsp[-1].i; } break; case 167: { if ((yyvsp[-2].i < 100) && (yyvsp[-3].i == OROOM)) lc_error("Only typed rooms can have a chance."); else { add_opvars(splev, "iii", VA_PASS3((long)yyvsp[-3].i, (long)yyvsp[-2].i, (long)yyvsp[0].i)); } } break; case 168: { long rflags = yyvsp[0].i; if (rflags == -1) rflags = (1 << 0); add_opvars(splev, "iiiiiiio", VA_PASS8(rflags, ERR, ERR, yyvsp[-3].crd.x, yyvsp[-3].crd.y, yyvsp[-1].sze.width, yyvsp[-1].sze.height, SPO_SUBROOM)); break_stmt_start(); } break; case 169: { break_stmt_end(splev); add_opcode(splev, SPO_ENDROOM, NULL); } break; case 170: { long rflags = yyvsp[-2].i; if (rflags == -1) rflags = (1 << 0); add_opvars(splev, "iiiiiiio", VA_PASS8(rflags, yyvsp[-3].crd.x, yyvsp[-3].crd.y, yyvsp[-5].crd.x, yyvsp[-5].crd.y, yyvsp[-1].sze.width, yyvsp[-1].sze.height, SPO_ROOM)); break_stmt_start(); } break; case 171: { break_stmt_end(splev); add_opcode(splev, SPO_ENDROOM, NULL); } break; case 172: { yyval.i = 1; } break; case 173: { yyval.i = yyvsp[0].i; } break; case 174: { if ( yyvsp[-3].i < 1 || yyvsp[-3].i > 5 || yyvsp[-1].i < 1 || yyvsp[-1].i > 5 ) { lc_error("Room positions should be between 1-5: (%li,%li)!", yyvsp[-3].i, yyvsp[-1].i); } else { yyval.crd.x = yyvsp[-3].i; yyval.crd.y = yyvsp[-1].i; } } break; case 175: { yyval.crd.x = yyval.crd.y = ERR; } break; case 176: { if ( yyvsp[-3].i < 0 || yyvsp[-1].i < 0) { lc_error("Invalid subroom position (%li,%li)!", yyvsp[-3].i, yyvsp[-1].i); } else { yyval.crd.x = yyvsp[-3].i; yyval.crd.y = yyvsp[-1].i; } } break; case 177: { yyval.crd.x = yyval.crd.y = ERR; } break; case 178: { yyval.crd.x = yyvsp[-3].i; yyval.crd.y = yyvsp[-1].i; } break; case 179: { yyval.crd.x = yyval.crd.y = ERR; } break; case 180: { yyval.sze.width = yyvsp[-3].i; yyval.sze.height = yyvsp[-1].i; } break; case 181: { yyval.sze.height = yyval.sze.width = ERR; } break; case 182: { /* ERR means random here */ if (yyvsp[-2].i == ERR && yyvsp[0].i != ERR) { lc_error("If the door wall is random, so must be its pos!"); } else { add_opvars(splev, "iiiio", VA_PASS5((long)yyvsp[0].i, (long)yyvsp[-4].i, (long)yyvsp[-6].i, (long)yyvsp[-2].i, SPO_ROOM_DOOR)); } } break; case 183: { add_opvars(splev, "io", VA_PASS2((long)yyvsp[-2].i, SPO_DOOR)); } break; case 188: { yyval.i = yyvsp[0].i; } break; case 189: { yyval.i = (yyvsp[-2].i | yyvsp[0].i); } break; case 192: { add_opvars(splev, "ciisiio", VA_PASS7(0, 0, 1, (char *)0, 0, 0, SPO_MAP)); max_x_map = COLNO-1; max_y_map = ROWNO; } break; case 193: { add_opvars(splev, "cii", VA_PASS3(SP_COORD_PACK((yyvsp[-4].i),(yyvsp[-2].i)), 1, (long)yyvsp[-1].i)); scan_map(yyvsp[0].map, splev); Free(yyvsp[0].map); } break; case 194: { add_opvars(splev, "ii", VA_PASS2(2, (long)yyvsp[-1].i)); scan_map(yyvsp[0].map, splev); Free(yyvsp[0].map); } break; case 199: { add_opvars(splev, "io", VA_PASS2(0, SPO_MONSTER)); } break; case 200: { add_opvars(splev, "io", VA_PASS2(1, SPO_MONSTER)); in_container_obj++; break_stmt_start(); } break; case 201: { break_stmt_end(splev); in_container_obj--; add_opvars(splev, "o", VA_PASS1(SPO_END_MONINVENT)); } break; case 202: { /* nothing */ } break; case 203: { struct opvar *stopit = New(struct opvar); set_opvar_int(stopit, SP_M_V_END); add_opcode(splev, SPO_PUSH, stopit); yyval.i = 0x0000; } break; case 204: { if (( yyvsp[-2].i & yyvsp[0].i )) lc_error("MONSTER extra info defined twice."); yyval.i = ( yyvsp[-2].i | yyvsp[0].i ); } break; case 205: { add_opvars(splev, "i", VA_PASS1(SP_M_V_NAME)); yyval.i = 0x0001; } break; case 206: { add_opvars(splev, "ii", VA_PASS2((long)yyvsp[0].i, SP_M_V_PEACEFUL)); yyval.i = 0x0002; } break; case 207: { add_opvars(splev, "ii", VA_PASS2((long)yyvsp[0].i, SP_M_V_ASLEEP)); yyval.i = 0x0004; } break; case 208: { add_opvars(splev, "ii", VA_PASS2((long)yyvsp[0].i, SP_M_V_ALIGN)); yyval.i = 0x0008; } break; case 209: { add_opvars(splev, "ii", VA_PASS2((long)yyvsp[-1].i, SP_M_V_APPEAR)); yyval.i = 0x0010; } break; case 210: { add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_FEMALE)); yyval.i = 0x0020; } break; case 211: { add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_INVIS)); yyval.i = 0x0040; } break; case 212: { add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_CANCELLED)); yyval.i = 0x0080; } break; case 213: { add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_REVIVED)); yyval.i = 0x0100; } break; case 214: { add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_AVENGE)); yyval.i = 0x0200; } break; case 215: { add_opvars(splev, "i", VA_PASS1(SP_M_V_FLEEING)); yyval.i = 0x0400; } break; case 216: { add_opvars(splev, "i", VA_PASS1(SP_M_V_BLINDED)); yyval.i = 0x0800; } break; case 217: { add_opvars(splev, "i", VA_PASS1(SP_M_V_PARALYZED)); yyval.i = 0x1000; } break; case 218: { add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_STUNNED)); yyval.i = 0x2000; } break; case 219: { add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_CONFUSED)); yyval.i = 0x4000; } break; case 220: { add_opvars(splev, "ii", VA_PASS2((long)yyvsp[0].i, SP_M_V_SEENTRAPS)); yyval.i = 0x8000; } break; case 221: { int token = get_trap_type(yyvsp[0].map); if (token == ERR || token == 0) lc_error("Unknown trap type '%s'!", yyvsp[0].map); Free(yyvsp[0].map); yyval.i = (1L << (token - 1)); } break; case 222: { yyval.i = (long) ~0; } break; case 223: { int token = get_trap_type(yyvsp[-2].map); if (token == ERR || token == 0) lc_error("Unknown trap type '%s'!", yyvsp[-2].map); if ((1L << (token - 1)) & yyvsp[0].i) lc_error("Monster seen_traps, trap '%s' listed twice.", yyvsp[-2].map); Free(yyvsp[-2].map); yyval.i = ((1L << (token - 1)) | yyvsp[0].i); } break; case 224: { long cnt = 0; if (in_container_obj) cnt |= SP_OBJ_CONTENT; add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); } break; case 225: { long cnt = SP_OBJ_CONTAINER; if (in_container_obj) cnt |= SP_OBJ_CONTENT; add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); in_container_obj++; break_stmt_start(); } break; case 226: { break_stmt_end(splev); in_container_obj--; add_opcode(splev, SPO_POP_CONTAINER, NULL); } break; case 227: { if (( yyvsp[0].i & 0x4000) && in_container_obj) lc_error("Object cannot have a coord when contained."); else if (!( yyvsp[0].i & 0x4000) && !in_container_obj) lc_error("Object needs a coord when not contained."); } break; case 228: { struct opvar *stopit = New(struct opvar); set_opvar_int(stopit, SP_O_V_END); add_opcode(splev, SPO_PUSH, stopit); yyval.i = 0x00; } break; case 229: { if (( yyvsp[-2].i & yyvsp[0].i )) lc_error("OBJECT extra info '%s' defined twice.", curr_token); yyval.i = ( yyvsp[-2].i | yyvsp[0].i ); } break; case 230: { add_opvars(splev, "ii", VA_PASS2((long)yyvsp[0].i, SP_O_V_CURSE)); yyval.i = 0x0001; } break; case 231: { add_opvars(splev, "i", VA_PASS1(SP_O_V_CORPSENM)); yyval.i = 0x0002; } break; case 232: { add_opvars(splev, "i", VA_PASS1(SP_O_V_SPE)); yyval.i = 0x0004; } break; case 233: { add_opvars(splev, "i", VA_PASS1(SP_O_V_NAME)); yyval.i = 0x0008; } break; case 234: { add_opvars(splev, "i", VA_PASS1(SP_O_V_QUAN)); yyval.i = 0x0010; } break; case 235: { add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_BURIED)); yyval.i = 0x0020; } break; case 236: { add_opvars(splev, "ii", VA_PASS2((long)yyvsp[0].i, SP_O_V_LIT)); yyval.i = 0x0040; } break; case 237: { add_opvars(splev, "i", VA_PASS1(SP_O_V_ERODED)); yyval.i = 0x0080; } break; case 238: { add_opvars(splev, "ii", VA_PASS2(-1, SP_O_V_ERODED)); yyval.i = 0x0080; } break; case 239: { if (yyvsp[0].i == D_LOCKED) { add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_LOCKED)); yyval.i = 0x0100; } else if (yyvsp[0].i == D_BROKEN) { add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_BROKEN)); yyval.i = 0x0200; } else lc_error("DOOR state can only be locked or broken."); } break; case 240: { add_opvars(splev, "ii", VA_PASS2(yyvsp[0].i, SP_O_V_TRAPPED)); yyval.i = 0x0400; } break; case 241: { add_opvars(splev, "i", VA_PASS1(SP_O_V_RECHARGED)); yyval.i = 0x0800; } break; case 242: { add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_INVIS)); yyval.i = 0x1000; } break; case 243: { add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_GREASED)); yyval.i = 0x2000; } break; case 244: { add_opvars(splev, "i", VA_PASS1(SP_O_V_COORD)); yyval.i = 0x4000; } break; case 245: { add_opvars(splev, "io", VA_PASS2((long)yyvsp[-2].i, SPO_TRAP)); } break; case 246: { long dir, state = 0; /* convert dir from a DIRECTION to a DB_DIR */ dir = yyvsp[-2].i; switch (dir) { case W_NORTH: dir = DB_NORTH; break; case W_SOUTH: dir = DB_SOUTH; break; case W_EAST: dir = DB_EAST; break; case W_WEST: dir = DB_WEST; break; default: lc_error("Invalid drawbridge direction."); break; } if ( yyvsp[0].i == D_ISOPEN ) state = 1; else if ( yyvsp[0].i == D_CLOSED ) state = 0; else if ( yyvsp[0].i == -1 ) state = -1; else lc_error("A drawbridge can only be open, closed or random!"); add_opvars(splev, "iio", VA_PASS3(state, dir, SPO_DRAWBRIDGE)); } break; case 247: { add_opvars(splev, "iiio", VA_PASS4((long)yyvsp[0].i, 1, 0, SPO_MAZEWALK)); } break; case 248: { add_opvars(splev, "iiio", VA_PASS4((long)yyvsp[-3].i, (long)yyvsp[-1].i, (long)yyvsp[0].i, SPO_MAZEWALK)); } break; case 249: { add_opvars(splev, "rio", VA_PASS3(SP_REGION_PACK(-1,-1,-1,-1), 0, SPO_WALLIFY)); } break; case 250: { add_opvars(splev, "io", VA_PASS2(1, SPO_WALLIFY)); } break; case 251: { add_opvars(splev, "io", VA_PASS2((long)yyvsp[0].i, SPO_LADDER)); } break; case 252: { add_opvars(splev, "io", VA_PASS2((long)yyvsp[0].i, SPO_STAIR)); } break; case 253: { add_opvars(splev, "iiiii iiiii iiso", VA_PASS14(yyvsp[-4].lregn.x1, yyvsp[-4].lregn.y1, yyvsp[-4].lregn.x2, yyvsp[-4].lregn.y2, yyvsp[-4].lregn.area, yyvsp[-2].lregn.x1, yyvsp[-2].lregn.y1, yyvsp[-2].lregn.x2, yyvsp[-2].lregn.y2, yyvsp[-2].lregn.area, (long) ((yyvsp[0].i) ? LR_UPSTAIR : LR_DOWNSTAIR), 0, (char *) 0, SPO_LEVREGION)); } break; case 254: { add_opvars(splev, "iiiii iiiii iiso", VA_PASS14(yyvsp[-4].lregn.x1, yyvsp[-4].lregn.y1, yyvsp[-4].lregn.x2, yyvsp[-4].lregn.y2, yyvsp[-4].lregn.area, yyvsp[-2].lregn.x1, yyvsp[-2].lregn.y1, yyvsp[-2].lregn.x2, yyvsp[-2].lregn.y2, yyvsp[-2].lregn.area, LR_PORTAL, 0, yyvsp[0].map, SPO_LEVREGION)); Free(yyvsp[0].map); } break; case 255: { long rtyp = 0; switch(yyvsp[0].i) { case -1: rtyp = LR_TELE; break; case 0: rtyp = LR_DOWNTELE; break; case 1: rtyp = LR_UPTELE; break; } add_opvars(splev, "iiiii iiiii iiso", VA_PASS14(yyvsp[-3].lregn.x1, yyvsp[-3].lregn.y1, yyvsp[-3].lregn.x2, yyvsp[-3].lregn.y2, yyvsp[-3].lregn.area, yyvsp[-1].lregn.x1, yyvsp[-1].lregn.y1, yyvsp[-1].lregn.x2, yyvsp[-1].lregn.y2, yyvsp[-1].lregn.area, rtyp, 0, (char *)0, SPO_LEVREGION)); } break; case 256: { add_opvars(splev, "iiiii iiiii iiso", VA_PASS14(yyvsp[-2].lregn.x1, yyvsp[-2].lregn.y1, yyvsp[-2].lregn.x2, yyvsp[-2].lregn.y2, yyvsp[-2].lregn.area, yyvsp[0].lregn.x1, yyvsp[0].lregn.y1, yyvsp[0].lregn.x2, yyvsp[0].lregn.y2, yyvsp[0].lregn.area, (long) LR_BRANCH, 0, (char *) 0, SPO_LEVREGION)); } break; case 257: { yyval.i = -1; } break; case 258: { yyval.i = yyvsp[0].i; } break; case 259: { add_opvars(splev, "o", VA_PASS1(SPO_FOUNTAIN)); } break; case 260: { add_opvars(splev, "o", VA_PASS1(SPO_SINK)); } break; case 261: { add_opvars(splev, "o", VA_PASS1(SPO_POOL)); } break; case 262: { yyval.terr.lit = -2; yyval.terr.ter = what_map_char((char) yyvsp[0].i); } break; case 263: { yyval.terr.lit = yyvsp[-1].i; yyval.terr.ter = what_map_char((char) yyvsp[-3].i); } break; case 264: { add_opvars(splev, "io", VA_PASS2(yyvsp[0].i, SPO_REPLACETERRAIN)); } break; case 265: { add_opvars(splev, "o", VA_PASS1(SPO_TERRAIN)); } break; case 266: { add_opvars(splev, "o", VA_PASS1(SPO_NON_DIGGABLE)); } break; case 267: { add_opvars(splev, "o", VA_PASS1(SPO_NON_PASSWALL)); } break; case 268: { long irr; long rt = yyvsp[-1].i; long rflags = yyvsp[0].i; if (rflags == -1) rflags = (1 << 0); if (!(rflags & 1)) rt += MAXRTYPE+1; irr = ((rflags & 2) != 0); add_opvars(splev, "iiio", VA_PASS4((long)yyvsp[-3].i, rt, rflags, SPO_REGION)); yyval.i = (irr || (rflags & 1) || rt != OROOM); break_stmt_start(); } break; case 269: { break_stmt_end(splev); if ( yyvsp[-1].i ) { add_opcode(splev, SPO_ENDROOM, NULL); } else if ( yyvsp[0].i ) lc_error("Cannot use lev statements in non-permanent REGION"); } break; case 270: { yyval.i = 0; } break; case 271: { yyval.i = yyvsp[0].i; } break; case 272: { add_opvars(splev, "iio", VA_PASS3((long)yyvsp[0].i, (long)yyvsp[-2].i, SPO_ALTAR)); } break; case 273: { add_opvars(splev, "io", VA_PASS2(2, SPO_GRAVE)); } break; case 274: { add_opvars(splev, "sio", VA_PASS3((char *)0, 1, SPO_GRAVE)); } break; case 275: { add_opvars(splev, "sio", VA_PASS3((char *)0, 0, SPO_GRAVE)); } break; case 276: { add_opvars(splev, "o", VA_PASS1(SPO_GOLD)); } break; case 277: { add_opvars(splev, "io", VA_PASS2((long)yyvsp[-2].i, SPO_ENGRAVING)); } break; case 278: { add_opvars(splev, "o", VA_PASS1(SPO_MINERALIZE)); } break; case 279: { add_opvars(splev, "iiiio", VA_PASS5(-1L, -1L, -1L, -1L, SPO_MINERALIZE)); } break; case 280: { int token = get_trap_type(yyvsp[0].map); if (token == ERR) lc_error("Unknown trap type '%s'!", yyvsp[0].map); yyval.i = token; Free(yyvsp[0].map); } break; case 282: { int token = get_room_type(yyvsp[0].map); if (token == ERR) { lc_warning("Unknown room type \"%s\"! Making ordinary room...", yyvsp[0].map); yyval.i = OROOM; } else yyval.i = token; Free(yyvsp[0].map); } break; case 284: { yyval.i = -1; } break; case 285: { yyval.i = yyvsp[0].i; } break; case 286: { yyval.i = yyvsp[0].i; } break; case 287: { yyval.i = yyvsp[-2].i | yyvsp[0].i; } break; case 288: { yyval.i = (yyvsp[0].i << 0); } break; case 289: { yyval.i = (yyvsp[0].i << 1); } break; case 290: { yyval.i = (yyvsp[0].i << 2); } break; case 297: { yyval.i = - MAX_REGISTERS - 1; } break; case 300: { yyval.i = - MAX_REGISTERS - 1; } break; case 303: { if ( yyvsp[-1].i >= 3 ) lc_error("Register Index overflow!"); else yyval.i = - yyvsp[-1].i - 1; } break; case 304: { add_opvars(splev, "s", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 305: { check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_STRING); vardef_used(variable_definitions, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 306: { check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_STRING|SPOVAR_ARRAY); vardef_used(variable_definitions, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } break; case 307: { /* nothing */ } break; case 308: { add_opvars(splev, "c", VA_PASS1(yyvsp[0].i)); } break; case 309: { add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDCOORD)); } break; case 310: { check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_COORD); vardef_used(variable_definitions, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 311: { check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_COORD|SPOVAR_ARRAY); vardef_used(variable_definitions, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } break; case 312: { if (yyvsp[-3].i < 0 || yyvsp[-1].i < 0 || yyvsp[-3].i >= COLNO || yyvsp[-1].i >= ROWNO) lc_error("Coordinates (%li,%li) out of map range!", yyvsp[-3].i, yyvsp[-1].i); yyval.i = SP_COORD_PACK(yyvsp[-3].i, yyvsp[-1].i); } break; case 313: { yyval.i = SP_COORD_PACK_RANDOM(0); } break; case 314: { yyval.i = SP_COORD_PACK_RANDOM( yyvsp[-1].i ); } break; case 315: { yyval.i = yyvsp[0].i; } break; case 316: { if ((yyvsp[-2].i & yyvsp[0].i)) lc_warning("Humidity flag used twice."); yyval.i = (yyvsp[-2].i | yyvsp[0].i); } break; case 317: { /* nothing */ } break; case 318: { check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_REGION); vardef_used(variable_definitions, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 319: { check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_REGION|SPOVAR_ARRAY); vardef_used(variable_definitions, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } break; case 320: { long r = SP_REGION_PACK(yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); if ( yyvsp[-7].i > yyvsp[-3].i || yyvsp[-5].i > yyvsp[-1].i ) lc_error("Region start > end: (%li,%li,%li,%li)!", yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); add_opvars(splev, "r", VA_PASS1(r)); yyval.i = r; } break; case 321: { add_opvars(splev, "m", VA_PASS1(yyvsp[0].i)); } break; case 322: { check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_MAPCHAR); vardef_used(variable_definitions, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 323: { check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_MAPCHAR|SPOVAR_ARRAY); vardef_used(variable_definitions, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } break; case 324: { if (what_map_char((char) yyvsp[0].i) != INVALID_TYPE) yyval.i = SP_MAPCHAR_PACK(what_map_char((char) yyvsp[0].i), -2); else { lc_error("Unknown map char type '%c'!", yyvsp[0].i); yyval.i = SP_MAPCHAR_PACK(STONE, -2); } } break; case 325: { if (what_map_char((char) yyvsp[-3].i) != INVALID_TYPE) yyval.i = SP_MAPCHAR_PACK(what_map_char((char) yyvsp[-3].i), yyvsp[-1].i); else { lc_error("Unknown map char type '%c'!", yyvsp[-3].i); yyval.i = SP_MAPCHAR_PACK(STONE, yyvsp[-1].i); } } break; case 326: { add_opvars(splev, "M", VA_PASS1(yyvsp[0].i)); } break; case 327: { check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_MONST); vardef_used(variable_definitions, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 328: { check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_MONST|SPOVAR_ARRAY); vardef_used(variable_definitions, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } break; case 329: { long m = get_monster_id(yyvsp[0].map, (char)0); if (m == ERR) { lc_error("Unknown monster \"%s\"!", yyvsp[0].map); yyval.i = -1; } else yyval.i = SP_MONST_PACK(m, def_monsyms[(int) mons[m].mlet].sym); Free(yyvsp[0].map); } break; case 330: { if (check_monster_char((char) yyvsp[0].i)) yyval.i = SP_MONST_PACK(-1, yyvsp[0].i); else { lc_error("Unknown monster class '%c'!", yyvsp[0].i); yyval.i = -1; } } break; case 331: { long m = get_monster_id(yyvsp[-1].map, (char) yyvsp[-3].i); if (m == ERR) { lc_error("Unknown monster ('%c', \"%s\")!", yyvsp[-3].i, yyvsp[-1].map); yyval.i = -1; } else yyval.i = SP_MONST_PACK(m, yyvsp[-3].i); Free(yyvsp[-1].map); } break; case 332: { yyval.i = -1; } break; case 333: { add_opvars(splev, "O", VA_PASS1(yyvsp[0].i)); } break; case 334: { check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_OBJ); vardef_used(variable_definitions, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 335: { check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_OBJ|SPOVAR_ARRAY); vardef_used(variable_definitions, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } break; case 336: { long m = get_object_id(yyvsp[0].map, (char)0); if (m == ERR) { lc_error("Unknown object \"%s\"!", yyvsp[0].map); yyval.i = -1; } else yyval.i = SP_OBJ_PACK(m, 1); /* obj class != 0 to force generation of a specific item */ Free(yyvsp[0].map); } break; case 337: { if (check_object_char((char) yyvsp[0].i)) yyval.i = SP_OBJ_PACK(-1, yyvsp[0].i); else { lc_error("Unknown object class '%c'!", yyvsp[0].i); yyval.i = -1; } } break; case 338: { long m = get_object_id(yyvsp[-1].map, (char) yyvsp[-3].i); if (m == ERR) { lc_error("Unknown object ('%c', \"%s\")!", yyvsp[-3].i, yyvsp[-1].map); yyval.i = -1; } else yyval.i = SP_OBJ_PACK(m, yyvsp[-3].i); Free(yyvsp[-1].map); } break; case 339: { yyval.i = -1; } break; case 340: { } break; case 341: { add_opvars(splev, "o", VA_PASS1(SPO_MATH_ADD)); } break; case 342: { add_opvars(splev, "i", VA_PASS1(yyvsp[0].i)); } break; case 343: { is_inconstant_number = 1; } break; case 344: { add_opvars(splev, "i", VA_PASS1(yyvsp[-1].i)); } break; case 345: { check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_INT); vardef_used(variable_definitions, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); is_inconstant_number = 1; } break; case 346: { check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_INT|SPOVAR_ARRAY); vardef_used(variable_definitions, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); is_inconstant_number = 1; } break; case 347: { add_opvars(splev, "o", VA_PASS1(SPO_MATH_ADD)); } break; case 348: { add_opvars(splev, "o", VA_PASS1(SPO_MATH_SUB)); } break; case 349: { add_opvars(splev, "o", VA_PASS1(SPO_MATH_MUL)); } break; case 350: { add_opvars(splev, "o", VA_PASS1(SPO_MATH_DIV)); } break; case 351: { add_opvars(splev, "o", VA_PASS1(SPO_MATH_MOD)); } break; case 352: { } break; case 353: { if (!strcmp("int", yyvsp[0].map) || !strcmp("integer", yyvsp[0].map)) { yyval.i = (int)'i'; } else lc_error("Unknown function parameter type '%s'", yyvsp[0].map); } break; case 354: { if (!strcmp("str", yyvsp[0].map) || !strcmp("string", yyvsp[0].map)) { yyval.i = (int)'s'; } else lc_error("Unknown function parameter type '%s'", yyvsp[0].map); } break; case 355: { struct lc_funcdefs_parm *tmp = New(struct lc_funcdefs_parm); if (!curr_function) { lc_error("Function parameters outside function definition."); } else if (!tmp) { lc_error("Could not alloc function params."); } else { long vt = SPOVAR_NULL; tmp->name = strdup(yyvsp[-2].map); tmp->parmtype = (char) yyvsp[0].i; tmp->next = curr_function->params; curr_function->params = tmp; curr_function->n_params++; switch (tmp->parmtype) { case 'i': vt = SPOVAR_INT; break; case 's': vt = SPOVAR_STRING; break; default: lc_error("Unknown func param conversion."); break; } variable_definitions = add_vardef_type( variable_definitions, yyvsp[-2].map, vt); } Free(yyvsp[-2].map); } break; case 360: { yyval.i = (int)'i'; } break; case 361: { yyval.i = (int)'s'; } break; case 362: { char tmpbuf[2]; tmpbuf[0] = (char) yyvsp[0].i; tmpbuf[1] = '\0'; yyval.map = strdup(tmpbuf); } break; case 363: { long len = strlen( yyvsp[-2].map ); char *tmp = (char *) alloc(len + 2); sprintf(tmp, "%c%s", (char) yyvsp[0].i, yyvsp[-2].map ); Free( yyvsp[-2].map ); yyval.map = tmp; } break; case 364: { yyval.map = strdup(""); } break; case 365: { char *tmp = strdup( yyvsp[0].map ); Free( yyvsp[0].map ); yyval.map = tmp; } break; case 366: { add_opvars(splev, "o", VA_PASS1(SPO_SEL_POINT)); } break; case 367: { add_opvars(splev, "o", VA_PASS1(SPO_SEL_RECT)); } break; case 368: { add_opvars(splev, "o", VA_PASS1(SPO_SEL_FILLRECT)); } break; case 369: { add_opvars(splev, "o", VA_PASS1(SPO_SEL_LINE)); } break; case 370: { /* randline (x1,y1),(x2,y2), roughness */ add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDLINE)); } break; case 371: { add_opvars(splev, "io", VA_PASS2(W_ANY, SPO_SEL_GROW)); } break; case 372: { add_opvars(splev, "io", VA_PASS2(yyvsp[-3].i, SPO_SEL_GROW)); } break; case 373: { add_opvars(splev, "iio", VA_PASS3(yyvsp[-3].i, SPOFILTER_PERCENT, SPO_SEL_FILTER)); } break; case 374: { add_opvars(splev, "io", VA_PASS2(SPOFILTER_SELECTION, SPO_SEL_FILTER)); } break; case 375: { add_opvars(splev, "io", VA_PASS2(SPOFILTER_MAPCHAR, SPO_SEL_FILTER)); } break; case 376: { add_opvars(splev, "o", VA_PASS1(SPO_SEL_FLOOD)); } break; case 377: { add_opvars(splev, "oio", VA_PASS3(SPO_COPY, 1, SPO_SEL_ELLIPSE)); } break; case 378: { add_opvars(splev, "oio", VA_PASS3(SPO_COPY, yyvsp[-1].i, SPO_SEL_ELLIPSE)); } break; case 379: { add_opvars(splev, "io", VA_PASS2(1, SPO_SEL_ELLIPSE)); } break; case 380: { add_opvars(splev, "io", VA_PASS2(yyvsp[-1].i, SPO_SEL_ELLIPSE)); } break; case 381: { add_opvars(splev, "iio", VA_PASS3(yyvsp[-5].i, yyvsp[-11].i, SPO_SEL_GRADIENT)); } break; case 382: { add_opvars(splev, "o", VA_PASS1(SPO_SEL_COMPLEMENT)); } break; case 383: { check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_SEL); vardef_used(variable_definitions, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 384: { /* nothing */ } break; case 385: { /* nothing */ } break; case 386: { add_opvars(splev, "o", VA_PASS1(SPO_SEL_ADD)); } break; case 387: { add_opvars(splev, "iio", VA_PASS3(yyvsp[0].dice.num, yyvsp[0].dice.die, SPO_DICE)); } break; case 391: { add_opvars(splev, "i", VA_PASS1(yyvsp[0].i)); } break; case 392: { add_opvars(splev, "i", VA_PASS1(yyvsp[0].i)); } break; case 393: { add_opvars(splev, "i", VA_PASS1(yyvsp[0].i)); } break; case 394: { /* nothing */ } break; case 403: { yyval.lregn = yyvsp[0].lregn; } break; case 404: { if (yyvsp[-7].i <= 0 || yyvsp[-7].i >= COLNO) lc_error( "Region (%ld,%ld,%ld,%ld) out of level range (x1)!", yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); else if (yyvsp[-5].i < 0 || yyvsp[-5].i >= ROWNO) lc_error( "Region (%ld,%ld,%ld,%ld) out of level range (y1)!", yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); else if (yyvsp[-3].i <= 0 || yyvsp[-3].i >= COLNO) lc_error( "Region (%ld,%ld,%ld,%ld) out of level range (x2)!", yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); else if (yyvsp[-1].i < 0 || yyvsp[-1].i >= ROWNO) lc_error( "Region (%ld,%ld,%ld,%ld) out of level range (y2)!", yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); yyval.lregn.x1 = yyvsp[-7].i; yyval.lregn.y1 = yyvsp[-5].i; yyval.lregn.x2 = yyvsp[-3].i; yyval.lregn.y2 = yyvsp[-1].i; yyval.lregn.area = 1; } break; case 405: { /* This series of if statements is a hack for MSC 5.1. It seems that its tiny little brain cannot compile if these are all one big if statement. */ if (yyvsp[-7].i < 0 || yyvsp[-7].i > (int) max_x_map) lc_error( "Region (%ld,%ld,%ld,%ld) out of map range (x1)!", yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); else if (yyvsp[-5].i < 0 || yyvsp[-5].i > (int) max_y_map) lc_error( "Region (%ld,%ld,%ld,%ld) out of map range (y1)!", yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); else if (yyvsp[-3].i < 0 || yyvsp[-3].i > (int) max_x_map) lc_error( "Region (%ld,%ld,%ld,%ld) out of map range (x2)!", yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); else if (yyvsp[-1].i < 0 || yyvsp[-1].i > (int) max_y_map) lc_error( "Region (%ld,%ld,%ld,%ld) out of map range (y2)!", yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); yyval.lregn.area = 0; yyval.lregn.x1 = yyvsp[-7].i; yyval.lregn.y1 = yyvsp[-5].i; yyval.lregn.x2 = yyvsp[-3].i; yyval.lregn.y2 = yyvsp[-1].i; } break; } yyssp -= yym; yystate = *yyssp; yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state 0 to\ state %d\n", YYPREFIX, YYFINAL); #endif yystate = YYFINAL; *++yyssp = YYFINAL; *++yyvsp = yyval; if (yychar < 0) { if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { yys = 0; if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) != 0 && (yyn += yystate) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == yystate) yystate = yytable[yyn]; else yystate = yydgoto[yym]; #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \ to state %d\n", YYPREFIX, *yyssp, yystate); #endif if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } *++yyssp = yystate; *++yyvsp = yyval; goto yyloop; yyoverflow: yyerror("yacc stack overflow"); yyabort: return (1); yyaccept: return (0); }