Diff for /embedaddon/sudo/plugins/sudoers/toke.c between versions 1.1.1.2 and 1.1.1.5

version 1.1.1.2, 2012/05/29 12:26:49 version 1.1.1.5, 2014/06/15 16:12:54
Line 1 Line 1
 #include <config.h>  #include <config.h>
/*      $OpenBSD: flex.skl,v 1.11 2010/08/04 18:24:50 millert Exp $   */#define yy_create_buffer sudoers_create_buffer
 #define yy_delete_buffer sudoers_delete_buffer
 #define yy_scan_buffer sudoers_scan_buffer
 #define yy_scan_string sudoers_scan_string
 #define yy_scan_bytes sudoers_scan_bytes
 #define yy_flex_debug sudoers_flex_debug
 #define yy_init_buffer sudoers_init_buffer
 #define yy_flush_buffer sudoers_flush_buffer
 #define yy_load_buffer_state sudoers_load_buffer_state
 #define yy_switch_to_buffer sudoers_switch_to_buffer
 #define yyin sudoersin
 #define yyleng sudoersleng
 #define yylex sudoerslex
 #define yyout sudoersout
 #define yyrestart sudoersrestart
 #define yytext sudoerstext
   
   /*      $OpenBSD: flex.skl,v 1.12 2013/11/04 17:03:32 millert Exp $     */
   
 /* A lexical scanner generated by flex */  /* A lexical scanner generated by flex */
   
 /* Scanner skeleton version:  /* Scanner skeleton version:
Line 131  extern FILE *yyin, *yyout; Line 148  extern FILE *yyin, *yyout;
                 /* Undo effects of setting up yytext. */ \                  /* Undo effects of setting up yytext. */ \
                 *yy_cp = yy_hold_char; \                  *yy_cp = yy_hold_char; \
                 YY_RESTORE_YY_MORE_OFFSET \                  YY_RESTORE_YY_MORE_OFFSET \
                yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \                yy_cp = yy_bp + n - YY_MORE_ADJ; \
                 YY_DO_BEFORE_ACTION; /* set up yytext again */ \                  YY_DO_BEFORE_ACTION; /* set up yytext again */ \
                 } \                  } \
         while ( 0 )          while ( 0 )
Line 289  static void yy_fatal_error YY_PROTO(( yyconst char msg Line 306  static void yy_fatal_error YY_PROTO(( yyconst char msg
         *yy_cp = '\0'; \          *yy_cp = '\0'; \
         yy_c_buf_p = yy_cp;          yy_c_buf_p = yy_cp;
   
#define YY_NUM_RULES 59#define YY_NUM_RULES 67
#define YY_END_OF_BUFFER 60#define YY_END_OF_BUFFER 68
static yyconst short int yy_accept[607] =static yyconst short int yy_accept[814] =
     {   0,      {   0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,          0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
        0,    0,   60,   47,   55,   54,   53,   46,   58,   32,        0,    0,    0,    0,   68,   55,   63,   62,   61,   54,
       48,   49,   32,   50,   47,   47,   47,   47,   52,   51,       65,   34,   56,   57,   34,   58,   55,   55,   55,   55,
       58,   42,   42,   42,   42,   42,   42,   42,   42,   42,       60,   59,   66,   46,   46,   46,   46,   46,   46,   46,
       42,   58,   47,   47,   55,   58,   42,   42,   42,   42,       46,   46,   46,   66,   55,   55,   63,   65,   46,   46,
       42,    2,   58,    1,   47,   47,   17,   16,   17,   16,       46,   46,   46,    2,   66,    1,   55,   46,   46,   55,
       16,   58,   58,   58,    3,    9,    8,    9,    4,    9,       17,   16,   17,   16,   16,   66,   65,   66,    3,    9,
        5,   58,   13,   13,   13,   11,   12,   47,    0,   55,        8,    9,    4,    9,    5,   66,   13,   13,   13,   11,
       53,    0,   57,    0,   47,   34,    0,   32,    0,   33,       12,   66,   19,   19,   18,   18,   18,   19,   18,   18,
        0,   45,   45,    0,   47,   47,    0,   47,   47,   47,       18,   19,   19,   19,   19,   19,   18,   19,   19,   55,
   
       47,    0,   37,   42,   42,   42,   42,   42,   42,   42,        0,   63,   61,   65,   65,    0,   55,   36,    0,   34,
       42,   42,   42,   47,   56,   47,   55,    0,    0,    0,        0,   35,    0,   53,   53,    0,   55,   55,    0,   55,
        0,    0,    0,   47,   47,   47,   47,   47,    2,    1,       55,   55,   55,    0,   39,   46,   46,   46,   46,   46,
        0,    1,   43,   43,    0,   47,   17,   17,   15,   14,       46,   46,   46,   46,   46,   46,   46,   55,   64,   55,
       15,    0,    0,    3,    9,    0,    6,    7,    9,    9,       55,   63,    0,    0,    0,    0,    0,   65,   55,   55,
       13,    0,   13,   13,    0,   10,    0,    0,    0,   34,       55,   55,   55,    2,    1,    0,    1,   47,   47,    0,
       34,    0,    0,   47,   47,   47,   47,   47,    0,    0,       55,   17,   17,   15,   14,   15,    0,    0,    3,    9,
       37,   37,   42,   39,   42,   42,   42,   42,   42,   42,        0,    6,    7,    9,    9,   13,    0,   13,   13,    0,
       42,   42,   42,   42,   47,    0,    0,    0,    0,    0,       10,   36,    0,    0,   35,   19,   19,    0,   19,    0,
        0,   47,   47,   47,   47,   47,    0,   47,   10,    0,        0,   18,   18,   18,   18,   18,   18,   19,   19,   46,
   
       47,   47,   47,   47,   47,   47,    0,   38,   38,   38,       19,   19,   19,   19,   19,   19,   19,   65,   65,    0,
        0,    0,   37,   37,   37,   37,   37,   37,   37,   42,       36,   55,   55,   55,   55,   55,    0,    0,   39,   39,
       42,   42,   42,   42,   42,   42,   42,   40,   42,   41,       46,   41,   46,   46,   46,   46,   46,   46,   46,   46,
       47,    0,    0,    0,    0,    0,    0,   47,   47,   47,       46,   46,   46,   46,   55,   55,    0,    0,    0,    0,
       47,   47,   47,   47,    0,    0,   38,   38,   38,    0,        0,   65,   55,   55,   55,   55,   55,    0,   55,   10,
       37,   37,    0,   37,   37,   37,   37,   37,   37,   37,        0,    0,    0,   18,   18,   18,   19,   19,   19,   19,
       37,   37,   37,   37,    0,   25,   42,   42,   42,   42,       19,   19,   19,   19,   19,   19,   19,   65,   55,   55,
       42,   42,   42,   42,   47,    0,    0,    0,    0,   47,       55,   55,   55,   55,    0,   40,   40,   40,    0,    0,
       47,   47,   47,   47,   47,   47,   47,    0,   38,    0,       39,   39,   39,   39,   39,   39,   39,   46,   46,   46,
       37,   37,   37,    0,    0,    0,   37,   37,   37,   37,       46,   46,   46,   46,   46,   46,   46,   42,   46,   43,
   
       37,   37,   37,   37,   37,   37,   37,   37,   37,   42,       55,   55,   55,   55,    0,    0,    0,    0,    0,   65,
       42,   42,   42,   42,   42,   42,   42,   47,    0,    0,       55,   55,   55,   55,    0,    0,    0,    0,    0,   18,
        0,   47,   47,   47,   35,   35,   35,    0,    0,   37,       18,   19,   46,   19,   19,   19,   19,   19,   19,   19,
       37,   37,   37,   37,   37,   37,    0,    0,    0,    0,       19,   19,   19,   55,   55,   55,    0,    0,   40,   40,
        0,   37,   37,   37,   37,   37,   37,   37,   37,   37,       40,    0,   39,   39,    0,   39,   39,   39,   39,   39,
       37,   37,   37,   37,   37,   42,   42,    0,   24,   42,       39,   39,   39,   39,   39,   39,    0,   27,   46,   46,
       42,   42,   42,    0,   23,    0,   26,   47,    0,    0,       46,   46,   46,   46,   46,   46,   44,   46,   55,   55,
        0,   47,   47,   47,   47,   35,   35,   35,   35,    0,       55,   55,   55,    0,    0,    0,   65,   55,   55,   55,
       37,    0,   37,   37,   37,   37,   37,   37,   37,   37,        0,    0,    0,   18,   18,   46,   46,   19,   19,   19,
       37,   37,   37,    0,    0,    0,   37,   37,   37,   37,       19,   19,   19,   19,   19,   19,   19,   19,   55,   55,
   
       37,   37,   37,   37,   37,   37,   37,   37,   37,   42,       55,   55,   55,    0,   40,    0,   39,   39,   39,    0,
       42,   42,   42,   42,   42,   44,    0,    0,    0,   47,        0,    0,   39,   39,   39,   39,   39,   39,   39,   39,
       20,   43,   36,   36,   36,   36,   37,    0,    0,    0,       39,   39,   39,   39,   39,   46,   46,   46,   46,   46,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,       46,   46,   46,   46,   48,   49,   50,   51,   55,    0,
       37,   37,   37,    0,    0,    0,    0,    0,   37,   37,        0,   65,   55,   55,   55,    0,    0,    0,    0,    0,
       37,   37,   37,   37,   37,   37,   42,   42,   42,   42,       46,   46,   19,   46,   19,   19,   19,   19,   19,   19,
        0,   22,    0,   27,    0,   20,    0,    0,   47,    0,       19,   19,   19,   37,   37,   37,    0,    0,   39,   39,
       47,   47,   47,   36,   36,   36,   36,    0,    0,    0,       39,   39,   39,   39,   39,    0,    0,    0,    0,    0,
        0,    0,   37,   37,   37,   37,   37,   37,   37,   37,       39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,       39,   39,   39,   39,   46,   46,   46,    0,   26,   46,
   
       37,   37,    0,   30,   42,   42,   42,    0,    0,    0,       46,   46,   46,    0,   25,    0,   28,   55,    0,    0,
       18,    0,   21,   20,    0,    0,    0,    0,    0,   20,       65,   55,   55,   55,   37,   37,   37,   46,   46,   46,
        0,   47,   47,   47,    0,    0,    0,   37,   37,   37,       46,   19,   19,   19,   55,   37,   37,   37,   37,    0,
       37,   37,   37,   37,   37,   37,   37,   37,   37,   37,       39,    0,   39,   39,   39,   39,   39,   39,   39,   39,
       37,   37,   37,   37,   37,    0,   28,   42,   42,   21,       39,   39,   39,    0,    0,    0,   39,   39,   39,   39,
        0,    0,   20,   47,   47,   47,   47,   47,    0,    0,       39,   39,   39,   39,   39,   39,   39,   39,   39,   46,
        0,    0,    0,   37,   37,   37,   37,   37,   37,   37,       46,   46,   46,   46,   46,   46,   52,    0,    0,   65,
       37,    0,   31,   42,    0,   47,   47,   47,   37,   37,       55,   22,   47,    0,   37,   37,   37,   37,   46,   46,
       37,   37,   37,   37,    0,   29,    0,    0,   19,   47,       46,   46,   19,   19,   19,   38,   38,   38,   38,   39,
       47,   47,   47,   47,   37,   37,   37,   37,   37,   35,        0,    0,    0,   39,   39,   39,   39,   39,   39,   39,
   
       35,   35,   35,   35,   35,    0       39,   39,   39,   39,   39,   39,    0,    0,    0,    0,
         0,   39,   39,   39,   39,   39,   39,   39,   39,   46,
        46,   46,   46,   46,    0,   24,    0,   29,    0,   22,
        65,   65,   55,    0,   55,   38,   38,   38,   38,   46,
        46,   46,   46,   55,   55,   38,   38,   38,   38,    0,
         0,    0,    0,    0,   39,   39,   39,   39,   39,   39,
        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
        39,   39,   39,   39,   45,    0,   32,   46,   46,   46,
         0,   65,   65,   20,   65,   23,   22,    0,    0,    0,
         0,    0,   22,    0,    0,    0,   38,   38,   38,   38,
 
        46,   46,   46,   55,   55,   55,    0,    0,    0,   39,
        39,   39,   39,   39,   39,   39,   39,   39,   39,   39,
        39,   39,   39,   39,   39,   39,   39,    0,   30,   46,
        46,   23,   65,    0,   22,    0,    0,    0,   46,   46,
        55,   55,   55,   55,   55,    0,    0,    0,    0,    0,
        39,   39,   39,   39,   39,   39,   39,   39,    0,   33,
        46,   65,    0,    0,    0,    0,    0,   46,   55,   55,
        55,   39,   39,   39,   39,   39,   39,    0,   31,   65,
        65,   21,    0,    0,    0,   55,   55,   55,   55,   55,
        39,   39,   39,   39,   39,    0,    0,    0,    0,    0,
 
        37,   37,   37,   37,   37,   37,   37,   37,   37,   37,
        37,   37,    0
     } ;      } ;
   
 static yyconst int yy_ec[256] =  static yyconst int yy_ec[256] =
Line 369  static yyconst int yy_ec[256] = Line 409  static yyconst int yy_ec[256] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    2,    4,    5,    6,    1,    7,    1,    1,    8,          1,    2,    4,    5,    6,    1,    7,    1,    1,    8,
         9,   10,   11,   12,   13,   14,   15,   16,   17,   18,          9,   10,   11,   12,   13,   14,   15,   16,   17,   18,
       19,   20,   21,   22,   22,   22,   23,   24,    1,    1,       19,   20,   21,   22,   23,   24,   25,   26,    1,    1,
       25,   26,   10,   27,   28,   29,   30,   31,   32,   29,       27,   28,   10,   29,   30,   31,   32,   33,   34,   31,
       33,   34,   35,   36,   36,   37,   36,   38,   39,   40,       35,   36,   37,   38,   38,   39,   40,   41,   42,   43,
       36,   41,   42,   43,   44,   45,   46,   47,   48,   36,       38,   44,   45,   46,   47,   48,   49,   50,   51,   38,
       10,   49,   10,    1,   50,    1,   51,   52,   53,   54,       10,   52,   10,    1,   53,    1,   54,   55,   56,   57,
   
       55,   56,   57,   57,   58,   57,   57,   59,   60,   61,       58,   59,   60,   61,   62,   60,   60,   63,   64,   65,
       62,   57,   57,   63,   64,   65,   66,   57,   57,   57,       66,   60,   60,   67,   68,   69,   70,   60,   60,   60,
       57,   57,    1,    1,    1,    1,    1,    1,    1,    1,       60,   60,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Line 394  static yyconst int yy_ec[256] = Line 434  static yyconst int yy_ec[256] =
         1,    1,    1,    1,    1          1,    1,    1,    1,    1
     } ;      } ;
   
static yyconst int yy_meta[67] =static yyconst int yy_meta[71] =
     {   0,      {   0,
         1,    2,    3,    4,    5,    6,    1,    7,    7,    1,          1,    2,    3,    4,    5,    6,    1,    7,    7,    1,
        1,    8,    1,    9,   10,   11,   11,   11,   11,   11,        8,    9,   10,   11,   12,   13,   13,   13,   13,   13,
       11,   11,   11,   12,   13,    7,    1,   11,   11,   11,       13,   13,   13,   13,   13,   14,   15,    7,    1,   16,
       11,   11,    1,    1,    1,    1,    1,    1,    1,    1,       16,   16,   16,   16,   17,   17,   17,   17,   17,   17,
        1,    1,    1,    1,    1,    1,    1,    1,   14,   15,       17,   17,   17,   17,   17,   17,   17,   17,   17,   17,
       16,   16,   16,   16,   16,   16,   15,   15,   15,   15,       17,   18,   19,   20,   20,   20,   20,   20,   20,   21,
       15,   15,   15,   15,   15,   15       21,   21,   21,   21,   21,   21,   21,   21,   21,   21
     } ;      } ;
   
static yyconst short int yy_base[671] =static yyconst short int yy_base[931] =
     {   0,      {   0,
        0,   65,   67,   72,   99,  114,  162,  227,  292,  340,        0,   69,   71,   79,   94,  124,  175,  244,  153,  197,
       86,  125, 2840, 2790, 2836, 3665, 2833, 3665,  387,   70,       85,  130,  314,    0, 4514, 4461, 4510, 5604, 4507, 5604,
     3665, 3665, 2771, 3665,  136,  397,  133,  159, 2795, 3665,      382,   86, 5604, 5604, 4458, 5604,  140,  394,  195,  153,
     3665,  453, 2781,   33,  504, 2770, 2767, 2777, 2765, 2771,     4483, 5604, 5604,  453, 4383,   43,  508,   37, 4379,   65,
     2754,  559,  170,   19,  165,  583,   38,   49, 2739,   68,     4378, 4385, 4367,  566,  581,   91,  151,  604,   39,   41,
     2727,   81,  219, 2771,  305,   48,    0, 3665, 2761, 3665,     4351,   34, 4348,  117, 4402, 4412,  428, 4371, 4382,  136,
        0,  250,  639,  119,    0, 2709, 3665,  108, 3665,  112,        0, 5604, 4407, 5604,    0,  606,  664,  105,    0, 4358,
     3665,  140, 2699,   98,  121, 3665,  195, 2693,  661, 2739,     5604,  115, 5604,  133, 5604,  138, 4357,  152,  171, 5604,
     2736, 2736, 3665,  227,  247,  300,  316,  152,  354, 2681,      188,  383,  641,  694,  737,  235,  245,  794,  843, 4369,
      686,  373, 2670,  711,  352,  722, 2692, 2669,  375,  414,      157,  898, 4365, 4364, 4375, 4370,  944,    0,  206, 4351,
   
      302, 2656,   57,  763,    0, 2628, 2625, 2614,  505, 2602,      266, 4400, 4397, 4397, 5604,  263,  532,  585, 4386,  608,
     2606, 2599, 2601,  202, 3665,  153,  546, 2572, 2565, 2549,      707, 4346,  829,  648, 4345,  968,  981, 1018, 4359, 4370,
     2537, 2524,  200,  110,  244,   28,  111,  252,  171, 2578,      563,  708,  422, 4357,  371, 1062, 1106, 4343, 4347, 4340,
      422, 2577,  565, 2529,  818,  262,    0, 2573,  179, 3665,     4344,  596, 4333, 4340, 4337, 4329, 4331,  644, 5604,  237,
     3665,  599,  269,    0, 2513,  453, 3665, 3665, 2512,  548,      137,  946, 4309, 4314, 4305, 4300, 4301,  121,  225,  530,
     2490, 2533,  206,  253,  323, 2535, 2524, 2513,  607,  615,      377,  369,  335,  445, 4366,  720, 4365,  931, 4314, 1018,
      306,  722,  586,  831,  867,  903,  939, 2499, 2456,  980,      169,    0, 4361,  160, 5604, 5604,  991,  388,    0, 4312,
      333, 1022, 1063,    0, 2430, 2394, 2363, 2364, 2374, 2369,      638, 5604, 5604, 4311,  661, 4310, 4356,  392,  221,  420,
     2327, 2330, 2329, 2328,  266, 2289, 2283, 2272, 2274, 2279,     4358,  653,  665, 1139, 4296, 1145,    0, 1173, 1201, 1210,
      409,  334, 2279,  145,  335,   83,  672,  278, 2327, 2325,     1037, 1239, 4333, 1081, 1170,  826, 1288, 1343, 4307,    0,
   
      627,  259, 1106, 1142,  741,  210, 2293, 2279,  683,  513,     4311, 4309,  899, 4298, 4296, 4287, 4283, 4336, 4335, 1222,
     2275, 2271,  352,  747, 1178,  780,  788, 1220,  815, 2270,     1258, 1389, 1362,  968, 1428, 4323, 4310, 1472,  520, 1517,
      400,  325, 2261, 2258, 2248, 2246, 2242,    0, 2240,    0,     1561, 1605, 4303, 4297, 4280, 4282, 4289, 4300, 4295, 4283,
      489, 2223, 2213, 2198, 2211, 2198,  420,  407,  529,  490,     4279, 4292, 4291, 4290,  654,  493, 4258, 4252, 4242, 4244,
      491, 1263, 1299, 1335, 2235, 2234,  839, 2234, 2232, 2228,     4250,  534,  579, 4253,  491,  407,  506, 1413,  626, 4304,
     2226,  528,  848,  657,  856,  665, 1371,    0,  877, 1382,     4251, 4239, 1651, 1661, 4227, 1705,    0, 4197, 4164, 4155,
      886,  894, 1424,  913,  570, 3665, 2208, 2197, 2201, 2178,     4151, 4151, 4135, 4112, 4111,  811, 4067, 4122, 1749,  378,
     2185, 2194, 2194, 2176,  558, 2169, 2152, 2150,  648,  626,        0,    0, 1041,  243, 4098, 4097, 1786,  805, 4096, 4095,
      530,  559,  923,  336, 1467, 1503,  964, 2171, 2140, 2139,      623, 1410, 1799, 1447, 1091, 1844, 1890, 4094,  429, 4073,
     2138, 1537,  551, 1000, 1041, 1082,  653,  694,  797, 1049,      632, 4084, 4082, 4056, 4054, 4050, 4053,    0, 4046,    0,
   
      923, 1580,    0, 1116, 1591, 1090, 1008, 1633, 1125, 2121,      929,  638,  544,  561, 4022, 4024, 4008, 4022, 4008,  746,
     2082,  747,  686, 2064, 2071,  786,  926,  905, 2080, 2033,      524, 1063,  413,  662, 1491, 4060, 4059, 4058, 1270, 1900,
      679,  634,  544,  915, 1675, 1710, 1745, 2052, 2043, 2033,     1944,  763,  904, 4037, 4020, 4009, 4007, 3992, 3988,  818,
     1150, 1781, 1158, 1133, 1822, 1197, 1166, 2028, 1239, 1273,     3993, 3988, 3912, 1990, 2002, 2014, 3930, 3929, 2024, 3929,
     1207,  950,  951,  962,  991, 1247, 1073, 1865,    0, 1283,     3912, 3911, 3910,  919, 1536, 1003, 1580, 1142, 2037,    0,
     1876, 1307, 1315, 1918, 1323, 1987, 1968, 1188, 3665, 1967,     1626, 2083, 1680, 1372, 2128, 2174,  764, 5604, 3892, 3877,
     1951, 1929, 1913, 1286, 3665, 1336, 3665,  707, 1897, 1889,     3870, 3884, 3862, 3869, 3879, 3879,    0, 3863,  698,  593,
      786,  930,  764, 1298, 1358, 1041, 1960, 1995, 1400, 1927,      820,  973, 1093, 3857, 3824, 3825,  922,  897,  969, 1097,
     1879, 1348,  708, 1406, 1348, 2031,    0,  559, 2042, 1441,     3866, 3858, 2186, 2196, 3829, 3807, 3800, 3814, 3778, 3784,
     1449, 2083, 1477, 1487, 1513, 1523, 1230, 1290, 1458, 1548,     3794, 3793, 3747, 3726, 3716, 3711, 3696, 3656, 2240, 1017,
   
     1557, 1602, 2126,    0, 1613, 2137, 1650, 1565, 1660, 1806,     2279, 2291, 1637, 3686, 3662, 3648, 3646, 2301, 1127, 3642,
     1779, 1680, 1675, 1359, 1406, 1626, 1601, 1577,  897,  938,     3641, 2347, 1154, 1205, 1209, 1724, 1761, 2359,    0, 1763,
     1695, 1589, 2180, 2216, 2252, 2288, 1611, 1686, 1720, 1731,     2405, 1774, 1457, 2450, 2496, 2521, 1024, 1127, 1181, 1190,
     1563, 1478, 1504, 1694, 1524, 2324,    0,  617, 2335, 1753,     1169, 1207, 1224, 1392, 3602, 3584, 3577, 3560, 1240, 3581,
     1761, 2376, 1769, 1798, 1550, 1808, 1841, 1851, 1335, 1358,     3547, 1313, 1391,  874, 1774, 1821, 3584, 3576, 3569, 1503,
     1887,  714,  825, 2419,    0,  926, 1407, 1468, 1430, 1431,     3523, 3519,  869, 1379, 3515, 3511,  949, 1045,    0,    0,
     1547, 3665, 1616, 3665, 1381, 1731, 1045, 1512, 1575, 1908,        0,    0, 3478, 2577, 1863, 1546, 3510, 3509, 3506, 1919,
     1913, 1970, 1498, 2429, 2465, 1947, 1611, 1981, 1264, 2006,     2616, 1963, 1590, 2660, 2706, 2056, 3517, 3509, 3487, 1692,
     2016, 2061, 1198, 1181, 1732, 1782, 2067, 1842, 2501,    0,     1879, 1979, 2096, 2104, 2147, 2106, 2718,    0, 2217, 2764,
     1181, 2512, 2100, 1904, 2553, 2110, 2155, 2164, 2189, 1769,     2250, 1734, 2809, 2855, 2880, 2086, 1133, 1088, 5604,  421,
   
     1142, 1232, 1634, 3665, 1699, 1095, 1077, 1025, 1046, 1306,     2087, 1184, 2088, 1369, 5604, 1370, 5604, 1197, 3418, 3389,
     3665,  384,  981, 2211, 2218, 2238, 2243, 2263, 2288, 2249,     1282, 2127, 1249, 1368, 3442, 3427, 2936, 3386, 3320, 3309,
     2307, 2596, 2632, 2668, 2304, 2354, 2395,  983,  894, 1902,     3295, 2951, 1219, 3272, 3006, 1181, 3044,    0, 1709, 3290,
     1928, 2362, 1929, 2704,    0, 1428, 2715, 2403, 2437, 2445,     3263, 2260,   58, 2320, 1774, 3083,    0, 2380, 3129, 2424,
      867, 2454, 2474, 2483,  831, 1982, 3665, 1983,  782, 3665,     1831, 3173, 3219, 3270, 3265, 3231, 2336, 2462, 2464, 2471,
     1511, 2489, 2529, 2537, 1895, 2758, 2794, 2573, 2579,  650,     3256, 2477, 3243,    0, 2589, 3289, 2600, 1929, 3335, 3360,
     2607, 2617, 2642,  629,  525, 1931,  447,  347, 2650,    0,     1376, 1087, 1847, 1409, 1542, 1586, 3218, 3184, 3166, 1832,
     1528, 2019, 3665, 2044, 1805, 2830, 2866, 2902, 2676, 2684,     1427, 2060, 3174, 2635, 3210, 3186, 3185, 2435, 3129, 3111,
     2692,  323,    0,  316, 2067, 3665,  166, 1845, 3665, 2733,     3114, 3066, 3429, 1454,    0, 3486, 2679, 2737, 1483, 3085,
     1945, 2938, 2974, 2743, 3665, 2767, 2777, 2658, 3665, 2805,     2989, 2839, 3525, 2819, 2003, 2280, 2783, 2381, 3537,    0,
   
     2813, 2847,   63, 2855, 2881, 3665, 3023, 3039, 3055, 3071,     2830, 3583, 3016, 2157, 3627, 3673, 3026, 2821, 2801, 2750,
     3087, 3103, 3119, 3135, 3151, 3157, 3173, 3189, 2025, 3205,     2228, 2472, 2474, 2695, 1189, 1531, 3685,    0, 2647, 1848,
     3221, 3237, 3253, 3269, 3285, 3301, 3307, 3314, 3330, 3346,     1925, 1602, 1522, 1849, 1587, 5604, 1664, 5604, 2692, 1967,
     3352, 3359, 3365, 3371, 3377, 3384, 3390, 3396, 3402, 3409,     1630, 2177, 2014, 2406, 2761, 2674, 2630, 3731, 2272, 1926,
     3417, 3423, 3429, 3435, 3442, 3450, 3456, 3462, 3469, 3477,     2155, 2500, 1927, 3741, 2076, 3780,    0, 1967, 2277, 3054,
     3483, 3491, 3498, 3506, 3512, 3520, 3527, 3535, 3551, 3567,     2598, 2535, 2509, 2841, 2470, 2431, 2485, 2600, 3064, 2617,
     3583, 3589, 3597, 3604, 3610, 3618, 3624, 3632, 3648, 1295     3819,    0, 3104, 3865, 3148, 3036, 3909, 3955, 2390, 2373,
      3966, 3118, 2338, 1742, 2298, 2129, 5604, 2743, 1825, 1738,
      2219, 2153, 1825, 5604, 2062, 2083, 3130, 3172, 3276, 3281,
      1984, 2880, 1920, 3360, 3192, 1912, 1877, 1858, 3274, 1744,
 
      2326, 2643, 2745, 3978, 3990, 4002, 1700, 1693, 4014, 1662,
      1623, 2856, 2951, 3496, 3084, 4026,    0, 3508, 4072, 3556,
      3074,    0, 1599, 1510, 1503, 3319, 1423, 2328, 5604, 3154,
      2037, 5604, 2124, 3602, 3646, 1409, 1403, 4118, 2407, 2791,
      4130, 2334, 4142, 4154, 3659, 3704, 1390, 1286, 1251, 3418,
      1158, 1087, 3105, 1077, 1056, 4166,    0, 3568, 2499, 5604,
      3270, 2220, 3751, 1014, 1005,  957, 3614, 2522, 4178, 4190,
      4202, 3761, 3790, 3800,  684,    0,  683, 2685, 5604,  658,
      2222, 5604,  522,  382, 4214, 4226, 2335, 4238, 4250, 3840,
      5604, 3846, 3884, 3202, 5604, 3928,  374,  208,  117, 3716,
 
      4260, 4297, 4334, 4045, 4091, 4270,   59, 4371, 3941, 5604,
      4280, 3771, 5604, 4423, 4444, 4465, 4486, 4507, 4528, 4549,
      4570, 4591, 4600, 2074, 4620, 4641, 2383, 4662, 4683, 4704,
      4725, 4746, 4767, 4788, 4809, 2337, 4830, 4839, 4847, 4856,
      4876, 4897, 4918, 2474, 4939, 4960, 4981, 5002, 5011, 5030,
      5039, 5048, 2421, 2516, 5056, 5064, 5072, 5081, 5089, 5096,
      5104, 5112, 5121, 5131, 2600, 2694, 5139, 5147, 5155, 2695,
      2757, 5164, 5174, 5194, 2798, 5203, 5211, 2799, 5220, 5230,
      5250, 2228, 2615, 5259, 5271, 5280, 5290, 2803, 2825, 5299,
      5309, 5318, 5338, 2700, 5347, 5359, 2841, 2872, 5368, 5378,
 
      2873, 5387, 5397, 5417, 5438, 5459, 3115, 3116, 5479, 3168,
      5486, 5496, 2951, 2967, 5505, 2520, 5525, 3304, 3313, 5534,
      5544, 3517, 3314, 3318, 5552, 5562, 5582, 3814, 3319, 3430
     } ;      } ;
   
static yyconst short int yy_def[671] =static yyconst short int yy_def[931] =
     {   0,      {   0,
      606,    1,    1,    1,  607,  607,  608,  608,  609,  609,      813,    1,    1,    1,  814,  814,  815,  815,  816,  816,
      610,  610,  606,  611,  606,  606,  606,  606,  612,  613,      817,  817,  813,   13,  813,  818,  813,  813,  813,  813,
      606,  606,  614,  606,  615,  611,   26,   26,  616,  606,      819,  820,  813,  813,  821,  813,  822,  818,   28,   28,
      606,  606,   32,   32,   32,   35,   35,   35,   35,   35,      823,  813,  813,  813,   34,   34,   34,   37,   37,   37,
       35,  611,   26,  611,  606,  612,   32,   32,   35,   35,       37,   37,   37,  818,   28,  818,  813,  819,   34,   34,
       35,  606,  606,  606,  617,  611,  618,  606,  618,  606,       37,   37,   37,  813,  824,  813,  825,   37,   37,  818,
      618,  606,  612,  606,  619,  620,  606,  620,  606,  620,      826,  813,  826,  813,  826,  813,  819,  813,  827,  828,
      606,  621,  622,  622,  622,  606,  606,  611,  611,  606,      813,  828,  813,  828,  813,  829,  830,  830,  830,  813,
      606,  623,  606,  624,  606,  613,  606,  625,  613,  614,      813,  831,  832,  833,  813,   85,   85,   85,  813,   89,
      614,  615,  626,  611,  611,   26,  616,   96,   96,   96,       89,   89,   92,   92,   92,   92,   85,   88,   88,  818,
   
       96,  627,  628,   35,   35,   35,   35,   35,   35,   35,      818,  813,  813,  834,  813,  835,  813,  820,  836,  831,
       35,   35,   35,  611,  606,  611,  606,  606,  606,  606,      820,  821,  821,  822,  837,  818,  818,   28,  838,  118,
      606,  606,  623,  611,   96,  611,  611,  611,  606,  606,      118,  118,  118,  839,  840,   37,  126,  127,  127,  127,
      606,  606,  617,  629,  611,  611,  618,  618,  606,  606,      127,  127,  127,  127,  127,  127,  127,  818,  813,  818,
      606,  624,  606,  619,  620,  620,  606,  606,  620,  620,      818,  813,  813,  813,  813,  813,  813,  834,  818,  118,
      622,  606,  622,  622,  606,  606,  623,  630,  606,  606,      818,  818,  818,  813,  813,  813,  813,  841,  842,  818,
      625,  625,  606,  611,  611,  611,   96,  167,  631,  606,      818,  843,  843,  813,  813,  813,  835,  813,  844,  845,
      632,  606,  104,   35,   35,   35,   35,   35,   35,   35,      845,  813,  813,  845,  845,  830,  813,  830,  830,  813,
       35,   35,   35,   35,  611,  606,  606,  606,  606,  606,      813,  831,  831,  831,  846,  847,   88,  846,  848,  813,
      623,  611,  167,  611,  611,  611,  606,  611,  606,  630,      813,   85,  192,  192,  192,  192,  813,  197,  198,  849,
   
      611,  611,  611,  611,  611,  611,  633,  634,  634,  209,      198,  198,  198,  198,  198,   88,   88,  834,  850,  813,
      635,  634,  636,  172,  606,  215,  215,  606,  215,   35,      813,  818,  212,  212,  118,  215,  851,  813,  852,  813,
       35,   35,   35,   35,   35,   35,   35,   35,   35,   35,      127,  221,  222,  222,  222,  222,  222,  222,  222,  222,
      611,  606,  606,  606,  606,  606,  623,  611,  611,  611,      222,  222,  222,  222,  818,  818,  813,  813,  813,  813,
      611,  611,  611,  611,  606,  637,  637,  247,  637,  638,      813,  834,  818,  215,  818,  818,  818,  813,  818,  813,
      639,  640,  606,  641,  218,  641,  641,  257,  641,  606,      853,  854,  813,   88,  254,  197,  198,  198,  198,  198,
      260,  260,  606,  260,  606,  606,   35,   35,   35,   35,      198,  198,  198,  198,  198,   88,   88,  850,  818,  818,
       35,   35,   35,   35,  611,  606,  606,  606,  623,  611,      212,  212,  212,  818,  855,  856,  856,  277,  857,  856,
      611,  611,  611,  611,  611,  611,  611,  642,  642,  643,      858,  220,  813,  283,  283,  813,  283,  222,  222,  222,
      644,  606,  606,  606,  606,  606,  645,  645,  646,  263,      222,  222,  222,  222,  222,  222,  222,  222,  222,  222,
   
      646,  646,  302,  646,  606,  305,  305,  606,  305,   35,      818,  818,  818,  818,  813,  813,  813,  813,  813,  834,
       35,   35,   35,   35,   35,   35,   35,  611,  606,  606,      818,  818,  818,  818,  813,  813,  853,  853,  813,  254,
      623,  611,  611,  611,  611,  611,  611,  606,  647,  648,      197,  198,  859,  198,  198,  198,  198,  198,  198,   88,
      292,  606,  332,  332,  606,  332,  606,  606,  606,  606,       88,   88,   88,  212,  212,  212,  813,  860,  860,  339,
      606,  606,  649,  649,  650,  308,  650,  650,  348,  650,      860,  861,  862,  863,  813,  864,  286,  864,  813,  349,
      606,  351,  351,  606,  351,   35,   35,  606,  606,   35,      864,  813,  352,  352,  813,  352,  813,  813,  222,  222,
       35,   35,   35,  606,  606,  606,  606,  611,  606,  606,      222,  222,  222,  222,  222,  222,  222,  222,  818,  818,
      623,  611,  611,  611,  611,  611,  611,  611,  611,  606,      818,  818,  818,  813,  813,  813,  834,  818,  818,  818,
      651,  606,  652,  335,  652,  652,  386,  386,  606,  389,      865,  866,  813,   88,  321,  859,  859,  198,  198,  198,
      389,  606,  389,  606,  606,  606,  606,  653,  653,  654,      198,  198,  198,   88,   88,   88,   88,   88,  818,  818,
   
      354,  654,  654,  403,  654,  606,  406,  406,  406,   35,      212,  212,  818,  867,  867,  868,  869,  813,  813,  870,
       35,   35,   35,   35,   35,  611,  606,  606,  623,  611,      871,  813,  872,  872,  873,  355,  873,  813,  418,  873,
      611,  611,  611,  611,  611,  611,  606,  606,  606,  606,      813,  421,  421,  813,  421,  813,  426,  426,  426,  426,
      655,  655,  656,  392,  656,  656,  436,  436,  606,  439,      426,  426,  426,  426,  818,  818,  818,  818,  818,  813,
      439,  606,  439,  606,  606,  606,  606,  606,  606,  657,      813,  874,  818,  818,  818,  813,  813,  875,  875,  813,
      657,  658,  658,  658,  454,  454,   35,   35,   35,   35,      859,  859,  198,  859,  198,  198,  198,  198,   88,   88,
      606,  606,  606,  606,  606,  606,  659,  623,  611,  660,       88,   88,   88,  818,  464,  464,  813,  876,  877,  408,
      661,  611,  611,  611,  611,  611,  611,  606,  606,  606,      813,  471,  471,  813,  471,  813,  813,  878,  878,  813,
      606,  606,  606,  662,  662,  663,  442,  663,  663,  489,      813,  879,  879,  880,  424,  880,  813,  487,  880,  813,
      489,  606,  492,  492,  606,  492,  606,  606,  606,  606,      490,  490,  813,  490,  813,  495,  495,  813,  813,  495,
   
      664,  664,  606,  606,   35,   35,   35,  606,  659,  659,      495,  495,  495,  813,  813,  813,  813,  818,  813,  813,
      606,  623,  611,  660,  660,  660,  660,  606,  660,  661,      881,  818,  818,  818,  882,  883,  813,  884,  884,  884,
      661,  611,  611,  611,  606,  606,  606,  606,  665,  665,      884,  813,  522,  885,  818,  818,  818,  527,  527,  813,
      666,  495,  666,  666,  534,  534,  606,  537,  537,  537,      886,  813,  887,  474,  887,  813,  536,  887,  813,  539,
      606,  606,  606,  606,  606,  606,  606,   35,   35,  606,      539,  813,  539,  888,  889,  813,  813,  890,  890,  891,
      623,  606,  606,  611,  611,  611,  611,  611,  606,  606,      892,  891,  813,  553,  891,  813,  556,  556,  556,  813,
      606,  606,  606,  606,  667,  667,  668,  668,  668,  569,      560,  560,  560,  560,  560,  560,  818,  813,  813,  893,
      569,  606,  606,   35,  669,  611,  611,  611,  606,  606,      818,  818,  818,  813,  813,  894,  894,  813,  895,  895,
      606,  606,  670,  670,  606,  606,  669,  669,  606,  611,      895,  895,  813,  583,  896,  818,  586,  586,  586,  813,
      611,  611,  611,  611,  606,  606,  606,  606,  606,  611,      897,  898,  813,  899,  899,  900,  542,  900,  813,  599,
   
      611,  611,  611,  611,  611,    0,  606,  606,  606,  606,      900,  813,  602,  602,  813,  602,  813,  813,  901,  901,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      813,  813,  902,  902,  903,  903,  813,  617,  903,  560,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      560,  560,  560,  560,  813,  813,  813,  813,  813,  813,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      904,  893,  818,  905,  906,  907,  908,  813,  907,  909,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      909,  909,  909,  818,  818,  818,  646,  646,  818,  813,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      813,  910,  910,  813,  813,  911,  911,  912,  605,  912,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606      813,  661,  912,  813,  664,  664,  813,  664,  913,  914,
       813,  813,  915,  915,  560,  813,  813,  560,  560,  560,
       813,  904,  904,  813,  893,  818,  905,  905,  905,  905,
       916,  905,  917,  917,  813,  813,  907,  907,  813,  813,
 
       909,  909,  909,  646,  646,  646,  918,  919,  813,  813,
       920,  920,  921,  667,  921,  813,  716,  921,  813,  719,
       719,  922,  813,  913,  913,  813,  813,  813,  813,  560,
       560,  813,  893,  813,  813,  923,  924,  813,  909,  909,
       646,  818,  646,  646,  818,  813,  813,  918,  918,  813,
       813,  925,  925,  926,  926,  926,  756,  926,  813,  813,
       560,  927,  813,  813,  923,  923,  813,  909,  646,  646,
       646,  813,  813,  813,  813,  928,  928,  813,  813,  927,
       927,  813,  929,  930,  813,  646,  818,  646,  646,  818,
       813,  813,  813,  813,  813,  813,  813,  929,  929,  813,
 
       818,  818,  818,  813,  813,  813,  818,  818,  818,  813,
       813,  813,    0,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
 
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813
     } ;      } ;
   
static yyconst short int yy_nxt[3732] =static yyconst short int yy_nxt[5675] =
     {   0,      {   0,
       14,   15,   16,   17,   18,   19,   20,   21,   22,   14,       16,   17,   18,   19,   20,   21,   22,   23,   24,   16,
       23,   24,   14,   14,   25,   26,   27,   28,   26,   26,       25,   26,   16,   16,   27,   28,   29,   30,   28,   28,
       26,   26,   26,   29,   30,   31,   14,   32,   33,   33,       28,   28,   28,   28,   28,   31,   32,   33,   16,   34,
       33,   34,   35,   35,   35,   35,   36,   37,   35,   38,       35,   35,   35,   36,   37,   37,   37,   37,   38,   37,
       39,   40,   41,   35,   35,   35,   35,   35,   42,   14,       39,   37,   40,   41,   42,   43,   37,   37,   37,   37,
       43,   43,   43,   43,   43,   43,   14,   14,   14,   14,       37,   44,   16,   45,   45,   45,   45,   45,   45,   16,
       14,   14,   14,   44,   14,   14,   45,   79,   52,  105,       16,   16,   16,   16,   16,   16,   16,   46,   16,   16,
       46,  170,   53,   52,  105,   87,   79,   53,   54,  107,       47,  532,   54,  130,   48,  135,   55,  127,  131,  127,
      172,   55,  129,   54,  116,  105,   55,   74,   16,   75,       54,  127,   56,  534,   55,   57,   78,   18,   79,   80,
       76,  194,  130,   88,   47,   48,   79,  124,   49,  153,       56,  109,  129,   57,  133,   17,   62,   63,  150,   64,
   
       15,   58,   59,  125,   60,   50,  111,   35,   51,   35,       49,   50,  149,  152,   51,   64,  168,  139,  134,   58,
       60,   79,   35,  136,   35,   15,   58,   59,   89,   60,      101,  110,   52,   59,   37,   53,   37,   58,  154,   64,
      143,  115,   60,   61,  154,   60,   74,   16,   75,   76,       65,   59,   37,  105,   37,   17,   62,   63,  155,   64,
       56,   79,  147,  127,   77,   56,  148,   60,   61,   93,      796,   78,   18,   79,   80,   64,   81,  111,   60,  175,
       93,  150,  115,   93,   93,  238,  152,   62,   99,   99,      139,  172,  101,  115,  115,   66,   60,  115,  115,   64,
       99,   99,   99,   99,   99,   99,  146,   87,   79,   79,       65,  140,  142,  178,   17,   18,   19,   71,   67,  173,
      146,   93,   62,   15,   16,   17,  117,   63,  589,  152,      141,  168,  139,   72,   73,   74,  171,  115,  122,  122,
      192,  195,  129,   77,  100,  100,  100,  100,  100,  101,      122,  122,  122,  123,  179,   66,   17,   18,   19,   75,
      143,  115,  130,   78,   94,   98,   98,   98,   98,   98,       67,   81,  143,  144,  171,  242,  145,  101,  101,  180,
       98,   98,   98,   79,  118,  119,  155,  156,  120,  151,      181,  116,  176,  236,  146,  198,  140,  147,   17,   18,
   
      162,   79,   83,  143,  115,  121,  185,  153,  122,  238,       19,   71,   67,  177,   76,  161,  201,   72,   73,   74,
       64,   65,   65,   65,   65,   65,   65,   65,   65,   65,      121,  121,  121,  121,  121,  121,  121,  121,  121,  121,
       65,   65,   65,   65,   65,   65,   65,   65,   15,   16,      101,  796,  177,   75,  179,  249,   68,   69,   69,   69,
       17,  131,   63,   97,   85,   85,   85,   85,   85,   85,       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,       69,   69,   69,   69,   69,   17,   18,   19,   76,   67,
       79,  139,  115,  140,  152,  141,  154,   78,   79,  140,      194,  194,  194,  194,  194,  194,  194,  194,  194,  194,
      191,  141,   85,   85,   85,   85,   85,   85,   85,   85,      195,  195,  195,  195,  195,  196,  206,  100,  119,  100,
      143,  115,  201,  141,  141,   64,   65,   65,   65,   65,      100,  100,  177,  100,  100,  207,  101,  100,  107,  107,
       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,      107,  107,  107,  107,  107,  107,  107,  107,  101,  243,
       65,   65,   65,   15,   16,   17,   67,   63,  141,  193,      235,  100,  100,  100,  101,   68,   69,   69,   69,   69,
   
       79,  152,   68,   69,   70,  606,  196,   79,  134,  134,       69,   69,   69,   69,   69,   69,   69,   69,   69,   69,
       79,  606,  134,  134,   79,  198,   71,  168,  168,  168,       69,   69,   69,   69,   33,   17,   18,   19,   33,   33,
      168,  168,  168,  606,  155,  156,   79,  231,  159,  382,       82,   23,   24,   33,   83,   26,   33,   33,   84,   85,
      134,  160,  160,  160,  160,  160,  160,  160,  160,  241,       86,   87,   85,   85,   85,   85,   85,   85,   85,   31,
       72,   15,   16,   17,   67,   63,  532,  170,   89,  283,       88,   33,   33,   89,   90,   90,   90,   91,   92,   92,
       68,   69,   70,  135,  162,   86,  214,   86,   86,  267,       92,   92,   93,   92,   94,   92,   95,   92,   96,   92,
      606,   86,   86,  268,   71,   86,  170,  164,  165,  166,       92,   92,   92,   92,   92,   68,   33,   97,   97,   97,
      164,  164,  164,  164,  164,  214,   93,   93,   86,   86,       97,   97,   97,   98,   98,   98,   98,   98,   98,   98,
       93,   93,   79,   79,   79,  240,   83,  238,   72,   83,       98,   99,   98,   98,  105,  218,  101,  796,  109,  168,
      168,  168,  168,  168,  168,  168,  168,  168,   93,   84,      139,  269,  247,  178,  106,  796,  220,  107,  107,  107,
   
       79,  265,   85,   85,   85,   85,   85,   85,   85,   85,      107,  107,  107,  107,  107,  107,  107,  117,  183,  118,
       95,   83,   96,   96,   96,   96,   96,   96,   96,   96,      118,  118,  118,  118,  118,  118,  118,  118,  118,  119,
       97,   94,   83,  266,   98,   98,   98,   98,   98,  168,      101,  180,  181,  120,  120,  120,  120,  120,  101,  101,
      168,  168,  168,  168,  168,  168,  168,   85,   85,   85,      357,  159,  159,  246,  184,  159,  159,  216,  216,  216,
       85,   85,   85,   85,   85,   79,  551,   98,   98,   98,      216,  216,  216,  177,  245,  101,  154,  120,  120,  120,
       98,   98,   98,   78,  145,   79,  280,  145,  145,   78,      120,  120,  120,  100,  358,  159,  155,  127,  101,  100,
      382,  237,   78,   78,  145,   78,   78,   78,  104,  104,      313,  563,  100,  100,  101,  100,  100,  100,  126,  126,
      104,  104,  104,  104,  104,  104,   97,  145,  279,   78,      126,  126,  126,  126,  126,  126,  126,  126,  119,  160,
      104,  104,  104,  104,  104,  105,  105,  105,  105,  106,      311,  100,  126,  126,  126,  126,  126,  127,  127,  127,
      105,  105,  105,  105,  105,  105,  105,  105,  105,  105,      127,  128,  127,  127,  127,  127,  127,  127,  127,  127,
   
      105,   79,  105,   98,   98,   98,   98,   98,   98,   78,      127,  127,  127,  127,  101,  127,  120,  120,  120,  120,
       78,   78,   78,   78,   78,   78,   78,   78,   78,  105,      120,  120,  100,  100,  100,  100,  100,  100,  100,  100,
      105,  105,  105,  105,  105,  105,  105,  606,  249,  249,      100,  100,  100,  127,  127,  127,  127,  127,  127,  127,
      249,  105,  105,  105,  105,  105,  177,   79,   79,   79,      127,  127,  127,  813,  218,  796,  105,  127,  127,  127,
      105,  178,  170,  275,  179,  282,  180,  117,  532,  143,      127,  127,  101,  100,  101,  282,  127,  107,  107,  107,
      115,  214,   97,  238,   78,   78,   78,   78,   78,   78,      107,  107,  107,  107,  107,  107,  107,  101,  304,  311,
      114,  115,   78,   78,   78,  170,   78,   78,  134,  134,      372,  100,  100,  100,  100,  100,  100,  138,  139,  100,
       78,  265,  134,  134,  214,  118,  119,   79,   79,  120,      100,  100,  311,  100,  100,  101,  378,  100,  216,  216,
      431,  431,   78,   78,   78,   83,  121,   93,  323,  122,      216,  216,  216,  216,  216,  216,  216,  216,  244,  310,
      134,   93,   79,  266,  281,   84,  146,   93,   85,   85,      813,  100,  100,  100,  100,  101,  120,  120,  120,  120,
   
       85,   85,   85,   85,   85,   85,   79,   79,  373,   93,      120,  120,  120,  120,  120,  120,  105,  164,  139,  165,
       93,  318,  324,  135,  606,  606,  606,  606,  606,  606,      813,  166,  101,  109,  436,  165,  106,  166,  373,  107,
      606,  606,  160,  160,  160,  160,  160,  160,  160,  160,      107,  107,  107,  107,  107,  107,  107,  107,  107,  226,
      160,  160,  160,  160,  160,  160,  160,  160,  484,  484,      101,  166,  166,  813,  227,  311,  111,  218,  228,  170,
      123,   83,  242,  243,  244,  242,  242,  242,  242,  242,      229,  185,  170,  170,  101,  168,  139,  185,  282,  170,
       83,  142,  487,  322,  606,  606,  606,  606,  606,  606,      185,  115,  115,  185,  185,  115,  115,  166,  813,  184,
      606,  606,   78,  559,   78,   78,   78,  170,   78,   78,      782,  371,  168,  139,  170,  148,  105,  187,  360,  185,
      253,  170,   78,  134,   79,   79,  255,  134,  606,  170,      109,  301,  302,  361,  303,  115,  167,  101,  813,  813,
      255,   83,   79,  134,   78,   78,   78,   90,  255,   90,      813,  813,  813,  813,  813,  813,  813,  813,  813,  101,
       90,   90,  372,   90,   90,  134,  134,   90,  247,  247,      813,  314,  188,  185,  115,  101,  532,  115,  115,  116,
   
      248,  249,  249,  249,  249,  249,  211,  253,  170,   90,      115,  115,  115,  115,  184,  101,  115,  115,  108,  714,
       90,   90,   92,  321,   78,   78,   92,  255,   78,   78,      108,  108,  171,  101,  108,  108,  184,  435,  108,  380,
      360,  382,   92,  161,  361,  161,  161,  253,  170,  161,      187,  115,  115,  216,  216,  216,  216,  216,  216,  216,
      161,  384,  371,  161,   92,   92,   78,  167,  167,  167,      216,  216,  216,  108,  108,  107,  107,  107,  107,  107,
      167,  167,  167,  167,  167,  161,  161,  161,  358,  167,      107,  107,  107,  107,  107,  190,  115,  187,  105,  101,
      167,  167,  167,  167,  201,   79,  202,  202,  202,  202,      191,  187,  192,  192,  192,  192,  192,  192,  192,  192,
      202,  202,  219,  219,  219,  219,  219,  219,  219,  219,      192,  192,  119,  187,  357,  357,  193,  193,  193,  193,
      359,  416,  167,  167,  167,  167,  167,  167,  173,  173,      193,  187,  187,  187,  187,  187,  187,  187,  187,  187,
      173,  173,  173,  173,  173,  173,   97,  364,   83,   79,      187,  187,  187,  187,  187,  187,  187,  187,  358,  358,
      173,  173,  173,  173,  173,  257,  257,  257,  257,  257,      193,  193,  193,  193,  193,  193,  187,  187,  187,  187,
   
      257,  257,  257,  258,  258,  258,  258,  258,  259,  365,      187,  187,  187,  187,  187,  187,  187,  813,  377,  187,
      253,  170,   79,  167,  167,  167,  167,  167,  167,  133,      187,  187,  187,  187,  187,  187,  187,  187,  187,  813,
      300,   78,   78,  133,  574,   78,   78,  421,  606,  133,      341,  341,  341,  187,  187,  187,  187,  187,  330,  331,
      256,  256,  256,  256,  256,  256,  256,  256,  606,  170,      112,  332,  112,  112,  112,  394,  112,  112,  395,  437,
      419,  133,  133,   78,  201,  170,  202,  202,  202,  202,      112,  255,  255,  255,  255,  255,  255,  187,  187,  187,
      202,  202,  202,  202,  289,  289,  289,  289,  289,  289,      187,  187,  187,  187,  112,  112,  112,  187,  197,  197,
      289,  289,  211,  294,  295,  296,  294,  294,  294,  294,      197,  197,  197,  197,  197,  197,  197,  197,  119,  187,
      294,  264,  264,  264,  264,  264,  264,  264,  264,   79,      498,  101,  197,  197,  197,  197,  197,  198,  198,  198,
      201,  170,  203,  203,  203,  203,  203,  203,  203,  203,      198,  199,  198,  198,  198,  198,  198,  198,  198,  198,
      253,  170,  298,  298,  298,  298,  298,  298,  467,   83,      198,  198,  198,  198,  499,  200,  193,  193,  193,  193,
   
      255,  302,  302,  302,  302,  302,  302,  302,  302,  303,      193,  193,  187,  187,  187,  187,  187,  187,  187,  187,
      303,  303,  303,  303,  304,   79,  201,  487,  204,  204,      187,  187,  187,  198,  198,  198,  198,  198,  198,  198,
      204,  204,  204,  205,  202,  202,  606,  366,  301,  301,      198,  198,  198,  813,  105,  101,  443,  198,  198,  198,
      301,  301,  301,  301,  301,  301,  606,  170,  325,  326,      198,  198,  260,  218,  159,  159,  198,  261,  159,  159,
      327,  325,  325,  325,  325,  325,  300,  501,  501,  367,      386,  262,  513,  263,  282,  387,  369,  142,  101,  370,
      468,   79,   78,   79,  206,  206,  206,  206,  206,  206,      504,  187,  187,  187,  187,  187,  187,  813,  159,  193,
      206,  206,  368,   79,  170,  170,  206,  206,  206,  206,      193,  193,  193,  193,  193,  193,  193,  193,  193,  114,
      206,   79,  374,  255,  300,  253,  170,  283,   79,  284,      763,  100,  100,  114,  505,  100,  100,  143,  144,  114,
      284,  284,  284,  284,  284,  300,   79,  420,  469,  206,      101,  145,  160,  272,  272,  272,  272,  272,  273,  146,
      206,  206,  206,  206,  206,  208,  209,  210,  210,  210,      438,  442,  147,  114,  114,  100,  212,  213,  214,  212,
   
      210,  210,  210,  211,  253,  170,  434,  212,  212,  212,      212,  212,  212,  212,  212,  212,  813,  813,  813,  813,
      212,  212,   79,  337,  346,  338,  338,  338,  338,  338,      813,  813,  813,  813,  813,  813,  345,  218,  763,  158,
      338,  338,  338,  349,  349,  349,  349,  349,  350,   79,      101,  100,  100,  158,  101,  100,  100,  763,  347,  158,
      212,  212,  212,  212,  212,  212,  170,  215,  216,  217,      399,  444,  101,  215,  215,  215,  215,  215,  215,  215,
      215,  215,  215,  215,  215,  218,  510,  511,  511,  219,      215,  215,  215,  158,  158,  100,  506,  215,  215,  215,
      219,  219,  219,  219,  337,  375,  339,  339,  339,  339,      215,  215,  251,  252,  253,  251,  251,  251,  251,  251,
      339,  339,  339,  339,  309,  309,  309,  309,  309,  309,      251,  251,  100,  100,  100,  100,  496,  127,  101,  813,
      309,  309,  219,  219,  219,  219,  219,  219,  220,  220,      507,  215,  215,  215,  215,  215,  215,  221,  221,  221,
      220,  220,  220,  220,  220,  220,  606,  170,  550,   79,      221,  221,  221,  221,  221,  221,  221,  119,  119,  498,
      220,  220,  220,  220,  220,  337,  346,  340,  340,  340,      532,  221,  221,  221,  221,  221,  255,  255,  255,  255,
   
      340,  340,  341,  338,  338,  348,  348,  348,  348,  348,      255,  255,  255,  255,  255,  255,  350,  350,  350,  350,
      348,  348,  348,  206,  206,  206,  206,  206,  206,  201,      350,  351,  714,  499,  101,  215,  215,  215,  215,  215,
      549,  202,  202,  202,  202,  202,  202,  202,  202,  253,      215,  127,  127,  127,  127,  127,  127,  127,  127,  127,
      170,  344,  344,  344,  344,  344,  344,  548,  606,  300,      127,  813,  379,  622,  127,  127,  127,  127,  127,  127,
      347,  347,  347,  347,  347,  347,  347,  347,  387,  387,      182,  218,  182,  182,  101,  185,  182,  182,  101,  439,
      387,  387,  387,  388,   79,  201,  170,  202,  202,  202,      182,  185,  282,  445,  185,  813,  218,  185,  185,  100,
      202,  202,  202,  202,  202,  336,  336,  336,  336,  336,      100,  100,  100,  100,  100,  182,  182,  347,  218,  127,
      336,  336,  336,  386,  386,  386,  386,  386,  386,  386,      127,  187,  497,  185,  185,  562,  185,  185,  185,  347,
      386,  394,  395,  396,  394,  394,  394,  394,  394,  358,      185,  185,  498,  659,  185,  255,  255,  255,  255,  255,
       79,  253,  170,  254,  254,  254,  254,  254,  254,  254,      255,  255,  255,  255,  255,  525,  188,  185,  185,  185,
   
      254,  255,  529,  529,  434,  256,  256,  256,  256,  256,      185,  115,  345,  218,  115,  115,  499,  115,  115,  115,
      606,  359,  385,  385,  385,  385,  385,  385,  385,  385,      115,  115,  127,  115,  115,  115,  565,  502,  345,  218,
      337,  384,  338,  338,  338,  338,  338,  338,  256,  256,      127,  115,  345,  218,  127,  504,  500,  187,  115,  115,
      256,  256,  256,  256,  170,  260,  261,  262,  260,  260,      347,  501,  101,  127,  416,  115,  115,  211,  211,  211,
      260,  260,  260,  263,  170,  253,  170,  264,  264,  264,      211,  211,  211,  211,  211,  211,  211,  503,  101,  505,
      264,  264,  337,  300,  338,  338,  338,  338,  338,  338,      127,  198,  190,  115,  254,  254,  254,  254,  254,  254,
      338,  338,  355,  355,  355,  355,  355,  355,  355,  355,      254,  254,  254,  254,  746,  567,  584,  127,  254,  254,
      264,  264,  264,  264,  264,  264,  283,  478,  284,  284,      254,  254,  254,  211,  211,  211,  211,  211,  211,  211,
      284,  284,  284,  284,  284,  284,  337,  364,  338,  338,      211,  211,  211,  315,  105,  316,  316,  316,  316,  316,
      338,  338,  338,  338,  338,  338,  253,  170,  399,  399,      316,  101,  254,  254,  254,  254,  254,  254,  187,  746,
   
      399,  399,  399,  399,  170,  599,  346,  510,  511,  365,      101,  508,  187,  256,  256,  256,  256,  256,  256,  256,
      599,   79,  283,  346,  285,  285,  285,  285,  285,  285,      256,  256,  256,  119,  187,  105,  572,  256,  256,  256,
      285,  285,  403,  403,  403,  403,  403,  403,  403,  403,      256,  256,  198,  198,  198,  198,  198,  198,  198,  198,
      404,  404,  404,  404,  404,  405,  606,  366,  402,  402,      198,  198,  198,  198,  198,  198,  198,  198,  198,  570,
      402,  402,  402,  402,  402,  402,   79,   79,  283,  170,      200,  254,  254,  254,  254,  254,  254,  187,  187,  187,
      286,  286,  286,  286,  286,  287,  284,  284,  346,  367,      187,  187,  187,  187,  187,  187,  187,  187,  198,  198,
      461,  606,  422,  428,  429,  430,  428,  428,  428,  428,      198,  198,  198,  198,  198,  198,  198,  198,  813,  511,
      428,  384,  170,  423,  424,  425,  426,  423,  423,  423,      504,  506,  198,  198,  198,  198,  198,  271,  271,  271,
      423,  401,  462,   79,  253,  170,  298,  298,  298,  298,      271,  271,  271,  271,  271,  271,  271,  419,  419,  419,
      298,  298,  298,  298,  255,  253,  170,  299,  299,  299,      419,  419,  420,  506,  505,  507,  187,  187,  187,  187,
   
      299,  299,  299,  299,  299,  300,   79,  463,  503,  301,      187,  187,  269,  746,  270,  270,  270,  270,  270,  270,
      301,  301,  301,  301,  375,  376,  376,  376,  376,  376,      270,  270,  270,  270,  159,  520,  763,  507,  159,  101,
      376,  393,  393,  393,  393,  393,  393,  393,  393,  464,      521,  621,  763,  127,  159,  287,  287,  287,  287,  287,
      504,  508,  301,  301,  301,  301,  301,  301,  170,  305,      287,  287,  287,  287,  287,  127,  573,  218,  159,  159,
      306,  307,  305,  305,  305,  305,  305,  308,   79,  565,      101,  100,  101,  274,  274,  274,  274,  274,  274,  274,
      565,  309,  309,  309,  309,  309,  436,  436,  436,  436,      274,  274,  274,  512,  624,  627,  127,  274,  274,  274,
      436,  436,  436,  436,  437,  437,  437,  437,  437,  438,      274,  274,  349,  349,  349,  349,  349,  349,  349,  349,
      507,  253,  170,  506,  309,  309,  309,  309,  309,  309,      349,  349,  488,  488,  488,  488,  488,  489,  101,  628,
      283,  346,  284,  284,  284,  284,  284,  284,  284,  284,      633,  274,  274,  274,  274,  274,  274,  276,  277,  278,
      606,  382,  435,  435,  435,  435,  435,  435,  435,  435,      278,  278,  278,  278,  278,  278,  278,  279,  649,  649,
   
      444,  384,  445,  445,  445,  445,  445,  445,  445,  445,      649,  280,  280,  280,  280,  280,  381,  382,  383,  381,
      505,  472,  575,   83,   83,   79,  283,  382,  284,  284,      381,  381,  381,  381,  381,  381,  446,  218,  447,  447,
      284,  284,  284,  284,  284,  284,  444,  434,  446,  446,      447,  447,  447,  447,  218,  280,  280,  280,  280,  280,
      446,  446,  446,  446,  446,  446,  444,  606,  447,  447,      280,  218,  283,  284,  285,  283,  283,  283,  283,  283,
      447,  447,  447,  448,  445,  445,   79,  434,  461,  583,      283,  283,  286,  625,  813,  218,  287,  287,  287,  287,
      583,   79,  332,  333,  334,  332,  332,  332,  332,  332,      287,  410,  411,  412,  410,  410,  410,  410,  410,  410,
      335,  253,  170,  444,  336,  336,  336,  336,  336,  512,      410,  528,  528,  528,  528,  528,  529,  626,  679,  127,
      462,  401,  409,  409,  409,  409,  409,  409,  409,  409,      287,  287,  287,  287,  287,  287,  288,  288,  288,  288,
      455,  455,  455,  455,  455,  456,  384,  336,  336,  336,      288,  288,  288,  288,  288,  288,  119,  627,  625,  127,
      336,  336,  336,  253,  170,  344,  344,  344,  344,  344,      288,  288,  288,  288,  288,  356,  356,  356,  356,  356,
   
      344,  344,  344,  300,  253,  170,  345,  345,  345,  345,      356,  356,  356,  356,  356,  537,  537,  537,  537,  537,
      345,  345,  345,  345,  346,  606,  170,  463,  347,  347,      538,  628,  626,  218,  274,  274,  274,  274,  274,  274,
      347,  347,  347,   79,  472,  401,  253,  170,  451,  451,      127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
      451,  451,  451,  451,  331,  503,  401,   79,  513,  464,      813,  683,  684,  127,  127,  127,  127,  127,  127,  345,
      466,  347,  347,  347,  347,  347,  347,  170,  351,  352,      218,  414,  414,  414,  414,  414,  414,  678,  659,  127,
      353,  351,  351,  351,  351,  351,  354,  504,  465,   79,      399,  347,  400,  400,  400,  400,  400,  400,  100,  100,
      355,  355,  355,  355,  355,  454,  454,  454,  454,  454,      100,  100,  100,  100,  315,  627,  318,  318,  318,  318,
      454,  454,  454,  606,   79,  453,  453,  453,  453,  453,      318,  319,  316,  316,  316,  316,  320,  320,  320,  320,
      453,  453,  453,  355,  355,  355,  355,  355,  355,  375,      320,  320,  320,  320,  320,  320,  119,  597,  101,  628,
      376,  376,  376,  376,  376,  376,  376,  376,  470,  478,      320,  320,  320,  320,  320,  418,  418,  418,  418,  418,
   
      546,  479,  479,  479,  479,  479,  479,  479,  479,  443,      418,  418,  418,  418,  418,  476,  746,  477,  477,  477,
      443,  443,  443,  443,  443,  443,  443,  460,  470,  459,      477,  477,  477,  746,  320,  320,  320,  320,  320,  320,
      470,  471,  547,   79,  375,  377,  377,  377,  377,  377,      321,  321,  321,  321,  321,  321,  321,  321,  321,  321,
      377,  377,  377,  478,  470,  480,  480,  480,  480,  480,      100,  100,  100,  100,  321,  321,  321,  321,  321,  425,
      480,  480,  480,   79,  478,  382,  481,  481,  481,  481,      425,  425,  425,  425,  425,  425,  425,  425,  425,  554,
      481,  482,  479,  479,  470,  434,  470,  470,   79,  375,      554,  554,  554,  554,  555,  345,  218,  695,  320,  320,
      378,  378,  378,  378,  378,  379,  376,  376,  489,  489,      320,  320,  320,  320,  334,  335,  336,  334,  334,  334,
      489,  489,  489,  489,  489,  489,  490,  490,  490,  490,      334,  334,  334,  334,  813,  218,  345,  218,  483,  483,
      490,  491,  606,  170,  488,  488,  488,  488,  488,  488,      483,  483,  483,  483,  731,  127,  416,  813,  416,  487,
      488,  488,  401,   79,  382,  382,  383,  383,  383,  383,      487,  487,  487,  487,  487,  487,  487,  487,  487,  534,
   
      383,  383,  383,  383,  384,  487,  588,  589,  385,  385,      101,  339,  339,  340,  341,  341,  341,  341,  341,  341,
      385,  385,  385,  497,  498,  499,  497,  497,  497,  497,      341,  279,  345,  218,  346,  346,  346,  346,  346,  346,
      497,  444,  458,  445,  445,  445,  445,  445,  445,  445,      346,  346,  346,  346,  347,  101,  683,  684,  348,  348,
      445,  385,  385,  385,  385,  385,  385,  389,  390,  391,      348,  348,  348,  631,  105,  514,  515,  516,  517,  515,
      389,  389,  389,  389,  389,  392,  588,  589,  457,  393,      515,  515,  515,  515,  515,  515,  600,  600,  600,  600,
      393,  393,  393,  393,  444,  606,  445,  445,  445,  445,      600,  601,  348,  348,  348,  348,  348,  348,  218,  352,
      445,  445,  445,  445,  444,  487,  445,  445,  445,  445,      353,  354,  352,  352,  352,  352,  352,  352,  352,  355,
      445,  445,  393,  393,  393,  393,  393,  393,  253,  170,      730,  695,  127,  356,  356,  356,  356,  356,  527,  527,
      399,  399,  399,  399,  399,  399,  399,  399,  346,  253,      527,  527,  527,  527,  527,  527,  527,  527,  632,  623,
      170,  400,  400,  400,  400,  400,  400,  400,  400,  401,      695,  680,  675,  218,  127,  127,  127,  356,  356,  356,
   
      253,  170,  331,  402,  402,  402,  402,  402,  554,  515,      356,  356,  356,  813,  347,  348,  348,  348,  348,  348,
      401,  516,  517,  518,  515,  382,  516,  517,  518,  535,      348,  348,  348,  348,  348,  384,  384,  384,  384,  384,
      535,  535,  535,  535,  536,  487,  402,  402,  402,  402,      384,  384,  384,  384,  384,  695,  676,  676,  813,  384,
      402,  402,  170,  406,  407,  408,  406,  406,  406,  406,      384,  384,  384,  384,  475,  475,  475,  475,  475,  475,
      406,  382,  606,   79,  382,  409,  409,  409,  409,  409,      475,  475,  475,  475,  618,  618,  618,  618,  618,  619,
      251,  532,  532,  418,  532,  417,  519,  415,  590,  414,      677,  677,  813,  384,  384,  384,  384,  384,  384,  385,
      472,  521,  473,  473,  473,  473,  473,  473,  409,  409,      385,  385,  385,  385,  385,  385,  385,  385,  385,  703,
      409,  409,  409,  409,  375,  376,  376,  376,  376,  376,      634,  694,  127,  385,  385,  385,  385,  385,  536,  536,
      376,  376,  376,  546,  572,  522,  523,  524,  522,  522,      536,  536,  536,  536,  536,  536,  536,  536,  100,  100,
      522,  522,  522,   79,  413,   79,  525,  526,  527,  525,      100,  100,  634,  218,  634,  634,  734,  384,  384,  384,
   
      525,  525,  525,  525,  412,  547,  573,  411,   79,  375,      384,  384,  384,  399,  416,  400,  400,  400,  400,  400,
      376,  376,  376,  376,  376,  376,  376,  376,   79,  478,      400,  400,  400,  400,  400,  399,  532,  401,  401,  401,
      572,  479,  479,  479,  479,  479,  479,  479,  479,  478,      401,  401,  401,  401,  401,  401,  401,  399,  534,  402,
      410,  479,  479,  479,  479,  479,  479,  479,  479,  144,      402,  402,  402,  402,  403,  400,  400,  400,  400,  405,
      144,  337,  573,   79,  382,  585,  432,  432,  432,  432,      405,  405,  405,  405,  405,  405,  405,  405,  405,  279,
      432,  432,  432,  432,  384,  382,  331,  433,  433,  433,      345,  218,  414,  414,  414,  414,  414,  414,  414,  414,
      433,  433,  433,  433,  433,  434,  251,  586,  585,  435,      414,  414,  347,  634,  105,  101,  413,  413,  413,  413,
      435,  435,  435,  435,  478,  211,  479,  479,  479,  479,      413,  544,  545,  546,  544,  544,  544,  544,  544,  544,
      479,  479,  496,  496,  496,  496,  496,  496,  496,  496,      544,  686,  761,  107,  127,  634,  107,  634,  635,  644,
      586,  370,  435,  435,  435,  435,  435,  435,  439,  440,      413,  413,  413,  413,  413,  413,  345,  218,  415,  415,
   
      441,  439,  439,  439,  439,  439,  442,  369,  363,  362,      415,  415,  415,  415,  415,  415,  415,  415,  416,  345,
      443,  443,  443,  443,  443,  534,  534,  534,  534,  534,      218,  101,  417,  417,  417,  417,  417,  345,  218,  813,
      534,  534,  534,  606,  357,  533,  533,  533,  533,  533,      218,  416,  127,  127,  127,  762,  105,  101,  733,  485,
      533,  533,  533,  443,  443,  443,  443,  443,  443,  253,      676,  485,  561,  564,  101,  566,  417,  417,  417,  417,
      170,  451,  451,  451,  451,  451,  451,  451,  451,  401,      417,  417,  218,  421,  422,  423,  421,  421,  421,  421,
      253,  170,  452,  452,  452,  452,  452,  452,  452,  452,      421,  421,  421,  424,  677,  684,  813,  425,  425,  425,
      356,  331,  251,  211,  453,  453,  453,  453,  453,  170,      425,  425,  494,  494,  494,  494,  494,  494,  494,  494,
      541,  541,  541,  541,  541,  541,  541,  541,  170,  542,      494,  494,  662,  662,  662,  662,  662,  663,  101,  105,
      542,  542,  542,  542,  542,  542,  542,  453,  453,  453,      813,  425,  425,  425,  425,  425,  425,  813,  571,  417,
      453,  453,  453,  472,  211,  473,  473,  473,  473,  473,      417,  417,  417,  417,  417,  417,  417,  417,  417,  446,
   
      473,  473,  473,  170,  543,  543,  543,  543,  543,  544,      701,  449,  449,  449,  449,  449,  450,  447,  447,  447,
      541,  541,  606,  276,  606,  606,  606,  320,  319,  515,      447,  384,  384,  384,  384,  384,  384,  384,  384,  384,
      317,  516,  517,  518,  316,  315,  314,  313,   79,  472,      384,  781,  782,  781,  782,  384,  384,  384,  384,  384,
      312,  474,  474,  474,  474,  474,  474,  474,  474,  606,      345,  218,  549,  549,  549,  549,  549,  549,  685,  575,
      311,  516,  517,  518,  606,  310,  606,  606,  518,  292,      575,  607,  485,  608,  608,  608,  608,  608,  608,  384,
      606,  251,  606,  606,  606,  211,  288,  211,  103,  519,      384,  384,  384,  384,  384,  464,  465,  466,  464,  464,
      276,  278,  276,  277,   79,  472,  519,  475,  475,  475,      464,  464,  464,  464,  464,  553,  553,  553,  553,  553,
      475,  475,  476,  477,  477,  552,  276,  274,  553,  553,      553,  553,  553,  553,  553,  591,  592,  593,  591,  591,
      553,  553,  553,  553,  553,  553,  519,  273,  272,  271,      591,  591,  591,  591,  591,  695,  732,  700,  700,  700,
      270,  519,  269,   97,  211,  514,  514,  521,  251,  514,      644,  101,  399,  532,  400,  400,  400,  400,  400,  400,
   
       79,  472,  211,  477,  477,  477,  473,  473,  473,  473,      400,  400,  400,  400,  399,  597,  400,  400,  400,  400,
      473,  514,  514,  514,  520,  520,  103,  559,  520,  560,      400,  400,  400,  400,  400,  400,  471,  472,  473,  471,
      560,  560,  560,  560,  560,  560,  560,   83,  199,  239,      471,  471,  471,  471,  471,  471,  474,  728,  101,  728,
      520,  520,  520,  236,  235,  234,   79,  382,  233,  485,      475,  475,  475,  475,  475,  543,  543,  543,  543,  543,
      485,  485,  485,  485,  485,  485,  485,  434,  382,  232,      543,  543,  543,  543,  543,  127,  211,  741,  786,  211,
      486,  486,  486,  486,  486,  486,  486,  486,  487,  230,      218,  729,  218,  729,  475,  475,  475,  475,  475,  475,
      229,  228,  488,  488,  488,  488,  488,  559,  227,  561,      476,  416,  479,  479,  479,  479,  479,  480,  477,  477,
      561,  561,  561,  561,  561,  561,  561,  540,  540,  540,      477,  477,  345,  218,  483,  483,  483,  483,  483,  483,
      540,  540,  540,  540,  540,  488,  488,  488,  488,  488,      483,  483,  483,  483,  416,  101,  101,  218,  482,  482,
      488,  492,  493,  494,  492,  492,  492,  492,  492,  495,      482,  482,  482,  532,  813,  595,  595,  595,  595,  595,
   
      226,  225,  224,  496,  496,  496,  496,  496,  559,  223,      595,  169,  169,  169,  218,  534,  597,  688,  759,  689,
      562,  562,  562,  562,  562,  563,  560,  560,  569,  569,      690,  691,  482,  482,  482,  482,  482,  482,  345,  218,
      569,  569,  569,  569,  569,  569,  496,  496,  496,  496,      484,  484,  484,  484,  484,  484,  484,  484,  484,  484,
      496,  496,  253,  170,  502,  502,  502,  502,  502,  502,      485,  316,  760,  316,  486,  486,  486,  486,  486,  599,
      502,  502,  472,  222,  473,  473,  473,  473,  473,  473,      599,  599,  599,  599,  599,  599,  599,  599,  599,  574,
      473,  473,  570,  570,  570,  570,  570,  571,  606,  221,      575,  575,  575,  575,  575,  575,  597,  692,  486,  486,
      568,  568,  568,  568,  568,  568,  568,  568,  170,  541,      486,  486,  486,  486,  218,  490,  491,  492,  490,  490,
      541,  541,  541,  541,  541,  541,  541,   79,  472,  103,      490,  490,  490,  490,  490,  493,  218,  345,  218,  494,
      473,  473,  473,  473,  473,  473,  473,  473,  170,  541,      494,  494,  494,  494,  345,  218,  218,  485,  218,  485,
      541,  541,  541,  541,  541,  541,  541,  170,  541,  541,      813,  218,  169,  169,  169,  534,  551,  485,  532,  551,
   
      541,  541,  541,  541,  553,  553,  553,  553,  553,  553,      759,  813,  551,  494,  494,  494,  494,  494,  494,  813,
      553,  553,   95,   79,  382,   83,  530,  530,  530,  530,      597,  486,  486,  486,  486,  486,  486,  486,  486,  486,
      530,  530,  530,  530,  487,  382,   83,  531,  531,  531,      486,  100,  650,  778,  760,  813,  317,  100,  317,  735,
      531,  531,  531,  531,  531,  532,  199,  151,  152,  533,      100,  100,  735,  100,  100,  100,  127,  127,  127,  127,
      533,  533,  533,  533,  553,  553,  553,  553,  553,  553,      127,  127,  127,  127,  127,  127,  702,  779,  650,  100,
      553,  553,  576,  577,  578,  576,  576,  576,  576,  576,      127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
      146,  146,  533,  533,  533,  533,  533,  533,  537,  538,      127,  127,  127,  127,  495,  127,  127,  127,  127,  127,
      539,  537,  537,  537,  537,  537,  138,  197,  132,  132,      127,  127,  101,  127,  100,  100,  100,  100,  100,  100,
      540,  540,  540,  540,  540,   79,  554,  190,  555,  555,      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
      555,  555,  555,  555,  579,  580,  581,  579,  579,  579,      100,  525,  526,  526,  526,  526,  526,  526,  526,  526,
   
      579,  579,  189,  540,  540,  540,  540,  540,  540,  554,      526,  526,  345,  218,  614,  614,  614,  614,  614,  614,
      188,  555,  555,  555,  555,  555,  555,  555,  555,  187,      447,  650,  447,  532,  551,  617,  617,  617,  617,  617,
      559,   79,  560,  560,  560,  560,  560,  560,  560,  560,      617,  617,  617,  617,  617,  659,  576,  576,  101,  532,
      559,  186,  560,  560,  560,  560,  560,  560,  560,  560,      813,  533,  533,  533,  533,  533,  533,  533,  533,  533,
      184,  183,  182,  181,   79,  554,  176,  556,  556,  556,      533,  534,  659,  695,  813,  535,  535,  535,  535,  535,
      556,  556,  556,  556,  556,  559,  175,  560,  560,  560,      636,  637,  638,  639,  636,  636,  636,  636,  636,  636,
      560,  560,  560,  382,  174,  584,  584,  584,  584,  584,      345,  218,  674,  674,  674,  674,  674,  674,  813,  535,
      584,  584,  584,  595,  595,  595,  595,  595,  595,  103,      535,  535,  535,  535,  535,  539,  540,  541,  539,  539,
       79,  554,   78,  557,  557,  557,  557,  557,  558,  555,      539,  539,  539,  539,  539,  542,  778,  695,  739,  543,
      555,  595,  595,  595,  595,  595,  595,  595,  595,  596,      543,  543,  543,  543,  646,  646,  646,  646,  646,  646,
   
      596,  596,  596,  596,  596,  596,  596,  597,  597,  597,      646,  646,  646,  646,  448,  477,  448,  477,  345,  218,
      597,  597,  598,  595,  595,  103,   79,  382,  163,  566,      779,  575,  575,  543,  543,  543,  543,  543,  543,  813,
      566,  566,  566,  566,  566,  566,  566,  532,  382,   91,      551,  535,  535,  535,  535,  535,  535,  535,  535,  535,
      567,  567,  567,  567,  567,  567,  567,  567,   83,   81,      535,  345,  218,  549,  549,  549,  549,  549,  549,  549,
       80,   79,  568,  568,  568,  568,  568,  152,  600,  601,      549,  549,  549,  485,  728,  681,  813,  548,  548,  548,
      602,  600,  600,  600,  600,  600,  590,  146,  591,  591,      548,  548,  647,  647,  647,  647,  647,  648,  649,  649,
      591,  591,  591,  591,  138,  568,  568,  568,  568,  568,      649,  649,  688,  607,  689,  690,  691,  478,  729,  478,
      568,  554,  132,  555,  555,  555,  555,  555,  555,  555,      813,  548,  548,  548,  548,  548,  548,  345,  218,  550,
      555,   79,  595,  595,  595,  595,  595,  595,  595,  595,      550,  550,  550,  550,  550,  550,  550,  550,  550,  551,
      128,   79,  595,  595,  595,  595,  595,  595,  595,  595,      127,  740,  813,  552,  552,  552,  552,  552,  606,  606,
   
      126,  113,  112,  111,  110,  109,   79,  554,  108,  555,      606,  606,  606,  606,  606,  606,  606,  606,  447,  477,
      555,  555,  555,  555,  555,  555,  555,  105,  103,   91,      447,  477,  694,  608,  607,  608,  813,  552,  552,  552,
      603,  603,  603,  603,  603,  603,  603,  603,  600,  600,      552,  552,  552,  218,  556,  557,  558,  556,  556,  556,
      600,  600,  600,  600,  600,  600,   81,   80,   79,  606,      556,  556,  556,  556,  607,  609,  768,  609,  559,  559,
      606,  606,   79,  590,  606,  591,  591,  591,  591,  591,      559,  559,  559,  532,  534,  657,  657,  657,  657,  657,
      591,  591,  591,   79,  606,  606,  606,  606,  606,  606,      657,  651,  650,  651,  650,  597,  651,  651,  651,  651,
      606,   79,  604,  604,  604,  604,  604,  605,  603,  603,      651,  651,  559,  559,  559,  559,  559,  559,  813,  532,
      603,  603,  603,  603,  603,  603,  603,  603,   79,  590,      552,  552,  552,  552,  552,  552,  552,  552,  552,  552,
      606,  592,  592,  592,  592,  592,  592,  592,  592,  606,      100,  659,  652,  608,  652,  608,  100,  687,  687,  100,
      606,  606,  606,  606,  606,   79,  603,  603,  603,  603,      100,  687,  100,  100,  100,  127,  127,  127,  127,  127,
   
      603,  603,  606,   79,  606,  606,  606,  606,  606,  606,      127,  127,  127,  127,  127,  687,  687,  687,  100,  127,
      606,  606,  606,  606,   79,  590,  606,  593,  593,  593,      127,  127,  127,  127,  127,  127,  560,  127,  127,  127,
      593,  593,  594,  591,  591,  606,  606,  606,  606,   79,      127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      127,  101,  127,  100,  100,  100,  100,  100,  100,  100,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
       79,  590,  606,  591,  591,  591,  591,  591,  591,  591,      574,  577,  577,  577,  577,  577,  578,  575,  575,  575,
      591,  606,  606,  606,  606,  606,  606,  606,  606,  606,      575,  187,  723,  723,  532,  187,  198,  198,  198,  198,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      198,  198,  198,  198,  198,  198,  714,  187,  724,  724,
      606,  606,  606,  606,  606,  606,   79,  590,  606,  591,      198,  198,  198,  583,  198,  198,  198,  198,  198,  198,
      591,  591,  591,  591,  591,  591,  591,  606,  606,  606,      198,  198,  198,  198,  198,  198,  198,  198,  198,  198,
   
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      198,  198,  650,  200,  187,  187,  187,  187,  187,  187,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
      606,  606,   79,   57,   57,   57,   57,   57,   57,   57,      187,  586,  587,  588,  589,  586,  586,  586,  586,  586,
       57,   57,   57,   57,   57,   57,   57,   57,   57,   31,      586,  661,  661,  661,  661,  661,  661,  661,  661,  661,
       31,   31,   31,   31,   31,   31,   31,   31,   31,   31,      661,  669,  670,  671,  669,  669,  669,  669,  669,  669,
       31,   31,   31,   31,   31,   66,   66,   66,   66,   66,      669,  717,  717,  717,  717,  717,  718,  101,  525,  526,
       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,      526,  526,  526,  526,  526,  526,  526,  526,  526,  707,
       66,   73,   73,   73,   73,   73,   73,   73,   73,   73,      708,  709,  707,  707,  707,  707,  707,  707,  707,  668,
       73,   73,   73,   73,   73,   73,   73,   78,  606,  606,      668,  668,  668,  668,  668,  668,  668,  668,  668,  757,
      606,  606,  606,  606,  606,   78,   78,   78,  606,  606,      757,  757,  757,  757,  758,  101,  532,  813,  595,  595,
   
       78,   78,   78,   82,   82,   82,   82,   82,   82,   82,      595,  595,  595,  595,  595,  595,  595,  595,  534,  714,
       82,   82,   82,   82,   82,   82,   82,   82,   82,   86,      470,  643,  594,  594,  594,  594,  594,  532,  532,  712,
      606,  606,  606,  606,   86,  606,  606,   86,   86,   86,      712,  712,  712,  712,  712,  696,  697,  696,  697,  659,
       86,  606,   86,   86,   86,   90,  606,  606,  606,  606,      714,  813,  218,  813,  813,  813,  594,  594,  594,  594,
      606,  606,  606,   90,   90,   90,  606,  606,   90,   90,      594,  594,  532,  551,  596,  596,  596,  596,  596,  596,
       90,   92,  606,  606,   92,   92,  606,   92,  606,   92,      596,  596,  596,  596,  597,  759,  642,  641,  598,  598,
       92,   92,  606,  606,   92,   92,   92,  102,  102,  606,      598,  598,  598,  716,  716,  716,  716,  716,  716,  716,
      606,  606,  102,  133,  606,  606,  133,  133,  606,  133,      716,  716,  716,  688,  640,  689,  690,  691,  651,  760,
      606,  133,  133,  133,  606,  606,  133,  133,  133,  137,      651,  692,  598,  598,  598,  598,  598,  598,  602,  603,
      606,  606,  137,  137,  606,  137,  606,  137,  137,  137,      604,  602,  602,  602,  602,  602,  602,  602,  605,  574,
   
      606,  137,  606,  137,  137,  145,  606,  606,  145,  606,      574,  127,  606,  606,  606,  606,  606,  736,  737,  738,
      606,  145,  606,  145,  145,  145,  145,  606,  145,  145,      736,  736,  736,  736,  736,  736,  736,  791,  791,  791,
      145,  149,  149,  149,  149,  149,  149,  149,  149,  149,      791,  791,  791,  692,  574,  101,  606,  606,  606,  606,
      149,  149,  149,  149,  149,  149,  149,  151,  151,  606,      606,  606,  813,  630,  598,  598,  598,  598,  598,  598,
      151,  606,  151,  151,  151,  151,  151,  151,  151,  151,      598,  598,  598,  598,  607,  629,  610,  610,  610,  610,
      151,  151,  151,  157,  157,  157,  157,  157,  157,  157,      610,  611,  608,  608,  608,  608,  345,  218,  614,  614,
      157,  157,  157,  157,  157,  157,  157,  157,  157,  158,      614,  614,  614,  614,  614,  614,  614,  614,  551,  101,
      158,  606,  158,  158,  158,  158,  158,  158,  158,  158,      218,  778,  613,  613,  613,  613,  613,  813,  607,  689,
      158,  158,  158,  158,  158,  161,  606,  606,  606,  606,      690,  691,  813,  607,  813,  813,  691,  695,  470,  696,
      161,  606,  606,  161,  161,  161,  606,  606,  161,  161,      696,  696,  696,  696,  696,  779,  613,  613,  613,  613,
   
      161,   93,  606,  606,   93,   93,  606,   93,  606,   93,      613,  613,  345,  218,  615,  615,  615,  615,  615,  615,
       93,   93,  606,  606,   93,   93,   93,  169,  169,  606,      615,  615,  615,  615,  747,  343,  747,  127,  616,  616,
      606,  606,  169,  171,  171,  171,  606,  606,  606,  171,      616,  616,  616,  748,  764,  748,  764,  692,  765,  797,
      134,  606,  606,  134,  134,  606,  134,  606,  134,  134,      765,  797,  692,  218,  723,  723,  723,  723,  723,  723,
      134,  606,  606,  134,  134,  134,  200,  200,  200,  200,      585,  582,  616,  616,  616,  616,  616,  616,  813,  581,
      200,  200,  200,  200,  200,  200,  200,  200,  200,  200,      616,  616,  616,  616,  616,  616,  616,  616,  616,  616,
      200,  200,  207,  207,  606,  606,  606,  207,  213,  213,      100,  693,  580,  693,  693,  693,  100,  693,  693,  100,
      213,  606,  606,  606,  213,  245,  245,  606,  606,  606,      100,  693,  100,  100,  100,  127,  127,  127,  127,  127,
      245,  246,  246,  606,  606,  606,  246,  250,  250,  606,      127,  127,  127,  127,  127,  693,  693,  693,  100,  127,
      606,  606,  250,  252,  252,  252,  606,  606,  606,  252,      127,  127,  127,  127,  127,  127,  127,  127,  127,  127,
   
      288,  288,  606,  606,  606,  288,  290,  290,  606,  606,      127,  127,  127,  127,  127,  127,  127,  620,  127,  127,
      606,  290,  291,  291,  606,  606,  606,  291,  293,  293,      127,  101,  127,  100,  100,  100,  100,  100,  100,  100,
      293,  606,  606,  606,  293,  297,  297,  297,  297,  606,      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
      606,  606,  297,  328,  328,  606,  606,  606,  328,  329,      625,  746,  579,  747,  747,  747,  747,  747,  747,  187,
      329,  606,  606,  606,  329,  330,  330,  606,  606,  606,      798,  574,  798,  187,  198,  198,  198,  198,  198,  198,
      330,  342,  342,  342,  606,  606,  606,  342,  343,  343,      198,  198,  198,  198,  626,  187,  574,  569,  198,  198,
      343,  343,  606,  606,  606,  343,  380,  380,  606,  606,      198,  198,  198,  198,  198,  198,  198,  198,  198,  198,
      606,  380,  381,  381,  606,  606,  606,  381,  397,  397,      198,  198,  198,  198,  198,  198,  198,  198,  198,  198,
      397,  606,  606,  606,  397,  398,  398,  398,  398,  606,      568,  200,  187,  187,  187,  187,  187,  187,  187,  187,
      606,  606,  398,  427,  427,  606,  606,  606,  427,  431,      187,  187,  187,  187,  187,  187,  187,  187,  187,  644,
   
      606,  431,  431,  606,  606,  606,  431,  449,  449,  449,      476,  645,  645,  645,  645,  645,  645,  645,  645,  645,
      606,  606,  606,  449,  450,  450,  450,  450,  606,  606,      645,  722,  722,  722,  722,  722,  722,  722,  722,  722,
      606,  450,  483,  483,  606,  606,  606,  483,  484,  606,      722,  532,  476,  753,  753,  753,  753,  753,  753,  755,
      484,  484,  606,  606,  606,  484,  500,  500,  500,  606,      476,  470,  755,  714,  343,  279,  755,  101,  650,  524,
      606,  606,  500,  501,  501,  501,  606,  606,  606,  606,      653,  653,  653,  653,  653,  654,  651,  651,  651,  651,
      501,  509,  509,  509,  509,  509,  509,  509,  509,  509,      532,  523,  657,  657,  657,  657,  657,  657,  657,  657,
      509,  509,  509,  509,  509,  509,  509,  514,  514,  606,      657,  657,  597,  522,  519,  518,  656,  656,  656,  656,
      514,  514,  514,  606,  606,  514,  514,  514,  606,  606,      656,  756,  756,  756,  756,  756,  756,  756,  756,  756,
      514,  514,  514,  520,  520,  606,  520,  520,  520,  606,      756,  532,  446,  777,  777,  777,  777,  777,  777,  446,
      606,  520,  520,  520,  606,  606,  520,  520,  520,  528,      656,  656,  656,  656,  656,  656,  532,  446,  658,  658,
   
      528,  606,  606,  606,  528,  529,  606,  529,  529,  606,      658,  658,  658,  658,  658,  658,  658,  658,  659,  510,
      606,  606,  529,  545,  545,  606,  606,  606,  606,  545,      509,  101,  660,  660,  660,  660,  660,  735,  735,  735,
      564,  564,  606,  606,  606,  564,  565,  606,  565,  565,      735,  735,  735,  735,  735,  735,  735,  763,  101,  764,
      606,  606,  606,  565,  582,  582,  606,  606,  606,  582,      764,  764,  764,  764,  764,  101,  660,  660,  660,  660,
      583,  606,  583,  606,  606,  606,  606,  583,  587,  587,      660,  660,  664,  665,  666,  664,  664,  664,  664,  664,
      587,  587,  587,  587,  587,  587,  587,  587,  587,  587,      664,  664,  667,  101,  476,  476,  668,  668,  668,  668,
      587,  587,  587,  587,   13,  606,  606,  606,  606,  606,      668,  735,  735,  735,  735,  735,  735,  735,  735,  735,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      735,  470,  741,  343,  742,  742,  742,  742,  742,  742,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      668,  668,  668,  668,  668,  668,  813,  279,  660,  660,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      660,  660,  660,  660,  660,  660,  660,  660,  345,  218,
   
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      674,  674,  674,  674,  674,  674,  674,  674,  674,  674,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      101,  279,  463,  462,  673,  673,  673,  673,  673,  772,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      773,  774,  772,  772,  772,  772,  772,  772,  772,  796,
      606      461,  797,  797,  797,  797,  797,  797,  460,  673,  673,
       673,  673,  673,  673,  695,  459,  698,  698,  698,  698,
       698,  699,  700,  700,  700,  700,  704,  705,  706,  704,
       704,  704,  704,  704,  704,  704,  783,  784,  785,  783,
       783,  783,  783,  783,  783,  783,  791,  791,  791,  791,
       791,  791,  791,  791,  791,  791,  810,  810,  810,  810,
       810,  810,  101,  644,  458,  645,  645,  645,  645,  645,
 
       645,  645,  645,  645,  645,  792,  792,  792,  792,  792,
       792,  792,  792,  792,  792,  793,  793,  793,  793,  793,
       794,  791,  791,  791,  791,  457,  795,  456,  455,  795,
       454,  101,  532,  795,  712,  712,  712,  712,  712,  712,
       712,  712,  712,  712,  659,  453,  452,  451,  711,  711,
       711,  711,  711,  786,  813,  787,  787,  787,  787,  787,
       787,  791,  791,  791,  791,  791,  791,  791,  791,  791,
       791,  446,  711,  711,  711,  711,  711,  711,  532,  446,
       713,  713,  713,  713,  713,  713,  713,  713,  713,  713,
       714,  101,  374,  441,  715,  715,  715,  715,  715,  791,
 
       791,  791,  791,  791,  791,  791,  791,  791,  791,  440,
       434,  433,  432,  431,  430,  429,  428,  427,  715,  715,
       715,  715,  715,  715,  719,  720,  721,  719,  719,  719,
       719,  719,  719,  719,  426,  408,  343,  279,  722,  722,
       722,  722,  722,  804,  805,  806,  804,  804,  804,  804,
       804,  804,  804,  404,  279,  125,  807,  807,  807,  807,
       807,  807,  722,  722,  722,  722,  722,  722,  813,  398,
       715,  715,  715,  715,  715,  715,  715,  715,  715,  715,
       218,  725,  725,  725,  725,  725,  726,  723,  723,  723,
       723,  741,  101,  742,  742,  742,  742,  742,  742,  742,
 
       742,  742,  742,  741,  397,  743,  743,  743,  743,  743,
       743,  743,  743,  743,  743,  741,  396,  744,  744,  744,
       744,  744,  745,  742,  742,  742,  742,  746,  393,  749,
       749,  749,  749,  749,  750,  747,  747,  747,  747,  532,
       392,  753,  753,  753,  753,  753,  753,  753,  753,  753,
       753,  714,  391,  390,  389,  752,  752,  752,  752,  752,
       810,  810,  810,  810,  810,  810,  810,  810,  810,  810,
       388,  315,  315,  315,  374,  376,  374,  375,  374,  752,
       752,  752,  752,  752,  752,  532,  368,  754,  754,  754,
       754,  754,  754,  754,  754,  754,  754,  367,  366,  365,
 
       364,  755,  755,  755,  755,  755,  804,  804,  804,  804,
       804,  804,  804,  804,  804,  804,  363,  362,  359,  119,
       279,  343,  279,  125,  105,  755,  755,  755,  755,  755,
       755,  763,  333,  766,  766,  766,  766,  766,  767,  764,
       764,  764,  764,  100,  329,  769,  770,  771,  769,  769,
       769,  769,  769,  769,  769,  741,  328,  742,  742,  742,
       742,  742,  742,  742,  742,  742,  742,  741,  327,  742,
       742,  742,  742,  742,  742,  742,  742,  742,  742,  532,
       326,  777,  777,  777,  777,  777,  777,  777,  777,  777,
       777,  786,  325,  787,  787,  787,  787,  787,  787,  787,
 
       787,  787,  787,  786,  324,  788,  788,  788,  788,  788,
       788,  788,  788,  788,  788,  786,  323,  789,  789,  789,
       789,  789,  790,  787,  787,  787,  787,  796,  322,  799,
       799,  799,  799,  799,  800,  797,  797,  797,  797,  100,
       191,  801,  802,  803,  801,  801,  801,  801,  801,  801,
       801,  786,  315,  787,  787,  787,  787,  787,  787,  787,
       787,  787,  787,  786,  315,  787,  787,  787,  787,  787,
       787,  787,  787,  787,  787,  807,  807,  807,  807,  807,
       807,  807,  807,  807,  807,  811,  811,  811,  811,  811,
       812,  810,  810,  810,  810,  810,  810,  810,  810,  810,
 
       810,  810,  810,  810,  810,  250,  312,  309,  308,  307,
       306,  101,  801,  801,  801,  801,  801,  801,  801,  801,
       801,  801,  305,  300,  299,  298,  297,  296,  295,  294,
       293,  292,  291,  290,  289,  125,  117,  105,  105,  267,
       266,  265,  264,  259,  258,  257,  813,  188,  101,  808,
       808,  808,  808,  808,  809,  807,  807,  807,  807,  250,
       176,  177,  171,  171,  163,  248,  157,  157,  241,  240,
       239,  238,  237,  234,  233,  232,  231,  230,  225,  224,
       223,  222,  125,  100,  125,  101,  807,  807,  807,  807,
       807,  807,  807,  807,  807,  807,  190,  113,  210,  105,
 
       103,  102,  101,  205,  204,  203,  202,  198,  177,  171,
       163,  133,  131,  157,  156,  153,  151,  137,  136,  135,
       132,  127,  101,   61,   61,   61,   61,   61,   61,   61,
        61,   61,   61,   61,   61,   61,   61,   61,   61,   61,
        61,   61,   61,   61,   33,   33,   33,   33,   33,   33,
        33,   33,   33,   33,   33,   33,   33,   33,   33,   33,
        33,   33,   33,   33,   33,   70,   70,   70,   70,   70,
        70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
        70,   70,   70,   70,   70,   70,   77,   77,   77,   77,
        77,   77,   77,   77,   77,   77,   77,   77,   77,   77,
 
        77,   77,   77,   77,   77,   77,   77,  100,  125,  113,
       103,  102,  101,  813,  100,  813,  100,  100,  100,  100,
       813,  813,  100,  100,  100,  100,  100,  100,  104,  104,
       104,  104,  104,  104,  104,  104,  104,  104,  104,  104,
       104,  104,  104,  104,  104,  104,  104,  104,  104,  108,
       813,  813,  813,  813,  108,  813,  108,  813,  108,  108,
       108,  108,  108,  813,  108,  108,  108,  108,  108,  108,
       112,  813,  813,  813,  813,  813,  813,  112,  813,  112,
       112,  112,  112,  813,  813,  112,  112,  112,  112,  112,
       112,  114,  813,  813,  114,  114,  813,  114,  114,  813,
 
       114,  114,  114,  114,  813,  813,  114,  114,  114,  114,
       114,  114,  124,  124,  813,  124,  813,  813,  813,  124,
       158,  813,  813,  158,  158,  813,  158,  158,  813,  158,
       158,  158,  158,  813,  813,  158,  158,  158,  158,  158,
       158,  162,  813,  813,  162,  162,  813,  162,  162,  813,
       162,  162,  162,  162,  813,  162,  162,  162,  813,  162,
       162,  162,  170,  813,  813,  170,  813,  813,  170,  170,
       813,  170,  170,  170,  170,  170,  813,  170,  170,  170,
       170,  170,  170,  174,  174,  174,  174,  174,  174,  174,
       174,  174,  174,  174,  174,  174,  174,  174,  174,  174,
 
       174,  174,  174,  174,  176,  176,  813,  176,  813,  176,
       176,  176,  176,  176,  176,  176,  176,  176,  176,  176,
       176,  176,  176,  176,  176,  182,  813,  813,  813,  813,
       182,  813,  182,  813,  182,  182,  182,  182,  182,  813,
       182,  182,  182,  182,  182,  182,  186,  813,  813,  813,
       813,  813,  813,  186,  813,  186,  186,  186,  186,  813,
       186,  186,  186,  186,  186,  186,  186,  189,  813,  813,
       189,  189,  813,  189,  189,  813,  189,  189,  189,  189,
       813,  189,  189,  189,  189,  189,  189,  189,  208,  208,
       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
 
       208,  208,  208,  208,  208,  208,  208,  208,  208,  209,
       209,  813,  209,  209,  209,  209,  209,  209,  209,  209,
       209,  209,  209,  209,  209,  209,  209,  209,  209,  209,
       115,  813,  813,  115,  115,  813,  115,  115,  813,  115,
       115,  115,  115,  813,  813,  115,  115,  115,  115,  115,
       115,  124,  124,  813,  124,  813,  813,  813,  124,  217,
       217,  813,  217,  813,  813,  813,  217,  219,  219,  219,
       813,  219,  813,  813,  813,  219,  158,  813,  813,  158,
       158,  813,  158,  158,  813,  158,  158,  158,  158,  813,
       813,  158,  158,  158,  158,  158,  158,  159,  813,  813,
 
       159,  159,  813,  159,  159,  813,  159,  159,  159,  159,
       813,  813,  159,  159,  159,  159,  159,  159,  162,  813,
       813,  162,  162,  813,  162,  162,  813,  162,  162,  162,
       162,  813,  162,  162,  162,  813,  162,  162,  162,  170,
       813,  813,  170,  813,  813,  170,  170,  813,  170,  170,
       170,  170,  170,  813,  170,  170,  170,  170,  170,  170,
       185,  813,  813,  813,  813,  813,  813,  185,  813,  185,
       185,  185,  185,  813,  813,  185,  185,  185,  185,  185,
       185,  186,  813,  813,  813,  813,  813,  813,  186,  813,
       186,  186,  186,  186,  813,  186,  186,  186,  186,  186,
 
       186,  186,  189,  813,  813,  189,  189,  813,  189,  189,
       813,  189,  189,  189,  189,  813,  189,  189,  189,  189,
       189,  189,  189,  200,  813,  813,  200,  200,  813,  200,
       268,  268,  268,  268,  268,  268,  268,  268,  268,  268,
       268,  268,  268,  268,  268,  268,  268,  268,  268,  268,
       268,  275,  275,  813,  275,  813,  813,  813,  275,  281,
       281,  281,  813,  281,  813,  813,  813,  281,  337,  337,
       813,  337,  813,  813,  813,  337,  338,  338,  813,  338,
       813,  813,  813,  338,  342,  342,  813,  342,  813,  813,
       813,  342,  344,  344,  344,  813,  344,  813,  813,  813,
 
       344,  200,  813,  813,  200,  200,  813,  200,  404,  404,
       813,  404,  813,  813,  813,  404,  406,  406,  813,  406,
       813,  813,  813,  406,  407,  407,  813,  407,  813,  813,
       813,  407,  409,  409,  409,  813,  409,  813,  813,  813,
       409,  413,  413,  413,  413,  813,  413,  813,  813,  813,
       413,  467,  467,  813,  467,  813,  813,  813,  467,  468,
       468,  813,  468,  813,  813,  813,  468,  469,  469,  813,
       469,  813,  813,  813,  469,  481,  481,  481,  813,  481,
       813,  813,  813,  481,  482,  482,  482,  482,  813,  482,
       813,  813,  813,  482,  208,  208,  208,  208,  208,  208,
 
       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
       208,  208,  208,  208,  208,  530,  530,  813,  530,  813,
       813,  813,  530,  531,  531,  813,  531,  813,  813,  813,
       531,  547,  547,  547,  813,  547,  813,  813,  813,  547,
       548,  548,  548,  548,  813,  548,  813,  813,  813,  548,
       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
       208,  200,  813,  813,  200,  200,  813,  200,  187,  813,
       813,  813,  187,  187,  813,  187,  187,  187,  813,  813,
       187,  187,  590,  590,  813,  590,  813,  813,  813,  590,
 
       594,  813,  594,  594,  813,  594,  813,  813,  813,  594,
       612,  612,  612,  813,  612,  813,  813,  813,  612,  613,
       613,  613,  613,  813,  613,  813,  813,  813,  613,  559,
       559,  813,  813,  559,  813,  813,  813,  559,  208,  208,
       208,  208,  208,  208,  208,  208,  208,  208,  208,  208,
       208,  208,  208,  208,  208,  208,  208,  208,  208,  200,
       813,  813,  200,  200,  813,  200,  187,  813,  813,  813,
       187,  187,  813,  187,  187,  187,  813,  813,  187,  187,
       655,  655,  813,  655,  813,  813,  813,  655,  656,  813,
       656,  656,  813,  656,  813,  813,  813,  656,  672,  672,
 
       672,  813,  672,  813,  813,  813,  672,  673,  673,  673,
       813,  813,  673,  813,  813,  813,  673,  682,  682,  682,
       682,  682,  682,  682,  682,  682,  682,  682,  682,  682,
       682,  682,  682,  682,  682,  682,  682,  682,  687,  687,
       813,  687,  687,  687,  813,  687,  813,  687,  687,  687,
       687,  813,  813,  687,  687,  687,  687,  687,  687,  693,
       693,  813,  693,  693,  693,  813,  693,  813,  693,  693,
       693,  693,  813,  813,  693,  693,  693,  693,  693,  693,
       200,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  200,  200,  813,  200,  200,  813,  200,  710,  710,
 
       813,  710,  813,  813,  813,  710,  711,  813,  711,  711,
       813,  711,  813,  813,  813,  711,  727,  727,  813,  813,
       727,  813,  813,  813,  727,  693,  813,  813,  813,  813,
       813,  813,  693,  813,  693,  693,  693,  693,  813,  813,
       693,  693,  693,  693,  693,  693,  751,  751,  813,  751,
       813,  813,  813,  751,  752,  813,  752,  752,  813,  752,
       813,  813,  813,  752,  775,  775,  813,  775,  813,  813,
       813,  775,  776,  813,  776,  813,  813,  776,  813,  813,
       813,  776,  780,  780,  780,  780,  780,  780,  780,  780,
       780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
 
       780,  780,  780,   15,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813
     } ;      } ;
   
static yyconst short int yy_chk[3732] =static yyconst short int yy_chk[5675] =
     {   0,      {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
Line 982  static yyconst short int yy_chk[3732] = Line 1293  static yyconst short int yy_chk[3732] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    2,   44,    3,   34,        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        2,  103,    3,    4,   47,   20,  126,    4,    3,   34,        2,  533,    3,   38,    2,   52,    3,   49,   38,   50,
      103,    3,   52,    4,   44,   48,    4,   11,   11,   11,        4,   36,    3,  533,    4,    3,   11,   11,   11,   11,
       11,  126,   52,   20,    2,    2,   56,   47,    2,   74,        4,   22,   36,    4,   40,    5,    5,    5,   50,    5,
   
        5,    5,    5,   48,    5,    2,   50,    3,    2,    3,        2,    2,   49,   52,    2,    5,   68,   68,   40,    3,
        5,  603,    4,   56,    4,    6,    6,    6,   20,    6,      807,   22,    2,    3,    3,    2,    3,    4,   54,    5,
       64,   64,    5,    5,   75,    6,   12,   12,   12,   12,        5,    4,    4,  148,    4,    6,    6,    6,   54,    6,
        3,  196,   68,   50,   11,    4,   70,    6,    6,   25,      799,   12,   12,   12,   12,    6,   11,   22,    3,   76,
       25,   72,   72,   25,   25,  196,   74,    5,   27,   27,       76,   72,   46,   27,   27,    5,    4,   27,   27,    6,
       27,   27,   27,   27,   27,   27,   68,   88,  124,  127,        6,   46,   47,   78,    9,    9,    9,    9,    9,   74,
       70,   25,    6,    7,    7,    7,   45,    7,  587,   75,       46,  164,  164,    9,    9,    9,   72,   27,   30,   30,
      124,  127,  129,   12,   28,   28,   28,   28,   28,   28,       30,   30,   30,   30,   79,    6,    7,    7,    7,    9,
      139,  139,  129,   43,   25,   43,   43,   43,   43,   43,        7,   12,   47,   47,   74,  148,   47,   60,  141,   81,
       43,   43,   43,  194,   45,   45,   77,   77,   45,   77,       81,   27,   81,  141,   47,   91,   60,   47,   10,   10,
   
       88,  116,  123,  114,  114,   45,  116,  153,   45,  194,       10,   10,   10,   78,    9,   60,   91,   10,   10,   10,
        29,   29,   29,   29,   29,   29,   29,   29,   29,   29,
       161,  798,   79,   10,  179,  161,    7,    7,    7,    7,
         7,    7,    7,    7,    7,    7,    7,    7,    7,    7,          7,    7,    7,    7,    7,    7,    7,    7,    7,    7,
        7,    7,    7,    7,    7,    7,    7,    7,    8,    8,        7,    7,    7,    7,    7,    8,    8,    8,   10,    8,
        8,   53,    8,  206,   53,   53,   53,   53,   53,   53,       86,   86,   86,   86,   86,   86,   86,   86,   86,   86,
       53,   53,   84,   84,   84,   84,   84,   84,   84,   84,       87,   87,   87,   87,   87,   87,   99,  101,  274,  101,
      114,   62,   62,   62,  153,   62,  154,  125,  206,   62,      101,  101,  179,  101,  101,   99,  149,  101,  106,  106,
      123,   62,   85,   85,   85,   85,   85,   85,   85,   85,      106,  106,  106,  106,  106,  106,  106,  106,  140,  149,
      143,  143,  202,   62,   62,    8,    8,    8,    8,    8,      140,  101,  101,  101,  274,    8,    8,    8,    8,    8,
 
         8,    8,    8,    8,    8,    8,    8,    8,    8,    8,          8,    8,    8,    8,    8,    8,    8,    8,    8,    8,
        8,    8,    8,    9,    9,    9,    9,    9,   62,  125,        8,    8,    8,    8,   13,   13,   13,   13,   13,   13,
        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
        13,   13,   13,   13,   13,   13,   13,   13,   13,   13,
        13,   13,   13,   13,   21,  125,  153,  797,   82,  168,
       168,  270,  153,  178,   21,  784,  125,   21,   21,   21,
   
      128,  154,    9,    9,    9,   86,  128,  202,   55,   55,       21,   21,   21,   21,   21,   21,   21,   28,   82,   28,
      136,  161,   55,   55,  185,  136,    9,  101,  101,  101,       28,   28,   28,   28,   28,   28,   28,   28,   28,   28,
      101,  101,  101,   86,  155,  155,  198,  185,   87,  584,      152,  180,  180,   28,   28,   28,   28,   28,  151,  270,
       55,   87,   87,   87,   87,   87,   87,   87,   87,  198,      289,   57,   57,  152,   82,   57,   57,  123,  123,  123,
        9,   10,   10,   10,   10,   10,  582,  171,   86,  284,      123,  123,  123,  178,  151,   28,  154,   28,   28,   28,
       10,   10,   10,   55,  161,   89,  171,   89,   89,  222,       28,   28,   28,   34,  289,   57,  154,  500,  246,   34,
      568,   89,   89,  222,   10,   89,  213,   95,   95,   95,      246,  500,   34,   34,  313,   34,   34,   34,   34,   34,
       95,   95,   95,   95,   95,  213,   92,   92,   89,   89,       34,   34,   34,   34,   34,   34,   34,   34,   34,   57,
       92,   92,  192,  195,  284,  195,  512,  192,   10,   19,      313,   34,   34,   34,   34,   34,   34,   34,   34,   34,
       99,   99,   99,   99,   99,   99,   99,   99,   92,   19,       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
   
       95,  221,   19,   19,   19,   19,   19,   19,   19,   19,       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
       26,  191,   26,   26,   26,   26,   26,   26,   26,   26,       34,   34,   34,   34,   34,   34,   34,   34,   34,   34,
       26,   92,  237,  221,   26,   26,   26,   26,   26,  100,       34,   34,   34,   37,   37,   37,   37,   37,   37,   37,
      100,  100,  100,  100,  100,  100,  100,  131,  131,  131,       37,   37,   37,   37,  219,  783,  242,   37,   37,   37,
      131,  131,  131,  131,  131,   26,  512,   26,   26,   26,       37,   37,  245,  150,  236,  219,   37,  107,  107,  107,
       26,   26,   26,   32,  146,  238,  238,  146,  146,   32,      107,  107,  107,  107,  107,  107,  107,  247,  236,  245,
      567,  191,   32,   32,  146,   32,   32,   32,   32,   32,      303,   37,   37,   37,   37,   37,   37,   44,   44,   44,
       32,   32,   32,   32,   32,   32,   32,  146,  237,   32,       44,   44,  247,   44,   44,  311,  311,   44,  121,  121,
       32,   32,   32,   32,   32,   32,   32,   32,   32,   32,      121,  121,  121,  121,  121,  121,  121,  121,  150,  242,
       32,   32,   32,   32,   32,   32,   32,   32,   32,   32,      108,   44,   44,   44,   45,  303,   45,   45,   45,   45,
   
       32,   32,   32,   32,   32,   32,   32,   32,   32,   32,       45,   45,   45,   45,   45,   45,   48,   66,   66,   66,
       32,   32,   32,   32,   32,   32,   32,   32,   32,   35,      108,   66,  304,  110,  370,   66,   48,   66,  304,   48,
       35,   35,   35,   35,   35,   35,   35,   35,  210,  210,       48,   48,   48,   48,   48,   48,   48,   48,   48,  132,
      210,   35,   35,   35,   35,   35,  109,  231,  240,  241,      243,   66,   66,  110,  132,  243,  108,  281,  132,  171,
       35,  109,  252,  231,  109,  241,  109,  117,  565,  150,      132,   83,  171,  171,  370,  138,  138,   83,  281,  171,
      150,  252,  239,  240,   35,   35,   35,   35,   35,   35,       83,  114,  114,   83,   83,  114,  114,   66,  182,  110,
       42,   42,   42,   42,   42,  293,   42,   42,  133,  133,      780,  302,  175,  175,  171,   48,   67,   83,  291,   83,
       42,  265,  133,  133,  293,  117,  117,  239,  281,  117,      183,  235,  235,  291,  235,  114,   67,  249,  182,   67,
      388,  388,   42,   42,   42,   46,  117,  163,  281,  117,       67,   67,   67,   67,   67,   67,   67,   67,   67,  302,
      133,  163,  323,  265,  239,   46,  150,  163,   46,   46,      183,  249,   83,   83,   84,  138,  777,   84,   84,  114,
   
       46,   46,   46,   46,   46,   46,  275,  282,  323,  163,       84,   84,   84,   84,  182,  235,   84,   84,  111,  775,
      163,  275,  282,  133,  142,  142,  142,  142,  142,  142,      111,  111,  175,  314,  111,  111,  183,  369,  111,  314,
      142,  142,  159,  159,  159,  159,  159,  159,  159,  159,       84,   84,   84,  122,  122,  122,  122,  122,  122,  122,
      160,  160,  160,  160,  160,  160,  160,  160,  438,  438,      122,  122,  122,  111,  111,  156,  156,  156,  156,  156,
       46,   63,  201,  201,  201,  201,  201,  201,  201,  201,      156,  156,  156,  156,  156,   84,   84,   85,  310,  369,
      279,   63,  564,  280,   63,   63,   63,   63,   63,   63,       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
       63,   63,   79,  560,   79,   79,   79,  297,   79,   79,       85,   85,   85,   85,  322,  357,   85,   85,   85,   85,
      254,  254,   79,  197,  280,  201,  297,  197,  256,  256,       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
      254,  321,  322,  197,   79,   79,   79,   91,  256,   91,       85,   85,   85,   85,   85,   85,   85,   85,  322,  357,
       91,   91,  322,   91,   91,  197,  197,   91,  209,  209,       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
   
      209,  209,  209,  209,  209,  209,  209,  298,  298,   91,       85,   85,   85,   85,   85,   85,   85,   88,  310,   88,
       91,   91,   94,  279,   94,   94,   94,  298,   94,   94,       88,   88,   88,   88,   88,   88,   88,   88,   88,   88,
      313,  383,   94,  162,  313,  162,  162,  452,  452,  162,      278,  278,  278,   88,   88,   88,   88,   88,  266,  266,
      162,  383,  321,  162,   94,   94,   94,   96,   96,   96,      113,  266,  113,  113,  113,  330,  113,  113,  330,  371,
       96,   96,   96,   96,   96,  162,  162,  162,  312,   96,      113,  196,  196,  196,  196,  196,  196,   88,   88,   88,
       96,   96,   96,   96,  205,  368,  205,  205,  205,  205,       88,   88,   88,   89,  113,  113,  113,   89,   89,   89,
      205,  205,  214,  214,  214,  214,  214,  214,  214,  214,       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
      312,  368,   96,   96,   96,   96,   96,   96,  104,  104,      453,  371,   89,   89,   89,   89,   89,   89,   89,   89,
      104,  104,  104,  104,  104,  104,  104,  316,  371,  205,       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
      104,  104,  104,  104,  104,  216,  216,  216,  216,  216,       89,   89,   89,   89,  453,   89,   89,   89,   89,   89,
   
      216,  216,  216,  217,  217,  217,  217,  217,  217,  316,       89,   89,   89,   89,   89,   89,   89,   89,   89,   89,
      299,  299,  373,  104,  104,  104,  104,  104,  104,  135,       89,   89,   89,   92,   92,   92,   92,   92,   92,   92,
      299,  135,  135,  135,  549,  135,  135,  373,  219,  135,       92,   92,   92,   92,  377,  444,  378,   92,   92,   92,
      219,  219,  219,  219,  219,  219,  219,  219,  453,  453,       92,   92,  203,  344,  158,  158,   92,  203,  158,  158,
      371,  135,  135,  135,  164,  545,  164,  164,  164,  164,      323,  203,  444,  203,  344,  323,  301,  142,  378,  301,
      164,  164,  164,  164,  247,  247,  247,  247,  247,  247,      457,   92,   92,   92,   92,   92,   92,   97,  158,   97,
      247,  247,  247,  253,  253,  253,  253,  253,  253,  253,       97,   97,   97,   97,   97,   97,   97,   97,   97,  116,
      253,  255,  255,  255,  255,  255,  255,  255,  255,  164,      766,  116,  116,  116,  457,  116,  116,  142,  142,  116,
      165,  541,  165,  165,  165,  165,  165,  165,  165,  165,      301,  142,  158,  214,  214,  214,  214,  214,  214,  142,
      259,  259,  259,  259,  259,  259,  259,  259,  419,  419,      372,  377,  142,  116,  116,  116,  117,  117,  117,  117,
   
      259,  261,  261,  261,  261,  261,  261,  261,  261,  262,      117,  117,  117,  117,  117,  117,  167,  167,  167,  167,
      262,  262,  262,  262,  262,  165,  166,  529,  166,  166,      167,  167,  167,  167,  167,  167,  346,  346,  765,  160,
      166,  166,  166,  166,  166,  166,  264,  317,  264,  264,      379,  160,  160,  160,  372,  160,  160,  764,  346,  160,
      264,  264,  264,  264,  264,  264,  301,  301,  283,  283,      400,  379,  117,  118,  118,  118,  118,  118,  118,  118,
      283,  283,  283,  283,  283,  283,  301,  456,  456,  317,      118,  118,  118,  160,  160,  160,  458,  118,  118,  118,
      419,  166,  167,  318,  167,  167,  167,  167,  167,  167,      118,  118,  191,  191,  191,  191,  191,  191,  191,  191,
      167,  167,  318,  324,  342,  343,  167,  167,  167,  167,      191,  191,  273,  273,  273,  273,  427,  427,  400,  755,
      167,  283,  324,  342,  343,  344,  344,  287,  372,  287,      458,  118,  118,  118,  118,  118,  118,  126,  126,  126,
      287,  287,  287,  287,  287,  344,  420,  372,  420,  167,      126,  126,  126,  126,  126,  126,  126,  126,  312,  498,
      167,  167,  167,  167,  167,  170,  170,  170,  170,  170,      754,  126,  126,  126,  126,  126,  194,  194,  194,  194,
   
      170,  170,  170,  170,  345,  345,  528,  170,  170,  170,      194,  194,  194,  194,  194,  194,  285,  285,  285,  285,
      170,  170,  287,  294,  345,  294,  294,  294,  294,  294,      285,  285,  752,  498,  312,  126,  126,  126,  126,  126,
      294,  294,  294,  307,  307,  307,  307,  307,  307,  513,      126,  127,  127,  127,  127,  127,  127,  127,  127,  127,
      170,  170,  170,  170,  170,  170,  172,  172,  172,  172,      127,  127,  312,  562,  562,  127,  127,  127,  127,  127,
      172,  172,  172,  172,  172,  172,  467,  467,  509,  172,      184,  409,  184,  184,  373,  186,  184,  184,  380,  373,
      172,  172,  172,  172,  295,  376,  295,  295,  295,  295,      184,  186,  409,  380,  186,  348,  348,  186,  186,  127,
      295,  295,  295,  295,  300,  300,  300,  300,  300,  300,      127,  127,  127,  127,  127,  184,  184,  348,  413,  497,
      300,  300,  172,  172,  172,  172,  172,  172,  173,  173,      428,  186,  428,  186,  188,  497,  188,  188,  188,  413,
      173,  173,  173,  173,  173,  173,  347,  347,  508,  376,      188,  188,  429,  751,  188,  195,  195,  195,  195,  195,
      173,  173,  173,  173,  173,  296,  347,  296,  296,  296,      195,  195,  195,  195,  195,  526,  186,  186,  188,  188,
   
      296,  296,  296,  296,  296,  306,  306,  306,  306,  306,      188,  189,  615,  615,  189,  189,  429,  189,  189,  189,
      306,  306,  306,  173,  173,  173,  173,  173,  173,  203,      189,  190,  431,  189,  189,  190,  502,  431,  414,  414,
      507,  203,  203,  203,  203,  203,  203,  203,  203,  304,      502,  190,  415,  415,  429,  433,  430,  189,  189,  189,
      304,  304,  304,  304,  304,  304,  304,  506,  309,  304,      414,  430,  526,  430,  415,  190,  190,  210,  210,  210,
      309,  309,  309,  309,  309,  309,  309,  309,  334,  334,      210,  210,  210,  210,  210,  210,  210,  432,  508,  433,
      334,  334,  334,  334,  203,  204,  501,  204,  204,  204,      432,  523,  189,  189,  192,  192,  192,  192,  192,  192,
      204,  204,  204,  204,  204,  331,  331,  331,  331,  331,      192,  192,  192,  192,  749,  508,  523,  433,  192,  192,
      331,  331,  331,  333,  333,  333,  333,  333,  333,  333,      192,  192,  192,  211,  211,  211,  211,  211,  211,  211,
      333,  337,  337,  337,  337,  337,  337,  337,  337,  358,      211,  211,  211,  319,  511,  319,  319,  319,  319,  319,
      204,  215,  215,  215,  215,  215,  215,  215,  215,  215,      319,  439,  192,  192,  192,  192,  192,  192,  197,  748,
   
      215,  215,  491,  491,  484,  215,  215,  215,  215,  215,      513,  439,  197,  197,  197,  197,  197,  197,  197,  197,
      336,  358,  336,  336,  336,  336,  336,  336,  336,  336,      197,  197,  197,  197,  197,  442,  513,  197,  197,  197,
      341,  483,  341,  341,  341,  341,  341,  341,  215,  215,      197,  197,  197,  197,  197,  197,  197,  197,  197,  197,
      215,  215,  215,  215,  218,  218,  218,  218,  218,  218,      197,  197,  197,  197,  197,  197,  197,  197,  197,  511,
      218,  218,  218,  218,  397,  502,  502,  218,  218,  218,      197,  197,  197,  197,  197,  197,  197,  197,  197,  197,
      218,  218,  339,  397,  339,  339,  339,  339,  339,  339,      197,  197,  197,  197,  197,  197,  197,  197,  198,  198,
      339,  339,  346,  346,  346,  346,  346,  346,  346,  346,      198,  198,  198,  198,  198,  198,  198,  198,  198,  442,
      218,  218,  218,  218,  218,  218,  242,  479,  242,  242,      504,  506,  198,  198,  198,  198,  198,  213,  213,  213,
      242,  242,  242,  242,  242,  242,  340,  364,  340,  340,      213,  213,  213,  213,  213,  213,  213,  354,  354,  354,
      340,  340,  340,  340,  340,  340,  350,  350,  350,  350,      354,  354,  354,  434,  504,  506,  198,  198,  198,  198,
   
      350,  350,  350,  350,  398,  670,  350,  510,  510,  364,      198,  198,  212,  747,  212,  212,  212,  212,  212,  212,
      670,  242,  243,  398,  243,  243,  243,  243,  243,  243,      212,  212,  212,  212,  248,  454,  737,  434,  248,  514,
      243,  243,  352,  352,  352,  352,  352,  352,  352,  352,      454,  561,  736,  561,  248,  282,  282,  282,  282,  282,
      353,  353,  353,  353,  353,  353,  355,  366,  355,  355,      282,  282,  282,  282,  282,  434,  514,  727,  248,  248,
      355,  355,  355,  355,  355,  355,  374,  243,  244,  449,      212,  215,  443,  215,  215,  215,  215,  215,  215,  215,
      244,  244,  244,  244,  244,  244,  244,  244,  449,  366,      215,  215,  215,  443,  564,  584,  564,  215,  215,  215,
      414,  385,  374,  382,  382,  382,  382,  382,  382,  382,      215,  215,  284,  284,  284,  284,  284,  284,  284,  284,
      382,  385,  450,  375,  375,  375,  375,  375,  375,  375,      284,  284,  423,  423,  423,  423,  423,  423,  571,  584,
      375,  450,  414,  244,  257,  257,  257,  257,  257,  257,      571,  215,  215,  215,  215,  215,  215,  218,  218,  218,
      257,  257,  257,  257,  257,  260,  260,  260,  260,  260,      218,  218,  218,  218,  218,  218,  218,  218,  589,  589,
   
      260,  260,  260,  260,  260,  260,  375,  415,  457,  260,      589,  218,  218,  218,  218,  218,  315,  315,  315,  315,
      260,  260,  260,  260,  379,  379,  379,  379,  379,  379,      315,  315,  315,  315,  315,  315,  450,  725,  450,  450,
      379,  384,  384,  384,  384,  384,  384,  384,  384,  415,      450,  450,  450,  450,  724,  218,  218,  218,  218,  218,
      457,  465,  260,  260,  260,  260,  260,  260,  263,  263,      218,  220,  220,  220,  220,  220,  220,  220,  220,  220,
      263,  263,  263,  263,  263,  263,  263,  263,  379,  536,      220,  220,  220,  565,  616,  616,  220,  220,  220,  220,
      536,  263,  263,  263,  263,  263,  390,  390,  390,  390,      220,  345,  345,  345,  345,  345,  345,  345,  345,  345,
      390,  390,  390,  390,  391,  391,  391,  391,  391,  391,      345,  466,  466,  466,  466,  466,  466,  565,  623,  623,
      460,  399,  399,  459,  263,  263,  263,  263,  263,  263,      220,  220,  220,  220,  220,  220,  221,  221,  221,  221,
      285,  399,  285,  285,  285,  285,  285,  285,  285,  285,      221,  221,  221,  221,  221,  221,  221,  566,  625,  565,
      393,  432,  393,  393,  393,  393,  393,  393,  393,  393,      221,  221,  221,  221,  221,  347,  347,  347,  347,  347,
   
      394,  432,  394,  394,  394,  394,  394,  394,  394,  394,      347,  347,  347,  347,  347,  473,  473,  473,  473,  473,
      458,  473,  551,  551,  468,  285,  286,  433,  286,  286,      473,  566,  625,  723,  221,  221,  221,  221,  221,  221,
      286,  286,  286,  286,  286,  286,  395,  433,  395,  395,      222,  222,  222,  222,  222,  222,  222,  222,  222,  222,
      395,  395,  395,  395,  395,  395,  396,  435,  396,  396,      222,  631,  631,  566,  222,  222,  222,  222,  222,  351,
      396,  396,  396,  396,  396,  396,  473,  435,  461,  571,      351,  351,  351,  351,  351,  351,  351,  622,  711,  622,
      571,  286,  292,  292,  292,  292,  292,  292,  292,  292,      403,  351,  403,  403,  403,  403,  403,  403,  222,  222,
      292,  400,  400,  445,  292,  292,  292,  292,  292,  468,      222,  222,  222,  222,  253,  627,  253,  253,  253,  253,
      461,  400,  401,  401,  401,  401,  401,  401,  401,  401,      253,  253,  253,  253,  253,  253,  254,  254,  254,  254,
      408,  408,  408,  408,  408,  408,  431,  292,  292,  292,      254,  254,  254,  254,  254,  254,  254,  710,  403,  627,
      292,  292,  292,  302,  302,  302,  302,  302,  302,  302,      254,  254,  254,  254,  254,  353,  353,  353,  353,  353,
   
      302,  302,  302,  302,  305,  305,  305,  305,  305,  305,      353,  353,  353,  353,  353,  480,  708,  480,  480,  480,
      305,  305,  305,  305,  305,  402,  402,  463,  305,  305,      480,  480,  480,  707,  254,  254,  254,  254,  254,  254,
      305,  305,  305,  469,  477,  402,  405,  405,  405,  405,      256,  256,  256,  256,  256,  256,  256,  256,  256,  256,
      405,  405,  405,  405,  427,  503,  405,  422,  469,  463,      529,  529,  529,  529,  256,  256,  256,  256,  256,  416,
      418,  305,  305,  305,  305,  305,  305,  308,  308,  308,      416,  416,  416,  416,  416,  416,  416,  416,  416,  492,
      308,  308,  308,  308,  308,  308,  308,  503,  417,  477,      492,  492,  492,  492,  492,  674,  674,  700,  256,  256,
      308,  308,  308,  308,  308,  407,  407,  407,  407,  407,      256,  256,  256,  256,  269,  269,  269,  269,  269,  269,
      407,  407,  407,  409,  416,  409,  409,  409,  409,  409,      269,  269,  269,  269,  417,  417,  420,  420,  420,  420,
      409,  409,  409,  308,  308,  308,  308,  308,  308,  325,      420,  420,  420,  420,  680,  680,  417,  535,  420,  422,
      325,  325,  325,  325,  325,  325,  325,  325,  421,  428,      422,  422,  422,  422,  422,  422,  422,  422,  422,  535,
   
      505,  428,  428,  428,  428,  428,  428,  428,  428,  434,      269,  277,  277,  277,  277,  277,  277,  277,  277,  277,
      434,  434,  434,  434,  434,  434,  434,  413,  421,  412,      277,  277,  283,  283,  283,  283,  283,  283,  283,  283,
      421,  421,  505,  325,  326,  326,  326,  326,  326,  326,      283,  283,  283,  283,  283,  445,  683,  683,  283,  283,
      326,  326,  326,  429,  466,  429,  429,  429,  429,  429,      283,  283,  283,  570,  570,  445,  446,  446,  446,  446,
      429,  429,  429,  421,  430,  485,  430,  430,  430,  430,      446,  446,  446,  446,  446,  446,  541,  541,  541,  541,
      430,  430,  430,  430,  466,  485,  466,  466,  326,  327,      541,  541,  283,  283,  283,  283,  283,  283,  286,  286,
      327,  327,  327,  327,  327,  327,  327,  327,  440,  440,      286,  286,  286,  286,  286,  286,  286,  286,  286,  286,
      440,  440,  440,  440,  440,  440,  441,  441,  441,  441,      679,  698,  679,  286,  286,  286,  286,  286,  465,  465,
      441,  441,  443,  500,  443,  443,  443,  443,  443,  443,      465,  465,  465,  465,  465,  465,  465,  465,  570,  563,
      443,  443,  500,  327,  332,  486,  332,  332,  332,  332,      697,  624,  620,  481,  563,  620,  624,  286,  286,  286,
   
      332,  332,  332,  332,  332,  486,  575,  575,  332,  332,      286,  286,  286,  287,  481,  287,  287,  287,  287,  287,
      332,  332,  332,  444,  444,  444,  444,  444,  444,  444,      287,  287,  287,  287,  287,  320,  320,  320,  320,  320,
      444,  446,  411,  446,  446,  446,  446,  446,  446,  446,      320,  320,  320,  320,  320,  696,  621,  640,  643,  320,
      446,  332,  332,  332,  332,  332,  332,  335,  335,  335,      320,  320,  320,  320,  470,  470,  470,  470,  470,  470,
      335,  335,  335,  335,  335,  335,  588,  588,  410,  335,      470,  470,  470,  470,  558,  558,  558,  558,  558,  558,
      335,  335,  335,  335,  447,  488,  447,  447,  447,  447,      621,  640,  643,  320,  320,  320,  320,  320,  320,  321,
      447,  447,  447,  447,  448,  488,  448,  448,  448,  448,      321,  321,  321,  321,  321,  321,  321,  321,  321,  643,
      448,  448,  335,  335,  335,  335,  335,  335,  348,  348,      630,  693,  621,  321,  321,  321,  321,  321,  472,  472,
      348,  348,  348,  348,  348,  348,  348,  348,  348,  351,      472,  472,  472,  472,  472,  472,  472,  472,  648,  648,
      351,  351,  351,  351,  351,  351,  351,  351,  351,  351,      648,  648,  630,  482,  630,  630,  691,  321,  321,  321,
   
      451,  451,  381,  351,  351,  351,  351,  351,  555,  470,      321,  321,  321,  334,  482,  334,  334,  334,  334,  334,
      451,  470,  470,  470,  471,  530,  471,  471,  471,  494,      334,  334,  334,  334,  334,  335,  595,  335,  335,  335,
      494,  494,  494,  494,  494,  530,  351,  351,  351,  351,      335,  335,  335,  335,  335,  335,  335,  336,  595,  336,
      351,  351,  354,  354,  354,  354,  354,  354,  354,  354,      336,  336,  336,  336,  336,  336,  336,  336,  336,  339,
      354,  531,  533,  555,  566,  354,  354,  354,  354,  354,      339,  339,  339,  339,  339,  339,  339,  339,  339,  339,
      380,  531,  533,  370,  566,  369,  470,  363,  591,  362,      349,  349,  349,  349,  349,  349,  349,  349,  349,  349,
      476,  471,  476,  476,  476,  476,  476,  476,  354,  354,      349,  349,  349,  572,  685,  633,  349,  349,  349,  349,
      354,  354,  354,  354,  377,  377,  377,  377,  377,  377,      349,  476,  476,  476,  476,  476,  476,  476,  476,  476,
      377,  377,  377,  546,  548,  472,  472,  472,  472,  472,      476,  633,  731,  824,  731,  572,  824,  572,  572,  645,
      472,  472,  472,  591,  361,  476,  478,  478,  478,  478,      349,  349,  349,  349,  349,  349,  352,  352,  352,  352,
   
      478,  478,  478,  478,  360,  546,  548,  357,  377,  378,      352,  352,  352,  352,  352,  352,  352,  352,  352,  483,
      378,  378,  378,  378,  378,  378,  378,  378,  472,  480,      483,  572,  352,  352,  352,  352,  352,  484,  484,  486,
      572,  480,  480,  480,  480,  480,  480,  480,  480,  481,      486,  483,  496,  501,  503,  733,  733,  645,  685,  484,
      356,  481,  481,  481,  481,  481,  481,  481,  481,  619,      676,  486,  496,  501,  686,  503,  352,  352,  352,  352,
      619,  338,  572,  378,  386,  574,  386,  386,  386,  386,      352,  352,  355,  355,  355,  355,  355,  355,  355,  355,
      386,  386,  386,  386,  386,  389,  330,  389,  389,  389,      355,  355,  355,  355,  676,  682,  641,  355,  355,  355,
      389,  389,  389,  389,  389,  389,  329,  574,  585,  389,      355,  355,  485,  485,  485,  485,  485,  485,  485,  485,
      389,  389,  389,  389,  482,  328,  482,  482,  482,  482,      485,  485,  604,  604,  604,  604,  604,  604,  512,  632,
      482,  482,  487,  487,  487,  487,  487,  487,  487,  487,      641,  355,  355,  355,  355,  355,  355,  356,  512,  356,
      585,  320,  389,  389,  389,  389,  389,  389,  392,  392,      356,  356,  356,  356,  356,  356,  356,  356,  356,  383,
   
      392,  392,  392,  392,  392,  392,  392,  319,  315,  314,      641,  383,  383,  383,  383,  383,  383,  383,  383,  383,
      392,  392,  392,  392,  392,  493,  493,  493,  493,  493,      383,  384,  384,  384,  384,  384,  384,  384,  384,  384,
      493,  493,  493,  496,  311,  496,  496,  496,  496,  496,      384,  762,  762,  781,  781,  384,  384,  384,  384,  384,
      496,  496,  496,  392,  392,  392,  392,  392,  392,  403,      489,  489,  489,  489,  489,  489,  489,  489,  632,  882,
      403,  403,  403,  403,  403,  403,  403,  403,  403,  403,      882,  611,  489,  611,  611,  611,  611,  611,  611,  384,
      406,  406,  406,  406,  406,  406,  406,  406,  406,  406,      384,  384,  384,  384,  384,  399,  399,  399,  399,  399,
      310,  291,  290,  289,  406,  406,  406,  406,  406,  497,      399,  399,  399,  399,  399,  491,  491,  491,  491,  491,
      497,  497,  497,  497,  497,  497,  497,  497,  498,  498,      491,  491,  491,  491,  491,  532,  532,  532,  532,  532,
      498,  498,  498,  498,  498,  498,  498,  406,  406,  406,      532,  532,  532,  532,  532,  639,  681,  639,  639,  639,
      406,  406,  406,  423,  288,  423,  423,  423,  423,  423,      649,  399,  401,  596,  401,  401,  401,  401,  401,  401,
   
      423,  423,  423,  499,  499,  499,  499,  499,  499,  499,      401,  401,  401,  401,  402,  596,  402,  402,  402,  402,
      499,  499,  514,  278,  514,  514,  514,  277,  276,  515,      402,  402,  402,  402,  402,  402,  408,  408,  408,  408,
      274,  515,  515,  515,  273,  272,  271,  270,  423,  424,      408,  408,  408,  408,  408,  408,  408,  701,  649,  728,
      269,  424,  424,  424,  424,  424,  424,  424,  424,  516,      408,  408,  408,  408,  408,  534,  534,  534,  534,  534,
      268,  516,  516,  516,  517,  267,  517,  517,  517,  251,      534,  534,  534,  534,  534,  675,  836,  742,  787,  836,
      520,  250,  520,  520,  520,  249,  248,  246,  245,  514,      547,  701,  673,  728,  408,  408,  408,  408,  408,  408,
      236,  235,  234,  233,  424,  425,  515,  425,  425,  425,      412,  547,  412,  412,  412,  412,  412,  412,  412,  412,
      425,  425,  425,  425,  425,  518,  232,  229,  518,  518,      412,  412,  418,  418,  418,  418,  418,  418,  418,  418,
      518,  518,  518,  518,  518,  518,  516,  227,  226,  225,      418,  418,  418,  418,  418,  742,  787,  670,  418,  418,
      224,  517,  223,  220,  212,  519,  519,  520,  211,  519,      418,  418,  418,  538,  598,  538,  538,  538,  538,  538,
   
      425,  426,  208,  426,  426,  426,  426,  426,  426,  426,      538,  827,  827,  827,  669,  538,  598,  634,  739,  634,
      426,  519,  519,  519,  521,  521,  207,  525,  521,  525,      634,  634,  418,  418,  418,  418,  418,  418,  421,  421,
      525,  525,  525,  525,  525,  525,  525,  200,  199,  193,      421,  421,  421,  421,  421,  421,  421,  421,  421,  421,
      521,  521,  521,  190,  189,  188,  426,  436,  187,  436,      421,  853,  739,  853,  421,  421,  421,  421,  421,  540,
      436,  436,  436,  436,  436,  436,  436,  436,  439,  186,      540,  540,  540,  540,  540,  540,  540,  540,  540,  578,
      439,  439,  439,  439,  439,  439,  439,  439,  439,  184,      578,  578,  578,  578,  578,  578,  656,  634,  421,  421,
      183,  182,  439,  439,  439,  439,  439,  526,  181,  526,      421,  421,  421,  421,  424,  424,  424,  424,  424,  424,
      526,  526,  526,  526,  526,  526,  526,  532,  532,  532,      424,  424,  424,  424,  424,  424,  548,  549,  549,  424,
      532,  532,  532,  532,  532,  439,  439,  439,  439,  439,      424,  424,  424,  424,  550,  550,  612,  548,  613,  549,
      439,  442,  442,  442,  442,  442,  442,  442,  442,  442,      552,  552,  844,  844,  844,  655,  550,  612,  657,  613,
   
      180,  179,  178,  442,  442,  442,  442,  442,  527,  177,      759,  642,  552,  424,  424,  424,  424,  424,  424,  425,
      527,  527,  527,  527,  527,  527,  527,  527,  538,  538,      657,  425,  425,  425,  425,  425,  425,  425,  425,  425,
      538,  538,  538,  538,  538,  538,  442,  442,  442,  442,      425,  426,  653,  768,  759,  642,  854,  426,  854,  916,
      442,  442,  454,  454,  454,  454,  454,  454,  454,  454,      426,  426,  916,  426,  426,  426,  426,  426,  426,  426,
      454,  454,  474,  176,  474,  474,  474,  474,  474,  474,      426,  426,  426,  426,  426,  426,  642,  768,  652,  426,
      474,  474,  539,  539,  539,  539,  539,  539,  540,  175,      426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
      540,  540,  540,  540,  540,  540,  540,  540,  542,  542,      426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
      542,  542,  542,  542,  542,  542,  542,  474,  475,  169,      426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
      475,  475,  475,  475,  475,  475,  475,  475,  543,  543,      426,  426,  426,  426,  426,  426,  426,  426,  426,  426,
      543,  543,  543,  543,  543,  543,  543,  544,  544,  544,      426,  464,  464,  464,  464,  464,  464,  464,  464,  464,
   
      544,  544,  544,  544,  552,  552,  552,  552,  552,  552,      464,  464,  555,  555,  555,  555,  555,  555,  555,  555,
      552,  552,  168,  475,  489,  158,  489,  489,  489,  489,      865,  651,  865,  658,  555,  557,  557,  557,  557,  557,
      489,  489,  489,  489,  489,  492,  157,  492,  492,  492,      557,  557,  557,  557,  557,  658,  883,  883,  464,  471,
      492,  492,  492,  492,  492,  492,  156,  152,  151,  492,      660,  471,  471,  471,  471,  471,  471,  471,  471,  471,
      492,  492,  492,  492,  553,  553,  553,  553,  553,  553,      471,  471,  660,  637,  702,  471,  471,  471,  471,  471,
      553,  553,  554,  554,  554,  554,  554,  554,  554,  554,      574,  574,  574,  574,  574,  574,  574,  574,  574,  574,
      149,  145,  492,  492,  492,  492,  492,  492,  495,  495,      619,  619,  619,  619,  619,  619,  619,  619,  702,  471,
      495,  495,  495,  495,  495,  495,  138,  134,  132,  130,      471,  471,  471,  471,  471,  474,  474,  474,  474,  474,
      495,  495,  495,  495,  495,  554,  558,  122,  558,  558,      474,  474,  474,  474,  474,  474,  778,  636,  702,  474,
      558,  558,  558,  558,  559,  559,  559,  559,  559,  559,      474,  474,  474,  474,  587,  587,  587,  587,  587,  587,
   
      559,  559,  121,  495,  495,  495,  495,  495,  495,  522,      587,  587,  587,  587,  866,  870,  866,  870,  614,  614,
      120,  522,  522,  522,  522,  522,  522,  522,  522,  119,      778,  894,  894,  474,  474,  474,  474,  474,  474,  475,
      561,  558,  561,  561,  561,  561,  561,  561,  561,  561,      614,  475,  475,  475,  475,  475,  475,  475,  475,  475,
      562,  118,  562,  562,  562,  562,  562,  562,  562,  562,      475,  487,  487,  487,  487,  487,  487,  487,  487,  487,
      113,  112,  111,  110,  522,  523,  108,  523,  523,  523,      487,  487,  487,  487,  678,  629,  703,  487,  487,  487,
      523,  523,  523,  523,  523,  563,  107,  563,  563,  563,      487,  487,  588,  588,  588,  588,  588,  588,  588,  588,
      563,  563,  563,  569,  106,  569,  569,  569,  569,  569,      588,  588,  635,  610,  635,  635,  635,  871,  678,  871,
      569,  569,  569,  598,  598,  598,  598,  598,  598,  102,      703,  487,  487,  487,  487,  487,  487,  490,  490,  490,
      523,  524,   98,  524,  524,  524,  524,  524,  524,  524,      490,  490,  490,  490,  490,  490,  490,  490,  490,  490,
      524,  579,  579,  579,  579,  579,  579,  579,  579,  580,      678,  703,  740,  490,  490,  490,  490,  490,  597,  597,
   
      580,  580,  580,  580,  580,  580,  580,  581,  581,  581,      597,  597,  597,  597,  597,  597,  597,  597,  875,  878,
      581,  581,  581,  581,  581,   97,  524,  534,   93,  534,      875,  878,  635,  888,  609,  888,  740,  490,  490,  490,
      534,  534,  534,  534,  534,  534,  534,  534,  537,   90,      490,  490,  490,  493,  493,  493,  493,  493,  493,  493,
      537,  537,  537,  537,  537,  537,  537,  537,   82,   81,      493,  493,  493,  493,  608,  889,  740,  889,  493,  493,
       80,   78,  537,  537,  537,  537,  537,   73,  590,  590,      493,  493,  493,  601,  594,  601,  601,  601,  601,  601,
      590,  590,  590,  590,  590,  590,  594,   66,  594,  594,      601,  897,  592,  897,  654,  601,  654,  654,  654,  654,
      594,  594,  594,  594,   59,  537,  537,  537,  537,  537,      654,  654,  493,  493,  493,  493,  493,  493,  494,  712,
      537,  556,   54,  556,  556,  556,  556,  556,  556,  556,      494,  494,  494,  494,  494,  494,  494,  494,  494,  494,
      556,  590,  596,  596,  596,  596,  596,  596,  596,  596,      495,  712,  898,  901,  898,  901,  495,  692,  692,  495,
       51,  594,  597,  597,  597,  597,  597,  597,  597,  597,      495,  692,  495,  495,  495,  495,  495,  495,  495,  495,
   
       49,   41,   40,   39,   38,   37,  556,  557,   36,  557,      495,  495,  495,  495,  495,  692,  692,  692,  495,  495,
      557,  557,  557,  557,  557,  557,  557,   33,   29,   23,      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
      600,  600,  600,  600,  600,  600,  600,  600,  601,  601,      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
      601,  601,  601,  601,  601,  601,   17,   15,   14,   13,      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
        0,    0,  557,  576,    0,  576,  576,  576,  576,  576,      495,  495,  495,  495,  495,  495,  495,  495,  495,  495,
      576,  576,  576,  600,    0,    0,    0,    0,    0,    0,      517,  517,  517,  517,  517,  517,  517,  517,  517,  517,
        0,  601,  602,  602,  602,  602,  602,  602,  602,  602,      517,  522,  913,  913,  713,  522,  522,  522,  522,  522,
      604,  604,  604,  604,  604,  604,  604,  604,  576,  577,      522,  522,  522,  522,  522,  522,  713,  522,  914,  914,
        0,  577,  577,  577,  577,  577,  577,  577,  577,    0,      522,  522,  522,  522,  522,  522,  522,  522,  522,  522,
        0,    0,    0,    0,    0,  602,  605,  605,  605,  605,      522,  522,  522,  522,  522,  522,  522,  522,  522,  522,
   
      605,  605,    0,  604,    0,    0,    0,    0,    0,    0,      522,  522,  591,  522,  522,  522,  522,  522,  522,  522,
        0,    0,    0,    0,  577,  578,    0,  578,  578,  578,      522,  522,  522,  522,  522,  522,  522,  522,  522,  522,
      578,  578,  578,  578,  578,    0,    0,    0,    0,  605,      522,  525,  525,  525,  525,  525,  525,  525,  525,  525,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,      525,  603,  603,  603,  603,  603,  603,  603,  603,  603,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,      603,  607,  607,  607,  607,  607,  607,  607,  607,  607,
      578,  592,    0,  592,  592,  592,  592,  592,  592,  592,      607,  666,  666,  666,  666,  666,  666,  525,  527,  527,
      592,    0,    0,    0,    0,    0,    0,    0,    0,    0,      527,  527,  527,  527,  527,  527,  527,  527,  527,  650,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,      650,  650,  650,  650,  650,  650,  650,  650,  650,  659,
        0,    0,    0,    0,    0,    0,  592,  593,    0,  593,      659,  659,  659,  659,  659,  659,  659,  659,  659,  721,
      593,  593,  593,  593,  593,  593,  593,    0,    0,    0,      721,  721,  721,  721,  721,  527,  536,  715,  536,  536,
   
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,      536,  536,  536,  536,  536,  536,  536,  536,  536,  715,
        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,      590,  582,  536,  536,  536,  536,  536,  663,  753,  663,
        0,    0,  593,  607,  607,  607,  607,  607,  607,  607,      663,  663,  663,  663,  663,  907,  908,  907,  908,  663,
      607,  607,  607,  607,  607,  607,  607,  607,  607,  608,      753,  687,  672,  687,  687,  687,  536,  536,  536,  536,
      608,  608,  608,  608,  608,  608,  608,  608,  608,  608,      536,  536,  539,  672,  539,  539,  539,  539,  539,  539,
      608,  608,  608,  608,  608,  609,  609,  609,  609,  609,      539,  539,  539,  539,  539,  730,  581,  580,  539,  539,
      609,  609,  609,  609,  609,  609,  609,  609,  609,  609,      539,  539,  539,  665,  665,  665,  665,  665,  665,  665,
      609,  610,  610,  610,  610,  610,  610,  610,  610,  610,      665,  665,  665,  688,  579,  688,  688,  688,  910,  730,
      610,  610,  610,  610,  610,  610,  610,  611,    0,    0,      910,  687,  539,  539,  539,  539,  539,  539,  542,  542,
        0,    0,    0,    0,    0,  611,  611,  611,    0,    0,      542,  542,  542,  542,  542,  542,  542,  542,  542,  577,
   
      611,  611,  611,  612,  612,  612,  612,  612,  612,  612,      576,  730,  542,  542,  542,  542,  542,  695,  695,  695,
      612,  612,  612,  612,  612,  612,  612,  612,  612,  613,      695,  695,  695,  695,  695,  695,  695,  794,  794,  794,
        0,    0,    0,    0,  613,    0,    0,  613,  613,  613,      794,  794,  794,  688,  575,  573,  542,  542,  542,  542,
      613,    0,  613,  613,  613,  614,    0,    0,    0,    0,      542,  542,  543,  569,  543,  543,  543,  543,  543,  543,
        0,    0,    0,  614,  614,  614,    0,    0,  614,  614,      543,  543,  543,  543,  546,  568,  546,  546,  546,  546,
      614,  615,    0,    0,  615,  615,    0,  615,    0,  615,      546,  546,  546,  546,  546,  546,  553,  553,  553,  553,
      615,  615,    0,    0,  615,  615,  615,  616,  616,    0,      553,  553,  553,  553,  553,  553,  553,  553,  553,  567,
        0,    0,  616,  617,    0,    0,  617,  617,    0,  617,      551,  761,  553,  553,  553,  553,  553,  689,  545,  689,
        0,  617,  617,  617,    0,    0,  617,  617,  617,  618,      689,  689,  690,  544,  690,  690,  690,  699,  531,  699,
        0,    0,  618,  618,    0,  618,    0,  618,  618,  618,      699,  699,  699,  699,  699,  761,  553,  553,  553,  553,
   
        0,  618,    0,  618,  618,  620,    0,    0,  620,    0,      553,  553,  556,  556,  556,  556,  556,  556,  556,  556,
        0,  620,    0,  620,  620,  620,  620,    0,  620,  620,      556,  556,  556,  556,  918,  530,  918,  761,  556,  556,
      620,  621,  621,  621,  621,  621,  621,  621,  621,  621,      556,  556,  556,  919,  923,  919,  923,  689,  924,  929,
      621,  621,  621,  621,  621,  621,  621,  622,  622,    0,      924,  929,  690,  726,  726,  726,  726,  726,  726,  726,
      622,    0,  622,  622,  622,  622,  622,  622,  622,  622,      524,  521,  556,  556,  556,  556,  556,  556,  559,  520,
      622,  622,  622,  623,  623,  623,  623,  623,  623,  623,      559,  559,  559,  559,  559,  559,  559,  559,  559,  559,
      623,  623,  623,  623,  623,  623,  623,  623,  623,  624,      560,  694,  519,  694,  694,  694,  560,  694,  694,  560,
      624,    0,  624,  624,  624,  624,  624,  624,  624,  624,      560,  694,  560,  560,  560,  560,  560,  560,  560,  560,
      624,  624,  624,  624,  624,  625,    0,    0,    0,    0,      560,  560,  560,  560,  560,  694,  694,  694,  560,  560,
      625,    0,    0,  625,  625,  625,    0,    0,  625,  625,      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
   
      625,  626,    0,    0,  626,  626,    0,  626,    0,  626,      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
      626,  626,    0,    0,  626,  626,  626,  627,  627,    0,      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
        0,    0,  627,  628,  628,  628,    0,    0,    0,  628,      560,  560,  560,  560,  560,  560,  560,  560,  560,  560,
      629,    0,    0,  629,  629,    0,  629,    0,  629,  629,      583,  750,  518,  750,  750,  750,  750,  750,  750,  583,
      629,    0,    0,  629,  629,  629,  630,  630,  630,  630,      930,  516,  930,  583,  583,  583,  583,  583,  583,  583,
      630,  630,  630,  630,  630,  630,  630,  630,  630,  630,      583,  583,  583,  583,  583,  583,  515,  510,  583,  583,
      630,  630,  631,  631,    0,    0,    0,  631,  632,  632,      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
      632,    0,    0,    0,  632,  633,  633,    0,    0,    0,      583,  583,  583,  583,  583,  583,  583,  583,  583,  583,
      633,  634,  634,    0,    0,    0,  634,  635,  635,    0,      509,  583,  583,  583,  583,  583,  583,  583,  583,  583,
        0,    0,  635,  636,  636,  636,    0,    0,    0,  636,      583,  583,  583,  583,  583,  583,  583,  583,  583,  586,
   
      637,  637,    0,    0,    0,  637,  638,  638,    0,    0,      479,  586,  586,  586,  586,  586,  586,  586,  586,  586,
        0,  638,  639,  639,    0,    0,    0,  639,  640,  640,      586,  714,  714,  714,  714,  714,  714,  714,  714,  714,
      640,    0,    0,    0,  640,  641,  641,  641,  641,    0,      714,  718,  478,  718,  718,  718,  718,  718,  718,  922,
        0,    0,  641,  642,  642,    0,    0,    0,  642,  643,      477,  469,  922,  718,  468,  467,  922,  586,  593,  463,
      643,    0,    0,    0,  643,  644,  644,    0,    0,    0,      593,  593,  593,  593,  593,  593,  593,  593,  593,  593,
      644,  645,  645,  645,    0,    0,    0,  645,  646,  646,      599,  456,  599,  599,  599,  599,  599,  599,  599,  599,
      646,  646,    0,    0,    0,  646,  647,  647,    0,    0,      599,  599,  599,  455,  452,  451,  599,  599,  599,  599,
        0,  647,  648,  648,    0,    0,    0,  648,  649,  649,      599,  720,  720,  720,  720,  720,  720,  720,  720,  720,
      649,    0,    0,    0,  649,  650,  650,  650,  650,    0,      720,  758,  449,  758,  758,  758,  758,  758,  758,  448,
        0,    0,  650,  651,  651,    0,    0,    0,  651,  652,      599,  599,  599,  599,  599,  599,  602,  447,  602,  602,
   
        0,  652,  652,    0,    0,    0,  652,  653,  653,  653,      602,  602,  602,  602,  602,  602,  602,  602,  602,  441,
        0,    0,    0,  653,  654,  654,  654,  654,    0,    0,      440,  438,  602,  602,  602,  602,  602,  734,  734,  734,
        0,  654,  655,  655,    0,    0,    0,  655,  656,    0,      734,  734,  734,  734,  734,  734,  734,  767,  437,  767,
      656,  656,    0,    0,    0,  656,  657,  657,  657,    0,      767,  767,  767,  767,  767,  436,  602,  602,  602,  602,
        0,    0,  657,  658,  658,  658,    0,    0,    0,    0,      602,  602,  605,  605,  605,  605,  605,  605,  605,  605,
      658,  659,  659,  659,  659,  659,  659,  659,  659,  659,      605,  605,  605,  435,  411,  410,  605,  605,  605,  605,
      659,  659,  659,  659,  659,  659,  659,  660,  660,    0,      605,  735,  735,  735,  735,  735,  735,  735,  735,  735,
      660,  660,  660,    0,    0,  660,  660,  660,    0,    0,      735,  407,  745,  406,  745,  745,  745,  745,  745,  745,
      660,  660,  660,  661,  661,    0,  661,  661,  661,    0,      605,  605,  605,  605,  605,  605,  606,  405,  606,  606,
        0,  661,  661,  661,    0,    0,  661,  661,  661,  662,      606,  606,  606,  606,  606,  606,  606,  606,  617,  617,
   
      662,    0,    0,    0,  662,  663,    0,  663,  663,    0,      617,  617,  617,  617,  617,  617,  617,  617,  617,  617,
        0,    0,  663,  664,  664,    0,    0,    0,    0,  664,      745,  404,  398,  397,  617,  617,  617,  617,  617,  746,
      665,  665,    0,    0,    0,  665,  666,    0,  666,  666,      746,  746,  746,  746,  746,  746,  746,  746,  746,  800,
        0,    0,    0,  666,  667,  667,    0,    0,    0,  667,      396,  800,  800,  800,  800,  800,  800,  395,  617,  617,
      668,    0,  668,    0,    0,    0,    0,  668,  669,  669,      617,  617,  617,  617,  638,  394,  638,  638,  638,  638,
      669,  669,  669,  669,  669,  669,  669,  669,  669,  669,      638,  638,  638,  638,  638,  638,  644,  644,  644,  644,
      669,  669,  669,  669,  606,  606,  606,  606,  606,  606,      644,  644,  644,  644,  644,  644,  763,  763,  763,  763,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      763,  763,  763,  763,  763,  763,  772,  772,  772,  772,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      772,  772,  772,  772,  772,  772,  812,  812,  812,  812,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      812,  812,  644,  646,  393,  646,  646,  646,  646,  646,
   
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      646,  646,  646,  646,  646,  773,  773,  773,  773,  773,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      773,  773,  773,  773,  773,  774,  774,  774,  774,  774,
      606,  606,  606,  606,  606,  606,  606,  606,  606,  606,      774,  774,  774,  774,  774,  392,  928,  391,  390,  928,
      606      389,  646,  661,  928,  661,  661,  661,  661,  661,  661,
       661,  661,  661,  661,  661,  388,  387,  386,  661,  661,
       661,  661,  661,  790,  385,  790,  790,  790,  790,  790,
       790,  792,  792,  792,  792,  792,  792,  792,  792,  792,
       792,  382,  661,  661,  661,  661,  661,  661,  664,  381,
       664,  664,  664,  664,  664,  664,  664,  664,  664,  664,
       664,  790,  376,  375,  664,  664,  664,  664,  664,  793,
 
       793,  793,  793,  793,  793,  793,  793,  793,  793,  374,
       368,  366,  365,  364,  363,  362,  361,  360,  664,  664,
       664,  664,  664,  664,  667,  667,  667,  667,  667,  667,
       667,  667,  667,  667,  359,  343,  342,  341,  667,  667,
       667,  667,  667,  796,  796,  796,  796,  796,  796,  796,
       796,  796,  796,  340,  338,  337,  809,  809,  809,  809,
       809,  809,  667,  667,  667,  667,  667,  667,  668,  333,
       668,  668,  668,  668,  668,  668,  668,  668,  668,  668,
       671,  671,  671,  671,  671,  671,  671,  671,  671,  671,
       671,  704,  809,  704,  704,  704,  704,  704,  704,  704,
 
       704,  704,  704,  705,  332,  705,  705,  705,  705,  705,
       705,  705,  705,  705,  705,  706,  331,  706,  706,  706,
       706,  706,  706,  706,  706,  706,  706,  709,  329,  709,
       709,  709,  709,  709,  709,  709,  709,  709,  709,  716,
       328,  716,  716,  716,  716,  716,  716,  716,  716,  716,
       716,  716,  327,  326,  325,  716,  716,  716,  716,  716,
       804,  804,  804,  804,  804,  804,  804,  804,  804,  804,
       324,  318,  317,  316,  309,  308,  307,  306,  305,  716,
       716,  716,  716,  716,  716,  719,  299,  719,  719,  719,
       719,  719,  719,  719,  719,  719,  719,  297,  296,  295,
 
       294,  719,  719,  719,  719,  719,  805,  805,  805,  805,
       805,  805,  805,  805,  805,  805,  293,  292,  290,  288,
       280,  279,  276,  275,  268,  719,  719,  719,  719,  719,
       719,  738,  267,  738,  738,  738,  738,  738,  738,  738,
       738,  738,  738,  741,  265,  741,  741,  741,  741,  741,
       741,  741,  741,  741,  741,  743,  264,  743,  743,  743,
       743,  743,  743,  743,  743,  743,  743,  744,  263,  744,
       744,  744,  744,  744,  744,  744,  744,  744,  744,  756,
       262,  756,  756,  756,  756,  756,  756,  756,  756,  756,
       756,  769,  261,  769,  769,  769,  769,  769,  769,  769,
 
       769,  769,  769,  770,  260,  770,  770,  770,  770,  770,
       770,  770,  770,  770,  770,  771,  259,  771,  771,  771,
       771,  771,  771,  771,  771,  771,  771,  785,  258,  785,
       785,  785,  785,  785,  785,  785,  785,  785,  785,  786,
       255,  786,  786,  786,  786,  786,  786,  786,  786,  786,
       786,  788,  252,  788,  788,  788,  788,  788,  788,  788,
       788,  788,  788,  789,  251,  789,  789,  789,  789,  789,
       789,  789,  789,  789,  789,  801,  801,  801,  801,  801,
       801,  801,  801,  801,  801,  806,  806,  806,  806,  806,
       806,  806,  806,  806,  806,  811,  811,  811,  811,  811,
 
       811,  811,  811,  811,  811,  250,  244,  241,  240,  239,
       238,  801,  802,  802,  802,  802,  802,  802,  802,  802,
       802,  802,  237,  234,  233,  232,  231,  230,  229,  228,
       227,  226,  225,  224,  223,  217,  216,  209,  208,  207,
       206,  205,  204,  202,  201,  199,  193,  185,  802,  803,
       803,  803,  803,  803,  803,  803,  803,  803,  803,  181,
       177,  176,  174,  170,  163,  159,  157,  155,  147,  146,
       145,  144,  143,  137,  136,  135,  134,  133,  131,  130,
       129,  128,  124,  120,  119,  803,  808,  808,  808,  808,
       808,  808,  808,  808,  808,  808,  115,  112,  109,  104,
 
       103,  102,  100,   96,   95,   94,   93,   90,   77,   70,
        63,   59,   58,   56,   55,   53,   51,   43,   42,   41,
        39,   35,  808,  814,  814,  814,  814,  814,  814,  814,
       814,  814,  814,  814,  814,  814,  814,  814,  814,  814,
       814,  814,  814,  814,  815,  815,  815,  815,  815,  815,
       815,  815,  815,  815,  815,  815,  815,  815,  815,  815,
       815,  815,  815,  815,  815,  816,  816,  816,  816,  816,
       816,  816,  816,  816,  816,  816,  816,  816,  816,  816,
       816,  816,  816,  816,  816,  816,  817,  817,  817,  817,
       817,  817,  817,  817,  817,  817,  817,  817,  817,  817,
 
       817,  817,  817,  817,  817,  817,  817,  818,   31,   25,
        19,   17,   16,   15,  818,    0,  818,  818,  818,  818,
         0,    0,  818,  818,  818,  818,  818,  818,  819,  819,
       819,  819,  819,  819,  819,  819,  819,  819,  819,  819,
       819,  819,  819,  819,  819,  819,  819,  819,  819,  820,
         0,    0,    0,    0,  820,    0,  820,    0,  820,  820,
       820,  820,  820,    0,  820,  820,  820,  820,  820,  820,
       821,    0,    0,    0,    0,    0,    0,  821,    0,  821,
       821,  821,  821,    0,    0,  821,  821,  821,  821,  821,
       821,  822,    0,    0,  822,  822,    0,  822,  822,    0,
 
       822,  822,  822,  822,    0,    0,  822,  822,  822,  822,
       822,  822,  823,  823,    0,  823,    0,    0,    0,  823,
       825,    0,    0,  825,  825,    0,  825,  825,    0,  825,
       825,  825,  825,    0,    0,  825,  825,  825,  825,  825,
       825,  826,    0,    0,  826,  826,    0,  826,  826,    0,
       826,  826,  826,  826,    0,  826,  826,  826,    0,  826,
       826,  826,  828,    0,    0,  828,    0,    0,  828,  828,
         0,  828,  828,  828,  828,  828,    0,  828,  828,  828,
       828,  828,  828,  829,  829,  829,  829,  829,  829,  829,
       829,  829,  829,  829,  829,  829,  829,  829,  829,  829,
 
       829,  829,  829,  829,  830,  830,    0,  830,    0,  830,
       830,  830,  830,  830,  830,  830,  830,  830,  830,  830,
       830,  830,  830,  830,  830,  831,    0,    0,    0,    0,
       831,    0,  831,    0,  831,  831,  831,  831,  831,    0,
       831,  831,  831,  831,  831,  831,  832,    0,    0,    0,
         0,    0,    0,  832,    0,  832,  832,  832,  832,    0,
       832,  832,  832,  832,  832,  832,  832,  833,    0,    0,
       833,  833,    0,  833,  833,    0,  833,  833,  833,  833,
         0,  833,  833,  833,  833,  833,  833,  833,  834,  834,
       834,  834,  834,  834,  834,  834,  834,  834,  834,  834,
 
       834,  834,  834,  834,  834,  834,  834,  834,  834,  835,
       835,    0,  835,  835,  835,  835,  835,  835,  835,  835,
       835,  835,  835,  835,  835,  835,  835,  835,  835,  835,
       837,    0,    0,  837,  837,    0,  837,  837,    0,  837,
       837,  837,  837,    0,    0,  837,  837,  837,  837,  837,
       837,  838,  838,    0,  838,    0,    0,    0,  838,  839,
       839,    0,  839,    0,    0,    0,  839,  840,  840,  840,
         0,  840,    0,    0,    0,  840,  841,    0,    0,  841,
       841,    0,  841,  841,    0,  841,  841,  841,  841,    0,
         0,  841,  841,  841,  841,  841,  841,  842,    0,    0,
 
       842,  842,    0,  842,  842,    0,  842,  842,  842,  842,
         0,    0,  842,  842,  842,  842,  842,  842,  843,    0,
         0,  843,  843,    0,  843,  843,    0,  843,  843,  843,
       843,    0,  843,  843,  843,    0,  843,  843,  843,  845,
         0,    0,  845,    0,    0,  845,  845,    0,  845,  845,
       845,  845,  845,    0,  845,  845,  845,  845,  845,  845,
       846,    0,    0,    0,    0,    0,    0,  846,    0,  846,
       846,  846,  846,    0,    0,  846,  846,  846,  846,  846,
       846,  847,    0,    0,    0,    0,    0,    0,  847,    0,
       847,  847,  847,  847,    0,  847,  847,  847,  847,  847,
 
       847,  847,  848,    0,    0,  848,  848,    0,  848,  848,
         0,  848,  848,  848,  848,    0,  848,  848,  848,  848,
       848,  848,  848,  849,    0,    0,  849,  849,    0,  849,
       850,  850,  850,  850,  850,  850,  850,  850,  850,  850,
       850,  850,  850,  850,  850,  850,  850,  850,  850,  850,
       850,  851,  851,    0,  851,    0,    0,    0,  851,  852,
       852,  852,    0,  852,    0,    0,    0,  852,  855,  855,
         0,  855,    0,    0,    0,  855,  856,  856,    0,  856,
         0,    0,    0,  856,  857,  857,    0,  857,    0,    0,
         0,  857,  858,  858,  858,    0,  858,    0,    0,    0,
 
       858,  859,    0,    0,  859,  859,    0,  859,  860,  860,
         0,  860,    0,    0,    0,  860,  861,  861,    0,  861,
         0,    0,    0,  861,  862,  862,    0,  862,    0,    0,
         0,  862,  863,  863,  863,    0,  863,    0,    0,    0,
       863,  864,  864,  864,  864,    0,  864,    0,    0,    0,
       864,  867,  867,    0,  867,    0,    0,    0,  867,  868,
       868,    0,  868,    0,    0,    0,  868,  869,  869,    0,
       869,    0,    0,    0,  869,  872,  872,  872,    0,  872,
         0,    0,    0,  872,  873,  873,  873,  873,    0,  873,
         0,    0,    0,  873,  874,  874,  874,  874,  874,  874,
 
       874,  874,  874,  874,  874,  874,  874,  874,  874,  874,
       874,  874,  874,  874,  874,  876,  876,    0,  876,    0,
         0,    0,  876,  877,  877,    0,  877,    0,    0,    0,
       877,  879,  879,  879,    0,  879,    0,    0,    0,  879,
       880,  880,  880,  880,    0,  880,    0,    0,    0,  880,
       881,  881,  881,  881,  881,  881,  881,  881,  881,  881,
       881,  881,  881,  881,  881,  881,  881,  881,  881,  881,
       881,  884,    0,    0,  884,  884,    0,  884,  885,    0,
         0,    0,  885,  885,    0,  885,  885,  885,    0,    0,
       885,  885,  886,  886,    0,  886,    0,    0,    0,  886,
 
       887,    0,  887,  887,    0,  887,    0,    0,    0,  887,
       890,  890,  890,    0,  890,    0,    0,    0,  890,  891,
       891,  891,  891,    0,  891,    0,    0,    0,  891,  892,
       892,    0,    0,  892,    0,    0,    0,  892,  893,  893,
       893,  893,  893,  893,  893,  893,  893,  893,  893,  893,
       893,  893,  893,  893,  893,  893,  893,  893,  893,  895,
         0,    0,  895,  895,    0,  895,  896,    0,    0,    0,
       896,  896,    0,  896,  896,  896,    0,    0,  896,  896,
       899,  899,    0,  899,    0,    0,    0,  899,  900,    0,
       900,  900,    0,  900,    0,    0,    0,  900,  902,  902,
 
       902,    0,  902,    0,    0,    0,  902,  903,  903,  903,
         0,    0,  903,    0,    0,    0,  903,  904,  904,  904,
       904,  904,  904,  904,  904,  904,  904,  904,  904,  904,
       904,  904,  904,  904,  904,  904,  904,  904,  905,  905,
         0,  905,  905,  905,    0,  905,    0,  905,  905,  905,
       905,    0,    0,  905,  905,  905,  905,  905,  905,  906,
       906,    0,  906,  906,  906,    0,  906,    0,  906,  906,
       906,  906,    0,    0,  906,  906,  906,  906,  906,  906,
       909,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,  909,  909,    0,  909,  909,    0,  909,  911,  911,
 
         0,  911,    0,    0,    0,  911,  912,    0,  912,  912,
         0,  912,    0,    0,    0,  912,  915,  915,    0,    0,
       915,    0,    0,    0,  915,  917,    0,    0,    0,    0,
         0,    0,  917,    0,  917,  917,  917,  917,    0,    0,
       917,  917,  917,  917,  917,  917,  920,  920,    0,  920,
         0,    0,    0,  920,  921,    0,  921,  921,    0,  921,
         0,    0,    0,  921,  925,  925,    0,  925,    0,    0,
         0,  925,  926,    0,  926,    0,    0,  926,    0,    0,
         0,  926,  927,  927,  927,  927,  927,  927,  927,  927,
       927,  927,  927,  927,  927,  927,  927,  927,  927,  927,
 
       927,  927,  927,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813,  813,  813,  813,  813,  813,  813,
       813,  813,  813,  813
     } ;      } ;
   
 static yy_state_type yy_last_accepting_state;  static yy_state_type yy_last_accepting_state;
Line 1404  char *yytext; Line 1928  char *yytext;
 #define INITIAL 0  #define INITIAL 0
 #line 2 "toke.l"  #line 2 "toke.l"
 /*  /*
 * Copyright (c) 1996, 1998-2005, 2007-2012 * Copyright (c) 1996, 1998-2005, 2007-2013
  *      Todd C. Miller <Todd.Miller@courtesan.com>   *      Todd C. Miller <Todd.Miller@courtesan.com>
  *   *
  * Permission to use, copy, modify, and distribute this software for any   * Permission to use, copy, modify, and distribute this software for any
Line 1430  char *yytext; Line 1954  char *yytext;
 #include <config.h>  #include <config.h>
   
 #include <sys/types.h>  #include <sys/types.h>
 #include <sys/param.h>  
 #include <sys/stat.h>  #include <sys/stat.h>
 #include <stdio.h>  #include <stdio.h>
 #ifdef STDC_HEADERS  #ifdef STDC_HEADERS
Line 1447  char *yytext; Line 1970  char *yytext;
 #ifdef HAVE_STRINGS_H  #ifdef HAVE_STRINGS_H
 # include <strings.h>  # include <strings.h>
 #endif /* HAVE_STRINGS_H */  #endif /* HAVE_STRINGS_H */
   #if defined(HAVE_STDINT_H)
   # include <stdint.h>
   #elif defined(HAVE_INTTYPES_H)
   # include <inttypes.h>
   #endif
 #ifdef HAVE_UNISTD_H  #ifdef HAVE_UNISTD_H
 # include <unistd.h>  # include <unistd.h>
 #endif /* HAVE_UNISTD_H */  #endif /* HAVE_UNISTD_H */
Line 1476  char *yytext; Line 2004  char *yytext;
 #include "toke.h"  #include "toke.h"
 #include <gram.h>  #include <gram.h>
 #include "lbuf.h"  #include "lbuf.h"
   #include "sha2.h"
 #include "secure_path.h"  #include "secure_path.h"
   
extern YYSTYPE yylval;int sudolineno;                 /* current sudoers line number. */
extern bool parse_error;int last_token;                 /* last token that was parsed. */
extern bool sudoers_warnings;char *sudoers;                  /* sudoers file being parsed. */
int sudolineno; 
int last_token; 
char *sudoers; 
   
 /* Default sudoers path, mode and owner (may be set via sudo.conf) */  /* Default sudoers path, mode and owner (may be set via sudo.conf) */
 const char *sudoers_file = _PATH_SUDOERS;  const char *sudoers_file = _PATH_SUDOERS;
Line 1493  gid_t sudoers_gid = SUDOERS_GID; Line 2019  gid_t sudoers_gid = SUDOERS_GID;
   
 static bool continued, sawspace;  static bool continued, sawspace;
 static int prev_state;  static int prev_state;
   static int digest_len;
   
 static bool _push_include(char *, bool);  static bool _push_include(char *, bool);
 static bool pop_include(void);  static bool pop_include(void);
 static char *parse_include(char *);  static char *parse_include(char *);
   
 static int sudoers_trace_print(const char *msg);  
 int (*trace_print)(const char *msg) = sudoers_trace_print;  int (*trace_print)(const char *msg) = sudoers_trace_print;
   
 #define LEXRETURN(n)    do {    \  #define LEXRETURN(n)    do {    \
Line 1506  int (*trace_print)(const char *msg) = sudoers_trace_pr Line 2032  int (*trace_print)(const char *msg) = sudoers_trace_pr
         return (n);             \          return (n);             \
 } while (0)  } while (0)
   
#define ECHO    ignore_result(fwrite(yytext, yyleng, 1, yyout))#define ECHO    ignore_result(fwrite(sudoerstext, sudoersleng, 1, sudoersout))
   
 #define push_include(_p)        (_push_include((_p), false))  #define push_include(_p)        (_push_include((_p), false))
 #define push_includedir(_p)     (_push_include((_p), true))  #define push_includedir(_p)     (_push_include((_p), true))
Line 1522  int (*trace_print)(const char *msg) = sudoers_trace_pr Line 2048  int (*trace_print)(const char *msg) = sudoers_trace_pr
   
 #define INSTR 5  #define INSTR 5
   
#line 1525 "lex.yy.c"#define WANTDIGEST 6
   
   #line 2053 "lex.sudoers.c"
   
 /* Macros after this point can all be overridden by user definitions in  /* Macros after this point can all be overridden by user definitions in
  * section 1.   * section 1.
  */   */
Line 1676  YY_DECL Line 2204  YY_DECL
         register char *yy_cp, *yy_bp;          register char *yy_cp, *yy_bp;
         register int yy_act;          register int yy_act;
   
#line 133 "toke.l"#line 137 "toke.l"
   
#line 1681 "lex.yy.c"#line 2209 "lex.sudoers.c"
   
         if ( yy_init )          if ( yy_init )
                 {                  {
Line 1730  yy_match: Line 2258  yy_match:
                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )                          while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                 {                                  {
                                 yy_current_state = (int) yy_def[yy_current_state];                                  yy_current_state = (int) yy_def[yy_current_state];
                                if ( yy_current_state >= 607 )                                if ( yy_current_state >= 814 )
                                         yy_c = yy_meta[(unsigned int) yy_c];                                          yy_c = yy_meta[(unsigned int) yy_c];
                                 }                                  }
                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];                          yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                         ++yy_cp;                          ++yy_cp;
                         }                          }
                while ( yy_base[yy_current_state] != 3665 );                while ( yy_base[yy_current_state] != 5604 );
   
 yy_find_action:  yy_find_action:
                 yy_act = yy_accept[yy_current_state];                  yy_act = yy_accept[yy_current_state];
Line 1764  do_action: /* This label is used only to access EOF ac Line 2292  do_action: /* This label is used only to access EOF ac
   
 case 1:  case 1:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 134 "toke.l"#line 138 "toke.l"
 {  {
                             LEXTRACE(", ");                              LEXTRACE(", ");
                             LEXRETURN(',');                              LEXRETURN(',');
Line 1772  YY_RULE_SETUP Line 2300  YY_RULE_SETUP
         YY_BREAK          YY_BREAK
 case 2:  case 2:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 139 "toke.l"#line 143 "toke.l"
 BEGIN STARTDEFS;  BEGIN STARTDEFS;
         YY_BREAK          YY_BREAK
 case 3:  case 3:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 141 "toke.l"#line 145 "toke.l"
 {  {
                             BEGIN INDEFS;                              BEGIN INDEFS;
                             LEXTRACE("DEFVAR ");                              LEXTRACE("DEFVAR ");
                            if (!fill(yytext, yyleng))                            if (!fill(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                             LEXRETURN(DEFVAR);                              LEXRETURN(DEFVAR);
                         }                          }
Line 1789  YY_RULE_SETUP Line 2317  YY_RULE_SETUP
   
 case 4:  case 4:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 150 "toke.l"#line 154 "toke.l"
 {  {
                             BEGIN STARTDEFS;                              BEGIN STARTDEFS;
                             LEXTRACE(", ");                              LEXTRACE(", ");
Line 1798  YY_RULE_SETUP Line 2326  YY_RULE_SETUP
         YY_BREAK          YY_BREAK
 case 5:  case 5:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 156 "toke.l"#line 160 "toke.l"
 {  {
                             LEXTRACE("= ");                              LEXTRACE("= ");
                             LEXRETURN('=');                              LEXRETURN('=');
Line 1806  YY_RULE_SETUP Line 2334  YY_RULE_SETUP
         YY_BREAK          YY_BREAK
 case 6:  case 6:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 161 "toke.l"#line 165 "toke.l"
 {  {
                             LEXTRACE("+= ");                              LEXTRACE("+= ");
                             LEXRETURN('+');                              LEXRETURN('+');
Line 1814  YY_RULE_SETUP Line 2342  YY_RULE_SETUP
         YY_BREAK          YY_BREAK
 case 7:  case 7:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 166 "toke.l"#line 170 "toke.l"
 {  {
                             LEXTRACE("-= ");                              LEXTRACE("-= ");
                             LEXRETURN('-');                              LEXRETURN('-');
Line 1822  YY_RULE_SETUP Line 2350  YY_RULE_SETUP
         YY_BREAK          YY_BREAK
 case 8:  case 8:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 171 "toke.l"#line 175 "toke.l"
 {  {
                             LEXTRACE("BEGINSTR ");                              LEXTRACE("BEGINSTR ");
                            yylval.string = NULL;                            sudoerslval.string = NULL;
                             prev_state = YY_START;                              prev_state = YY_START;
                             BEGIN INSTR;                              BEGIN INSTR;
                         }                          }
         YY_BREAK          YY_BREAK
 case 9:  case 9:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 178 "toke.l"#line 182 "toke.l"
 {  {
                             LEXTRACE("WORD(2) ");                              LEXTRACE("WORD(2) ");
                            if (!fill(yytext, yyleng))                            if (!fill(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                             LEXRETURN(WORD);                              LEXRETURN(WORD);
                         }                          }
Line 1844  YY_RULE_SETUP Line 2372  YY_RULE_SETUP
   
 case 10:  case 10:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 187 "toke.l"#line 191 "toke.l"
 {  {
                             /* Line continuation char followed by newline. */                              /* Line continuation char followed by newline. */
                             sudolineno++;                              sudolineno++;
Line 1853  YY_RULE_SETUP Line 2381  YY_RULE_SETUP
         YY_BREAK          YY_BREAK
 case 11:  case 11:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 193 "toke.l"#line 197 "toke.l"
 {  {
                             LEXTRACE("ENDSTR ");                              LEXTRACE("ENDSTR ");
                             BEGIN prev_state;                              BEGIN prev_state;
   
                            if (yylval.string == NULL) {                            if (sudoerslval.string == NULL) {
                                 LEXTRACE("ERROR "); /* empty string */                                  LEXTRACE("ERROR "); /* empty string */
                                 LEXRETURN(ERROR);                                  LEXRETURN(ERROR);
                             }                              }
                             if (prev_state == INITIAL) {                              if (prev_state == INITIAL) {
                                switch (yylval.string[0]) {                                switch (sudoerslval.string[0]) {
                                 case '%':                                  case '%':
                                    if (yylval.string[1] == '\0' ||                                    if (sudoerslval.string[1] == '\0' ||
                                        (yylval.string[1] == ':' &&                                        (sudoerslval.string[1] == ':' &&
                                        yylval.string[2] == '\0')) {                                        sudoerslval.string[2] == '\0')) {
                                         LEXTRACE("ERROR "); /* empty group */                                          LEXTRACE("ERROR "); /* empty group */
                                         LEXRETURN(ERROR);                                          LEXRETURN(ERROR);
                                     }                                      }
                                     LEXTRACE("USERGROUP ");                                      LEXTRACE("USERGROUP ");
                                     LEXRETURN(USERGROUP);                                      LEXRETURN(USERGROUP);
                                 case '+':                                  case '+':
                                    if (yylval.string[1] == '\0') {                                    if (sudoerslval.string[1] == '\0') {
                                         LEXTRACE("ERROR "); /* empty netgroup */                                          LEXTRACE("ERROR "); /* empty netgroup */
                                         LEXRETURN(ERROR);                                          LEXRETURN(ERROR);
                                     }                                      }
Line 1888  YY_RULE_SETUP Line 2416  YY_RULE_SETUP
         YY_BREAK          YY_BREAK
 case 12:  case 12:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 225 "toke.l"#line 229 "toke.l"
 {  {
                             LEXTRACE("BACKSLASH ");                              LEXTRACE("BACKSLASH ");
                            if (!append(yytext, yyleng))                            if (!append(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                         }                          }
         YY_BREAK          YY_BREAK
 case 13:  case 13:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 231 "toke.l"#line 235 "toke.l"
 {  {
                             LEXTRACE("STRBODY ");                              LEXTRACE("STRBODY ");
                            if (!append(yytext, yyleng))                            if (!append(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                         }                          }
         YY_BREAK          YY_BREAK
Line 1908  YY_RULE_SETUP Line 2436  YY_RULE_SETUP
   
 case 14:  case 14:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 239 "toke.l"#line 243 "toke.l"
 {  {
                             /* quoted fnmatch glob char, pass verbatim */                              /* quoted fnmatch glob char, pass verbatim */
                             LEXTRACE("QUOTEDCHAR ");                              LEXTRACE("QUOTEDCHAR ");
                            if (!fill_args(yytext, 2, sawspace))                            if (!fill_args(sudoerstext, 2, sawspace))
                                 yyterminate();                                  yyterminate();
                             sawspace = false;                              sawspace = false;
                         }                          }
         YY_BREAK          YY_BREAK
 case 15:  case 15:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 247 "toke.l"#line 251 "toke.l"
 {  {
                             /* quoted sudoers special char, strip backslash */                              /* quoted sudoers special char, strip backslash */
                             LEXTRACE("QUOTEDCHAR ");                              LEXTRACE("QUOTEDCHAR ");
                            if (!fill_args(yytext + 1, 1, sawspace))                            if (!fill_args(sudoerstext + 1, 1, sawspace))
                                 yyterminate();                                  yyterminate();
                             sawspace = false;                              sawspace = false;
                         }                          }
         YY_BREAK          YY_BREAK
 case 16:  case 16:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 255 "toke.l"#line 259 "toke.l"
 {  {
                             BEGIN INITIAL;                              BEGIN INITIAL;
                             yyless(0);                              yyless(0);
Line 1939  YY_RULE_SETUP Line 2467  YY_RULE_SETUP
         YY_BREAK          YY_BREAK
 case 17:  case 17:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 261 "toke.l"#line 265 "toke.l"
 {  {
                             LEXTRACE("ARG ");                              LEXTRACE("ARG ");
                            if (!fill_args(yytext, yyleng, sawspace))                            if (!fill_args(sudoerstext, sudoersleng, sawspace))
                                 yyterminate();                                  yyterminate();
                             sawspace = false;                              sawspace = false;
                         }                       /* a command line arg */                          }                       /* a command line arg */
Line 1950  YY_RULE_SETUP Line 2478  YY_RULE_SETUP
   
 case 18:  case 18:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 269 "toke.l"#line 273 "toke.l"
 {  {
                               /* Only return DIGEST if the length is correct. */
                               if (sudoersleng == digest_len * 2) {
                                   if (!fill(sudoerstext, sudoersleng))
                                       yyterminate();
                                   BEGIN INITIAL;
                                   LEXTRACE("DIGEST ");
                                   LEXRETURN(DIGEST);
                               }
                               BEGIN INITIAL;
                               yyless(sudoersleng);
                           } /* hex digest */
           YY_BREAK
   case 19:
   YY_RULE_SETUP
   #line 286 "toke.l"
   {
                               /* Only return DIGEST if the length is correct. */
                               int len;
                               if (sudoerstext[sudoersleng - 1] == '=') {
                                   /* use padding */
                                   len = 4 * ((digest_len + 2) / 3);
                               } else {
                                   /* no padding */
                                   len = (4 * digest_len + 2) / 3;
                               }
                               if (sudoersleng == len) {
                                   if (!fill(sudoerstext, sudoersleng))
                                       yyterminate();
                                   BEGIN INITIAL;
                                   LEXTRACE("DIGEST ");
                                   LEXRETURN(DIGEST);
                               }
                               BEGIN INITIAL;
                               yyless(sudoersleng);
                           } /* base64 digest */
           YY_BREAK
   case 20:
   YY_RULE_SETUP
   #line 307 "toke.l"
   {
                             char *path;                              char *path;
   
                             if (continued) {                              if (continued) {
Line 1959  YY_RULE_SETUP Line 2527  YY_RULE_SETUP
                                 LEXRETURN(ERROR);                                  LEXRETURN(ERROR);
                             }                              }
   
                            if ((path = parse_include(yytext)) == NULL)                            if ((path = parse_include(sudoerstext)) == NULL)
                                 yyterminate();                                  yyterminate();
   
                             LEXTRACE("INCLUDE\n");                              LEXTRACE("INCLUDE\n");
Line 1969  YY_RULE_SETUP Line 2537  YY_RULE_SETUP
                                 yyterminate();                                  yyterminate();
                         }                          }
         YY_BREAK          YY_BREAK
case 19:case 21:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 287 "toke.l"#line 325 "toke.l"
 {  {
                             char *path;                              char *path;
   
Line 1980  YY_RULE_SETUP Line 2548  YY_RULE_SETUP
                                 LEXRETURN(ERROR);                                  LEXRETURN(ERROR);
                             }                              }
   
                            if ((path = parse_include(yytext)) == NULL)                            if ((path = parse_include(sudoerstext)) == NULL)
                                 yyterminate();                                  yyterminate();
   
                             LEXTRACE("INCLUDEDIR\n");                              LEXTRACE("INCLUDEDIR\n");
Line 1993  YY_RULE_SETUP Line 2561  YY_RULE_SETUP
                                 yyterminate();                                  yyterminate();
                         }                          }
         YY_BREAK          YY_BREAK
case 20:case 22:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 308 "toke.l"#line 346 "toke.l"
 {  {
                             char deftype;                              char deftype;
                             int n;                              int n;
Line 2005  YY_RULE_SETUP Line 2573  YY_RULE_SETUP
                                 LEXRETURN(ERROR);                                  LEXRETURN(ERROR);
                             }                              }
   
                            for (n = 0; isblank((unsigned char)yytext[n]); n++)                            for (n = 0; isblank((unsigned char)sudoerstext[n]); n++)
                                 continue;                                  continue;
                             n += sizeof("Defaults") - 1;                              n += sizeof("Defaults") - 1;
                            if ((deftype = yytext[n++]) != '\0') {                            if ((deftype = sudoerstext[n++]) != '\0') {
                                while (isblank((unsigned char)yytext[n]))                                while (isblank((unsigned char)sudoerstext[n]))
                                     n++;                                      n++;
                             }                              }
                             BEGIN GOTDEFS;                              BEGIN GOTDEFS;
Line 2036  YY_RULE_SETUP Line 2604  YY_RULE_SETUP
                             }                              }
                         }                          }
         YY_BREAK          YY_BREAK
case 21:case 23:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 348 "toke.l"#line 386 "toke.l"
 {  {
                             int n;                              int n;
   
Line 2047  YY_RULE_SETUP Line 2615  YY_RULE_SETUP
                                 LEXRETURN(ERROR);                                  LEXRETURN(ERROR);
                             }                              }
   
                            for (n = 0; isblank((unsigned char)yytext[n]); n++)                            for (n = 0; isblank((unsigned char)sudoerstext[n]); n++)
                                 continue;                                  continue;
                            switch (yytext[n]) {                            switch (sudoerstext[n]) {
                                 case 'H':                                  case 'H':
                                     LEXTRACE("HOSTALIAS ");                                      LEXTRACE("HOSTALIAS ");
                                     LEXRETURN(HOSTALIAS);                                      LEXRETURN(HOSTALIAS);
Line 2065  YY_RULE_SETUP Line 2633  YY_RULE_SETUP
                             }                              }
                         }                          }
         YY_BREAK          YY_BREAK
case 22:case 24:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 374 "toke.l"#line 412 "toke.l"
 {  {
                                 /* cmnd does not require passwd for this user */                                  /* cmnd does not require passwd for this user */
                                 LEXTRACE("NOPASSWD ");                                  LEXTRACE("NOPASSWD ");
                                 LEXRETURN(NOPASSWD);                                  LEXRETURN(NOPASSWD);
                         }                          }
         YY_BREAK          YY_BREAK
case 23:case 25:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 380 "toke.l"#line 418 "toke.l"
 {  {
                                 /* cmnd requires passwd for this user */                                  /* cmnd requires passwd for this user */
                                 LEXTRACE("PASSWD ");                                  LEXTRACE("PASSWD ");
                                 LEXRETURN(PASSWD);                                  LEXRETURN(PASSWD);
                         }                          }
         YY_BREAK          YY_BREAK
case 24:case 26:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 386 "toke.l"#line 424 "toke.l"
 {  {
                                 LEXTRACE("NOEXEC ");                                  LEXTRACE("NOEXEC ");
                                 LEXRETURN(NOEXEC);                                  LEXRETURN(NOEXEC);
                         }                          }
         YY_BREAK          YY_BREAK
case 25:case 27:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 391 "toke.l"#line 429 "toke.l"
 {  {
                                 LEXTRACE("EXEC ");                                  LEXTRACE("EXEC ");
                                 LEXRETURN(EXEC);                                  LEXRETURN(EXEC);
                         }                          }
         YY_BREAK          YY_BREAK
case 26:case 28:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 396 "toke.l"#line 434 "toke.l"
 {  {
                                 LEXTRACE("SETENV ");                                  LEXTRACE("SETENV ");
                                 LEXRETURN(SETENV);                                  LEXRETURN(SETENV);
                         }                          }
         YY_BREAK          YY_BREAK
case 27:case 29:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 401 "toke.l"#line 439 "toke.l"
 {  {
                                 LEXTRACE("NOSETENV ");                                  LEXTRACE("NOSETENV ");
                                 LEXRETURN(NOSETENV);                                  LEXRETURN(NOSETENV);
                         }                          }
         YY_BREAK          YY_BREAK
case 28:case 30:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 406 "toke.l"#line 444 "toke.l"
 {  {
                                 LEXTRACE("LOG_OUTPUT ");                                  LEXTRACE("LOG_OUTPUT ");
                                 LEXRETURN(LOG_OUTPUT);                                  LEXRETURN(LOG_OUTPUT);
                         }                          }
         YY_BREAK          YY_BREAK
case 29:case 31:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 411 "toke.l"#line 449 "toke.l"
 {  {
                                 LEXTRACE("NOLOG_OUTPUT ");                                  LEXTRACE("NOLOG_OUTPUT ");
                                 LEXRETURN(NOLOG_OUTPUT);                                  LEXRETURN(NOLOG_OUTPUT);
                         }                          }
         YY_BREAK          YY_BREAK
case 30:case 32:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 416 "toke.l"#line 454 "toke.l"
 {  {
                                 LEXTRACE("LOG_INPUT ");                                  LEXTRACE("LOG_INPUT ");
                                 LEXRETURN(LOG_INPUT);                                  LEXRETURN(LOG_INPUT);
                         }                          }
         YY_BREAK          YY_BREAK
case 31:case 33:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 421 "toke.l"#line 459 "toke.l"
 {  {
                                 LEXTRACE("NOLOG_INPUT ");                                  LEXTRACE("NOLOG_INPUT ");
                                 LEXRETURN(NOLOG_INPUT);                                  LEXRETURN(NOLOG_INPUT);
                         }                          }
         YY_BREAK          YY_BREAK
case 32:case 34:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 426 "toke.l"#line 464 "toke.l"
 {  {
                             /* empty group or netgroup */                              /* empty group or netgroup */
                             LEXTRACE("ERROR ");                              LEXTRACE("ERROR ");
                             LEXRETURN(ERROR);                              LEXRETURN(ERROR);
                         }                          }
         YY_BREAK          YY_BREAK
case 33:case 35:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 432 "toke.l"#line 470 "toke.l"
 {  {
                             /* netgroup */                              /* netgroup */
                            if (!fill(yytext, yyleng))                            if (!fill(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                             LEXTRACE("NETGROUP ");                              LEXTRACE("NETGROUP ");
                             LEXRETURN(NETGROUP);                              LEXRETURN(NETGROUP);
                         }                          }
         YY_BREAK          YY_BREAK
case 34:case 36:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 440 "toke.l"#line 478 "toke.l"
 {  {
                             /* group */                              /* group */
                            if (!fill(yytext, yyleng))                            if (!fill(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                             LEXTRACE("USERGROUP ");                              LEXTRACE("USERGROUP ");
                             LEXRETURN(USERGROUP);                              LEXRETURN(USERGROUP);
                         }                          }
         YY_BREAK          YY_BREAK
case 35:case 37:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 448 "toke.l"#line 486 "toke.l"
 {  {
                            if (!fill(yytext, yyleng))                            if (!fill(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                             LEXTRACE("NTWKADDR ");                              LEXTRACE("NTWKADDR ");
                             LEXRETURN(NTWKADDR);                              LEXRETURN(NTWKADDR);
                         }                          }
         YY_BREAK          YY_BREAK
case 36:case 38:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 455 "toke.l"#line 493 "toke.l"
 {  {
                            if (!fill(yytext, yyleng))                            if (!fill(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                             LEXTRACE("NTWKADDR ");                              LEXTRACE("NTWKADDR ");
                             LEXRETURN(NTWKADDR);                              LEXRETURN(NTWKADDR);
                         }                          }
         YY_BREAK          YY_BREAK
case 37:case 39:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 462 "toke.l"#line 500 "toke.l"
 {  {
                            if (!ipv6_valid(yytext)) {                            if (!ipv6_valid(sudoerstext)) {
                                 LEXTRACE("ERROR ");                                  LEXTRACE("ERROR ");
                                 LEXRETURN(ERROR);                                  LEXRETURN(ERROR);
                             }                              }
                            if (!fill(yytext, yyleng))                            if (!fill(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                             LEXTRACE("NTWKADDR ");                              LEXTRACE("NTWKADDR ");
                             LEXRETURN(NTWKADDR);                              LEXRETURN(NTWKADDR);
                         }                          }
         YY_BREAK          YY_BREAK
case 38:case 40:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 473 "toke.l"#line 511 "toke.l"
 {  {
                            if (!ipv6_valid(yytext)) {                            if (!ipv6_valid(sudoerstext)) {
                                 LEXTRACE("ERROR ");                                  LEXTRACE("ERROR ");
                                 LEXRETURN(ERROR);                                  LEXRETURN(ERROR);
                             }                              }
                            if (!fill(yytext, yyleng))                            if (!fill(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                             LEXTRACE("NTWKADDR ");                              LEXTRACE("NTWKADDR ");
                             LEXRETURN(NTWKADDR);                              LEXRETURN(NTWKADDR);
                         }                          }
         YY_BREAK          YY_BREAK
case 39:case 41:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 484 "toke.l"#line 522 "toke.l"
 {  {
                             LEXTRACE("ALL ");                              LEXTRACE("ALL ");
                             LEXRETURN(ALL);                              LEXRETURN(ALL);
   
                         }                          }
         YY_BREAK          YY_BREAK
case 40:case 42:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 490 "toke.l"#line 528 "toke.l"
 {  {
 #ifdef HAVE_SELINUX  #ifdef HAVE_SELINUX
                             LEXTRACE("ROLE ");                              LEXTRACE("ROLE ");
Line 2247  YY_RULE_SETUP Line 2815  YY_RULE_SETUP
 #endif  #endif
                         }                          }
         YY_BREAK          YY_BREAK
case 41:case 43:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 499 "toke.l"#line 537 "toke.l"
 {  {
 #ifdef HAVE_SELINUX  #ifdef HAVE_SELINUX
                             LEXTRACE("TYPE ");                              LEXTRACE("TYPE ");
Line 2259  YY_RULE_SETUP Line 2827  YY_RULE_SETUP
 #endif  #endif
                         }                          }
         YY_BREAK          YY_BREAK
case 42:case 44:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 508 "toke.l"#line 545 "toke.l"
 {  {
#ifndef HAVE_SELINUX#ifdef HAVE_PRIV_SET
                        got_alias:                            LEXTRACE("PRIVS ");
                             LEXRETURN(PRIVS);
 #else
                             goto got_alias;
 #endif  #endif
                            if (!fill(yytext, yyleng))                        }
         YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 554 "toke.l"
 {
 #ifdef HAVE_PRIV_SET
                             LEXTRACE("LIMITPRIVS ");
                             LEXRETURN(LIMITPRIVS);
 #else
                             goto got_alias;
 #endif
                         }
         YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 563 "toke.l"
 {
                         got_alias:
                             if (!fill(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                             LEXTRACE("ALIAS ");                              LEXTRACE("ALIAS ");
                             LEXRETURN(ALIAS);                              LEXRETURN(ALIAS);
                         }                          }
         YY_BREAK          YY_BREAK
case 43:case 47:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 518 "toke.l"#line 571 "toke.l"
 {  {
                               /* XXX - no way to specify digest for command */
                             /* no command args allowed for Defaults!/path */                              /* no command args allowed for Defaults!/path */
                            if (!fill_cmnd(yytext, yyleng))                            if (!fill_cmnd(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                             LEXTRACE("COMMAND ");                              LEXTRACE("COMMAND ");
                             LEXRETURN(COMMAND);                              LEXRETURN(COMMAND);
                         }                          }
         YY_BREAK          YY_BREAK
case 44:case 48:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 526 "toke.l"#line 580 "toke.l"
 {  {
                               digest_len = SHA224_DIGEST_LENGTH;
                               BEGIN WANTDIGEST;
                               LEXTRACE("SHA224 ");
                               LEXRETURN(SHA224);
                           }
           YY_BREAK
   case 49:
   YY_RULE_SETUP
   #line 587 "toke.l"
   {
                               digest_len = SHA256_DIGEST_LENGTH;
                               BEGIN WANTDIGEST;
                               LEXTRACE("SHA256 ");
                               LEXRETURN(SHA256);
                           }
           YY_BREAK
   case 50:
   YY_RULE_SETUP
   #line 594 "toke.l"
   {
                               digest_len = SHA384_DIGEST_LENGTH;
                               BEGIN WANTDIGEST;
                               LEXTRACE("SHA384 ");
                               LEXRETURN(SHA384);
                           }
           YY_BREAK
   case 51:
   YY_RULE_SETUP
   #line 601 "toke.l"
   {
                               digest_len = SHA512_DIGEST_LENGTH;
                               BEGIN WANTDIGEST;
                               LEXTRACE("SHA512 ");
                               LEXRETURN(SHA512);
                           }
           YY_BREAK
   case 52:
   YY_RULE_SETUP
   #line 608 "toke.l"
   {
                             BEGIN GOTCMND;                              BEGIN GOTCMND;
                             LEXTRACE("COMMAND ");                              LEXTRACE("COMMAND ");
                            if (!fill_cmnd(yytext, yyleng))                            if (!fill_cmnd(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                         }                       /* sudo -e */                          }                       /* sudo -e */
         YY_BREAK          YY_BREAK
case 45:case 53:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 533 "toke.l"#line 615 "toke.l"
 {  {
                             /* directories can't have args... */                              /* directories can't have args... */
                            if (yytext[yyleng - 1] == '/') {                            if (sudoerstext[sudoersleng - 1] == '/') {
                                 LEXTRACE("COMMAND ");                                  LEXTRACE("COMMAND ");
                                if (!fill_cmnd(yytext, yyleng))                                if (!fill_cmnd(sudoerstext, sudoersleng))
                                     yyterminate();                                      yyterminate();
                                 LEXRETURN(COMMAND);                                  LEXRETURN(COMMAND);
                             } else {                              } else {
                                 BEGIN GOTCMND;                                  BEGIN GOTCMND;
                                 LEXTRACE("COMMAND ");                                  LEXTRACE("COMMAND ");
                                if (!fill_cmnd(yytext, yyleng))                                if (!fill_cmnd(sudoerstext, sudoersleng))
                                     yyterminate();                                      yyterminate();
                             }                              }
                         }                       /* a pathname */                          }                       /* a pathname */
         YY_BREAK          YY_BREAK
case 46:case 54:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 548 "toke.l"#line 630 "toke.l"
 {  {
                             LEXTRACE("BEGINSTR ");                              LEXTRACE("BEGINSTR ");
                            yylval.string = NULL;                            sudoerslval.string = NULL;
                             prev_state = YY_START;                              prev_state = YY_START;
                             BEGIN INSTR;                              BEGIN INSTR;
                         }                          }
         YY_BREAK          YY_BREAK
case 47:case 55:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 555 "toke.l"#line 637 "toke.l"
 {  {
                             /* a word */                              /* a word */
                            if (!fill(yytext, yyleng))                            if (!fill(sudoerstext, sudoersleng))
                                 yyterminate();                                  yyterminate();
                             LEXTRACE("WORD(5) ");                              LEXTRACE("WORD(5) ");
                             LEXRETURN(WORD);                              LEXRETURN(WORD);
                         }                          }
         YY_BREAK          YY_BREAK
case 48:case 56:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 563 "toke.l"#line 645 "toke.l"
 {  {
                             LEXTRACE("( ");                              LEXTRACE("( ");
                             LEXRETURN('(');                              LEXRETURN('(');
                         }                          }
         YY_BREAK          YY_BREAK
case 49:case 57:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 568 "toke.l"#line 650 "toke.l"
 {  {
                             LEXTRACE(") ");                              LEXTRACE(") ");
                             LEXRETURN(')');                              LEXRETURN(')');
                         }                          }
         YY_BREAK          YY_BREAK
case 50:case 58:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 573 "toke.l"#line 655 "toke.l"
 {  {
                             LEXTRACE(", ");                              LEXTRACE(", ");
                             LEXRETURN(',');                              LEXRETURN(',');
                         }                       /* return ',' */                          }                       /* return ',' */
         YY_BREAK          YY_BREAK
case 51:case 59:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 578 "toke.l"#line 660 "toke.l"
 {  {
                             LEXTRACE("= ");                              LEXTRACE("= ");
                             LEXRETURN('=');                              LEXRETURN('=');
                         }                       /* return '=' */                          }                       /* return '=' */
         YY_BREAK          YY_BREAK
case 52:case 60:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 583 "toke.l"#line 665 "toke.l"
 {  {
                             LEXTRACE(": ");                              LEXTRACE(": ");
                             LEXRETURN(':');                              LEXRETURN(':');
                         }                       /* return ':' */                          }                       /* return ':' */
         YY_BREAK          YY_BREAK
case 53:case 61:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 588 "toke.l"#line 670 "toke.l"
 {  {
                            if (yyleng & 1) {                            if (sudoersleng & 1) {
                                 LEXTRACE("!");                                  LEXTRACE("!");
                                 LEXRETURN('!'); /* return '!' */                                  LEXRETURN('!'); /* return '!' */
                             }                              }
                         }                          }
         YY_BREAK          YY_BREAK
case 54:case 62:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 595 "toke.l"#line 677 "toke.l"
 {  {
                             if (YY_START == INSTR) {                              if (YY_START == INSTR) {
                                 LEXTRACE("ERROR ");                                  LEXTRACE("ERROR ");
Line 2397  YY_RULE_SETUP Line 3028  YY_RULE_SETUP
                             LEXRETURN(COMMENT);                              LEXRETURN(COMMENT);
                         }                       /* return newline */                          }                       /* return newline */
         YY_BREAK          YY_BREAK
case 55:case 63:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 607 "toke.l"#line 689 "toke.l"
 {                       /* throw away space/tabs */  {                       /* throw away space/tabs */
                             sawspace = true;    /* but remember for fill_args */                              sawspace = true;    /* but remember for fill_args */
                         }                          }
         YY_BREAK          YY_BREAK
case 56:case 64:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 611 "toke.l"#line 693 "toke.l"
 {  {
                             sawspace = true;    /* remember for fill_args */                              sawspace = true;    /* remember for fill_args */
                             sudolineno++;                              sudolineno++;
                             continued = true;                              continued = true;
                         }                       /* throw away EOL after \ */                          }                       /* throw away EOL after \ */
         YY_BREAK          YY_BREAK
case 57:case 65:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 617 "toke.l"#line 699 "toke.l"
 {  {
                            BEGIN INITIAL;                            if (sudoerstext[sudoersleng - 1] == '\n') {
                            sudolineno++;                                /* comment ending in a newline */
                            continued = false;                                BEGIN INITIAL;
                                 sudolineno++;
                                 continued = false;
                             } else if (!feof(yyin)) {
                                 LEXTRACE("ERROR ");
                                 LEXRETURN(ERROR);
                             }
                             LEXTRACE("#\n");                              LEXTRACE("#\n");
                             LEXRETURN(COMMENT);                              LEXRETURN(COMMENT);
                         }                       /* comment, not uid/gid */                          }                       /* comment, not uid/gid */
         YY_BREAK          YY_BREAK
case 58:case 66:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 625 "toke.l"#line 713 "toke.l"
 {  {
                             LEXTRACE("ERROR ");                              LEXTRACE("ERROR ");
                             LEXRETURN(ERROR);                              LEXRETURN(ERROR);
Line 2438  case YY_STATE_EOF(GOTCMND): Line 3075  case YY_STATE_EOF(GOTCMND):
 case YY_STATE_EOF(STARTDEFS):  case YY_STATE_EOF(STARTDEFS):
 case YY_STATE_EOF(INDEFS):  case YY_STATE_EOF(INDEFS):
 case YY_STATE_EOF(INSTR):  case YY_STATE_EOF(INSTR):
#line 630 "toke.l"case YY_STATE_EOF(WANTDIGEST):
 #line 718 "toke.l"
 {  {
                             if (YY_START != INITIAL) {                              if (YY_START != INITIAL) {
                                 BEGIN INITIAL;                                  BEGIN INITIAL;
Line 2449  case YY_STATE_EOF(INSTR): Line 3087  case YY_STATE_EOF(INSTR):
                                 yyterminate();                                  yyterminate();
                         }                          }
         YY_BREAK          YY_BREAK
case 59:case 67:
 YY_RULE_SETUP  YY_RULE_SETUP
#line 640 "toke.l"#line 728 "toke.l"
 ECHO;  ECHO;
         YY_BREAK          YY_BREAK
#line 2457 "lex.yy.c"#line 3095 "lex.sudoers.c"
   
         case YY_END_OF_BUFFER:          case YY_END_OF_BUFFER:
                 {                  {
Line 2594  ECHO; Line 3232  ECHO;
  *      EOB_ACT_END_OF_FILE - end of file   *      EOB_ACT_END_OF_FILE - end of file
  */   */
   
static int yy_get_next_buffer()static int yy_get_next_buffer YY_PROTO(( void ))
         {          {
         register char *dest = yy_current_buffer->yy_ch_buf;          register char *dest = yy_current_buffer->yy_ch_buf;
         register char *source = yytext_ptr;          register char *source = yytext_ptr;
Line 2726  static int yy_get_next_buffer() Line 3364  static int yy_get_next_buffer()
   
 /* yy_get_previous_state - get the state just before the EOB char was reached */  /* yy_get_previous_state - get the state just before the EOB char was reached */
   
static yy_state_type yy_get_previous_state()static yy_state_type yy_get_previous_state YY_PROTO(( void ))
         {          {
         register yy_state_type yy_current_state;          register yy_state_type yy_current_state;
         register char *yy_cp;          register char *yy_cp;
Line 2745  static yy_state_type yy_get_previous_state() Line 3383  static yy_state_type yy_get_previous_state()
                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )                  while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                         {                          {
                         yy_current_state = (int) yy_def[yy_current_state];                          yy_current_state = (int) yy_def[yy_current_state];
                        if ( yy_current_state >= 607 )                        if ( yy_current_state >= 814 )
                                 yy_c = yy_meta[(unsigned int) yy_c];                                  yy_c = yy_meta[(unsigned int) yy_c];
                         }                          }
                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];                  yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
Line 2780  yy_state_type yy_current_state; Line 3418  yy_state_type yy_current_state;
         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )          while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                 {                  {
                 yy_current_state = (int) yy_def[yy_current_state];                  yy_current_state = (int) yy_def[yy_current_state];
                if ( yy_current_state >= 607 )                if ( yy_current_state >= 814 )
                         yy_c = yy_meta[(unsigned int) yy_c];                          yy_c = yy_meta[(unsigned int) yy_c];
                 }                  }
         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];          yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
        yy_is_jam = (yy_current_state == 606);        yy_is_jam = (yy_current_state == 813);
   
         return yy_is_jam ? 0 : yy_current_state;          return yy_is_jam ? 0 : yy_current_state;
         }          }
Line 2837  register char *yy_bp; Line 3475  register char *yy_bp;
   
 #ifndef YY_NO_INPUT  #ifndef YY_NO_INPUT
 #ifdef __cplusplus  #ifdef __cplusplus
static int yyinput()static int yyinput YY_PROTO(( void ))
 #else  #else
static int input()static int input YY_PROTO(( void ))
 #endif  #endif
         {          {
         int c;          int c;
Line 3215  int new_state; Line 3853  int new_state;
   
   
 #ifndef YY_NO_POP_STATE  #ifndef YY_NO_POP_STATE
static void yy_pop_state()static void yy_pop_state YY_PROTO(( void ))
         {          {
         if ( --yy_start_stack_ptr < 0 )          if ( --yy_start_stack_ptr < 0 )
                 YY_FATAL_ERROR( "start-condition stack underflow" );                  YY_FATAL_ERROR( "start-condition stack underflow" );
Line 3226  static void yy_pop_state() Line 3864  static void yy_pop_state()
   
   
 #ifndef YY_NO_TOP_STATE  #ifndef YY_NO_TOP_STATE
static int yy_top_state()static int yy_top_state YY_PROTO(( void ))
         {          {
         return yy_start_stack[yy_start_stack_ptr - 1];          return yy_start_stack[yy_start_stack_ptr - 1];
         }          }
Line 3345  int main() Line 3983  int main()
         return 0;          return 0;
         }          }
 #endif  #endif
#line 640 "toke.l"#line 728 "toke.l"
   
 struct path_list {  struct path_list {
       SLIST_ENTRY(path_list) entries;
     char *path;      char *path;
     struct path_list *next;  
 };  };
   
   SLIST_HEAD(path_list_head, path_list);
   
 struct include_stack {  struct include_stack {
     YY_BUFFER_STATE bs;      YY_BUFFER_STATE bs;
     char *path;      char *path;
    struct path_list *more; /* more files in case of includedir */    struct path_list_head more; /* more files in case of includedir */
     int lineno;      int lineno;
     bool keepopen;      bool keepopen;
 };  };
   
   /*
    * Compare two struct path_list structs in reverse order.
    */
 static int  static int
 pl_compare(const void *v1, const void *v2)  pl_compare(const void *v1, const void *v2)
 {  {
     const struct path_list * const *p1 = v1;      const struct path_list * const *p1 = v1;
     const struct path_list * const *p2 = v2;      const struct path_list * const *p2 = v2;
   
    return strcmp((*p1)->path, (*p2)->path);    return strcmp((*p2)->path, (*p1)->path);
 }  }
   
 static char *  static char *
 switch_dir(struct include_stack *stack, char *dirpath)  switch_dir(struct include_stack *stack, char *dirpath)
 {  {
     DIR *dir;      DIR *dir;
    int i, count = 0;    unsigned int i, count = 0;
     unsigned int max_paths = 32;
     char *path = NULL;      char *path = NULL;
     struct dirent *dent;      struct dirent *dent;
     struct stat sb;      struct stat sb;
    struct path_list *pl, *first = NULL;    struct path_list *pl, **paths = NULL;
    struct path_list **sorted = NULL; 
     debug_decl(switch_dir, SUDO_DEBUG_PARSER)      debug_decl(switch_dir, SUDO_DEBUG_PARSER)
   
     if (!(dir = opendir(dirpath))) {      if (!(dir = opendir(dirpath))) {
         if (errno != ENOENT) {          if (errno != ENOENT) {
            char *errbuf;            warning("%s", dirpath);
            if (asprintf(&errbuf, _("%s: %s"), dirpath, strerror(errno)) != -1) {            sudoerserror(NULL);
                yyerror(errbuf); 
                free(errbuf); 
            } else { 
                yyerror(_("unable to allocate memory")); 
            } 
         }          }
         goto done;          goto done;
     }      }
       paths = malloc(sizeof(*paths) * max_paths);
       if (paths == NULL) {
           closedir(dir);
           goto bad;
       }
     while ((dent = readdir(dir))) {      while ((dent = readdir(dir))) {
         /* Ignore files that end in '~' or have a '.' in them. */          /* Ignore files that end in '~' or have a '.' in them. */
         if (dent->d_name[0] == '\0' || dent->d_name[NAMLEN(dent) - 1] == '~'          if (dent->d_name[0] == '\0' || dent->d_name[NAMLEN(dent) - 1] == '~'
Line 3412  switch_dir(struct include_stack *stack, char *dirpath) Line 4055  switch_dir(struct include_stack *stack, char *dirpath)
         if (pl == NULL)          if (pl == NULL)
             goto bad;              goto bad;
         pl->path = path;          pl->path = path;
        pl->next = first;        if (count >= max_paths) {
        first = pl;            struct path_list **tmp;
        count++;            max_paths <<= 1;
             tmp = realloc(paths, sizeof(*paths) * max_paths);
             if (tmp == NULL) {
                 closedir(dir);
                 goto bad;
             }
             paths = tmp;
         }
         paths[count++] = pl;
         path = NULL;
     }      }
     closedir(dir);      closedir(dir);
   
     if (count == 0)      if (count == 0)
         goto done;          goto done;
   
    /* Sort the list as an array. */    /* Sort the list as an array in reverse order. */
    sorted = malloc(sizeof(*sorted) * count);    qsort(paths, count, sizeof(*paths), pl_compare);
    if (sorted == NULL)
        goto bad;    /* Build up the list in sorted order. */
    pl = first; 
     for (i = 0; i < count; i++) {      for (i = 0; i < count; i++) {
        sorted[i] = pl;        SLIST_INSERT_HEAD(&stack->more, paths[i], entries);
        pl = pl->next; 
     }      }
     qsort(sorted, count, sizeof(*sorted), pl_compare);  
   
     /* Apply sorting to the list. */  
     first = sorted[0];  
     sorted[count - 1]->next = NULL;  
     for (i = 1; i < count; i++)  
         sorted[i - 1]->next = sorted[i];  
     efree(sorted);  
   
     /* Pull out the first element for parsing, leave the rest for later. */      /* Pull out the first element for parsing, leave the rest for later. */
    if (count) {    pl = SLIST_FIRST(&stack->more);
        path = first->path;    SLIST_REMOVE_HEAD(&stack->more, entries);
        pl = first->next;    path = pl->path;
        efree(first);    efree(pl);
        stack->more = pl; 
    } else { 
        path = NULL; 
    } 
 done:  done:
       efree(paths);
     efree(dirpath);      efree(dirpath);
     debug_return_str(path);      debug_return_str(path);
 bad:  bad:
    while (first != NULL) {    for (i = 0; i < count; i++) {
        pl = first;        efree(paths[i]->path);
        first = pl->next;        efree(paths[i]);
        free(pl->path); 
        free(pl); 
     }      }
    efree(sorted);    efree(paths);
     efree(dirpath);      efree(dirpath);
     efree(path);      efree(path);
     debug_return_str(NULL);      debug_return_str(NULL);
Line 3479  init_lexer(void) Line 4116  init_lexer(void)
   
     while (idepth) {      while (idepth) {
         idepth--;          idepth--;
        while ((pl = istack[idepth].more) != NULL) {        while ((pl = SLIST_FIRST(&istack[idepth].more)) != NULL) {
            istack[idepth].more = pl->next;            SLIST_REMOVE_HEAD(&istack[idepth].more, entries);
             efree(pl->path);              efree(pl->path);
             efree(pl);              efree(pl);
         }          }
         efree(istack[idepth].path);          efree(istack[idepth].path);
         if (idepth && !istack[idepth].keepopen)          if (idepth && !istack[idepth].keepopen)
             fclose(istack[idepth].bs->yy_input_file);              fclose(istack[idepth].bs->yy_input_file);
        yy_delete_buffer(istack[idepth].bs);        sudoers_delete_buffer(istack[idepth].bs);
     }      }
     efree(istack);      efree(istack);
     istack = NULL;      istack = NULL;
Line 3510  _push_include(char *path, bool isdir) Line 4147  _push_include(char *path, bool isdir)
   
     /* push current state onto stack */      /* push current state onto stack */
     if (idepth >= istacksize) {      if (idepth >= istacksize) {
           struct include_stack *new_istack;
   
         if (idepth > MAX_SUDOERS_DEPTH) {          if (idepth > MAX_SUDOERS_DEPTH) {
            yyerror(_("too many levels of includes"));            sudoerserror(N_("too many levels of includes"));
             debug_return_bool(false);              debug_return_bool(false);
         }          }
         istacksize += SUDOERS_STACK_INCREMENT;          istacksize += SUDOERS_STACK_INCREMENT;
        istack = (struct include_stack *) realloc(istack,        new_istack = (struct include_stack *) realloc(istack,
             sizeof(*istack) * istacksize);              sizeof(*istack) * istacksize);
        if (istack == NULL) {        if (new_istack == NULL) {
            yyerror(_("unable to allocate memory"));            warning(NULL);
             sudoerserror(NULL);
             debug_return_bool(false);              debug_return_bool(false);
         }          }
           istack = new_istack;
     }      }
       SLIST_INIT(&istack[idepth].more);
     if (isdir) {      if (isdir) {
         struct stat sb;          struct stat sb;
         switch (sudo_secure_dir(path, sudoers_uid, sudoers_gid, &sb)) {          switch (sudo_secure_dir(path, sudoers_uid, sudoers_gid, &sb)) {
Line 3537  _push_include(char *path, bool isdir) Line 4179  _push_include(char *path, bool isdir)
                 debug_return_bool(false);                  debug_return_bool(false);
             case SUDO_PATH_WRONG_OWNER:              case SUDO_PATH_WRONG_OWNER:
                 if (sudoers_warnings) {                  if (sudoers_warnings) {
                    warningx(_("%s is owned by uid %u, should be %u"),                       warningx(U_("%s is owned by uid %u, should be %u"),   
                         path, (unsigned int) sb.st_uid,                          path, (unsigned int) sb.st_uid,
                         (unsigned int) sudoers_uid);                          (unsigned int) sudoers_uid);
                 }                  }
                 debug_return_bool(false);                  debug_return_bool(false);
             case SUDO_PATH_WORLD_WRITABLE:              case SUDO_PATH_WORLD_WRITABLE:
                 if (sudoers_warnings) {                  if (sudoers_warnings) {
                    warningx(_("%s is world writable"), path);                    warningx(U_("%s is world writable"), path);
                 }                  }
                 debug_return_bool(false);                  debug_return_bool(false);
             case SUDO_PATH_GROUP_WRITABLE:              case SUDO_PATH_GROUP_WRITABLE:
                 if (sudoers_warnings) {                  if (sudoers_warnings) {
                    warningx(_("%s is owned by gid %u, should be %u"),                    warningx(U_("%s is owned by gid %u, should be %u"),
                         path, (unsigned int) sb.st_gid,                          path, (unsigned int) sb.st_gid,
                         (unsigned int) sudoers_gid);                          (unsigned int) sudoers_gid);
                 }                  }
Line 3559  _push_include(char *path, bool isdir) Line 4201  _push_include(char *path, bool isdir)
                 debug_return_bool(false);                  debug_return_bool(false);
         }          }
         if (!(path = switch_dir(&istack[idepth], path))) {          if (!(path = switch_dir(&istack[idepth], path))) {
            /* switch_dir() called yyerror() for us */            /* switch_dir() called sudoerserror() for us */
             debug_return_bool(false);              debug_return_bool(false);
         }          }
         while ((fp = open_sudoers(path, false, &keepopen)) == NULL) {          while ((fp = open_sudoers(path, false, &keepopen)) == NULL) {
             /* Unable to open path in includedir, go to next one, if any. */              /* Unable to open path in includedir, go to next one, if any. */
             efree(path);              efree(path);
            if ((pl = istack[idepth].more) == NULL)            if ((pl = SLIST_FIRST(&istack[idepth].more)) == NULL)
                 debug_return_bool(false);                  debug_return_bool(false);
               SLIST_REMOVE_HEAD(&istack[idepth].more, entries);
             path = pl->path;              path = pl->path;
             istack[idepth].more = pl->next;  
             efree(pl);              efree(pl);
         }          }
     } else {      } else {
         if ((fp = open_sudoers(path, true, &keepopen)) == NULL) {          if ((fp = open_sudoers(path, true, &keepopen)) == NULL) {
            char *errbuf;            /* The error was already printed by open_sudoers() */
            if (asprintf(&errbuf, _("%s: %s"), path, strerror(errno)) != -1) {            sudoerserror(NULL);
                yyerror(errbuf); 
                free(errbuf); 
            } else { 
                yyerror(_("unable to allocate memory")); 
            } 
             debug_return_bool(false);              debug_return_bool(false);
         }          }
         istack[idepth].more = NULL;  
     }      }
     /* Push the old (current) file and open the new one. */      /* Push the old (current) file and open the new one. */
     istack[idepth].path = sudoers; /* push old path */      istack[idepth].path = sudoers; /* push old path */
Line 3592  _push_include(char *path, bool isdir) Line 4228  _push_include(char *path, bool isdir)
     idepth++;      idepth++;
     sudolineno = 1;      sudolineno = 1;
     sudoers = path;      sudoers = path;
    yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE));    sudoers_switch_to_buffer(sudoers_create_buffer(fp, YY_BUF_SIZE));
   
     debug_return_bool(true);      debug_return_bool(true);
 }  }
Line 3609  pop_include(void) Line 4245  pop_include(void)
   
     if (!keepopen)      if (!keepopen)
         fclose(YY_CURRENT_BUFFER->yy_input_file);          fclose(YY_CURRENT_BUFFER->yy_input_file);
    yy_delete_buffer(YY_CURRENT_BUFFER);    sudoers_delete_buffer(YY_CURRENT_BUFFER);
     /* If we are in an include dir, move to the next file. */      /* If we are in an include dir, move to the next file. */
    while ((pl = istack[idepth - 1].more) != NULL) {    while ((pl = SLIST_FIRST(&istack[idepth - 1].more)) != NULL) {
         SLIST_REMOVE_HEAD(&istack[idepth - 1].more, entries);
         fp = open_sudoers(pl->path, false, &keepopen);          fp = open_sudoers(pl->path, false, &keepopen);
         if (fp != NULL) {          if (fp != NULL) {
             istack[idepth - 1].more = pl->next;  
             efree(sudoers);              efree(sudoers);
             sudoers = pl->path;              sudoers = pl->path;
             sudolineno = 1;              sudolineno = 1;
            yy_switch_to_buffer(yy_create_buffer(fp, YY_BUF_SIZE));            sudoers_switch_to_buffer(sudoers_create_buffer(fp, YY_BUF_SIZE));
             efree(pl);              efree(pl);
             break;              break;
         }          }
         /* Unable to open path in include dir, go to next one. */          /* Unable to open path in include dir, go to next one. */
         istack[idepth - 1].more = pl->next;  
         efree(pl->path);          efree(pl->path);
         efree(pl);          efree(pl);
     }      }
     /* If no path list, just pop the last dir on the stack. */      /* If no path list, just pop the last dir on the stack. */
     if (pl == NULL) {      if (pl == NULL) {
         idepth--;          idepth--;
        yy_switch_to_buffer(istack[idepth].bs);        sudoers_switch_to_buffer(istack[idepth].bs);
         efree(sudoers);          efree(sudoers);
         sudoers = istack[idepth].path;          sudoers = istack[idepth].path;
         sudolineno = istack[idepth].lineno;          sudolineno = istack[idepth].lineno;
Line 3674  parse_include(char *base) Line 4309  parse_include(char *base)
     len += (int)(ep - cp);      len += (int)(ep - cp);
     path = pp = malloc(len + dirlen + 1);      path = pp = malloc(len + dirlen + 1);
     if (path == NULL) {      if (path == NULL) {
        yyerror(_("unable to allocate memory"));        warning(NULL);
         sudoerserror(NULL);
         debug_return_str(NULL);          debug_return_str(NULL);
     }      }
     if (dirlen) {      if (dirlen) {
Line 3706  parse_include(char *base) Line 4342  parse_include(char *base)
 }  }
   
 #ifdef TRACELEXER  #ifdef TRACELEXER
static intint
 sudoers_trace_print(const char *msg)  sudoers_trace_print(const char *msg)
 {  {
     return fputs(msg, stderr);      return fputs(msg, stderr);
 }  }
 #else  #else
static intint
 sudoers_trace_print(const char *msg)  sudoers_trace_print(const char *msg)
 {  {
     static bool initialized;      static bool initialized;

Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.5


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>