diff options
Diffstat (limited to 'gnu/usr.bin/groff/pic/pic.cc')
-rw-r--r-- | gnu/usr.bin/groff/pic/pic.cc | 5166 |
1 files changed, 5166 insertions, 0 deletions
diff --git a/gnu/usr.bin/groff/pic/pic.cc b/gnu/usr.bin/groff/pic/pic.cc new file mode 100644 index 0000000..a85ff8b --- /dev/null +++ b/gnu/usr.bin/groff/pic/pic.cc @@ -0,0 +1,5166 @@ +#ifndef lint +static char yysccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/90"; +#endif +#define YYBYACC 1 +#line 20 "/u/jjc/groff/pic/pic.y" +#include "pic.h" +#include "ptable.h" +#include "object.h" + +extern int delim_flag; +extern void do_copy(const char *); +extern void copy_rest_thru(const char *, const char *); +extern void copy_file_thru(const char *, const char *, const char *); +extern void push_body(const char *); +extern void do_for(char *var, double from, double to, + int by_is_multiplicative, double by, char *body); +extern void do_lookahead(); + +#undef fmod +#undef rand + +extern "C" { + double fmod(double, double); + int rand(); +} + +/* Maximum number of characters produced by printf("%g") */ +#define GDIGITS 14 + +int yylex(); +void yyerror(const char *); + +void reset(const char *nm); +void reset_all(); + +place *lookup_label(const char *); +void define_label(const char *label, const place *pl); + +direction current_direction; +position current_position; + +implement_ptable(place) + +PTABLE(place) top_table; + +PTABLE(place) *current_table = &top_table; +saved_state *current_saved_state = 0; + +object_list olist; + +const char *ordinal_postfix(int n); +const char *object_type_name(object_type type); +char *format_number(const char *form, double n); +char *do_sprintf(const char *form, const double *v, int nv); + +#line 73 "/u/jjc/groff/pic/pic.y" +typedef union { + char *str; + int n; + double x; + struct { double x, y; } pair; + struct { double x; char *body; } if_data; + struct { char *str; const char *filename; int lineno; } lstr; + struct { double *v; int nv; int maxv; } dv; + struct { double val; int is_multiplicative; } by; + place pl; + object *obj; + corner crn; + path *pth; + object_spec *spec; + saved_state *pstate; + graphics_state state; + object_type obtype; +} YYSTYPE; +#line 76 "y.tab.c" +#define LABEL 257 +#define VARIABLE 258 +#define NUMBER 259 +#define TEXT 260 +#define COMMAND_LINE 261 +#define DELIMITED 262 +#define ORDINAL 263 +#define TH 264 +#define LEFT_ARROW_HEAD 265 +#define RIGHT_ARROW_HEAD 266 +#define DOUBLE_ARROW_HEAD 267 +#define LAST 268 +#define UP 269 +#define DOWN 270 +#define LEFT 271 +#define RIGHT 272 +#define BOX 273 +#define CIRCLE 274 +#define ELLIPSE 275 +#define ARC 276 +#define LINE 277 +#define ARROW 278 +#define MOVE 279 +#define SPLINE 280 +#define HEIGHT 281 +#define RADIUS 282 +#define WIDTH 283 +#define DIAMETER 284 +#define FROM 285 +#define TO 286 +#define AT 287 +#define WITH 288 +#define BY 289 +#define THEN 290 +#define DOTTED 291 +#define DASHED 292 +#define CHOP 293 +#define SAME 294 +#define INVISIBLE 295 +#define LJUST 296 +#define RJUST 297 +#define ABOVE 298 +#define BELOW 299 +#define OF 300 +#define THE 301 +#define WAY 302 +#define BETWEEN 303 +#define AND 304 +#define HERE 305 +#define DOT_N 306 +#define DOT_E 307 +#define DOT_W 308 +#define DOT_S 309 +#define DOT_NE 310 +#define DOT_SE 311 +#define DOT_NW 312 +#define DOT_SW 313 +#define DOT_C 314 +#define DOT_START 315 +#define DOT_END 316 +#define DOT_X 317 +#define DOT_Y 318 +#define DOT_HT 319 +#define DOT_WID 320 +#define DOT_RAD 321 +#define SIN 322 +#define COS 323 +#define ATAN2 324 +#define LOG 325 +#define EXP 326 +#define SQRT 327 +#define K_MAX 328 +#define K_MIN 329 +#define INT 330 +#define RAND 331 +#define COPY 332 +#define THRU 333 +#define TOP 334 +#define BOTTOM 335 +#define UPPER 336 +#define LOWER 337 +#define SH 338 +#define PRINT 339 +#define CW 340 +#define CCW 341 +#define FOR 342 +#define DO 343 +#define IF 344 +#define ELSE 345 +#define ANDAND 346 +#define OROR 347 +#define NOTEQUAL 348 +#define EQUALEQUAL 349 +#define LESSEQUAL 350 +#define GREATEREQUAL 351 +#define LEFT_CORNER 352 +#define RIGHT_CORNER 353 +#define CENTER 354 +#define END 355 +#define START 356 +#define RESET 357 +#define UNTIL 358 +#define PLOT 359 +#define THICKNESS 360 +#define FILL 361 +#define ALIGNED 362 +#define SPRINTF 363 +#define COMMAND 364 +#define DEFINE 365 +#define UNDEF 366 +#define YYERRCODE 256 +short yylhs[] = { -1, + 0, 0, 16, 17, 17, 28, 28, 29, 29, 30, + 30, 30, 30, 30, 30, 30, 30, 30, 31, 30, + 30, 32, 33, 30, 34, 35, 30, 36, 30, 30, + 37, 30, 30, 30, 38, 38, 38, 26, 26, 27, + 27, 27, 39, 7, 23, 23, 2, 2, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, + 15, 15, 15, 15, 40, 42, 15, 15, 41, 41, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 43, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 18, 18, 18, 18, 25, 25, 24, 24, 19, 19, + 6, 6, 6, 6, 6, 6, 44, 44, 5, 5, + 13, 13, 13, 13, 13, 14, 14, 14, 22, 22, + 21, 21, 8, 8, 20, 20, 20, 20, 20, 20, + 20, 20, 20, 11, 11, 12, 12, 12, 10, 10, + 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, + 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, +}; +short yylen[] = { 2, + 1, 1, 3, 1, 3, 0, 1, 1, 2, 3, + 4, 1, 1, 1, 1, 1, 2, 2, 0, 3, + 2, 0, 0, 7, 0, 0, 6, 0, 10, 1, + 0, 4, 1, 1, 2, 2, 3, 1, 2, 1, + 1, 1, 0, 5, 0, 2, 1, 1, 3, 3, + 3, 3, 3, 3, 3, 3, 2, 0, 2, 3, + 1, 4, 4, 4, 0, 0, 6, 1, 0, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 3, 0, 4, 3, 3, 3, 3, 2, 2, 3, + 2, 3, 2, 3, 2, 3, 3, 3, 3, 3, + 3, 2, 2, 3, 2, 3, 2, 3, 2, 3, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 3, 2, 1, 5, 0, 3, 1, 1, + 1, 3, 3, 5, 5, 6, 1, 4, 3, 3, + 1, 2, 2, 3, 1, 1, 1, 3, 1, 3, + 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 2, 3, 1, 1, 2, 1, 4, + 3, 3, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, + 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, + 3, 3, 3, 3, 2, 3, 4, 4, 6, 4, + 4, 4, 6, 6, 4, 4, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 2, +}; +short yydefred[] = { 0, + 8, 0, 2, 0, 0, 0, 0, 125, 16, 12, + 13, 14, 15, 71, 72, 73, 74, 75, 76, 77, + 78, 0, 19, 0, 0, 0, 0, 0, 0, 0, + 65, 82, 0, 4, 0, 0, 79, 68, 0, 9, + 0, 0, 0, 0, 25, 0, 146, 202, 203, 149, + 151, 187, 188, 145, 174, 175, 176, 177, 178, 179, + 180, 181, 182, 183, 184, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 185, 186, 0, 0, 193, + 194, 199, 201, 200, 0, 0, 0, 0, 0, 131, + 129, 147, 0, 0, 0, 0, 0, 0, 41, 0, + 38, 0, 0, 0, 0, 0, 0, 0, 0, 35, + 0, 0, 0, 0, 0, 31, 3, 0, 113, 114, + 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 102, 0, 0, 0, 111, 112, + 119, 120, 121, 122, 116, 117, 0, 0, 124, 0, + 118, 36, 0, 0, 10, 0, 22, 0, 20, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, + 191, 195, 197, 190, 192, 196, 198, 0, 0, 0, + 0, 0, 0, 0, 0, 137, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 204, 205, 206, 207, 208, 0, + 142, 0, 0, 163, 155, 156, 157, 158, 159, 160, + 161, 0, 154, 152, 153, 39, 0, 0, 57, 0, + 0, 0, 43, 0, 0, 0, 0, 81, 127, 0, + 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 166, 100, 0, 169, 0, 0, 101, 0, 0, 0, + 0, 0, 37, 0, 0, 0, 0, 0, 0, 62, + 0, 11, 0, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 227, 0, 216, 140, 0, 150, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 148, 132, + 133, 162, 0, 0, 53, 0, 0, 0, 0, 0, + 51, 0, 0, 50, 49, 0, 66, 83, 32, 173, + 0, 0, 0, 164, 0, 168, 0, 0, 23, 0, + 217, 218, 0, 220, 221, 222, 0, 0, 225, 226, + 0, 0, 0, 0, 0, 44, 0, 126, 0, 0, + 172, 171, 165, 0, 0, 27, 0, 0, 0, 134, + 138, 0, 0, 0, 0, 70, 67, 170, 24, 46, + 219, 223, 224, 136, 0, 0, 0, 0, 28, 0, + 0, 29, +}; +short yydgoto[] = { 2, + 105, 179, 107, 396, 90, 91, 33, 92, 93, 262, + 263, 264, 108, 95, 34, 3, 35, 36, 96, 223, + 97, 98, 376, 336, 109, 100, 101, 241, 5, 38, + 46, 283, 374, 158, 350, 401, 243, 39, 329, 114, + 387, 369, 115, 202, +}; +short yysindex[] = { -52, + 0, 0, 0, 5088, -25, -11, 21, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, -243, 0,10878, -206,11047, -204,11505, 19,10878, + 0, 0, -275, 0, -52,10742, 0, 0, -42, 0, + -52,11047, 16, -239, 0, -165, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 71, 93, 98, 106, 108, + 120, 139, 147, 153, 156, 0, 0, -110, 44, 0, + 0, 0, 0, 0,11177,11047,11505,11505, 1055, 0, + 0, 0, -45, -61, 2441, -19, 747, 312, 0,10878, + 0, 152,11047,11047, 1515, -89, -228, -61, -98, 0, + 637, -38,10878, -52, -52, 0, 0, 9673, 0, 0, + 0,11829,11829,11829,11829,11505,11505,11505,11505,11621, +11621,11621, 2099,11726, 0,11829,11829,11829, 0, 0, + 0, 0, 0, 0, 0, 0,11505,11829, 0, 1527, + 0, 0, -41,10520, 0,11047, 0, -32, 0,11047, +11047,11047,11047,11047,11047,11047,11047,11047, 9002, 0, + 0, 0, 0, 0, 0, 0, 0, 1494, 183, 187, + -4, -30, 143, 143, -53, 0,11505,11505,11505,11505, +11505,11505,11505,11621,11505,11505,11505,11505,11505,11505, +11505,11621, -43, 199, 0, 0, 0, 0, 0, -17, + 0,11726,11726, 0, 0, 0, 0, 0, 0, 0, + 0, 168, 0, 0, 0, 0,11505, 143, 0,11047, +11047,11505, 0,11047,11047, -229, -229, 0, 0, 148, + 5088, 171, 15, 0, 1527, 1527, 1527, 1527, 1527, 1527, + 1527, 1527, 1055, -19, -19, -19, 1989, 699, 747, 23, + 0, 0, 2428, 0,11284, 648, 0, 1527, 1527, 1527, + 1527, 1527, 0, -11, 21, 0, 0, 0, -61, 0, + -19, 0, 17, 0, 240, 244, 242, 249, 255, 257, + 256, 258, 260, 0, 262, 0, 0,11621, 0, -9, + -27, 184, 252, 252, 1, 1, 1527, -34, 40, 1, + 155, 155, 143, 143, 143, 143, -22, 199, 0, 0, + 0, 0, 1088, -27, 0, 1048, -40, 1, 42, -27, + 0, 1048, -40, 0, 0, 47, 0, 0, 0, 0, + 747, 1989, 1989, 0, 48, 0, 1076, 187, 0, -51, + 0, 0,11047, 0, 0, 0,11047,11047, 0, 0, + 100, 5,11621,11621,11505, 0,11505, 0, 5088, 1989, + 0, 0, 0, -51, 49, 0, 272, 284, 287, 0, + 0, 30, -19, 1487, 1527, 0, 0, 0, 0, 0, + 0, 0, 0, 0,11385, -14,11505, 1527, 0, 1527, + 72, 0, +}; +short yyrindex[] = { 219, + 0, 0, 0, 344, 109, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, + 0, 0, 57, 0, 65, 58, 0, 0, 390, 0, +10629, 0, 0, 412, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9146, 0, + 0, 0, 0, 4421, 8691, 9247, 0, 0, 0, 500, + 0, 0, 0, 0, 411, 0, 564, 0, 0, 0, +10123, 0, 508, 5512, 5512, 0, 0, 122, 0, 0, + 0, 66, 9595, 9353, 9486, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 9700, 9804, 9909, 0, 0, + 0, 0, 0, 0, 0, 0, 0,10013, 0, 4967, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 304, 0, 227, + 0, 0, 469, 577, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3104, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,10455, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5284, 5391, 5708, 5815, 6132, 6239, + 6556, 6663, 0, 6980, 7087, 7404, 0, 0, 0, 0, + 0, 0, 8873, 0, 0, 0, 0, 7511, 7828, 7935, + 8252, 8359, 0,10222, 1933, 1729, 3046, 919, 947, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3982, 4089, 3211, 3543, 2226, 2333, 4860, 8766, 0, 2665, + 1787, 1894, 909, 1016, 1348, 1455, 0, 3650, 0, 0, + 0, 0, 0, 8845, 0, 27, 28, 2772, 0, 140, + 0, 194, 195, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 304, 0, 0, 547, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 575, 0, + 0, 0, 0, 547, 0, 0, 0, 0, 0, 0, + 0, 0, 4528, 33, 52, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 50, 0, 51, + 0, 0, +}; +short yygindex[] = { 0, + -24, 498, -99, 0, -56, 237, 0, 0, -59, 0, + 0, -215, 515, -74, -117, 161, 0, 0, 1810, -73, + 0, 0, 18, 0, 26, 368, -68, 14, 364, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, +}; +#define YYTABLESIZE 12185 +short yytable[] = { 89, + 244, 153, 200, 111, 229, 89, 1, 198, 196, 200, + 197, 150, 199, 4, 198, 196, 44, 197, 204, 199, + 212, 34, 213, 212, 225, 213, 235, 56, 180, 37, + 8, 226, 232, 40, 195, 211, 280, 200, 212, 298, + 213, 340, 198, 196, 226, 197, 41, 199, 117, 99, + 86, 102, 86, 110, 154, 99, 30, 61, 112, 201, + 178, 151, 183, 184, 6, 89, 201, 235, 56, 116, + 235, 56, 212, 261, 213, 89, 156, 267, 43, 228, + 34, 42, 212, 363, 213, 235, 56, 368, 89, 45, + 367, 394, 128, 157, 201, 128, 159, 245, 246, 247, + 248, 249, 250, 251, 252, 253, 253, 253, 7, 266, + 160, 268, 269, 270, 34, 30, 61, 234, 235, 235, + 56, 7, 271, 272, 89, 99, 371, 372, 318, 253, + 325, 327, 161, 29, 331, 333, 238, 162, 99, 52, + 380, 7, 212, 37, 213, 163, 34, 164, 7, 30, + 61, 235, 56, 7, 388, 320, 321, 6, 89, 165, + 170, 171, 301, 302, 303, 304, 305, 306, 307, 308, + 310, 311, 312, 313, 314, 315, 316, 253, 166, 37, + 52, 30, 61, 52, 342, 343, 167, 266, 266, 6, + 89, 200, 168, 55, 54, 169, 198, 261, 52, 7, + 233, 199, 323, 346, 7, 324, 326, 328, 348, 330, + 332, 47, 227, 47, 7, 152, 273, 50, 6, 50, + 200, 239, 51, 296, 51, 198, 196, 297, 197, 284, + 199, 7, 52, 299, 55, 54, 201, 55, 54, 319, + 347, 172, 173, 232, 210, 195, 7, 300, 201, 236, + 237, 386, 55, 54, 203, 205, 206, 207, 208, 209, + 322, 334, 335, 338, 52, 185, 37, 370, 186, 131, + 131, 131, 337, 253, 240, 242, 339, 201, 349, 344, + 351, 364, 261, 261, 352, 353, 55, 54, 200, 354, + 235, 56, 362, 198, 196, 355, 197, 356, 199, 357, + 359, 358, 360, 366, 373, 234, 375, 381, 390, 6, + 261, 232, 391, 195, 174, 175, 235, 56, 55, 54, + 189, 190, 191, 192, 392, 89, 235, 393, 399, 235, + 89, 89, 89, 402, 89, 89, 89, 89, 253, 253, + 384, 6, 385, 1, 47, 201, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, + 89, 89, 89, 89, 89, 7, 7, 7, 7, 7, + 398, 7, 400, 235, 56, 58, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 33, + 278, 389, 59, 60, 37, 176, 177, 113, 118, 0, + 0, 0, 222, 52, 0, 89, 89, 0, 0, 0, + 47, 21, 0, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 89, 89, 89, 89, 52, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 0, 7, 7, 7, 7, 7, 7, 33, 0, + 7, 47, 7, 0, 47, 0, 0, 55, 54, 0, + 7, 7, 7, 7, 7, 7, 0, 7, 215, 47, + 21, 7, 7, 0, 0, 6, 6, 0, 6, 6, + 0, 0, 33, 55, 54, 52, 52, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 18, + 0, 215, 0, 47, 21, 215, 0, 17, 215, 215, + 215, 215, 215, 215, 33, 215, 0, 0, 0, 0, + 0, 0, 0, 106, 0, 0, 0, 215, 215, 187, + 215, 189, 190, 191, 192, 47, 21, 0, 94, 155, + 55, 54, 0, 0, 94, 0, 45, 0, 0, 0, + 6, 0, 0, 0, 0, 0, 6, 6, 18, 0, + 6, 215, 6, 48, 215, 0, 17, 0, 0, 0, + 0, 214, 0, 0, 69, 6, 236, 6, 0, 224, + 0, 6, 6, 182, 215, 216, 217, 218, 219, 220, + 0, 221, 18, 215, 0, 0, 0, 0, 0, 94, + 17, 191, 192, 0, 48, 45, 0, 48, 0, 236, + 0, 0, 0, 236, 94, 0, 236, 236, 236, 236, + 236, 236, 48, 236, 18, 0, 0, 94, 0, 0, + 0, 0, 17, 69, 0, 236, 236, 0, 236, 45, + 0, 0, 0, 0, 94, 94, 94, 0, 0, 0, + 0, 0, 0, 282, 0, 0, 48, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 295, 69, 279, 236, + 0, 45, 236, 200, 47, 0, 0, 0, 198, 196, + 0, 197, 0, 199, 200, 0, 0, 0, 48, 198, + 196, 193, 197, 0, 199, 0, 232, 0, 195, 69, + 47, 236, 0, 0, 0, 0, 0, 232, 94, 195, + 0, 0, 0, 0, 0, 0, 94, 0, 0, 0, + 0, 0, 0, 0, 0, 215, 215, 215, 215, 0, + 201, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 215, 201, 0, 0, 0, 0, 0, 0, 0, 215, + 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 215, 215, 215, 215, 215, 215, 215, 215, 215, 0, + 0, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 215, 215, 215, 215, 215, 0, 0, 0, 0, 222, + 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, + 0, 0, 215, 215, 215, 215, 0, 0, 215, 215, + 0, 215, 94, 0, 215, 215, 215, 215, 215, 215, + 215, 215, 215, 215, 215, 0, 0, 48, 215, 215, + 215, 215, 0, 236, 236, 236, 236, 222, 0, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 0, + 377, 0, 0, 48, 378, 379, 0, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 94, 94, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 0, 0, 0, 8, 0, 236, 236, + 236, 236, 236, 236, 236, 236, 236, 236, 211, 0, + 236, 236, 236, 236, 0, 0, 236, 236, 63, 236, + 0, 0, 236, 236, 236, 236, 236, 236, 236, 236, + 236, 236, 236, 0, 0, 0, 236, 236, 236, 236, + 0, 211, 0, 0, 0, 211, 64, 0, 211, 211, + 211, 211, 211, 211, 0, 211, 0, 0, 214, 0, + 0, 129, 0, 129, 0, 0, 341, 211, 211, 0, + 211, 215, 216, 217, 218, 219, 220, 63, 221, 0, + 0, 0, 187, 188, 189, 190, 191, 192, 0, 130, + 0, 130, 0, 187, 188, 189, 190, 191, 192, 29, + 0, 211, 0, 0, 211, 64, 214, 0, 0, 0, + 0, 63, 0, 0, 0, 212, 0, 0, 0, 215, + 216, 217, 218, 219, 220, 0, 221, 0, 0, 0, + 0, 0, 0, 211, 0, 0, 0, 0, 0, 64, + 0, 0, 0, 63, 0, 0, 0, 0, 212, 0, + 0, 0, 212, 0, 0, 212, 212, 212, 212, 212, + 212, 0, 212, 0, 0, 0, 0, 0, 0, 0, + 0, 64, 0, 0, 212, 212, 0, 212, 0, 0, + 0, 0, 0, 0, 200, 0, 0, 0, 0, 198, + 196, 200, 197, 0, 199, 0, 198, 196, 193, 197, + 0, 199, 0, 0, 0, 0, 0, 232, 212, 195, + 0, 212, 200, 0, 194, 0, 195, 198, 196, 193, + 197, 0, 199, 0, 200, 0, 0, 0, 0, 198, + 196, 0, 197, 0, 199, 232, 0, 195, 0, 0, + 212, 201, 0, 0, 0, 0, 0, 232, 201, 195, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 211, 211, 211, 211, 201, + 0, 211, 211, 211, 211, 211, 211, 211, 211, 211, + 211, 201, 0, 0, 0, 0, 0, 0, 0, 211, + 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, + 211, 211, 211, 211, 211, 211, 211, 211, 211, 0, + 0, 211, 211, 211, 211, 211, 211, 211, 211, 211, + 211, 211, 211, 211, 211, 0, 0, 0, 0, 0, + 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, + 0, 0, 211, 211, 211, 211, 0, 0, 211, 211, + 0, 211, 0, 0, 211, 211, 211, 211, 211, 211, + 211, 211, 211, 211, 211, 0, 0, 0, 211, 211, + 211, 211, 212, 212, 212, 212, 0, 0, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 0, 0, + 0, 0, 0, 0, 0, 0, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 0, 0, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 0, 0, 0, 0, 0, 212, 212, 212, + 212, 212, 212, 212, 212, 212, 212, 213, 0, 212, + 212, 212, 212, 0, 185, 212, 212, 186, 212, 0, + 0, 212, 212, 212, 212, 212, 212, 212, 212, 212, + 212, 212, 0, 365, 0, 212, 212, 212, 212, 0, + 213, 0, 0, 0, 213, 0, 0, 213, 213, 213, + 213, 213, 213, 230, 213, 189, 190, 191, 192, 0, + 187, 188, 189, 190, 191, 192, 213, 213, 0, 213, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 230, 231, 189, 190, 191, 192, 0, 0, 0, + 0, 0, 0, 187, 188, 189, 190, 191, 192, 0, + 213, 0, 0, 213, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 214, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 213, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 214, 0, 0, + 0, 214, 0, 0, 214, 214, 214, 214, 214, 214, + 0, 214, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 214, 214, 0, 214, 0, 0, 0, + 0, 0, 0, 200, 0, 0, 0, 0, 198, 196, + 200, 197, 0, 199, 0, 198, 196, 193, 197, 0, + 199, 0, 0, 0, 0, 0, 232, 214, 195, 0, + 214, 200, 0, 194, 0, 195, 198, 196, 0, 197, + 0, 199, 0, 200, 0, 0, 0, 0, 198, 196, + 0, 197, 0, 199, 232, 0, 195, 0, 0, 214, + 201, 0, 0, 0, 0, 0, 232, 201, 195, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 213, 213, 213, 213, 201, 0, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 201, 0, 0, 0, 0, 0, 0, 0, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 0, 0, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 0, 0, 0, 0, 0, 213, + 213, 213, 213, 213, 213, 213, 213, 213, 213, 0, + 0, 213, 213, 213, 213, 0, 0, 213, 213, 0, + 213, 0, 0, 213, 213, 213, 213, 213, 213, 213, + 213, 213, 213, 213, 0, 0, 0, 213, 213, 213, + 213, 214, 214, 214, 214, 0, 0, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 0, 14, 0, + 0, 0, 0, 0, 0, 214, 214, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 214, 214, 214, 214, 214, 0, 0, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 214, 0, 0, 0, 0, 395, 214, 214, 214, 214, + 214, 214, 214, 214, 214, 214, 209, 14, 214, 214, + 214, 214, 0, 185, 214, 214, 186, 214, 0, 0, + 214, 214, 214, 214, 214, 214, 214, 214, 214, 214, + 214, 0, 0, 0, 214, 214, 214, 214, 0, 209, + 0, 14, 0, 0, 187, 0, 209, 209, 0, 209, + 209, 209, 187, 188, 189, 190, 191, 192, 0, 230, + 231, 189, 190, 191, 192, 209, 209, 0, 209, 0, + 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, + 230, 231, 189, 190, 191, 192, 0, 0, 0, 0, + 0, 0, 187, 188, 189, 190, 191, 192, 0, 209, + 0, 0, 209, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 210, 181, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 209, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 0, 0, 0, + 0, 0, 0, 210, 210, 0, 210, 210, 210, 254, + 255, 256, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 210, 210, 0, 210, 0, 0, 0, 0, + 0, 0, 0, 281, 0, 0, 0, 0, 0, 202, + 0, 0, 0, 0, 202, 202, 202, 202, 0, 202, + 0, 0, 0, 0, 0, 187, 210, 0, 0, 210, + 0, 187, 202, 0, 202, 0, 187, 0, 0, 0, + 0, 0, 0, 309, 0, 0, 0, 0, 0, 0, + 0, 317, 0, 0, 0, 0, 0, 0, 210, 0, + 0, 0, 0, 0, 0, 0, 202, 0, 187, 0, + 0, 0, 0, 0, 260, 0, 0, 0, 0, 0, + 0, 0, 0, 209, 209, 209, 209, 0, 0, 209, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 0, + 0, 0, 0, 0, 0, 0, 0, 209, 209, 209, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, + 209, 209, 209, 209, 209, 209, 209, 0, 0, 209, + 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, + 209, 209, 209, 0, 0, 0, 0, 361, 209, 209, + 209, 209, 209, 209, 209, 209, 209, 209, 0, 0, + 209, 209, 209, 209, 0, 0, 209, 209, 0, 209, + 0, 0, 209, 209, 209, 209, 209, 209, 209, 209, + 209, 209, 209, 0, 260, 0, 209, 209, 209, 209, + 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 210, 0, 0, 0, 0, + 0, 0, 382, 383, 210, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 0, 0, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, + 0, 0, 0, 0, 0, 210, 210, 210, 210, 210, + 210, 210, 210, 210, 210, 229, 0, 210, 210, 210, + 210, 0, 202, 210, 210, 202, 210, 0, 0, 210, + 210, 210, 210, 210, 210, 210, 210, 210, 210, 210, + 0, 0, 0, 210, 210, 210, 210, 0, 229, 52, + 53, 0, 0, 0, 0, 229, 229, 0, 0, 229, + 0, 0, 0, 0, 0, 0, 0, 0, 202, 202, + 202, 202, 202, 202, 229, 229, 0, 229, 0, 0, + 0, 0, 0, 0, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 229, 0, + 0, 229, 76, 77, 78, 79, 0, 0, 0, 0, + 0, 0, 231, 0, 0, 0, 0, 0, 0, 0, + 80, 81, 82, 83, 84, 0, 0, 0, 0, 0, + 229, 0, 0, 0, 0, 257, 0, 0, 0, 0, + 0, 258, 0, 0, 0, 231, 259, 0, 0, 52, + 53, 0, 231, 231, 0, 0, 231, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 231, 231, 0, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 231, 0, 0, 231, 0, + 0, 0, 76, 77, 78, 79, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 81, 82, 83, 84, 0, 0, 231, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 345, 0, 0, 0, 0, 0, 0, + 0, 0, 229, 229, 229, 229, 210, 0, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 0, 0, + 0, 0, 0, 0, 0, 0, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 0, 0, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 0, 0, 0, 0, 0, 229, 229, 229, + 229, 229, 229, 229, 229, 229, 229, 0, 0, 229, + 229, 229, 229, 0, 0, 229, 229, 0, 229, 0, + 0, 229, 229, 229, 229, 229, 229, 229, 229, 229, + 229, 229, 0, 0, 0, 229, 229, 229, 229, 231, + 231, 231, 231, 0, 0, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 0, 0, 0, 0, 0, + 0, 0, 0, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 0, 0, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 0, + 0, 0, 0, 0, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 230, 0, 231, 231, 231, 231, + 0, 0, 231, 231, 0, 231, 0, 0, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 0, + 0, 0, 231, 231, 231, 231, 0, 230, 52, 53, + 0, 0, 0, 0, 230, 230, 0, 0, 230, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 230, 230, 0, 230, 0, 0, 0, + 0, 0, 0, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 0, 0, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 230, 0, 0, + 230, 76, 77, 78, 79, 0, 0, 0, 0, 0, + 0, 228, 0, 0, 76, 77, 78, 79, 0, 80, + 81, 82, 83, 84, 0, 0, 0, 0, 0, 230, + 0, 0, 80, 81, 82, 83, 84, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 0, 0, 0, + 0, 228, 228, 0, 0, 228, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 228, 228, 0, 228, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 0, 0, 228, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 228, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 230, 230, 230, 230, 0, 0, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 0, 0, 0, + 0, 0, 0, 0, 0, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 0, 0, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 0, 0, 0, 0, 0, 230, 230, 230, 230, + 230, 230, 230, 230, 230, 230, 0, 0, 230, 230, + 230, 230, 0, 0, 230, 230, 0, 230, 0, 0, + 230, 230, 230, 230, 230, 230, 230, 230, 230, 230, + 230, 0, 0, 0, 230, 230, 230, 230, 228, 228, + 228, 228, 0, 0, 228, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 0, 15, 0, 0, 0, 0, + 0, 0, 228, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 0, 0, 228, 228, 228, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 228, 0, 0, + 0, 0, 0, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 228, 143, 15, 228, 228, 228, 228, 0, + 0, 228, 228, 0, 228, 0, 0, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 228, 0, 0, + 0, 228, 228, 228, 228, 0, 143, 0, 15, 0, + 0, 188, 0, 143, 143, 0, 143, 143, 143, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 143, 0, 0, 143, 0, 0, 0, 0, + 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 143, 0, 0, 143, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 233, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 143, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, + 233, 233, 0, 0, 233, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 233, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 188, 233, 0, 0, 233, 0, 188, 0, + 0, 0, 0, 188, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 233, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 188, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 143, 143, 143, 143, 0, 0, 143, 0, 143, 143, + 143, 143, 143, 143, 143, 143, 0, 0, 0, 0, + 0, 0, 0, 0, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 0, 0, 0, 0, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, + 143, 143, 143, 143, 143, 0, 0, 143, 143, 143, + 143, 0, 0, 143, 143, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 143, 143, 143, 143, 143, + 0, 0, 0, 143, 143, 143, 143, 233, 233, 233, + 233, 0, 0, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 0, 0, 0, 0, 0, 0, 0, + 0, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 0, 0, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 233, 233, 233, 233, 233, 0, 0, 0, + 0, 0, 233, 233, 233, 233, 233, 233, 233, 233, + 233, 233, 232, 0, 233, 233, 233, 233, 0, 0, + 233, 233, 0, 233, 0, 0, 233, 233, 233, 233, + 0, 0, 233, 233, 233, 233, 233, 0, 0, 0, + 233, 233, 233, 233, 0, 232, 0, 0, 0, 0, + 0, 0, 232, 232, 0, 0, 232, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 232, 0, 0, 232, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 232, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 144, 0, 0, 0, 0, 0, 0, 144, + 144, 0, 144, 144, 144, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, + 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 144, 0, 0, 144, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, + 232, 232, 232, 0, 0, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 0, 0, 0, 0, 0, + 0, 0, 0, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 0, 0, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 232, 232, 232, 232, 232, 0, + 0, 0, 0, 0, 232, 232, 232, 232, 232, 232, + 232, 232, 232, 232, 0, 0, 232, 232, 232, 232, + 0, 0, 232, 232, 0, 232, 0, 0, 232, 232, + 232, 232, 0, 0, 232, 232, 232, 232, 232, 0, + 0, 0, 232, 232, 232, 232, 144, 144, 144, 144, + 0, 0, 144, 0, 144, 144, 144, 144, 144, 144, + 144, 144, 0, 0, 0, 0, 0, 0, 0, 0, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 0, + 0, 0, 0, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, + 144, 234, 0, 144, 144, 144, 144, 0, 0, 144, + 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 144, 144, 144, 144, 144, 0, 0, 0, 144, + 144, 144, 144, 0, 234, 0, 0, 0, 0, 0, + 0, 234, 234, 0, 0, 234, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 234, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 0, 0, 234, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 235, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 234, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 235, 0, 0, 0, 0, 0, 0, 235, 235, + 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 235, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 235, 0, 0, 235, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 235, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 234, 234, + 234, 234, 0, 0, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 0, 0, 0, 0, 0, 0, + 0, 0, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 0, 0, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 0, 0, + 0, 0, 0, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 0, 0, 234, 234, 234, 234, 0, + 0, 234, 234, 0, 234, 0, 0, 234, 234, 0, + 0, 0, 0, 234, 234, 234, 234, 234, 0, 0, + 0, 234, 234, 234, 234, 235, 235, 235, 235, 0, + 0, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 0, 0, 0, 0, 0, 0, 0, 0, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 0, + 0, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 235, 235, 235, 235, 235, 0, 0, 0, 0, 0, + 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, + 130, 0, 235, 235, 235, 235, 0, 0, 235, 235, + 0, 235, 0, 0, 0, 235, 0, 0, 0, 0, + 235, 235, 235, 235, 235, 0, 0, 0, 235, 235, + 235, 235, 0, 130, 0, 0, 0, 0, 0, 0, + 130, 130, 0, 130, 130, 130, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, + 0, 0, 130, 0, 0, 0, 0, 0, 0, 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, 130, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 135, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 130, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 135, 0, 0, 0, 0, 0, 0, 135, 135, 0, + 0, 135, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 135, 0, 0, 135, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 135, 0, 0, 135, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 135, 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, 130, 130, + 130, 0, 0, 130, 0, 130, 130, 130, 130, 130, + 130, 130, 130, 0, 0, 0, 0, 0, 0, 0, + 0, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, + 0, 0, 0, 0, 130, 130, 130, 130, 130, 130, + 130, 130, 130, 130, 130, 130, 130, 0, 0, 0, + 0, 0, 130, 130, 130, 130, 130, 130, 130, 130, + 130, 130, 0, 0, 130, 130, 130, 130, 0, 0, + 130, 130, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 130, 130, 130, 130, 130, 0, 0, 0, + 130, 130, 130, 130, 135, 135, 135, 135, 0, 0, + 135, 0, 135, 135, 135, 135, 135, 135, 135, 135, + 0, 0, 0, 0, 0, 0, 0, 0, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 135, 135, 135, 0, 0, 0, + 0, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 135, 135, 135, 135, 0, 0, 0, 0, 0, 135, + 135, 135, 135, 135, 135, 135, 135, 135, 135, 139, + 0, 135, 135, 135, 135, 0, 0, 135, 135, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, + 135, 135, 135, 135, 0, 0, 0, 135, 135, 135, + 135, 0, 139, 0, 0, 0, 0, 0, 0, 139, + 139, 0, 0, 139, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 139, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 139, 0, 0, 139, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 139, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, + 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, + 0, 0, 88, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 88, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 139, 139, 139, 139, + 0, 0, 139, 0, 139, 139, 139, 139, 139, 139, + 139, 139, 0, 0, 0, 0, 0, 0, 0, 0, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 0, + 0, 0, 0, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 0, 0, 32, 0, + 0, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 0, 0, 139, 139, 139, 139, 0, 0, 139, + 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 31, 139, 139, 139, 139, 139, 0, 0, 0, 139, + 139, 139, 139, 88, 88, 88, 88, 0, 0, 88, + 0, 88, 88, 88, 88, 88, 88, 88, 88, 0, + 0, 0, 0, 0, 0, 0, 0, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 88, 88, 88, 0, 0, 0, 0, + 0, 88, 88, 88, 88, 88, 88, 88, 88, 88, + 88, 88, 88, 90, 0, 0, 0, 0, 88, 88, + 88, 88, 88, 88, 88, 88, 88, 88, 0, 0, + 88, 88, 88, 88, 0, 0, 88, 88, 0, 0, + 0, 0, 0, 0, 0, 0, 90, 0, 88, 88, + 88, 88, 88, 90, 0, 0, 88, 88, 88, 88, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 90, 0, 6, 7, 0, 8, 9, 0, + 0, 0, 0, 0, 0, 0, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 20, 21, 0, 0, + 0, 0, 0, 0, 0, 0, 90, 0, 0, 90, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 90, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, + 0, 0, 0, 92, 0, 23, 24, 0, 0, 25, + 92, 26, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 27, 0, 28, 0, 0, 92, + 29, 30, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 92, 0, 0, 92, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 92, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 90, 90, 90, 90, 0, 0, 90, 0, 90, 90, + 90, 90, 90, 90, 90, 90, 0, 0, 0, 0, + 0, 0, 0, 0, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 90, 90, 90, 0, 0, 0, 0, 0, 90, 90, + 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, + 0, 0, 6, 0, 0, 90, 90, 90, 90, 90, + 90, 90, 90, 90, 90, 0, 0, 90, 90, 90, + 90, 0, 0, 90, 90, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 90, 90, 90, 90, 90, + 0, 0, 0, 90, 90, 90, 90, 92, 92, 92, + 92, 0, 0, 92, 0, 92, 92, 92, 92, 92, + 92, 92, 92, 0, 0, 0, 0, 0, 0, 0, + 0, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, + 0, 0, 0, 0, 0, 92, 92, 92, 92, 92, + 92, 92, 92, 92, 92, 92, 92, 96, 0, 0, + 0, 0, 92, 92, 92, 92, 92, 92, 92, 92, + 92, 92, 0, 0, 92, 92, 92, 92, 0, 0, + 92, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 0, 92, 92, 92, 92, 92, 96, 0, 0, + 92, 92, 92, 92, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 96, 0, 6, 6, + 0, 6, 6, 0, 0, 0, 0, 0, 0, 0, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 0, 0, 96, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 94, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 0, 0, 0, 94, 0, 6, + 6, 0, 0, 6, 94, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, + 6, 0, 0, 94, 6, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 94, 0, 0, + 94, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 94, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 96, 96, 96, 96, 0, 0, + 96, 0, 96, 96, 96, 96, 96, 96, 96, 96, + 0, 0, 0, 0, 0, 0, 0, 0, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 96, 96, 96, 0, 0, 0, + 0, 0, 96, 96, 96, 96, 96, 96, 96, 96, + 96, 96, 96, 96, 0, 0, 0, 0, 0, 96, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 0, + 0, 96, 96, 96, 96, 0, 0, 96, 96, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, + 96, 96, 96, 96, 0, 0, 0, 96, 96, 96, + 96, 94, 94, 94, 94, 0, 0, 94, 0, 94, + 94, 94, 94, 94, 94, 94, 94, 0, 0, 0, + 0, 0, 0, 0, 0, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 94, 94, 94, 0, 0, 0, 0, 0, 94, + 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, + 94, 84, 0, 0, 0, 0, 94, 94, 94, 94, + 94, 94, 94, 94, 94, 94, 0, 0, 94, 94, + 94, 94, 0, 0, 94, 94, 0, 0, 0, 0, + 0, 0, 0, 0, 84, 0, 94, 94, 94, 94, + 94, 84, 0, 0, 94, 94, 94, 94, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 84, 0, 0, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 85, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 84, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 85, 0, 0, 0, 0, 0, 0, 85, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 85, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 85, 0, 0, 85, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 85, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 84, 84, + 84, 84, 0, 0, 84, 0, 84, 84, 84, 84, + 84, 84, 84, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, + 84, 0, 0, 0, 0, 0, 84, 84, 84, 84, + 84, 84, 84, 84, 84, 84, 84, 84, 0, 0, + 0, 0, 0, 84, 84, 84, 84, 84, 84, 84, + 84, 84, 84, 0, 0, 84, 84, 84, 84, 0, + 0, 84, 84, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 84, 84, 84, 84, 84, 0, 0, + 0, 84, 84, 84, 84, 85, 85, 85, 85, 0, + 0, 85, 0, 85, 85, 85, 85, 85, 85, 85, + 85, 0, 0, 0, 0, 0, 0, 0, 0, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 85, 85, 85, 0, 0, + 0, 0, 0, 85, 85, 85, 85, 85, 85, 85, + 85, 85, 85, 85, 85, 86, 0, 0, 0, 0, + 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, + 0, 0, 85, 85, 85, 85, 0, 0, 85, 85, + 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, + 85, 85, 85, 85, 85, 86, 0, 0, 85, 85, + 85, 85, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 86, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 86, 0, + 0, 86, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, + 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 87, 0, 0, 87, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 86, 86, 86, 86, 0, 0, 86, 0, + 86, 86, 86, 86, 86, 86, 86, 86, 0, 0, + 0, 0, 0, 0, 0, 0, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 86, 86, 86, 0, 0, 0, 0, 0, + 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, + 86, 86, 0, 0, 0, 0, 0, 86, 86, 86, + 86, 86, 86, 86, 86, 86, 86, 0, 0, 86, + 86, 86, 86, 0, 0, 86, 86, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 86, 86, 86, + 86, 86, 0, 0, 0, 86, 86, 86, 86, 87, + 87, 87, 87, 0, 0, 87, 0, 87, 87, 87, + 87, 87, 87, 87, 87, 0, 0, 0, 0, 0, + 0, 0, 0, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, + 87, 87, 0, 0, 0, 0, 0, 87, 87, 87, + 87, 87, 87, 87, 87, 87, 87, 87, 87, 97, + 0, 0, 0, 0, 87, 87, 87, 87, 87, 87, + 87, 87, 87, 87, 0, 0, 87, 87, 87, 87, + 0, 0, 87, 87, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 0, 87, 87, 87, 87, 87, 97, + 0, 0, 87, 87, 87, 87, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 97, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 97, 0, 0, 97, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, + 0, 0, 0, 0, 0, 0, 98, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 98, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, + 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 98, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 97, 97, 97, 97, + 0, 0, 97, 0, 97, 97, 97, 97, 97, 97, + 97, 97, 0, 0, 0, 0, 0, 0, 0, 0, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 97, 97, 97, 0, + 0, 0, 0, 0, 97, 97, 97, 97, 97, 97, + 97, 97, 97, 97, 97, 97, 0, 0, 0, 0, + 0, 97, 97, 97, 97, 97, 97, 97, 97, 97, + 97, 0, 0, 97, 97, 97, 97, 0, 0, 97, + 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 97, 97, 97, 97, 97, 0, 0, 0, 97, + 97, 97, 97, 98, 98, 98, 98, 0, 0, 98, + 0, 98, 98, 98, 98, 98, 98, 98, 98, 0, + 0, 0, 0, 0, 0, 0, 0, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 98, 98, 98, 0, 0, 0, 0, + 0, 98, 98, 98, 98, 98, 98, 98, 98, 98, + 98, 98, 98, 99, 0, 0, 0, 0, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, 0, 0, + 98, 98, 98, 98, 0, 0, 98, 98, 0, 0, + 0, 0, 0, 0, 0, 0, 99, 0, 98, 98, + 98, 98, 98, 99, 0, 0, 98, 98, 98, 98, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 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, 0, 0, + 0, 0, 0, 0, 0, 0, 99, 0, 0, 99, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 104, 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, + 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, + 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 104, 0, 0, 104, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 104, 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, 99, 99, 99, 0, 0, 99, 0, 99, 99, + 99, 99, 99, 99, 99, 99, 0, 0, 0, 0, + 0, 0, 0, 0, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 99, 99, 99, 0, 0, 0, 0, 0, 99, 99, + 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, + 0, 0, 0, 0, 0, 99, 99, 99, 99, 99, + 99, 99, 99, 99, 99, 0, 0, 99, 99, 99, + 99, 0, 0, 99, 99, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 99, 99, 99, 99, 99, + 0, 0, 0, 99, 99, 99, 99, 104, 104, 104, + 104, 0, 0, 104, 0, 104, 104, 104, 104, 104, + 104, 104, 104, 0, 0, 0, 0, 0, 0, 0, + 0, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, + 0, 0, 0, 0, 0, 104, 104, 104, 104, 104, + 104, 104, 104, 104, 104, 104, 104, 106, 0, 0, + 0, 0, 104, 104, 104, 104, 104, 104, 104, 104, + 104, 104, 0, 0, 104, 104, 104, 104, 0, 0, + 104, 104, 0, 0, 0, 0, 0, 0, 0, 0, + 106, 0, 104, 104, 104, 104, 104, 106, 0, 0, + 104, 104, 104, 104, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 106, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 106, 0, 0, 106, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 106, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, + 0, 0, 0, 0, 110, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 110, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 110, 0, 0, + 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 106, 106, 106, 106, 0, 0, + 106, 0, 106, 106, 106, 106, 106, 106, 106, 106, + 0, 0, 0, 0, 0, 0, 0, 0, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 106, 106, 106, 0, 0, 0, + 0, 0, 106, 106, 106, 106, 106, 106, 106, 106, + 106, 106, 106, 106, 0, 0, 0, 0, 0, 106, + 106, 106, 106, 106, 106, 106, 106, 106, 106, 0, + 0, 106, 106, 106, 106, 0, 0, 106, 106, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, + 106, 106, 106, 106, 0, 0, 0, 106, 106, 106, + 106, 110, 110, 110, 110, 0, 0, 110, 0, 110, + 110, 110, 110, 110, 110, 110, 110, 0, 0, 0, + 0, 0, 0, 0, 0, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 110, 110, 110, 0, 0, 0, 0, 0, 110, + 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, + 110, 123, 0, 0, 0, 0, 110, 110, 110, 110, + 110, 110, 110, 110, 110, 110, 0, 0, 110, 110, + 110, 110, 0, 0, 110, 110, 0, 0, 0, 0, + 0, 0, 0, 0, 123, 0, 110, 110, 110, 110, + 110, 123, 0, 0, 110, 110, 110, 110, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 123, 0, 0, 123, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 108, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 123, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 108, 0, 0, 0, 0, 0, 0, 108, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 108, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 108, 0, 0, 108, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 123, 123, + 123, 123, 0, 0, 123, 0, 123, 123, 123, 123, + 123, 123, 123, 123, 0, 0, 0, 0, 0, 0, + 0, 0, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, + 123, 0, 0, 0, 0, 0, 123, 123, 123, 123, + 123, 123, 123, 123, 123, 123, 123, 123, 0, 0, + 0, 0, 0, 123, 123, 123, 123, 123, 123, 123, + 123, 123, 123, 0, 0, 123, 123, 123, 123, 0, + 0, 123, 123, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 123, 123, 123, 123, 123, 0, 0, + 0, 123, 123, 123, 123, 108, 108, 108, 108, 0, + 0, 108, 0, 108, 108, 108, 108, 108, 108, 108, + 108, 0, 0, 0, 0, 0, 0, 0, 0, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 108, 108, 108, 0, 0, + 0, 0, 0, 108, 108, 108, 108, 108, 108, 108, + 108, 108, 108, 108, 108, 0, 0, 0, 0, 0, + 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, + 141, 0, 108, 108, 108, 108, 0, 0, 108, 108, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 108, 108, 108, 108, 108, 0, 0, 0, 108, 108, + 108, 108, 0, 141, 0, 0, 0, 0, 0, 0, + 141, 141, 0, 141, 141, 141, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, + 0, 0, 141, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 228, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 141, 0, 0, 141, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 0, 0, 0, 0, 228, 228, 0, 0, 228, + 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, + 0, 0, 0, 0, 228, 228, 0, 228, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 234, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 0, + 0, 228, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 167, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 234, 0, 0, 234, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 234, 0, 167, 0, 0, 0, 0, + 0, 0, 167, 0, 0, 0, 0, 167, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 167, 0, 0, 0, 0, 0, 234, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, + 141, 0, 0, 141, 0, 141, 141, 141, 141, 141, + 141, 141, 141, 0, 0, 167, 0, 0, 167, 234, + 0, 141, 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, + 0, 0, 0, 0, 141, 141, 0, 167, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 141, 141, 141, + 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, + 141, 141, 228, 228, 228, 228, 0, 0, 228, 0, + 141, 141, 0, 228, 104, 0, 228, 228, 0, 0, + 0, 103, 294, 0, 0, 0, 87, 0, 0, 0, + 141, 141, 141, 141, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 0, 0, 0, 0, 0, 228, 228, 228, + 228, 228, 228, 228, 228, 228, 228, 86, 0, 228, + 228, 228, 228, 0, 0, 0, 0, 0, 234, 0, + 0, 228, 228, 228, 228, 228, 228, 228, 228, 228, + 228, 228, 0, 0, 0, 0, 0, 0, 228, 167, + 167, 167, 167, 0, 234, 167, 0, 167, 167, 167, + 167, 167, 167, 0, 234, 40, 0, 234, 0, 0, + 0, 0, 0, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, + 167, 167, 0, 0, 0, 0, 0, 167, 40, 0, + 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, + 234, 234, 0, 0, 167, 167, 167, 167, 167, 167, + 167, 167, 167, 167, 40, 0, 0, 0, 0, 0, + 0, 0, 167, 167, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 167, 167, 167, 167, 0, 0, 40, 0, + 0, 40, 0, 0, 0, 0, 42, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 48, + 49, 8, 0, 0, 50, 0, 0, 0, 0, 51, + 40, 0, 52, 53, 0, 0, 0, 0, 0, 42, + 0, 0, 0, 0, 0, 0, 42, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 42, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 0, 0, + 0, 0, 0, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 0, 0, 76, 77, 78, 79, 42, + 0, 0, 42, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 95, 80, 81, 82, 83, 84, 0, 0, + 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, + 0, 42, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 40, 40, 40, 40, 0, 0, 40, 0, + 0, 95, 0, 40, 0, 0, 40, 40, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 95, 0, 0, 0, 0, + 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, + 40, 40, 0, 0, 0, 0, 0, 40, 40, 40, + 40, 40, 40, 40, 40, 40, 40, 95, 0, 40, + 40, 40, 40, 0, 0, 93, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 40, 40, 40, + 40, 40, 0, 42, 42, 42, 42, 0, 40, 42, + 0, 0, 0, 0, 42, 0, 0, 42, 42, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 93, 0, 0, 0, 0, 0, + 0, 42, 42, 42, 42, 42, 42, 42, 42, 42, + 42, 42, 42, 0, 0, 0, 0, 0, 42, 42, + 42, 42, 42, 42, 42, 42, 42, 42, 93, 0, + 42, 42, 42, 42, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 91, 0, 0, 0, 42, 42, + 42, 42, 42, 0, 0, 0, 0, 0, 0, 42, + 93, 0, 95, 0, 0, 0, 0, 95, 95, 95, + 0, 95, 95, 95, 95, 0, 0, 0, 0, 0, + 0, 0, 0, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, + 95, 95, 187, 91, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 91, 0, 0, + 0, 0, 95, 95, 0, 0, 0, 0, 0, 103, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 95, 95, 95, 95, 0, 0, 0, 91, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 40, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 93, 0, 0, 0, 0, + 93, 93, 93, 0, 93, 93, 93, 93, 103, 0, + 0, 0, 0, 32, 0, 0, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, + 93, 93, 93, 93, 93, 188, 0, 0, 0, 0, + 0, 0, 103, 0, 0, 31, 0, 0, 0, 0, + 0, 0, 0, 105, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 103, 93, 93, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 93, 93, 93, 93, 0, + 0, 0, 0, 0, 91, 0, 0, 0, 0, 91, + 91, 91, 105, 91, 91, 91, 91, 0, 0, 0, + 0, 0, 0, 0, 0, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, + 91, 91, 91, 91, 0, 0, 105, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 105, 6, + 7, 0, 8, 9, 91, 91, 0, 0, 0, 0, + 0, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 20, 21, 0, 91, 91, 91, 91, 0, 103, + 0, 0, 0, 0, 103, 103, 103, 109, 103, 103, + 103, 103, 0, 0, 0, 0, 0, 0, 0, 0, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, + 103, 103, 103, 103, 103, 103, 103, 103, 103, 0, + 0, 109, 0, 0, 22, 0, 0, 0, 0, 0, + 23, 24, 107, 0, 25, 0, 26, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, + 0, 28, 0, 109, 0, 29, 30, 0, 0, 103, + 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, + 103, 103, 103, 105, 0, 0, 0, 0, 105, 105, + 105, 107, 105, 105, 105, 105, 0, 0, 0, 0, + 0, 0, 0, 0, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 0, 0, 107, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 107, 0, 0, + 0, 0, 0, 105, 105, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, + 0, 0, 80, 105, 105, 105, 105, 0, 109, 0, + 0, 0, 0, 109, 109, 109, 0, 109, 109, 109, + 109, 80, 0, 0, 0, 0, 0, 0, 0, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, + 109, 109, 109, 109, 109, 109, 109, 109, 0, 0, + 0, 0, 0, 0, 0, 80, 0, 0, 80, 0, + 0, 146, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 80, 109, 109, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 146, 0, 146, 146, 109, 109, + 109, 109, 107, 0, 0, 0, 0, 107, 107, 107, + 146, 107, 107, 107, 107, 0, 0, 0, 0, 0, + 0, 0, 0, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, + 107, 107, 0, 0, 146, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 146, 0, 0, 0, + 0, 0, 107, 107, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 107, 107, 107, 107, 0, 0, 0, 80, + 80, 80, 0, 0, 0, 80, 0, 80, 80, 80, + 80, 80, 80, 80, 80, 0, 0, 0, 0, 0, + 0, 0, 0, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 0, 0, 0, 0, 0, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, 80, 0, + 0, 0, 0, 0, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 236, 0, 80, 80, 80, 80, + 0, 0, 80, 80, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 80, 80, 80, 80, 80, 0, + 0, 0, 80, 80, 80, 0, 0, 0, 0, 0, + 0, 236, 146, 146, 0, 236, 236, 236, 236, 236, + 0, 236, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 236, 236, 0, 236, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 146, 146, 146, + 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, + 146, 146, 146, 0, 0, 0, 0, 236, 0, 0, + 0, 0, 88, 0, 0, 146, 146, 146, 146, 85, + 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, + 0, 0, 0, 146, 146, 146, 146, 146, 0, 236, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 32, 0, 0, 0, 0, 86, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 31, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 6, 0, 0, 0, 0, 0, 0, 6, 0, + 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 236, 6, + 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 236, 0, 0, 0, 0, 0, + 0, 6, 0, 0, 236, 0, 0, 236, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 88, 0, 274, 275, 49, 8, + 9, 103, 50, 0, 0, 0, 87, 51, 10, 11, + 276, 277, 14, 15, 16, 17, 18, 19, 20, 21, + 236, 236, 236, 236, 236, 236, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 55, 56, 57, 58, 59, + 60, 61, 62, 63, 64, 65, 0, 86, 0, 0, + 0, 66, 67, 68, 69, 70, 71, 72, 73, 74, + 75, 22, 0, 76, 77, 78, 79, 23, 24, 0, + 0, 25, 0, 26, 0, 0, 0, 0, 0, 0, + 0, 80, 81, 82, 83, 84, 27, 0, 28, 0, + 0, 0, 29, 30, 0, 6, 6, 6, 6, 6, + 0, 6, 0, 0, 0, 0, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 0, + 88, 0, 0, 0, 0, 0, 0, 85, 0, 0, + 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 0, 0, 0, 0, 0, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 0, 6, 6, 6, 6, 6, 6, 0, 0, + 6, 0, 6, 86, 0, 0, 0, 0, 0, 0, + 6, 6, 6, 6, 6, 6, 0, 6, 0, 0, + 0, 6, 6, 0, 0, 0, 0, 0, 47, 48, + 49, 8, 0, 0, 50, 0, 119, 120, 121, 51, + 122, 123, 124, 125, 0, 0, 0, 0, 0, 0, + 0, 0, 126, 127, 128, 129, 130, 131, 132, 133, + 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, + 144, 0, 0, 0, 0, 0, 54, 55, 56, 57, + 58, 59, 60, 61, 62, 63, 64, 65, 0, 0, + 0, 0, 0, 66, 67, 68, 69, 70, 71, 72, + 73, 74, 75, 0, 0, 76, 77, 78, 79, 104, + 0, 145, 146, 0, 0, 0, 103, 0, 0, 0, + 0, 87, 0, 80, 81, 82, 83, 84, 0, 0, + 0, 147, 148, 149, 29, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 47, 48, 49, 8, 0, 0, + 50, 0, 86, 0, 0, 51, 0, 0, 52, 53, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 54, 55, 56, 57, 58, 59, 60, 61, + 62, 63, 64, 65, 0, 0, 0, 0, 0, 66, + 67, 68, 69, 70, 71, 72, 73, 74, 75, 104, + 0, 76, 77, 78, 79, 0, 85, 0, 0, 0, + 0, 87, 0, 0, 0, 0, 0, 0, 0, 80, + 81, 82, 83, 84, 0, 0, 0, 0, 0, 0, + 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 86, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 47, 48, 49, 8, 0, 0, 50, + 0, 0, 0, 0, 51, 0, 104, 52, 53, 0, + 0, 0, 0, 265, 0, 0, 0, 0, 87, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 0, 0, 0, 0, 0, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 0, 86, + 76, 77, 78, 79, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 81, + 82, 83, 84, 0, 0, 0, 0, 0, 0, 29, + 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, + 0, 0, 0, 0, 103, 0, 397, 0, 0, 87, + 0, 0, 0, 47, 48, 49, 8, 0, 0, 50, + 0, 0, 0, 0, 51, 0, 0, 52, 53, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 86, 54, 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 0, 0, 0, 0, 0, 66, 67, + 68, 69, 70, 71, 72, 73, 74, 75, 0, 0, + 76, 77, 78, 79, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 80, 81, + 82, 83, 84, 0, 0, 0, 0, 88, 0, 29, + 47, 48, 49, 8, 103, 0, 50, 0, 0, 87, + 0, 51, 0, 0, 52, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, + 86, 0, 0, 0, 0, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 0, 0, 76, 77, 78, + 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 80, 81, 82, 83, 84, + 0, 47, 48, 49, 0, 0, 29, 50, 0, 0, + 0, 0, 51, 88, 0, 52, 53, 0, 0, 0, + 85, 0, 0, 0, 0, 87, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 0, 0, 0, 0, 0, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 86, 0, 76, 77, + 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 81, 82, 83, + 84, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88, 0, + 0, 47, 48, 49, 0, 265, 0, 50, 0, 0, + 87, 0, 51, 0, 0, 52, 53, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, + 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, + 65, 86, 0, 0, 0, 0, 66, 67, 68, 69, + 70, 71, 72, 73, 74, 75, 0, 0, 76, 77, + 78, 79, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 80, 81, 82, 83, + 84, 88, 0, 0, 0, 0, 0, 0, 103, 0, + 0, 0, 0, 87, 0, 0, 0, 47, 48, 49, + 0, 0, 0, 50, 0, 0, 0, 0, 51, 0, + 0, 52, 53, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 86, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 0, 0, 0, + 0, 0, 66, 67, 68, 69, 70, 71, 72, 73, + 74, 75, 0, 0, 76, 77, 78, 79, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 80, 81, 82, 83, 84, 0, 0, 0, + 0, 0, 47, 48, 49, 0, 0, 0, 50, 0, + 0, 0, 0, 51, 0, 0, 52, 53, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, + 64, 65, 0, 0, 0, 0, 0, 66, 67, 68, + 69, 70, 71, 72, 73, 74, 75, 0, 0, 76, + 77, 78, 79, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 80, 81, 82, + 83, 84, 0, 0, 0, 47, 48, 49, 0, 0, + 0, 50, 0, 0, 0, 0, 51, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 55, 56, 57, 58, 59, 60, + 61, 62, 63, 64, 65, 0, 0, 0, 0, 0, + 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, + 0, 0, 76, 77, 78, 79, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 80, 81, 82, 83, 84, +}; +short yycheck[] = { 24, + 118, 44, 37, 28, 104, 30, 59, 42, 43, 37, + 45, 36, 47, 0, 42, 43, 260, 45, 93, 47, + 43, 0, 45, 43, 98, 45, 0, 0, 85, 4, + 260, 100, 60, 59, 62, 95, 154, 37, 43, 44, + 45, 257, 42, 43, 113, 45, 58, 47, 35, 24, + 96, 258, 96, 258, 41, 30, 0, 0, 40, 94, + 85, 36, 87, 88, 0, 0, 94, 41, 41, 345, + 44, 44, 43, 133, 45, 100, 61, 134, 58, 104, + 59, 61, 43, 44, 45, 59, 59, 41, 113, 333, + 44, 62, 41, 333, 94, 44, 262, 122, 123, 124, + 125, 126, 127, 128, 129, 130, 131, 132, 0, 134, + 40, 136, 137, 138, 93, 59, 59, 346, 347, 93, + 93, 0, 147, 148, 59, 100, 342, 343, 203, 154, + 230, 231, 40, 363, 234, 235, 111, 40, 113, 0, + 41, 33, 43, 118, 45, 40, 125, 40, 40, 93, + 93, 125, 125, 45, 370, 212, 213, 93, 93, 40, + 271, 272, 187, 188, 189, 190, 191, 192, 193, 194, + 195, 196, 197, 198, 199, 200, 201, 202, 40, 154, + 41, 125, 125, 44, 258, 259, 40, 212, 213, 125, + 125, 37, 40, 0, 0, 40, 42, 257, 59, 91, + 290, 47, 227, 263, 96, 230, 231, 232, 265, 234, + 235, 257, 61, 257, 93, 258, 258, 263, 0, 263, + 37, 260, 268, 41, 268, 42, 43, 41, 45, 262, + 47, 123, 93, 264, 41, 41, 94, 44, 44, 257, + 265, 352, 353, 60, 46, 62, 125, 301, 94, 348, + 349, 369, 59, 59, 300, 317, 318, 319, 320, 321, + 93, 236, 237, 93, 125, 300, 241, 341, 303, 43, + 44, 45, 125, 298, 114, 115, 262, 94, 262, 257, + 41, 304, 342, 343, 41, 44, 93, 93, 37, 41, + 264, 264, 302, 42, 43, 41, 45, 41, 47, 44, + 41, 44, 41, 262, 257, 346, 358, 303, 260, 91, + 370, 60, 41, 62, 271, 272, 290, 290, 125, 125, + 348, 349, 350, 351, 41, 260, 300, 41, 343, 303, + 265, 266, 267, 262, 269, 270, 271, 272, 363, 364, + 365, 123, 367, 0, 41, 94, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 257, 258, 259, 260, 261, + 395, 263, 397, 347, 347, 343, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 0, + 154, 374, 343, 343, 369, 352, 353, 30, 35, -1, + -1, -1, 91, 264, -1, 340, 341, -1, -1, -1, + 0, 0, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 360, 361, 362, 363, 290, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, -1, 334, 335, 336, 337, 338, 339, 59, -1, + 342, 41, 344, -1, 44, -1, -1, 264, 264, -1, + 352, 353, 354, 355, 356, 357, -1, 359, 0, 59, + 59, 363, 364, -1, -1, 257, 258, -1, 260, 261, + -1, -1, 93, 290, 290, 346, 347, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, 0, + -1, 33, -1, 93, 93, 37, -1, 0, 40, 41, + 42, 43, 44, 45, 125, 47, -1, -1, -1, -1, + -1, -1, -1, 26, -1, -1, -1, 59, 60, 346, + 62, 348, 349, 350, 351, 125, 125, -1, 24, 42, + 347, 347, -1, -1, 30, -1, 0, -1, -1, -1, + 332, -1, -1, -1, -1, -1, 338, 339, 59, -1, + 342, 93, 344, 0, 96, -1, 59, -1, -1, -1, + -1, 260, -1, -1, 0, 357, 0, 359, -1, 268, + -1, 363, 364, 86, 273, 274, 275, 276, 277, 278, + -1, 280, 93, 125, -1, -1, -1, -1, -1, 85, + 93, 350, 351, -1, 41, 59, -1, 44, -1, 33, + -1, -1, -1, 37, 100, -1, 40, 41, 42, 43, + 44, 45, 59, 47, 125, -1, -1, 113, -1, -1, + -1, -1, 125, 59, -1, 59, 60, -1, 62, 93, + -1, -1, -1, -1, 130, 131, 132, -1, -1, -1, + -1, -1, -1, 156, -1, -1, 93, 160, 161, 162, + 163, 164, 165, 166, 167, 168, 169, 93, 154, 93, + -1, 125, 96, 37, 264, -1, -1, -1, 42, 43, + -1, 45, -1, 47, 37, -1, -1, -1, 125, 42, + 43, 44, 45, -1, 47, -1, 60, -1, 62, 125, + 290, 125, -1, -1, -1, -1, -1, 60, 194, 62, + -1, -1, -1, -1, -1, -1, 202, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, -1, + 94, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 94, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, -1, + -1, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, 91, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + -1, -1, 334, 335, 336, 337, -1, -1, 340, 341, + -1, 343, 298, -1, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, 264, 360, 361, + 362, 363, -1, 257, 258, 259, 260, 91, -1, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, + 353, -1, -1, 290, 357, 358, -1, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, 363, 364, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, -1, -1, -1, 260, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 0, -1, + 334, 335, 336, 337, -1, -1, 340, 341, 0, 343, + -1, -1, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, -1, -1, 360, 361, 362, 363, + -1, 33, -1, -1, -1, 37, 0, -1, 40, 41, + 42, 43, 44, 45, -1, 47, -1, -1, 260, -1, + -1, 43, -1, 45, -1, -1, 268, 59, 60, -1, + 62, 273, 274, 275, 276, 277, 278, 59, 280, -1, + -1, -1, 346, 347, 348, 349, 350, 351, -1, 43, + -1, 45, -1, 346, 347, 348, 349, 350, 351, 363, + -1, 93, -1, -1, 96, 59, 260, -1, -1, -1, + -1, 93, -1, -1, -1, 0, -1, -1, -1, 273, + 274, 275, 276, 277, 278, -1, 280, -1, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, 93, + -1, -1, -1, 125, -1, -1, -1, -1, 33, -1, + -1, -1, 37, -1, -1, 40, 41, 42, 43, 44, + 45, -1, 47, -1, -1, -1, -1, -1, -1, -1, + -1, 125, -1, -1, 59, 60, -1, 62, -1, -1, + -1, -1, -1, -1, 37, -1, -1, -1, -1, 42, + 43, 37, 45, -1, 47, -1, 42, 43, 44, 45, + -1, 47, -1, -1, -1, -1, -1, 60, 93, 62, + -1, 96, 37, -1, 60, -1, 62, 42, 43, 44, + 45, -1, 47, -1, 37, -1, -1, -1, -1, 42, + 43, -1, 45, -1, 47, 60, -1, 62, -1, -1, + 125, 94, -1, -1, -1, -1, -1, 60, 94, 62, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 257, 258, 259, 260, 94, + -1, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, 94, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, -1, + -1, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + -1, -1, 334, 335, 336, 337, -1, -1, 340, 341, + -1, 343, -1, -1, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, -1, -1, -1, 360, 361, + 362, 363, 257, 258, 259, 260, -1, -1, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, + -1, -1, -1, -1, -1, -1, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, -1, -1, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 0, -1, 334, + 335, 336, 337, -1, 300, 340, 341, 303, 343, -1, + -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, -1, 286, -1, 360, 361, 362, 363, -1, + 33, -1, -1, -1, 37, -1, -1, 40, 41, 42, + 43, 44, 45, 346, 47, 348, 349, 350, 351, -1, + 346, 347, 348, 349, 350, 351, 59, 60, -1, 62, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 346, 347, 348, 349, 350, 351, -1, -1, -1, + -1, -1, -1, 346, 347, 348, 349, 350, 351, -1, + 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, + -1, 37, -1, -1, 40, 41, 42, 43, 44, 45, + -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, 60, -1, 62, -1, -1, -1, + -1, -1, -1, 37, -1, -1, -1, -1, 42, 43, + 37, 45, -1, 47, -1, 42, 43, 44, 45, -1, + 47, -1, -1, -1, -1, -1, 60, 93, 62, -1, + 96, 37, -1, 60, -1, 62, 42, 43, -1, 45, + -1, 47, -1, 37, -1, -1, -1, -1, 42, 43, + -1, 45, -1, 47, 60, -1, 62, -1, -1, 125, + 94, -1, -1, -1, -1, -1, 60, 94, 62, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 257, 258, 259, 260, 94, -1, + 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, + 94, -1, -1, -1, -1, -1, -1, -1, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, 300, -1, -1, + 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, -1, -1, -1, -1, -1, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + -1, 334, 335, 336, 337, -1, -1, 340, 341, -1, + 343, -1, -1, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, -1, -1, -1, 360, 361, 362, + 363, 257, 258, 259, 260, -1, -1, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, -1, 0, -1, + -1, -1, -1, -1, -1, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, -1, -1, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, -1, -1, -1, 289, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 0, 59, 334, 335, + 336, 337, -1, 300, 340, 341, 303, 343, -1, -1, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, 360, 361, 362, 363, -1, 33, + -1, 93, -1, -1, 96, -1, 40, 41, -1, 43, + 44, 45, 346, 347, 348, 349, 350, 351, -1, 346, + 347, 348, 349, 350, 351, 59, 60, -1, 62, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + 346, 347, 348, 349, 350, 351, -1, -1, -1, -1, + -1, -1, 346, 347, 348, 349, 350, 351, -1, 93, + -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 0, 85, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 33, -1, -1, -1, + -1, -1, -1, 40, 41, -1, 43, 44, 45, 130, + 131, 132, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 59, 60, -1, 62, -1, -1, -1, -1, + -1, -1, -1, 154, -1, -1, -1, -1, -1, 37, + -1, -1, -1, -1, 42, 43, 44, 45, -1, 47, + -1, -1, -1, -1, -1, 257, 93, -1, -1, 96, + -1, 263, 60, -1, 62, -1, 268, -1, -1, -1, + -1, -1, -1, 194, -1, -1, -1, -1, -1, -1, + -1, 202, -1, -1, -1, -1, -1, -1, 125, -1, + -1, -1, -1, -1, -1, -1, 94, -1, 300, -1, + -1, -1, -1, -1, 46, -1, -1, -1, -1, -1, + -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, + 264, 265, 266, 267, 268, 269, 270, 271, 272, -1, + -1, -1, -1, -1, -1, -1, -1, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, 300, -1, -1, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, -1, -1, -1, -1, 298, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, -1, -1, + 334, 335, 336, 337, -1, -1, 340, 341, -1, 343, + -1, -1, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, -1, 46, -1, 360, 361, 362, 363, + 257, 258, 259, 260, -1, -1, 263, 264, 265, 266, + 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, + -1, -1, 363, 364, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, 300, -1, -1, 303, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + -1, -1, -1, -1, -1, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, 0, -1, 334, 335, 336, + 337, -1, 300, 340, 341, 303, 343, -1, -1, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + -1, -1, -1, 360, 361, 362, 363, -1, 33, 271, + 272, -1, -1, -1, -1, 40, 41, -1, -1, 44, + -1, -1, -1, -1, -1, -1, -1, -1, 346, 347, + 348, 349, 350, 351, 59, 60, -1, 62, -1, -1, + -1, -1, -1, -1, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, + -1, 96, 334, 335, 336, 337, -1, -1, -1, -1, + -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, + 352, 353, 354, 355, 356, -1, -1, -1, -1, -1, + 125, -1, -1, -1, -1, 257, -1, -1, -1, -1, + -1, 263, -1, -1, -1, 33, 268, -1, -1, 271, + 272, -1, 40, 41, -1, -1, 44, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, 60, -1, 62, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, + -1, -1, 334, 335, 336, 337, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 352, 353, 354, 355, 356, -1, -1, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 46, -1, -1, -1, -1, -1, -1, + -1, -1, 257, 258, 259, 260, 46, -1, 263, 264, + 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, + -1, -1, -1, -1, -1, -1, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, -1, -1, 303, 304, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, -1, 334, + 335, 336, 337, -1, -1, 340, 341, -1, 343, -1, + -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, -1, -1, -1, 360, 361, 362, 363, 257, + 258, 259, 260, -1, -1, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, -1, -1, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, + -1, -1, -1, -1, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 0, -1, 334, 335, 336, 337, + -1, -1, 340, 341, -1, 343, -1, -1, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, -1, + -1, -1, 360, 361, 362, 363, -1, 33, 271, 272, + -1, -1, -1, -1, 40, 41, -1, -1, 44, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, 60, -1, 62, -1, -1, -1, + -1, -1, -1, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, -1, -1, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 93, -1, -1, + 96, 334, 335, 336, 337, -1, -1, -1, -1, -1, + -1, 0, -1, -1, 334, 335, 336, 337, -1, 352, + 353, 354, 355, 356, -1, -1, -1, -1, -1, 125, + -1, -1, 352, 353, 354, 355, 356, -1, -1, -1, + -1, -1, -1, -1, 33, -1, -1, -1, -1, -1, + -1, 40, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, 60, -1, 62, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 257, 258, 259, 260, -1, -1, 263, 264, 265, + 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, + -1, -1, -1, -1, -1, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, 300, -1, -1, 303, 304, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, -1, -1, -1, -1, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, -1, -1, 334, 335, + 336, 337, -1, -1, 340, 341, -1, 343, -1, -1, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, -1, -1, -1, 360, 361, 362, 363, 257, 258, + 259, 260, -1, -1, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, -1, 0, -1, -1, -1, -1, + -1, -1, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, -1, -1, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, 0, 59, 334, 335, 336, 337, -1, + -1, 340, 341, -1, 343, -1, -1, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, -1, -1, + -1, 360, 361, 362, 363, -1, 33, -1, 93, -1, + -1, 96, -1, 40, 41, -1, 43, 44, 45, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 59, -1, -1, 62, -1, -1, -1, -1, + 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 125, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, + 40, 41, -1, -1, 44, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 257, 93, -1, -1, 96, -1, 263, -1, + -1, -1, -1, 268, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 300, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, -1, -1, 263, -1, 265, 266, + 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, + -1, -1, -1, -1, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, -1, -1, -1, -1, 304, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, -1, 334, 335, 336, + 337, -1, -1, 340, 341, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 352, 353, 354, 355, 356, + -1, -1, -1, 360, 361, 362, 363, 257, 258, 259, + 260, -1, -1, 263, 264, 265, 266, 267, 268, 269, + 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + 300, -1, -1, 303, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, + -1, -1, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 0, -1, 334, 335, 336, 337, -1, -1, + 340, 341, -1, 343, -1, -1, 346, 347, 348, 349, + -1, -1, 352, 353, 354, 355, 356, -1, -1, -1, + 360, 361, 362, 363, -1, 33, -1, -1, -1, -1, + -1, -1, 40, 41, -1, -1, 44, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 33, -1, -1, -1, -1, -1, -1, 40, + 41, -1, 43, 44, 45, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, 62, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 257, + 258, 259, 260, -1, -1, 263, 264, 265, 266, 267, + 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, -1, -1, 303, 304, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, + -1, -1, -1, -1, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, -1, -1, 334, 335, 336, 337, + -1, -1, 340, 341, -1, 343, -1, -1, 346, 347, + 348, 349, -1, -1, 352, 353, 354, 355, 356, -1, + -1, -1, 360, 361, 362, 363, 257, 258, 259, 260, + -1, -1, 263, -1, 265, 266, 267, 268, 269, 270, + 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, -1, + -1, -1, -1, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 0, -1, 334, 335, 336, 337, -1, -1, 340, + 341, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 352, 353, 354, 355, 356, -1, -1, -1, 360, + 361, 362, 363, -1, 33, -1, -1, -1, -1, -1, + -1, 40, 41, -1, -1, 44, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 33, -1, -1, -1, -1, -1, -1, 40, 41, + -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, + 259, 260, -1, -1, 263, 264, 265, 266, 267, 268, + 269, 270, 271, 272, -1, -1, -1, -1, -1, -1, + -1, -1, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, 300, -1, -1, 303, 304, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, -1, 334, 335, 336, 337, -1, + -1, 340, 341, -1, 343, -1, -1, 346, 347, -1, + -1, -1, -1, 352, 353, 354, 355, 356, -1, -1, + -1, 360, 361, 362, 363, 257, 258, 259, 260, -1, + -1, 263, 264, 265, 266, 267, 268, 269, 270, 271, + 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, 300, -1, + -1, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 0, -1, 334, 335, 336, 337, -1, -1, 340, 341, + -1, 343, -1, -1, -1, 347, -1, -1, -1, -1, + 352, 353, 354, 355, 356, -1, -1, -1, 360, 361, + 362, 363, -1, 33, -1, -1, -1, -1, -1, -1, + 40, 41, -1, 43, 44, 45, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 0, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, -1, -1, -1, -1, -1, 40, 41, -1, + -1, 44, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 59, -1, -1, 62, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, + 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + -1, -1, -1, -1, 304, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, + -1, -1, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, -1, -1, 334, 335, 336, 337, -1, -1, + 340, 341, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 352, 353, 354, 355, 356, -1, -1, -1, + 360, 361, 362, 363, 257, 258, 259, 260, -1, -1, + 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, + -1, -1, -1, -1, -1, -1, -1, -1, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, -1, -1, -1, + -1, 304, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, -1, -1, -1, -1, -1, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 0, + -1, 334, 335, 336, 337, -1, -1, 340, 341, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 352, + 353, 354, 355, 356, -1, -1, -1, 360, 361, 362, + 363, -1, 33, -1, -1, -1, -1, -1, -1, 40, + 41, -1, -1, 44, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, + -1, -1, 263, -1, 265, 266, 267, 268, 269, 270, + 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, -1, + -1, -1, -1, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, -1, -1, 91, -1, + -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, -1, 334, 335, 336, 337, -1, -1, 340, + 341, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 123, 352, 353, 354, 355, 356, -1, -1, -1, 360, + 361, 362, 363, 257, 258, 259, 260, -1, -1, 263, + -1, 265, 266, 267, 268, 269, 270, 271, 272, -1, + -1, -1, -1, -1, -1, -1, -1, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, -1, -1, -1, -1, + -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 0, -1, -1, -1, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, -1, -1, + 334, 335, 336, 337, -1, -1, 340, 341, -1, -1, + -1, -1, -1, -1, -1, -1, 33, -1, 352, 353, + 354, 355, 356, 40, -1, -1, 360, 361, 362, 363, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 59, -1, 257, 258, -1, 260, 261, -1, + -1, -1, -1, -1, -1, -1, 269, 270, 271, 272, + 273, 274, 275, 276, 277, 278, 279, 280, -1, -1, + -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 125, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 332, + -1, -1, -1, 33, -1, 338, 339, -1, -1, 342, + 40, 344, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 357, -1, 359, -1, -1, 59, + 363, 364, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, -1, -1, 263, -1, 265, 266, + 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, + -1, -1, -1, -1, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, -1, -1, -1, -1, -1, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + -1, -1, 91, -1, -1, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, -1, 334, 335, 336, + 337, -1, -1, 340, 341, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 123, 352, 353, 354, 355, 356, + -1, -1, -1, 360, 361, 362, 363, 257, 258, 259, + 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, + 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + -1, -1, -1, -1, -1, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 0, -1, -1, + -1, -1, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, -1, -1, 334, 335, 336, 337, -1, -1, + 340, 341, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, 352, 353, 354, 355, 356, 40, -1, -1, + 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 59, -1, 257, 258, + -1, 260, 261, -1, -1, -1, -1, -1, -1, -1, + 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, + 279, 280, -1, -1, -1, -1, -1, -1, -1, -1, + 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 332, -1, -1, -1, 33, -1, 338, + 339, -1, -1, 342, 40, 344, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 357, -1, + 359, -1, -1, 59, 363, 364, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 257, 258, 259, 260, -1, -1, + 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, + -1, -1, -1, -1, -1, -1, -1, -1, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, -1, -1, -1, + -1, -1, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, -1, -1, -1, -1, -1, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + -1, 334, 335, 336, 337, -1, -1, 340, 341, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 352, + 353, 354, 355, 356, -1, -1, -1, 360, 361, 362, + 363, 257, 258, 259, 260, -1, -1, 263, -1, 265, + 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, + -1, -1, -1, -1, -1, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, -1, -1, -1, -1, -1, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 0, -1, -1, -1, -1, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, -1, -1, 334, 335, + 336, 337, -1, -1, 340, 341, -1, -1, -1, -1, + -1, -1, -1, -1, 33, -1, 352, 353, 354, 355, + 356, 40, -1, -1, 360, 361, 362, 363, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, + 259, 260, -1, -1, 263, -1, 265, 266, 267, 268, + 269, 270, 271, 272, -1, -1, -1, -1, -1, -1, + -1, -1, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, -1, -1, -1, -1, -1, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, -1, 334, 335, 336, 337, -1, + -1, 340, 341, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 352, 353, 354, 355, 356, -1, -1, + -1, 360, 361, 362, 363, 257, 258, 259, 260, -1, + -1, 263, -1, 265, 266, 267, 268, 269, 270, 271, + 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, -1, -1, + -1, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, 0, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + -1, -1, 334, 335, 336, 337, -1, -1, 340, 341, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + 352, 353, 354, 355, 356, 40, -1, -1, 360, 361, + 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, + -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, + -1, -1, 40, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 257, 258, 259, 260, -1, -1, 263, -1, + 265, 266, 267, 268, 269, 270, 271, 272, -1, -1, + -1, -1, -1, -1, -1, -1, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, -1, -1, -1, -1, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, -1, 334, + 335, 336, 337, -1, -1, 340, 341, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 352, 353, 354, + 355, 356, -1, -1, -1, 360, 361, 362, 363, 257, + 258, 259, 260, -1, -1, 263, -1, 265, 266, 267, + 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, -1, -1, -1, -1, -1, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 0, + -1, -1, -1, -1, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, -1, -1, 334, 335, 336, 337, + -1, -1, 340, 341, -1, -1, -1, -1, -1, -1, + -1, -1, 33, -1, 352, 353, 354, 355, 356, 40, + -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 59, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 93, -1, -1, 96, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 125, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, + -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 93, + -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 257, 258, 259, 260, + -1, -1, 263, -1, 265, 266, 267, 268, 269, 270, + 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, -1, + -1, -1, -1, -1, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, -1, -1, -1, -1, + -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, -1, -1, 334, 335, 336, 337, -1, -1, 340, + 341, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 352, 353, 354, 355, 356, -1, -1, -1, 360, + 361, 362, 363, 257, 258, 259, 260, -1, -1, 263, + -1, 265, 266, 267, 268, 269, 270, 271, 272, -1, + -1, -1, -1, -1, -1, -1, -1, 281, 282, 283, + 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, + 294, 295, 296, 297, 298, 299, -1, -1, -1, -1, + -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 0, -1, -1, -1, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, -1, -1, + 334, 335, 336, 337, -1, -1, 340, 341, -1, -1, + -1, -1, -1, -1, -1, -1, 33, -1, 352, 353, + 354, 355, 356, 40, -1, -1, 360, 361, 362, 363, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 59, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 93, -1, -1, 96, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 125, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 33, -1, -1, -1, -1, -1, -1, + 40, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 257, 258, 259, 260, -1, -1, 263, -1, 265, 266, + 267, 268, 269, 270, 271, 272, -1, -1, -1, -1, + -1, -1, -1, -1, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, -1, -1, -1, -1, -1, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + -1, -1, -1, -1, -1, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, -1, 334, 335, 336, + 337, -1, -1, 340, 341, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 352, 353, 354, 355, 356, + -1, -1, -1, 360, 361, 362, 363, 257, 258, 259, + 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, + 270, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + -1, -1, -1, -1, -1, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, 0, -1, -1, + -1, -1, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, -1, -1, 334, 335, 336, 337, -1, -1, + 340, 341, -1, -1, -1, -1, -1, -1, -1, -1, + 33, -1, 352, 353, 354, 355, 356, 40, -1, -1, + 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 59, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 93, -1, -1, 96, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 125, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, + -1, -1, -1, -1, 40, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 125, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 257, 258, 259, 260, -1, -1, + 263, -1, 265, 266, 267, 268, 269, 270, 271, 272, + -1, -1, -1, -1, -1, -1, -1, -1, 281, 282, + 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, + 293, 294, 295, 296, 297, 298, 299, -1, -1, -1, + -1, -1, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, -1, -1, -1, -1, -1, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, -1, + -1, 334, 335, 336, 337, -1, -1, 340, 341, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 352, + 353, 354, 355, 356, -1, -1, -1, 360, 361, 362, + 363, 257, 258, 259, 260, -1, -1, 263, -1, 265, + 266, 267, 268, 269, 270, 271, 272, -1, -1, -1, + -1, -1, -1, -1, -1, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, -1, -1, -1, -1, -1, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 0, -1, -1, -1, -1, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, -1, -1, 334, 335, + 336, 337, -1, -1, 340, 341, -1, -1, -1, -1, + -1, -1, -1, -1, 33, -1, 352, 353, 354, 355, + 356, 40, -1, -1, 360, 361, 362, 363, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 59, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 93, -1, -1, 96, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 59, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 93, -1, -1, 96, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 125, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, + 259, 260, -1, -1, 263, -1, 265, 266, 267, 268, + 269, 270, 271, 272, -1, -1, -1, -1, -1, -1, + -1, -1, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, -1, -1, -1, -1, -1, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, -1, 334, 335, 336, 337, -1, + -1, 340, 341, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 352, 353, 354, 355, 356, -1, -1, + -1, 360, 361, 362, 363, 257, 258, 259, 260, -1, + -1, 263, -1, 265, 266, 267, 268, 269, 270, 271, + 272, -1, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, -1, -1, + -1, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 0, -1, 334, 335, 336, 337, -1, -1, 340, 341, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 352, 353, 354, 355, 356, -1, -1, -1, 360, 361, + 362, 363, -1, 33, -1, -1, -1, -1, -1, -1, + 40, 41, -1, 43, 44, 45, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 59, + -1, -1, 62, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 0, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 93, -1, -1, 96, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + -1, -1, -1, -1, -1, 40, 41, -1, -1, 44, + -1, -1, -1, -1, -1, 125, -1, -1, -1, -1, + -1, -1, -1, -1, 59, 60, -1, 62, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 0, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 93, -1, + -1, 96, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 41, -1, -1, 44, -1, + 125, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, -1, 33, -1, -1, -1, -1, + -1, -1, 40, -1, -1, -1, -1, 45, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, -1, -1, -1, -1, -1, 93, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 257, 258, 259, + 260, -1, -1, 263, -1, 265, 266, 267, 268, 269, + 270, 271, 272, -1, -1, 93, -1, -1, 96, 125, + -1, 281, 282, 283, 284, 285, 286, 287, 288, 289, + 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, + -1, -1, -1, -1, 304, 305, -1, 125, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 317, 318, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, 257, 258, 259, 260, -1, -1, 263, -1, + 340, 341, -1, 268, 33, -1, 271, 272, -1, -1, + -1, 40, 41, -1, -1, -1, 45, -1, -1, -1, + 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 96, -1, 334, + 335, 336, 337, -1, -1, -1, -1, -1, 264, -1, + -1, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, -1, -1, -1, -1, -1, -1, 363, 257, + 258, 259, 260, -1, 290, 263, -1, 265, 266, 267, + 268, 269, 270, -1, 300, 0, -1, 303, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, -1, -1, -1, -1, -1, 305, 33, -1, + -1, -1, -1, -1, -1, 40, -1, -1, -1, -1, + 346, 347, -1, -1, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 59, -1, -1, -1, -1, -1, + -1, -1, 340, 341, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 360, 361, 362, 363, -1, -1, 93, -1, + -1, 96, -1, -1, -1, -1, 0, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 257, 258, + 259, 260, -1, -1, 263, -1, -1, -1, -1, 268, + 125, -1, 271, 272, -1, -1, -1, -1, -1, 33, + -1, -1, -1, -1, -1, -1, 40, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 59, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, -1, 334, 335, 336, 337, 93, + -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 0, 352, 353, 354, 355, 356, -1, -1, + -1, -1, -1, -1, 363, -1, -1, -1, -1, -1, + -1, 125, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 257, 258, 259, 260, -1, -1, 263, -1, + -1, 59, -1, 268, -1, -1, 271, 272, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, -1, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, 125, -1, 334, + 335, 336, 337, -1, -1, 0, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 352, 353, 354, + 355, 356, -1, 257, 258, 259, 260, -1, 363, 263, + -1, -1, -1, -1, 268, -1, -1, 271, 272, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 59, -1, -1, -1, -1, -1, + -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, -1, -1, -1, -1, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, 93, -1, + 334, 335, 336, 337, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 0, -1, -1, -1, 352, 353, + 354, 355, 356, -1, -1, -1, -1, -1, -1, 363, + 125, -1, 260, -1, -1, -1, -1, 265, 266, 267, + -1, 269, 270, 271, 272, -1, -1, -1, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, 300, 59, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 93, -1, -1, + -1, -1, 340, 341, -1, -1, -1, -1, -1, 0, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 360, 361, 362, 363, -1, -1, -1, 125, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 59, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 260, -1, -1, -1, -1, + 265, 266, 267, -1, 269, 270, 271, 272, 59, -1, + -1, -1, -1, 91, -1, -1, 281, 282, 283, 284, + 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, + 295, 296, 297, 298, 299, 300, -1, -1, -1, -1, + -1, -1, 93, -1, -1, 123, -1, -1, -1, -1, + -1, -1, -1, 0, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 125, 340, 341, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, + -1, -1, -1, -1, 260, -1, -1, -1, -1, 265, + 266, 267, 59, 269, 270, 271, 272, -1, -1, -1, + -1, -1, -1, -1, -1, 281, 282, 283, 284, 285, + 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, + 296, 297, 298, 299, -1, -1, 93, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 0, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 125, 257, + 258, -1, 260, 261, 340, 341, -1, -1, -1, -1, + -1, 269, 270, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, -1, 360, 361, 362, 363, -1, 260, + -1, -1, -1, -1, 265, 266, 267, 59, 269, 270, + 271, 272, -1, -1, -1, -1, -1, -1, -1, -1, + 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, + 291, 292, 293, 294, 295, 296, 297, 298, 299, -1, + -1, 93, -1, -1, 332, -1, -1, -1, -1, -1, + 338, 339, 0, -1, 342, -1, 344, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 357, + -1, 359, -1, 125, -1, 363, 364, -1, -1, 340, + 341, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 360, + 361, 362, 363, 260, -1, -1, -1, -1, 265, 266, + 267, 59, 269, 270, 271, 272, -1, -1, -1, -1, + -1, -1, -1, -1, 281, 282, 283, 284, 285, 286, + 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, + 297, 298, 299, -1, -1, 93, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 0, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 125, -1, -1, + -1, -1, -1, 340, 341, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 33, -1, -1, -1, -1, + -1, -1, 40, 360, 361, 362, 363, -1, 260, -1, + -1, -1, -1, 265, 266, 267, -1, 269, 270, 271, + 272, 59, -1, -1, -1, -1, -1, -1, -1, 281, + 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, + 292, 293, 294, 295, 296, 297, 298, 299, -1, -1, + -1, -1, -1, -1, -1, 93, -1, -1, 96, -1, + -1, 0, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 125, 340, 341, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 43, -1, 45, 46, 360, 361, + 362, 363, 260, -1, -1, -1, -1, 265, 266, 267, + 59, 269, 270, 271, 272, -1, -1, -1, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, -1, -1, 93, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 125, -1, -1, -1, + -1, -1, 340, 341, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 360, 361, 362, 363, -1, -1, -1, 257, + 258, 259, -1, -1, -1, 263, -1, 265, 266, 267, + 268, 269, 270, 271, 272, -1, -1, -1, -1, -1, + -1, -1, -1, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 298, 299, -1, -1, -1, -1, -1, 305, 306, 307, + 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, + -1, -1, -1, -1, 322, 323, 324, 325, 326, 327, + 328, 329, 330, 331, 0, -1, 334, 335, 336, 337, + -1, -1, 340, 341, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 352, 353, 354, 355, 356, -1, + -1, -1, 360, 361, 362, -1, -1, -1, -1, -1, + -1, 37, 271, 272, -1, 41, 42, 43, 44, 45, + -1, 47, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 59, 60, -1, 62, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, -1, -1, -1, -1, 93, -1, -1, + -1, -1, 33, -1, -1, 334, 335, 336, 337, 40, + -1, -1, -1, -1, 45, -1, -1, -1, -1, -1, + -1, -1, -1, 352, 353, 354, 355, 356, -1, 125, + -1, -1, -1, -1, -1, -1, -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, 96, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 123, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 33, -1, -1, -1, -1, -1, -1, 40, -1, + -1, -1, -1, 45, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 264, 91, + -1, -1, -1, -1, 96, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 290, -1, -1, -1, -1, -1, + -1, 123, -1, -1, 300, -1, -1, 303, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 33, -1, 257, 258, 259, 260, + 261, 40, 263, -1, -1, -1, 45, 268, 269, 270, + 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, + 346, 347, 348, 349, 350, 351, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 315, 316, -1, 96, -1, -1, + -1, 322, 323, 324, 325, 326, 327, 328, 329, 330, + 331, 332, -1, 334, 335, 336, 337, 338, 339, -1, + -1, 342, -1, 344, -1, -1, -1, -1, -1, -1, + -1, 352, 353, 354, 355, 356, 357, -1, 359, -1, + -1, -1, 363, 364, -1, 257, 258, 259, 260, 261, + -1, 263, -1, -1, -1, -1, 268, 269, 270, 271, + 272, 273, 274, 275, 276, 277, 278, 279, 280, -1, + 33, -1, -1, -1, -1, -1, -1, 40, -1, -1, + -1, -1, 45, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + 332, -1, 334, 335, 336, 337, 338, 339, -1, -1, + 342, -1, 344, 96, -1, -1, -1, -1, -1, -1, + 352, 353, 354, 355, 356, 357, -1, 359, -1, -1, + -1, 363, 364, -1, -1, -1, -1, -1, 257, 258, + 259, 260, -1, -1, 263, -1, 265, 266, 267, 268, + 269, 270, 271, 272, -1, -1, -1, -1, -1, -1, + -1, -1, 281, 282, 283, 284, 285, 286, 287, 288, + 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, + 299, -1, -1, -1, -1, -1, 305, 306, 307, 308, + 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, + -1, -1, -1, 322, 323, 324, 325, 326, 327, 328, + 329, 330, 331, -1, -1, 334, 335, 336, 337, 33, + -1, 340, 341, -1, -1, -1, 40, -1, -1, -1, + -1, 45, -1, 352, 353, 354, 355, 356, -1, -1, + -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 257, 258, 259, 260, -1, -1, + 263, -1, 96, -1, -1, 268, -1, -1, 271, 272, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 305, 306, 307, 308, 309, 310, 311, 312, + 313, 314, 315, 316, -1, -1, -1, -1, -1, 322, + 323, 324, 325, 326, 327, 328, 329, 330, 331, 33, + -1, 334, 335, 336, 337, -1, 40, -1, -1, -1, + -1, 45, -1, -1, -1, -1, -1, -1, -1, 352, + 353, 354, 355, 356, -1, -1, -1, -1, -1, -1, + 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 96, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, + -1, -1, -1, -1, 268, -1, 33, 271, 272, -1, + -1, -1, -1, 40, -1, -1, -1, -1, 45, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, -1, -1, -1, -1, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, -1, 96, + 334, 335, 336, 337, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 352, 353, + 354, 355, 356, -1, -1, -1, -1, -1, -1, 363, + -1, -1, -1, -1, -1, -1, -1, 33, -1, -1, + -1, -1, -1, -1, 40, -1, 42, -1, -1, 45, + -1, -1, -1, 257, 258, 259, 260, -1, -1, 263, + -1, -1, -1, -1, 268, -1, -1, 271, 272, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 96, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, -1, -1, -1, -1, -1, 322, 323, + 324, 325, 326, 327, 328, 329, 330, 331, -1, -1, + 334, 335, 336, 337, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 352, 353, + 354, 355, 356, -1, -1, -1, -1, 33, -1, 363, + 257, 258, 259, 260, 40, -1, 263, -1, -1, 45, + -1, 268, -1, -1, 271, 272, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 305, 306, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 96, -1, -1, -1, -1, 322, 323, 324, 325, 326, + 327, 328, 329, 330, 331, -1, -1, 334, 335, 336, + 337, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 352, 353, 354, 355, 356, + -1, 257, 258, 259, -1, -1, 363, 263, -1, -1, + -1, -1, 268, 33, -1, 271, 272, -1, -1, -1, + 40, -1, -1, -1, -1, 45, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, -1, -1, -1, -1, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, 96, -1, 334, 335, + 336, 337, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 352, 353, 354, 355, + 356, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, + -1, 257, 258, 259, -1, 40, -1, 263, -1, -1, + 45, -1, 268, -1, -1, 271, 272, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, 96, -1, -1, -1, -1, 322, 323, 324, 325, + 326, 327, 328, 329, 330, 331, -1, -1, 334, 335, + 336, 337, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 352, 353, 354, 355, + 356, 33, -1, -1, -1, -1, -1, -1, 40, -1, + -1, -1, -1, 45, -1, -1, -1, 257, 258, 259, + -1, -1, -1, 263, -1, -1, -1, -1, 268, -1, + -1, 271, 272, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 96, 305, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, + -1, -1, 322, 323, 324, 325, 326, 327, 328, 329, + 330, 331, -1, -1, 334, 335, 336, 337, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 352, 353, 354, 355, 356, -1, -1, -1, + -1, -1, 257, 258, 259, -1, -1, -1, 263, -1, + -1, -1, -1, 268, -1, -1, 271, 272, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, -1, -1, -1, -1, 322, 323, 324, + 325, 326, 327, 328, 329, 330, 331, -1, -1, 334, + 335, 336, 337, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 352, 353, 354, + 355, 356, -1, -1, -1, 257, 258, 259, -1, -1, + -1, 263, -1, -1, -1, -1, 268, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, + 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, + -1, -1, 334, 335, 336, 337, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 352, 353, 354, 355, 356, +}; +#define YYFINAL 2 +#ifndef YYDEBUG +#define YYDEBUG 0 +#endif +#define YYMAXTOKEN 366 +#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,"LABEL","VARIABLE","NUMBER", +"TEXT","COMMAND_LINE","DELIMITED","ORDINAL","TH","LEFT_ARROW_HEAD", +"RIGHT_ARROW_HEAD","DOUBLE_ARROW_HEAD","LAST","UP","DOWN","LEFT","RIGHT","BOX", +"CIRCLE","ELLIPSE","ARC","LINE","ARROW","MOVE","SPLINE","HEIGHT","RADIUS", +"WIDTH","DIAMETER","FROM","TO","AT","WITH","BY","THEN","DOTTED","DASHED","CHOP", +"SAME","INVISIBLE","LJUST","RJUST","ABOVE","BELOW","OF","THE","WAY","BETWEEN", +"AND","HERE","DOT_N","DOT_E","DOT_W","DOT_S","DOT_NE","DOT_SE","DOT_NW", +"DOT_SW","DOT_C","DOT_START","DOT_END","DOT_X","DOT_Y","DOT_HT","DOT_WID", +"DOT_RAD","SIN","COS","ATAN2","LOG","EXP","SQRT","K_MAX","K_MIN","INT","RAND", +"COPY","THRU","TOP","BOTTOM","UPPER","LOWER","SH","PRINT","CW","CCW","FOR","DO", +"IF","ELSE","ANDAND","OROR","NOTEQUAL","EQUALEQUAL","LESSEQUAL","GREATEREQUAL", +"LEFT_CORNER","RIGHT_CORNER","CENTER","END","START","RESET","UNTIL","PLOT", +"THICKNESS","FILL","ALIGNED","SPRINTF","COMMAND","DEFINE","UNDEF", +}; +char *yyrule[] = { +"$accept : top", +"top : optional_separator", +"top : element_list", +"element_list : optional_separator middle_element_list optional_separator", +"middle_element_list : element", +"middle_element_list : middle_element_list separator element", +"optional_separator :", +"optional_separator : separator", +"separator : ';'", +"separator : separator ';'", +"placeless_element : VARIABLE '=' any_expr", +"placeless_element : VARIABLE ':' '=' any_expr", +"placeless_element : UP", +"placeless_element : DOWN", +"placeless_element : LEFT", +"placeless_element : RIGHT", +"placeless_element : COMMAND_LINE", +"placeless_element : COMMAND print_args", +"placeless_element : PRINT print_args", +"$$1 :", +"placeless_element : SH $$1 DELIMITED", +"placeless_element : COPY TEXT", +"$$2 :", +"$$3 :", +"placeless_element : COPY TEXT THRU $$2 DELIMITED $$3 until", +"$$4 :", +"$$5 :", +"placeless_element : COPY THRU $$4 DELIMITED $$5 until", +"$$6 :", +"placeless_element : FOR VARIABLE '=' expr TO expr optional_by DO $$6 DELIMITED", +"placeless_element : simple_if", +"$$7 :", +"placeless_element : simple_if ELSE $$7 DELIMITED", +"placeless_element : reset_variables", +"placeless_element : RESET", +"reset_variables : RESET VARIABLE", +"reset_variables : reset_variables VARIABLE", +"reset_variables : reset_variables ',' VARIABLE", +"print_args : print_arg", +"print_args : print_args print_arg", +"print_arg : expr", +"print_arg : text", +"print_arg : position", +"$$8 :", +"simple_if : IF any_expr THEN $$8 DELIMITED", +"until :", +"until : UNTIL TEXT", +"any_expr : expr", +"any_expr : text_expr", +"text_expr : text EQUALEQUAL text", +"text_expr : text NOTEQUAL text", +"text_expr : text_expr ANDAND text_expr", +"text_expr : text_expr ANDAND expr", +"text_expr : expr ANDAND text_expr", +"text_expr : text_expr OROR text_expr", +"text_expr : text_expr OROR expr", +"text_expr : expr OROR text_expr", +"text_expr : '!' text_expr", +"optional_by :", +"optional_by : BY expr", +"optional_by : BY '*' expr", +"element : object_spec", +"element : LABEL ':' optional_separator element", +"element : LABEL ':' optional_separator position_not_place", +"element : LABEL ':' optional_separator place", +"$$9 :", +"$$10 :", +"element : '{' $$9 element_list '}' $$10 optional_element", +"element : placeless_element", +"optional_element :", +"optional_element : element", +"object_spec : BOX", +"object_spec : CIRCLE", +"object_spec : ELLIPSE", +"object_spec : ARC", +"object_spec : LINE", +"object_spec : ARROW", +"object_spec : MOVE", +"object_spec : SPLINE", +"object_spec : text", +"object_spec : PLOT expr", +"object_spec : PLOT expr text", +"$$11 :", +"object_spec : '[' $$11 element_list ']'", +"object_spec : object_spec HEIGHT expr", +"object_spec : object_spec RADIUS expr", +"object_spec : object_spec WIDTH expr", +"object_spec : object_spec DIAMETER expr", +"object_spec : object_spec expr", +"object_spec : object_spec UP", +"object_spec : object_spec UP expr", +"object_spec : object_spec DOWN", +"object_spec : object_spec DOWN expr", +"object_spec : object_spec RIGHT", +"object_spec : object_spec RIGHT expr", +"object_spec : object_spec LEFT", +"object_spec : object_spec LEFT expr", +"object_spec : object_spec FROM position", +"object_spec : object_spec TO position", +"object_spec : object_spec AT position", +"object_spec : object_spec WITH path", +"object_spec : object_spec BY expr_pair", +"object_spec : object_spec THEN", +"object_spec : object_spec DOTTED", +"object_spec : object_spec DOTTED expr", +"object_spec : object_spec DASHED", +"object_spec : object_spec DASHED expr", +"object_spec : object_spec FILL", +"object_spec : object_spec FILL expr", +"object_spec : object_spec CHOP", +"object_spec : object_spec CHOP expr", +"object_spec : object_spec SAME", +"object_spec : object_spec INVISIBLE", +"object_spec : object_spec LEFT_ARROW_HEAD", +"object_spec : object_spec RIGHT_ARROW_HEAD", +"object_spec : object_spec DOUBLE_ARROW_HEAD", +"object_spec : object_spec CW", +"object_spec : object_spec CCW", +"object_spec : object_spec text", +"object_spec : object_spec LJUST", +"object_spec : object_spec RJUST", +"object_spec : object_spec ABOVE", +"object_spec : object_spec BELOW", +"object_spec : object_spec THICKNESS expr", +"object_spec : object_spec ALIGNED", +"text : TEXT", +"text : SPRINTF '(' TEXT sprintf_args ')'", +"sprintf_args :", +"sprintf_args : sprintf_args ',' expr", +"position : position_not_place", +"position : place", +"position_not_place : expr_pair", +"position_not_place : position '+' expr_pair", +"position_not_place : position '-' expr_pair", +"position_not_place : '(' position ',' position ')'", +"position_not_place : expr between position AND position", +"position_not_place : expr '<' position ',' position '>'", +"between : BETWEEN", +"between : OF THE WAY BETWEEN", +"expr_pair : expr ',' expr", +"expr_pair : '(' expr_pair ')'", +"place : label", +"place : label corner", +"place : corner label", +"place : corner OF label", +"place : HERE", +"label : LABEL", +"label : nth_primitive", +"label : label '.' LABEL", +"ordinal : ORDINAL", +"ordinal : '`' any_expr TH", +"optional_ordinal_last : LAST", +"optional_ordinal_last : ordinal LAST", +"nth_primitive : ordinal object_type", +"nth_primitive : optional_ordinal_last object_type", +"object_type : BOX", +"object_type : CIRCLE", +"object_type : ELLIPSE", +"object_type : ARC", +"object_type : LINE", +"object_type : ARROW", +"object_type : SPLINE", +"object_type : '[' ']'", +"object_type : TEXT", +"label_path : '.' LABEL", +"label_path : label_path '.' LABEL", +"relative_path : corner", +"relative_path : label_path", +"relative_path : label_path corner", +"path : relative_path", +"path : ORDINAL LAST object_type relative_path", +"path : LAST object_type relative_path", +"path : ORDINAL object_type relative_path", +"path : LABEL relative_path", +"corner : DOT_N", +"corner : DOT_E", +"corner : DOT_W", +"corner : DOT_S", +"corner : DOT_NE", +"corner : DOT_SE", +"corner : DOT_NW", +"corner : DOT_SW", +"corner : DOT_C", +"corner : DOT_START", +"corner : DOT_END", +"corner : TOP", +"corner : BOTTOM", +"corner : LEFT", +"corner : RIGHT", +"corner : UPPER LEFT", +"corner : LOWER LEFT", +"corner : UPPER RIGHT", +"corner : LOWER RIGHT", +"corner : LEFT_CORNER", +"corner : RIGHT_CORNER", +"corner : UPPER LEFT_CORNER", +"corner : LOWER LEFT_CORNER", +"corner : UPPER RIGHT_CORNER", +"corner : LOWER RIGHT_CORNER", +"corner : CENTER", +"corner : START", +"corner : END", +"expr : VARIABLE", +"expr : NUMBER", +"expr : place DOT_X", +"expr : place DOT_Y", +"expr : place DOT_HT", +"expr : place DOT_WID", +"expr : place DOT_RAD", +"expr : expr '+' expr", +"expr : expr '-' expr", +"expr : expr '*' expr", +"expr : expr '/' expr", +"expr : expr '%' expr", +"expr : expr '^' expr", +"expr : '-' expr", +"expr : '(' any_expr ')'", +"expr : SIN '(' any_expr ')'", +"expr : COS '(' any_expr ')'", +"expr : ATAN2 '(' any_expr ',' any_expr ')'", +"expr : LOG '(' any_expr ')'", +"expr : EXP '(' any_expr ')'", +"expr : SQRT '(' any_expr ')'", +"expr : K_MAX '(' any_expr ',' any_expr ')'", +"expr : K_MIN '(' any_expr ',' any_expr ')'", +"expr : INT '(' any_expr ')'", +"expr : RAND '(' any_expr ')'", +"expr : RAND '(' ')'", +"expr : expr '<' expr", +"expr : expr LESSEQUAL expr", +"expr : expr '>' expr", +"expr : expr GREATEREQUAL expr", +"expr : expr EQUALEQUAL expr", +"expr : expr NOTEQUAL expr", +"expr : expr ANDAND expr", +"expr : expr OROR expr", +"expr : '!' expr", +}; +#endif +#define yyclearin (yychar=(-1)) +#define yyerrok (yyerrflag=0) +#ifdef YYSTACKSIZE +#ifndef YYMAXDEPTH +#define YYMAXDEPTH YYSTACKSIZE +#endif +#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 +#line 1514 "/u/jjc/groff/pic/pic.y" + +/* bison defines const to be empty unless __STDC__ is defined, which it +isn't under cfront */ + +#ifdef const +#undef const +#endif + +static struct { + const char *name; + double val; + int scaled; // non-zero if val should be multiplied by scale +} defaults_table[] = { + { "arcrad", .25, 1 }, + { "arrowht", .1, 1 }, + { "arrowwid", .05, 1 }, + { "circlerad", .25, 1 }, + { "boxht", .5, 1 }, + { "boxwid", .75, 1 }, + { "boxrad", 0.0, 1 }, + { "dashwid", .05, 1 }, + { "ellipseht", .5, 1 }, + { "ellipsewid", .75, 1 }, + { "moveht", .5, 1 }, + { "movewid", .5, 1 }, + { "lineht", .5, 1 }, + { "linewid", .5, 1 }, + { "textht", 0.0, 1 }, + { "textwid", 0.0, 1 }, + { "scale", 1.0, 0 }, + { "linethick", -1.0, 0 }, // in points + { "fillval", .5, 0 }, + { "arrowhead", 1.0, 0 }, + { "maxpswid", 8.5, 0 }, + { "maxpsht", 11.0, 0 }, +}; + +place *lookup_label(const char *label) +{ + saved_state *state = current_saved_state; + PTABLE(place) *tbl = current_table; + for (;;) { + place *pl = tbl->lookup(label); + if (pl) + return pl; + if (!state) + return 0; + tbl = state->tbl; + state = state->prev; + } +} + +void define_label(const char *label, const place *pl) +{ + place *p = new place; + *p = *pl; + current_table->define(label, p); +} + +int lookup_variable(const char *name, double *val) +{ + place *pl = lookup_label(name); + if (pl) { + *val = pl->x; + return 1; + } + return 0; +} + +void define_variable(const char *name, double val) +{ + place *p = new place; + p->obj = 0; + p->x = val; + p->y = 0.0; + current_table->define(name, p); + if (strcmp(name, "scale") == 0) { + // When the scale changes, reset all scaled pre-defined variables to + // their default values. + for (int i = 0; i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) + if (defaults_table[i].scaled) + define_variable(defaults_table[i].name, val*defaults_table[i].val); + } +} + +// called once only (not once per parse) + +void parse_init() +{ + current_direction = RIGHT_DIRECTION; + current_position.x = 0.0; + current_position.y = 0.0; + // This resets everything to its default value. + reset_all(); +} + +void reset(const char *nm) +{ + for (int i = 0; i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) + if (strcmp(nm, defaults_table[i].name) == 0) { + double val = defaults_table[i].val; + if (defaults_table[i].scaled) { + double scale; + lookup_variable("scale", &scale); + val *= scale; + } + define_variable(defaults_table[i].name, val); + return; + } + lex_error("`%1' is not a predefined variable", nm); +} + +void reset_all() +{ + // We only have to explicitly reset the pre-defined variables that + // aren't scaled because `scale' is not scaled, and changing the + // value of `scale' will reset all the pre-defined variables that + // are scaled. + for (int i = 0; i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) + if (!defaults_table[i].scaled) + define_variable(defaults_table[i].name, defaults_table[i].val); +} + +// called after each parse + +void parse_cleanup() +{ + while (current_saved_state != 0) { + delete current_table; + current_table = current_saved_state->tbl; + saved_state *tem = current_saved_state; + current_saved_state = current_saved_state->prev; + delete tem; + } + assert(current_table == &top_table); + PTABLE_ITERATOR(place) iter(current_table); + const char *key; + place *pl; + while (iter.next(&key, &pl)) + if (pl->obj != 0) { + position pos = pl->obj->origin(); + pl->obj = 0; + pl->x = pos.x; + pl->y = pos.y; + } + while (olist.head != 0) { + object *tem = olist.head; + olist.head = olist.head->next; + delete tem; + } + olist.tail = 0; + current_direction = RIGHT_DIRECTION; + current_position.x = 0.0; + current_position.y = 0.0; +} + +const char *ordinal_postfix(int n) +{ + if (n < 10 || n > 20) + switch (n % 10) { + case 1: + return "st"; + case 2: + return "nd"; + case 3: + return "rd"; + } + return "th"; +} + +const char *object_type_name(object_type type) +{ + switch (type) { + case BOX_OBJECT: + return "box"; + case CIRCLE_OBJECT: + return "circle"; + case ELLIPSE_OBJECT: + return "ellipse"; + case ARC_OBJECT: + return "arc"; + case SPLINE_OBJECT: + return "spline"; + case LINE_OBJECT: + return "line"; + case ARROW_OBJECT: + return "arrow"; + case MOVE_OBJECT: + return "move"; + case TEXT_OBJECT: + return "\"\""; + case BLOCK_OBJECT: + return "[]"; + case OTHER_OBJECT: + case MARK_OBJECT: + default: + break; + } + return "object"; +} + +static char sprintf_buf[1024]; + +char *format_number(const char *form, double n) +{ + if (form == 0) + form = "%g"; + else { + // this is a fairly feeble attempt at validation of the format + int nspecs = 0; + for (const char *p = form; *p != '\0'; p++) + if (*p == '%') { + if (p[1] == '%') + p++; + else + nspecs++; + } + if (nspecs > 1) { + lex_error("bad format `%1'", form); + return strsave(form); + } + } + sprintf(sprintf_buf, form, n); + return strsave(sprintf_buf); +} + +char *do_sprintf(const char *form, const double *v, int nv) +{ + string result; + int i = 0; + string one_format; + while (*form) { + if (*form == '%') { + one_format += *form++; + for (; *form != '\0' && strchr("#-+ 0123456789.", *form) != 0; form++) + one_format += *form; + if (*form == '\0' || strchr("eEfgG%", *form) == 0) { + lex_error("bad sprintf format"); + result += one_format; + result += form; + break; + } + if (*form == '%') { + one_format += *form++; + one_format += '\0'; + sprintf(sprintf_buf, one_format.contents()); + } + else { + if (i >= nv) { + lex_error("too few arguments to sprintf"); + result += one_format; + result += form; + break; + } + one_format += *form++; + one_format += '\0'; + sprintf(sprintf_buf, one_format.contents(), v[i++]); + } + one_format.clear(); + result += sprintf_buf; + } + else + result += *form++; + } + result += '\0'; + return strsave(result.contents()); +} +#line 3387 "y.tab.c" +#define YYABORT 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")) + { + 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]) 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("yydebug: state %d, reading %d (%s)\n", yystate, + yychar, yys); + } +#endif + } + if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { +#if YYDEBUG + if (yydebug) + printf("yydebug: state %d, shifting to state %d\n", + 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]) && (yyn += yychar) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yychar) + { + yyn = yytable[yyn]; + goto yyreduce; + } + if (yyerrflag) goto yyinrecovery; +#ifdef lint + goto yynewerror; +#endif +yynewerror: + yyerror("syntax error"); +#ifdef lint + goto yyerrlab; +#endif +yyerrlab: + ++yynerrs; +yyinrecovery: + if (yyerrflag < 3) + { + yyerrflag = 3; + for (;;) + { + if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) + { +#if YYDEBUG + if (yydebug) + printf("yydebug: state %d, error recovery shifting\ + to state %d\n", *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("yydebug: error recovery discarding state %d\n", + *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("yydebug: state %d, error recovery discards token %d (%s)\n", + yystate, yychar, yys); + } +#endif + yychar = (-1); + goto yyloop; + } +yyreduce: +#if YYDEBUG + if (yydebug) + printf("yydebug: state %d, reducing by rule %d (%s)\n", + yystate, yyn, yyrule[yyn]); +#endif + yym = yylen[yyn]; + yyval = yyvsp[1-yym]; + switch (yyn) + { +case 2: +#line 272 "/u/jjc/groff/pic/pic.y" +{ + if (olist.head) + print_picture(olist.head); + } +break; +case 3: +#line 281 "/u/jjc/groff/pic/pic.y" +{ yyval.pl = yyvsp[-1].pl; } +break; +case 4: +#line 286 "/u/jjc/groff/pic/pic.y" +{ yyval.pl = yyvsp[0].pl; } +break; +case 5: +#line 288 "/u/jjc/groff/pic/pic.y" +{ yyval.pl = yyvsp[-2].pl; } +break; +case 10: +#line 303 "/u/jjc/groff/pic/pic.y" +{ + define_variable(yyvsp[-2].str, yyvsp[0].x); + a_delete yyvsp[-2].str; + } +break; +case 11: +#line 308 "/u/jjc/groff/pic/pic.y" +{ + place *p = lookup_label(yyvsp[-3].str); + if (!p) { + lex_error("variable `%1' not defined", yyvsp[-3].str); + YYABORT; + } + p->obj = 0; + p->x = yyvsp[0].x; + p->y = 0.0; + a_delete yyvsp[-3].str; + } +break; +case 12: +#line 320 "/u/jjc/groff/pic/pic.y" +{ current_direction = UP_DIRECTION; } +break; +case 13: +#line 322 "/u/jjc/groff/pic/pic.y" +{ current_direction = DOWN_DIRECTION; } +break; +case 14: +#line 324 "/u/jjc/groff/pic/pic.y" +{ current_direction = LEFT_DIRECTION; } +break; +case 15: +#line 326 "/u/jjc/groff/pic/pic.y" +{ current_direction = RIGHT_DIRECTION; } +break; +case 16: +#line 328 "/u/jjc/groff/pic/pic.y" +{ + olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, + yyvsp[0].lstr.lineno)); + } +break; +case 17: +#line 333 "/u/jjc/groff/pic/pic.y" +{ + olist.append(make_command_object(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, + yyvsp[0].lstr.lineno)); + } +break; +case 18: +#line 338 "/u/jjc/groff/pic/pic.y" +{ + fprintf(stderr, "%s\n", yyvsp[0].lstr.str); + a_delete yyvsp[0].lstr.str; + fflush(stderr); + } +break; +case 19: +#line 344 "/u/jjc/groff/pic/pic.y" +{ delim_flag = 1; } +break; +case 20: +#line 346 "/u/jjc/groff/pic/pic.y" +{ + delim_flag = 0; + system(yyvsp[0].str); + a_delete yyvsp[0].str; + } +break; +case 21: +#line 352 "/u/jjc/groff/pic/pic.y" +{ + if (yychar < 0) + do_lookahead(); + do_copy(yyvsp[0].lstr.str); + /* do not delete the filename*/ + } +break; +case 22: +#line 359 "/u/jjc/groff/pic/pic.y" +{ delim_flag = 2; } +break; +case 23: +#line 361 "/u/jjc/groff/pic/pic.y" +{ delim_flag = 0; } +break; +case 24: +#line 363 "/u/jjc/groff/pic/pic.y" +{ + if (yychar < 0) + do_lookahead(); + copy_file_thru(yyvsp[-5].lstr.str, yyvsp[-2].str, yyvsp[0].str); + /* do not delete the filename*/ + a_delete yyvsp[-2].str; + a_delete yyvsp[0].str; + } +break; +case 25: +#line 372 "/u/jjc/groff/pic/pic.y" +{ delim_flag = 2; } +break; +case 26: +#line 374 "/u/jjc/groff/pic/pic.y" +{ delim_flag = 0; } +break; +case 27: +#line 376 "/u/jjc/groff/pic/pic.y" +{ + if (yychar < 0) + do_lookahead(); + copy_rest_thru(yyvsp[-2].str, yyvsp[0].str); + a_delete yyvsp[-2].str; + a_delete yyvsp[0].str; + } +break; +case 28: +#line 384 "/u/jjc/groff/pic/pic.y" +{ delim_flag = 1; } +break; +case 29: +#line 386 "/u/jjc/groff/pic/pic.y" +{ + delim_flag = 0; + if (yychar < 0) + do_lookahead(); + do_for(yyvsp[-8].str, yyvsp[-6].x, yyvsp[-4].x, yyvsp[-3].by.is_multiplicative, yyvsp[-3].by.val, yyvsp[0].str); + } +break; +case 30: +#line 393 "/u/jjc/groff/pic/pic.y" +{ + if (yychar < 0) + do_lookahead(); + if (yyvsp[0].if_data.x != 0.0) + push_body(yyvsp[0].if_data.body); + a_delete yyvsp[0].if_data.body; + } +break; +case 31: +#line 401 "/u/jjc/groff/pic/pic.y" +{ delim_flag = 1; } +break; +case 32: +#line 403 "/u/jjc/groff/pic/pic.y" +{ + delim_flag = 0; + if (yychar < 0) + do_lookahead(); + if (yyvsp[-3].if_data.x != 0.0) + push_body(yyvsp[-3].if_data.body); + else + push_body(yyvsp[0].str); + a_delete yyvsp[-3].if_data.body; + a_delete yyvsp[0].str; + } +break; +case 34: +#line 416 "/u/jjc/groff/pic/pic.y" +{ define_variable("scale", 1.0); } +break; +case 35: +#line 421 "/u/jjc/groff/pic/pic.y" +{ reset(yyvsp[0].str); a_delete yyvsp[0].str; } +break; +case 36: +#line 423 "/u/jjc/groff/pic/pic.y" +{ reset(yyvsp[0].str); a_delete yyvsp[0].str; } +break; +case 37: +#line 425 "/u/jjc/groff/pic/pic.y" +{ reset(yyvsp[0].str); a_delete yyvsp[0].str; } +break; +case 38: +#line 430 "/u/jjc/groff/pic/pic.y" +{ yyval.lstr = yyvsp[0].lstr; } +break; +case 39: +#line 432 "/u/jjc/groff/pic/pic.y" +{ + yyval.lstr.str = new char[strlen(yyvsp[-1].lstr.str) + strlen(yyvsp[0].lstr.str) + 1]; + strcpy(yyval.lstr.str, yyvsp[-1].lstr.str); + strcat(yyval.lstr.str, yyvsp[0].lstr.str); + a_delete yyvsp[-1].lstr.str; + a_delete yyvsp[0].lstr.str; + if (yyvsp[-1].lstr.filename) { + yyval.lstr.filename = yyvsp[-1].lstr.filename; + yyval.lstr.lineno = yyvsp[-1].lstr.lineno; + } + else if (yyvsp[0].lstr.filename) { + yyval.lstr.filename = yyvsp[0].lstr.filename; + yyval.lstr.lineno = yyvsp[0].lstr.lineno; + } + } +break; +case 40: +#line 451 "/u/jjc/groff/pic/pic.y" +{ + yyval.lstr.str = new char[GDIGITS + 1]; + sprintf(yyval.lstr.str, "%g", yyvsp[0].x); + yyval.lstr.filename = 0; + yyval.lstr.lineno = 0; + } +break; +case 41: +#line 458 "/u/jjc/groff/pic/pic.y" +{ yyval.lstr = yyvsp[0].lstr; } +break; +case 42: +#line 460 "/u/jjc/groff/pic/pic.y" +{ + yyval.lstr.str = new char[GDIGITS + 2 + GDIGITS + 1]; + sprintf(yyval.lstr.str, "%g, %g", yyvsp[0].pair.x, yyvsp[0].pair.y); + yyval.lstr.filename = 0; + yyval.lstr.lineno = 0; + } +break; +case 43: +#line 469 "/u/jjc/groff/pic/pic.y" +{ delim_flag = 1; } +break; +case 44: +#line 471 "/u/jjc/groff/pic/pic.y" +{ delim_flag = 0; yyval.if_data.x = yyvsp[-3].x; yyval.if_data.body = yyvsp[0].str; } +break; +case 45: +#line 476 "/u/jjc/groff/pic/pic.y" +{ yyval.str = 0; } +break; +case 46: +#line 478 "/u/jjc/groff/pic/pic.y" +{ yyval.str = yyvsp[0].lstr.str; } +break; +case 47: +#line 483 "/u/jjc/groff/pic/pic.y" +{ yyval.x = yyvsp[0].x; } +break; +case 48: +#line 485 "/u/jjc/groff/pic/pic.y" +{ yyval.x = yyvsp[0].x; } +break; +case 49: +#line 490 "/u/jjc/groff/pic/pic.y" +{ + yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) == 0; + a_delete yyvsp[-2].lstr.str; + a_delete yyvsp[0].lstr.str; + } +break; +case 50: +#line 496 "/u/jjc/groff/pic/pic.y" +{ + yyval.x = strcmp(yyvsp[-2].lstr.str, yyvsp[0].lstr.str) != 0; + a_delete yyvsp[-2].lstr.str; + a_delete yyvsp[0].lstr.str; + } +break; +case 51: +#line 502 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +break; +case 52: +#line 504 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +break; +case 53: +#line 506 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +break; +case 54: +#line 508 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } +break; +case 55: +#line 510 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } +break; +case 56: +#line 512 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } +break; +case 57: +#line 514 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[0].x == 0.0); } +break; +case 58: +#line 520 "/u/jjc/groff/pic/pic.y" +{ yyval.by.val = 1.0; yyval.by.is_multiplicative = 0; } +break; +case 59: +#line 522 "/u/jjc/groff/pic/pic.y" +{ yyval.by.val = yyvsp[0].x; yyval.by.is_multiplicative = 0; } +break; +case 60: +#line 524 "/u/jjc/groff/pic/pic.y" +{ yyval.by.val = yyvsp[0].x; yyval.by.is_multiplicative = 1; } +break; +case 61: +#line 529 "/u/jjc/groff/pic/pic.y" +{ + yyval.pl.obj = yyvsp[0].spec->make_object(¤t_position, + ¤t_direction); + if (yyval.pl.obj == 0) + YYABORT; + delete yyvsp[0].spec; + if (yyval.pl.obj) + olist.append(yyval.pl.obj); + else { + yyval.pl.x = current_position.x; + yyval.pl.y = current_position.y; + } + } +break; +case 62: +#line 543 "/u/jjc/groff/pic/pic.y" +{ yyval.pl = yyvsp[0].pl; define_label(yyvsp[-3].str, & yyval.pl); a_delete yyvsp[-3].str; } +break; +case 63: +#line 545 "/u/jjc/groff/pic/pic.y" +{ + yyval.pl.obj = 0; + yyval.pl.x = yyvsp[0].pair.x; + yyval.pl.y = yyvsp[0].pair.y; + define_label(yyvsp[-3].str, & yyval.pl); + a_delete yyvsp[-3].str; + } +break; +case 64: +#line 553 "/u/jjc/groff/pic/pic.y" +{ + yyval.pl = yyvsp[0].pl; + define_label(yyvsp[-3].str, & yyval.pl); + a_delete yyvsp[-3].str; + } +break; +case 65: +#line 559 "/u/jjc/groff/pic/pic.y" +{ + yyval.state.x = current_position.x; + yyval.state.y = current_position.y; + yyval.state.dir = current_direction; + } +break; +case 66: +#line 565 "/u/jjc/groff/pic/pic.y" +{ + current_position.x = yyvsp[-2].state.x; + current_position.y = yyvsp[-2].state.y; + current_direction = yyvsp[-2].state.dir; + } +break; +case 67: +#line 571 "/u/jjc/groff/pic/pic.y" +{ + yyval.pl = yyvsp[-3].pl; + } +break; +case 68: +#line 575 "/u/jjc/groff/pic/pic.y" +{ + yyval.pl.obj = 0; + yyval.pl.x = current_position.x; + yyval.pl.y = current_position.y; + } +break; +case 69: +#line 584 "/u/jjc/groff/pic/pic.y" +{} +break; +case 70: +#line 586 "/u/jjc/groff/pic/pic.y" +{} +break; +case 71: +#line 591 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = new object_spec(BOX_OBJECT); + } +break; +case 72: +#line 595 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = new object_spec(CIRCLE_OBJECT); + } +break; +case 73: +#line 599 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = new object_spec(ELLIPSE_OBJECT); + } +break; +case 74: +#line 603 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = new object_spec(ARC_OBJECT); + yyval.spec->dir = current_direction; + } +break; +case 75: +#line 608 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = new object_spec(LINE_OBJECT); + lookup_variable("lineht", & yyval.spec->segment_height); + lookup_variable("linewid", & yyval.spec->segment_width); + yyval.spec->dir = current_direction; + } +break; +case 76: +#line 615 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = new object_spec(ARROW_OBJECT); + lookup_variable("lineht", & yyval.spec->segment_height); + lookup_variable("linewid", & yyval.spec->segment_width); + yyval.spec->dir = current_direction; + } +break; +case 77: +#line 622 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = new object_spec(MOVE_OBJECT); + lookup_variable("moveht", & yyval.spec->segment_height); + lookup_variable("movewid", & yyval.spec->segment_width); + yyval.spec->dir = current_direction; + } +break; +case 78: +#line 629 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = new object_spec(SPLINE_OBJECT); + lookup_variable("lineht", & yyval.spec->segment_height); + lookup_variable("linewid", & yyval.spec->segment_width); + yyval.spec->dir = current_direction; + } +break; +case 79: +#line 636 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = new object_spec(TEXT_OBJECT); + yyval.spec->text = new text_item(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno); + } +break; +case 80: +#line 641 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = new object_spec(TEXT_OBJECT); + yyval.spec->text = new text_item(format_number(0, yyvsp[0].x), 0, -1); + } +break; +case 81: +#line 646 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = new object_spec(TEXT_OBJECT); + yyval.spec->text = new text_item(format_number(yyvsp[0].lstr.str, yyvsp[-1].x), + yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno); + a_delete yyvsp[0].lstr.str; + } +break; +case 82: +#line 653 "/u/jjc/groff/pic/pic.y" +{ + saved_state *p = new saved_state; + yyval.pstate = p; + p->x = current_position.x; + p->y = current_position.y; + p->dir = current_direction; + p->tbl = current_table; + p->prev = current_saved_state; + current_position.x = 0.0; + current_position.y = 0.0; + current_table = new PTABLE(place); + current_saved_state = p; + olist.append(make_mark_object()); + } +break; +case 83: +#line 668 "/u/jjc/groff/pic/pic.y" +{ + current_position.x = yyvsp[-2].pstate->x; + current_position.y = yyvsp[-2].pstate->y; + current_direction = yyvsp[-2].pstate->dir; + yyval.spec = new object_spec(BLOCK_OBJECT); + olist.wrap_up_block(& yyval.spec->oblist); + yyval.spec->tbl = current_table; + current_table = yyvsp[-2].pstate->tbl; + current_saved_state = yyvsp[-2].pstate->prev; + delete yyvsp[-2].pstate; + } +break; +case 84: +#line 680 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->height = yyvsp[0].x; + yyval.spec->flags |= HAS_HEIGHT; + } +break; +case 85: +#line 686 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->radius = yyvsp[0].x; + yyval.spec->flags |= HAS_RADIUS; + } +break; +case 86: +#line 692 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->width = yyvsp[0].x; + yyval.spec->flags |= HAS_WIDTH; + } +break; +case 87: +#line 698 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->radius = yyvsp[0].x/2.0; + yyval.spec->flags |= HAS_RADIUS; + } +break; +case 88: +#line 704 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= HAS_SEGMENT; + switch (yyval.spec->dir) { + case UP_DIRECTION: + yyval.spec->segment_pos.y += yyvsp[0].x; + break; + case DOWN_DIRECTION: + yyval.spec->segment_pos.y -= yyvsp[0].x; + break; + case RIGHT_DIRECTION: + yyval.spec->segment_pos.x += yyvsp[0].x; + break; + case LEFT_DIRECTION: + yyval.spec->segment_pos.x -= yyvsp[0].x; + break; + } + } +break; +case 89: +#line 723 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->dir = UP_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.y += yyval.spec->segment_height; + } +break; +case 90: +#line 730 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->dir = UP_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.y += yyvsp[0].x; + } +break; +case 91: +#line 737 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->dir = DOWN_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.y -= yyval.spec->segment_height; + } +break; +case 92: +#line 744 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->dir = DOWN_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.y -= yyvsp[0].x; + } +break; +case 93: +#line 751 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->dir = RIGHT_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.x += yyval.spec->segment_width; + } +break; +case 94: +#line 758 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->dir = RIGHT_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.x += yyvsp[0].x; + } +break; +case 95: +#line 765 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->dir = LEFT_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.x -= yyval.spec->segment_width; + } +break; +case 96: +#line 772 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->dir = LEFT_DIRECTION; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.x -= yyvsp[0].x; + } +break; +case 97: +#line 779 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= HAS_FROM; + yyval.spec->from.x = yyvsp[0].pair.x; + yyval.spec->from.y = yyvsp[0].pair.y; + } +break; +case 98: +#line 786 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + if (yyval.spec->flags & HAS_SEGMENT) + yyval.spec->segment_list = new segment(yyval.spec->segment_pos, + yyval.spec->segment_is_absolute, + yyval.spec->segment_list); + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.x = yyvsp[0].pair.x; + yyval.spec->segment_pos.y = yyvsp[0].pair.y; + yyval.spec->segment_is_absolute = 1; + yyval.spec->flags |= HAS_TO; + yyval.spec->to.x = yyvsp[0].pair.x; + yyval.spec->to.y = yyvsp[0].pair.y; + } +break; +case 99: +#line 801 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= HAS_AT; + yyval.spec->at.x = yyvsp[0].pair.x; + yyval.spec->at.y = yyvsp[0].pair.y; + if (yyval.spec->type != ARC_OBJECT) { + yyval.spec->flags |= HAS_FROM; + yyval.spec->from.x = yyvsp[0].pair.x; + yyval.spec->from.y = yyvsp[0].pair.y; + } + } +break; +case 100: +#line 813 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= HAS_WITH; + yyval.spec->with = yyvsp[0].pth; + } +break; +case 101: +#line 819 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= HAS_SEGMENT; + yyval.spec->segment_pos.x += yyvsp[0].pair.x; + yyval.spec->segment_pos.y += yyvsp[0].pair.y; + } +break; +case 102: +#line 826 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + if (yyval.spec->flags & HAS_SEGMENT) { + yyval.spec->segment_list = new segment(yyval.spec->segment_pos, + yyval.spec->segment_is_absolute, + yyval.spec->segment_list); + yyval.spec->flags &= ~HAS_SEGMENT; + yyval.spec->segment_pos.x = yyval.spec->segment_pos.y = 0.0; + yyval.spec->segment_is_absolute = 0; + } + } +break; +case 103: +#line 838 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_DOTTED; + lookup_variable("dashwid", & yyval.spec->dash_width); + } +break; +case 104: +#line 844 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= IS_DOTTED; + yyval.spec->dash_width = yyvsp[0].x; + } +break; +case 105: +#line 850 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_DASHED; + lookup_variable("dashwid", & yyval.spec->dash_width); + } +break; +case 106: +#line 856 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= IS_DASHED; + yyval.spec->dash_width = yyvsp[0].x; + } +break; +case 107: +#line 862 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_DEFAULT_FILLED; + } +break; +case 108: +#line 867 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= IS_FILLED; + yyval.spec->fill = yyvsp[0].x; + } +break; +case 109: +#line 873 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + /* line chop chop means line chop 0 chop 0*/ + if (yyval.spec->flags & IS_DEFAULT_CHOPPED) { + yyval.spec->flags |= IS_CHOPPED; + yyval.spec->flags &= ~IS_DEFAULT_CHOPPED; + yyval.spec->start_chop = yyval.spec->end_chop = 0.0; + } + else if (yyval.spec->flags & IS_CHOPPED) { + yyval.spec->end_chop = 0.0; + } + else { + yyval.spec->flags |= IS_DEFAULT_CHOPPED; + } + } +break; +case 110: +#line 889 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + if (yyval.spec->flags & IS_DEFAULT_CHOPPED) { + yyval.spec->flags |= IS_CHOPPED; + yyval.spec->flags &= ~IS_DEFAULT_CHOPPED; + yyval.spec->start_chop = 0.0; + yyval.spec->end_chop = yyvsp[0].x; + } + else if (yyval.spec->flags & IS_CHOPPED) { + yyval.spec->end_chop = yyvsp[0].x; + } + else { + yyval.spec->start_chop = yyval.spec->end_chop = yyvsp[0].x; + yyval.spec->flags |= IS_CHOPPED; + } + } +break; +case 111: +#line 906 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_SAME; + } +break; +case 112: +#line 911 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_INVISIBLE; + } +break; +case 113: +#line 916 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= HAS_LEFT_ARROW_HEAD; + } +break; +case 114: +#line 921 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= HAS_RIGHT_ARROW_HEAD; + } +break; +case 115: +#line 926 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD); + } +break; +case 116: +#line 931 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_CLOCKWISE; + } +break; +case 117: +#line 936 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags &= ~IS_CLOCKWISE; + } +break; +case 118: +#line 941 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + for (text_item **p = & yyval.spec->text; *p; p = &(*p)->next) + ; + *p = new text_item(yyvsp[0].lstr.str, yyvsp[0].lstr.filename, yyvsp[0].lstr.lineno); + } +break; +case 119: +#line 948 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + if (yyval.spec->text) { + for (text_item *p = yyval.spec->text; p->next; p = p->next) + ; + p->adj.h = LEFT_ADJUST; + } + } +break; +case 120: +#line 957 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + if (yyval.spec->text) { + for (text_item *p = yyval.spec->text; p->next; p = p->next) + ; + p->adj.h = RIGHT_ADJUST; + } + } +break; +case 121: +#line 966 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + if (yyval.spec->text) { + for (text_item *p = yyval.spec->text; p->next; p = p->next) + ; + p->adj.v = ABOVE_ADJUST; + } + } +break; +case 122: +#line 975 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + if (yyval.spec->text) { + for (text_item *p = yyval.spec->text; p->next; p = p->next) + ; + p->adj.v = BELOW_ADJUST; + } + } +break; +case 123: +#line 984 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-2].spec; + yyval.spec->flags |= HAS_THICKNESS; + yyval.spec->thickness = yyvsp[0].x; + } +break; +case 124: +#line 990 "/u/jjc/groff/pic/pic.y" +{ + yyval.spec = yyvsp[-1].spec; + yyval.spec->flags |= IS_ALIGNED; + } +break; +case 125: +#line 998 "/u/jjc/groff/pic/pic.y" +{ + yyval.lstr = yyvsp[0].lstr; + } +break; +case 126: +#line 1002 "/u/jjc/groff/pic/pic.y" +{ + yyval.lstr.filename = yyvsp[-2].lstr.filename; + yyval.lstr.lineno = yyvsp[-2].lstr.lineno; + yyval.lstr.str = do_sprintf(yyvsp[-2].lstr.str, yyvsp[-1].dv.v, yyvsp[-1].dv.nv); + a_delete yyvsp[-1].dv.v; + a_delete yyvsp[-2].lstr.str; + } +break; +case 127: +#line 1013 "/u/jjc/groff/pic/pic.y" +{ + yyval.dv.v = 0; + yyval.dv.nv = 0; + yyval.dv.maxv = 0; + } +break; +case 128: +#line 1019 "/u/jjc/groff/pic/pic.y" +{ + yyval.dv = yyvsp[-2].dv; + if (yyval.dv.nv >= yyval.dv.maxv) { + if (yyval.dv.nv == 0) { + yyval.dv.v = new double[4]; + yyval.dv.maxv = 4; + } + else { + double *oldv = yyval.dv.v; + yyval.dv.maxv *= 2; + yyval.dv.v = new double[yyval.dv.maxv]; + memcpy(yyval.dv.v, oldv, yyval.dv.nv*sizeof(double)); + a_delete oldv; + } + } + yyval.dv.v[yyval.dv.nv] = yyvsp[0].x; + yyval.dv.nv += 1; + } +break; +case 129: +#line 1041 "/u/jjc/groff/pic/pic.y" +{ yyval.pair = yyvsp[0].pair; } +break; +case 130: +#line 1043 "/u/jjc/groff/pic/pic.y" +{ + position pos = yyvsp[0].pl; + yyval.pair.x = pos.x; + yyval.pair.y = pos.y; + } +break; +case 131: +#line 1052 "/u/jjc/groff/pic/pic.y" +{ yyval.pair = yyvsp[0].pair; } +break; +case 132: +#line 1054 "/u/jjc/groff/pic/pic.y" +{ + yyval.pair.x = yyvsp[-2].pair.x + yyvsp[0].pair.x; + yyval.pair.y = yyvsp[-2].pair.y + yyvsp[0].pair.y; + } +break; +case 133: +#line 1059 "/u/jjc/groff/pic/pic.y" +{ + yyval.pair.x = yyvsp[-2].pair.x - yyvsp[0].pair.x; + yyval.pair.y = yyvsp[-2].pair.y - yyvsp[0].pair.y; + } +break; +case 134: +#line 1064 "/u/jjc/groff/pic/pic.y" +{ + yyval.pair.x = yyvsp[-3].pair.x; + yyval.pair.y = yyvsp[-1].pair.y; + } +break; +case 135: +#line 1069 "/u/jjc/groff/pic/pic.y" +{ + yyval.pair.x = (1.0 - yyvsp[-4].x)*yyvsp[-2].pair.x + yyvsp[-4].x*yyvsp[0].pair.x; + yyval.pair.y = (1.0 - yyvsp[-4].x)*yyvsp[-2].pair.y + yyvsp[-4].x*yyvsp[0].pair.y; + } +break; +case 136: +#line 1074 "/u/jjc/groff/pic/pic.y" +{ + yyval.pair.x = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.x + yyvsp[-5].x*yyvsp[-1].pair.x; + yyval.pair.y = (1.0 - yyvsp[-5].x)*yyvsp[-3].pair.y + yyvsp[-5].x*yyvsp[-1].pair.y; + } +break; +case 139: +#line 1087 "/u/jjc/groff/pic/pic.y" +{ yyval.pair.x = yyvsp[-2].x; yyval.pair.y = yyvsp[0].x; } +break; +case 140: +#line 1089 "/u/jjc/groff/pic/pic.y" +{ yyval.pair = yyvsp[-1].pair; } +break; +case 141: +#line 1094 "/u/jjc/groff/pic/pic.y" +{ yyval.pl = yyvsp[0].pl; } +break; +case 142: +#line 1096 "/u/jjc/groff/pic/pic.y" +{ + path pth(yyvsp[0].crn); + if (!pth.follow(yyvsp[-1].pl, & yyval.pl)) + YYABORT; + } +break; +case 143: +#line 1102 "/u/jjc/groff/pic/pic.y" +{ + path pth(yyvsp[-1].crn); + if (!pth.follow(yyvsp[0].pl, & yyval.pl)) + YYABORT; + } +break; +case 144: +#line 1108 "/u/jjc/groff/pic/pic.y" +{ + path pth(yyvsp[-2].crn); + if (!pth.follow(yyvsp[0].pl, & yyval.pl)) + YYABORT; + } +break; +case 145: +#line 1114 "/u/jjc/groff/pic/pic.y" +{ + yyval.pl.x = current_position.x; + yyval.pl.y = current_position.y; + yyval.pl.obj = 0; + } +break; +case 146: +#line 1123 "/u/jjc/groff/pic/pic.y" +{ + place *p = lookup_label(yyvsp[0].str); + if (!p) { + lex_error("there is no place `%1'", yyvsp[0].str); + YYABORT; + } + yyval.pl = *p; + a_delete yyvsp[0].str; + } +break; +case 147: +#line 1133 "/u/jjc/groff/pic/pic.y" +{ + yyval.pl.obj = yyvsp[0].obj; + } +break; +case 148: +#line 1137 "/u/jjc/groff/pic/pic.y" +{ + path pth(yyvsp[0].str); + if (!pth.follow(yyvsp[-2].pl, & yyval.pl)) + YYABORT; + } +break; +case 149: +#line 1146 "/u/jjc/groff/pic/pic.y" +{ yyval.n = yyvsp[0].n; } +break; +case 150: +#line 1148 "/u/jjc/groff/pic/pic.y" +{ + /* XXX Check for overflow (and non-integers?).*/ + yyval.n = (int)yyvsp[-1].x; + } +break; +case 151: +#line 1156 "/u/jjc/groff/pic/pic.y" +{ yyval.n = 1; } +break; +case 152: +#line 1158 "/u/jjc/groff/pic/pic.y" +{ yyval.n = yyvsp[-1].n; } +break; +case 153: +#line 1163 "/u/jjc/groff/pic/pic.y" +{ + int count = 0; + for (object *p = olist.head; p != 0; p = p->next) + if (p->type() == yyvsp[0].obtype && ++count == yyvsp[-1].n) { + yyval.obj = p; + break; + } + if (p == 0) { + lex_error("there is no %1%2 %3", yyvsp[-1].n, ordinal_postfix(yyvsp[-1].n), + object_type_name(yyvsp[0].obtype)); + YYABORT; + } + } +break; +case 154: +#line 1177 "/u/jjc/groff/pic/pic.y" +{ + int count = 0; + for (object *p = olist.tail; p != 0; p = p->prev) + if (p->type() == yyvsp[0].obtype && ++count == yyvsp[-1].n) { + yyval.obj = p; + break; + } + if (p == 0) { + lex_error("there is no %1%2 last %3", yyvsp[-1].n, + ordinal_postfix(yyvsp[-1].n), object_type_name(yyvsp[0].obtype)); + YYABORT; + } + } +break; +case 155: +#line 1194 "/u/jjc/groff/pic/pic.y" +{ yyval.obtype = BOX_OBJECT; } +break; +case 156: +#line 1196 "/u/jjc/groff/pic/pic.y" +{ yyval.obtype = CIRCLE_OBJECT; } +break; +case 157: +#line 1198 "/u/jjc/groff/pic/pic.y" +{ yyval.obtype = ELLIPSE_OBJECT; } +break; +case 158: +#line 1200 "/u/jjc/groff/pic/pic.y" +{ yyval.obtype = ARC_OBJECT; } +break; +case 159: +#line 1202 "/u/jjc/groff/pic/pic.y" +{ yyval.obtype = LINE_OBJECT; } +break; +case 160: +#line 1204 "/u/jjc/groff/pic/pic.y" +{ yyval.obtype = ARROW_OBJECT; } +break; +case 161: +#line 1206 "/u/jjc/groff/pic/pic.y" +{ yyval.obtype = SPLINE_OBJECT; } +break; +case 162: +#line 1208 "/u/jjc/groff/pic/pic.y" +{ yyval.obtype = BLOCK_OBJECT; } +break; +case 163: +#line 1210 "/u/jjc/groff/pic/pic.y" +{ yyval.obtype = TEXT_OBJECT; } +break; +case 164: +#line 1215 "/u/jjc/groff/pic/pic.y" +{ + yyval.pth = new path(yyvsp[0].str); + } +break; +case 165: +#line 1219 "/u/jjc/groff/pic/pic.y" +{ + yyval.pth = yyvsp[-2].pth; + yyval.pth->append(yyvsp[0].str); + } +break; +case 166: +#line 1227 "/u/jjc/groff/pic/pic.y" +{ + yyval.pth = new path(yyvsp[0].crn); + } +break; +case 167: +#line 1234 "/u/jjc/groff/pic/pic.y" +{ + yyval.pth = yyvsp[0].pth; + } +break; +case 168: +#line 1238 "/u/jjc/groff/pic/pic.y" +{ + yyval.pth = yyvsp[-1].pth; + yyval.pth->append(yyvsp[0].crn); + } +break; +case 169: +#line 1246 "/u/jjc/groff/pic/pic.y" +{ + yyval.pth = yyvsp[0].pth; + } +break; +case 170: +#line 1251 "/u/jjc/groff/pic/pic.y" +{ + lex_warning("`%1%2 last %3' in `with' argument ignored", + yyvsp[-3].n, ordinal_postfix(yyvsp[-3].n), object_type_name(yyvsp[-1].obtype)); + yyval.pth = yyvsp[0].pth; + } +break; +case 171: +#line 1257 "/u/jjc/groff/pic/pic.y" +{ + lex_warning("`last %1' in `with' argument ignored", + object_type_name(yyvsp[-1].obtype)); + yyval.pth = yyvsp[0].pth; + } +break; +case 172: +#line 1263 "/u/jjc/groff/pic/pic.y" +{ + lex_warning("`%1%2 %3' in `with' argument ignored", + yyvsp[-2].n, ordinal_postfix(yyvsp[-2].n), object_type_name(yyvsp[-1].obtype)); + yyval.pth = yyvsp[0].pth; + } +break; +case 173: +#line 1269 "/u/jjc/groff/pic/pic.y" +{ + lex_warning("initial `%1' in `with' argument ignored", yyvsp[-1].str); + a_delete yyvsp[-1].str; + yyval.pth = yyvsp[0].pth; + } +break; +case 174: +#line 1278 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::north; } +break; +case 175: +#line 1280 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::east; } +break; +case 176: +#line 1282 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::west; } +break; +case 177: +#line 1284 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::south; } +break; +case 178: +#line 1286 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::north_east; } +break; +case 179: +#line 1288 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object:: south_east; } +break; +case 180: +#line 1290 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::north_west; } +break; +case 181: +#line 1292 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::south_west; } +break; +case 182: +#line 1294 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::center; } +break; +case 183: +#line 1296 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::start; } +break; +case 184: +#line 1298 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::end; } +break; +case 185: +#line 1300 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::north; } +break; +case 186: +#line 1302 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::south; } +break; +case 187: +#line 1304 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::west; } +break; +case 188: +#line 1306 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::east; } +break; +case 189: +#line 1308 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::north_west; } +break; +case 190: +#line 1310 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::south_west; } +break; +case 191: +#line 1312 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::north_east; } +break; +case 192: +#line 1314 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::south_east; } +break; +case 193: +#line 1316 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::west; } +break; +case 194: +#line 1318 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::east; } +break; +case 195: +#line 1320 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::north_west; } +break; +case 196: +#line 1322 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::south_west; } +break; +case 197: +#line 1324 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::north_east; } +break; +case 198: +#line 1326 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::south_east; } +break; +case 199: +#line 1328 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::center; } +break; +case 200: +#line 1330 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::start; } +break; +case 201: +#line 1332 "/u/jjc/groff/pic/pic.y" +{ yyval.crn = &object::end; } +break; +case 202: +#line 1337 "/u/jjc/groff/pic/pic.y" +{ + if (!lookup_variable(yyvsp[0].str, & yyval.x)) { + lex_error("there is no variable `%1'", yyvsp[0].str); + YYABORT; + } + a_delete yyvsp[0].str; + } +break; +case 203: +#line 1345 "/u/jjc/groff/pic/pic.y" +{ yyval.x = yyvsp[0].x; } +break; +case 204: +#line 1347 "/u/jjc/groff/pic/pic.y" +{ + if (yyvsp[-1].pl.obj != 0) + yyval.x = yyvsp[-1].pl.obj->origin().x; + else + yyval.x = yyvsp[-1].pl.x; + } +break; +case 205: +#line 1354 "/u/jjc/groff/pic/pic.y" +{ + if (yyvsp[-1].pl.obj != 0) + yyval.x = yyvsp[-1].pl.obj->origin().y; + else + yyval.x = yyvsp[-1].pl.y; + } +break; +case 206: +#line 1361 "/u/jjc/groff/pic/pic.y" +{ + if (yyvsp[-1].pl.obj != 0) + yyval.x = yyvsp[-1].pl.obj->height(); + else + yyval.x = 0.0; + } +break; +case 207: +#line 1368 "/u/jjc/groff/pic/pic.y" +{ + if (yyvsp[-1].pl.obj != 0) + yyval.x = yyvsp[-1].pl.obj->width(); + else + yyval.x = 0.0; + } +break; +case 208: +#line 1375 "/u/jjc/groff/pic/pic.y" +{ + if (yyvsp[-1].pl.obj != 0) + yyval.x = yyvsp[-1].pl.obj->radius(); + else + yyval.x = 0.0; + } +break; +case 209: +#line 1382 "/u/jjc/groff/pic/pic.y" +{ yyval.x = yyvsp[-2].x + yyvsp[0].x; } +break; +case 210: +#line 1384 "/u/jjc/groff/pic/pic.y" +{ yyval.x = yyvsp[-2].x - yyvsp[0].x; } +break; +case 211: +#line 1386 "/u/jjc/groff/pic/pic.y" +{ yyval.x = yyvsp[-2].x * yyvsp[0].x; } +break; +case 212: +#line 1388 "/u/jjc/groff/pic/pic.y" +{ + if (yyvsp[0].x == 0.0) { + lex_error("division by zero"); + YYABORT; + } + yyval.x = yyvsp[-2].x/yyvsp[0].x; + } +break; +case 213: +#line 1396 "/u/jjc/groff/pic/pic.y" +{ + if (yyvsp[0].x == 0.0) { + lex_error("modulus by zero"); + YYABORT; + } + yyval.x = fmod(yyvsp[-2].x, yyvsp[0].x); + } +break; +case 214: +#line 1404 "/u/jjc/groff/pic/pic.y" +{ + errno = 0; + yyval.x = pow(yyvsp[-2].x, yyvsp[0].x); + if (errno == EDOM) { + lex_error("arguments to `^' operator out of domain"); + YYABORT; + } + if (errno == ERANGE) { + lex_error("result of `^' operator out of range"); + YYABORT; + } + } +break; +case 215: +#line 1417 "/u/jjc/groff/pic/pic.y" +{ yyval.x = -yyvsp[0].x; } +break; +case 216: +#line 1419 "/u/jjc/groff/pic/pic.y" +{ yyval.x = yyvsp[-1].x; } +break; +case 217: +#line 1421 "/u/jjc/groff/pic/pic.y" +{ + errno = 0; + yyval.x = sin(yyvsp[-1].x); + if (errno == ERANGE) { + lex_error("sin result out of range"); + YYABORT; + } + } +break; +case 218: +#line 1430 "/u/jjc/groff/pic/pic.y" +{ + errno = 0; + yyval.x = cos(yyvsp[-1].x); + if (errno == ERANGE) { + lex_error("cos result out of range"); + YYABORT; + } + } +break; +case 219: +#line 1439 "/u/jjc/groff/pic/pic.y" +{ + errno = 0; + yyval.x = atan2(yyvsp[-3].x, yyvsp[-1].x); + if (errno == EDOM) { + lex_error("atan2 argument out of domain"); + YYABORT; + } + if (errno == ERANGE) { + lex_error("atan2 result out of range"); + YYABORT; + } + } +break; +case 220: +#line 1452 "/u/jjc/groff/pic/pic.y" +{ + errno = 0; + yyval.x = log10(yyvsp[-1].x); + if (errno == ERANGE) { + lex_error("log result out of range"); + YYABORT; + } + } +break; +case 221: +#line 1461 "/u/jjc/groff/pic/pic.y" +{ + errno = 0; + yyval.x = pow(10.0, yyvsp[-1].x); + if (errno == ERANGE) { + lex_error("exp result out of range"); + YYABORT; + } + } +break; +case 222: +#line 1470 "/u/jjc/groff/pic/pic.y" +{ + errno = 0; + yyval.x = sqrt(yyvsp[-1].x); + if (errno == EDOM) { + lex_error("sqrt argument out of domain"); + YYABORT; + } + } +break; +case 223: +#line 1479 "/u/jjc/groff/pic/pic.y" +{ yyval.x = yyvsp[-3].x > yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; } +break; +case 224: +#line 1481 "/u/jjc/groff/pic/pic.y" +{ yyval.x = yyvsp[-3].x < yyvsp[-1].x ? yyvsp[-3].x : yyvsp[-1].x; } +break; +case 225: +#line 1483 "/u/jjc/groff/pic/pic.y" +{ yyval.x = floor(yyvsp[-1].x); } +break; +case 226: +#line 1485 "/u/jjc/groff/pic/pic.y" +{ yyval.x = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*yyvsp[-1].x); } +break; +case 227: +#line 1487 "/u/jjc/groff/pic/pic.y" +{ + /* return a random number in the range [0,1) */ + /* portable, but not very random */ + yyval.x = (rand() & 0x7fff) / double(0x8000); + } +break; +case 228: +#line 1493 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x < yyvsp[0].x); } +break; +case 229: +#line 1495 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x <= yyvsp[0].x); } +break; +case 230: +#line 1497 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x > yyvsp[0].x); } +break; +case 231: +#line 1499 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x >= yyvsp[0].x); } +break; +case 232: +#line 1501 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x == yyvsp[0].x); } +break; +case 233: +#line 1503 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != yyvsp[0].x); } +break; +case 234: +#line 1505 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 && yyvsp[0].x != 0.0); } +break; +case 235: +#line 1507 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[-2].x != 0.0 || yyvsp[0].x != 0.0); } +break; +case 236: +#line 1509 "/u/jjc/groff/pic/pic.y" +{ yyval.x = (yyvsp[0].x == 0.0); } +break; +#line 5111 "y.tab.c" + } + yyssp -= yym; + yystate = *yyssp; + yyvsp -= yym; + yym = yylhs[yyn]; + if (yystate == 0 && yym == 0) + { +#if YYDEBUG + if (yydebug) + printf("yydebug: after reduction, shifting from state 0 to\ + state %d\n", 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("yydebug: state %d, reading %d (%s)\n", + YYFINAL, yychar, yys); + } +#endif + } + if (yychar == 0) goto yyaccept; + goto yyloop; + } + if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 && + yyn <= YYTABLESIZE && yycheck[yyn] == yystate) + yystate = yytable[yyn]; + else + yystate = yydgoto[yym]; +#if YYDEBUG + if (yydebug) + printf("yydebug: after reduction, shifting from state %d \ +to state %d\n", *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); +} |