]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[trac5096] regen flex/bison files
authorFrancis Dupont <fdupont@isc.org>
Tue, 10 Jan 2017 15:10:17 +0000 (15:10 +0000)
committerFrancis Dupont <fdupont@isc.org>
Tue, 10 Jan 2017 15:10:17 +0000 (15:10 +0000)
12 files changed:
src/bin/dhcp4/dhcp4_lexer.cc
src/bin/dhcp4/dhcp4_parser.cc
src/bin/dhcp4/dhcp4_parser.h
src/bin/dhcp4/location.hh
src/bin/dhcp4/position.hh
src/bin/dhcp4/stack.hh
src/bin/dhcp6/dhcp6_lexer.cc
src/bin/dhcp6/dhcp6_parser.cc
src/bin/dhcp6/dhcp6_parser.h
src/bin/dhcp6/location.hh
src/bin/dhcp6/position.hh
src/bin/dhcp6/stack.hh

index a1c08029237ac65ae60299144dcba1d92365cf38..fd40620e829c868bad8f0be156d60457826c84e1 100644 (file)
@@ -467,8 +467,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg  );
        (yy_c_buf_p) = yy_cp;
 
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 108
-#define YY_END_OF_BUFFER 109
+#define YY_NUM_RULES 107
+#define YY_END_OF_BUFFER 108
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -476,93 +476,93 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[780] =
+static yyconst flex_int16_t yy_accept[781] =
     {   0,
-      101,  101,    0,    0,    0,    0,    0,    0,    0,    0,
-      109,  107,   10,   11,  107,    1,  101,   98,  101,  101,
-      107,  100,   99,  107,  107,  107,  107,  107,   94,   95,
-      107,  107,  107,   96,   97,    5,    5,    5,  107,  107,
-      107,   10,   11,    0,    0,   90,    0,    0,    0,    0,
+      100,  100,    0,    0,    0,    0,    0,    0,    0,    0,
+      108,  106,   10,   11,  106,    1,  100,   97,  100,  100,
+      106,   99,   98,  106,  106,  106,  106,  106,   93,   94,
+      106,  106,  106,   95,   96,    5,    5,    5,  106,  106,
+      106,   10,   11,    0,    0,   89,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    1,  101,  101,
-        0,  100,  101,    3,    2,    6,    0,  101,    0,    0,
-        0,    0,    0,    0,    4,    0,    0,    9,    0,   91,
-        0,    0,    0,    0,    0,   93,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    1,  100,  100,
+        0,   99,  100,    3,    2,    6,    0,  100,    0,    0,
+        0,    0,    0,    0,    4,    0,    0,    9,    0,   90,
+        0,    0,    0,    0,    0,   92,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    2,
         0,    0,    0,    0,    0,    0,    0,    8,    0,    0,
-        0,    0,    0,   92,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   91,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   39,    0,    0,    0,    0,
+        0,    0,    0,   43,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  105,
+      103,    0,  102,  101,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      106,  104,    0,  103,  102,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,  104,  101,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   46,    0,
+        0,    0,   37,    0,    0,    0,    0,   58,    0,    0,
+
+        0,    0,   25,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   36,    0,    0,    0,
+        0,    0,    0,   39,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   56,   19,
+       23,    0,    0,    0,    0,    0,   12,   79,    0,    0,
+       67,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  105,  102,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   42,
-        0,    0,   33,    0,    0,    0,    0,   54,    0,    0,
-
-        0,    0,    0,   22,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   32,    0,    0,
-        0,    0,    0,    0,   35,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   52,   72,
-       19,   20,    0,    0,    0,    0,    0,   12,   80,    0,
-        0,   63,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       71,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   34,    0,    0,    0,
-        0,   64,    0,    0,    0,    0,    0,   59,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   21,    0,
+        0,    0,    0,    0,    0,   38,    0,    0,    0,    0,
+        0,   68,    0,    0,    0,    0,    0,   63,    0,    0,
 
         7,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   47,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   36,    0,
-        0,    0,    0,    0,   44,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   51,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   40,
+        0,    0,    0,    0,    0,   48,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       68,   45,    0,    0,    0,    0,    0,    0,   23,    0,
+       72,   49,    0,   20,    0,    0,    0,    0,    0,   26,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
-       29,    0,    0,    0,   81,    0,    0,    0,    0,    0,
+        0,   33,    0,    0,    0,   80,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   62,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   24,    0,    0,   18,
+        0,    0,    0,    0,    0,   53,    0,    0,    0,    0,
+        0,    0,    0,    0,   60,    0,    0,    0,    0,    0,
+       78,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       41,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   58,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,   21,    0,   18,    0,
-        0,    0,    0,    0,    0,   49,    0,    0,    0,    0,
-        0,    0,    0,    0,   56,    0,    0,    0,    0,   79,
+        0,    0,    0,   83,    0,   61,    0,    0,    0,   64,
+
+       52,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       59,    0,   15,    0,   69,    0,    0,    0,    0,    0,
+       34,    0,   71,   22,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   37,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   69,
-        0,    0,    0,    0,   84,    0,   57,    0,    0,   60,
+        0,    0,   66,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,   86,   35,    0,    0,    0,    0,   30,    0,
+        0,    0,   77,   76,    0,    0,    0,   55,    0,    0,
+        0,    0,    0,   74,    0,    0,    0,    0,    0,   42,
+        0,    0,   27,    0,    0,   44,   31,   65,    0,   57,
+        0,    0,   81,    0,    0,    0,    0,    0,    0,    0,
 
-       48,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   55,   70,    0,   15,    0,   65,    0,    0,    0,
-        0,    0,   30,    0,   67,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,   62,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,   87,   31,    0,    0,    0,    0,   26,
-        0,    0,    0,   78,   77,    0,    0,    0,   51,    0,
-        0,    0,    0,   75,    0,    0,    0,    0,    0,    0,
-       38,    0,    0,   24,    0,    0,   40,   27,   61,    0,
-       53,    0,    0,   82,    0,    0,    0,    0,    0,    0,
-
-        0,   73,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   89,   50,   76,    0,    0,   85,
-        0,    0,    0,   17,    0,   16,    0,   46,    0,    0,
-       25,    0,    0,    0,    0,   66,    0,    0,   86,    0,
-       88,   83,    0,   14,    0,    0,    0,   41,    0,    0,
-        0,   13,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   88,   54,    0,   75,    0,    0,   84,
+        0,    0,    0,   17,    0,   16,    0,   50,    0,    0,
+       29,    0,   28,    0,    0,    0,   70,    0,    0,   85,
+        0,   87,   82,    0,   14,    0,    0,    0,   45,    0,
+        0,    0,   13,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       28,    0,    0,   74,    0,    0,    0,   43,    0
+        0,   32,    0,    0,   73,    0,    0,    0,   47,    0
     } ;
 
 static yyconst YY_CHAR yy_ec[256] =
@@ -579,8 +579,8 @@ static yyconst YY_CHAR yy_ec[256] =
        32,   33,   34,    5,   35,    5,   36,   37,   38,   39,
 
        40,   41,   42,   43,   44,    5,   45,   46,   47,   48,
-       49,   50,    5,   51,   52,   53,   54,   55,   56,   57,
-       58,    5,   59,    5,   60,    5,    5,    5,    5,    5,
+       49,   50,   51,   52,   53,   54,   55,   56,   57,   58,
+       59,    5,   60,    5,   61,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
@@ -597,331 +597,331 @@ static yyconst YY_CHAR yy_ec[256] =
         5,    5,    5,    5,    5
     } ;
 
-static yyconst YY_CHAR yy_meta[61] =
+static yyconst YY_CHAR yy_meta[62] =
     {   0,
         1,    1,    2,    3,    3,    4,    3,    3,    3,    3,
-        3,    3,    5,    6,    6,    6,    3,    3,    3,    3,
-        6,    6,    6,    6,    6,    3,    3,    3,    3,    3,
-        3,    3,    5,    3,    3,    6,    7,    6,    6,    6,
-        7,    3,    3,    3,    3,    3,    3,    5,    3,    3,
-        5,    3,    5,    5,    3,    3,    3,    3,    3,    3
+        3,    3,    3,    5,    5,    5,    3,    3,    3,    3,
+        5,    5,    5,    5,    5,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    5,    5,    5,    5,    5,
+        5,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3
     } ;
 
 static yyconst flex_uint16_t yy_base[792] =
     {   0,
-        0,    0,   59,   62,   65,    0,   63,   67,   64,   66,
-     1083, 1084,   83, 1079,  125,    0,  174, 1084,  179,  185,
-       80,  192, 1084, 1061,   87,   79,   37,   66, 1084, 1084,
-       83,  156,  164, 1084, 1084, 1084,  110, 1067, 1031,    0,
-     1059,  118, 1074,  190,  218, 1084, 1027, 1032, 1025,  246,
-     1022, 1023,  178,  177,  164,  186,  190,  236, 1035,  207,
-      195,  242,  210,  252,  246, 1018, 1033,    0,  293,  298,
-      309,  315,  320, 1084,    0, 1084,  326,  331,  202,  249,
-      180,  270,  302,  206, 1084, 1030, 1061, 1084,  220, 1084,
-     1012, 1049, 1026, 1021, 1056,    0,  347, 1010, 1011, 1008,
-
-     1014,  245, 1002, 1003,  251, 1017, 1010, 1010,  198, 1002,
-      300,  993, 1039,  275,  996, 1037, 1011, 1008, 1008, 1002,
-      990,  995,  984,  987,  986,  299,  987,  988,  986,  328,
-      302,  997,  998,  996,  980,  984,  980,  989,  982,    0,
-      269,  332,  279,  325,  333,  349,  981, 1084,    0, 1015,
-      975,  982, 1017, 1084,  376,  986,  968,  982,  979,  978,
-      964, 1005,  979,  960,  967,  962,  972,  961,  973,  968,
-      963,  961,  952,  954,  967, 1084,  954,  961,  964,  947,
-      987,  946,  954,  957,  954,  940,  948,  941,  954,  937,
-      936,  941,  942,  946,  940,  934,  946,  941,  940,  924,
-
-      938,  932,  938,  927,  921,  933,  932,  920,  926,  369,
-     1084, 1084,  370, 1084, 1084,  915,    0,  153,  380,  924,
-      404,  909,  955,  911,  916,  957,  911,  920,  954,  917,
-      914,  391,  951,  945,  905,  903,  902,  900,  424,  911,
-      911,  896,  897,  908,  906,  901,  908,  903,  899,  935,
-      929,  890,  884,  890,  880,  891,  369,  895,  884,  884,
-      880,  872,  873,  877,  887,  875,  885,  884,  883,  916,
-      915,  914,  913,  879, 1084, 1084,  878,    0,  868,  861,
-      908,  907,  873,  863,  463,  904,  868,  864,  854, 1084,
-      857,  856, 1084,  858,  855,  304,  853, 1084,  863,  848,
-
-      849,  858,  886, 1084,  845,  859,  883,  887,  853,  847,
-      849,  850,  877,  839,  835,  834,  873, 1084,  831,  834,
-      828,  840,  830,  826, 1084,  871,  865,  827,  835,  834,
-      866,  860,  815,  818,  824,  814,  860,  812, 1084, 1084,
-     1084, 1084,  853,  823,    0,  809,  824, 1084, 1084,  812,
-      817, 1084,  814,  804,  845,  809,  803,  813,  812,  812,
-      801,  833,  802,  793,  795,  806,  798,  803,  795,  802,
-     1084,  789,  798,  802,  786,  797,  782,  776,  781,  794,
-      791,  819,  376,  776,  777,  774, 1084,  788,  779,  813,
-      812, 1084,  769,  785,  809,  766,  807, 1084,  416,  771,
-
-     1084,  776,  767,  762,  807,  766,  800,  267,  799,  762,
-      753,  796,  758,  767,  793,  759,  756,  757,  789,  755,
-      746,  757,  760,  755,  750,  755,  752,  755,  750,  783,
-      782,  741,  735,  746, 1084,  735,  743,  743,  775,  731,
-      721,  725,  724,  732,  722,  361,  716,   68, 1084,  767,
-      728,  720,  730,  763, 1084,  728,  723,  720,  726,  712,
-      727,  722,  711,  708,  714,  708,  717,  720,  703,  708,
-      716,  712,  745,  697,  697,  708,  707,  694,  692,  693,
-     1084, 1084,  699,  687,  396,  691,  689,  733, 1084,  691,
-      731,  692,  677,  687,  689,  683,  692,  724,  693,  670,
-
-     1084,  686,  685,  672, 1084,  713,  684,  686,  715,  671,
-      666,  672,  666,  710,  675,  665,  665,  659,  671,  670,
-      658,  657, 1084,  671,  654,  654,  428,  652,  667,  647,
-      661,  660,  646,  657,  644,  644, 1084,  648, 1084,  647,
-      643,  652,  642,  638,  683, 1084,  641,  637,  646,  649,
-      678,  635,  676,  629, 1084,  642,  673,  672,  628, 1084,
-      623,  624,  621,  633,  661,  635,  634,  614,  631,  661,
-      660, 1084,  621,  326,  658,  626,  626,  613,  609,  623,
-      652,  613,  650,  611,  614,  613,  601,  603,  597, 1084,
-      609,  608,  594,  608, 1084,  609, 1084,  592,  598, 1084,
-
-     1084,  605,  630,  587,  628,  632,  593,  584,  584,  598,
-      597, 1084, 1084,  593, 1084,  593, 1084,  594,  583,  575,
-      621,  620, 1084,  576, 1084,  571,  572,  570,  615,  315,
-      572,  613,  612,  573,  576,  568,  417,  574,  577,  559,
-      605,  566, 1084,  570,  568,  563,  553,  553,  598,  554,
-      550,  595,  589, 1084, 1084,  551,  592,  591,  590, 1084,
-      548,  588,  557, 1084, 1084,  545,  427,  551, 1084,  538,
-      522,  514,  490, 1084,  507,  533,   71,  178,  219,  234,
-     1084,  333,  367, 1084,  364,  372, 1084, 1084, 1084,  388,
-     1084,  399,  407, 1084,  404,  443,  444,  445,  408,  403,
-
-      448, 1084,  444,  404,  409,  453,  419,  455,  423,  457,
-      425,  425,  460,  428, 1084, 1084, 1084,  419,  429, 1084,
-      420,  465,  425, 1084,  430, 1084,  469, 1084,  441,  476,
-     1084,  477,  441,  484,  440, 1084,  481,  451, 1084,  488,
-     1084, 1084,  484, 1084,  447,  453,  492, 1084,  455,  468,
-      468, 1084,  468,  469,  470,  460,  460,  465,  470,  463,
-      463,  468,  474,  475,  481,  473,  481,  517,  482,  481,
-     1084,  520,  487, 1084,  477,  477,  524, 1084, 1084,  530,
-      537,  544,  551,  558,  565,  569,  574,  576,  578,  580,
-      582
+        0,    0,   60,   63,   66,    0,   64,   68,   65,   67,
+     1073, 1074,   84, 1069,  127,    0,  177, 1074,  182,  188,
+       81,  195, 1074, 1051,   88,   80,   64,  162, 1074, 1074,
+      179,  168,  177, 1074, 1074, 1074,  111, 1057, 1021,    0,
+     1049,  119, 1064,  207,  226, 1074, 1017, 1022, 1015,  254,
+     1011, 1013,  172,  184,  188,   68,  194,  207,  194,   82,
+      182,  219,  214,  243,   65, 1008, 1024,    0,  270,  289,
+      303,  308,  311, 1074,    0, 1074,  274,  322,  212,  231,
+      266,  270,  285,  284, 1074, 1021, 1052, 1074,  301, 1074,
+      327, 1041, 1018, 1013, 1048,    0,  369, 1001, 1003,  999,
+
+     1006,  302,  993,  994,  262, 1009, 1002, 1002, 1006,  993,
+      293, 1031, 1035,  986, 1028, 1002,  999,  999,  993,  980,
+      986,  979,  984,  972,  975,  974,  291,  975,  296,  976,
+      317,  300,  987,  988,  986,  969,  971,  980,  973,    0,
+      318,  331,  221,  333,  332,  348,  972, 1074,    0, 1006,
+      966,  973, 1008, 1074,  397,  977,  958,  973,  970,  969,
+      313,  997,  971,  951,  959,  954,  964,  953,  965,  956,
+      954,  944,  961, 1074,  956,  959,  941,  982,  940,  949,
+      952,  948,  937,  947,  932,  941,  934,  947,  929,  928,
+      934,  925,  934,  938,  932,  926,  938,  933,  932,  915,
+
+      930,  924,  930,  919,  912,  925,  912,  919,  349, 1074,
+     1074,  356, 1074, 1074,  907,    0,  351,  400,  917,  425,
+      901,  948,  903,  909,  950,  915,  902,  912,  946,  909,
+      906,  386,  943,  937,  897,  894,  892,  419,  905,  891,
+      903,  901,  896,  903,  898,  894,  892,  889,  928,  922,
+      883,  876,  883,  872,  884,  392,  885,  887,  876,  876,
+      871,  863,  864,  868,  879,  866,  877,  876,  875,  908,
+      907,  906,  872, 1074, 1074,  871,    0,  861,  853,  901,
+      900,  866,  856,  459,  897,  861,  857,  846, 1074,  861,
+      849,  848, 1074,  850,  847,  361,  845, 1074,  855,  839,
+
+      851,  879, 1074,  837,  852,  876,  847,  844,  845,  872,
+      834,  829,  828,  868,  832,  871, 1074,  823,  827,  820,
+      833,  823,  818, 1074,  864,  817,  857,  819,  827,  826,
+      858,  852,  806,  809,  816,  805,  852,  803, 1074, 1074,
+     1074,  845,  815,    0,  800,  816, 1074, 1074,  804,  809,
+     1074,  806,  795,  837,  793,  800,  793,  804,  803,  803,
+      792,  824,  793,  783,  798,  790,  795,  787,  794,  780,
+      795,  778,  790,  774,  768,  773,  787,  784, 1074,  783,
+      811,  324,  767,  768,  765, 1074,  778,  779,  770,  804,
+      803, 1074,  759,  776,  800,  756,  798, 1074,  411,  762,
+
+     1074,  767,  758,  752,  798,  757,  791,  413,  790,  789,
+      752,  742,  786,  748,  757,  783,  749,  746,  780,  746,
+      736,  748,  751,  746,  747,  744,  747,  742,  775,  774,
+      733,  772,  725,  737, 1074,  726,  734,  734,  766,  718,
+      721,  710,  714,  713,  722,  711,  721,  704,  404, 1074,
+      756,  717,  708,  719,  752, 1074,  717,  712,  709,  715,
+      699,  699,  715,  710,  699,  695,  702,  696,  705,  708,
+      697,  705,  701,  734,  685,  685,  697,  683,  681,  682,
+     1074, 1074,  689, 1074,  676,  363,  681,  678,  723, 1074,
+      677,  680,  720,  681,  665,  676,  678,  672,  714,  683,
+
+      659, 1074,  676,  675,  661, 1074,  703,  674,  676,  705,
+      666,  660,  654,  661,  654,  699,  664,  654,  654,  647,
+      660,  647,  646, 1074,  661,  643,  418,  642,  658,  637,
+      652,  651,  636,  648,  634,  634, 1074,  640,  638, 1074,
+      637,  633,  642,  632,  627, 1074,  632,  628,  637,  640,
+      669,  626,  667,  619, 1074,  624,  632,  663,  662,  618,
+     1074,  612,  613,  610,  623,  626,  625,  604,  622,  652,
+     1074,  613,  363,  650,  618,  618,  605,  600,  615,  644,
+      605,  642,  641,  602,  605,  604,  591,  594,  587,  600,
+      599,  584,  599, 1074,  600, 1074,  582,  594,  588, 1074,
+
+     1074,  595,  620,  576,  618,  622,  574,  574,  589,  588,
+     1074,  584, 1074,  584, 1074,  585,  574,  565,  612,  611,
+     1074,  567, 1074, 1074,  561,  562,  560,  606,  391,  563,
+      604,  603,  564,  567,  559,  436,  556,  564,  567,  548,
+      595,  556, 1074,  559,  554,  543,  543,  589,  545,  540,
+      586,  580, 1074, 1074,  542,  583,  582,  581, 1074,  539,
+      579,  548, 1074, 1074,  536,  421,  542, 1074,  528,  525,
+      525,  524,  518, 1074,  537,  522,   29,   48,  155, 1074,
+      160,  191, 1074,  199,  218, 1074, 1074, 1074,  279, 1074,
+      319,  336, 1074,  343,  422,  425,  389,  447,  410,  405,
+
+      450,  448,  407,  419,  463,  429,  471,  439,  473,  446,
+      446,  481,  449, 1074, 1074,  483, 1074,  441,  451, 1074,
+      442,  487,  446, 1074,  457, 1074,  496, 1074,  463,  498,
+     1074,  499, 1074,  458,  501,  456, 1074,  498,  468, 1074,
+      505, 1074, 1074,  501, 1074,  464,  470,  509, 1074,  466,
+      479,  479, 1074,  479,  480,  481,  470,  470,  476,  481,
+      473,  473,  479,  485,  486,  492,  484,  492,  528,  493,
+      492, 1074,  531,  498, 1074,  487,  487,  535, 1074, 1074,
+      541,  546,  551,  556,  561,  566,  569,  543,  548,  550,
+      563
 
     } ;
 
 static yyconst flex_int16_t yy_def[792] =
     {   0,
-      779,    1,  780,  780,    1,    5,    5,    5,    5,    5,
-      779,  779,  779,  779,  779,  781,  779,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  782,
-      779,  779,  779,  783,   15,  779,   45,   45,   45,  784,
+      780,    1,  781,  781,    1,    5,    5,    5,    5,    5,
+      780,  780,  780,  780,  780,  782,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  783,
+      780,  780,  780,  784,   15,  780,   45,   45,   45,  785,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,  781,  779,  779,
-      779,  779,  779,  779,  785,  779,  779,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  782,  779,  783,  779,
-      786,   45,   45,   45,  787,   45,  784,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,  782,  780,  780,
+      780,  780,  780,  780,  786,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  783,  780,  784,  780,
+      780,   45,   45,   45,  787,   45,  785,   45,   45,   45,
 
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,  785,
-      779,  779,  779,  779,  779,  779,  779,  779,  788,   45,
-       45,   45,  787,  779,  784,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,  786,
+      780,  780,  780,  780,  780,  780,  780,  780,  788,   45,
+       45,   45,  787,  780,  785,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,  779,   45,   45,   45,   45,
+       45,   45,   45,  780,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-       45,   45,   45,   45,   45,   45,   45,   45,   45,  779,
-      779,  779,  779,  779,  779,  779,  789,   45,   45,   45,
-      784,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,  780,  780,
+      780,  780,  780,  780,  780,  789,   45,   45,   45,  785,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,  779,  779,  779,  790,   45,   45,
-       45,   45,   45,   45,  784,   45,   45,   45,   45,  779,
-       45,   45,  779,   45,   45,   45,   45,  779,   45,   45,
-
-       45,   45,   45,  779,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,  779,   45,   45,
-       45,   45,   45,   45,  779,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,  779,  779,
-      779,  779,   45,  779,  791,   45,   45,  779,  779,   45,
-       45,  779,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-      779,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,  779,   45,   45,   45,
-       45,  779,   45,   45,   45,   45,   45,  779,   45,   45,
+       45,   45,   45,  780,  780,  780,  790,   45,   45,   45,
+       45,   45,   45,  785,   45,   45,   45,   45,  780,   45,
+       45,   45,  780,   45,   45,   45,   45,  780,   45,   45,
+
+       45,   45,  780,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,  780,   45,   45,   45,
+       45,   45,   45,  780,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,  780,  780,
+      780,   45,  780,  791,   45,   45,  780,  780,   45,   45,
+      780,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,  780,   45,
+       45,   45,   45,   45,   45,  780,   45,   45,   45,   45,
+       45,  780,   45,   45,   45,   45,   45,  780,   45,   45,
 
-      779,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+      780,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,  779,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,  779,   45,
-       45,   45,   45,   45,  779,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,  780,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,  780,
+       45,   45,   45,   45,   45,  780,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-      779,  779,   45,   45,   45,   45,   45,   45,  779,   45,
+      780,  780,   45,  780,   45,   45,   45,   45,   45,  780,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
 
-      779,   45,   45,   45,  779,   45,   45,   45,   45,   45,
+       45,  780,   45,   45,   45,  780,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,  779,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,  779,   45,  779,   45,
-       45,   45,   45,   45,   45,  779,   45,   45,   45,   45,
-       45,   45,   45,   45,  779,   45,   45,   45,   45,  779,
+       45,   45,   45,  780,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,  780,   45,   45,  780,
+       45,   45,   45,   45,   45,  780,   45,   45,   45,   45,
+       45,   45,   45,   45,  780,   45,   45,   45,   45,   45,
+      780,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+      780,   45,   45,   45,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,  779,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,   45,   45,   45,   45,   45,  779,
-       45,   45,   45,   45,  779,   45,  779,   45,   45,  779,
+       45,   45,   45,  780,   45,  780,   45,   45,   45,  780,
 
-      779,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,  779,  779,   45,  779,   45,  779,   45,   45,   45,
-       45,   45,  779,   45,  779,   45,   45,   45,   45,   45,
+      780,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+      780,   45,  780,   45,  780,   45,   45,   45,   45,   45,
+      780,   45,  780,  780,   45,   45,   45,   45,   45,   45,
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,  779,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,  779,  779,   45,   45,   45,   45,  779,
-       45,   45,   45,  779,  779,   45,   45,   45,  779,   45,
-       45,   45,   45,  779,   45,   45,   45,   45,   45,   45,
-      779,   45,   45,  779,   45,   45,  779,  779,  779,   45,
-      779,   45,   45,  779,   45,   45,   45,   45,   45,   45,
-
-       45,  779,   45,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,   45,  779,  779,  779,   45,   45,  779,
-       45,   45,   45,  779,   45,  779,   45,  779,   45,   45,
-      779,   45,   45,   45,   45,  779,   45,   45,  779,   45,
-      779,  779,   45,  779,   45,   45,   45,  779,   45,   45,
-       45,  779,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,  780,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,  780,  780,   45,   45,   45,   45,  780,   45,
+       45,   45,  780,  780,   45,   45,   45,  780,   45,   45,
+       45,   45,   45,  780,   45,   45,   45,   45,   45,  780,
+       45,   45,  780,   45,   45,  780,  780,  780,   45,  780,
+       45,   45,  780,   45,   45,   45,   45,   45,   45,   45,
+
        45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
-      779,   45,   45,  779,   45,   45,   45,  779,    0,  779,
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
-      779
+       45,   45,   45,  780,  780,   45,  780,   45,   45,  780,
+       45,   45,   45,  780,   45,  780,   45,  780,   45,   45,
+      780,   45,  780,   45,   45,   45,  780,   45,   45,  780,
+       45,  780,  780,   45,  780,   45,   45,   45,  780,   45,
+       45,   45,  780,   45,   45,   45,   45,   45,   45,   45,
+       45,   45,   45,   45,   45,   45,   45,   45,   45,   45,
+       45,  780,   45,   45,  780,   45,   45,   45,  780,    0,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780
 
     } ;
 
-static yyconst flex_uint16_t yy_nxt[1145] =
+static yyconst flex_uint16_t yy_nxt[1136] =
     {   0,
        12,   13,   14,   13,   12,   15,   16,   12,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   12,   12,
        12,   12,   12,   25,   26,   12,   27,   12,   12,   28,
        12,   29,   12,   30,   12,   12,   12,   12,   12,   25,
        31,   12,   12,   12,   12,   12,   12,   32,   12,   12,
-       12,   12,   33,   12,   12,   12,   12,   12,   34,   35,
-       37,   14,   37,   37,   14,   37,   38,   80,   40,   38,
-       12,   12,   40,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   41,   42,   41,   42,   74,   12,   12,
-       80,   12,   75,   81,   12,   77,   12,   77,   12,   79,
-
-       78,   78,   78,   79,   12,   12,   12,   12,   39,   12,
-       12,   42,   12,   42,   79,  499,   81,   12,   82,   42,
-      500,   42,  703,   12,   12,   44,   44,   44,   45,   45,
-       46,   45,   45,   45,   45,   45,   45,   45,   45,   47,
-       45,   45,   45,   45,   45,   45,   45,   48,   45,   45,
-       49,   45,   45,   45,   45,   45,   45,   50,   45,   45,
-       51,   52,   53,   54,   55,   45,   45,   56,   57,   45,
-       58,   59,   60,   61,   62,   63,   64,   65,   66,   67,
-       45,   45,   45,   45,   45,   69,   80,   70,   70,   70,
-       69,   81,   72,   72,   72,   90,  279,   71,   73,   73,
-
-       73,  108,   71,   69,  280,   72,   72,   72,   71,   83,
-      143,  109,  104,   71,   84,   71,  105,  704,   71,  106,
-      110,  100,   91,  101,   71,   90,  102,  141,  114,  103,
-      107,   71,   45,  143,  111,  169,  143,  115,  112,  116,
-       45,  113,  122,   45,  124,  129,  123,  141,  125,  130,
-      170,   96,   91,   45,   45,   45,   45,   45,   45,  146,
-       45,   45,  705,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,  706,  142,  117,  118,  126,   45,  119,
-      176,  127,   45,  160,  120,  135,   45,  164,  165,  136,
-      128,  131,  161,   45,  142,  141,   45,  210,   45,   97,
-
-      132,  133,  212,  137,  458,  134,   73,   73,   73,   69,
-      459,   70,   70,   70,  177,  144,   71,   77,  212,   77,
-      210,   71,   78,   78,   78,  661,   69,  142,   72,   72,
-       72,  615,   71,   73,   73,   73,  616,   71,   71,   78,
-       78,   78,  360,   71,   78,   78,   78,  145,  172,  189,
-      190,  173,  200,  210,   71,  361,  201,  211,  211,   71,
-      155,  155,  155,  194,  195,  196,  662,  155,  155,  155,
-      155,  155,  212,  197,  325,  198,  213,  211,  214,  199,
-      707,  435,  155,  155,  155,  155,  155,  155,  215,  221,
-      221,  221,  275,  275,  281,  282,  221,  221,  221,  221,
-
-      221,  296,  283,  496,  497,  297,  708,  709,  275,  276,
-      436,  221,  221,  221,  221,  221,  221,  285,  285,  285,
-      326,  449,  669,  710,  285,  285,  285,  285,  285,  304,
-      450,  533,  694,  572,  305,  534,  711,  695,  573,  285,
-      285,  285,  285,  285,  285,  712,  713,  714,  715,  716,
-      717,  718,  719,  720,  721,  722,  670,  723,  724,  725,
-      726,  727,  728,  729,  730,  731,  732,  733,  734,  735,
-      736,  306,  737,  738,  739,  307,   45,   45,   45,  574,
-      740,  741,  742,   45,   45,   45,   45,   45,  743,  744,
-      745,  746,  747,  748,  749,  750,  751,  752,   45,   45,
-
-       45,   45,   45,   45,  753,  754,  755,  756,  757,  758,
+       12,   12,   12,   33,   12,   12,   12,   12,   12,   34,
+       35,   37,   14,   37,   37,   14,   37,   38,  703,   40,
+       38,   12,   12,   40,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   41,   42,   41,   42,   74,   12,
+       12,  704,   12,   75,   80,   12,   77,   12,   77,   12,
+
+       79,   78,   78,   78,  136,   12,   12,   12,   12,   39,
+       12,   12,   42,   12,   42,   79,  111,  123,   80,   12,
+       42,  124,   42,  137,  112,   12,   12,   44,   44,   44,
+       45,   45,   46,   45,   45,   45,   45,   45,   45,   45,
+       45,   47,   45,   45,   45,   45,   45,   45,   45,   48,
+       45,   45,   49,   45,   45,   45,   45,   45,   45,   50,
+       45,   45,   51,   52,   53,   54,   55,   45,   45,   56,
+       57,   45,   58,   59,   60,   61,   62,   45,   63,   64,
+       65,   66,   67,   45,   45,   45,   45,   45,   69,   81,
+       70,   70,   70,   69,  705,   72,   72,   72,   80,   79,
+
+       71,   73,   73,   73,   81,   71,   69,  706,   72,   72,
+       72,   71,   90,   81,   82,  100,   71,  101,   71,  104,
+      102,   71,   83,  105,  103,  108,  106,   71,   84,  120,
+      707,  125,  113,  121,   71,  109,  126,  141,  107,   91,
+       45,  114,  708,  115,  211,  110,  116,  117,   45,  130,
+      118,   45,  122,  131,  127,  119,  142,  141,  128,   96,
+      211,   45,   45,   45,   45,   45,   45,  129,   45,   45,
+      709,   45,   45,   45,   45,   45,  142,   45,   45,   45,
+       45,   45,  132,   73,   73,   73,   45,   78,   78,   78,
+       45,  133,  134,   71,   45,  141,  143,  135,  164,  165,
+
+       69,   45,   70,   70,   70,   45,   90,   45,   97,   71,
+      142,   77,   71,   77,  143,  144,   78,   78,   78,   69,
+      143,   72,   72,   72,   73,   73,   73,  710,   71,  435,
+      145,   71,   89,   91,   71,   78,   78,   78,  146,   89,
+      160,  171,  188,  189,  191,  172,  209,   71,  192,  161,
+       71,  200,  194,  195,  196,  201,  210,  210,  436,   89,
+      226,  209,  197,   89,  198,  711,  227,   89,  613,  199,
+      209,  211,  274,  614,   89,  712,  210,  213,   89,  274,
+       89,  149,  155,  155,  155,  212,  713,  214,  274,  155,
+      155,  155,  155,  155,  278,  275,  296,  324,  533,  360,
+
+      297,  660,  534,  279,  155,  155,  155,  155,  155,  155,
+      220,  220,  220,  361,  280,  281,  450,  220,  220,  220,
+      220,  220,  282,  571,  303,  451,  693,  714,  572,  304,
+      715,  694,  220,  220,  220,  220,  220,  220,  284,  284,
+      284,  668,  716,  661,  325,  284,  284,  284,  284,  284,
+      459,  500,  717,  718,  719,  720,  460,  501,  721,  722,
+      284,  284,  284,  284,  284,  284,  305,  723,  724,  725,
+      573,  306,   45,   45,   45,  669,  726,  727,  728,   45,
+       45,   45,   45,   45,  729,  730,  731,  732,  733,  734,
+      735,  736,  737,  738,   45,   45,   45,   45,   45,   45,
+
+      739,  740,  741,  742,  743,  744,  745,  746,  747,  748,
+      749,  750,  751,  752,  753,  754,  755,  756,  757,  758,
       759,  760,  761,  762,  763,  764,  765,  766,  767,  768,
       769,  770,  771,  772,  773,  774,  775,  776,  777,  778,
-       36,   36,   36,   36,   36,   36,   36,   68,  702,   68,
-       68,   68,   68,   68,   87,  701,   87,  700,   87,   87,
-       87,   89,   89,   89,   89,   89,   89,   89,   95,   95,
-       95,   95,   95,   95,   95,  140,  699,  140,  140,  140,
-      140,  140,   89,   89,  698,   89,  153,  153,  153,  153,
-      153,  217,  217,  278,  278,  345,  345,   89,   89,  697,
-      696,  693,  692,  691,  690,  689,  688,  687,  686,  685,
-
+      779,   36,   36,   36,   36,   36,   68,  216,   68,   68,
+       68,   87,  277,   87,  344,   87,   89,   89,   89,   89,
+       89,   95,   95,   95,   95,   95,  140,   89,  140,  140,
+      140,  153,  153,  153,  702,  701,  700,  699,  698,  697,
+      696,  695,  692,  691,  690,  689,  688,  687,  686,  685,
       684,  683,  682,  681,  680,  679,  678,  677,  676,  675,
-      674,  673,  672,  671,  668,  667,  666,  665,  664,  663,
-      660,  659,  658,  657,  656,  655,  654,  653,  652,  651,
+
+      674,  673,  672,  671,  670,  667,  666,  665,  664,  663,
+      662,  659,  658,  657,  656,  655,  654,  653,  652,  651,
       650,  649,  648,  647,  646,  645,  644,  643,  642,  641,
       640,  639,  638,  637,  636,  635,  634,  633,  632,  631,
       630,  629,  628,  627,  626,  625,  624,  623,  622,  621,
-      620,  619,  618,  617,  614,  613,  612,  611,  610,  609,
+      620,  619,  618,  617,  616,  615,  612,  611,  610,  609,
       608,  607,  606,  605,  604,  603,  602,  601,  600,  599,
       598,  597,  596,  595,  594,  593,  592,  591,  590,  589,
       588,  587,  586,  585,  584,  583,  582,  581,  580,  579,
+      578,  577,  576,  575,  574,  570,  569,  568,  567,  566,
 
-      578,  577,  576,  575,  571,  570,  569,  568,  567,  566,
       565,  564,  563,  562,  561,  560,  559,  558,  557,  556,
       555,  554,  553,  552,  551,  550,  549,  548,  547,  546,
       545,  544,  543,  542,  541,  540,  539,  538,  537,  536,
       535,  532,  531,  530,  529,  528,  527,  526,  525,  524,
       523,  522,  521,  520,  519,  518,  517,  516,  515,  514,
       513,  512,  511,  510,  509,  508,  507,  506,  505,  504,
-      503,  502,  501,  498,  495,  494,  493,  492,  491,  490,
-      489,  488,  487,  486,  485,  484,  483,  482,  481,  480,
-      479,  478,  477,  476,  475,  474,  473,  472,  471,  470,
-
-      469,  468,  467,  466,  465,  464,  463,  462,  461,  460,
-      457,  456,  455,  454,  453,  452,  451,  448,  447,  446,
-      445,  444,  443,  442,  441,  440,  439,  438,  437,  434,
-      433,  432,  431,  430,  429,  428,  427,  426,  425,  424,
-      423,  422,  421,  420,  419,  418,  417,  416,  415,  414,
-      413,  412,  411,  410,  409,  408,  407,  406,  405,  404,
-      403,  402,  401,  400,  399,  398,  397,  396,  395,  394,
-      393,  392,  391,  390,  389,  388,  387,  386,  385,  384,
-      383,  382,  381,  380,  379,  378,  377,  376,  375,  374,
-      373,  372,  371,  370,  369,  368,  367,  366,  365,  364,
-
-      363,  362,  359,  358,  357,  356,  355,  354,  353,  352,
-      351,  350,  349,  348,  347,  346,  344,  343,  342,  341,
-      340,  339,  338,  337,  336,  335,  334,  333,  332,  331,
-      330,  329,  328,  327,  324,  323,  322,  321,  320,  319,
-      318,  317,  316,  315,  314,  313,  312,  311,  310,  309,
-      308,  303,  302,  301,  300,  299,  298,  295,  294,  293,
-      292,  291,  290,  289,  288,  287,  286,  284,  277,  274,
-      273,  272,  271,  270,  269,  268,  267,  266,  265,  264,
-      263,  262,  261,  260,  259,  258,  257,  256,  255,  254,
-      253,  252,  251,  250,  249,  248,  247,  246,  245,  244,
-
-      243,  242,  241,  240,  239,  238,  237,  236,  235,  234,
-      233,  232,  231,  230,  229,  228,  227,  226,  225,  224,
-      223,  222,  154,  220,  219,  218,  216,  209,  208,  207,
-      206,  205,  204,  203,  202,  193,  192,  191,  188,  187,
-      186,  185,  184,  183,  182,  181,  180,  179,  178,  175,
-      174,  171,  168,  167,  166,  163,  162,  159,  158,  157,
-      156,  154,  152,  151,  150,  149,  148,  147,  139,  138,
-      121,   99,   98,   94,   93,   92,   43,   88,   86,   85,
-       76,   43,  779,   11,  779,  779,  779,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
-
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
-      779,  779,  779,  779
+      503,  502,  499,  498,  497,  496,  495,  494,  493,  492,
+      491,  490,  489,  488,  487,  486,  485,  484,  483,  482,
+      481,  480,  479,  478,  477,  476,  475,  474,  473,  472,
+      471,  470,  469,  468,  467,  466,  465,  464,  463,  462,
+
+      461,  458,  457,  456,  455,  454,  453,  452,  449,  448,
+      447,  446,  445,  444,  443,  442,  441,  440,  439,  438,
+      437,  434,  433,  432,  431,  430,  429,  428,  427,  426,
+      425,  424,  423,  422,  421,  420,  419,  418,  417,  416,
+      415,  414,  413,  412,  411,  410,  409,  408,  407,  406,
+      405,  404,  403,  402,  401,  400,  399,  398,  397,  396,
+      395,  394,  393,  392,  391,  390,  389,  388,  387,  386,
+      385,  384,  383,  382,  381,  380,  379,  378,  377,  376,
+      375,  374,  373,  372,  371,  370,  369,  368,  367,  366,
+      365,  364,  363,  362,  359,  358,  357,  356,  355,  354,
+
+      353,  352,  351,  350,  349,  348,  347,  346,  345,  343,
+      342,  341,  340,  339,  338,  337,  336,  335,  334,  333,
+      332,  331,  330,  329,  328,  327,  326,  323,  322,  321,
+      320,  319,  318,  317,  316,  315,  314,  313,  312,  311,
+      310,  309,  308,  307,  302,  301,  300,  299,  298,  295,
+      294,  293,  292,  291,  290,  289,  288,  287,  286,  285,
+      283,  276,  273,  272,  271,  270,  269,  268,  267,  266,
+      265,  264,  263,  262,  261,  260,  259,  258,  257,  256,
+      255,  254,  253,  252,  251,  250,  249,  248,  247,  246,
+      245,  244,  243,  242,  241,  240,  239,  238,  237,  236,
+
+      235,  234,  233,  232,  231,  230,  229,  228,  225,  224,
+      223,  222,  221,  154,  219,  218,  217,  215,  208,  207,
+      206,  205,  204,  203,  202,  193,  190,  187,  186,  185,
+      184,  183,  182,  181,  180,  179,  178,  177,  176,  175,
+      174,  173,  170,  169,  168,  167,  166,  163,  162,  159,
+      158,  157,  156,  154,  152,  151,  150,  148,  147,  139,
+      138,   99,   98,   94,   93,   92,   43,   88,   86,   85,
+       76,   43,  780,   11,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780
     } ;
 
-static yyconst flex_int16_t yy_chk[1145] =
+static yyconst flex_int16_t yy_chk[1136] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -929,126 +929,125 @@ static yyconst flex_int16_t yy_chk[1145] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        3,    3,    3,    4,    4,    4,    3,   27,    7,    4,
-        5,    5,    8,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    9,   13,   10,   13,   21,    5,    5,
-       27,    5,   21,   28,    5,   25,    5,   25,    5,   26,
-
-       25,   25,   25,   31,    5,    5,    7,    9,    5,   10,
-        8,   37,    5,   37,   26,  448,   28,    5,   31,   42,
-      448,   42,  677,    5,    5,   15,   15,   15,   15,   15,
+        1,    3,    3,    3,    4,    4,    4,    3,  677,    7,
+        4,    5,    5,    8,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    9,   13,   10,   13,   21,    5,
+        5,  678,    5,   21,   27,    5,   25,    5,   25,    5,
+
+       26,   25,   25,   25,   65,    5,    5,    7,    9,    5,
+       10,    8,   37,    5,   37,   26,   56,   60,   27,    5,
+       42,   60,   42,   65,   56,    5,    5,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
        15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       15,   15,   15,   15,   15,   17,   32,   17,   17,   17,
-       19,   33,   19,   19,   19,   44,  218,   17,   20,   20,
-
-       20,   55,   19,   22,  218,   22,   22,   22,   20,   32,
-       81,   55,   54,   17,   33,   22,   54,  678,   19,   54,
-       55,   53,   44,   53,   20,   89,   53,   79,   57,   53,
-       54,   22,   45,   81,   56,  109,   84,   57,   56,   57,
-       45,   56,   60,   45,   61,   63,   60,   79,   61,   63,
-      109,   50,   89,   45,   45,   45,   45,   45,   50,   84,
-       45,   45,  679,   45,   45,   45,   45,   45,   45,   45,
-       45,   45,   45,  680,   80,   58,   58,   62,   50,   58,
-      114,   62,   50,  102,   58,   65,   50,  105,  105,   65,
-       62,   64,  102,   50,   80,   82,   50,  141,   50,   50,
-
-       64,   64,  143,   65,  408,   64,   69,   69,   69,   70,
-      408,   70,   70,   70,  114,   82,   69,   71,  143,   71,
-      141,   70,   71,   71,   71,  630,   72,   83,   72,   72,
-       72,  574,   69,   73,   73,   73,  574,   70,   72,   77,
-       77,   77,  296,   73,   78,   78,   78,   83,  111,  126,
-      126,  111,  131,  144,   72,  296,  131,  142,  145,   73,
-       97,   97,   97,  130,  130,  130,  630,   97,   97,   97,
-       97,   97,  146,  130,  257,  130,  144,  142,  145,  130,
-      682,  383,   97,   97,   97,   97,   97,   97,  146,  155,
-      155,  155,  210,  213,  219,  219,  155,  155,  155,  155,
-
-      155,  232,  219,  446,  446,  232,  683,  685,  210,  213,
-      383,  155,  155,  155,  155,  155,  155,  221,  221,  221,
-      257,  399,  637,  686,  221,  221,  221,  221,  221,  239,
-      399,  485,  667,  527,  239,  485,  690,  667,  527,  221,
-      221,  221,  221,  221,  221,  692,  693,  695,  696,  697,
-      698,  699,  700,  701,  703,  704,  637,  705,  706,  707,
-      708,  709,  710,  711,  712,  713,  714,  718,  719,  721,
-      722,  239,  723,  725,  727,  239,  285,  285,  285,  527,
-      729,  730,  732,  285,  285,  285,  285,  285,  733,  734,
-      735,  737,  738,  740,  743,  745,  746,  747,  285,  285,
-
-      285,  285,  285,  285,  749,  750,  751,  753,  754,  755,
+       15,   15,   15,   15,   15,   15,   15,   15,   17,   28,
+       17,   17,   17,   19,  679,   19,   19,   19,   32,   31,
+
+       17,   20,   20,   20,   33,   19,   22,  681,   22,   22,
+       22,   20,   44,   28,   31,   53,   17,   53,   22,   54,
+       53,   19,   32,   54,   53,   55,   54,   20,   33,   59,
+      682,   61,   57,   59,   22,   55,   61,   79,   54,   44,
+       45,   57,  684,   57,  143,   55,   58,   58,   45,   63,
+       58,   45,   59,   63,   62,   58,   80,   79,   62,   50,
+      143,   45,   45,   45,   45,   45,   50,   62,   45,   45,
+      685,   45,   45,   45,   45,   45,   80,   45,   45,   45,
+       45,   45,   64,   69,   69,   69,   50,   77,   77,   77,
+       50,   64,   64,   69,   50,   82,   81,   64,  105,  105,
+
+       70,   50,   70,   70,   70,   50,   89,   50,   50,   69,
+       83,   71,   70,   71,   84,   82,   71,   71,   71,   72,
+       81,   72,   72,   72,   73,   73,   73,  689,   70,  382,
+       83,   72,   91,   89,   73,   78,   78,   78,   84,   91,
+      102,  111,  127,  127,  129,  111,  141,   72,  129,  102,
+       73,  132,  131,  131,  131,  132,  142,  145,  382,   91,
+      161,  144,  131,   91,  131,  691,  161,   91,  573,  131,
+      141,  146,  209,  573,   91,  692,  142,  145,   91,  212,
+       91,   91,   97,   97,   97,  144,  694,  146,  209,   97,
+       97,   97,   97,   97,  217,  212,  232,  256,  486,  296,
+
+      232,  629,  486,  217,   97,   97,   97,   97,   97,   97,
+      155,  155,  155,  296,  218,  218,  399,  155,  155,  155,
+      155,  155,  218,  527,  238,  399,  666,  695,  527,  238,
+      696,  666,  155,  155,  155,  155,  155,  155,  220,  220,
+      220,  636,  697,  629,  256,  220,  220,  220,  220,  220,
+      408,  449,  698,  699,  700,  701,  408,  449,  702,  703,
+      220,  220,  220,  220,  220,  220,  238,  704,  705,  706,
+      527,  238,  284,  284,  284,  636,  707,  708,  709,  284,
+      284,  284,  284,  284,  710,  711,  712,  713,  716,  718,
+      719,  721,  722,  723,  284,  284,  284,  284,  284,  284,
+
+      725,  727,  729,  730,  732,  734,  735,  736,  738,  739,
+      741,  744,  746,  747,  748,  750,  751,  752,  754,  755,
       756,  757,  758,  759,  760,  761,  762,  763,  764,  765,
-      766,  767,  768,  769,  770,  772,  773,  775,  776,  777,
-      780,  780,  780,  780,  780,  780,  780,  781,  676,  781,
-      781,  781,  781,  781,  782,  675,  782,  673,  782,  782,
-      782,  783,  783,  783,  783,  783,  783,  783,  784,  784,
-      784,  784,  784,  784,  784,  785,  672,  785,  785,  785,
-      785,  785,  786,  786,  671,  786,  787,  787,  787,  787,
-      787,  788,  788,  789,  789,  790,  790,  791,  791,  670,
-      668,  666,  663,  662,  661,  659,  658,  657,  656,  653,
-
+      766,  767,  768,  769,  770,  771,  773,  774,  776,  777,
+      778,  781,  781,  781,  781,  781,  782,  788,  782,  782,
+      782,  783,  789,  783,  790,  783,  784,  784,  784,  784,
+      784,  785,  785,  785,  785,  785,  786,  791,  786,  786,
+      786,  787,  787,  787,  676,  675,  673,  672,  671,  670,
+      669,  667,  665,  662,  661,  660,  658,  657,  656,  655,
       652,  651,  650,  649,  648,  647,  646,  645,  644,  642,
-      641,  640,  639,  638,  636,  635,  634,  633,  632,  631,
-      629,  628,  627,  626,  624,  622,  621,  620,  619,  618,
-      616,  614,  611,  610,  609,  608,  607,  606,  605,  604,
-      603,  602,  599,  598,  596,  594,  593,  592,  591,  589,
-      588,  587,  586,  585,  584,  583,  582,  581,  580,  579,
-      578,  577,  576,  575,  573,  571,  570,  569,  568,  567,
-      566,  565,  564,  563,  562,  561,  559,  558,  557,  556,
-      554,  553,  552,  551,  550,  549,  548,  547,  545,  544,
-      543,  542,  541,  540,  538,  536,  535,  534,  533,  532,
-
-      531,  530,  529,  528,  526,  525,  524,  522,  521,  520,
-      519,  518,  517,  516,  515,  514,  513,  512,  511,  510,
-      509,  508,  507,  506,  504,  503,  502,  500,  499,  498,
-      497,  496,  495,  494,  493,  492,  491,  490,  488,  487,
-      486,  484,  483,  480,  479,  478,  477,  476,  475,  474,
+
+      641,  640,  639,  638,  637,  635,  634,  633,  632,  631,
+      630,  628,  627,  626,  625,  622,  620,  619,  618,  617,
+      616,  614,  612,  610,  609,  608,  607,  606,  605,  604,
+      603,  602,  599,  598,  597,  595,  593,  592,  591,  590,
+      589,  588,  587,  586,  585,  584,  583,  582,  581,  580,
+      579,  578,  577,  576,  575,  574,  572,  570,  569,  568,
+      567,  566,  565,  564,  563,  562,  560,  559,  558,  557,
+      556,  554,  553,  552,  551,  550,  549,  548,  547,  545,
+      544,  543,  542,  541,  539,  538,  536,  535,  534,  533,
+      532,  531,  530,  529,  528,  526,  525,  523,  522,  521,
+
+      520,  519,  518,  517,  516,  515,  514,  513,  512,  511,
+      510,  509,  508,  507,  505,  504,  503,  501,  500,  499,
+      498,  497,  496,  495,  494,  493,  492,  491,  489,  488,
+      487,  485,  483,  480,  479,  478,  477,  476,  475,  474,
       473,  472,  471,  470,  469,  468,  467,  466,  465,  464,
-      463,  462,  461,  460,  459,  458,  457,  456,  454,  453,
-      452,  451,  450,  447,  445,  444,  443,  442,  441,  440,
-      439,  438,  437,  436,  434,  433,  432,  431,  430,  429,
-      428,  427,  426,  425,  424,  423,  422,  421,  420,  419,
-
-      418,  417,  416,  415,  414,  413,  412,  411,  410,  409,
-      407,  406,  405,  404,  403,  402,  400,  397,  396,  395,
-      394,  393,  391,  390,  389,  388,  386,  385,  384,  382,
-      381,  380,  379,  378,  377,  376,  375,  374,  373,  372,
-      370,  369,  368,  367,  366,  365,  364,  363,  362,  361,
-      360,  359,  358,  357,  356,  355,  354,  353,  351,  350,
-      347,  346,  344,  343,  338,  337,  336,  335,  334,  333,
-      332,  331,  330,  329,  328,  327,  326,  324,  323,  322,
-      321,  320,  319,  317,  316,  315,  314,  313,  312,  311,
-      310,  309,  308,  307,  306,  305,  303,  302,  301,  300,
-
-      299,  297,  295,  294,  292,  291,  289,  288,  287,  286,
-      284,  283,  282,  281,  280,  279,  277,  274,  273,  272,
-      271,  270,  269,  268,  267,  266,  265,  264,  263,  262,
-      261,  260,  259,  258,  256,  255,  254,  253,  252,  251,
-      250,  249,  248,  247,  246,  245,  244,  243,  242,  241,
-      240,  238,  237,  236,  235,  234,  233,  231,  230,  229,
-      228,  227,  226,  225,  224,  223,  222,  220,  216,  209,
-      208,  207,  206,  205,  204,  203,  202,  201,  200,  199,
-      198,  197,  196,  195,  194,  193,  192,  191,  190,  189,
-      188,  187,  186,  185,  184,  183,  182,  181,  180,  179,
-
-      178,  177,  175,  174,  173,  172,  171,  170,  169,  168,
-      167,  166,  165,  164,  163,  162,  161,  160,  159,  158,
-      157,  156,  153,  152,  151,  150,  147,  139,  138,  137,
-      136,  135,  134,  133,  132,  129,  128,  127,  125,  124,
-      123,  122,  121,  120,  119,  118,  117,  116,  115,  113,
-      112,  110,  108,  107,  106,  104,  103,  101,  100,   99,
-       98,   95,   94,   93,   92,   91,   87,   86,   67,   66,
-       59,   52,   51,   49,   48,   47,   43,   41,   39,   38,
-       24,   14,   11,  779,  779,  779,  779,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
-
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
-      779,  779,  779,  779,  779,  779,  779,  779,  779,  779,
-      779,  779,  779,  779
+      463,  462,  461,  460,  459,  458,  457,  455,  454,  453,
+      452,  451,  448,  447,  446,  445,  444,  443,  442,  441,
+      440,  439,  438,  437,  436,  434,  433,  432,  431,  430,
+      429,  428,  427,  426,  425,  424,  423,  422,  421,  420,
+      419,  418,  417,  416,  415,  414,  413,  412,  411,  410,
+
+      409,  407,  406,  405,  404,  403,  402,  400,  397,  396,
+      395,  394,  393,  391,  390,  389,  388,  387,  385,  384,
+      383,  381,  380,  378,  377,  376,  375,  374,  373,  372,
+      371,  370,  369,  368,  367,  366,  365,  364,  363,  362,
+      361,  360,  359,  358,  357,  356,  355,  354,  353,  352,
+      350,  349,  346,  345,  343,  342,  338,  337,  336,  335,
+      334,  333,  332,  331,  330,  329,  328,  327,  326,  325,
+      323,  322,  321,  320,  319,  318,  316,  315,  314,  313,
+      312,  311,  310,  309,  308,  307,  306,  305,  304,  302,
+      301,  300,  299,  297,  295,  294,  292,  291,  290,  288,
+
+      287,  286,  285,  283,  282,  281,  280,  279,  278,  276,
+      273,  272,  271,  270,  269,  268,  267,  266,  265,  264,
+      263,  262,  261,  260,  259,  258,  257,  255,  254,  253,
+      252,  251,  250,  249,  248,  247,  246,  245,  244,  243,
+      242,  241,  240,  239,  237,  236,  235,  234,  233,  231,
+      230,  229,  228,  227,  226,  225,  224,  223,  222,  221,
+      219,  215,  208,  207,  206,  205,  204,  203,  202,  201,
+      200,  199,  198,  197,  196,  195,  194,  193,  192,  191,
+      190,  189,  188,  187,  186,  185,  184,  183,  182,  181,
+      180,  179,  178,  177,  176,  175,  173,  172,  171,  170,
+
+      169,  168,  167,  166,  165,  164,  163,  162,  160,  159,
+      158,  157,  156,  153,  152,  151,  150,  147,  139,  138,
+      137,  136,  135,  134,  133,  130,  128,  126,  125,  124,
+      123,  122,  121,  120,  119,  118,  117,  116,  115,  114,
+      113,  112,  110,  109,  108,  107,  106,  104,  103,  101,
+      100,   99,   98,   95,   94,   93,   92,   87,   86,   67,
+       66,   52,   51,   49,   48,   47,   43,   41,   39,   38,
+       24,   14,   11,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780,  780,  780,  780,  780,  780,
+      780,  780,  780,  780,  780
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -1057,20 +1056,20 @@ static char *yy_last_accepting_cpos;
 extern int parser4__flex_debug;
 int parser4__flex_debug = 1;
 
-static yyconst flex_int16_t yy_rule_linenum[108] =
+static yyconst flex_int16_t yy_rule_linenum[107] =
     {   0,
       128,  130,  132,  137,  138,  143,  144,  145,  157,  160,
-      165,  172,  181,  190,  199,  208,  217,  226,  235,  247,
-      257,  267,  277,  288,  298,  308,  318,  328,  337,  346,
-      355,  369,  384,  393,  402,  411,  420,  429,  438,  447,
-      456,  465,  475,  484,  493,  502,  511,  520,  529,  538,
-      548,  558,  568,  577,  587,  597,  607,  617,  626,  636,
-      645,  654,  663,  672,  681,  691,  701,  710,  719,  728,
-      737,  746,  755,  764,  773,  782,  791,  800,  809,  818,
-      827,  836,  845,  854,  863,  873,  883,  895,  906,  919,
-     1017, 1022, 1027, 1032, 1033, 1034, 1035, 1036, 1037, 1039,
-
-     1057, 1070, 1075, 1079, 1081, 1083, 1085
+      165,  172,  181,  190,  199,  208,  217,  226,  235,  246,
+      255,  264,  273,  283,  293,  303,  313,  323,  333,  343,
+      353,  363,  372,  381,  390,  404,  419,  428,  437,  446,
+      455,  464,  473,  482,  491,  500,  510,  519,  528,  537,
+      546,  555,  564,  573,  583,  593,  603,  612,  622,  632,
+      642,  652,  661,  671,  680,  689,  698,  707,  716,  726,
+      736,  745,  754,  763,  772,  781,  790,  799,  808,  817,
+      826,  835,  844,  853,  863,  873,  885,  896,  909, 1007,
+     1012, 1017, 1022, 1023, 1024, 1025, 1026, 1027, 1029, 1047,
+
+     1060, 1065, 1069, 1071, 1073, 1075
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -1082,7 +1081,7 @@ static yyconst flex_int16_t yy_rule_linenum[108] =
 #define YY_RESTORE_YY_MORE_OFFSET
 char *parser4_text;
 #line 1 "dhcp4_lexer.ll"
-/* Copyright (C) 2016 Internet Systems Consortium, Inc. ("ISC")
+/* Copyright (C) 2016-2017 Internet Systems Consortium, Inc. ("ISC")
 
    This Source Code Form is subject to the terms of the Mozilla Public
    License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -1141,7 +1140,7 @@ unsigned int comment_start_line = 0;
 // by moving it ahead by parser4_leng bytes. parser4_leng specifies the length of the
 // currently matched token.
 #define YY_USER_ACTION  driver.loc_.columns(parser4_leng);
-#line 1145 "dhcp4_lexer.cc"
+#line 1144 "dhcp4_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -1465,7 +1464,7 @@ YY_DECL
     }
 
 
-#line 1469 "dhcp4_lexer.cc"
+#line 1468 "dhcp4_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -1494,13 +1493,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 780 )
+                               if ( yy_current_state >= 781 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 779 );
+               while ( yy_current_state != 780 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -1519,13 +1518,13 @@ do_action:      /* This label is used only to access EOF actions. */
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 108 )
+                       else if ( yy_act < 107 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], parser4_text );
-                       else if ( yy_act == 108 )
+                       else if ( yy_act == 107 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         parser4_text );
-                       else if ( yy_act == 109 )
+                       else if ( yy_act == 108 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -1721,7 +1720,6 @@ YY_RULE_SETUP
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
     case isc::dhcp::Parser4Context::OPTION_DEF:
-    case isc::dhcp::Parser4Context::SERVER_ID:
         return isc::dhcp::Dhcp4Parser::make_TYPE(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("type", driver.loc_);
@@ -1730,7 +1728,43 @@ YY_RULE_SETUP
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 247 "dhcp4_lexer.ll"
+#line 246 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DATABASE_TYPE:
+        return isc::dhcp::Dhcp4Parser::make_MEMFILE(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("memfile", driver.loc_);
+    }
+}
+       YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 255 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DATABASE_TYPE:
+        return isc::dhcp::Dhcp4Parser::make_MYSQL(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("mysql", driver.loc_);
+    }
+}
+       YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 264 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::DATABASE_TYPE:
+        return isc::dhcp::Dhcp4Parser::make_POSTGRESQL(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("postgresql", driver.loc_);
+    }
+}
+       YY_BREAK
+case 23:
+YY_RULE_SETUP
+#line 273 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -1741,9 +1775,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 21:
+case 24:
 YY_RULE_SETUP
-#line 257 "dhcp4_lexer.ll"
+#line 283 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -1754,9 +1788,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 22:
+case 25:
 YY_RULE_SETUP
-#line 267 "dhcp4_lexer.ll"
+#line 293 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -1767,23 +1801,22 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 23:
+case 26:
 YY_RULE_SETUP
-#line 277 "dhcp4_lexer.ll"
+#line 303 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
     case isc::dhcp::Parser4Context::HOSTS_DATABASE:
-    case isc::dhcp::Parser4Context::SERVER_ID:
         return isc::dhcp::Dhcp4Parser::make_PERSIST(driver.loc_);
     default:
         return isc::dhcp::Dhcp4Parser::make_STRING("persist", driver.loc_);
     }
 }
        YY_BREAK
-case 24:
+case 27:
 YY_RULE_SETUP
-#line 288 "dhcp4_lexer.ll"
+#line 313 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -1794,9 +1827,22 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 25:
+case 28:
 YY_RULE_SETUP
-#line 298 "dhcp4_lexer.ll"
+#line 323 "dhcp4_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser4Context::LEASE_DATABASE:
+    case isc::dhcp::Parser4Context::HOSTS_DATABASE:
+        return isc::dhcp::Dhcp4Parser::make_CONNECT_TIMEOUT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp4Parser::make_STRING("connect-timeout", driver.loc_);
+    }
+}
+       YY_BREAK
+case 29:
+YY_RULE_SETUP
+#line 333 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -1807,9 +1853,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 26:
+case 30:
 YY_RULE_SETUP
-#line 308 "dhcp4_lexer.ll"
+#line 343 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -1820,9 +1866,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 27:
+case 31:
 YY_RULE_SETUP
-#line 318 "dhcp4_lexer.ll"
+#line 353 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -1833,9 +1879,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 28:
+case 32:
 YY_RULE_SETUP
-#line 328 "dhcp4_lexer.ll"
+#line 363 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -1845,9 +1891,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 29:
+case 33:
 YY_RULE_SETUP
-#line 337 "dhcp4_lexer.ll"
+#line 372 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -1857,9 +1903,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 30:
+case 34:
 YY_RULE_SETUP
-#line 346 "dhcp4_lexer.ll"
+#line 381 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -1869,9 +1915,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 31:
+case 35:
 YY_RULE_SETUP
-#line 355 "dhcp4_lexer.ll"
+#line 390 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -1886,9 +1932,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 32:
+case 36:
 YY_RULE_SETUP
-#line 369 "dhcp4_lexer.ll"
+#line 404 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LEASE_DATABASE:
@@ -1904,9 +1950,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 33:
+case 37:
 YY_RULE_SETUP
-#line 384 "dhcp4_lexer.ll"
+#line 419 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -1916,9 +1962,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 34:
+case 38:
 YY_RULE_SETUP
-#line 393 "dhcp4_lexer.ll"
+#line 428 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -1928,9 +1974,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 35:
+case 39:
 YY_RULE_SETUP
-#line 402 "dhcp4_lexer.ll"
+#line 437 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::POOLS:
@@ -1940,9 +1986,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 36:
+case 40:
 YY_RULE_SETUP
-#line 411 "dhcp4_lexer.ll"
+#line 446 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -1952,9 +1998,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 37:
+case 41:
 YY_RULE_SETUP
-#line 420 "dhcp4_lexer.ll"
+#line 455 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -1964,9 +2010,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 38:
+case 42:
 YY_RULE_SETUP
-#line 429 "dhcp4_lexer.ll"
+#line 464 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -1976,9 +2022,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 39:
+case 43:
 YY_RULE_SETUP
-#line 438 "dhcp4_lexer.ll"
+#line 473 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -1988,9 +2034,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 40:
+case 44:
 YY_RULE_SETUP
-#line 447 "dhcp4_lexer.ll"
+#line 482 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2000,9 +2046,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 41:
+case 45:
 YY_RULE_SETUP
-#line 456 "dhcp4_lexer.ll"
+#line 491 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2012,9 +2058,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 42:
+case 46:
 YY_RULE_SETUP
-#line 465 "dhcp4_lexer.ll"
+#line 500 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2025,9 +2071,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 43:
+case 47:
 YY_RULE_SETUP
-#line 475 "dhcp4_lexer.ll"
+#line 510 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2037,9 +2083,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 44:
+case 48:
 YY_RULE_SETUP
-#line 484 "dhcp4_lexer.ll"
+#line 519 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -2049,9 +2095,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 45:
+case 49:
 YY_RULE_SETUP
-#line 493 "dhcp4_lexer.ll"
+#line 528 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGING:
@@ -2061,9 +2107,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 46:
+case 50:
 YY_RULE_SETUP
-#line 502 "dhcp4_lexer.ll"
+#line 537 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -2073,9 +2119,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 47:
+case 51:
 YY_RULE_SETUP
-#line 511 "dhcp4_lexer.ll"
+#line 546 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OUTPUT_OPTIONS:
@@ -2085,9 +2131,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 48:
+case 52:
 YY_RULE_SETUP
-#line 520 "dhcp4_lexer.ll"
+#line 555 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -2097,9 +2143,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 49:
+case 53:
 YY_RULE_SETUP
-#line 529 "dhcp4_lexer.ll"
+#line 564 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::LOGGERS:
@@ -2109,9 +2155,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 50:
+case 54:
 YY_RULE_SETUP
-#line 538 "dhcp4_lexer.ll"
+#line 573 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2122,9 +2168,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 51:
+case 55:
 YY_RULE_SETUP
-#line 548 "dhcp4_lexer.ll"
+#line 583 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2135,9 +2181,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 52:
+case 56:
 YY_RULE_SETUP
-#line 558 "dhcp4_lexer.ll"
+#line 593 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CLIENT_CLASSES:
@@ -2148,9 +2194,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 53:
+case 57:
 YY_RULE_SETUP
-#line 568 "dhcp4_lexer.ll"
+#line 603 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2160,9 +2206,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 54:
+case 58:
 YY_RULE_SETUP
-#line 577 "dhcp4_lexer.ll"
+#line 612 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2173,9 +2219,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 55:
+case 59:
 YY_RULE_SETUP
-#line 587 "dhcp4_lexer.ll"
+#line 622 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2186,9 +2232,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 56:
+case 60:
 YY_RULE_SETUP
-#line 597 "dhcp4_lexer.ll"
+#line 632 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2199,9 +2245,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 57:
+case 61:
 YY_RULE_SETUP
-#line 607 "dhcp4_lexer.ll"
+#line 642 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOST_RESERVATION_IDENTIFIERS:
@@ -2212,9 +2258,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 58:
+case 62:
 YY_RULE_SETUP
-#line 617 "dhcp4_lexer.ll"
+#line 652 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RESERVATIONS:
@@ -2224,9 +2270,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 59:
+case 63:
 YY_RULE_SETUP
-#line 626 "dhcp4_lexer.ll"
+#line 661 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2237,9 +2283,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 60:
+case 64:
 YY_RULE_SETUP
-#line 636 "dhcp4_lexer.ll"
+#line 671 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DATA:
@@ -2249,9 +2295,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 61:
+case 65:
 YY_RULE_SETUP
-#line 645 "dhcp4_lexer.ll"
+#line 680 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2261,9 +2307,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 62:
+case 66:
 YY_RULE_SETUP
-#line 654 "dhcp4_lexer.ll"
+#line 689 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2273,9 +2319,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 63:
+case 67:
 YY_RULE_SETUP
-#line 663 "dhcp4_lexer.ll"
+#line 698 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::OPTION_DEF:
@@ -2285,9 +2331,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 64:
+case 68:
 YY_RULE_SETUP
-#line 672 "dhcp4_lexer.ll"
+#line 707 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2297,9 +2343,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 65:
+case 69:
 YY_RULE_SETUP
-#line 681 "dhcp4_lexer.ll"
+#line 716 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::RELAY:
@@ -2310,9 +2356,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 66:
+case 70:
 YY_RULE_SETUP
-#line 691 "dhcp4_lexer.ll"
+#line 726 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2322,9 +2368,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 67:
+case 71:
 YY_RULE_SETUP
-#line 701 "dhcp4_lexer.ll"
+#line 736 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -2334,9 +2380,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 68:
+case 72:
 YY_RULE_SETUP
-#line 710 "dhcp4_lexer.ll"
+#line 745 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::HOOKS_LIBRARIES:
@@ -2346,69 +2392,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 69:
-YY_RULE_SETUP
-#line 719 "dhcp4_lexer.ll"
-{
-    switch(driver.ctx_) {
-    case isc::dhcp::Parser4Context::DHCP4:
-        return isc::dhcp::Dhcp4Parser::make_SERVER_ID(driver.loc_);
-    default:
-        return isc::dhcp::Dhcp4Parser::make_STRING("server-id", driver.loc_);
-    }
-}
-       YY_BREAK
-case 70:
-YY_RULE_SETUP
-#line 728 "dhcp4_lexer.ll"
-{
-    switch(driver.ctx_) {
-    case isc::dhcp::Parser4Context::SERVER_ID:
-        return isc::dhcp::Dhcp4Parser::make_IDENTIFIER(driver.loc_);
-    default:
-        return isc::dhcp::Dhcp4Parser::make_STRING("identifier", driver.loc_);
-    }
-}
-       YY_BREAK
-case 71:
-YY_RULE_SETUP
-#line 737 "dhcp4_lexer.ll"
-{
-    switch(driver.ctx_) {
-    case isc::dhcp::Parser4Context::SERVER_ID:
-        return isc::dhcp::Dhcp4Parser::make_HTYPE(driver.loc_);
-    default:
-        return isc::dhcp::Dhcp4Parser::make_STRING("htype", driver.loc_);
-    }
-}
-       YY_BREAK
-case 72:
-YY_RULE_SETUP
-#line 746 "dhcp4_lexer.ll"
-{
-    switch(driver.ctx_) {
-    case isc::dhcp::Parser4Context::SERVER_ID:
-        return isc::dhcp::Dhcp4Parser::make_TIME(driver.loc_);
-    default:
-        return isc::dhcp::Dhcp4Parser::make_STRING("time", driver.loc_);
-    }
-}
-       YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 755 "dhcp4_lexer.ll"
-{
-    switch(driver.ctx_) {
-    case isc::dhcp::Parser4Context::SERVER_ID:
-        return isc::dhcp::Dhcp4Parser::make_ENTERPRISE_ID(driver.loc_);
-    default:
-        return isc::dhcp::Dhcp4Parser::make_STRING("enterprise-id", driver.loc_);
-    }
-}
-       YY_BREAK
-case 74:
-YY_RULE_SETUP
-#line 764 "dhcp4_lexer.ll"
+#line 754 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2418,9 +2404,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 75:
+case 74:
 YY_RULE_SETUP
-#line 773 "dhcp4_lexer.ll"
+#line 763 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2430,9 +2416,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 76:
+case 75:
 YY_RULE_SETUP
-#line 782 "dhcp4_lexer.ll"
+#line 772 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2442,9 +2428,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 77:
+case 76:
 YY_RULE_SETUP
-#line 791 "dhcp4_lexer.ll"
+#line 781 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -2454,9 +2440,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 78:
+case 77:
 YY_RULE_SETUP
-#line 800 "dhcp4_lexer.ll"
+#line 790 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONTROL_SOCKET:
@@ -2466,9 +2452,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 79:
+case 78:
 YY_RULE_SETUP
-#line 809 "dhcp4_lexer.ll"
+#line 799 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2478,9 +2464,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 80:
+case 79:
 YY_RULE_SETUP
-#line 818 "dhcp4_lexer.ll"
+#line 808 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -2490,9 +2476,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 81:
+case 80:
 YY_RULE_SETUP
-#line 827 "dhcp4_lexer.ll"
+#line 817 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::CONFIG:
@@ -2502,9 +2488,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 82:
+case 81:
 YY_RULE_SETUP
-#line 836 "dhcp4_lexer.ll"
+#line 826 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2514,9 +2500,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 83:
+case 82:
 YY_RULE_SETUP
-#line 845 "dhcp4_lexer.ll"
+#line 835 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2526,9 +2512,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 84:
+case 83:
 YY_RULE_SETUP
-#line 854 "dhcp4_lexer.ll"
+#line 844 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2538,9 +2524,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 85:
+case 84:
 YY_RULE_SETUP
-#line 863 "dhcp4_lexer.ll"
+#line 853 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2551,9 +2537,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 86:
+case 85:
 YY_RULE_SETUP
-#line 873 "dhcp4_lexer.ll"
+#line 863 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2564,9 +2550,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 87:
+case 86:
 YY_RULE_SETUP
-#line 883 "dhcp4_lexer.ll"
+#line 873 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::DHCP4:
@@ -2579,9 +2565,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 88:
+case 87:
 YY_RULE_SETUP
-#line 895 "dhcp4_lexer.ll"
+#line 885 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2593,9 +2579,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 89:
+case 88:
 YY_RULE_SETUP
-#line 906 "dhcp4_lexer.ll"
+#line 896 "dhcp4_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser4Context::SUBNET4:
@@ -2607,9 +2593,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 90:
+case 89:
 YY_RULE_SETUP
-#line 919 "dhcp4_lexer.ll"
+#line 909 "dhcp4_lexer.ll"
 {
     // A string has been matched. It contains the actual string and single quotes.
     // We need to get those quotes out of the way and just use its content, e.g.
@@ -2708,65 +2694,65 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 91:
-/* rule 91 can match eol */
+case 90:
+/* rule 90 can match eol */
 YY_RULE_SETUP
-#line 1017 "dhcp4_lexer.ll"
+#line 1007 "dhcp4_lexer.ll"
 {
     // Bad string with a forbidden control character inside
     driver.error(driver.loc_, "Invalid control in " + std::string(parser4_text));
 }
        YY_BREAK
-case 92:
-/* rule 92 can match eol */
+case 91:
+/* rule 91 can match eol */
 YY_RULE_SETUP
-#line 1022 "dhcp4_lexer.ll"
+#line 1012 "dhcp4_lexer.ll"
 {
     // Bad string with a bad escape inside
     driver.error(driver.loc_, "Bad escape in " + std::string(parser4_text));
 }
        YY_BREAK
-case 93:
+case 92:
 YY_RULE_SETUP
-#line 1027 "dhcp4_lexer.ll"
+#line 1017 "dhcp4_lexer.ll"
 {
     // Bad string with an open escape at the end
     driver.error(driver.loc_, "Overflow escape in " + std::string(parser4_text));
 }
        YY_BREAK
-case 94:
+case 93:
 YY_RULE_SETUP
-#line 1032 "dhcp4_lexer.ll"
+#line 1022 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 95:
+case 94:
 YY_RULE_SETUP
-#line 1033 "dhcp4_lexer.ll"
+#line 1023 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 96:
+case 95:
 YY_RULE_SETUP
-#line 1034 "dhcp4_lexer.ll"
+#line 1024 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 97:
+case 96:
 YY_RULE_SETUP
-#line 1035 "dhcp4_lexer.ll"
+#line 1025 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 98:
+case 97:
 YY_RULE_SETUP
-#line 1036 "dhcp4_lexer.ll"
+#line 1026 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 99:
+case 98:
 YY_RULE_SETUP
-#line 1037 "dhcp4_lexer.ll"
+#line 1027 "dhcp4_lexer.ll"
 { return isc::dhcp::Dhcp4Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 100:
+case 99:
 YY_RULE_SETUP
-#line 1039 "dhcp4_lexer.ll"
+#line 1029 "dhcp4_lexer.ll"
 {
     // An integer was found.
     std::string tmp(parser4_text);
@@ -2785,9 +2771,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 101:
+case 100:
 YY_RULE_SETUP
-#line 1057 "dhcp4_lexer.ll"
+#line 1047 "dhcp4_lexer.ll"
 {
     // A floating point was found.
     std::string tmp(parser4_text);
@@ -2801,43 +2787,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp4Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 102:
+case 101:
 YY_RULE_SETUP
-#line 1070 "dhcp4_lexer.ll"
+#line 1060 "dhcp4_lexer.ll"
 {
     string tmp(parser4_text);
     return isc::dhcp::Dhcp4Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 103:
+case 102:
 YY_RULE_SETUP
-#line 1075 "dhcp4_lexer.ll"
+#line 1065 "dhcp4_lexer.ll"
 {
    return isc::dhcp::Dhcp4Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 104:
+case 103:
 YY_RULE_SETUP
-#line 1079 "dhcp4_lexer.ll"
+#line 1069 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 105:
+case 104:
 YY_RULE_SETUP
-#line 1081 "dhcp4_lexer.ll"
+#line 1071 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 106:
+case 105:
 YY_RULE_SETUP
-#line 1083 "dhcp4_lexer.ll"
+#line 1073 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 107:
+case 106:
 YY_RULE_SETUP
-#line 1085 "dhcp4_lexer.ll"
+#line 1075 "dhcp4_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(parser4_text));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1087 "dhcp4_lexer.ll"
+#line 1077 "dhcp4_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp4Parser::make_END(driver.loc_);
@@ -2861,12 +2847,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 108:
+case 107:
 YY_RULE_SETUP
-#line 1110 "dhcp4_lexer.ll"
+#line 1100 "dhcp4_lexer.ll"
 ECHO;
        YY_BREAK
-#line 2870 "dhcp4_lexer.cc"
+#line 2856 "dhcp4_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -3183,7 +3169,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 780 )
+                       if ( yy_current_state >= 781 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
@@ -3216,11 +3202,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 780 )
+               if ( yy_current_state >= 781 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
-       yy_is_jam = (yy_current_state == 779);
+       yy_is_jam = (yy_current_state == 780);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -3969,7 +3955,7 @@ void parser4_free (void * ptr )
 
 /* %ok-for-header */
 
-#line 1110 "dhcp4_lexer.ll"
+#line 1100 "dhcp4_lexer.ll"
 
 
 
index da6091cb6752e4434649e88d2fa5b3c33232327c..e9d1a9d8618d0d45d43ddcd15af1554a10f38743 100644 (file)
@@ -253,23 +253,24 @@ namespace isc { namespace dhcp {
   {
       switch (that.type_get ())
     {
-      case 114: // value
+      case 113: // value
+      case 160: // db_type
         value.move< ElementPtr > (that.value);
         break;
 
-      case 101: // "boolean"
+      case 100: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 100: // "floating point"
+      case 99: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 99: // "integer"
+      case 98: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 98: // "constant string"
+      case 97: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -288,23 +289,24 @@ namespace isc { namespace dhcp {
     state = that.state;
       switch (that.type_get ())
     {
-      case 114: // value
+      case 113: // value
+      case 160: // db_type
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 101: // "boolean"
+      case 100: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 100: // "floating point"
+      case 99: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 99: // "integer"
+      case 98: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 98: // "constant string"
+      case 97: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -344,39 +346,46 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 98: // "constant string"
+            case 97: // "constant string"
 
-#line 189 "dhcp4_parser.yy" // lalr1.cc:636
+#line 188 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
-#line 352 "dhcp4_parser.cc" // lalr1.cc:636
+#line 354 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 99: // "integer"
+      case 98: // "integer"
 
-#line 189 "dhcp4_parser.yy" // lalr1.cc:636
+#line 188 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
-#line 359 "dhcp4_parser.cc" // lalr1.cc:636
+#line 361 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 100: // "floating point"
+      case 99: // "floating point"
 
-#line 189 "dhcp4_parser.yy" // lalr1.cc:636
+#line 188 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
-#line 366 "dhcp4_parser.cc" // lalr1.cc:636
+#line 368 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 101: // "boolean"
+      case 100: // "boolean"
 
-#line 189 "dhcp4_parser.yy" // lalr1.cc:636
+#line 188 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
-#line 373 "dhcp4_parser.cc" // lalr1.cc:636
+#line 375 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
-      case 114: // value
+      case 113: // value
 
-#line 189 "dhcp4_parser.yy" // lalr1.cc:636
+#line 188 "dhcp4_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 380 "dhcp4_parser.cc" // lalr1.cc:636
+#line 382 "dhcp4_parser.cc" // lalr1.cc:636
+        break;
+
+      case 160: // db_type
+
+#line 188 "dhcp4_parser.yy" // lalr1.cc:636
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 389 "dhcp4_parser.cc" // lalr1.cc:636
         break;
 
 
@@ -576,23 +585,24 @@ namespace isc { namespace dhcp {
          when using variants.  */
         switch (yyr1_[yyn])
     {
-      case 114: // value
+      case 113: // value
+      case 160: // db_type
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 101: // "boolean"
+      case 100: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 100: // "floating point"
+      case 99: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 99: // "integer"
+      case 98: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 98: // "constant string"
+      case 97: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -614,242 +624,242 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 198 "dhcp4_parser.yy" // lalr1.cc:859
+#line 197 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 620 "dhcp4_parser.cc" // lalr1.cc:859
+#line 630 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 199 "dhcp4_parser.yy" // lalr1.cc:859
+#line 198 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
-#line 626 "dhcp4_parser.cc" // lalr1.cc:859
+#line 636 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 200 "dhcp4_parser.yy" // lalr1.cc:859
+#line 199 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP4; }
-#line 632 "dhcp4_parser.cc" // lalr1.cc:859
+#line 642 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 201 "dhcp4_parser.yy" // lalr1.cc:859
+#line 200 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 638 "dhcp4_parser.cc" // lalr1.cc:859
+#line 648 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 202 "dhcp4_parser.yy" // lalr1.cc:859
+#line 201 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET4; }
-#line 644 "dhcp4_parser.cc" // lalr1.cc:859
+#line 654 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 203 "dhcp4_parser.yy" // lalr1.cc:859
+#line 202 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
-#line 650 "dhcp4_parser.cc" // lalr1.cc:859
+#line 660 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 204 "dhcp4_parser.yy" // lalr1.cc:859
+#line 203 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
-#line 656 "dhcp4_parser.cc" // lalr1.cc:859
+#line 666 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 205 "dhcp4_parser.yy" // lalr1.cc:859
+#line 204 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DEF; }
-#line 662 "dhcp4_parser.cc" // lalr1.cc:859
+#line 672 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 206 "dhcp4_parser.yy" // lalr1.cc:859
+#line 205 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DATA; }
-#line 668 "dhcp4_parser.cc" // lalr1.cc:859
+#line 678 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 207 "dhcp4_parser.yy" // lalr1.cc:859
+#line 206 "dhcp4_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 674 "dhcp4_parser.cc" // lalr1.cc:859
+#line 684 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 215 "dhcp4_parser.yy" // lalr1.cc:859
+#line 214 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 680 "dhcp4_parser.cc" // lalr1.cc:859
+#line 690 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 23:
-#line 216 "dhcp4_parser.yy" // lalr1.cc:859
+#line 215 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 686 "dhcp4_parser.cc" // lalr1.cc:859
+#line 696 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 217 "dhcp4_parser.yy" // lalr1.cc:859
+#line 216 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 692 "dhcp4_parser.cc" // lalr1.cc:859
+#line 702 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 25:
-#line 218 "dhcp4_parser.yy" // lalr1.cc:859
+#line 217 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 698 "dhcp4_parser.cc" // lalr1.cc:859
+#line 708 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 219 "dhcp4_parser.yy" // lalr1.cc:859
+#line 218 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 704 "dhcp4_parser.cc" // lalr1.cc:859
+#line 714 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 27:
-#line 220 "dhcp4_parser.yy" // lalr1.cc:859
+#line 219 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 710 "dhcp4_parser.cc" // lalr1.cc:859
+#line 720 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
-#line 221 "dhcp4_parser.yy" // lalr1.cc:859
+#line 220 "dhcp4_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 716 "dhcp4_parser.cc" // lalr1.cc:859
+#line 726 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 29:
-#line 224 "dhcp4_parser.yy" // lalr1.cc:859
+#line 223 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
 }
-#line 725 "dhcp4_parser.cc" // lalr1.cc:859
+#line 735 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 30:
-#line 229 "dhcp4_parser.yy" // lalr1.cc:859
+#line 228 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 736 "dhcp4_parser.cc" // lalr1.cc:859
+#line 746 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 31:
-#line 234 "dhcp4_parser.yy" // lalr1.cc:859
+#line 233 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 746 "dhcp4_parser.cc" // lalr1.cc:859
+#line 756 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 34:
-#line 245 "dhcp4_parser.yy" // lalr1.cc:859
+#line 244 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 755 "dhcp4_parser.cc" // lalr1.cc:859
+#line 765 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 35:
-#line 249 "dhcp4_parser.yy" // lalr1.cc:859
+#line 248 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 765 "dhcp4_parser.cc" // lalr1.cc:859
+#line 775 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 36:
-#line 256 "dhcp4_parser.yy" // lalr1.cc:859
+#line 255 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 774 "dhcp4_parser.cc" // lalr1.cc:859
+#line 784 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 37:
-#line 259 "dhcp4_parser.yy" // lalr1.cc:859
+#line 258 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
-#line 782 "dhcp4_parser.cc" // lalr1.cc:859
+#line 792 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 38:
-#line 264 "dhcp4_parser.yy" // lalr1.cc:859
+#line 263 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
-#line 790 "dhcp4_parser.cc" // lalr1.cc:859
+#line 800 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 39:
-#line 266 "dhcp4_parser.yy" // lalr1.cc:859
+#line 265 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
 }
-#line 799 "dhcp4_parser.cc" // lalr1.cc:859
+#line 809 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 42:
-#line 275 "dhcp4_parser.yy" // lalr1.cc:859
+#line 274 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 808 "dhcp4_parser.cc" // lalr1.cc:859
+#line 818 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 43:
-#line 279 "dhcp4_parser.yy" // lalr1.cc:859
+#line 278 "dhcp4_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 817 "dhcp4_parser.cc" // lalr1.cc:859
+#line 827 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 44:
-#line 290 "dhcp4_parser.yy" // lalr1.cc:859
+#line 289 "dhcp4_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 828 "dhcp4_parser.cc" // lalr1.cc:859
+#line 838 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 45:
-#line 300 "dhcp4_parser.yy" // lalr1.cc:859
+#line 299 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 839 "dhcp4_parser.cc" // lalr1.cc:859
+#line 849 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 46:
-#line 305 "dhcp4_parser.yy" // lalr1.cc:859
+#line 304 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 849 "dhcp4_parser.cc" // lalr1.cc:859
+#line 859 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 54:
-#line 324 "dhcp4_parser.yy" // lalr1.cc:859
+#line 323 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -858,11 +868,11 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP4);
 }
-#line 862 "dhcp4_parser.cc" // lalr1.cc:859
+#line 872 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 55:
-#line 331 "dhcp4_parser.yy" // lalr1.cc:859
+#line 330 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -870,522 +880,548 @@ namespace isc { namespace dhcp {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 874 "dhcp4_parser.cc" // lalr1.cc:859
+#line 884 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 56:
-#line 341 "dhcp4_parser.yy" // lalr1.cc:859
+#line 340 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp4 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 884 "dhcp4_parser.cc" // lalr1.cc:859
+#line 894 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 57:
-#line 345 "dhcp4_parser.yy" // lalr1.cc:859
+#line 344 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 892 "dhcp4_parser.cc" // lalr1.cc:859
+#line 902 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 82:
-#line 379 "dhcp4_parser.yy" // lalr1.cc:859
+  case 81:
+#line 377 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
 }
-#line 901 "dhcp4_parser.cc" // lalr1.cc:859
+#line 911 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 83:
-#line 384 "dhcp4_parser.yy" // lalr1.cc:859
+  case 82:
+#line 382 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
 }
-#line 910 "dhcp4_parser.cc" // lalr1.cc:859
+#line 920 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 84:
-#line 389 "dhcp4_parser.yy" // lalr1.cc:859
+  case 83:
+#line 387 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
 }
-#line 919 "dhcp4_parser.cc" // lalr1.cc:859
+#line 929 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 85:
-#line 394 "dhcp4_parser.yy" // lalr1.cc:859
+  case 84:
+#line 392 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
 }
-#line 928 "dhcp4_parser.cc" // lalr1.cc:859
+#line 938 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 86:
-#line 399 "dhcp4_parser.yy" // lalr1.cc:859
+  case 85:
+#line 397 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr echo(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("echo-client-id", echo);
 }
-#line 937 "dhcp4_parser.cc" // lalr1.cc:859
+#line 947 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 87:
-#line 404 "dhcp4_parser.yy" // lalr1.cc:859
+  case 86:
+#line 402 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr match(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("match-client-id", match);
 }
-#line 946 "dhcp4_parser.cc" // lalr1.cc:859
+#line 956 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 88:
-#line 410 "dhcp4_parser.yy" // lalr1.cc:859
+  case 87:
+#line 408 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.INTERFACES_CONFIG);
 }
-#line 957 "dhcp4_parser.cc" // lalr1.cc:859
+#line 967 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 89:
-#line 415 "dhcp4_parser.yy" // lalr1.cc:859
+  case 88:
+#line 413 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 966 "dhcp4_parser.cc" // lalr1.cc:859
+#line 976 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 94:
-#line 428 "dhcp4_parser.yy" // lalr1.cc:859
+  case 93:
+#line 426 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 976 "dhcp4_parser.cc" // lalr1.cc:859
+#line 986 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 95:
-#line 432 "dhcp4_parser.yy" // lalr1.cc:859
+  case 94:
+#line 430 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 984 "dhcp4_parser.cc" // lalr1.cc:859
+#line 994 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 96:
-#line 436 "dhcp4_parser.yy" // lalr1.cc:859
+  case 95:
+#line 434 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 995 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1005 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 97:
-#line 441 "dhcp4_parser.yy" // lalr1.cc:859
+  case 96:
+#line 439 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1004 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1014 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 98:
-#line 446 "dhcp4_parser.yy" // lalr1.cc:859
+  case 97:
+#line 444 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1012 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1022 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 99:
-#line 448 "dhcp4_parser.yy" // lalr1.cc:859
+  case 98:
+#line 446 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr type(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-socket-type", type);
     ctx.leave();
 }
-#line 1022 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1032 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 100:
-#line 454 "dhcp4_parser.yy" // lalr1.cc:859
+  case 99:
+#line 452 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.LEASE_DATABASE);
 }
-#line 1033 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1043 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 101:
-#line 459 "dhcp4_parser.yy" // lalr1.cc:859
+  case 100:
+#line 457 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1042 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1052 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 102:
-#line 464 "dhcp4_parser.yy" // lalr1.cc:859
+  case 101:
+#line 462 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1053 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1063 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 103:
-#line 469 "dhcp4_parser.yy" // lalr1.cc:859
+  case 102:
+#line 467 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1062 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1072 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 115:
-#line 489 "dhcp4_parser.yy" // lalr1.cc:859
+#line 488 "dhcp4_parser.yy" // lalr1.cc:859
     {
-    ctx.enter(ctx.NO_KEYWORD);
+    ctx.enter(ctx.DATABASE_TYPE);
 }
-#line 1070 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1080 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 116:
-#line 491 "dhcp4_parser.yy" // lalr1.cc:859
+#line 490 "dhcp4_parser.yy" // lalr1.cc:859
     {
-    ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("type", prf);
+    ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1080 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1089 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
   case 117:
+#line 495 "dhcp4_parser.yy" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
+#line 1095 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 118:
+#line 496 "dhcp4_parser.yy" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
+#line 1101 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 119:
 #line 497 "dhcp4_parser.yy" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
+#line 1107 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 120:
+#line 500 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1088 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1115 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 118:
-#line 499 "dhcp4_parser.yy" // lalr1.cc:859
+  case 121:
+#line 502 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1098 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1125 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 119:
-#line 505 "dhcp4_parser.yy" // lalr1.cc:859
+  case 122:
+#line 508 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1106 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1133 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 120:
-#line 507 "dhcp4_parser.yy" // lalr1.cc:859
+  case 123:
+#line 510 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 1116 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1143 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 121:
-#line 513 "dhcp4_parser.yy" // lalr1.cc:859
+  case 124:
+#line 516 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1124 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1151 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 122:
-#line 515 "dhcp4_parser.yy" // lalr1.cc:859
+  case 125:
+#line 518 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 1134 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1161 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 123:
-#line 521 "dhcp4_parser.yy" // lalr1.cc:859
+  case 126:
+#line 524 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1142 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1169 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 124:
-#line 523 "dhcp4_parser.yy" // lalr1.cc:859
+  case 127:
+#line 526 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1152 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1179 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 125:
-#line 529 "dhcp4_parser.yy" // lalr1.cc:859
+  case 128:
+#line 532 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 1161 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1188 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 126:
-#line 534 "dhcp4_parser.yy" // lalr1.cc:859
+  case 129:
+#line 537 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 1170 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1197 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 127:
-#line 539 "dhcp4_parser.yy" // lalr1.cc:859
+  case 130:
+#line 542 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 1179 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1206 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 128:
-#line 544 "dhcp4_parser.yy" // lalr1.cc:859
+  case 131:
+#line 547 "dhcp4_parser.yy" // lalr1.cc:859
     {
-    ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->add(duid);
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("connect-timeout", n);
 }
-#line 1188 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1215 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 129:
-#line 549 "dhcp4_parser.yy" // lalr1.cc:859
+  case 132:
+#line 552 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 1199 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1226 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 130:
-#line 554 "dhcp4_parser.yy" // lalr1.cc:859
+  case 133:
+#line 557 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1208 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1235 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 140:
+#line 572 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->add(duid);
+}
+#line 1244 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 137:
-#line 569 "dhcp4_parser.yy" // lalr1.cc:859
+  case 141:
+#line 577 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 1217 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1253 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 138:
-#line 574 "dhcp4_parser.yy" // lalr1.cc:859
+  case 142:
+#line 582 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr circuit(new StringElement("circuit-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(circuit);
 }
-#line 1226 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1262 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 139:
-#line 579 "dhcp4_parser.yy" // lalr1.cc:859
+  case 143:
+#line 587 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr client(new StringElement("client-id", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(client);
 }
-#line 1235 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1271 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 140:
-#line 584 "dhcp4_parser.yy" // lalr1.cc:859
+  case 144:
+#line 592 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1246 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1282 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 141:
-#line 589 "dhcp4_parser.yy" // lalr1.cc:859
+  case 145:
+#line 597 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1255 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1291 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 146:
-#line 602 "dhcp4_parser.yy" // lalr1.cc:859
+  case 150:
+#line 610 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1265 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1301 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 147:
-#line 606 "dhcp4_parser.yy" // lalr1.cc:859
+  case 151:
+#line 614 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1273 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1309 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 148:
-#line 610 "dhcp4_parser.yy" // lalr1.cc:859
+  case 152:
+#line 618 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1283 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1319 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 149:
-#line 614 "dhcp4_parser.yy" // lalr1.cc:859
+  case 153:
+#line 622 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1291 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1327 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 155:
-#line 627 "dhcp4_parser.yy" // lalr1.cc:859
+  case 159:
+#line 635 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1299 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1335 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 156:
-#line 629 "dhcp4_parser.yy" // lalr1.cc:859
+  case 160:
+#line 637 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1309 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1345 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 157:
-#line 635 "dhcp4_parser.yy" // lalr1.cc:859
+  case 161:
+#line 643 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1317 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1353 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 158:
-#line 637 "dhcp4_parser.yy" // lalr1.cc:859
+  case 162:
+#line 645 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1326 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1362 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 159:
-#line 643 "dhcp4_parser.yy" // lalr1.cc:859
+  case 163:
+#line 651 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1337 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1373 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 160:
-#line 648 "dhcp4_parser.yy" // lalr1.cc:859
+  case 164:
+#line 656 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1346 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1382 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 163:
-#line 660 "dhcp4_parser.yy" // lalr1.cc:859
+  case 167:
+#line 668 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), value);
 }
-#line 1355 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1391 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 164:
-#line 668 "dhcp4_parser.yy" // lalr1.cc:859
+  case 168:
+#line 676 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet4", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET4);
 }
-#line 1366 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1402 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 165:
-#line 673 "dhcp4_parser.yy" // lalr1.cc:859
+  case 169:
+#line 681 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1375 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1411 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 170:
-#line 693 "dhcp4_parser.yy" // lalr1.cc:859
+  case 174:
+#line 701 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1385 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1421 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 171:
-#line 697 "dhcp4_parser.yy" // lalr1.cc:859
+  case 175:
+#line 705 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -1404,1133 +1440,1086 @@ namespace isc { namespace dhcp {
     // }
     ctx.stack_.pop_back();
 }
-#line 1408 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1444 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 172:
-#line 716 "dhcp4_parser.yy" // lalr1.cc:859
+  case 176:
+#line 724 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet4 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1418 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1454 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 173:
-#line 720 "dhcp4_parser.yy" // lalr1.cc:859
+  case 177:
+#line 728 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1426 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1462 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 196:
-#line 752 "dhcp4_parser.yy" // lalr1.cc:859
+  case 200:
+#line 760 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1434 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1470 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 197:
-#line 754 "dhcp4_parser.yy" // lalr1.cc:859
+  case 201:
+#line 762 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 1444 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1480 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 198:
-#line 760 "dhcp4_parser.yy" // lalr1.cc:859
+  case 202:
+#line 768 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1452 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1488 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 199:
-#line 762 "dhcp4_parser.yy" // lalr1.cc:859
+  case 203:
+#line 770 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface", iface);
     ctx.leave();
 }
-#line 1462 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1498 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 200:
-#line 768 "dhcp4_parser.yy" // lalr1.cc:859
+  case 204:
+#line 776 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1470 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1506 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 201:
-#line 770 "dhcp4_parser.yy" // lalr1.cc:859
+  case 205:
+#line 778 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-interface-id", iface);
     ctx.leave();
 }
-#line 1480 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1516 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 202:
-#line 776 "dhcp4_parser.yy" // lalr1.cc:859
+  case 206:
+#line 784 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1488 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1524 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 203:
-#line 778 "dhcp4_parser.yy" // lalr1.cc:859
+  case 207:
+#line 786 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("4o6-subnet", iface);
     ctx.leave();
 }
-#line 1498 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1534 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 204:
-#line 784 "dhcp4_parser.yy" // lalr1.cc:859
+  case 208:
+#line 792 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1506 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1542 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 205:
-#line 786 "dhcp4_parser.yy" // lalr1.cc:859
+  case 209:
+#line 794 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 1516 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1552 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 206:
-#line 792 "dhcp4_parser.yy" // lalr1.cc:859
+  case 210:
+#line 800 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1524 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1560 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 207:
-#line 794 "dhcp4_parser.yy" // lalr1.cc:859
+  case 211:
+#line 802 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface-id", iface);
     ctx.leave();
 }
-#line 1534 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1570 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 208:
-#line 800 "dhcp4_parser.yy" // lalr1.cc:859
+  case 212:
+#line 808 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.CLIENT_CLASS);
 }
-#line 1542 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1578 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 209:
-#line 802 "dhcp4_parser.yy" // lalr1.cc:859
+  case 213:
+#line 810 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-class", cls);
     ctx.leave();
 }
-#line 1552 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1588 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 210:
-#line 808 "dhcp4_parser.yy" // lalr1.cc:859
+  case 214:
+#line 816 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1560 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1596 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 211:
-#line 810 "dhcp4_parser.yy" // lalr1.cc:859
+  case 215:
+#line 818 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rm(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservation-mode", rm);
     ctx.leave();
 }
-#line 1570 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1606 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 212:
-#line 816 "dhcp4_parser.yy" // lalr1.cc:859
+  case 216:
+#line 824 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 1579 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1615 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 213:
-#line 821 "dhcp4_parser.yy" // lalr1.cc:859
+  case 217:
+#line 829 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
 }
-#line 1588 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1624 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 214:
-#line 830 "dhcp4_parser.yy" // lalr1.cc:859
+  case 218:
+#line 838 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 1599 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1635 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 215:
-#line 835 "dhcp4_parser.yy" // lalr1.cc:859
+  case 219:
+#line 843 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1608 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1644 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 220:
-#line 852 "dhcp4_parser.yy" // lalr1.cc:859
+  case 224:
+#line 860 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1618 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1654 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 221:
-#line 856 "dhcp4_parser.yy" // lalr1.cc:859
+  case 225:
+#line 864 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1626 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1662 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 222:
-#line 863 "dhcp4_parser.yy" // lalr1.cc:859
+  case 226:
+#line 871 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1636 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1672 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 223:
-#line 867 "dhcp4_parser.yy" // lalr1.cc:859
+  case 227:
+#line 875 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1644 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1680 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 237:
-#line 893 "dhcp4_parser.yy" // lalr1.cc:859
+  case 241:
+#line 901 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 1653 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1689 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 240:
-#line 902 "dhcp4_parser.yy" // lalr1.cc:859
+  case 243:
+#line 908 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1661 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1697 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 241:
-#line 904 "dhcp4_parser.yy" // lalr1.cc:859
+  case 244:
+#line 910 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("type", prf);
+    ctx.leave();
+}
+#line 1707 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 245:
+#line 916 "dhcp4_parser.yy" // lalr1.cc:859
+    {
+    ctx.enter(ctx.NO_KEYWORD);
+}
+#line 1715 "dhcp4_parser.cc" // lalr1.cc:859
+    break;
+
+  case 246:
+#line 918 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("record-types", rtypes);
     ctx.leave();
 }
-#line 1671 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1725 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 242:
-#line 910 "dhcp4_parser.yy" // lalr1.cc:859
+  case 247:
+#line 924 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1679 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1733 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 243:
-#line 912 "dhcp4_parser.yy" // lalr1.cc:859
+  case 248:
+#line 926 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 1689 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1743 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 245:
-#line 920 "dhcp4_parser.yy" // lalr1.cc:859
+  case 250:
+#line 934 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1697 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1751 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 246:
-#line 922 "dhcp4_parser.yy" // lalr1.cc:859
+  case 251:
+#line 936 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 1707 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1761 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 247:
-#line 928 "dhcp4_parser.yy" // lalr1.cc:859
+  case 252:
+#line 942 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 1716 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1770 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 248:
-#line 937 "dhcp4_parser.yy" // lalr1.cc:859
+  case 253:
+#line 951 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 1727 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1781 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 249:
-#line 942 "dhcp4_parser.yy" // lalr1.cc:859
+  case 254:
+#line 956 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1736 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1790 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 254:
-#line 961 "dhcp4_parser.yy" // lalr1.cc:859
+  case 259:
+#line 975 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1746 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1800 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 255:
-#line 965 "dhcp4_parser.yy" // lalr1.cc:859
+  case 260:
+#line 979 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1754 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1808 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 256:
-#line 972 "dhcp4_parser.yy" // lalr1.cc:859
+  case 261:
+#line 986 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1764 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1818 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 257:
-#line 976 "dhcp4_parser.yy" // lalr1.cc:859
+  case 262:
+#line 990 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1772 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1826 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 269:
-#line 1005 "dhcp4_parser.yy" // lalr1.cc:859
+  case 274:
+#line 1019 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1780 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1834 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 270:
-#line 1007 "dhcp4_parser.yy" // lalr1.cc:859
+  case 275:
+#line 1021 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 1790 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1844 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 273:
-#line 1017 "dhcp4_parser.yy" // lalr1.cc:859
+  case 278:
+#line 1031 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 1799 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1853 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 274:
-#line 1025 "dhcp4_parser.yy" // lalr1.cc:859
+  case 279:
+#line 1039 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 1810 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1864 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 275:
-#line 1030 "dhcp4_parser.yy" // lalr1.cc:859
+  case 280:
+#line 1044 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1819 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1873 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 280:
-#line 1045 "dhcp4_parser.yy" // lalr1.cc:859
+  case 285:
+#line 1059 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1829 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1883 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 281:
-#line 1049 "dhcp4_parser.yy" // lalr1.cc:859
+  case 286:
+#line 1063 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1837 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1891 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 282:
-#line 1053 "dhcp4_parser.yy" // lalr1.cc:859
+  case 287:
+#line 1067 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1847 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1901 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 283:
-#line 1057 "dhcp4_parser.yy" // lalr1.cc:859
+  case 288:
+#line 1071 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1855 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1909 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 289:
-#line 1070 "dhcp4_parser.yy" // lalr1.cc:859
+  case 294:
+#line 1084 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1863 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1917 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 290:
-#line 1072 "dhcp4_parser.yy" // lalr1.cc:859
+  case 295:
+#line 1086 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 1873 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1927 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 291:
-#line 1081 "dhcp4_parser.yy" // lalr1.cc:859
+  case 296:
+#line 1095 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 1884 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1938 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 292:
-#line 1086 "dhcp4_parser.yy" // lalr1.cc:859
+  case 297:
+#line 1100 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1893 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1947 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 297:
-#line 1099 "dhcp4_parser.yy" // lalr1.cc:859
+  case 302:
+#line 1113 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1903 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1957 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 298:
-#line 1103 "dhcp4_parser.yy" // lalr1.cc:859
+  case 303:
+#line 1117 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1911 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1965 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 299:
-#line 1107 "dhcp4_parser.yy" // lalr1.cc:859
+  case 304:
+#line 1121 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1921 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1975 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 300:
-#line 1111 "dhcp4_parser.yy" // lalr1.cc:859
+  case 305:
+#line 1125 "dhcp4_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1929 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1983 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 317:
-#line 1138 "dhcp4_parser.yy" // lalr1.cc:859
+  case 322:
+#line 1152 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1937 "dhcp4_parser.cc" // lalr1.cc:859
+#line 1991 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 318:
-#line 1140 "dhcp4_parser.yy" // lalr1.cc:859
+  case 323:
+#line 1154 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr next_server(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("next-server", next_server);
     ctx.leave();
 }
-#line 1947 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2001 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 319:
-#line 1146 "dhcp4_parser.yy" // lalr1.cc:859
+  case 324:
+#line 1160 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1955 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2009 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 320:
-#line 1148 "dhcp4_parser.yy" // lalr1.cc:859
+  case 325:
+#line 1162 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr srv(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-hostname", srv);
     ctx.leave();
 }
-#line 1965 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2019 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 321:
-#line 1154 "dhcp4_parser.yy" // lalr1.cc:859
+  case 326:
+#line 1168 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1973 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2027 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 322:
-#line 1156 "dhcp4_parser.yy" // lalr1.cc:859
+  case 327:
+#line 1170 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr bootfile(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("boot-file-name", bootfile);
     ctx.leave();
 }
-#line 1983 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2037 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 323:
-#line 1162 "dhcp4_parser.yy" // lalr1.cc:859
+  case 328:
+#line 1176 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1991 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2045 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 324:
-#line 1164 "dhcp4_parser.yy" // lalr1.cc:859
+  case 329:
+#line 1178 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr addr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", addr);
     ctx.leave();
 }
-#line 2001 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2055 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 325:
-#line 1170 "dhcp4_parser.yy" // lalr1.cc:859
+  case 330:
+#line 1184 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2009 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2063 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 326:
-#line 1172 "dhcp4_parser.yy" // lalr1.cc:859
+  case 331:
+#line 1186 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2019 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2073 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 327:
-#line 1178 "dhcp4_parser.yy" // lalr1.cc:859
+  case 332:
+#line 1192 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2027 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2081 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 328:
-#line 1180 "dhcp4_parser.yy" // lalr1.cc:859
+  case 333:
+#line 1194 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
     ctx.leave();
 }
-#line 2037 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2091 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 329:
-#line 1186 "dhcp4_parser.yy" // lalr1.cc:859
+  case 334:
+#line 1200 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2045 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2099 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 330:
-#line 1188 "dhcp4_parser.yy" // lalr1.cc:859
+  case 335:
+#line 1202 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-id", hw);
     ctx.leave();
 }
-#line 2055 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2109 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 331:
-#line 1194 "dhcp4_parser.yy" // lalr1.cc:859
+  case 336:
+#line 1208 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2063 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2117 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 332:
-#line 1196 "dhcp4_parser.yy" // lalr1.cc:859
+  case 337:
+#line 1210 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("circuit-id", hw);
     ctx.leave();
 }
-#line 2073 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2127 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 333:
-#line 1203 "dhcp4_parser.yy" // lalr1.cc:859
+  case 338:
+#line 1217 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2081 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2135 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 334:
-#line 1205 "dhcp4_parser.yy" // lalr1.cc:859
+  case 339:
+#line 1219 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 2091 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2145 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 335:
-#line 1211 "dhcp4_parser.yy" // lalr1.cc:859
+  case 340:
+#line 1225 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2102 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2156 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 336:
-#line 1216 "dhcp4_parser.yy" // lalr1.cc:859
+  case 341:
+#line 1230 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2111 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2165 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 337:
-#line 1224 "dhcp4_parser.yy" // lalr1.cc:859
+  case 342:
+#line 1238 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 2122 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2176 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 338:
-#line 1229 "dhcp4_parser.yy" // lalr1.cc:859
+  case 343:
+#line 1243 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2131 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2185 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 339:
-#line 1234 "dhcp4_parser.yy" // lalr1.cc:859
+  case 344:
+#line 1248 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2139 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2193 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 340:
-#line 1236 "dhcp4_parser.yy" // lalr1.cc:859
+  case 345:
+#line 1250 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", ip);
     ctx.leave();
 }
-#line 2149 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2203 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 341:
-#line 1245 "dhcp4_parser.yy" // lalr1.cc:859
+  case 346:
+#line 1259 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 2160 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2214 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 342:
-#line 1250 "dhcp4_parser.yy" // lalr1.cc:859
+  case 347:
+#line 1264 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2169 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2223 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 345:
-#line 1259 "dhcp4_parser.yy" // lalr1.cc:859
+  case 350:
+#line 1273 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2179 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2233 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 346:
-#line 1263 "dhcp4_parser.yy" // lalr1.cc:859
+  case 351:
+#line 1277 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2187 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2241 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 359:
-#line 1286 "dhcp4_parser.yy" // lalr1.cc:859
+  case 364:
+#line 1300 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2195 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2249 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 360:
-#line 1288 "dhcp4_parser.yy" // lalr1.cc:859
+  case 365:
+#line 1302 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 2205 "dhcp4_parser.cc" // lalr1.cc:859
-    break;
-
-  case 361:
-#line 1297 "dhcp4_parser.yy" // lalr1.cc:859
-    {
-    ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("server-id", m);
-    ctx.stack_.push_back(m);
-    ctx.enter(ctx.SERVER_ID);
-}
-#line 2216 "dhcp4_parser.cc" // lalr1.cc:859
-    break;
-
-  case 362:
-#line 1302 "dhcp4_parser.yy" // lalr1.cc:859
-    {
-    ctx.stack_.pop_back();
-    ctx.leave();
-}
-#line 2225 "dhcp4_parser.cc" // lalr1.cc:859
-    break;
-
-  case 372:
-#line 1320 "dhcp4_parser.yy" // lalr1.cc:859
-    {
-    ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("htype", htype);
-}
-#line 2234 "dhcp4_parser.cc" // lalr1.cc:859
-    break;
-
-  case 373:
-#line 1325 "dhcp4_parser.yy" // lalr1.cc:859
-    {
-    ctx.enter(ctx.NO_KEYWORD);
-}
-#line 2242 "dhcp4_parser.cc" // lalr1.cc:859
-    break;
-
-  case 374:
-#line 1327 "dhcp4_parser.yy" // lalr1.cc:859
-    {
-    ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("identifier", id);
-    ctx.leave();
-}
-#line 2252 "dhcp4_parser.cc" // lalr1.cc:859
-    break;
-
-  case 375:
-#line 1333 "dhcp4_parser.yy" // lalr1.cc:859
-    {
-    ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("time", time);
-}
-#line 2261 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2259 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 376:
-#line 1338 "dhcp4_parser.yy" // lalr1.cc:859
-    {
-    ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("enterprise-id", time);
-}
-#line 2270 "dhcp4_parser.cc" // lalr1.cc:859
-    break;
-
-  case 377:
-#line 1345 "dhcp4_parser.yy" // lalr1.cc:859
+  case 366:
+#line 1312 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 2279 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2268 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 378:
-#line 1352 "dhcp4_parser.yy" // lalr1.cc:859
+  case 367:
+#line 1319 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 2290 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2279 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 379:
-#line 1357 "dhcp4_parser.yy" // lalr1.cc:859
+  case 368:
+#line 1324 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2299 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2288 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 384:
-#line 1370 "dhcp4_parser.yy" // lalr1.cc:859
+  case 373:
+#line 1337 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2307 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2296 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 385:
-#line 1372 "dhcp4_parser.yy" // lalr1.cc:859
+  case 374:
+#line 1339 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
     ctx.leave();
 }
-#line 2317 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2306 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 386:
-#line 1378 "dhcp4_parser.yy" // lalr1.cc:859
+  case 375:
+#line 1345 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2325 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2314 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 387:
-#line 1380 "dhcp4_parser.yy" // lalr1.cc:859
+  case 376:
+#line 1347 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 2335 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2324 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 388:
-#line 1388 "dhcp4_parser.yy" // lalr1.cc:859
+  case 377:
+#line 1355 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2346 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2335 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 389:
-#line 1393 "dhcp4_parser.yy" // lalr1.cc:859
+  case 378:
+#line 1360 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2355 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2344 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 390:
-#line 1400 "dhcp4_parser.yy" // lalr1.cc:859
+  case 379:
+#line 1367 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2363 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2352 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 391:
-#line 1402 "dhcp4_parser.yy" // lalr1.cc:859
+  case 380:
+#line 1369 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp6", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2372 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2361 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 392:
-#line 1407 "dhcp4_parser.yy" // lalr1.cc:859
+  case 381:
+#line 1374 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2380 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2369 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 393:
-#line 1409 "dhcp4_parser.yy" // lalr1.cc:859
+  case 382:
+#line 1376 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2389 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2378 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 394:
-#line 1419 "dhcp4_parser.yy" // lalr1.cc:859
+  case 383:
+#line 1386 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 2400 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2389 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 395:
-#line 1424 "dhcp4_parser.yy" // lalr1.cc:859
+  case 384:
+#line 1391 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2409 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2398 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 399:
-#line 1441 "dhcp4_parser.yy" // lalr1.cc:859
+  case 388:
+#line 1408 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 2420 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2409 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 400:
-#line 1446 "dhcp4_parser.yy" // lalr1.cc:859
+  case 389:
+#line 1413 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2429 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2418 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 403:
-#line 1458 "dhcp4_parser.yy" // lalr1.cc:859
+  case 392:
+#line 1425 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 2439 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2428 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 404:
-#line 1462 "dhcp4_parser.yy" // lalr1.cc:859
+  case 393:
+#line 1429 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2447 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2436 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 412:
-#line 1477 "dhcp4_parser.yy" // lalr1.cc:859
+  case 401:
+#line 1444 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 2456 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2445 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 413:
-#line 1481 "dhcp4_parser.yy" // lalr1.cc:859
+  case 402:
+#line 1448 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2464 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2453 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 414:
-#line 1483 "dhcp4_parser.yy" // lalr1.cc:859
+  case 403:
+#line 1450 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 2474 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2463 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 415:
-#line 1489 "dhcp4_parser.yy" // lalr1.cc:859
+  case 404:
+#line 1456 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 2485 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2474 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 416:
-#line 1494 "dhcp4_parser.yy" // lalr1.cc:859
+  case 405:
+#line 1461 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2494 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2483 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 419:
-#line 1503 "dhcp4_parser.yy" // lalr1.cc:859
+  case 408:
+#line 1470 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2504 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2493 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 420:
-#line 1507 "dhcp4_parser.yy" // lalr1.cc:859
+  case 409:
+#line 1474 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2512 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2501 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 423:
-#line 1515 "dhcp4_parser.yy" // lalr1.cc:859
+  case 412:
+#line 1482 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2520 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2509 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
-  case 424:
-#line 1517 "dhcp4_parser.yy" // lalr1.cc:859
+  case 413:
+#line 1484 "dhcp4_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 2530 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2519 "dhcp4_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 2534 "dhcp4_parser.cc" // lalr1.cc:859
+#line 2523 "dhcp4_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -2785,84 +2774,82 @@ namespace isc { namespace dhcp {
   }
 
 
-  const short int Dhcp4Parser::yypact_ninf_ = -411;
+  const short int Dhcp4Parser::yypact_ninf_ = -399;
 
   const signed char Dhcp4Parser::yytable_ninf_ = -1;
 
   const short int
   Dhcp4Parser::yypact_[] =
   {
-     187,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,    32,    20,    73,    80,   106,   110,   122,   123,   126,
-     134,   153,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,    20,    64,    18,    95,    56,    24,    -4,    30,
-     146,   115,   -33,  -411,   179,   193,   212,   198,   215,  -411,
-    -411,  -411,  -411,   216,  -411,    34,  -411,  -411,  -411,  -411,
-    -411,  -411,   218,   219,  -411,  -411,  -411,   220,   227,   228,
-     230,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,   231,
-    -411,  -411,  -411,    41,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,    42,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-     232,   235,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,    48,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,    52,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,   207,   238,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-     244,  -411,  -411,  -411,   245,  -411,  -411,  -411,   234,   249,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,   254,  -411,  -411,  -411,  -411,   251,   250,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,    63,  -411,  -411,
-    -411,  -411,    20,    20,  -411,   162,   257,   261,   263,   265,
-    -411,    18,  -411,   267,   171,   172,   281,   282,   283,   190,
-     191,   192,   194,   284,   288,   290,   291,   292,   293,   294,
-     295,   203,   296,   297,    95,  -411,   299,   300,    56,  -411,
-      46,   301,   302,   303,   304,   305,   306,   307,   213,   214,
-     309,   310,   312,   313,    24,  -411,   314,    -4,  -411,   315,
-     316,   317,   318,   319,   320,   321,   322,   323,  -411,    30,
-     324,   325,   233,   326,   327,   329,   236,  -411,   146,   330,
-     237,  -411,   115,   335,   336,    11,  -411,  -411,  -411,   337,
-     338,   339,    20,    20,  -411,   340,  -411,  -411,   246,   341,
-     342,  -411,  -411,  -411,  -411,   345,   346,   347,   348,   349,
-     350,   351,   352,  -411,   355,   356,  -411,   359,   258,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,   334,   354,  -411,
-    -411,  -411,   269,   270,   271,   365,   273,   274,   275,  -411,
-    -411,   277,   278,   373,   372,  -411,   285,  -411,   286,   287,
-     359,   289,   298,   308,   311,   328,   331,  -411,   332,   333,
-    -411,   343,   344,   353,  -411,  -411,   357,  -411,  -411,   358,
-      20,  -411,    20,    95,   262,  -411,  -411,    56,  -411,   113,
-     113,   374,   379,   381,   168,    29,   383,   360,   127,    98,
-      64,  -411,  -411,  -411,   376,  -411,    46,  -411,  -411,  -411,
-     384,  -411,  -411,  -411,  -411,  -411,   385,   362,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,    93,  -411,   100,
-    -411,  -411,   104,  -411,  -411,  -411,   390,   391,   393,  -411,
-     139,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-     155,  -411,   392,   396,  -411,  -411,   394,   398,  -411,  -411,
-     397,   399,  -411,  -411,  -411,  -411,  -411,  -411,    35,  -411,
-    -411,  -411,  -411,  -411,    94,  -411,   401,   402,  -411,   400,
-     169,  -411,  -411,   404,   406,   407,  -411,  -411,  -411,   170,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,   180,  -411,  -411,
-    -411,   199,    20,   361,  -411,  -411,   408,   409,  -411,  -411,
-     410,   414,  -411,  -411,   411,  -411,   416,   262,  -411,  -411,
-     417,   418,   419,   363,   364,   366,   113,  -411,  -411,    24,
-    -411,   374,   146,  -411,   379,   115,  -411,   381,   168,  -411,
-      29,  -411,   -33,  -411,   383,   367,   360,  -411,   420,   369,
-     370,   371,   127,  -411,   421,   424,    98,  -411,  -411,   412,
-    -411,    -4,  -411,   384,    30,  -411,   385,   428,  -411,   429,
-    -411,   375,   377,   378,  -411,  -411,  -411,  -411,   200,  -411,
-     425,  -411,   427,  -411,  -411,  -411,   201,  -411,  -411,  -411,
-     380,  -411,  -411,  -411,  -411,   382,   386,  -411,  -411,   202,
-    -411,   430,  -411,   387,   432,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,   163,
-    -411,    61,   432,  -411,  -411,   433,  -411,  -411,  -411,   209,
-    -411,  -411,  -411,  -411,  -411,   436,   388,   439,    61,  -411,
-     431,  -411,   395,  -411,   437,  -411,  -411,   189,  -411,   389,
-     437,  -411,  -411,   211,  -411,  -411,   441,   389,  -411,   403,
-    -411,  -411
+     108,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,    30,    18,    40,    52,    59,    70,    91,    99,   112,
+     130,   138,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,    18,   -60,    16,    89,   202,    17,   -13,    23,
+     129,     0,   -36,  -399,   160,   146,   205,   173,   213,  -399,
+    -399,  -399,  -399,   219,  -399,    45,  -399,  -399,  -399,  -399,
+    -399,  -399,   220,   221,  -399,  -399,  -399,   223,   224,   226,
+     227,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   228,  -399,
+    -399,  -399,    54,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,    57,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   231,   233,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,    60,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,    72,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,   230,   237,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   238,  -399,
+    -399,  -399,   240,  -399,  -399,   246,   242,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   251,  -399,
+    -399,  -399,  -399,   248,   254,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,    73,  -399,  -399,  -399,  -399,    18,
+      18,  -399,   164,   259,   261,   263,   264,  -399,    16,  -399,
+     265,   141,   171,   268,   269,   270,   178,   181,   182,   183,
+     271,   273,   274,   278,   279,   280,   281,   188,   283,   284,
+      89,  -399,   285,   286,   202,  -399,    94,   287,   288,   289,
+     290,   291,   292,   293,   200,   199,   296,   297,   298,   299,
+      17,  -399,   300,   -13,  -399,   301,   302,   303,   304,   305,
+     306,   307,   308,   309,  -399,    23,   310,   311,   218,   313,
+     314,   315,   222,  -399,   129,   316,   225,  -399,     0,   317,
+     319,   147,  -399,  -399,  -399,   320,   321,   322,    18,    18,
+    -399,   323,  -399,  -399,   229,   324,   325,  -399,  -399,  -399,
+    -399,   328,   329,   330,   331,   334,   335,   336,  -399,   337,
+     338,  -399,   341,   244,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,   339,   345,  -399,  -399,  -399,   245,   252,   253,
+     346,   255,   256,   257,  -399,  -399,   260,   262,   353,   355,
+    -399,   266,  -399,   267,   272,   341,   275,   276,   277,   282,
+     294,   295,  -399,   312,   318,  -399,   326,   327,   332,  -399,
+    -399,   333,  -399,  -399,   340,    18,  -399,    18,    89,   247,
+    -399,  -399,   202,  -399,   113,   113,   358,   359,   360,   142,
+      22,   361,   342,   144,   -60,  -399,  -399,  -399,   366,  -399,
+      94,  -399,  -399,  -399,   368,  -399,  -399,  -399,  -399,  -399,
+     370,   343,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,   123,  -399,   124,  -399,  -399,   125,  -399,  -399,  -399,
+    -399,   374,   376,   377,   378,  -399,   143,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,   149,  -399,   379,
+     381,  -399,  -399,   380,   385,  -399,  -399,   383,   387,  -399,
+    -399,  -399,  -399,  -399,    28,  -399,  -399,  -399,  -399,  -399,
+    -399,    93,  -399,   388,   390,  -399,   391,   150,  -399,  -399,
+    -399,   153,  -399,  -399,  -399,   157,    18,   344,  -399,  -399,
+     392,   393,  -399,  -399,   394,   396,  -399,  -399,   389,  -399,
+     397,   247,  -399,  -399,   398,   399,   400,   401,   347,   348,
+     349,   350,   113,  -399,  -399,    17,  -399,   358,   129,  -399,
+     359,     0,  -399,   360,   142,  -399,    22,  -399,   -36,  -399,
+     361,   352,   342,  -399,   402,   403,   144,  -399,  -399,   404,
+    -399,   -13,  -399,   368,    23,  -399,   370,   407,  -399,   408,
+    -399,   189,   354,   356,   357,  -399,  -399,  -399,  -399,  -399,
+     167,  -399,   409,  -399,   410,  -399,  -399,  -399,   176,  -399,
+    -399,  -399,   362,   363,  -399,  -399,   177,  -399,   411,  -399,
+     364,   413,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   186,
+    -399,    10,   413,  -399,  -399,   417,  -399,  -399,  -399,   179,
+    -399,  -399,  -399,  -399,  -399,   418,   365,   421,    10,  -399,
+     422,  -399,   367,  -399,   419,  -399,  -399,   187,  -399,   351,
+     419,  -399,  -399,   180,  -399,  -399,   424,   351,  -399,   369,
+    -399,  -399
   };
 
   const unsigned short int
@@ -2871,106 +2858,104 @@ namespace isc { namespace dhcp {
        0,     2,     4,     6,     8,    10,    12,    14,    16,    18,
       20,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     1,    36,    30,    26,    25,    22,    23,    24,
-      29,     3,    27,    28,    45,     5,    56,     7,    94,     9,
-     172,    11,   282,    13,   299,    15,   222,    17,   256,    19,
-     148,    21,    40,    32,     0,     0,     0,     0,     0,   301,
-     224,   258,     0,    42,     0,    41,     0,     0,    33,    54,
-     394,   390,   392,     0,    53,     0,    47,    49,    51,    52,
-      50,    88,     0,     0,   317,   100,   102,     0,     0,     0,
-       0,   164,   214,   248,   129,   341,   140,   159,   361,     0,
-     378,   388,    81,     0,    58,    60,    61,    62,    63,    78,
-      79,    65,    66,    67,    68,    72,    73,    64,    70,    71,
-      80,    69,    74,    75,    76,    77,    96,    98,     0,    90,
-      92,    93,   345,   198,   200,   202,   274,   196,   204,   206,
-       0,     0,   210,   208,   291,   337,   195,   176,   177,   178,
-     190,     0,   174,   181,   192,   193,   194,   182,   183,   186,
-     188,   184,   185,   179,   180,   187,   191,   189,   289,   288,
-     287,     0,   284,   286,   319,   321,   335,   325,   327,   331,
-     329,   333,   323,   316,   312,     0,   302,   303,   313,   314,
-     315,   309,   305,   310,   307,   308,   311,   306,   115,   123,
-       0,   242,   240,   245,     0,   235,   239,   236,     0,   225,
-     226,   228,   238,   229,   230,   231,   244,   232,   233,   234,
-     269,     0,   267,   268,   271,   272,     0,   259,   260,   262,
-     263,   264,   265,   266,   155,   157,   152,     0,   150,   153,
-     154,    37,     0,     0,    31,     0,     0,     0,     0,     0,
-      44,     0,    46,     0,     0,     0,     0,     0,     0,     0,
+      29,     3,    27,    28,    45,     5,    56,     7,    93,     9,
+     176,    11,   287,    13,   304,    15,   226,    17,   261,    19,
+     152,    21,    40,    32,     0,     0,     0,     0,     0,   306,
+     228,   263,     0,    42,     0,    41,     0,     0,    33,    54,
+     383,   379,   381,     0,    53,     0,    47,    49,    51,    52,
+      50,    87,     0,     0,   322,    99,   101,     0,     0,     0,
+       0,   168,   218,   253,   132,   346,   144,   163,     0,   367,
+     377,    80,     0,    58,    60,    61,    62,    63,    77,    78,
+      65,    66,    67,    68,    72,    73,    64,    70,    71,    79,
+      69,    74,    75,    76,    95,    97,     0,    89,    91,    92,
+     350,   202,   204,   206,   279,   200,   208,   210,     0,     0,
+     214,   212,   296,   342,   199,   180,   181,   182,   194,     0,
+     178,   185,   196,   197,   198,   186,   187,   190,   192,   188,
+     189,   183,   184,   191,   195,   193,   294,   293,   292,     0,
+     289,   291,   324,   326,   340,   330,   332,   336,   334,   338,
+     328,   321,   317,     0,   307,   308,   318,   319,   320,   314,
+     310,   315,   312,   313,   316,   311,   243,   126,     0,   247,
+     245,   250,     0,   239,   240,     0,   229,   230,   232,   242,
+     233,   234,   235,   249,   236,   237,   238,   274,     0,   272,
+     273,   276,   277,     0,   264,   265,   267,   268,   269,   270,
+     271,   159,   161,   156,     0,   154,   157,   158,    37,     0,
+       0,    31,     0,     0,     0,     0,     0,    44,     0,    46,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    57,     0,     0,     0,    95,
-     347,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   173,     0,     0,   283,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   300,     0,
-       0,     0,     0,     0,     0,     0,     0,   223,     0,     0,
-       0,   257,     0,     0,     0,     0,   149,    43,    34,     0,
-       0,     0,     0,     0,    48,     0,    86,    87,     0,     0,
-       0,    82,    83,    84,    85,     0,     0,     0,     0,     0,
-       0,     0,     0,   377,     0,     0,    59,     0,     0,    91,
-     359,   357,   358,   353,   354,   355,   356,     0,   348,   349,
-     351,   352,     0,     0,     0,     0,     0,     0,     0,   212,
-     213,     0,     0,     0,     0,   175,     0,   285,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   304,     0,     0,
-     237,     0,     0,     0,   247,   227,     0,   273,   261,     0,
-       0,   151,     0,     0,     0,   391,   393,     0,   318,     0,
-       0,   166,   216,   250,     0,     0,   142,     0,     0,     0,
-       0,    38,    97,    99,     0,   346,     0,   199,   201,   203,
-     276,   197,   205,   207,   211,   209,   293,     0,   290,   320,
-     322,   336,   326,   328,   332,   330,   334,   324,   116,   124,
-     243,   241,   246,   270,   156,   158,    35,     0,   399,     0,
-     396,   398,     0,   117,   119,   121,     0,     0,     0,   114,
-       0,   104,   106,   107,   108,   109,   110,   111,   112,   113,
-       0,   170,     0,   167,   168,   220,     0,   217,   218,   254,
-       0,   251,   252,   128,   137,   138,   139,   133,     0,   131,
-     134,   135,   136,   343,     0,   146,     0,   143,   144,     0,
-       0,   161,   373,     0,     0,     0,   371,   365,   370,     0,
-     363,   368,   366,   367,   369,   384,   386,     0,   380,   382,
-     383,     0,    40,     0,   350,   280,     0,   277,   278,   297,
-       0,   294,   295,   339,     0,    55,     0,     0,   395,    89,
-       0,     0,     0,     0,     0,     0,     0,   101,   103,     0,
-     165,     0,   224,   215,     0,   258,   249,     0,     0,   130,
-       0,   342,     0,   141,     0,     0,     0,   160,     0,     0,
-       0,     0,     0,   362,     0,     0,     0,   379,   389,     0,
-     360,     0,   275,     0,   301,   292,     0,     0,   338,     0,
-     397,     0,     0,     0,   125,   126,   127,   105,     0,   169,
-       0,   219,     0,   253,   132,   344,     0,   145,   163,   162,
-       0,   372,   375,   376,   364,     0,     0,   381,    39,     0,
-     279,     0,   296,     0,     0,   118,   120,   122,   171,   221,
-     255,   147,   374,   385,   387,   281,   298,   340,   403,     0,
-     401,     0,     0,   400,   415,     0,   413,   411,   407,     0,
-     405,   409,   410,   408,   402,     0,     0,     0,     0,   404,
-       0,   412,     0,   406,     0,   414,   419,     0,   417,     0,
-       0,   416,   423,     0,   421,   418,     0,     0,   420,     0,
-     422,   424
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    57,     0,     0,     0,    94,   352,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   177,     0,     0,   288,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   305,     0,     0,     0,     0,     0,
+       0,     0,     0,   227,     0,     0,     0,   262,     0,     0,
+       0,     0,   153,    43,    34,     0,     0,     0,     0,     0,
+      48,     0,    85,    86,     0,     0,     0,    81,    82,    83,
+      84,     0,     0,     0,     0,     0,     0,     0,   366,     0,
+       0,    59,     0,     0,    90,   364,   362,   363,   358,   359,
+     360,   361,     0,   353,   354,   356,   357,     0,     0,     0,
+       0,     0,     0,     0,   216,   217,     0,     0,     0,     0,
+     179,     0,   290,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   309,     0,     0,   241,     0,     0,     0,   252,
+     231,     0,   278,   266,     0,     0,   155,     0,     0,     0,
+     380,   382,     0,   323,     0,     0,   170,   220,   255,     0,
+       0,   146,     0,     0,     0,    38,    96,    98,     0,   351,
+       0,   203,   205,   207,   281,   201,   209,   211,   215,   213,
+     298,     0,   295,   325,   327,   341,   331,   333,   337,   335,
+     339,   329,   244,   127,   248,   246,   251,   275,   160,   162,
+      35,     0,   388,     0,   385,   387,     0,   115,   120,   122,
+     124,     0,     0,     0,     0,   114,     0,   103,   105,   106,
+     107,   108,   109,   110,   111,   112,   113,     0,   174,     0,
+     171,   172,   224,     0,   221,   222,   259,     0,   256,   257,
+     140,   141,   142,   143,     0,   134,   136,   137,   138,   139,
+     348,     0,   150,     0,   147,   148,     0,     0,   165,   373,
+     375,     0,   369,   371,   372,     0,    40,     0,   355,   285,
+       0,   282,   283,   302,     0,   299,   300,   344,     0,    55,
+       0,     0,   384,    88,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   100,   102,     0,   169,     0,   228,   219,
+       0,   263,   254,     0,     0,   133,     0,   347,     0,   145,
+       0,     0,     0,   164,     0,     0,     0,   368,   378,     0,
+     365,     0,   280,     0,   306,   297,     0,     0,   343,     0,
+     386,     0,     0,     0,     0,   128,   129,   130,   131,   104,
+       0,   173,     0,   223,     0,   258,   135,   349,     0,   149,
+     167,   166,     0,     0,   370,    39,     0,   284,     0,   301,
+       0,     0,   117,   118,   119,   116,   121,   123,   125,   175,
+     225,   260,   151,   374,   376,   286,   303,   345,   392,     0,
+     390,     0,     0,   389,   404,     0,   402,   400,   396,     0,
+     394,   398,   399,   397,   391,     0,     0,     0,     0,   393,
+       0,   401,     0,   395,     0,   403,   408,     0,   406,     0,
+       0,   405,   412,     0,   410,   407,     0,     0,   409,     0,
+     411,   413
   };
 
   const short int
   Dhcp4Parser::yypgoto_[] =
   {
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,     3,  -411,  -411,  -411,  -411,    16,  -411,  -411,
-      57,  -411,   -94,  -411,   -54,  -411,  -411,  -411,   206,  -411,
-    -411,  -411,  -411,    36,   176,   -56,   -40,   -38,  -411,  -411,
-     -37,  -411,  -411,    37,   174,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,    33,  -106,  -398,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,   -59,  -411,  -410,  -411,  -411,
-    -411,  -411,  -411,  -411,  -117,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -122,  -411,  -411,  -411,  -111,   140,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -112,  -411,  -411,  -411,  -411,
-     -92,  -411,  -411,  -411,   -88,   183,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -399,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,   -91,  -411,
-    -411,  -411,   -90,  -411,   173,  -411,   -52,  -411,  -411,  -411,
-    -411,   -48,  -411,  -411,  -411,  -411,  -411,   -47,  -411,  -411,
-    -411,   -89,  -411,  -411,  -411,   -86,  -411,   164,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -113,  -411,
-    -411,  -411,  -109,   197,  -411,  -411,  -411,  -411,  -411,  -411,
-    -110,  -411,  -411,  -411,  -107,  -411,   186,   -43,  -411,  -257,
-    -411,  -256,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,    62,  -411,  -411,
-    -411,  -411,  -411,  -411,   -93,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,   -96,  -411,  -411,  -411,  -411,  -411,
-    -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,   -55,  -411,
-    -411,  -411,  -159,  -411,  -411,  -174,  -411,  -411,  -411,  -411,
-    -411,  -411,  -185,  -411,  -411,  -191,  -411
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,     9,  -399,  -399,  -399,  -399,   -16,  -399,  -399,
+      46,  -399,   -94,  -399,   -54,  -399,  -399,  -399,   190,  -399,
+    -399,  -399,  -399,    26,   165,   -56,   -40,   -38,  -399,  -399,
+     -37,  -399,  -399,    24,   166,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,    27,  -109,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,   -59,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -120,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -125,  -399,  -399,  -399,  -116,   134,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -115,  -399,  -399,
+    -399,  -399,  -101,  -399,  -399,  -399,   -97,   172,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -398,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+     -95,  -399,  -399,  -399,   -91,  -399,   154,  -399,   -52,  -399,
+    -399,  -399,  -399,  -399,   -48,  -399,  -399,  -399,  -399,  -399,
+     -47,  -399,  -399,  -399,   -93,  -399,  -399,  -399,   -92,  -399,
+     155,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -112,  -399,  -399,  -399,  -107,   184,  -399,  -399,  -399,
+    -399,  -399,  -399,  -114,  -399,  -399,  -399,  -108,  -399,   170,
+     -43,  -399,  -261,  -399,  -258,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+      48,  -399,  -399,  -399,  -399,  -399,  -399,  -399,   -96,  -399,
+    -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,  -399,
+    -399,  -399,   -62,  -399,  -399,  -399,  -161,  -399,  -399,  -176,
+    -399,  -399,  -399,  -399,  -399,  -399,  -187,  -399,  -399,  -193,
+    -399
   };
 
   const short int
@@ -2978,291 +2963,284 @@ namespace isc { namespace dhcp {
   {
       -1,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    63,    31,    32,    53,    67,    68,    33,    52,
-     432,   542,    64,    65,   102,    35,    54,    75,    76,    77,
-     246,    37,    55,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   253,   128,   129,    39,    56,   130,   276,   131,
-     277,   112,   257,   113,   258,   480,   481,   206,   310,   483,
-     560,   484,   561,   485,   562,   207,   311,   487,   488,   489,
-     507,   114,   266,   508,   509,   510,   511,   512,   115,   268,
-     516,   517,   518,   582,    51,    62,   237,   238,   239,   323,
-     240,   324,   116,   269,   520,   521,   117,   263,   492,   493,
-     494,   569,    41,    57,   151,   152,   153,   285,   154,   281,
-     155,   282,   156,   283,   157,   286,   158,   287,   159,   291,
-     160,   290,   161,   162,   118,   264,   496,   497,   498,   572,
-      47,    60,   208,   209,   210,   211,   212,   213,   214,   215,
-     314,   216,   313,   217,   218,   315,   219,   119,   265,   500,
-     501,   502,   575,    49,    61,   226,   227,   228,   229,   230,
-     319,   231,   232,   233,   164,   284,   546,   547,   548,   601,
-      43,    58,   171,   172,   173,   296,   165,   292,   550,   551,
-     552,   604,    45,    59,   185,   186,   187,   120,   256,   189,
-     299,   190,   300,   191,   307,   192,   302,   193,   303,   194,
-     305,   195,   304,   196,   306,   197,   301,   167,   293,   554,
-     607,   121,   267,   514,   280,   367,   368,   369,   370,   371,
-     434,   122,   270,   529,   530,   531,   532,   588,   533,   534,
-     123,   124,   272,   537,   538,   539,   594,   540,   595,   125,
-     273,    78,   248,    79,   249,    80,   247,   469,   470,   471,
-     556,   659,   660,   661,   669,   670,   671,   672,   677,   673,
-     675,   687,   688,   689,   693,   694,   696
+     426,   526,    64,    65,   101,    35,    54,    75,    76,    77,
+     243,    37,    55,   102,   103,   104,   105,   106,   107,   108,
+     109,   110,   250,   126,   127,    39,    56,   128,   272,   129,
+     273,   111,   254,   112,   255,   476,   477,   478,   544,   625,
+     479,   545,   480,   546,   481,   547,   204,   307,   483,   484,
+     485,   486,   113,   263,   504,   505,   506,   507,   508,   509,
+     114,   265,   513,   514,   515,   568,    51,    62,   234,   235,
+     236,   319,   237,   320,   115,   266,   517,   518,   116,   260,
+     489,   490,   491,   555,    41,    57,   149,   150,   151,   281,
+     152,   277,   153,   278,   154,   279,   155,   282,   156,   283,
+     157,   287,   158,   286,   159,   160,   117,   261,   493,   494,
+     495,   558,    47,    60,   205,   206,   207,   208,   209,   210,
+     211,   306,   212,   310,   213,   309,   214,   215,   311,   216,
+     118,   262,   497,   498,   499,   561,    49,    61,   223,   224,
+     225,   226,   227,   315,   228,   229,   230,   162,   280,   530,
+     531,   532,   581,    43,    58,   169,   170,   171,   292,   163,
+     288,   534,   535,   536,   584,    45,    59,   183,   184,   185,
+     119,   253,   187,   295,   188,   296,   189,   303,   190,   298,
+     191,   299,   192,   301,   193,   300,   194,   302,   195,   297,
+     165,   289,   538,   587,   120,   264,   511,   276,   362,   363,
+     364,   365,   366,   428,   121,   122,   268,   521,   522,   523,
+     574,   524,   575,   123,   269,    78,   245,    79,   246,    80,
+     244,   463,   464,   465,   540,   639,   640,   641,   649,   650,
+     651,   652,   657,   653,   655,   667,   668,   669,   673,   674,
+     676
   };
 
   const unsigned short int
   Dhcp4Parser::yytable_[] =
   {
-      74,   147,   223,   146,   169,   183,   205,   222,   236,   224,
-     163,   170,   184,   225,   166,    30,   188,   148,   528,   149,
-     150,   482,   482,   365,   366,    23,   513,    24,    69,    25,
-     527,   132,    22,    93,   234,   235,   132,   251,   578,    83,
-      84,   579,   252,   168,   274,   278,    84,   174,   175,   275,
-     279,   294,    87,    88,    89,   297,   295,   133,   134,   135,
-     298,    93,    84,   174,   175,    73,   325,    93,   126,   127,
-     136,   326,   137,   138,   139,   140,   141,   142,   234,   235,
-      34,   143,   144,    93,   199,   176,   143,    36,   145,   177,
-     178,   179,   180,   181,    73,   182,   274,   580,    70,   199,
-     581,   555,   360,   557,    71,    72,    81,   278,   558,    82,
-      83,    84,   559,    38,    85,    86,    73,    40,    26,    27,
-      28,    29,    73,    87,    88,    89,    90,    91,    73,    42,
-      44,    92,    93,    46,   198,   473,   474,   475,   476,   477,
-     478,    48,   566,   664,    73,   665,   666,   567,   198,    94,
-      95,   199,   476,   199,   220,   200,   201,   221,   566,    73,
-      50,    96,    66,   568,    97,    98,   662,   198,   482,   663,
-      99,   100,   586,   592,   101,   535,   536,   587,   593,   365,
-     366,   625,   528,   596,   199,   241,   200,   201,   597,   202,
-     203,   204,   690,    73,   527,   691,   242,    74,   522,   523,
-     524,   525,   245,   294,   325,   297,   244,   598,   648,   651,
-     655,    73,   678,    73,   697,   308,   243,   679,   245,   698,
-     250,   362,   254,   255,   259,    73,   361,   503,   504,   505,
-     506,   260,   261,   363,   262,   271,   288,   364,   147,   289,
-     146,   309,   317,   169,    73,   327,   328,   163,   312,   316,
-     170,   166,   318,   322,   148,   183,   149,   150,   320,   321,
-     329,   330,   184,   223,   205,   331,   188,   332,   222,   333,
-     224,   335,   336,   337,   225,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,   338,   339,   340,   345,   341,
-     342,   343,   346,   344,   347,   348,   349,   350,   351,   352,
-     354,   355,   353,   357,   358,   372,   373,   374,   375,   376,
-     377,   378,   379,   381,   382,   380,   383,   384,   386,   388,
-     389,   390,   391,   392,   393,   394,   395,   396,   398,   399,
-     401,   402,   400,   403,   406,   415,   416,   404,   407,   409,
-     410,   412,   435,   468,   418,   413,   414,   417,   419,   420,
-     421,   422,   423,   424,   425,   426,   433,   436,   427,   428,
-     486,   486,   429,   430,   431,   479,   479,   437,   438,   439,
-     440,   441,   442,   443,   526,   444,   445,   362,   446,   447,
-     543,   491,   361,   448,   449,   450,   495,   452,   499,   363,
-     515,   545,   549,   364,   563,   564,   453,   565,   570,   571,
-     573,   574,   577,   576,   585,   584,   454,   583,   589,   455,
-     590,   591,   603,   465,   602,   466,   605,   606,   638,   608,
-     609,   611,   612,   613,   630,   635,   456,   553,   636,   457,
-     458,   459,   643,   649,   644,   650,   684,   676,   656,   658,
-     680,   460,   461,   682,   686,   699,   541,   451,   599,   467,
-     356,   462,   359,   490,   472,   463,   464,   334,   519,   600,
-     617,   624,   627,   615,   614,   411,   628,   616,   631,   632,
-     633,   626,   692,   645,   629,   646,   647,   385,   652,   619,
-     653,   618,   620,   621,   654,   657,   408,   681,   623,   622,
-     640,   405,   639,   685,   387,   397,   642,   641,   544,   634,
-     637,   701,   610,   674,   683,   695,   700,   486,     0,     0,
-       0,     0,   479,   147,     0,   146,   223,     0,   205,     0,
-       0,   222,   163,   224,     0,     0,   166,   225,   236,   148,
-       0,   149,   150,     0,     0,     0,     0,     0,   526,     0,
-       0,     0,     0,     0,     0,     0,     0,   169,     0,     0,
-     183,     0,     0,     0,   170,     0,     0,   184,     0,     0,
-       0,   188,     0,     0,     0,     0,     0,     0,     0,     0,
+      74,   145,   220,   144,   167,   181,   203,   219,   233,   221,
+     161,   168,   182,   222,   164,   360,   186,   146,   361,   147,
+     148,    30,   510,    23,   130,    24,    69,    25,    93,   130,
+      22,   564,    83,    84,   565,   231,   232,    66,   166,    84,
+     172,   173,   197,   217,   198,   199,   218,    34,   248,    87,
+      88,    89,   197,   249,   131,   132,   133,   270,    93,    36,
+     274,    73,   271,   290,    93,   275,    38,   134,   291,   135,
+     136,   137,   138,   139,   140,   293,   321,    40,   141,   142,
+     294,   322,   174,   141,    73,   143,   175,   176,   177,   178,
+     179,   644,   180,   645,   646,    70,   566,    73,    42,   567,
+      81,    71,    72,    82,    83,    84,    44,    73,    85,    86,
+      84,   172,   173,    73,    73,    26,    27,    28,    29,    46,
+      73,    87,    88,    89,    90,    91,   270,   541,   274,    92,
+      93,   539,   542,   543,   467,    93,   197,    48,   468,   469,
+     470,   471,   472,   473,   474,    50,   552,    94,    95,   239,
+     196,   553,   552,   572,   355,   197,   576,   554,   573,    96,
+     242,   577,    97,    98,    99,   578,   238,   100,   607,   360,
+     290,   197,   361,   198,   199,   629,   200,   201,   202,   321,
+     293,   241,   658,   677,   632,   635,    73,   659,   678,   642,
+     670,    73,   643,   671,    74,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,   500,   501,   502,   503,   240,
+      73,   622,   623,   624,   124,   125,   242,   357,   231,   232,
+     519,   520,   356,   247,   251,   252,    73,   256,   257,   358,
+     258,   259,   267,   359,   145,   284,   144,   285,   304,   167,
+     305,   332,   308,   161,   312,   314,   168,   164,   323,   324,
+     146,   181,   147,   148,   313,   316,   317,   318,   182,   220,
+     203,   325,   186,   326,   219,   327,   221,   328,   329,   331,
+     222,   333,   334,   335,   336,   341,   337,   342,   343,   338,
+     339,   340,   344,   345,   346,   347,   348,   349,   350,   352,
+     353,   367,   368,   369,   370,   371,   372,   373,   374,   375,
+     376,   377,   378,   379,   381,   383,   384,   385,   386,   387,
+     388,   389,   390,   391,   393,   394,   395,   396,   397,   398,
+     401,   404,   399,   405,   407,   402,   413,   462,   408,   409,
+     412,   414,   415,   416,   417,   418,   419,   410,   411,   420,
+     421,   427,   431,   422,   423,   424,   425,   429,   430,   432,
+     433,   434,   435,   436,   437,   482,   482,   438,   440,   439,
+     475,   475,   441,   442,   443,   488,   492,   496,   512,   444,
+     527,   357,   446,   447,   448,   529,   356,   533,   548,   449,
+     549,   550,   551,   358,   557,   556,   559,   359,   560,   562,
+     563,   450,   451,   570,   569,   571,   583,   588,   582,   586,
+     585,   589,   591,   592,   593,   594,   612,   613,   525,   452,
+     615,   620,   537,   621,   459,   453,   460,   630,   631,   636,
+     638,   656,   660,   454,   455,   662,   666,   664,   679,   456,
+     457,   445,   579,   672,   461,   351,   466,   458,   330,   516,
+     354,   580,   487,   599,   606,   609,   596,   595,   598,   597,
+     610,   626,   608,   627,   628,   406,   601,   611,   600,   633,
+     634,   637,   380,   661,   665,   603,   681,   602,   400,   604,
+     605,   617,   619,   403,   616,   392,   618,   382,   528,   590,
+     614,   654,   663,   675,   680,     0,     0,     0,     0,     0,
+       0,     0,     0,   482,     0,     0,     0,     0,   475,   145,
+       0,   144,   220,     0,   203,     0,     0,   219,   161,   221,
+       0,     0,   164,   222,   233,   146,     0,   147,   148,     0,
+       0,     0,     0,     0,     0,     0,     0,   167,     0,     0,
+     181,     0,     0,     0,   168,     0,     0,   182,     0,     0,
+       0,   186,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   668,     0,     0,     0,     0,   667,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   668,
-       0,     0,     0,     0,   667
+       0,     0,   648,     0,     0,     0,     0,   647,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   648,
+       0,     0,     0,     0,   647
   };
 
   const short int
   Dhcp4Parser::yycheck_[] =
   {
       54,    57,    61,    57,    58,    59,    60,    61,    62,    61,
-      57,    58,    59,    61,    57,    12,    59,    57,   428,    57,
-      57,   419,   420,   280,   280,     5,   425,     7,    10,     9,
-     428,     7,     0,    37,    67,    68,     7,     3,     3,    15,
-      16,     6,     8,    47,     3,     3,    16,    17,    18,     8,
-       8,     3,    28,    29,    30,     3,     8,    33,    34,    35,
-       8,    37,    16,    17,    18,    98,     3,    37,    12,    13,
-      46,     8,    48,    49,    50,    51,    52,    53,    67,    68,
-       7,    57,    58,    37,    38,    55,    57,     7,    64,    59,
-      60,    61,    62,    63,    98,    65,     3,     3,    80,    38,
-       6,     8,    56,     3,    86,    87,    11,     3,     8,    14,
-      15,    16,     8,     7,    19,    20,    98,     7,    98,    99,
-     100,   101,    98,    28,    29,    30,    31,    32,    98,     7,
-       7,    36,    37,     7,    21,    22,    23,    24,    25,    26,
-      27,     7,     3,    82,    98,    84,    85,     8,    21,    54,
-      55,    38,    25,    38,    39,    40,    41,    42,     3,    98,
-       7,    66,    98,     8,    69,    70,     3,    21,   566,     6,
-      75,    76,     3,     3,    79,    77,    78,     8,     8,   436,
-     436,   580,   592,     3,    38,     6,    40,    41,     8,    43,
-      44,    45,     3,    98,   592,     6,     3,   251,    71,    72,
-      73,    74,     3,     3,     3,     3,     8,     8,     8,     8,
-       8,    98,     3,    98,     3,     8,     4,     8,     3,     8,
-       4,   280,     4,     4,     4,    98,   280,    59,    60,    61,
-      62,     4,     4,   280,     4,     4,     4,   280,   294,     4,
-     294,     3,     8,   297,    98,   242,   243,   294,     4,     4,
-     297,   294,     3,     3,   294,   309,   294,   294,     4,     8,
-      98,     4,   309,   322,   318,     4,   309,     4,   322,     4,
-     322,     4,   101,   101,   322,    88,    89,    90,    91,    92,
-      93,    94,    95,    96,    97,     4,     4,     4,     4,    99,
-      99,    99,     4,    99,     4,     4,     4,     4,     4,     4,
-       4,     4,    99,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,    99,     4,     4,   101,     4,     4,     4,     4,
+      57,    58,    59,    61,    57,   276,    59,    57,   276,    57,
+      57,    12,   420,     5,     7,     7,    10,     9,    41,     7,
+       0,     3,    15,    16,     6,    71,    72,    97,    51,    16,
+      17,    18,    42,    43,    44,    45,    46,     7,     3,    32,
+      33,    34,    42,     8,    37,    38,    39,     3,    41,     7,
+       3,    97,     8,     3,    41,     8,     7,    50,     8,    52,
+      53,    54,    55,    56,    57,     3,     3,     7,    61,    62,
+       8,     8,    59,    61,    97,    68,    63,    64,    65,    66,
+      67,    81,    69,    83,    84,    79,     3,    97,     7,     6,
+      11,    85,    86,    14,    15,    16,     7,    97,    19,    20,
+      16,    17,    18,    97,    97,    97,    98,    99,   100,     7,
+      97,    32,    33,    34,    35,    36,     3,     3,     3,    40,
+      41,     8,     8,     8,    21,    41,    42,     7,    25,    26,
+      27,    28,    29,    30,    31,     7,     3,    58,    59,     3,
+      21,     8,     3,     3,    60,    42,     3,     8,     8,    70,
+       3,     8,    73,    74,    75,     8,     6,    78,   566,   430,
+       3,    42,   430,    44,    45,     8,    47,    48,    49,     3,
+       3,     8,     3,     3,     8,     8,    97,     8,     8,     3,
+       3,    97,     6,     6,   248,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    96,    63,    64,    65,    66,     4,
+      97,    22,    23,    24,    12,    13,     3,   276,    71,    72,
+      76,    77,   276,     4,     4,     4,    97,     4,     4,   276,
+       4,     4,     4,   276,   290,     4,   290,     4,     8,   293,
+       3,   100,     4,   290,     4,     3,   293,   290,   239,   240,
+     290,   305,   290,   290,     8,     4,     8,     3,   305,   318,
+     314,    97,   305,     4,   318,     4,   318,     4,     4,     4,
+     318,   100,     4,     4,     4,     4,    98,     4,     4,    98,
+      98,    98,     4,     4,     4,     4,    98,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,     4,     4,    98,   100,
        4,     4,     4,     4,     4,     4,     4,     4,     4,     4,
-       4,     4,    99,     4,     4,   332,   333,   101,   101,     4,
-       4,     4,     8,    81,    98,     7,     7,     7,     7,     7,
-       5,     5,     5,     5,     5,     5,    98,     3,     7,     7,
-     419,   420,     7,     7,     5,   419,   420,    98,    98,    98,
-       5,    98,    98,    98,   428,    98,    98,   436,     5,     7,
-       4,     7,   436,    98,    98,    98,     7,    98,     7,   436,
-       7,     7,     7,   436,     4,     4,    98,     4,     6,     3,
-       6,     3,     3,     6,     4,     3,    98,     6,     4,    98,
-       4,     4,     3,   410,     6,   412,     6,     3,     6,     8,
-       4,     4,     4,     4,     4,     4,    98,    65,     4,    98,
-      98,    98,     4,     8,     5,     8,     5,     4,     8,     7,
-       4,    98,    98,     4,     7,     4,   430,   390,   542,   413,
-     274,    98,   278,   420,   417,    98,    98,   251,    98,    98,
-     566,   578,   584,    99,   101,   325,    99,   101,    99,    99,
-      99,   582,    83,    98,   586,    98,    98,   294,    98,   571,
-      98,   569,   572,   574,    98,    98,   322,    99,   577,   575,
-     603,   318,   601,    98,   297,   309,   606,   604,   436,   592,
-     596,    98,   557,   662,   678,   690,   697,   566,    -1,    -1,
-      -1,    -1,   566,   569,    -1,   569,   575,    -1,   572,    -1,
-      -1,   575,   569,   575,    -1,    -1,   569,   575,   582,   569,
-      -1,   569,   569,    -1,    -1,    -1,    -1,    -1,   592,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   601,    -1,    -1,
-     604,    -1,    -1,    -1,   601,    -1,    -1,   604,    -1,    -1,
-      -1,   604,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+       4,     4,     4,     4,     4,     4,    98,     4,     4,     4,
+       4,     4,   100,     4,     4,   100,    97,    80,     7,     7,
+       7,     7,     7,     5,     5,     5,     5,   328,   329,     5,
+       5,    97,    97,     7,     7,     7,     5,     8,     3,    97,
+      97,     5,    97,    97,    97,   414,   415,    97,     5,    97,
+     414,   415,     7,    97,    97,     7,     7,     7,     7,    97,
+       4,   430,    97,    97,    97,     7,   430,     7,     4,    97,
+       4,     4,     4,   430,     3,     6,     6,   430,     3,     6,
+       3,    97,    97,     3,     6,     4,     3,     8,     6,     3,
+       6,     4,     4,     4,     4,     4,     4,     4,   424,    97,
+       6,     4,    69,     5,   405,    97,   407,     8,     8,     8,
+       7,     4,     4,    97,    97,     4,     7,     5,     4,    97,
+      97,   385,   526,    82,   408,   270,   412,    97,   248,    97,
+     274,    97,   415,   552,   564,   570,    98,   100,    98,   100,
+      98,    97,   568,    97,    97,   321,   557,   572,   555,    97,
+      97,    97,   290,    98,    97,   560,    97,   558,   314,   561,
+     563,   583,   586,   318,   581,   305,   584,   293,   430,   541,
+     576,   642,   658,   670,   677,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   552,    -1,    -1,    -1,    -1,   552,   555,
+      -1,   555,   561,    -1,   558,    -1,    -1,   561,   555,   561,
+      -1,    -1,   555,   561,   568,   555,    -1,   555,   555,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   581,    -1,    -1,
+     584,    -1,    -1,    -1,   581,    -1,    -1,   584,    -1,    -1,
+      -1,   584,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   661,    -1,    -1,    -1,    -1,   661,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   678,
-      -1,    -1,    -1,    -1,   678
+      -1,    -1,   641,    -1,    -1,    -1,    -1,   641,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   658,
+      -1,    -1,    -1,    -1,   658
   };
 
   const unsigned short int
   Dhcp4Parser::yystos_[] =
   {
-       0,    88,    89,    90,    91,    92,    93,    94,    95,    96,
-      97,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,     0,     5,     7,     9,    98,    99,   100,   101,
-     114,   115,   116,   120,     7,   127,     7,   133,     7,   147,
-       7,   204,     7,   272,     7,   284,     7,   232,     7,   255,
-       7,   186,   121,   117,   128,   134,   148,   205,   273,   285,
-     233,   256,   187,   114,   124,   125,    98,   118,   119,    10,
-      80,    86,    87,    98,   126,   129,   130,   131,   343,   345,
-     347,    11,    14,    15,    16,    19,    20,    28,    29,    30,
-      31,    32,    36,    37,    54,    55,    66,    69,    70,    75,
-      76,    79,   126,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   153,   155,   173,   180,   194,   198,   226,   249,
-     289,   313,   323,   332,   333,   341,    12,    13,   145,   146,
-     149,   151,     7,    33,    34,    35,    46,    48,    49,    50,
-      51,    52,    53,    57,    58,    64,   126,   137,   138,   139,
-     142,   206,   207,   208,   210,   212,   214,   216,   218,   220,
-     222,   224,   225,   249,   266,   278,   289,   309,    47,   126,
-     249,   274,   275,   276,    17,    18,    55,    59,    60,    61,
-      62,    63,    65,   126,   249,   286,   287,   288,   289,   291,
-     293,   295,   297,   299,   301,   303,   305,   307,    21,    38,
-      40,    41,    43,    44,    45,   126,   159,   167,   234,   235,
-     236,   237,   238,   239,   240,   241,   243,   245,   246,   248,
-      39,    42,   126,   167,   238,   243,   257,   258,   259,   260,
-     261,   263,   264,   265,    67,    68,   126,   188,   189,   190,
-     192,     6,     3,     4,     8,     3,   132,   348,   344,   346,
-       4,     3,     8,   144,     4,     4,   290,   154,   156,     4,
-       4,     4,     4,   199,   227,   250,   174,   314,   181,   195,
-     324,     4,   334,   342,     3,     8,   150,   152,     3,     8,
-     316,   211,   213,   215,   267,   209,   217,   219,     4,     4,
-     223,   221,   279,   310,     3,     8,   277,     3,     8,   292,
-     294,   308,   298,   300,   304,   302,   306,   296,     8,     3,
-     160,   168,     4,   244,   242,   247,     4,     8,     3,   262,
-       4,     8,     3,   191,   193,     3,     8,   114,   114,    98,
-       4,     4,     4,     4,   130,     4,   101,   101,     4,     4,
-       4,    99,    99,    99,    99,     4,     4,     4,     4,     4,
-       4,     4,     4,    99,     4,     4,   136,     4,     4,   146,
-      56,   126,   167,   249,   289,   291,   293,   317,   318,   319,
-     320,   321,     4,     4,     4,     4,     4,     4,     4,    99,
-     101,     4,     4,     4,     4,   207,     4,   275,     4,     4,
-       4,     4,     4,     4,     4,     4,     4,   288,     4,     4,
-      99,     4,     4,     4,   101,   236,     4,   101,   259,     4,
-       4,   189,     4,     7,     7,   114,   114,     7,    98,     7,
-       7,     5,     5,     5,     5,     5,     5,     7,     7,     7,
-       7,     5,   122,    98,   322,     8,     3,    98,    98,    98,
-       5,    98,    98,    98,    98,    98,     5,     7,    98,    98,
-      98,   122,    98,    98,    98,    98,    98,    98,    98,    98,
-      98,    98,    98,    98,    98,   114,   114,   135,    81,   349,
-     350,   351,   145,    22,    23,    24,    25,    26,    27,   126,
-     157,   158,   159,   161,   163,   165,   167,   169,   170,   171,
-     157,     7,   200,   201,   202,     7,   228,   229,   230,     7,
-     251,   252,   253,    59,    60,    61,    62,   172,   175,   176,
-     177,   178,   179,   220,   315,     7,   182,   183,   184,    98,
-     196,   197,    71,    72,    73,    74,   126,   159,   169,   325,
-     326,   327,   328,   330,   331,    77,    78,   335,   336,   337,
-     339,   119,   123,     4,   319,     7,   268,   269,   270,     7,
-     280,   281,   282,    65,   311,     8,   352,     3,     8,     8,
-     162,   164,   166,     4,     4,     4,     3,     8,     8,   203,
-       6,     3,   231,     6,     3,   254,     6,     3,     3,     6,
-       3,     6,   185,     6,     3,     4,     3,     8,   329,     4,
-       4,     4,     3,     8,   338,   340,     3,     8,     8,   124,
-      98,   271,     6,     3,   283,     6,     3,   312,     8,     4,
-     350,     4,     4,     4,   101,    99,   101,   158,   206,   202,
-     234,   230,   257,   253,   176,   220,   188,   184,    99,   197,
-       4,    99,    99,    99,   326,     4,     4,   336,     6,   274,
-     270,   286,   282,     4,     5,    98,    98,    98,     8,     8,
-       8,     8,    98,    98,    98,     8,     8,    98,     7,   353,
-     354,   355,     3,     6,    82,    84,    85,   126,   167,   356,
-     357,   358,   359,   361,   354,   362,     4,   360,     3,     8,
-       4,    99,     4,   357,     5,    98,     7,   363,   364,   365,
-       3,     6,    83,   366,   367,   364,   368,     3,     8,     4,
-     367,    98
+       0,    87,    88,    89,    90,    91,    92,    93,    94,    95,
+      96,   102,   103,   104,   105,   106,   107,   108,   109,   110,
+     111,   112,     0,     5,     7,     9,    97,    98,    99,   100,
+     113,   114,   115,   119,     7,   126,     7,   132,     7,   146,
+       7,   205,     7,   274,     7,   286,     7,   233,     7,   257,
+       7,   187,   120,   116,   127,   133,   147,   206,   275,   287,
+     234,   258,   188,   113,   123,   124,    97,   117,   118,    10,
+      79,    85,    86,    97,   125,   128,   129,   130,   336,   338,
+     340,    11,    14,    15,    16,    19,    20,    32,    33,    34,
+      35,    36,    40,    41,    58,    59,    70,    73,    74,    75,
+      78,   125,   134,   135,   136,   137,   138,   139,   140,   141,
+     142,   152,   154,   173,   181,   195,   199,   227,   251,   291,
+     315,   325,   326,   334,    12,    13,   144,   145,   148,   150,
+       7,    37,    38,    39,    50,    52,    53,    54,    55,    56,
+      57,    61,    62,    68,   125,   136,   137,   138,   141,   207,
+     208,   209,   211,   213,   215,   217,   219,   221,   223,   225,
+     226,   251,   268,   280,   291,   311,    51,   125,   251,   276,
+     277,   278,    17,    18,    59,    63,    64,    65,    66,    67,
+      69,   125,   251,   288,   289,   290,   291,   293,   295,   297,
+     299,   301,   303,   305,   307,   309,    21,    42,    44,    45,
+      47,    48,    49,   125,   167,   235,   236,   237,   238,   239,
+     240,   241,   243,   245,   247,   248,   250,    43,    46,   125,
+     167,   239,   245,   259,   260,   261,   262,   263,   265,   266,
+     267,    71,    72,   125,   189,   190,   191,   193,     6,     3,
+       4,     8,     3,   131,   341,   337,   339,     4,     3,     8,
+     143,     4,     4,   292,   153,   155,     4,     4,     4,     4,
+     200,   228,   252,   174,   316,   182,   196,     4,   327,   335,
+       3,     8,   149,   151,     3,     8,   318,   212,   214,   216,
+     269,   210,   218,   220,     4,     4,   224,   222,   281,   312,
+       3,     8,   279,     3,     8,   294,   296,   310,   300,   302,
+     306,   304,   308,   298,     8,     3,   242,   168,     4,   246,
+     244,   249,     4,     8,     3,   264,     4,     8,     3,   192,
+     194,     3,     8,   113,   113,    97,     4,     4,     4,     4,
+     129,     4,   100,   100,     4,     4,     4,    98,    98,    98,
+      98,     4,     4,     4,     4,     4,     4,     4,    98,     4,
+       4,   135,     4,     4,   145,    60,   125,   167,   251,   291,
+     293,   295,   319,   320,   321,   322,   323,     4,     4,     4,
+       4,     4,     4,     4,    98,   100,     4,     4,     4,     4,
+     208,     4,   277,     4,     4,     4,     4,     4,     4,     4,
+       4,     4,   290,     4,     4,    98,     4,     4,     4,   100,
+     237,     4,   100,   261,     4,     4,   190,     4,     7,     7,
+     113,   113,     7,    97,     7,     7,     5,     5,     5,     5,
+       5,     5,     7,     7,     7,     5,   121,    97,   324,     8,
+       3,    97,    97,    97,     5,    97,    97,    97,    97,    97,
+       5,     7,    97,    97,    97,   121,    97,    97,    97,    97,
+      97,    97,    97,    97,    97,    97,    97,    97,    97,   113,
+     113,   134,    80,   342,   343,   344,   144,    21,    25,    26,
+      27,    28,    29,    30,    31,   125,   156,   157,   158,   161,
+     163,   165,   167,   169,   170,   171,   172,   156,     7,   201,
+     202,   203,     7,   229,   230,   231,     7,   253,   254,   255,
+      63,    64,    65,    66,   175,   176,   177,   178,   179,   180,
+     221,   317,     7,   183,   184,   185,    97,   197,   198,    76,
+      77,   328,   329,   330,   332,   118,   122,     4,   321,     7,
+     270,   271,   272,     7,   282,   283,   284,    69,   313,     8,
+     345,     3,     8,     8,   159,   162,   164,   166,     4,     4,
+       4,     4,     3,     8,     8,   204,     6,     3,   232,     6,
+       3,   256,     6,     3,     3,     6,     3,     6,   186,     6,
+       3,     4,     3,     8,   331,   333,     3,     8,     8,   123,
+      97,   273,     6,     3,   285,     6,     3,   314,     8,     4,
+     343,     4,     4,     4,     4,   100,    98,   100,    98,   157,
+     207,   203,   235,   231,   259,   255,   176,   221,   189,   185,
+      98,   198,     4,     4,   329,     6,   276,   272,   288,   284,
+       4,     5,    22,    23,    24,   160,    97,    97,    97,     8,
+       8,     8,     8,    97,    97,     8,     8,    97,     7,   346,
+     347,   348,     3,     6,    81,    83,    84,   125,   167,   349,
+     350,   351,   352,   354,   347,   355,     4,   353,     3,     8,
+       4,    98,     4,   350,     5,    97,     7,   356,   357,   358,
+       3,     6,    82,   359,   360,   357,   361,     3,     8,     4,
+     360,    97
   };
 
   const unsigned short int
   Dhcp4Parser::yyr1_[] =
   {
-       0,   102,   104,   103,   105,   103,   106,   103,   107,   103,
-     108,   103,   109,   103,   110,   103,   111,   103,   112,   103,
-     113,   103,   114,   114,   114,   114,   114,   114,   114,   115,
-     117,   116,   118,   118,   119,   119,   121,   120,   123,   122,
-     124,   124,   125,   125,   126,   128,   127,   129,   129,   130,
-     130,   130,   130,   130,   132,   131,   134,   133,   135,   135,
-     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   137,   138,   139,   140,   141,   142,   144,   143,
-     145,   145,   146,   146,   148,   147,   150,   149,   152,   151,
-     154,   153,   156,   155,   157,   157,   158,   158,   158,   158,
-     158,   158,   158,   158,   158,   160,   159,   162,   161,   164,
-     163,   166,   165,   168,   167,   169,   170,   171,   172,   174,
-     173,   175,   175,   176,   176,   176,   176,   177,   178,   179,
-     181,   180,   182,   182,   183,   183,   185,   184,   187,   186,
-     188,   188,   188,   189,   189,   191,   190,   193,   192,   195,
-     194,   196,   196,   197,   199,   198,   200,   200,   201,   201,
-     203,   202,   205,   204,   206,   206,   207,   207,   207,   207,
-     207,   207,   207,   207,   207,   207,   207,   207,   207,   207,
-     207,   207,   207,   207,   207,   207,   209,   208,   211,   210,
-     213,   212,   215,   214,   217,   216,   219,   218,   221,   220,
-     223,   222,   224,   225,   227,   226,   228,   228,   229,   229,
-     231,   230,   233,   232,   234,   234,   235,   235,   236,   236,
-     236,   236,   236,   236,   236,   236,   237,   238,   239,   240,
-     242,   241,   244,   243,   245,   247,   246,   248,   250,   249,
-     251,   251,   252,   252,   254,   253,   256,   255,   257,   257,
-     258,   258,   259,   259,   259,   259,   259,   259,   260,   262,
-     261,   263,   264,   265,   267,   266,   268,   268,   269,   269,
-     271,   270,   273,   272,   274,   274,   275,   275,   275,   277,
-     276,   279,   278,   280,   280,   281,   281,   283,   282,   285,
-     284,   286,   286,   287,   287,   288,   288,   288,   288,   288,
-     288,   288,   288,   288,   288,   288,   288,   290,   289,   292,
-     291,   294,   293,   296,   295,   298,   297,   300,   299,   302,
-     301,   304,   303,   306,   305,   308,   307,   310,   309,   312,
-     311,   314,   313,   315,   315,   316,   220,   317,   317,   318,
-     318,   319,   319,   319,   319,   319,   319,   319,   320,   322,
-     321,   324,   323,   325,   325,   326,   326,   326,   326,   326,
-     326,   326,   327,   329,   328,   330,   331,   332,   334,   333,
-     335,   335,   336,   336,   338,   337,   340,   339,   342,   341,
-     344,   343,   346,   345,   348,   347,   349,   349,   350,   352,
-     351,   353,   353,   355,   354,   356,   356,   357,   357,   357,
-     357,   357,   358,   360,   359,   362,   361,   363,   363,   365,
-     364,   366,   366,   368,   367
+       0,   101,   103,   102,   104,   102,   105,   102,   106,   102,
+     107,   102,   108,   102,   109,   102,   110,   102,   111,   102,
+     112,   102,   113,   113,   113,   113,   113,   113,   113,   114,
+     116,   115,   117,   117,   118,   118,   120,   119,   122,   121,
+     123,   123,   124,   124,   125,   127,   126,   128,   128,   129,
+     129,   129,   129,   129,   131,   130,   133,   132,   134,   134,
+     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
+     135,   135,   135,   135,   135,   135,   135,   135,   135,   135,
+     135,   136,   137,   138,   139,   140,   141,   143,   142,   144,
+     144,   145,   145,   147,   146,   149,   148,   151,   150,   153,
+     152,   155,   154,   156,   156,   157,   157,   157,   157,   157,
+     157,   157,   157,   157,   157,   159,   158,   160,   160,   160,
+     162,   161,   164,   163,   166,   165,   168,   167,   169,   170,
+     171,   172,   174,   173,   175,   175,   176,   176,   176,   176,
+     177,   178,   179,   180,   182,   181,   183,   183,   184,   184,
+     186,   185,   188,   187,   189,   189,   189,   190,   190,   192,
+     191,   194,   193,   196,   195,   197,   197,   198,   200,   199,
+     201,   201,   202,   202,   204,   203,   206,   205,   207,   207,
+     208,   208,   208,   208,   208,   208,   208,   208,   208,   208,
+     208,   208,   208,   208,   208,   208,   208,   208,   208,   208,
+     210,   209,   212,   211,   214,   213,   216,   215,   218,   217,
+     220,   219,   222,   221,   224,   223,   225,   226,   228,   227,
+     229,   229,   230,   230,   232,   231,   234,   233,   235,   235,
+     236,   236,   237,   237,   237,   237,   237,   237,   237,   237,
+     238,   239,   240,   242,   241,   244,   243,   246,   245,   247,
+     249,   248,   250,   252,   251,   253,   253,   254,   254,   256,
+     255,   258,   257,   259,   259,   260,   260,   261,   261,   261,
+     261,   261,   261,   262,   264,   263,   265,   266,   267,   269,
+     268,   270,   270,   271,   271,   273,   272,   275,   274,   276,
+     276,   277,   277,   277,   279,   278,   281,   280,   282,   282,
+     283,   283,   285,   284,   287,   286,   288,   288,   289,   289,
+     290,   290,   290,   290,   290,   290,   290,   290,   290,   290,
+     290,   290,   292,   291,   294,   293,   296,   295,   298,   297,
+     300,   299,   302,   301,   304,   303,   306,   305,   308,   307,
+     310,   309,   312,   311,   314,   313,   316,   315,   317,   317,
+     318,   221,   319,   319,   320,   320,   321,   321,   321,   321,
+     321,   321,   321,   322,   324,   323,   325,   327,   326,   328,
+     328,   329,   329,   331,   330,   333,   332,   335,   334,   337,
+     336,   339,   338,   341,   340,   342,   342,   343,   345,   344,
+     346,   346,   348,   347,   349,   349,   350,   350,   350,   350,
+     350,   351,   353,   352,   355,   354,   356,   356,   358,   357,
+     359,   359,   361,   360
   };
 
   const unsigned char
@@ -3276,41 +3254,40 @@ namespace isc { namespace dhcp {
        1,     1,     1,     1,     0,     6,     0,     4,     1,     3,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     3,     3,     3,     3,     3,     3,     0,     6,
-       1,     3,     1,     1,     0,     4,     0,     4,     0,     4,
-       0,     6,     0,     6,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     4,     3,     3,     3,     1,     0,
-       6,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
-       1,     3,     1,     1,     1,     0,     4,     0,     4,     0,
-       6,     1,     3,     3,     0,     6,     0,     1,     1,     3,
-       0,     4,     0,     4,     1,     3,     1,     1,     1,     1,
+       1,     3,     3,     3,     3,     3,     3,     0,     6,     1,
+       3,     1,     1,     0,     4,     0,     4,     0,     4,     0,
+       6,     0,     6,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     0,     4,     1,     1,     1,
+       0,     4,     0,     4,     0,     4,     0,     4,     3,     3,
+       3,     3,     0,     6,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     6,     0,     1,     1,     3,
+       0,     4,     0,     4,     1,     3,     1,     1,     1,     0,
+       4,     0,     4,     0,     6,     1,     3,     3,     0,     6,
+       0,     1,     1,     3,     0,     4,     0,     4,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     0,     4,     0,     4,
        0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
-       0,     4,     3,     3,     0,     6,     0,     1,     1,     3,
-       0,     4,     0,     4,     0,     1,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     3,     1,     1,
-       0,     4,     0,     4,     1,     0,     4,     3,     0,     6,
+       0,     4,     0,     4,     0,     4,     3,     3,     0,     6,
        0,     1,     1,     3,     0,     4,     0,     4,     0,     1,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     0,
-       4,     1,     1,     3,     0,     6,     0,     1,     1,     3,
-       0,     4,     0,     4,     1,     3,     1,     1,     1,     0,
-       4,     0,     6,     0,     1,     1,     3,     0,     4,     0,
-       4,     0,     1,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     4,     0,     4,     0,     6,     0,
-       4,     0,     6,     1,     3,     0,     4,     0,     1,     1,
-       3,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       4,     0,     6,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     3,     0,     4,     3,     3,     3,     0,     6,
-       1,     3,     1,     1,     0,     4,     0,     4,     0,     6,
-       0,     4,     0,     4,     0,     6,     1,     3,     1,     0,
-       6,     1,     3,     0,     4,     1,     3,     1,     1,     1,
-       1,     1,     3,     0,     4,     0,     6,     1,     3,     0,
-       4,     1,     3,     0,     4
+       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     3,     1,     0,     4,     0,     4,     0,     4,     1,
+       0,     4,     3,     0,     6,     0,     1,     1,     3,     0,
+       4,     0,     4,     0,     1,     1,     3,     1,     1,     1,
+       1,     1,     1,     1,     0,     4,     1,     1,     3,     0,
+       6,     0,     1,     1,     3,     0,     4,     0,     4,     1,
+       3,     1,     1,     1,     0,     4,     0,     6,     0,     1,
+       1,     3,     0,     4,     0,     4,     0,     1,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     0,     4,     0,     4,     0,     4,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
+       0,     4,     0,     6,     0,     4,     0,     6,     1,     3,
+       0,     4,     0,     1,     1,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     0,     4,     3,     0,     6,     1,
+       3,     1,     1,     0,     4,     0,     4,     0,     6,     0,
+       4,     0,     4,     0,     6,     1,     3,     1,     0,     6,
+       1,     3,     0,     4,     1,     3,     1,     1,     1,     1,
+       1,     3,     0,     4,     0,     6,     1,     3,     0,     4,
+       1,     3,     0,     4
   };
 
 
@@ -3325,21 +3302,21 @@ namespace isc { namespace dhcp {
   "\"interfaces-config\"", "\"interfaces\"", "\"dhcp-socket-type\"",
   "\"echo-client-id\"", "\"match-client-id\"", "\"next-server\"",
   "\"server-hostname\"", "\"boot-file-name\"", "\"lease-database\"",
-  "\"hosts-database\"", "\"type\"", "\"user\"", "\"password\"", "\"host\"",
-  "\"persist\"", "\"lfc-interval\"", "\"readonly\"", "\"valid-lifetime\"",
-  "\"renew-timer\"", "\"rebind-timer\"", "\"decline-probation-period\"",
-  "\"subnet4\"", "\"4o6-interface\"", "\"4o6-interface-id\"",
-  "\"4o6-subnet\"", "\"option-def\"", "\"option-data\"", "\"name\"",
-  "\"data\"", "\"code\"", "\"space\"", "\"csv-format\"",
-  "\"record-types\"", "\"encapsulate\"", "\"array\"", "\"pools\"",
-  "\"pool\"", "\"subnet\"", "\"interface\"", "\"interface-id\"", "\"id\"",
-  "\"rapid-commit\"", "\"reservation-mode\"",
+  "\"hosts-database\"", "\"type\"", "\"memfile\"", "\"mysql\"",
+  "\"postgresql\"", "\"user\"", "\"password\"", "\"host\"", "\"persist\"",
+  "\"lfc-interval\"", "\"readonly\"", "\"connect-timeout\"",
+  "\"valid-lifetime\"", "\"renew-timer\"", "\"rebind-timer\"",
+  "\"decline-probation-period\"", "\"subnet4\"", "\"4o6-interface\"",
+  "\"4o6-interface-id\"", "\"4o6-subnet\"", "\"option-def\"",
+  "\"option-data\"", "\"name\"", "\"data\"", "\"code\"", "\"space\"",
+  "\"csv-format\"", "\"record-types\"", "\"encapsulate\"", "\"array\"",
+  "\"pools\"", "\"pool\"", "\"subnet\"", "\"interface\"",
+  "\"interface-id\"", "\"id\"", "\"rapid-commit\"", "\"reservation-mode\"",
   "\"host-reservation-identifiers\"", "\"client-classes\"", "\"test\"",
   "\"client-class\"", "\"reservations\"", "\"duid\"", "\"hw-address\"",
   "\"circuit-id\"", "\"client-id\"", "\"hostname\"", "\"relay\"",
   "\"ip-address\"", "\"hooks-libraries\"", "\"library\"", "\"parameters\"",
-  "\"expired-leases-processing\"", "\"server-id\"", "\"identifier\"",
-  "\"htype\"", "\"time\"", "\"enterprise-id\"", "\"dhcp4o6-port\"",
+  "\"expired-leases-processing\"", "\"dhcp4o6-port\"",
   "\"control-socket\"", "\"socket-type\"", "\"socket-name\"",
   "\"dhcp-ddns\"", "\"Logging\"", "\"loggers\"", "\"output_options\"",
   "\"output\"", "\"debuglevel\"", "\"severity\"", "\"Dhcp6\"",
@@ -3358,105 +3335,103 @@ namespace isc { namespace dhcp {
   "interfaces_config_params", "interfaces_config_param", "sub_interfaces4",
   "$@18", "interfaces_list", "$@19", "dhcp_socket_type", "$@20",
   "lease_database", "$@21", "hosts_database", "$@22",
-  "database_map_params", "database_map_param", "type", "$@23", "user",
-  "$@24", "password", "$@25", "host", "$@26", "name", "$@27", "persist",
-  "lfc_interval", "readonly", "duid_id", "host_reservation_identifiers",
-  "$@28", "host_reservation_identifiers_list",
-  "host_reservation_identifier", "hw_address_id", "circuit_id",
-  "client_id", "hooks_libraries", "$@29", "hooks_libraries_list",
-  "not_empty_hooks_libraries_list", "hooks_library", "$@30",
-  "sub_hooks_library", "$@31", "hooks_params", "hooks_param", "library",
-  "$@32", "parameters", "$@33", "expired_leases_processing", "$@34",
-  "expired_leases_params", "expired_leases_param", "subnet4_list", "$@35",
-  "subnet4_list_content", "not_empty_subnet4_list", "subnet4", "$@36",
-  "sub_subnet4", "$@37", "subnet4_params", "subnet4_param", "subnet",
-  "$@38", "subnet_4o6_interface", "$@39", "subnet_4o6_interface_id",
-  "$@40", "subnet_4o6_subnet", "$@41", "interface", "$@42", "interface_id",
-  "$@43", "client_class", "$@44", "reservation_mode", "$@45", "id",
-  "rapid_commit", "option_def_list", "$@46", "option_def_list_content",
+  "database_map_params", "database_map_param", "database_type", "$@23",
+  "db_type", "user", "$@24", "password", "$@25", "host", "$@26", "name",
+  "$@27", "persist", "lfc_interval", "readonly", "connect_timeout",
+  "host_reservation_identifiers", "$@28",
+  "host_reservation_identifiers_list", "host_reservation_identifier",
+  "duid_id", "hw_address_id", "circuit_id", "client_id", "hooks_libraries",
+  "$@29", "hooks_libraries_list", "not_empty_hooks_libraries_list",
+  "hooks_library", "$@30", "sub_hooks_library", "$@31", "hooks_params",
+  "hooks_param", "library", "$@32", "parameters", "$@33",
+  "expired_leases_processing", "$@34", "expired_leases_params",
+  "expired_leases_param", "subnet4_list", "$@35", "subnet4_list_content",
+  "not_empty_subnet4_list", "subnet4", "$@36", "sub_subnet4", "$@37",
+  "subnet4_params", "subnet4_param", "subnet", "$@38",
+  "subnet_4o6_interface", "$@39", "subnet_4o6_interface_id", "$@40",
+  "subnet_4o6_subnet", "$@41", "interface", "$@42", "interface_id", "$@43",
+  "client_class", "$@44", "reservation_mode", "$@45", "id", "rapid_commit",
+  "option_def_list", "$@46", "option_def_list_content",
   "not_empty_option_def_list", "option_def_entry", "$@47",
   "sub_option_def", "$@48", "option_def_params",
   "not_empty_option_def_params", "option_def_param", "option_def_name",
-  "code", "option_def_code", "option_def_type", "option_def_record_types",
-  "$@49", "space", "$@50", "option_def_space", "option_def_encapsulate",
-  "$@51", "option_def_array", "option_data_list", "$@52",
-  "option_data_list_content", "not_empty_option_data_list",
-  "option_data_entry", "$@53", "sub_option_data", "$@54",
+  "code", "option_def_code", "option_def_type", "$@49",
+  "option_def_record_types", "$@50", "space", "$@51", "option_def_space",
+  "option_def_encapsulate", "$@52", "option_def_array", "option_data_list",
+  "$@53", "option_data_list_content", "not_empty_option_data_list",
+  "option_data_entry", "$@54", "sub_option_data", "$@55",
   "option_data_params", "not_empty_option_data_params",
-  "option_data_param", "option_data_name", "option_data_data", "$@55",
+  "option_data_param", "option_data_name", "option_data_data", "$@56",
   "option_data_code", "option_data_space", "option_data_csv_format",
-  "pools_list", "$@56", "pools_list_content", "not_empty_pools_list",
-  "pool_list_entry", "$@57", "sub_pool4", "$@58", "pool_params",
-  "pool_param", "pool_entry", "$@59", "reservations", "$@60",
+  "pools_list", "$@57", "pools_list_content", "not_empty_pools_list",
+  "pool_list_entry", "$@58", "sub_pool4", "$@59", "pool_params",
+  "pool_param", "pool_entry", "$@60", "reservations", "$@61",
   "reservations_list", "not_empty_reservations_list", "reservation",
-  "$@61", "sub_reservation", "$@62", "reservation_params",
+  "$@62", "sub_reservation", "$@63", "reservation_params",
   "not_empty_reservation_params", "reservation_param", "next_server",
-  "$@63", "server_hostname", "$@64", "boot_file_name", "$@65",
-  "ip_address", "$@66", "duid", "$@67", "hw_address", "$@68",
-  "client_id_value", "$@69", "circuit_id_value", "$@70", "hostname",
-  "$@71", "reservation_client_classes", "$@72", "relay", "$@73",
-  "relay_map", "$@74", "client_classes", "$@75", "client_classes_list",
-  "$@76", "client_class_params", "not_empty_client_class_params",
-  "client_class_param", "client_class_name", "client_class_test", "$@77",
-  "server_id", "$@78", "server_id_params", "server_id_param", "htype",
-  "identifier", "$@79", "time", "enterprise_id", "dhcp4o6_port",
-  "control_socket", "$@80", "control_socket_params",
-  "control_socket_param", "socket_type", "$@81", "socket_name", "$@82",
-  "dhcp_ddns", "$@83", "dhcp6_json_object", "$@84", "dhcpddns_json_object",
-  "$@85", "logging_object", "$@86", "logging_params", "logging_param",
-  "loggers", "$@87", "loggers_entries", "logger_entry", "$@88",
-  "logger_params", "logger_param", "debuglevel", "severity", "$@89",
-  "output_options_list", "$@90", "output_options_list_content",
-  "output_entry", "$@91", "output_params", "output_param", "$@92", YY_NULLPTR
+  "$@64", "server_hostname", "$@65", "boot_file_name", "$@66",
+  "ip_address", "$@67", "duid", "$@68", "hw_address", "$@69",
+  "client_id_value", "$@70", "circuit_id_value", "$@71", "hostname",
+  "$@72", "reservation_client_classes", "$@73", "relay", "$@74",
+  "relay_map", "$@75", "client_classes", "$@76", "client_classes_list",
+  "$@77", "client_class_params", "not_empty_client_class_params",
+  "client_class_param", "client_class_name", "client_class_test", "$@78",
+  "dhcp4o6_port", "control_socket", "$@79", "control_socket_params",
+  "control_socket_param", "socket_type", "$@80", "socket_name", "$@81",
+  "dhcp_ddns", "$@82", "dhcp6_json_object", "$@83", "dhcpddns_json_object",
+  "$@84", "logging_object", "$@85", "logging_params", "logging_param",
+  "loggers", "$@86", "loggers_entries", "logger_entry", "$@87",
+  "logger_params", "logger_param", "debuglevel", "severity", "$@88",
+  "output_options_list", "$@89", "output_options_list_content",
+  "output_entry", "$@90", "output_params", "output_param", "$@91", YY_NULLPTR
   };
 
 #if PARSER4_DEBUG
   const unsigned short int
   Dhcp4Parser::yyrline_[] =
   {
-       0,   198,   198,   198,   199,   199,   200,   200,   201,   201,
-     202,   202,   203,   203,   204,   204,   205,   205,   206,   206,
-     207,   207,   215,   216,   217,   218,   219,   220,   221,   224,
-     229,   229,   241,   242,   245,   249,   256,   256,   264,   264,
-     271,   272,   275,   279,   290,   300,   300,   312,   313,   317,
-     318,   319,   320,   321,   324,   324,   341,   341,   349,   350,
-     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,   368,   369,   370,   371,   372,   373,   374,
-     375,   376,   379,   384,   389,   394,   399,   404,   410,   410,
-     420,   421,   424,   425,   428,   428,   436,   436,   446,   446,
-     454,   454,   464,   464,   474,   475,   478,   479,   480,   481,
-     482,   483,   484,   485,   486,   489,   489,   497,   497,   505,
-     505,   513,   513,   521,   521,   529,   534,   539,   544,   549,
-     549,   559,   560,   563,   564,   565,   566,   569,   574,   579,
-     584,   584,   594,   595,   598,   599,   602,   602,   610,   610,
-     618,   619,   620,   623,   624,   627,   627,   635,   635,   643,
-     643,   653,   654,   660,   668,   668,   681,   682,   685,   686,
-     693,   693,   716,   716,   725,   726,   730,   731,   732,   733,
-     734,   735,   736,   737,   738,   739,   740,   741,   742,   743,
-     744,   745,   746,   747,   748,   749,   752,   752,   760,   760,
-     768,   768,   776,   776,   784,   784,   792,   792,   800,   800,
-     808,   808,   816,   821,   830,   830,   842,   843,   846,   847,
-     852,   852,   863,   863,   873,   874,   877,   878,   881,   882,
-     883,   884,   885,   886,   887,   888,   891,   893,   898,   900,
-     902,   902,   910,   910,   918,   920,   920,   928,   937,   937,
-     949,   950,   955,   956,   961,   961,   972,   972,   983,   984,
-     989,   990,   995,   996,   997,   998,   999,  1000,  1003,  1005,
-    1005,  1013,  1015,  1017,  1025,  1025,  1037,  1038,  1041,  1042,
-    1045,  1045,  1053,  1053,  1061,  1062,  1065,  1066,  1067,  1070,
-    1070,  1081,  1081,  1091,  1092,  1095,  1096,  1099,  1099,  1107,
-    1107,  1115,  1116,  1119,  1120,  1124,  1125,  1126,  1127,  1128,
-    1129,  1130,  1131,  1132,  1133,  1134,  1135,  1138,  1138,  1146,
-    1146,  1154,  1154,  1162,  1162,  1170,  1170,  1178,  1178,  1186,
-    1186,  1194,  1194,  1203,  1203,  1211,  1211,  1224,  1224,  1234,
-    1234,  1245,  1245,  1255,  1256,  1259,  1259,  1267,  1268,  1271,
-    1272,  1275,  1276,  1277,  1278,  1279,  1280,  1281,  1284,  1286,
-    1286,  1297,  1297,  1307,  1308,  1311,  1312,  1313,  1314,  1315,
-    1316,  1317,  1320,  1325,  1325,  1333,  1338,  1345,  1352,  1352,
-    1362,  1363,  1366,  1367,  1370,  1370,  1378,  1378,  1388,  1388,
-    1400,  1400,  1407,  1407,  1419,  1419,  1432,  1433,  1437,  1441,
-    1441,  1453,  1454,  1458,  1458,  1466,  1467,  1470,  1471,  1472,
-    1473,  1474,  1477,  1481,  1481,  1489,  1489,  1499,  1500,  1503,
-    1503,  1511,  1512,  1515,  1515
+       0,   197,   197,   197,   198,   198,   199,   199,   200,   200,
+     201,   201,   202,   202,   203,   203,   204,   204,   205,   205,
+     206,   206,   214,   215,   216,   217,   218,   219,   220,   223,
+     228,   228,   240,   241,   244,   248,   255,   255,   263,   263,
+     270,   271,   274,   278,   289,   299,   299,   311,   312,   316,
+     317,   318,   319,   320,   323,   323,   340,   340,   348,   349,
+     354,   355,   356,   357,   358,   359,   360,   361,   362,   363,
+     364,   365,   366,   367,   368,   369,   370,   371,   372,   373,
+     374,   377,   382,   387,   392,   397,   402,   408,   408,   418,
+     419,   422,   423,   426,   426,   434,   434,   444,   444,   452,
+     452,   462,   462,   472,   473,   476,   477,   478,   479,   480,
+     481,   482,   483,   484,   485,   488,   488,   495,   496,   497,
+     500,   500,   508,   508,   516,   516,   524,   524,   532,   537,
+     542,   547,   552,   552,   562,   563,   566,   567,   568,   569,
+     572,   577,   582,   587,   592,   592,   602,   603,   606,   607,
+     610,   610,   618,   618,   626,   627,   628,   631,   632,   635,
+     635,   643,   643,   651,   651,   661,   662,   668,   676,   676,
+     689,   690,   693,   694,   701,   701,   724,   724,   733,   734,
+     738,   739,   740,   741,   742,   743,   744,   745,   746,   747,
+     748,   749,   750,   751,   752,   753,   754,   755,   756,   757,
+     760,   760,   768,   768,   776,   776,   784,   784,   792,   792,
+     800,   800,   808,   808,   816,   816,   824,   829,   838,   838,
+     850,   851,   854,   855,   860,   860,   871,   871,   881,   882,
+     885,   886,   889,   890,   891,   892,   893,   894,   895,   896,
+     899,   901,   906,   908,   908,   916,   916,   924,   924,   932,
+     934,   934,   942,   951,   951,   963,   964,   969,   970,   975,
+     975,   986,   986,   997,   998,  1003,  1004,  1009,  1010,  1011,
+    1012,  1013,  1014,  1017,  1019,  1019,  1027,  1029,  1031,  1039,
+    1039,  1051,  1052,  1055,  1056,  1059,  1059,  1067,  1067,  1075,
+    1076,  1079,  1080,  1081,  1084,  1084,  1095,  1095,  1105,  1106,
+    1109,  1110,  1113,  1113,  1121,  1121,  1129,  1130,  1133,  1134,
+    1138,  1139,  1140,  1141,  1142,  1143,  1144,  1145,  1146,  1147,
+    1148,  1149,  1152,  1152,  1160,  1160,  1168,  1168,  1176,  1176,
+    1184,  1184,  1192,  1192,  1200,  1200,  1208,  1208,  1217,  1217,
+    1225,  1225,  1238,  1238,  1248,  1248,  1259,  1259,  1269,  1270,
+    1273,  1273,  1281,  1282,  1285,  1286,  1289,  1290,  1291,  1292,
+    1293,  1294,  1295,  1298,  1300,  1300,  1312,  1319,  1319,  1329,
+    1330,  1333,  1334,  1337,  1337,  1345,  1345,  1355,  1355,  1367,
+    1367,  1374,  1374,  1386,  1386,  1399,  1400,  1404,  1408,  1408,
+    1420,  1421,  1425,  1425,  1433,  1434,  1437,  1438,  1439,  1440,
+    1441,  1444,  1448,  1448,  1456,  1456,  1466,  1467,  1470,  1470,
+    1478,  1479,  1482,  1482
   };
 
   // Print the state stack on the debug stream.
@@ -3491,8 +3466,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 3495 "dhcp4_parser.cc" // lalr1.cc:1167
-#line 1523 "dhcp4_parser.yy" // lalr1.cc:1168
+#line 3470 "dhcp4_parser.cc" // lalr1.cc:1167
+#line 1490 "dhcp4_parser.yy" // lalr1.cc:1168
 
 
 void
index c17beb521ddb2f6aa04a691f3953f09eebe6a2c1..919e11b18def64e089c2fb32340ea76eeb1af4d4 100644 (file)
@@ -305,6 +305,7 @@ namespace isc { namespace dhcp {
     union union_type
     {
       // value
+      // db_type
       char dummy1[sizeof(ElementPtr)];
 
       // "boolean"
@@ -360,86 +361,85 @@ namespace isc { namespace dhcp {
         TOKEN_LEASE_DATABASE = 274,
         TOKEN_HOSTS_DATABASE = 275,
         TOKEN_TYPE = 276,
-        TOKEN_USER = 277,
-        TOKEN_PASSWORD = 278,
-        TOKEN_HOST = 279,
-        TOKEN_PERSIST = 280,
-        TOKEN_LFC_INTERVAL = 281,
-        TOKEN_READONLY = 282,
-        TOKEN_VALID_LIFETIME = 283,
-        TOKEN_RENEW_TIMER = 284,
-        TOKEN_REBIND_TIMER = 285,
-        TOKEN_DECLINE_PROBATION_PERIOD = 286,
-        TOKEN_SUBNET4 = 287,
-        TOKEN_SUBNET_4O6_INTERFACE = 288,
-        TOKEN_SUBNET_4O6_INTERFACE_ID = 289,
-        TOKEN_SUBNET_4O6_SUBNET = 290,
-        TOKEN_OPTION_DEF = 291,
-        TOKEN_OPTION_DATA = 292,
-        TOKEN_NAME = 293,
-        TOKEN_DATA = 294,
-        TOKEN_CODE = 295,
-        TOKEN_SPACE = 296,
-        TOKEN_CSV_FORMAT = 297,
-        TOKEN_RECORD_TYPES = 298,
-        TOKEN_ENCAPSULATE = 299,
-        TOKEN_ARRAY = 300,
-        TOKEN_POOLS = 301,
-        TOKEN_POOL = 302,
-        TOKEN_SUBNET = 303,
-        TOKEN_INTERFACE = 304,
-        TOKEN_INTERFACE_ID = 305,
-        TOKEN_ID = 306,
-        TOKEN_RAPID_COMMIT = 307,
-        TOKEN_RESERVATION_MODE = 308,
-        TOKEN_HOST_RESERVATION_IDENTIFIERS = 309,
-        TOKEN_CLIENT_CLASSES = 310,
-        TOKEN_TEST = 311,
-        TOKEN_CLIENT_CLASS = 312,
-        TOKEN_RESERVATIONS = 313,
-        TOKEN_DUID = 314,
-        TOKEN_HW_ADDRESS = 315,
-        TOKEN_CIRCUIT_ID = 316,
-        TOKEN_CLIENT_ID = 317,
-        TOKEN_HOSTNAME = 318,
-        TOKEN_RELAY = 319,
-        TOKEN_IP_ADDRESS = 320,
-        TOKEN_HOOKS_LIBRARIES = 321,
-        TOKEN_LIBRARY = 322,
-        TOKEN_PARAMETERS = 323,
-        TOKEN_EXPIRED_LEASES_PROCESSING = 324,
-        TOKEN_SERVER_ID = 325,
-        TOKEN_IDENTIFIER = 326,
-        TOKEN_HTYPE = 327,
-        TOKEN_TIME = 328,
-        TOKEN_ENTERPRISE_ID = 329,
-        TOKEN_DHCP4O6_PORT = 330,
-        TOKEN_CONTROL_SOCKET = 331,
-        TOKEN_SOCKET_TYPE = 332,
-        TOKEN_SOCKET_NAME = 333,
-        TOKEN_DHCP_DDNS = 334,
-        TOKEN_LOGGING = 335,
-        TOKEN_LOGGERS = 336,
-        TOKEN_OUTPUT_OPTIONS = 337,
-        TOKEN_OUTPUT = 338,
-        TOKEN_DEBUGLEVEL = 339,
-        TOKEN_SEVERITY = 340,
-        TOKEN_DHCP6 = 341,
-        TOKEN_DHCPDDNS = 342,
-        TOKEN_TOPLEVEL_JSON = 343,
-        TOKEN_TOPLEVEL_DHCP4 = 344,
-        TOKEN_SUB_DHCP4 = 345,
-        TOKEN_SUB_INTERFACES4 = 346,
-        TOKEN_SUB_SUBNET4 = 347,
-        TOKEN_SUB_POOL4 = 348,
-        TOKEN_SUB_RESERVATION = 349,
-        TOKEN_SUB_OPTION_DEF = 350,
-        TOKEN_SUB_OPTION_DATA = 351,
-        TOKEN_SUB_HOOKS_LIBRARY = 352,
-        TOKEN_STRING = 353,
-        TOKEN_INTEGER = 354,
-        TOKEN_FLOAT = 355,
-        TOKEN_BOOLEAN = 356
+        TOKEN_MEMFILE = 277,
+        TOKEN_MYSQL = 278,
+        TOKEN_POSTGRESQL = 279,
+        TOKEN_USER = 280,
+        TOKEN_PASSWORD = 281,
+        TOKEN_HOST = 282,
+        TOKEN_PERSIST = 283,
+        TOKEN_LFC_INTERVAL = 284,
+        TOKEN_READONLY = 285,
+        TOKEN_CONNECT_TIMEOUT = 286,
+        TOKEN_VALID_LIFETIME = 287,
+        TOKEN_RENEW_TIMER = 288,
+        TOKEN_REBIND_TIMER = 289,
+        TOKEN_DECLINE_PROBATION_PERIOD = 290,
+        TOKEN_SUBNET4 = 291,
+        TOKEN_SUBNET_4O6_INTERFACE = 292,
+        TOKEN_SUBNET_4O6_INTERFACE_ID = 293,
+        TOKEN_SUBNET_4O6_SUBNET = 294,
+        TOKEN_OPTION_DEF = 295,
+        TOKEN_OPTION_DATA = 296,
+        TOKEN_NAME = 297,
+        TOKEN_DATA = 298,
+        TOKEN_CODE = 299,
+        TOKEN_SPACE = 300,
+        TOKEN_CSV_FORMAT = 301,
+        TOKEN_RECORD_TYPES = 302,
+        TOKEN_ENCAPSULATE = 303,
+        TOKEN_ARRAY = 304,
+        TOKEN_POOLS = 305,
+        TOKEN_POOL = 306,
+        TOKEN_SUBNET = 307,
+        TOKEN_INTERFACE = 308,
+        TOKEN_INTERFACE_ID = 309,
+        TOKEN_ID = 310,
+        TOKEN_RAPID_COMMIT = 311,
+        TOKEN_RESERVATION_MODE = 312,
+        TOKEN_HOST_RESERVATION_IDENTIFIERS = 313,
+        TOKEN_CLIENT_CLASSES = 314,
+        TOKEN_TEST = 315,
+        TOKEN_CLIENT_CLASS = 316,
+        TOKEN_RESERVATIONS = 317,
+        TOKEN_DUID = 318,
+        TOKEN_HW_ADDRESS = 319,
+        TOKEN_CIRCUIT_ID = 320,
+        TOKEN_CLIENT_ID = 321,
+        TOKEN_HOSTNAME = 322,
+        TOKEN_RELAY = 323,
+        TOKEN_IP_ADDRESS = 324,
+        TOKEN_HOOKS_LIBRARIES = 325,
+        TOKEN_LIBRARY = 326,
+        TOKEN_PARAMETERS = 327,
+        TOKEN_EXPIRED_LEASES_PROCESSING = 328,
+        TOKEN_DHCP4O6_PORT = 329,
+        TOKEN_CONTROL_SOCKET = 330,
+        TOKEN_SOCKET_TYPE = 331,
+        TOKEN_SOCKET_NAME = 332,
+        TOKEN_DHCP_DDNS = 333,
+        TOKEN_LOGGING = 334,
+        TOKEN_LOGGERS = 335,
+        TOKEN_OUTPUT_OPTIONS = 336,
+        TOKEN_OUTPUT = 337,
+        TOKEN_DEBUGLEVEL = 338,
+        TOKEN_SEVERITY = 339,
+        TOKEN_DHCP6 = 340,
+        TOKEN_DHCPDDNS = 341,
+        TOKEN_TOPLEVEL_JSON = 342,
+        TOKEN_TOPLEVEL_DHCP4 = 343,
+        TOKEN_SUB_DHCP4 = 344,
+        TOKEN_SUB_INTERFACES4 = 345,
+        TOKEN_SUB_SUBNET4 = 346,
+        TOKEN_SUB_POOL4 = 347,
+        TOKEN_SUB_RESERVATION = 348,
+        TOKEN_SUB_OPTION_DEF = 349,
+        TOKEN_SUB_OPTION_DATA = 350,
+        TOKEN_SUB_HOOKS_LIBRARY = 351,
+        TOKEN_STRING = 352,
+        TOKEN_INTEGER = 353,
+        TOKEN_FLOAT = 354,
+        TOKEN_BOOLEAN = 355
       };
     };
 
@@ -634,6 +634,18 @@ namespace isc { namespace dhcp {
     symbol_type
     make_TYPE (const location_type& l);
 
+    static inline
+    symbol_type
+    make_MEMFILE (const location_type& l);
+
+    static inline
+    symbol_type
+    make_MYSQL (const location_type& l);
+
+    static inline
+    symbol_type
+    make_POSTGRESQL (const location_type& l);
+
     static inline
     symbol_type
     make_USER (const location_type& l);
@@ -658,6 +670,10 @@ namespace isc { namespace dhcp {
     symbol_type
     make_READONLY (const location_type& l);
 
+    static inline
+    symbol_type
+    make_CONNECT_TIMEOUT (const location_type& l);
+
     static inline
     symbol_type
     make_VALID_LIFETIME (const location_type& l);
@@ -826,26 +842,6 @@ namespace isc { namespace dhcp {
     symbol_type
     make_EXPIRED_LEASES_PROCESSING (const location_type& l);
 
-    static inline
-    symbol_type
-    make_SERVER_ID (const location_type& l);
-
-    static inline
-    symbol_type
-    make_IDENTIFIER (const location_type& l);
-
-    static inline
-    symbol_type
-    make_HTYPE (const location_type& l);
-
-    static inline
-    symbol_type
-    make_TIME (const location_type& l);
-
-    static inline
-    symbol_type
-    make_ENTERPRISE_ID (const location_type& l);
-
     static inline
     symbol_type
     make_DHCP4O6_PORT (const location_type& l);
@@ -1159,12 +1155,12 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 624,     ///< Last index in yytable_.
-      yynnts_ = 267,  ///< Number of nonterminal symbols.
+      yylast_ = 604,     ///< Last index in yytable_.
+      yynnts_ = 261,  ///< Number of nonterminal symbols.
       yyfinal_ = 22, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 102  ///< Number of tokens.
+      yyntokens_ = 101  ///< Number of tokens.
     };
 
 
@@ -1216,9 +1212,9 @@ namespace isc { namespace dhcp {
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    99,   100,   101
+      95,    96,    97,    98,    99,   100
     };
-    const unsigned int user_token_number_max_ = 356;
+    const unsigned int user_token_number_max_ = 355;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int>(t) <= yyeof_)
@@ -1251,23 +1247,24 @@ namespace isc { namespace dhcp {
   {
       switch (other.type_get ())
     {
-      case 114: // value
+      case 113: // value
+      case 160: // db_type
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 101: // "boolean"
+      case 100: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 100: // "floating point"
+      case 99: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 99: // "integer"
+      case 98: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 98: // "constant string"
+      case 97: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1288,23 +1285,24 @@ namespace isc { namespace dhcp {
     (void) v;
       switch (this->type_get ())
     {
-      case 114: // value
+      case 113: // value
+      case 160: // db_type
         value.copy< ElementPtr > (v);
         break;
 
-      case 101: // "boolean"
+      case 100: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 100: // "floating point"
+      case 99: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 99: // "integer"
+      case 98: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 98: // "constant string"
+      case 97: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1384,23 +1382,24 @@ namespace isc { namespace dhcp {
     // Type destructor.
     switch (yytype)
     {
-      case 114: // value
+      case 113: // value
+      case 160: // db_type
         value.template destroy< ElementPtr > ();
         break;
 
-      case 101: // "boolean"
+      case 100: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 100: // "floating point"
+      case 99: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 99: // "integer"
+      case 98: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 98: // "constant string"
+      case 97: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1427,23 +1426,24 @@ namespace isc { namespace dhcp {
     super_type::move(s);
       switch (this->type_get ())
     {
-      case 114: // value
+      case 113: // value
+      case 160: // db_type
         value.move< ElementPtr > (s.value);
         break;
 
-      case 101: // "boolean"
+      case 100: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 100: // "floating point"
+      case 99: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 99: // "integer"
+      case 98: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 98: // "constant string"
+      case 97: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1512,7 +1512,7 @@ namespace isc { namespace dhcp {
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356
+     355
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -1637,6 +1637,24 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_TYPE, l);
   }
 
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MEMFILE (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_MEMFILE, l);
+  }
+
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_MYSQL (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_MYSQL, l);
+  }
+
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_POSTGRESQL (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_POSTGRESQL, l);
+  }
+
   Dhcp4Parser::symbol_type
   Dhcp4Parser::make_USER (const location_type& l)
   {
@@ -1673,6 +1691,12 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_READONLY, l);
   }
 
+  Dhcp4Parser::symbol_type
+  Dhcp4Parser::make_CONNECT_TIMEOUT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_CONNECT_TIMEOUT, l);
+  }
+
   Dhcp4Parser::symbol_type
   Dhcp4Parser::make_VALID_LIFETIME (const location_type& l)
   {
@@ -1925,36 +1949,6 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_EXPIRED_LEASES_PROCESSING, l);
   }
 
-  Dhcp4Parser::symbol_type
-  Dhcp4Parser::make_SERVER_ID (const location_type& l)
-  {
-    return symbol_type (token::TOKEN_SERVER_ID, l);
-  }
-
-  Dhcp4Parser::symbol_type
-  Dhcp4Parser::make_IDENTIFIER (const location_type& l)
-  {
-    return symbol_type (token::TOKEN_IDENTIFIER, l);
-  }
-
-  Dhcp4Parser::symbol_type
-  Dhcp4Parser::make_HTYPE (const location_type& l)
-  {
-    return symbol_type (token::TOKEN_HTYPE, l);
-  }
-
-  Dhcp4Parser::symbol_type
-  Dhcp4Parser::make_TIME (const location_type& l)
-  {
-    return symbol_type (token::TOKEN_TIME, l);
-  }
-
-  Dhcp4Parser::symbol_type
-  Dhcp4Parser::make_ENTERPRISE_ID (const location_type& l)
-  {
-    return symbol_type (token::TOKEN_ENTERPRISE_ID, l);
-  }
-
   Dhcp4Parser::symbol_type
   Dhcp4Parser::make_DHCP4O6_PORT (const location_type& l)
   {
@@ -2120,7 +2114,7 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp4_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2124 "dhcp4_parser.h" // lalr1.cc:377
+#line 2118 "dhcp4_parser.h" // lalr1.cc:377
 
 
 
index 5fa0df8e9c7c1702264ee26a2a65f62189f58d40..dd2f692184f79f82227ca54647c9955054d85ffc 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201612201711
+// Generated 201701101509
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index 90205858a483be1fa9892c8b5c913d7204c8be06..ecfb9441e75f3ca8953a9e19b7256e22d4606482 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201612201711
+// Generated 201701101509
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index 3f47b56e18c573b1b70d2f9d501c1cf05e73063d..25951c77eac46fe8abc88eee2ed52c9a071d1fac 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201612201711
+// Generated 201701101509
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++
index 13d72a07092e8d7fa19b0a8dfde87c3cd8a7e1d4..8e31e3e99618b408ac8429f23cb3b3c2fe447f91 100644 (file)
@@ -467,8 +467,8 @@ static void yynoreturn yy_fatal_error (yyconst char* msg  );
        (yy_c_buf_p) = yy_cp;
 
 /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */
-#define YY_NUM_RULES 111
-#define YY_END_OF_BUFFER 112
+#define YY_NUM_RULES 115
+#define YY_END_OF_BUFFER 116
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -476,93 +476,97 @@ struct yy_trans_info
        flex_int32_t yy_verify;
        flex_int32_t yy_nxt;
        };
-static yyconst flex_int16_t yy_accept[773] =
+static yyconst flex_int16_t yy_accept[807] =
     {   0,
-      104,  104,    0,    0,    0,    0,    0,    0,    0,    0,
-      112,  110,   10,   11,  110,    1,  104,  101,  104,  104,
-      110,  103,  102,  110,  110,  110,  110,  110,   97,   98,
-      110,  110,  110,   99,  100,    5,    5,    5,  110,  110,
-      110,   10,   11,    0,    0,   93,    0,    0,    0,    0,
+      108,  108,    0,    0,    0,    0,    0,    0,    0,    0,
+      116,  114,   10,   11,  114,    1,  108,  105,  108,  108,
+      114,  107,  106,  114,  114,  114,  114,  114,  101,  102,
+      114,  114,  114,  103,  104,    5,    5,    5,  114,  114,
+      114,   10,   11,    0,    0,   97,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    1,  104,  104,    0,
-      103,  104,    3,    2,    6,    0,  104,    0,    0,    0,
-        0,    0,    0,    4,    0,    0,    9,    0,   94,    0,
-        0,    0,    0,    0,    0,   96,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    1,  108,  108,    0,
+      107,  108,    3,    2,    6,    0,  108,    0,    0,    0,
+        0,    0,    0,    4,    0,    0,    9,    0,   98,    0,
+        0,    0,    0,    0,    0,  100,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    2,    0,    0,
-        0,    0,    0,    0,    0,    8,    0,    0,   79,   80,
-        0,    0,    0,   95,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    2,
+        0,    0,    0,    0,    0,    0,    0,    8,    0,    0,
+       83,   84,    0,    0,    0,   99,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   45,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   49,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
 
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-      109,  107,    0,  106,  105,    0,    0,    0,   78,    0,
+        0,    0,    0,    0,    0,  113,  111,    0,  110,  109,
+        0,    0,    0,   82,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,  108,  105,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   48,    0,    0,   33,    0,
-        0,    0,    0,    0,   64,    0,    0,    0,    0,    0,
-
-       21,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   32,    0,    0,    0,    0,    0,
-        0,   41,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   60,   83,   18,
-       19,    0,    0,    0,   91,   12,    0,    0,   71,    0,
+        0,    0,    0,  112,  109,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,   52,    0,    0,    0,   37,    0,
+
+        0,    0,    0,    0,   68,    0,    0,    0,    0,    0,
+       24,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   36,    0,    0,    0,
+        0,    0,    0,   45,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,   82,    0,    0,    0,    0,
+       64,   87,   18,   22,    0,    0,    0,   95,   12,    0,
+        0,   75,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   86,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   34,    0,    0,    0,    0,    0,    0,   72,    0,
-        0,    0,    0,    0,    0,   67,    0,    0,    7,    0,
+       20,    0,    0,    0,    0,    0,    0,   38,    0,    0,
 
+        0,    0,    0,    0,    0,   76,    0,    0,    0,    0,
+        0,    0,   71,    0,    0,    7,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   55,    0,    0,
-        0,    0,    0,    0,   36,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   42,    0,    0,
-        0,   52,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   59,    0,    0,    0,
+        0,    0,    0,    0,   40,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   46,    0,    0,
+        0,   56,    0,    0,    0,    0,    0,    0,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   76,   53,    0,    0,    0,    0,
-        0,    0,   22,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   29,    0,   92,
+        0,    0,    0,    0,    0,   80,   57,    0,   19,    0,
 
+        0,    0,    0,    0,   25,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+       33,    0,   96,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   70,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,   66,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   20,   35,    0,
-        0,   63,    0,   17,    0,    0,    0,    0,    0,    0,
-       57,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       90,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,   43,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,   23,   39,    0,    0,    0,   67,    0,   17,    0,
+        0,    0,    0,    0,    0,   61,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   94,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   47,    0,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       77,    0,    0,    0,    0,    0,   68,   56,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   65,   81,
 
-        0,   14,    0,   73,    0,    0,    0,    0,    0,   30,
-        0,   75,    0,   37,    0,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,   70,    0,
+        0,    0,    0,    0,    0,    0,    0,   81,    0,    0,
+        0,    0,    0,    0,   72,   60,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,   69,   85,    0,   14,
+        0,   77,    0,    0,    0,    0,    0,   34,    0,   79,
+       21,    0,   41,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,   74,    0,
         0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
-       49,   31,    0,    0,    0,    0,    0,    0,   26,    0,
-        0,   89,   88,    0,   59,    0,    0,    0,    0,   86,
-        0,    0,    0,    0,    0,    0,   44,    0,   62,    0,
-       23,    0,    0,   46,   27,   69,    0,    0,   61,    0,
-        0,    0,    0,   40,   84,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,   58,   87,    0,
-
-        0,    0,    0,    0,   16,    0,   15,   54,    0,    0,
-        0,   25,    0,   38,    0,    0,   74,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   47,
-        0,    0,    0,    0,   13,    0,    0,    0,    0,    0,
-        0,   24,    0,    0,   39,    0,    0,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   50,
-        0,    0,    0,   28,    0,    0,   85,    0,    0,    0,
-       51,    0
+       53,   35,    0,    0,    0,    0,    0,    0,   30,    0,
+        0,   93,   92,    0,   63,    0,    0,    0,    0,    0,
+       90,    0,    0,    0,    0,    0,    0,   48,    0,   66,
+
+        0,   26,    0,    0,   50,   31,   73,    0,    0,   65,
+        0,    0,    0,    0,    0,   44,   88,    0,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,   62,
+        0,   91,    0,    0,    0,    0,    0,   16,    0,   15,
+       58,    0,    0,    0,   29,   27,    0,   42,    0,    0,
+       78,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   51,    0,    0,    0,    0,   13,    0,
+        0,    0,    0,    0,    0,   28,    0,    0,   43,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
+        0,    0,    0,   54,    0,    0,    0,   32,    0,    0,
+
+       89,    0,    0,    0,   55,    0
     } ;
 
 static yyconst YY_CHAR yy_ec[256] =
@@ -579,8 +583,8 @@ static yyconst YY_CHAR yy_ec[256] =
        32,   33,   34,    5,   35,    5,   36,   37,   38,   39,
 
        40,   41,   42,   43,   44,    5,   45,   46,   47,   48,
-       49,   50,    5,   51,   52,   53,   54,   55,   56,   57,
-       58,    5,   59,    5,   60,    5,    5,    5,    5,    5,
+       49,   50,   51,   52,   53,   54,   55,   56,   57,   58,
+       59,    5,   60,    5,   61,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
@@ -597,818 +601,859 @@ static yyconst YY_CHAR yy_ec[256] =
         5,    5,    5,    5,    5
     } ;
 
-static yyconst YY_CHAR yy_meta[61] =
+static yyconst YY_CHAR yy_meta[62] =
     {   0,
         1,    1,    2,    3,    3,    4,    3,    3,    3,    3,
-        3,    3,    5,    6,    6,    6,    3,    3,    3,    3,
-        6,    6,    6,    6,    6,    3,    3,    3,    3,    3,
-        3,    3,    5,    3,    3,    6,    7,    6,    6,    6,
-        7,    3,    3,    3,    3,    3,    3,    5,    3,    3,
-        5,    3,    5,    5,    3,    3,    3,    3,    3,    3
+        3,    3,    3,    5,    5,    5,    3,    3,    3,    3,
+        5,    5,    5,    5,    5,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    5,    5,    5,    5,    5,
+        5,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+        3
     } ;
 
-static yyconst flex_uint16_t yy_base[786] =
+static yyconst flex_uint16_t yy_base[819] =
     {   0,
-        0,    0,   59,   62,   65,    0,   63,   67,   64,   66,
-      269, 5549,   83,  263,  125,    0,  105, 5549,  120,  126,
-       80,  169, 5549,  224,   87,   79,   37,   86, 5549, 5549,
-      102,   85,  102, 5549, 5549, 5549,  150,  219,  174,    0,
-      200,  153,  204,  137,  185, 5549,  193,  200,  209,  208,
-      222,  237,  245,  262,  251,  273,  291,  312,  324,  335,
-      389,  341,  353,  361,  381,  409,    0,  356,  420,  287,
-      434,  384, 5549,    0, 5549,  215,  335,  121,  136,  102,
-      171,  174,  159, 5549,  167,  198, 5549,  183, 5549,  144,
-      450,  460,  466,  474,  153,  484,  504,  499,  532,  545,
-
-      552,  558,  566,  580,  586,  594,  619,  632,  638,  647,
-      653,  661,  671,  686,  696,  704,  710,  722,  729,  744,
-      755,  762,  768,  779,  788,  801,  814,  864,  821,  830,
-      842,  849,  855,  878,  888,  902,  912,    0,  208,  241,
-      168,  253,  245,  210,  100, 5549,    0,  921, 5549, 5549,
-      927,  945,  116, 5549,  974,  967,  961, 1003,  974, 1015,
-     1022, 1028, 1038, 1048, 1061, 1067, 1074, 1084, 1090, 1096,
-     1102, 1112, 1119, 1125, 5549, 1131, 1140, 1148, 1154, 1165,
-     1187, 1193, 1199, 1206, 1212, 1221, 1227, 1241, 1247, 1256,
-     1263, 1280, 1289, 1297, 1304, 1313, 1322, 1337, 1348, 1358,
-
-     1365, 1373, 1381, 1391, 1398, 1409, 1419, 1427, 1435,  293,
-     5549, 5549,  329, 5549, 5549,   58,    0, 1442, 5549, 1460,
-     1491, 1468, 1485, 1518, 1533, 1539, 1546, 1552, 1558, 1567,
-     1575, 1586, 1595, 1604, 1610, 1619, 1628, 1638, 1645, 1656,
-     1666, 1673, 1681, 1690, 1699, 1706, 1715, 1725, 1732, 1743,
-     1750, 1758, 1765, 1778, 1784, 1793, 1800, 1813, 1806, 1828,
-     1835, 1847, 1856, 1863, 1869, 1882, 1889, 1897, 1905, 1915,
-     1922, 1933, 1940, 1948, 5549, 5549,   65,    0, 1955, 1961,
-     1968, 1976, 2011, 1983, 1989, 5549, 1996, 2011, 5549, 2037,
-     2052, 2060, 2066, 2073, 5549, 2085, 2101, 2107, 2114, 2122,
-
-     5549, 2129, 2142, 2155, 2162, 2168, 2180, 2188, 2197, 2208,
-     2214, 2225, 2231, 2237, 5549, 2247, 2254, 2265, 2271, 2282,
-     2288, 5549, 2300, 2308, 2316, 2323, 2336, 2342, 2349, 2359,
-     2365, 2377, 2384, 2393, 2400, 2406, 2412, 5549, 5549, 5549,
-     5549, 2418,   54,    0, 5549, 5549, 2440, 2453, 5549, 2446,
-     2460, 2466, 2474, 2488, 2499, 2507, 2517, 2523, 2533, 2541,
-     2552, 2559, 2566, 2577, 2587, 5549, 2594, 2601, 2610, 2616,
-     2627, 2635, 2649, 2656, 2668, 2684, 2677, 2690, 2696, 2703,
-     2712, 5549, 2718, 2724, 2738, 2752, 2771, 2777, 5549, 2760,
-     2788, 2794, 2800, 2812, 2823, 5549, 2834, 2841, 5549, 2851,
-
-     2857, 2867, 2874, 2880, 2890, 2908, 2896, 2914, 2931, 2937,
-     2947, 2953, 2965, 2971, 2987, 2993, 2999, 3005, 3011, 3021,
-     3028, 3040, 3046, 3061, 3068, 3079, 3086, 5549, 3094, 3101,
-     3107, 3114, 3120, 3130, 5549, 3136, 3148, 3154, 3171, 3177,
-     3183, 3189, 3195, 3205, 3211, 3217, 3231, 5549, 3239, 3245,
-     3259, 5549, 3265, 3279, 3285, 3293, 3299, 3307, 3314, 3321,
-     3336, 3342, 3349, 3355, 3362, 3375, 3383, 3390, 3401, 3408,
-     3416, 3424, 3430, 3436, 5549, 5549, 3444, 3458, 3464, 3472,
-     3478, 3487, 5549, 3498, 3506, 3515, 3523, 3532, 3539, 3548,
-     3557, 3565, 3572, 3585, 3593, 3607, 3619, 5549, 3626, 5549,
-
-     3632, 3643, 3652, 3660, 3668, 3677, 3688, 3694, 3701, 3711,
-     3722, 3729, 3735, 3744, 5549, 3755, 3764, 3772, 3778, 3798,
-     3806, 3812, 3818, 3826, 3832, 3851, 3860, 5549, 5549, 3869,
-     3875, 5549, 3884, 5549, 3893, 3904, 3912, 3918, 3926, 3932,
-     5549, 3940, 3946, 3965, 3975, 3982, 3988, 3998, 4008, 4016,
-     5549, 4022, 4031, 4037, 4044, 4050, 4057, 4066, 4073, 4079,
-     4086, 5549, 4095, 4102, 4114, 4123, 4130, 4139, 4147, 4156,
-     4167, 4173, 4184, 4191, 4201, 4207, 4213, 4219, 4225, 4235,
-     5549, 4248, 4254, 4260, 4268, 4276, 5549, 5549, 4289, 4283,
-     4296, 4302, 4309, 4330, 4338, 4344, 4353, 4363, 5549, 5549,
-
-     4372, 5549, 4379, 5549, 4391, 4400, 4407, 4413, 4419, 5549,
-     4425, 5549, 4436, 5549, 4448, 4454, 4460, 4469, 4476, 4483,
-     4489, 4497, 4505, 4517, 4523, 4531, 4538, 4545, 5549, 4552,
-     4559, 4571, 4581, 4587, 4593, 4600, 4606, 4615, 4621, 4628,
-     5549, 5549, 4635, 4641, 4656, 4663, 4669, 4675, 5549, 4684,
-     4691, 5549, 5549, 4697, 5549, 4703, 4710, 4717, 4726, 5549,
-     4732, 4739, 4745, 4751, 4765, 4773, 5549, 4779, 5549, 4786,
-     5549, 4798, 4814, 5549, 5549, 5549, 4822, 4831, 5549, 4837,
-     4843, 4850, 4856, 5549, 5549, 4865, 4884, 4872, 4890, 4900,
-     4907, 4913, 4924, 4935, 4941, 4948, 4957, 5549, 5549, 4963,
-
-     4969, 4976, 4983, 4991, 5549, 4997, 5549, 5549, 5004, 5012,
-     5019, 5549, 5030, 5549, 5041, 5048, 5549, 5064, 5070, 5082,
-     5088, 5099, 5107, 5121, 5133, 5140, 5146, 5154, 5162, 5549,
-     5168, 5174, 5187, 5196, 5549, 5203, 5210, 5225, 5231, 5238,
-     5244, 5549, 5250, 5260, 5549, 5267, 5273, 5279, 5285, 5295,
-     5301, 5307, 5329, 5335, 5342, 5349, 5355, 5363, 5371, 5549,
-     5389, 5396, 5404, 5549, 5412, 5418, 5549, 5424, 5430, 5438,
-     5549, 5549, 5482, 5489, 5496, 5503, 5510, 5517, 5524, 5528,
-     5533, 5535, 5537, 5539, 5541
+        0,    0,   60,   63,   66,    0,   64,   68,   65,   67,
+      297, 5837,   84,  293,  127,    0,  101, 5837,  107,  121,
+       81,  128, 5837,  268,   88,  103,  101,  106, 5837, 5837,
+      128,  107,  120, 5837, 5837, 5837,  153,  270,  229,    0,
+      256,  182,  253,  163,  186, 5837,  192,  199,  205,  203,
+      212,  227,  246,  260,  266,  289,  301,  311,  323,  329,
+      384,  362,  372,  398,  407,  413,    0,  367,  429,  447,
+      452,  456, 5837,    0, 5837,  206,  227,  164,  171,  123,
+      177,  178,  215, 5837,  196,  221, 5837,  179, 5837,  446,
+      472,  483,  501,  511,  193,  517,  540,  534,  524,  568,
+
+      540,  581,  587,  596,  603,  616,  625,  636,  649,  665,
+      659,  671,  677,  694,  700,  710,  716,  733,  739,  749,
+      758,  767,  773,  782,  792,  806,  816,  827,  835,  885,
+      841,  851,  869,  875,  893,  908,  914,  926,  934,    0,
+      221,  213,  213,  252,  239,  247,  145, 5837,    0,  942,
+     5837, 5837,  948,  955,  153, 5837,  984,  968, 1009, 1025,
+      981, 1035, 1042, 1049, 1060, 1068, 1078, 1084, 1093, 1112,
+     1118, 1129, 1135, 1141, 1152, 1164, 5837, 1175, 1181, 1203,
+     1187, 1216, 1209, 1223, 1242, 1229, 1249, 1257, 1265, 1271,
+     1277, 1283, 1290, 1300, 1316, 1323, 1340, 1349, 1357, 1364,
+
+     1373, 1382, 1397, 1408, 1418, 1425, 1433, 1443, 1451, 1458,
+     1467, 1484, 1492, 1502,  254, 5837, 5837,  260, 5837, 5837,
+       91,    0, 1517, 5837, 1508, 1539, 1525, 1564, 1536, 1580,
+     1586, 1592, 1598, 1604, 1615, 1621, 1638, 1649, 1655, 1663,
+     1671, 1677, 1683, 1689, 1700, 1706, 1717, 1729, 1745, 1752,
+     1758, 1764, 1771, 1787, 1793, 1806, 1812, 1821, 1827, 1840,
+     1847, 1856, 1862, 1875, 1882, 1890, 1896, 1908, 1915, 1936,
+     1943, 1949, 1958, 1964, 1972, 1978, 1992, 2006, 1984, 2020,
+     2027, 2034, 2041, 5837, 5837,   79,    0, 2048, 2055, 2062,
+     2069, 2104, 2076, 2083, 5837, 2097, 2090, 2105, 5837, 2130,
+
+     2145, 2154, 2163, 2171, 5837, 2178, 2197, 2204, 2211, 2221,
+     5837, 2232, 2239, 2247, 2254, 2260, 2267, 2275, 2288, 2295,
+     2301, 2311, 2317, 2323, 2329, 2335, 5837, 2345, 2351, 2358,
+     2364, 2379, 2386, 5837, 2393, 2400, 2408, 2414, 2421, 2428,
+     2434, 2442, 2463, 2476, 2456, 2482, 2489, 2496, 2502, 2515,
+     5837, 5837, 5837, 5837, 2525,   65,    0, 5837, 5837, 2537,
+     2550, 5837, 2543, 2558, 2565, 2571, 2587, 2593, 2599, 2607,
+     2615, 2633, 2641, 2649, 2657, 2666, 2674, 2699, 2714, 5837,
+     2707, 2721, 2727, 2733, 2742, 2749, 2755, 2766, 2777, 2788,
+     5837, 2794, 2805, 2814, 2823, 2833, 2840, 5837, 2847, 2856,
+
+     2880, 2868, 2894, 2901, 2908, 5837, 2915, 2922, 2929, 2936,
+     2948, 2955, 5837, 2971, 2977, 5837, 2983, 2989, 2995, 3006,
+     3018, 3012, 3024, 3041, 3052, 3060, 3066, 3080, 3088, 3094,
+     3101, 3108, 3114, 3122, 3136, 3142, 3148, 3155, 3162, 3177,
+     3183, 3195, 3202, 3216, 3223, 3230, 5837, 3237, 3244, 3252,
+     3259, 3270, 3277, 3287, 5837, 3293, 3299, 3305, 3312, 3322,
+     3334, 3340, 3347, 3356, 3363, 3376, 3384, 5837, 3391, 3397,
+     3410, 5837, 3417, 3425, 3443, 3450, 3458, 3464, 3471, 3479,
+     3486, 3505, 3514, 3520, 3527, 3542, 3548, 3556, 3562, 3568,
+     3584, 3590, 3596, 3602, 3608, 5837, 5837, 3625, 5837, 3631,
+
+     3637, 3644, 3651, 3672, 5837, 3679, 3687, 3696, 3705, 3712,
+     3721, 3731, 3738, 3745, 3754, 3760, 3766, 3778, 3788, 3806,
+     5837, 3812, 5837, 3824, 3830, 3840, 3846, 3853, 3865, 3874,
+     3881, 3889, 3900, 3907, 3917, 3923, 3929, 3940, 5837, 3958,
+     3968, 3974, 3982, 3994, 4003, 4010, 4016, 4022, 4028, 4039,
+     4051, 5837, 5837, 4057, 4072, 4079, 5837, 4085, 5837, 4093,
+     4105, 4113, 4119, 4127, 4133, 5837, 4141, 4147, 4166, 4176,
+     4183, 4189, 4199, 4209, 4217, 4232, 5837, 4238, 4246, 4252,
+     4258, 4266, 4281, 4274, 4291, 4302, 4310, 5837, 4317, 4330,
+     4336, 4345, 4351, 4364, 4371, 4387, 4393, 4399, 4407, 4413,
+
+     4421, 4427, 4433, 4441, 4447, 4455, 4461, 5837, 4481, 4489,
+     4495, 4502, 4510, 4524, 5837, 5837, 4530, 4538, 4550, 4558,
+     4573, 4579, 4587, 4593, 4599, 4608, 5837, 5837, 4621, 5837,
+     4628, 5837, 4636, 4645, 4661, 4669, 4681, 5837, 4689, 5837,
+     5837, 4695, 5837, 4702, 4709, 4715, 4730, 4724, 4743, 4749,
+     4764, 4777, 4783, 4789, 4797, 4803, 4811, 4823, 5837, 4839,
+     4846, 4852, 4860, 4867, 4874, 4880, 4893, 4900, 4908, 4914,
+     5837, 5837, 4922, 4933, 4942, 4948, 4956, 4962, 5837, 4970,
+     4976, 5837, 5837, 4982, 5837, 4990, 4998, 5004, 5018, 5024,
+     5837, 5032, 5038, 5044, 5053, 5061, 5067, 5837, 5073, 5837,
+
+     5082, 5837, 5107, 5117, 5837, 5837, 5837, 5123, 5130, 5837,
+     5136, 5142, 5152, 5164, 5171, 5837, 5837, 5180, 5187, 5193,
+     5199, 5206, 5216, 5222, 5228, 5234, 5241, 5257, 5267, 5837,
+     5274, 5837, 5280, 5291, 5302, 5308, 5314, 5837, 5320, 5837,
+     5837, 5330, 5336, 5342, 5837, 5837, 5348, 5837, 5354, 5364,
+     5837, 5377, 5370, 5388, 5403, 5412, 5421, 5427, 5436, 5445,
+     5455, 5462, 5470, 5837, 5478, 5490, 5498, 5504, 5837, 5511,
+     5519, 5539, 5545, 5552, 5558, 5837, 5564, 5574, 5837, 5581,
+     5587, 5598, 5609, 5615, 5621, 5627, 5637, 5649, 5655, 5661,
+     5670, 5689, 5695, 5837, 5705, 5711, 5717, 5837, 5723, 5729,
+
+     5837, 5739, 5745, 5757, 5837, 5837, 5798, 5803, 5808, 5813,
+     5818, 5823, 5828, 5831,   96,   90,   87,   64
     } ;
 
-static yyconst flex_int16_t yy_def[786] =
+static yyconst flex_int16_t yy_def[819] =
     {   0,
-      772,    1,  773,  773,    1,    5,    5,    5,    5,    5,
-      772,  772,  772,  772,  774,  775,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  776,
-      772,  772,  772,  777,  774,  772,  774,  774,  774,  778,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  775,  772,  772,  772,
-      772,  772,  772,  779,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  776,  772,  777,  772,  780,
-      774,  774,  774,  774,  781,  774,  778,  774,  774,  774,
-
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  779,  772,  772,
-      772,  772,  772,  772,  772,  772,  782,  774,  772,  772,
-      774,  774,  781,  772,  778,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  772,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  772,
-      772,  772,  772,  772,  772,  772,  783,  774,  772,  774,
-      778,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  772,  772,  772,  784,  774,  774,
-      774,  774,  778,  774,  774,  772,  774,  774,  772,  774,
-      774,  774,  774,  774,  772,  774,  774,  774,  774,  774,
-
-      772,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  772,  774,  774,  774,  774,  774,
-      774,  772,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  772,  772,  772,
-      772,  774,  772,  785,  772,  772,  774,  774,  772,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  772,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  772,  774,  774,  774,  774,  774,  774,  772,  774,
-      774,  774,  774,  774,  774,  772,  774,  774,  772,  774,
-
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  772,  774,  774,
-      774,  774,  774,  774,  772,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  772,  774,  774,
-      774,  772,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  772,  772,  774,  774,  774,  774,
-      774,  774,  772,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  772,  774,  772,
-
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  772,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  772,  772,  774,
-      774,  772,  774,  772,  774,  774,  774,  774,  774,  774,
-      772,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      772,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  772,  774,  774,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      772,  774,  774,  774,  774,  774,  772,  772,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  772,  772,
-
-      774,  772,  774,  772,  774,  774,  774,  774,  774,  772,
-      774,  772,  774,  772,  774,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  772,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  774,
-      772,  772,  774,  774,  774,  774,  774,  774,  772,  774,
-      774,  772,  772,  774,  772,  774,  774,  774,  774,  772,
-      774,  774,  774,  774,  774,  774,  772,  774,  772,  774,
-      772,  774,  774,  772,  772,  772,  774,  774,  772,  774,
-      774,  774,  774,  772,  772,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  772,  772,  774,
-
-      774,  774,  774,  774,  772,  774,  772,  772,  774,  774,
-      774,  772,  774,  772,  774,  774,  772,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  772,
-      774,  774,  774,  774,  772,  774,  774,  774,  774,  774,
-      774,  772,  774,  774,  772,  774,  774,  774,  774,  774,
-      774,  774,  774,  774,  774,  774,  774,  774,  774,  772,
-      774,  774,  774,  772,  774,  774,  772,  774,  774,  774,
-      772,    0,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772
+      806,    1,  807,  807,    1,    5,    5,    5,    5,    5,
+      806,  806,  806,  806,  808,  809,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,  810,
+      806,  806,  806,  811,  808,  806,  808,  808,  808,  812,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  809,  806,  806,  806,
+      806,  806,  806,  813,  806,  806,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  810,  806,  811,  806,  806,
+      808,  808,  808,  808,  814,  808,  812,  808,  808,  808,
+
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  813,
+      806,  806,  806,  806,  806,  806,  806,  806,  815,  808,
+      806,  806,  808,  808,  814,  806,  812,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  806,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  806,  806,  806,  806,  806,  806,
+      806,  816,  808,  806,  808,  812,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  806,  806,  806,  817,  808,  808,  808,
+      808,  812,  808,  808,  806,  808,  808,  808,  806,  808,
+
+      808,  808,  808,  808,  806,  808,  808,  808,  808,  808,
+      806,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  806,  808,  808,  808,
+      808,  808,  808,  806,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      806,  806,  806,  806,  808,  806,  818,  806,  806,  808,
+      808,  806,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  806,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      806,  808,  808,  808,  808,  808,  808,  806,  808,  808,
+
+      808,  808,  808,  808,  808,  806,  808,  808,  808,  808,
+      808,  808,  806,  808,  808,  806,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  806,  808,  808,  808,
+      808,  808,  808,  808,  806,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  806,  808,  808,
+      808,  806,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  806,  806,  808,  806,  808,
+
+      808,  808,  808,  808,  806,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      806,  808,  806,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  806,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  806,  806,  808,  808,  808,  806,  808,  806,  808,
+      808,  808,  808,  808,  808,  806,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  806,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  806,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+
+      808,  808,  808,  808,  808,  808,  808,  806,  808,  808,
+      808,  808,  808,  808,  806,  806,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  806,  806,  808,  806,
+      808,  806,  808,  808,  808,  808,  808,  806,  808,  806,
+      806,  808,  806,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  806,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      806,  806,  808,  808,  808,  808,  808,  808,  806,  808,
+      808,  806,  806,  808,  806,  808,  808,  808,  808,  808,
+      806,  808,  808,  808,  808,  808,  808,  806,  808,  806,
+
+      808,  806,  808,  808,  806,  806,  806,  808,  808,  806,
+      808,  808,  808,  808,  808,  806,  806,  808,  808,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  806,
+      808,  806,  808,  808,  808,  808,  808,  806,  808,  806,
+      806,  808,  808,  808,  806,  806,  808,  806,  808,  808,
+      806,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  806,  808,  808,  808,  808,  806,  808,
+      808,  808,  808,  808,  808,  806,  808,  808,  806,  808,
+      808,  808,  808,  808,  808,  808,  808,  808,  808,  808,
+      808,  808,  808,  806,  808,  808,  808,  806,  808,  808,
+
+      806,  808,  808,  808,  806,    0,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806
     } ;
 
-static yyconst flex_uint16_t yy_nxt[5610] =
+static yyconst flex_uint16_t yy_nxt[5899] =
     {   0,
        12,   13,   14,   13,   12,   15,   16,   12,   17,   18,
        19,   20,   21,   22,   22,   22,   23,   24,   12,   12,
        12,   12,   12,   25,   26,   12,   27,   12,   12,   28,
        12,   29,   12,   30,   12,   12,   12,   12,   12,   25,
        31,   12,   12,   12,   12,   12,   12,   32,   12,   12,
-       12,   12,   33,   12,   12,   12,   12,   12,   34,   35,
-       37,   14,   37,   37,   14,   37,   38,   79,   40,   38,
-       12,   12,   40,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   41,   42,   41,   42,   73,   12,   12,
-       79,   12,   74,  399,   12,   76,   12,   76,   12,   78,
-
-       77,   77,   77,  343,   12,   12,   12,   12,   39,   12,
-       12,  277,   12,   80,   78,   79,   68,   12,   69,   69,
-       69,  154,   78,   12,   12,   44,   44,   44,   70,   80,
-       46,   68,  141,   71,   71,   71,   80,   81,   82,   72,
-       72,   72,   89,   70,   70,  216,  139,   47,   48,   70,
-       49,   42,   83,   42,   42,  141,   42,   50,  154,   70,
-       51,  140,   52,   53,   54,   70,  139,   55,   56,   90,
-       57,   58,   59,   60,   61,   62,   63,   64,   65,   66,
-       68,  140,   71,   71,   71,   44,   44,   44,   89,  141,
-       46,  212,   70,   44,   44,   44,  139,  147,   46,  140,
-
-       44,   44,   44,  146,  145,   46,   43,  212,   70,   44,
-       44,   44,  144,   96,   46,   90,  142,   50,   87,  143,
-       45,   85,   44,   44,   44,   50,   92,   46,   77,   77,
-       77,   84,   50,  212,   93,   91,  210,   44,   44,   44,
-       45,   50,   46,   75,   45,   44,   44,   44,   45,  215,
-       46,   44,   44,   44,   50,   45,   46,   94,   45,  210,
-       45,   97,   44,   44,   44,   43,  211,   46,  772,   50,
-      211,  772,   98,   44,   44,   44,  772,   50,   46,  772,
-      102,  210,   99,   50,  103,  100,  211,  104,  101,  772,
-      214,   44,   44,   44,   50,   76,   46,   76,  105,  108,
-
-       77,   77,   77,  109,  213,   50,  110,  772,  772,  106,
-      772,  111,   44,   44,   44,  772,  275,   46,  107,  772,
-      112,  772,  113,   50,   44,   44,   44,  772,  772,   46,
-      114,  115,  275,  772,  116,   44,   44,   44,  772,  117,
-       46,   44,   44,   44,   50,  772,   46,  118,   77,   77,
-       77,  772,  275,   44,   44,   44,   50,  772,   46,  119,
-      772,   44,   44,   44,  772,  772,   46,   50,  276,   72,
-       72,   72,  772,   50,  772,  772,  127,  772,  772,   70,
-      128,   44,   44,   44,  120,   50,   46,  772,  121,   44,
-       44,   44,  129,   50,   46,   70,  772,   72,   72,   72,
-
-      133,  130,  131,  772,  134,  772,  132,   70,  772,   44,
-       44,   44,  772,   50,   46,  772,  772,  772,  135,  772,
-      772,   50,  772,   70,  122,  772,  772,  123,  124,  772,
-      772,   68,  136,   69,   69,   69,  772,  125,  772,  126,
-      772,   50,  772,   70,  137,   68,  772,   71,   71,   71,
-       44,   44,   44,  772,  772,   46,  772,   70,  772,   70,
-       44,   44,   44,  772,  772,  149,   44,   44,   44,  772,
-      772,  150,  772,   70,   44,   44,   44,  772,  772,   46,
-      772,  772,   50,  772,   44,   44,   44,  148,  772,   46,
-      772,  772,   50,  772,  772,  151,  772,  772,   50,   44,
-
-       44,   44,  772,  772,   46,  772,   50,  772,  772,  772,
-      772,  772,  772,  772,  772,  152,   50,  155,  155,  155,
-      772,  772,  772,  772,  155,  155,  155,  155,  155,  772,
-      772,   50,   44,   44,   44,  772,  772,   46,  772,  155,
-      155,  155,  155,  155,  155,   44,   44,   44,  772,  156,
-       46,  772,   44,   44,   44,  772,  772,   46,   44,   44,
-       44,  772,  772,   46,   50,  772,   44,   44,   44,  772,
-      772,   46,  772,  772,  772,  157,  772,   50,  772,  772,
-       44,   44,   44,  158,   50,   46,   44,   44,   44,  772,
-       50,   46,  159,  772,   44,   44,   44,  772,   50,   46,
-
-      772,  772,  162,  163,  772,  772,  160,  772,  772,  772,
-      161,  164,   50,  772,  772,  772,  772,  165,   50,   44,
-       44,   44,  772,  772,   46,  772,   50,  772,  772,  166,
-      772,  167,   44,   44,   44,  772,  772,   46,   44,   44,
-       44,  772,  772,   46,  772,  772,  168,   44,   44,   44,
-      772,   50,   46,   44,   44,   44,  169,  174,  175,  772,
-      772,   44,   44,   44,   50,  772,   46,  772,  170,  772,
-       50,   44,   44,   44,  772,  772,   46,  772,  772,   50,
-      171,  178,  772,  172,  772,   50,   44,   44,   44,  772,
-      772,   46,  176,   50,  772,  173,   44,   44,   44,  772,
-
-      772,   46,  772,   50,   44,   44,   44,  772,  772,   46,
-       44,   44,   44,  177,  772,   46,  772,  772,   50,  772,
-      772,  179,   44,   44,   44,  772,  772,   46,   50,   44,
-       44,   44,  772,  180,   46,  772,   50,  772,  772,  772,
-      181,  772,   50,  772,   44,   44,   44,  772,  772,   46,
-      772,  182,  772,  772,   50,   44,   44,   44,  772,  183,
-       46,   50,   44,   44,   44,  772,  772,   46,   44,   44,
-       44,  772,  772,   46,  772,  184,   50,  772,  189,   44,
-       44,   44,  772,  772,   46,  772,  772,   50,   44,   44,
-       44,  772,  772,   46,   50,  772,  185,  772,  772,  772,
-
-       50,   44,   44,   44,  772,  772,   46,  186,  772,  772,
-      772,   50,  187,  188,   44,   44,   44,  772,  772,   46,
-       50,   44,   44,   44,  772,  772,   46,  772,  772,  190,
-       44,   44,   44,   50,  772,   46,  191,  772,  772,  772,
-      192,  772,   44,   44,   44,  772,   50,   46,  772,   44,
-       44,   44,  772,   50,   46,   44,   44,   44,  772,  772,
-       46,  772,   50,  193,   44,   44,   44,  202,  772,   46,
-      772,  200,  772,  772,   50,  201,  772,  203,   44,   44,
-       44,   50,  772,   46,  772,  204,  772,   50,   44,   44,
-       44,  772,  772,   46,  772,  772,   50,  772,  772,  194,
-
-      195,  196,   44,   44,   44,  772,  205,   46,  772,  197,
-       50,  198,   44,   44,   44,  199,  772,   46,  772,  772,
-       50,   44,   44,   44,  206,  772,   46,   44,   44,   44,
-      772,  772,  219,  772,   50,  772,  772,  207,  772,  772,
-      772,  208,  772,  772,   50,   44,   44,   44,  772,  772,
-       46,  772,  772,   50,  772,  772,  772,  209,  772,   50,
-      772,   44,   44,   44,  772,  772,   46,   44,   44,   44,
-      218,  772,   46,  772,   44,   44,   44,   50,  772,   46,
-      772,  772,  772,  772,  772,  772,  220,  221,  221,  221,
-      772,  772,  772,   50,  221,  221,  221,  221,  221,   50,
-
-      223,  772,  222,   44,   44,   44,   50,  772,   46,  221,
-      221,  221,  221,  221,  221,   44,   44,   44,  772,  772,
-       46,  772,   44,   44,   44,  226,  225,   46,   44,   44,
-       44,  772,  772,   46,  772,   50,  772,  772,   44,   44,
-       44,  772,  224,   46,  772,  772,  772,   50,   44,   44,
-       44,  772,  772,   46,   50,  772,  772,  227,  772,  772,
-       50,   44,   44,   44,  772,  772,   46,   44,   44,   44,
-       50,  772,   46,  772,   44,   44,   44,  772,  772,   46,
-       50,  228,  772,  229,   44,   44,   44,  230,  772,   46,
-       44,   44,   44,   50,  772,   46,   44,   44,   44,   50,
-
-      772,   46,   44,   44,   44,  232,   50,   46,  772,  233,
-      231,  772,   44,   44,   44,  772,   50,   46,  772,   44,
-       44,   44,   50,  234,   46,   44,   44,   44,   50,  772,
-       46,   44,   44,   44,   50,  235,   46,  772,  772,  236,
-       44,   44,   44,  772,   50,   46,  237,  772,   44,   44,
-       44,   50,  772,   46,   44,   44,   44,   50,  772,   46,
-      240,  772,  772,   50,  238,   44,   44,   44,  239,  772,
-       46,  772,   50,  772,  772,  245,  772,  772,  241,  242,
-       50,  772,  772,  243,  772,  772,   50,   44,   44,   44,
-      772,  772,   46,   44,   44,   44,  772,   50,   46,   44,
-
-       44,   44,  772,  772,   46,  244,   44,   44,   44,  248,
-      772,   46,   44,   44,   44,  772,  772,   46,  772,   50,
-      772,   44,   44,   44,  772,   50,   46,   44,   44,   44,
-      772,   50,   46,  772,  247,  772,  772,  246,   50,  772,
-      772,   44,   44,   44,   50,  249,   46,   44,   44,   44,
-      772,  772,   46,   50,  772,  250,   44,   44,   44,   50,
-      772,   46,  252,   44,   44,   44,  772,  772,   46,  772,
-      251,  772,  772,   50,  772,  772,  772,  772,  772,   50,
-       44,   44,   44,  772,  772,   46,  772,  772,   50,   44,
-       44,   44,  253,  772,   46,   50,  254,   44,   44,   44,
-
-      772,  772,   46,  772,   44,   44,   44,  255,  256,   46,
-      772,  772,   50,   44,   44,   44,  772,  772,   46,  772,
-      257,   50,   44,   44,   44,  772,  772,   46,  772,   50,
-      772,  772,  258,  772,  772,  259,   50,   44,   44,   44,
-      772,  772,   46,  772,  772,   50,  772,  260,   44,   44,
-       44,  772,  772,   46,   50,  772,  772,  262,   44,   44,
-       44,  261,  772,   46,  772,   44,   44,   44,  772,   50,
-       46,  772,  772,   44,   44,   44,  263,  772,   46,  772,
-       50,   44,   44,   44,  772,  772,   46,  264,  772,  772,
-       50,   44,   44,   44,  772,  772,   46,   50,   44,   44,
-
-       44,  772,  772,   46,  266,   50,  772,  772,  772,   44,
-       44,   44,  265,   50,   46,  772,  772,  267,  268,   44,
-       44,   44,  772,   50,   46,  772,  772,   44,   44,   44,
-       50,  772,   46,  772,  772,   44,   44,   44,  269,  772,
-       46,   50,   44,   44,   44,  772,  772,   46,  271,  772,
-      270,   50,  772,  772,  772,  772,  279,  280,  272,   50,
-       44,   44,   44,  772,  281,   46,  772,   50,   44,   44,
-       44,  772,  772,   46,   50,  772,  772,  273,  274,  772,
-      772,  772,  772,  772,  772,   44,   44,   44,  772,  772,
-       46,  772,   50,  772,  772,  772,  772,  772,  772,  772,
-
-       50,  772,  772,  282,  283,  283,  283,  772,  772,  772,
-      772,  283,  283,  283,  283,  283,  772,   50,   44,   44,
-       44,  772,  772,  286,  772,  284,  283,  283,  283,  283,
-      283,  283,  285,   44,   44,   44,  772,  772,   46,   44,
-       44,   44,  772,  772,   46,  772,   44,   44,   44,  772,
-       50,  289,   44,   44,   44,  772,  772,   46,   44,   44,
-       44,  772,  772,   46,  772,   50,  772,   44,   44,   44,
-      772,   50,   46,  772,  772,   44,   44,   44,   50,  288,
-       46,  772,  772,  287,   50,  293,   44,   44,   44,  294,
-       50,  295,  772,  290,  772,   44,   44,   44,  772,   50,
-
-       46,  291,  772,  772,   44,   44,   44,   50,  292,   46,
-       44,   44,   44,  772,  772,   46,  772,  772,   50,   44,
-       44,   44,  772,  772,   46,  772,  772,   50,   44,   44,
-       44,  772,  772,   46,  772,  772,   50,  772,   44,   44,
-       44,  772,   50,  301,  296,   44,   44,   44,  302,  772,
-       46,   50,  772,  772,  297,  772,   44,   44,   44,  772,
-       50,   46,  772,  298,  772,  772,   44,   44,   44,  299,
-       50,   46,  772,   44,   44,   44,  772,   50,   46,  300,
-      772,   44,   44,   44,  305,  303,   46,  772,   50,  304,
-       44,   44,   44,  772,  306,   46,  772,  772,   50,   44,
-
-       44,   44,  772,  772,   46,   50,   44,   44,   44,  772,
-      772,   46,  772,   50,  772,   44,   44,   44,  307,  309,
-       46,  772,   50,  308,  772,   44,   44,   44,  772,  310,
-       46,   50,   44,   44,   44,  772,  772,  315,   50,  772,
-      772,  312,  311,   44,   44,   44,  772,   50,   46,  772,
-       44,   44,   44,  772,  313,   46,  772,   50,   44,   44,
-       44,  772,  772,   46,   50,   44,   44,   44,  772,  772,
-       46,  772,  772,  772,  772,   50,  314,  772,   44,   44,
-       44,  772,   50,   46,   44,   44,   44,  772,  772,   46,
-       50,  316,  772,   44,   44,   44,  772,   50,  322,  772,
-
-       44,   44,   44,  317,  318,   46,   44,   44,   44,  772,
-       50,   46,  772,   44,   44,   44,   50,  772,   46,  772,
-      319,  772,  772,  772,  772,   50,  320,  321,   44,   44,
-       44,  772,   50,   46,  772,   44,   44,   44,   50,  324,
-       46,  772,  772,  325,  323,   50,  772,   44,   44,   44,
-      772,  326,   46,  772,  327,  772,   44,   44,   44,  772,
-       50,   46,  772,   44,   44,   44,  772,   50,   46,   44,
-       44,   44,  772,  772,   46,  328,  772,  772,  772,   50,
-      772,  772,   44,   44,   44,  329,  772,   46,   50,   44,
-       44,   44,  772,  772,   46,   50,  772,   44,   44,   44,
-
-      772,   50,   46,  772,  330,   44,   44,   44,  333,  772,
-       46,  331,  772,  332,   50,   44,   44,   44,  772,  772,
-      338,   50,   44,   44,   44,  772,  772,  339,  335,   50,
-      772,  772,  334,   44,   44,   44,  336,   50,  340,  772,
-       44,   44,   44,  772,  337,  341,  772,   50,   44,   44,
-       44,  772,  772,   46,   50,   44,   44,   44,  772,  772,
-      345,   44,   44,   44,  772,   50,  346,  772,   44,   44,
-       44,  772,   50,   46,  772,  772,   44,   44,   44,  772,
-       50,   46,  772,   44,   44,   44,  342,   50,  349,   44,
-       44,   44,  772,   50,   46,  772,   44,   44,   44,  772,
-
-       50,   46,  772,  772,  772,  772,  347,  772,   50,  772,
-      772,   44,   44,   44,  772,   50,   46,  772,  772,  772,
-      772,   50,  772,  348,   45,   45,   45,  772,   50,  772,
-      772,   45,   45,   45,   45,   45,  772,   44,   44,   44,
-      772,  350,   46,   50,  351,  772,   45,   45,   45,   45,
-       45,   45,   44,   44,   44,  772,  772,   46,  772,  352,
-       44,   44,   44,  772,  772,   46,   44,   44,   44,   50,
-      772,   46,  772,   44,   44,   44,  772,  772,   46,  772,
-      772,  772,  353,  772,   50,   44,   44,   44,  772,  772,
-       46,  772,   50,  772,  772,  355,  772,  772,   50,  354,
-
-      772,   44,   44,   44,  356,   50,   46,   44,   44,   44,
-      772,  772,   46,  772,   44,   44,   44,   50,  772,   46,
-      772,  357,   44,   44,   44,  772,  772,   46,  772,   44,
-       44,   44,  362,   50,   46,  772,  358,  772,  772,   50,
-      772,  772,   44,   44,   44,  360,   50,   46,  772,  772,
-      359,  772,  772,  361,   50,   44,   44,   44,  772,  772,
-       46,   50,   44,   44,   44,  365,  772,  366,   44,   44,
-       44,  772,  772,   46,   50,  772,  772,  364,  772,  363,
-       44,   44,   44,  772,  772,   46,  772,   50,   44,   44,
-       44,  772,  772,   46,   50,  772,  772,   44,   44,   44,
-
-       50,  772,   46,  772,  772,  772,  367,  772,   44,   44,
-       44,  772,   50,   46,   44,   44,   44,  772,  371,   46,
-       50,  772,  772,  368,  772,   44,   44,   44,  369,   50,
-       46,   44,   44,   44,  772,  370,   46,   44,   44,   44,
-       50,  772,   46,  772,  772,  772,   50,   44,   44,   44,
-      772,  772,   46,  772,   44,   44,   44,   50,  772,   46,
-      772,  372,  772,   50,  772,   44,   44,   44,  772,   50,
-       46,   44,   44,   44,  772,  373,   46,  772,  772,   50,
-      772,  374,   44,   44,   44,  375,   50,   46,   44,   44,
-       44,  772,  772,   46,  376,  772,  772,   50,  772,  772,
-
-       44,   44,   44,   50,  378,  382,  377,  772,   44,   44,
-       44,  772,  772,   46,   50,  772,   44,   44,   44,  379,
-       50,   46,  772,   44,   44,   44,  772,  772,   46,  772,
-      380,  772,   50,  385,  772,  772,   44,   44,   44,  381,
-       50,   46,   44,   44,   44,  772,  772,   46,   50,   44,
-       44,   44,  772,  772,   46,   50,  772,  772,  383,   44,
-       44,   44,  772,  772,  389,   44,   44,   44,   50,  390,
-       46,  772,  384,  772,   50,  391,  772,   44,   44,   44,
-      387,   50,   46,  386,   44,   44,   44,  388,  772,   46,
-      772,   50,  772,   44,   44,   44,  772,   50,   46,  772,
-
-       44,   44,   44,  772,  772,   46,   44,   44,   44,   50,
-      772,  396,   44,   44,   44,  772,   50,   46,   44,   44,
-       44,  772,  772,   46,  772,   50,  772,  772,  398,  772,
-      772,  392,   50,  772,  393,  772,  394,  772,   50,  772,
-       44,   44,   44,  772,   50,   46,   44,   44,   44,  772,
-       50,   46,  395,   44,   44,   44,  402,  772,   46,  772,
-       44,   44,   44,  772,  397,   46,   44,   44,   44,  772,
-      772,   46,   50,  772,   44,   44,   44,  772,   50,   46,
-      772,  772,  772,  772,  772,   50,  772,  400,   44,   44,
-       44,  772,   50,   46,  401,  772,  772,  772,   50,   44,
-
-       44,   44,  772,  772,   46,  403,   50,   44,   44,   44,
-      772,  772,   46,  405,  772,  772,  404,   44,   44,   44,
-       50,  772,   46,   44,   44,   44,  772,  406,   46,  772,
-      772,   50,  409,   44,   44,   44,  772,  772,   46,   50,
-      772,   44,   44,   44,  772,  408,   46,  772,  772,   50,
-      772,  407,   44,   44,   44,   50,  772,   46,  772,   44,
-       44,   44,  772,  772,   46,   50,   44,   44,   44,  772,
-      772,   46,  772,   50,  772,  772,  410,   44,   44,   44,
-      412,  772,   46,  411,   50,  772,  772,   44,   44,   44,
-      413,   50,   46,  772,   44,   44,   44,  772,   50,   46,
-
-      772,   44,   44,   44,  414,  415,   46,  772,  772,   50,
-       44,   44,   44,  772,  772,   46,   44,   44,   44,   50,
-      772,   46,  772,  416,  772,  417,   50,   44,   44,   44,
-      772,  772,   46,   50,  772,   44,   44,   44,  772,  772,
-       46,  419,   50,  772,  418,  420,  772,  772,   50,   44,
-       44,   44,  772,  772,   46,  772,   44,   44,   44,   50,
-      772,   46,  772,  772,  772,  422,  421,   50,   44,   44,
-       44,  772,  772,   46,  772,  772,  772,   44,   44,   44,
-      772,   50,  428,  772,   44,   44,   44,  423,   50,   46,
-       44,   44,   44,  772,  427,   46,   44,   44,   44,  772,
-
-       50,   46,  772,   44,   44,   44,  424,  425,   46,   50,
-      772,  429,   44,   44,   44,  772,   50,   46,   44,   44,
-       44,  426,   50,   46,   44,   44,   44,  772,   50,  435,
-      772,  772,  772,  772,  436,   50,  772,  772,   44,   44,
-       44,  772,  430,   46,   50,  772,  431,  772,  432,  772,
-       50,  772,   44,   44,   44,  772,   50,   46,  772,  772,
-       44,   44,   44,  437,  433,   46,  772,  772,  434,  772,
-       50,   44,   44,   44,  772,  438,   46,   44,   44,   44,
-      772,  440,   46,  772,   50,  772,  772,  441,   44,   44,
-       44,  772,   50,   46,   44,   44,   44,  439,  772,   46,
-
-       44,   44,   44,   50,  772,   46,  772,  772,  772,   50,
-      445,  442,   44,   44,   44,  772,  772,   46,  772,  772,
-       50,  772,  772,   44,   44,   44,   50,  772,   46,  444,
-      772,  772,   50,  447,   44,   44,   44,  772,  772,  448,
-      443,   44,   44,   44,   50,  772,   46,  772,  772,  449,
-      772,   44,   44,   44,  772,   50,   46,   44,   44,   44,
-      772,  772,  452,  772,  446,  772,   50,   44,   44,   44,
-      772,  772,   46,   50,   44,   44,   44,  772,  772,   46,
-       44,   44,   44,   50,  454,   46,  450,  772,  772,   50,
-       44,   44,   44,  772,  772,   46,   44,   44,   44,   50,
-
-      772,   46,  451,  772,  453,  772,   50,  772,   44,   44,
-       44,  772,   50,   46,   44,   44,   44,  772,  457,   46,
-      772,  772,   50,  772,  772,  772,  455,  772,   50,  772,
-      772,   44,   44,   44,  772,  458,   46,   44,   44,   44,
-       50,  460,   46,  772,  456,  772,   50,   44,   44,   44,
-      772,  772,   46,   44,   44,   44,  772,  772,   46,  772,
-      772,  459,  772,   50,  772,   44,   44,   44,  772,   50,
-       46,   44,   44,   44,  772,  464,   46,  772,  772,   50,
-      772,  772,  461,  772,  772,   50,  772,   44,   44,   44,
-      462,  463,   46,   44,   44,   44,  772,   50,   46,   44,
-
-       44,   44,  772,   50,   46,   44,   44,   44,  772,  772,
-       46,   44,   44,   44,  465,  772,   46,  772,  772,   50,
-      772,   44,   44,   44,  772,   50,   46,  772,   44,   44,
-       44,   50,  467,   46,  468,  772,  772,   50,  466,  772,
-       44,   44,   44,   50,  469,   46,   44,   44,   44,  772,
-      772,   46,  772,   50,  470,  772,  772,  772,  471,  772,
-       50,   44,   44,   44,  772,  772,  475,  472,   44,   44,
-       44,  772,   50,  476,  772,  473,  772,  772,   50,   44,
-       44,   44,  772,  772,   46,  474,   44,   44,   44,  772,
-      772,   46,  772,   50,   44,   44,   44,  772,  772,   46,
-
-       50,   44,   44,   44,  772,  772,   46,   44,   44,   44,
-      772,   50,   46,  772,   44,   44,   44,  772,   50,   46,
-       44,   44,   44,  772,  478,  483,   50,  772,  772,  477,
-       44,   44,   44,   50,  772,   46,   44,   44,   44,   50,
-      480,   46,  479,  772,  772,  481,   50,  772,   44,   44,
-       44,  772,   50,   46,   44,   44,   44,  772,  772,   46,
-      772,  772,   50,  772,  772,  482,  772,  772,   50,  484,
-      772,   44,   44,   44,  772,  772,   46,   44,   44,   44,
-       50,  485,   46,   44,   44,   44,   50,  772,   46,   44,
-       44,   44,  772,  772,   46,   44,   44,   44,  772,  486,
-
-       46,  772,  487,   50,  772,   44,   44,   44,  772,   50,
-       46,   44,   44,   44,  772,   50,   46,   44,   44,   44,
-      772,   50,   46,  772,  772,  772,  772,   50,  488,  489,
-      772,   44,   44,   44,  772,  490,   46,   50,  492,   44,
-       44,   44,  491,   50,  498,   44,   44,   44,  772,   50,
-       46,  772,  772,  772,  494,  772,  772,  493,  772,   44,
-       44,   44,  772,   50,  500,   44,   44,   44,  772,  772,
-       46,   50,  772,  772,  495,  772,  772,   50,  496,   44,
-       44,   44,  772,  497,   46,   44,   44,   44,  499,  772,
-       46,   50,  772,   44,   44,   44,  772,   50,   46,   44,
-
-       44,   44,  772,  772,   46,  772,  772,   44,   44,   44,
-      501,   50,   46,  772,   44,   44,   44,   50,  772,   46,
-      503,   44,   44,   44,  772,   50,   46,  772,  772,  772,
-      502,   50,  504,  772,  772,  772,   44,   44,   44,   50,
-      772,   46,   44,   44,   44,  506,   50,   46,  505,   44,
-       44,   44,  772,   50,   46,   44,   44,   44,  772,  511,
-       46,  772,   44,   44,   44,  507,  772,   46,   50,  772,
-      508,  509,  772,  772,   50,   44,   44,   44,  772,  772,
-       46,   50,  772,   44,   44,   44,  772,   50,  515,  772,
-       44,   44,   44,  510,   50,   46,  772,  772,  513,  772,
-
-      512,   44,   44,   44,  772,  772,   46,   50,   44,   44,
-       44,  772,  772,   46,  514,   50,   44,   44,   44,  772,
-      772,   46,   50,  772,   44,   44,   44,  772,  772,   46,
-       44,   44,   44,   50,  772,   46,   44,   44,   44,  772,
-       50,   46,  516,  772,   44,   44,   44,  518,   50,   46,
-      772,  772,  517,  772,  772,  519,   50,  772,   44,   44,
-       44,  772,   50,   46,   44,   44,   44,  772,   50,   46,
-      772,  772,   44,   44,   44,  520,   50,   46,   44,   44,
-       44,  523,  521,  528,  772,  772,  522,   44,   44,   44,
-       50,  772,  529,  524,  772,  772,   50,  525,   44,   44,
-
-       44,  772,  772,   46,   50,  772,   44,   44,   44,  772,
-       50,   46,  772,  526,  772,   44,   44,   44,  772,   50,
-      532,  772,  527,   44,   44,   44,  772,  772,   46,  772,
-       50,  772,   44,   44,   44,  772,  530,  534,   50,   44,
-       44,   44,  772,  772,   46,  531,  772,   50,   44,   44,
-       44,  772,  772,   46,  772,   50,  772,   44,   44,   44,
-      772,  772,   46,  772,   50,   44,   44,   44,  772,  533,
-       46,   50,   44,   44,   44,  772,  772,   46,  772,  772,
-       50,  772,  535,  772,  772,   44,   44,   44,  772,   50,
-       46,  772,  772,   44,   44,   44,  772,   50,  541,  772,
-
-      772,  772,  772,  772,   50,  536,  537,   44,   44,   44,
-      772,  538,   46,  772,  772,  539,  772,   50,  772,   44,
-       44,   44,  772,  540,   46,   50,   44,   44,   44,  772,
-      772,   46,   44,   44,   44,  772,  772,   46,  772,   50,
-      772,  772,  542,   44,   44,   44,  772,  772,   46,  772,
-      772,   50,   44,   44,   44,  772,  772,   46,   50,  772,
-       44,   44,   44,  772,   50,   46,  544,  545,   44,   44,
-       44,  772,  772,   46,  772,   50,  543,   44,   44,   44,
-      772,  772,   46,  772,   50,  772,  772,  550,   44,   44,
-       44,  546,   50,  551,   44,   44,   44,  772,  772,   46,
-
-       50,   44,   44,   44,  547,  548,   46,  772,  772,   50,
-      772,   44,   44,   44,  772,  772,   46,  772,  549,  772,
-       50,  772,   44,   44,   44,  772,   50,   46,  772,   44,
-       44,   44,  772,   50,   46,   44,   44,   44,  772,  772,
-       46,  772,  552,   50,   44,   44,   44,  772,  772,   46,
-      554,  772,  772,  553,   50,   44,   44,   44,  772,  772,
-       46,   50,  772,  772,   44,   44,   44,   50,  556,   46,
-      772,  555,   44,   44,   44,  772,   50,   46,   44,   44,
-       44,  772,  772,  562,  772,  557,  772,   50,  563,  772,
-      559,  772,  772,  772,  558,  772,   50,  772,   44,   44,
-
-       44,  772,  772,   46,   50,  772,   44,   44,   44,  772,
-       50,   46,   44,   44,   44,  560,  772,   46,   44,   44,
-       44,  772,  561,   46,  772,  772,   44,   44,   44,  564,
-       50,   46,   44,   44,   44,  772,  772,   46,   50,  772,
-      772,  566,  772,  772,   50,  772,  772,  772,  772,  565,
-       50,   44,   44,   44,  772,  772,   46,  568,   50,  772,
-       44,   44,   44,  772,   50,   46,  567,  772,  772,   44,
-       44,   44,  570,  772,   46,   44,   44,   44,  569,  573,
-       46,  772,  772,   50,   44,   44,   44,  772,  772,   46,
-      772,  772,   50,   44,   44,   44,  772,  772,   46,  772,
-
-      772,   50,  772,  571,   44,   44,   44,   50,  772,   46,
-      772,  572,   44,   44,   44,  772,   50,   46,   44,   44,
-       44,  772,  574,   46,  772,   50,   44,   44,   44,  772,
-      575,   46,   44,   44,   44,  772,   50,  581,  772,  576,
-       44,   44,   44,  772,   50,   46,   44,   44,   44,  772,
-       50,   46,  772,  577,  772,  772,  772,  579,   50,  772,
-      772,  578,  772,  772,   50,   44,   44,   44,  772,  772,
-       46,  772,   50,  772,  580,   44,   44,   44,   50,  772,
-       46,  772,   44,   44,   44,  772,  582,   46,   44,   44,
-       44,  772,  772,  587,  772,  583,  772,   50,   44,   44,
-
-       44,  772,  772,  588,  584,  772,  772,   50,   44,   44,
-       44,  772,  772,   46,   50,  772,   44,   44,   44,  586,
-       50,   46,   44,   44,   44,  772,  585,   46,  772,  772,
-       50,   44,   44,   44,  772,  772,   46,   44,   44,   44,
-       50,  772,   46,  772,   44,   44,   44,  593,   50,   46,
-       44,   44,   44,  772,   50,   46,  589,   44,   44,   44,
-      772,  590,   46,   50,  772,  772,   44,   44,   44,   50,
-      592,   46,  591,   44,   44,   44,   50,  772,   46,   44,
-       44,   44,   50,  772,  599,  595,   44,   44,   44,   50,
-      772,  600,  596,  772,  594,   44,   44,   44,   50,  772,
-
-       46,  772,   44,   44,   44,   50,  772,  602,  772,  598,
-      772,   50,  603,  772,   44,   44,   44,  772,   50,  604,
-      597,  772,  772,   44,   44,   44,  772,   50,   46,  772,
-       44,   44,   44,  772,   50,   46,  772,  772,  601,   44,
-       44,   44,  772,  772,   46,  772,   50,   44,   44,   44,
-      772,  772,   46,  605,  772,   50,   44,   44,   44,  606,
-      772,  610,   50,  772,  772,  607,  772,   44,   44,   44,
-      772,   50,   46,   44,   44,   44,  772,  772,  612,   50,
-      772,  772,  609,  772,   44,   44,   44,  772,   50,   46,
-      608,   44,   44,   44,  772,  772,  614,  772,  772,   50,
-
-      772,   44,   44,   44,  772,   50,   46,   44,   44,   44,
-      611,  772,   46,   44,   44,   44,   50,  772,   46,   44,
-       44,   44,  772,   50,   46,   44,   44,   44,  772,  613,
-       46,  772,  772,   50,  772,   44,   44,   44,  772,   50,
-       46,  772,  772,  772,  615,   50,  616,  772,   44,   44,
-       44,   50,  617,   46,   44,   44,   44,   50,  772,   46,
-       44,   44,   44,  772,  618,   46,  772,   50,   44,   44,
-       44,  772,  772,   46,  772,  619,   44,   44,   44,  772,
-       50,   46,  620,   44,   44,   44,   50,  621,   46,   44,
-       44,   44,   50,  622,   46,  772,   44,   44,   44,  772,
-
-       50,   46,   44,   44,   44,  772,  772,  629,   50,   44,
-       44,   44,  623,  772,   46,   50,  772,  772,  772,  624,
-      625,   50,  627,  772,  772,  626,  772,  772,   50,  772,
-       44,   44,   44,  772,   50,   46,  772,  772,   44,   44,
-       44,   50,  772,   46,   44,   44,   44,  772,  628,   46,
-      772,  772,  630,   44,   44,   44,  772,  772,   46,  772,
-      772,  772,   50,   44,   44,   44,  772,  772,   46,  631,
-       50,  772,   44,   44,   44,  772,   50,   46,  772,   44,
-       44,   44,  772,  772,   46,   50,  772,  772,  634,  632,
-      772,   44,   44,   44,  633,   50,   46,  772,  635,  772,
-
-       44,   44,   44,  772,   50,   46,  772,   44,   44,   44,
-      636,   50,   46,   44,   44,   44,  637,  772,  641,   44,
-       44,   44,  772,   50,  642,   44,   44,   44,  772,  772,
-       46,  772,   50,  772,  772,  639,   44,   44,   44,   50,
-      772,   46,  638,  772,  772,   50,  772,  772,   44,   44,
-       44,   50,  640,   46,   44,   44,   44,   50,  772,   46,
-       44,   44,   44,  772,  772,   46,  772,  772,   50,   44,
-       44,   44,  772,  643,   46,  772,   44,   44,   44,  644,
-       50,  649,  772,   44,   44,   44,   50,  772,   46,   44,
-       44,   44,   50,  650,  652,  772,  772,   44,   44,   44,
-
-      645,   50,  653,  772,  646,   44,   44,   44,   50,  772,
-       46,  647,  648,  772,  772,   50,  772,   44,   44,   44,
-      772,   50,  655,   44,   44,   44,  772,  772,   46,   50,
-      772,   44,   44,   44,  651,  772,   46,   50,   44,   44,
-       44,  772,  772,   46,  772,   44,   44,   44,  654,   50,
-      660,  772,   44,   44,   44,   50,  656,   46,  772,   44,
-       44,   44,  657,   50,   46,  772,  658,  772,  772,  772,
-       50,   44,   44,   44,  772,  772,   46,   50,  772,  772,
-      772,   44,   44,   44,   50,  659,   46,   44,   44,   44,
-      661,   50,   46,   44,   44,   44,  772,  772,   46,  662,
-
-       44,   44,   44,   50,  772,  667,   44,   44,   44,  772,
-      663,   46,  772,   50,  772,   44,   44,   44,  772,   50,
-      669,   44,   44,   44,  664,   50,   46,  772,   44,   44,
-       44,  772,   50,  671,  772,   44,   44,   44,   50,  665,
-       46,   44,   44,   44,  666,  772,   46,   50,  772,  772,
-      772,  772,  772,   50,  668,  772,   44,   44,   44,  772,
-       50,  674,  772,   44,   44,   44,  772,   50,  675,   44,
-       44,   44,  670,   50,  676,   44,   44,   44,  772,  772,
-       46,  673,  672,  772,   44,   44,   44,  772,   50,   46,
-      772,   44,   44,   44,  772,   50,  679,   44,   44,   44,
-
-      772,   50,   46,   44,   44,   44,  772,   50,   46,  772,
-       44,   44,   44,  772,  677,   46,   50,   44,   44,   44,
-      772,  772,   46,   50,  772,  772,   44,   44,   44,   50,
-      678,  684,   44,   44,   44,   50,  772,  685,  772,   44,
-       44,   44,   50,  680,   46,   44,   44,   44,  772,   50,
-       46,   44,   44,   44,  681,  772,   46,  772,   50,  772,
-      772,  772,  682,  772,   50,   44,   44,   44,  772,  683,
-       46,   50,  772,   44,   44,   44,  772,   50,   46,   44,
-       44,   44,  686,   50,   46,  772,   44,   44,   44,  772,
-      688,   46,  772,  772,  772,  772,  687,   50,   44,   44,
-
-       44,  772,  772,   46,  772,   50,  772,  772,  689,  772,
-      772,   50,  690,  772,   44,   44,   44,  772,   50,   46,
-      772,  772,   44,   44,   44,  692,  691,   46,  772,  772,
-       50,   44,   44,   44,  772,  772,   46,   44,   44,   44,
-      772,  772,   46,   44,   44,   44,   50,  772,  698,  693,
-       44,   44,   44,  694,   50,  699,   44,   44,   44,  772,
-      695,   46,  772,   50,  772,   44,   44,   44,  772,   50,
-       46,  772,   44,   44,   44,   50,  697,   46,  772,  696,
-      772,  772,   50,  772,   44,   44,   44,  772,   50,   46,
-       44,   44,   44,  772,  702,   46,  772,   50,  772,  700,
-
-       44,   44,   44,  772,   50,  705,  772,   44,   44,   44,
-      772,  772,   46,   44,   44,   44,   50,  772,  707,  772,
-      772,  701,   50,  703,   44,   44,   44,  772,  772,  708,
-      772,  772,   50,  772,  772,   44,   44,   44,  704,   50,
-       46,   44,   44,   44,  772,   50,   46,  706,   44,   44,
-       44,  710,  772,   46,  772,  772,   50,   44,   44,   44,
-      772,  772,  712,   44,   44,   44,  772,   50,   46,   44,
-       44,   44,  772,   50,  714,  772,   44,   44,   44,  715,
-       50,   46,  772,   44,   44,   44,  711,  709,  717,   50,
-      772,   44,   44,   44,  772,   50,   46,   44,   44,   44,
-
-      772,   50,   46,  772,   44,   44,   44,  772,   50,   46,
-      772,  713,   44,   44,   44,   50,  772,   46,  772,   44,
-       44,   44,  772,   50,   46,  716,  772,  772,  772,   50,
-       44,   44,   44,  772,  772,   46,   50,  772,  718,  772,
-      719,   44,   44,   44,   50,  772,   46,  720,   44,   44,
-       44,   50,  772,   46,  772,  772,  772,  772,  722,  772,
-      721,  772,   50,  772,   44,   44,   44,  772,  772,   46,
-       44,   44,   44,   50,  726,   46,  772,  723,  772,  772,
-       50,  772,   44,   44,   44,  772,  724,   46,   44,   44,
-       44,  772,  772,   46,  772,  772,   50,  772,  725,   44,
-
-       44,   44,   50,  772,  730,  772,  772,   44,   44,   44,
-      772,  727,   46,  772,   50,  772,  772,  731,  772,  772,
-       50,   44,   44,   44,  772,  772,   46,  772,  728,  772,
-      772,   50,  772,   44,   44,   44,  772,  729,   46,   50,
-       44,   44,   44,  772,  772,   46,   44,   44,   44,  772,
-      772,  735,  772,   50,   44,   44,   44,  772,  772,   46,
-      732,  772,   44,   44,   44,   50,  772,   46,   44,   44,
-       44,  772,   50,   46,   44,   44,   44,  772,   50,   46,
-      772,  733,  772,  734,  772,  772,   50,   44,   44,   44,
-      772,  772,   46,  736,   50,  772,   44,   44,   44,  772,
-
-       50,   46,  772,   44,   44,   44,   50,  772,  742,  772,
-       44,   44,   44,  772,  737,   46,  772,  738,  772,   50,
-      772,  739,  772,  772,  740,   44,   44,   44,   50,  772,
-       46,   44,   44,   44,  741,   50,  745,  772,   44,   44,
-       44,  772,   50,   46,   44,   44,   44,  772,  772,   46,
-       44,   44,   44,  743,  772,   46,  772,   50,  772,  772,
-       44,   44,   44,   50,  744,   46,  772,   44,   44,   44,
-       50,  772,   46,   44,   44,   44,   50,  746,   46,   44,
-       44,   44,   50,  747,   46,   44,   44,   44,  772,  772,
-       46,  772,   50,  772,  772,   44,   44,   44,  748,   50,
-
-       46,   44,   44,   44,  772,   50,   46,   44,   44,   44,
-      749,   50,   46,  772,  772,  772,  772,   50,  750,  772,
-      751,  772,  772,  772,  772,  772,  752,   50,  753,   44,
-       44,   44,  772,   50,   46,   44,   44,   44,  772,   50,
-       46,  772,   44,   44,   44,  772,  754,   46,  772,   44,
-       44,   44,  772,  755,  760,   44,   44,   44,  756,  772,
-       46,   50,  772,   44,   44,   44,  772,   50,   46,  772,
-      772,   44,   44,   44,   50,  772,   46,  757,  758,  772,
-      772,   50,  772,  772,  772,  759,  772,   50,  772,   44,
-       44,   44,  772,  761,  764,   50,   44,   44,   44,  772,
-
-      772,   46,  772,   50,   44,   44,   44,  772,  772,   46,
-      762,  763,   44,   44,   44,  772,  772,  767,   44,   44,
-       44,   50,  772,   46,   44,   44,   44,  772,   50,   46,
-       44,   44,   44,  772,  772,   46,   50,  765,   44,   44,
-       44,  772,  772,  771,   50,  772,  772,  766,  772,  772,
-       50,  772,  772,  772,  772,  772,   50,  768,  772,  772,
-      772,  772,   50,  772,  772,  772,  772,  772,  772,  772,
-       50,  772,  772,  772,  769,  772,  772,  772,  772,  772,
-      772,  770,   36,   36,   36,   36,   36,   36,   36,   45,
-       45,   45,   45,   45,   45,   45,   67,  772,   67,   67,
-
-       67,   67,   67,   86,  772,   86,  772,   86,   86,   86,
-       88,   88,   88,   88,   88,   88,   88,   95,   95,   95,
-       95,   95,   95,   95,  138,  772,  138,  138,  138,  138,
-      138,   88,   88,  772,   88,  153,  153,  153,  153,  153,
-      217,  217,  278,  278,  344,  344,   88,   88,   11,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-
-      772,  772,  772,  772,  772,  772,  772,  772,  772
+       12,   12,   12,   33,   12,   12,   12,   12,   12,   34,
+       35,   37,   14,   37,   37,   14,   37,   38,   88,   40,
+       38,   12,   12,   40,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   41,   42,   41,   42,   73,   12,
+       12,  357,   12,   74,  287,   12,   76,   12,   76,   12,
+
+      222,   77,   77,   77,  416,   12,   12,   12,   12,   39,
+       12,   12,   68,   12,   69,   69,   69,  356,   68,   12,
+       71,   71,   71,   78,   70,   12,   12,   44,   44,   44,
+       70,   79,   46,   80,   72,   72,   72,   79,   78,   68,
+       70,   71,   71,   71,   70,  286,   70,   80,   78,   47,
+       48,   70,   49,  143,   42,   79,   42,   80,  156,   50,
+       70,   82,   51,   81,   52,   53,   54,   70,   89,   55,
+       56,   83,   57,   58,   59,   60,   61,  143,   62,   63,
+       64,   65,   66,   42,   89,   42,   44,   44,   44,  141,
+      221,   46,   44,   44,   44,   90,  142,   46,  156,   44,
+
+       44,   44,  141,  142,   46,   44,   44,   44,   96,  141,
+       46,   90,   44,   44,   44,   45,  142,   46,   50,   77,
+       77,   77,  144,  145,   50,   92,  148,   44,   44,   44,
+       93,   50,   46,  147,   91,   45,  217,   50,  216,   45,
+       77,   77,   77,   45,   50,  143,   44,   44,   44,  215,
+       45,   46,  217,   94,   45,   43,   45,   97,  216,   50,
+       44,   44,   44,   98,  216,   46,   44,   44,   44,  146,
+      217,   46,   99,  215,   87,  100,   85,  284,   50,  101,
+      215,  102,   84,  284,  219,  103,  220,   75,  104,   44,
+       44,   44,   50,  284,   46,   43,  806,  806,   50,  285,
+
+      105,   44,   44,   44,  218,  806,   46,  106,  806,  806,
+      806,   44,   44,   44,  108,  806,   46,  107,  806,  109,
+      806,   50,  110,   44,   44,   44,  806,  111,   46,   44,
+       44,   44,  806,   50,   46,  806,  112,  806,  113,  806,
+      114,  115,  806,   50,  116,  806,  118,  806,  806,  117,
+      119,  806,  806,  806,  806,   50,  806,  806,  121,  806,
+      806,   50,   44,   44,   44,  806,  806,   46,  806,  120,
+      806,  806,   44,   44,   44,  806,  806,   46,  122,  806,
+       72,   72,   72,  123,   44,   44,   44,  806,  806,   46,
+       70,  806,  806,  806,   50,  806,  806,  129,   44,   44,
+
+       44,  130,  806,   46,   50,  806,   70,   44,   44,   44,
+      806,  131,   46,   44,   44,   44,   50,  806,   46,  124,
+      132,  133,  125,  126,  806,  806,  134,  806,  806,  806,
+       50,  806,  127,  806,  806,  128,  806,  135,  806,   50,
+       68,  136,   69,   69,   69,   50,  806,  806,  139,  806,
+      806,   88,   70,  806,  806,   76,  137,   76,   88,  138,
+       77,   77,   77,   68,  806,   71,   71,   71,   70,   72,
+       72,   72,   44,   44,   44,   70,  806,   46,   88,   70,
+      806,  806,   88,   44,   44,   44,   88,  806,  151,  806,
+      806,   70,  806,   88,  806,   70,  806,   88,  806,   88,
+
+      149,   44,   44,   44,   50,  806,  152,  806,  806,  150,
+      806,   44,   44,   44,  806,   50,   46,   44,   44,   44,
+      806,  806,   46,  806,   44,   44,   44,  806,  806,   46,
+      153,  806,  806,   50,   44,   44,   44,  806,  806,   46,
+       44,   44,   44,   50,  806,   46,  806,  806,  806,   50,
+      806,  806,  154,  157,  157,  157,   50,  806,  806,  806,
+      157,  157,  157,  157,  157,  806,   50,  159,   44,   44,
+       44,  806,   50,   46,  806,  157,  157,  157,  157,  157,
+      157,   44,   44,   44,  806,  158,   46,   44,   44,   44,
+      806,  806,   46,  806,  806,  162,   44,   44,   44,  806,
+
+       50,   46,  806,   44,   44,   44,  160,  806,   46,  806,
+      806,  806,  806,   50,  806,  161,   44,   44,   44,   50,
+      806,   46,  806,  164,  165,   44,   44,   44,   50,  806,
+       46,  806,  166,  167,  163,   50,   44,   44,   44,  806,
+      806,   46,  806,  806,  806,  806,  168,  806,   50,   44,
+       44,   44,  806,  169,   46,  806,  806,   50,  806,   44,
+       44,   44,  171,  806,  177,   44,   44,   44,   50,  170,
+       46,   44,   44,   44,  172,  176,   46,   44,   44,   44,
+      806,   50,   46,  806,  173,  806,  806,  180,  174,  806,
+      806,   50,  806,  806,   44,   44,   44,   50,  178,   46,
+
+       44,   44,   44,   50,  806,   46,  806,  175,  806,   50,
+       44,   44,   44,  806,  806,   46,   44,   44,   44,  806,
+      806,   46,  806,  806,  179,  806,   50,  806,  806,  181,
+      806,  806,   50,   44,   44,   44,  806,  182,   46,   44,
+       44,   44,   50,  806,   46,  806,  183,  806,   50,   44,
+       44,   44,  806,  806,   46,  806,  806,  184,   44,   44,
+       44,  806,  806,   46,  806,   50,  806,   44,   44,   44,
+      185,   50,   46,   44,   44,   44,  806,  806,   46,  806,
+      806,   50,   44,   44,   44,  186,  806,   46,  806,  806,
+       50,  806,   44,   44,   44,  806,  806,   46,  806,   50,
+
+      806,  187,  193,  806,  188,   50,   44,   44,   44,  806,
+      806,   46,  806,  806,   50,  806,   44,   44,   44,  806,
+      189,   46,  806,  806,   50,  806,  190,   44,   44,   44,
+      806,  806,   46,  191,  192,   44,   44,   44,   50,  806,
+       46,   44,   44,   44,  806,  806,   46,  806,   50,  806,
+      806,   44,   44,   44,  806,  806,   46,  194,  806,   50,
+      806,  806,  806,  806,  195,  806,  197,   50,  196,   44,
+       44,   44,  806,   50,   46,   44,   44,   44,  806,  806,
+       46,  806,  806,   50,  198,   44,   44,   44,  207,  806,
+       46,  806,  205,   44,   44,   44,  206,  806,   46,  806,
+
+      806,   50,  806,  806,  208,  806,  806,   50,   44,   44,
+       44,  209,  806,   46,   44,   44,   44,   50,  806,   46,
+      199,  200,  201,  806,  806,   50,   44,   44,   44,  806,
+      202,   46,  203,  806,   44,   44,   44,  204,  806,   46,
+       50,  806,   44,   44,   44,  210,   50,   46,   44,   44,
+       44,  806,  806,  224,  211,   44,   44,   44,   50,  806,
+       46,  806,  806,  212,  806,  213,   50,  806,   44,   44,
+       44,  806,  806,   46,   50,  806,  806,  806,  806,  214,
+       50,   44,   44,   44,  806,  806,   46,   50,  806,  806,
+      806,  223,  806,  806,  806,  806,  225,  226,  226,  226,
+
+       50,  806,  806,  227,  226,  226,  226,  226,  226,   44,
+       44,   44,  806,   50,   46,  806,  806,  806,  806,  226,
+      226,  226,  226,  226,  226,   44,   44,   44,  230,  806,
+       46,  806,  806,  806,  231,   44,   44,   44,  806,  806,
+       46,   50,   44,   44,   44,  232,  806,   46,  228,   44,
+       44,   44,  806,  806,   46,  806,  806,   50,  806,  806,
+       44,   44,   44,  806,  229,   46,  806,   50,   44,   44,
+       44,  806,  806,   46,   50,  806,  806,  233,   44,   44,
+       44,   50,  806,   46,   44,   44,   44,  806,  806,   46,
+      806,  806,   50,   44,   44,   44,  806,  806,   46,  806,
+
+       50,  806,  806,  234,  806,  235,  806,  236,  806,  806,
+       50,  806,   44,   44,   44,  806,   50,   46,   44,   44,
+       44,  806,  238,   46,  806,   50,  806,  237,  239,   44,
+       44,   44,  806,  806,   46,   44,   44,   44,  806,  806,
+       46,   44,   44,   44,   50,  806,   46,  806,  806,  806,
+       50,  240,   44,   44,   44,  806,  806,   46,  806,  806,
+      806,   50,  806,  241,   44,   44,   44,   50,  806,   46,
+      806,  806,  242,   50,  806,   44,   44,   44,  806,  243,
+       46,   44,   44,   44,   50,  806,   46,   44,   44,   44,
+      806,  806,   46,  806,  244,  806,   50,  806,  806,  246,
+
+      806,  245,  806,   44,   44,   44,  806,   50,   46,   44,
+       44,   44,  806,   50,   46,  806,   44,   44,   44,   50,
+      248,   46,  247,   44,   44,   44,  251,  806,   46,   44,
+       44,   44,  806,  806,   46,   50,  806,  806,  249,  250,
+      806,   50,   44,   44,   44,  806,  806,   46,   50,   44,
+       44,   44,  254,  806,   46,   50,  806,   44,   44,   44,
+      252,   50,   46,  806,  253,   44,   44,   44,  806,  255,
+       46,   44,   44,   44,   50,  806,   46,   44,   44,   44,
+      806,   50,   46,   44,   44,   44,  806,  806,   46,   50,
+       44,   44,   44,  806,  806,   46,  257,   50,  806,  256,
+
+       44,   44,   44,   50,  806,   46,  806,  806,  258,   50,
+      806,  806,  260,  806,  806,   50,   44,   44,   44,  806,
+      259,   46,   50,   44,   44,   44,  806,  806,   46,  806,
+      806,  806,   50,  806,  806,  261,  806,  806,  806,  262,
+       44,   44,   44,  806,  806,   46,  806,  806,   50,   44,
+       44,   44,  263,  806,   46,   50,  806,   44,   44,   44,
+      806,  264,   46,  806,   44,   44,   44,  806,  806,   46,
+      806,  806,   50,   44,   44,   44,  265,  806,   46,  806,
+      266,   50,   44,   44,   44,  806,  806,   46,  806,   50,
+      806,  806,  267,  806,  806,  268,   50,   44,   44,   44,
+
+      806,  806,   46,  806,  806,   50,  806,  269,   44,   44,
+       44,  806,  806,   46,   50,  806,  806,  271,   44,   44,
+       44,  270,  806,   46,  806,   44,   44,   44,  806,   50,
+       46,  806,  806,   44,   44,   44,  272,  806,   46,  806,
+       50,  806,  806,   44,   44,   44,  806,  273,   46,  806,
+       50,   44,   44,   44,  806,  806,   46,   50,   44,   44,
+       44,  806,  806,   46,  275,   50,  806,   44,   44,   44,
+      806,  806,   46,  274,  806,   50,  806,  276,  806,  806,
+      277,  806,  806,   50,   44,   44,   44,  806,  806,   46,
+       50,  806,   44,   44,   44,  806,  806,   46,  278,   50,
+
+      806,  806,   44,   44,   44,  806,  280,   46,   44,   44,
+       44,  279,  806,   46,  806,  806,   50,   44,   44,   44,
+      806,  806,   46,  281,   50,   44,   44,   44,  806,  806,
+       46,  288,  289,  806,   50,  806,   44,   44,   44,  290,
+       50,  295,  806,  282,  806,  283,  806,  806,  806,   50,
+      806,  291,  292,  292,  292,  806,  806,   50,  806,  292,
+      292,  292,  292,  292,   44,   44,   44,  806,   50,   46,
+      806,  806,  806,  806,  292,  292,  292,  292,  292,  292,
+       44,   44,   44,  293,  806,   46,   44,   44,   44,  806,
+      806,   46,   44,   44,   44,  806,   50,   46,   44,   44,
+
+       44,  806,  806,  299,   44,   44,   44,  806,  806,   46,
+      806,  294,   50,  806,  806,   44,   44,   44,   50,  296,
+       46,   44,   44,   44,   50,  806,   46,  806,  806,  806,
+       50,  806,  298,  806,  806,  806,   50,  297,   44,   44,
+       44,  806,  806,   46,  806,  300,  806,   50,  303,   44,
+       44,   44,  304,   50,  305,   44,   44,   44,  301,  806,
+       46,  806,  302,   44,   44,   44,  806,  806,   46,  806,
+       50,   44,   44,   44,  806,  806,   46,   44,   44,   44,
+      806,   50,   46,   44,   44,   44,  806,   50,   46,   44,
+       44,   44,  806,  806,  311,   50,  806,  806,  806,  312,
+
+       44,   44,   44,   50,  306,   46,   44,   44,   44,   50,
+      806,   46,  806,  806,  307,   50,  806,   44,   44,   44,
+      806,   50,   46,  806,  806,  308,  806,  806,  309,   44,
+       44,   44,   50,  806,   46,  310,  313,  806,   50,  315,
+      806,  314,  806,  806,  316,   44,   44,   44,  806,   50,
+       46,  806,   44,   44,   44,  806,  806,   46,   44,   44,
+       44,   50,  806,   46,   44,   44,   44,  806,  806,   46,
+      317,   44,   44,   44,  806,  806,   46,   50,  806,  806,
+      318,  806,  806,  319,   50,  806,  806,   44,   44,   44,
+       50,  320,   46,   44,   44,   44,   50,  806,   46,  322,
+
+      806,  321,  806,   50,  806,  806,   44,   44,   44,  806,
+      323,   46,   44,   44,   44,  806,  806,  327,  806,   50,
+      806,   44,   44,   44,  806,   50,   46,   44,   44,   44,
+      806,  806,   46,  806,  806,  806,  325,  806,   50,  324,
+       44,   44,   44,  806,   50,   46,  806,   44,   44,   44,
+      806,  326,   46,   50,  806,  806,   44,   44,   44,   50,
+      806,   46,   44,   44,   44,  806,  806,   46,  806,  328,
+      806,  806,   50,  806,  806,   44,   44,   44,  806,   50,
+      334,  329,   44,   44,   44,  806,  330,   46,   50,  806,
+       44,   44,   44,  806,   50,   46,   44,   44,   44,  806,
+
+      806,   46,  806,  331,  332,  333,  806,   50,   44,   44,
+       44,  806,  806,   46,   50,   44,   44,   44,  806,  806,
+       46,  806,   50,  336,  806,  806,  806,  335,   50,  337,
+      806,  806,  806,  338,  339,  806,   44,   44,   44,  806,
+       50,   46,  806,   44,   44,   44,  806,   50,   46,   44,
+       44,   44,  806,  806,   46,  806,  340,  806,   44,   44,
+       44,  806,  341,   46,   44,   44,   44,  806,   50,   46,
+      806,  806,   44,   44,   44,   50,  806,   46,   44,   44,
+       44,   50,  806,   46,   44,   44,   44,  342,  806,  351,
+       50,  806,   44,   44,   44,  806,   50,   46,  806,  806,
+
+      806,  343,  806,  346,   50,  344,   44,   44,   44,  345,
+       50,   46,  806,  806,  806,  806,   50,  348,  806,  806,
+       44,   44,   44,  347,   50,  352,  806,   44,   44,   44,
+      806,  349,  353,  806,   44,   44,   44,  806,   50,  354,
+      806,   44,   44,   44,  806,  350,   46,  806,   44,   44,
+       44,  806,   50,  358,  806,   44,   44,   44,  806,   50,
+      359,  806,   44,   44,   44,  806,   50,   46,  806,   44,
+       44,   44,  806,   50,   46,  806,   44,   44,   44,  355,
+       50,  362,  806,   44,   44,   44,  806,   50,   46,  806,
+       44,   44,   44,  806,   50,   46,  806,   44,   44,   44,
+
+      360,   50,   46,  806,  806,   44,   44,   44,   50,  806,
+       46,  806,  806,  806,  806,   50,  361,   45,   45,   45,
+      806,  806,   50,  806,   45,   45,   45,   45,   45,   50,
+       44,   44,   44,  806,  364,   46,  363,   50,  365,   45,
+       45,   45,   45,   45,   45,   44,   44,   44,  806,  806,
+       46,  806,  806,  366,   44,   44,   44,  806,  806,   46,
+      806,  806,   50,   44,   44,   44,  806,  806,   46,  806,
+      806,   44,   44,   44,  806,  367,   46,   50,   44,   44,
+       44,  806,  806,   46,  806,  806,   50,  806,  806,  369,
+      806,  806,  368,  806,  806,   50,  806,   44,   44,   44,
+
+      806,  370,   46,   50,   44,   44,   44,  806,  806,   46,
+       50,   44,   44,   44,  806,  806,   46,  806,  806,  371,
+      806,   44,   44,   44,  806,  806,   46,  806,  806,   50,
+      372,  376,   44,   44,   44,  806,   50,   46,  806,   44,
+       44,   44,  374,   50,   46,  806,  373,   44,   44,   44,
+      375,  806,   46,   50,   44,   44,   44,  379,  806,  380,
+       44,   44,   44,  806,   50,   46,  806,   44,   44,   44,
+      806,   50,   46,  806,  378,   44,   44,   44,  806,   50,
+       46,  806,  806,  377,  806,  806,   50,  806,   44,   44,
+       44,  806,   50,   46,  806,   44,   44,   44,  381,   50,
+
+       46,   44,   44,   44,  806,  385,   46,   50,  806,  806,
+      382,   44,   44,   44,  806,  383,   46,   44,   44,   44,
+       50,  806,   46,   44,   44,   44,  384,   50,   46,   44,
+       44,   44,  806,   50,   46,   44,   44,   44,  806,  806,
+      391,  806,  806,   50,  806,   44,   44,   44,  386,   50,
+       46,   44,   44,   44,  806,   50,   46,  806,   44,   44,
+       44,   50,  387,   46,   44,   44,   44,   50,  388,   46,
+      806,  389,  806,  806,  390,  806,  806,   50,  806,   44,
+       44,   44,  806,   50,   46,  806,   44,   44,   44,  806,
+       50,   46,  392,   44,   44,   44,   50,  394,  398,  806,
+
+       44,   44,   44,  806,  393,   46,  806,  806,   44,   44,
+       44,   50,  395,   46,   44,   44,   44,  806,   50,   46,
+      806,   44,   44,   44,  806,   50,   46,  396,   44,   44,
+       44,  402,   50,   46,   44,   44,   44,  806,  397,   46,
+       50,  806,   44,   44,   44,  806,   50,   46,  806,  806,
+      806,  399,  806,   50,  806,  806,   44,   44,   44,  400,
+       50,   46,  806,   44,   44,   44,   50,  806,  406,  806,
+      806,  401,  404,  407,   50,  403,   44,   44,   44,  806,
+      405,   46,   44,   44,   44,  806,  408,   46,   50,   44,
+       44,   44,  806,  806,   46,   50,   44,   44,   44,  806,
+
+      806,   46,   44,   44,   44,  806,  806,  413,   50,  806,
+      806,  409,  806,  806,   50,   44,   44,   44,  806,  806,
+       46,   50,  806,  806,  806,   44,   44,   44,   50,  806,
+       46,  806,  411,  410,   50,  415,  806,   44,   44,   44,
+      806,  806,   46,   44,   44,   44,  806,   50,   46,  412,
+       44,   44,   44,  419,  806,   46,  806,   50,   44,   44,
+       44,  806,  806,   46,  806,   44,   44,   44,  414,   50,
+       46,   44,   44,   44,  806,   50,   46,  806,  806,  806,
+      806,  806,   50,  806,  417,  806,  806,   44,   44,   44,
+       50,  418,   46,   44,   44,   44,  806,   50,   46,   44,
+
+       44,   44,  806,   50,   46,  806,  806,   44,   44,   44,
+      421,  420,   46,  806,  806,   44,   44,   44,  806,   50,
+       46,  806,  422,  806,  806,   50,  423,  806,  806,  806,
+      427,   50,  424,   44,   44,   44,  806,  806,   46,   50,
+      806,   44,   44,   44,  806,  426,   46,   50,  806,   44,
+       44,   44,  425,  806,   46,  806,  806,   44,   44,   44,
+      806,  806,   46,  806,  806,   50,   44,   44,   44,  806,
+      806,   46,  806,   50,   44,   44,   44,  806,  806,   46,
+      806,   50,  806,  806,  806,  806,  806,  428,  430,   50,
+      806,  806,  429,  806,  806,  431,  806,  806,   50,   44,
+
+       44,   44,  806,  806,   46,  806,   50,   44,   44,   44,
+      806,  432,   46,  433,   44,   44,   44,  806,  806,   46,
+      806,   44,   44,   44,  806,  806,   46,   44,   44,   44,
+      806,   50,   46,   44,   44,   44,  806,  806,   46,   50,
+      806,  806,   44,   44,   44,  434,   50,   46,  806,   44,
+       44,   44,  435,   50,   46,   44,   44,   44,  436,   50,
+       46,  437,  438,  806,  806,   50,   44,   44,   44,  806,
+      806,   46,  806,  806,   50,  806,  806,   44,   44,   44,
+      440,   50,   46,  806,  439,  806,  806,   50,   44,   44,
+       44,  806,  806,   46,   44,   44,   44,  806,   50,   46,
+
+      806,  806,  441,  806,  446,   44,   44,   44,  806,   50,
+      447,  806,  806,  442,   44,   44,   44,  806,  443,   46,
+       50,  806,  806,   44,   44,   44,   50,  445,   46,  806,
+      806,  444,  806,   44,   44,   44,  806,   50,   46,  448,
+       44,   44,   44,  806,  806,   46,   50,   44,   44,   44,
+      806,  806,   46,  806,  806,   50,   44,   44,   44,  806,
+      806,   46,  806,  806,  806,   50,  806,  449,   44,   44,
+       44,  806,   50,   46,  450,  806,  806,  806,  451,   50,
+       44,   44,   44,  806,  806,  455,  453,  806,   50,  806,
+      456,  806,  806,  452,   44,   44,   44,  806,  806,   46,
+
+       50,   44,   44,   44,  806,  458,   46,  454,   44,   44,
+       44,  460,   50,   46,  806,   44,   44,   44,  461,  457,
+       46,  806,   44,   44,   44,  806,   50,   46,  806,   44,
+       44,   44,  806,   50,   46,  806,   44,   44,   44,  459,
+       50,   46,  806,  806,  806,  806,  465,   50,   44,   44,
+       44,  806,  806,   46,   50,   44,   44,   44,  806,  806,
+       46,   50,  806,  806,  464,  467,  806,  462,   50,  806,
+      806,   44,   44,   44,  806,  463,  468,   44,   44,   44,
+       50,  806,   46,   44,   44,   44,  469,   50,   46,   44,
+       44,   44,  806,  806,  472,   44,   44,   44,  806,  806,
+
+       46,  466,  806,   50,  806,  806,   44,   44,   44,   50,
+      806,   46,   44,   44,   44,   50,  474,   46,   44,   44,
+       44,   50,  470,   46,   44,   44,   44,   50,  475,   46,
+      806,  806,  473,  806,  806,  471,  806,  806,   50,  806,
+      806,   44,   44,   44,   50,  806,   46,  806,  806,  806,
+       50,  478,   44,   44,   44,  806,   50,   46,  476,  806,
+       44,   44,   44,  806,  806,   46,   44,   44,   44,  806,
+      806,   46,  806,   50,  806,  806,  481,  806,  806,  477,
+       44,   44,   44,  806,   50,   46,  806,  806,   44,   44,
+       44,  479,   50,   46,   44,   44,   44,  806,   50,   46,
+
+      806,   44,   44,   44,  806,  806,   46,  480,   44,   44,
+       44,  485,   50,   46,   44,   44,   44,  806,  806,   46,
+       50,  806,   44,   44,   44,  482,   50,   46,  806,  806,
+      806,  483,  484,   50,  806,  806,   44,   44,   44,  806,
+       50,   46,   44,   44,   44,  806,   50,   46,   44,   44,
+       44,  486,  806,   46,   50,   44,   44,   44,  806,  806,
+       46,  488,   44,   44,   44,  806,  487,   46,   50,  806,
+      806,  489,  806,  806,   50,  806,  806,   44,   44,   44,
+       50,  490,   46,   44,   44,   44,  806,   50,   46,  806,
+      806,  491,  492,  806,   50,   44,   44,   44,  806,  806,
+
+      496,  493,   44,   44,   44,  806,  806,  497,  806,   50,
+      806,  806,  494,  806,  806,   50,   44,   44,   44,  806,
+      806,   46,  495,   44,   44,   44,  806,   50,  499,  806,
+       44,   44,   44,  806,   50,   46,  806,   44,   44,   44,
+      806,  806,   46,  806,   44,   44,   44,  806,   50,   46,
+      806,  806,   44,   44,   44,   50,  806,   46,  806,   44,
+       44,   44,   50,  806,   46,  806,  806,  498,  500,   50,
+       44,   44,   44,  806,  806,  505,   50,   44,   44,   44,
+      806,  806,   46,  502,   50,  501,  806,   44,   44,   44,
+      503,   50,   46,   44,   44,   44,  806,  806,   46,   44,
+
+       44,   44,   50,  806,   46,   44,   44,   44,  806,   50,
+       46,  504,   44,   44,   44,  806,  806,   46,  806,   50,
+      806,  806,   44,   44,   44,   50,  507,   46,  806,  506,
+      806,   50,  806,  806,   44,   44,   44,   50,  508,   46,
+       44,   44,   44,  806,   50,   46,  806,   44,   44,   44,
+      806,  509,   46,  510,   50,  806,   44,   44,   44,  806,
+      806,   46,  806,   44,   44,   44,   50,  806,   46,  806,
+      511,  806,   50,  806,  806,  512,   44,   44,   44,   50,
+      806,   46,  806,  806,   44,   44,   44,  513,   50,   46,
+      515,   44,   44,   44,  514,   50,  521,   44,   44,   44,
+
+      806,  806,   46,  806,  806,  806,  517,  806,   50,  516,
+       44,   44,   44,  806,  806,  523,   50,   44,   44,   44,
+      806,  806,   46,   50,  806,   44,   44,   44,  806,   50,
+       46,  519,  806,  806,  518,  806,  806,  520,  806,  806,
+      522,  806,   50,   44,   44,   44,  806,  806,   46,   50,
+       44,   44,   44,  806,  806,   46,  806,   50,   44,   44,
+       44,  806,  524,   46,   44,   44,   44,  806,  806,   46,
+      806,   44,   44,   44,  806,   50,   46,  806,  525,   44,
+       44,   44,   50,  806,   46,  527,   44,   44,   44,  806,
+       50,   46,  806,  806,  806,  526,   50,  528,  806,  806,
+
+      806,  806,  806,   50,  806,   44,   44,   44,  806,  530,
+       46,   50,  806,  529,   44,   44,   44,  806,   50,   46,
+       44,   44,   44,  806,  806,   46,  806,   44,   44,   44,
+      535,  531,   46,  806,  806,  532,  806,   50,  806,  806,
+      533,  806,   44,   44,   44,  806,   50,   46,   44,   44,
+       44,  806,   50,   46,  806,  806,   44,   44,   44,   50,
+      806,  539,   44,   44,   44,  806,  534,   46,   44,   44,
+       44,  806,  536,   46,   50,  806,  806,  806,  537,  806,
+       50,  806,  806,  806,   44,   44,   44,  538,   50,   46,
+       44,   44,   44,  806,   50,   46,   44,   44,   44,  806,
+
+       50,   46,   44,   44,   44,  806,  806,   46,   44,   44,
+       44,  806,  806,   46,  806,  540,   50,  806,  806,  806,
+      541,  806,   50,  542,  806,   44,   44,   44,   50,  543,
+       46,   44,   44,   44,   50,  806,   46,   44,   44,   44,
+       50,  806,   46,  806,   44,   44,   44,  806,  544,   46,
+      806,   44,   44,   44,  806,  545,  552,   50,  806,  546,
+      806,  806,  547,   50,  806,  806,  548,  806,  806,   50,
+      549,  806,   44,   44,   44,  806,   50,  553,  806,   44,
+       44,   44,  806,   50,   46,  806,  550,   44,   44,   44,
+      806,  806,   46,  806,  806,  551,   44,   44,   44,  806,
+
+      806,   46,  806,  806,   50,   44,   44,   44,  806,  806,
+      557,   50,   44,   44,   44,  806,  806,   46,  806,   50,
+      806,   44,   44,   44,  806,  555,  559,  806,   50,  554,
+      806,   44,   44,   44,  806,  556,   46,   50,   44,   44,
+       44,  806,  806,   46,   50,   44,   44,   44,  806,  806,
+       46,  806,  806,   50,   44,   44,   44,  806,  558,   46,
+       44,   44,   44,   50,  806,   46,   44,   44,   44,  806,
+       50,   46,  806,  806,  560,  806,  806,   50,   44,   44,
+       44,  806,  806,  566,  806,  806,   50,  806,   44,   44,
+       44,  806,   50,   46,  562,  806,  561,  806,   50,  806,
+
+      563,  806,  806,  564,  565,  806,   44,   44,   44,  806,
+       50,   46,   44,   44,   44,  806,  806,   46,  806,  806,
+       50,  806,  806,  567,   44,   44,   44,  806,  806,   46,
+       44,   44,   44,  806,  806,   46,  806,  806,   50,  806,
+       44,   44,   44,  806,   50,   46,   44,   44,   44,  806,
+      806,   46,  569,   44,   44,   44,   50,  806,   46,  570,
+      806,  806,   50,  806,  568,   44,   44,   44,  806,  806,
+       46,  806,   50,  571,   44,   44,   44,  806,   50,   46,
+      806,   44,   44,   44,  576,   50,  577,  806,  572,   44,
+       44,   44,  806,  806,   46,  806,  806,   50,  574,  573,
+
+       44,   44,   44,  806,  806,   46,   50,   44,   44,   44,
+      806,  806,   46,   50,  806,  806,  575,   44,   44,   44,
+      806,   50,   46,   44,   44,   44,  806,  806,   46,   44,
+       44,   44,   50,  806,   46,  806,  806,  578,  806,   50,
+       44,   44,   44,  806,  806,   46,  580,  806,  806,   50,
+      806,  806,  806,  579,  806,   50,  806,  806,   44,   44,
+       44,   50,  582,   46,  806,  806,  581,  806,   44,   44,
+       44,  806,   50,   46,   44,   44,   44,  806,  806,   46,
+      583,  806,   44,   44,   44,  806,  806,  588,  806,  806,
+       50,  584,  589,  585,   44,   44,   44,  806,  806,   46,
+
+       50,  806,  806,   44,   44,   44,   50,  806,   46,  806,
+       44,   44,   44,  806,   50,   46,   44,   44,   44,  806,
+      586,   46,   44,   44,   44,  587,   50,   46,   44,   44,
+       44,  806,  806,   46,  590,   50,  806,  806,  592,   44,
+       44,   44,   50,  806,   46,  806,  591,  806,   50,  806,
+      806,   44,   44,   44,   50,  594,   46,   44,   44,   44,
+       50,  806,   46,  806,  806,  593,  806,  806,  596,  806,
+      806,   50,   44,   44,   44,  595,  806,   46,  806,   44,
+       44,   44,  600,   50,   46,   44,   44,   44,  806,   50,
+       46,  806,  597,   44,   44,   44,  806,  806,   46,  806,
+
+      806,  806,  599,  598,   50,   44,   44,   44,  806,  806,
+       46,   50,  806,   44,   44,   44,  806,   50,   46,   44,
+       44,   44,  806,  806,   46,   50,  601,   44,   44,   44,
+      806,  602,   46,   44,   44,   44,  806,   50,  608,  603,
+      806,   44,   44,   44,  806,   50,   46,   44,   44,   44,
+      806,   50,   46,  806,  604,  806,  806,  806,  606,   50,
+      806,  806,  605,  806,  806,   50,   44,   44,   44,  806,
+      806,   46,  806,   50,  806,  607,   44,   44,   44,   50,
+      806,   46,  806,   44,   44,   44,  806,  609,   46,   44,
+       44,   44,  806,  806,   46,  806,  610,  806,   50,   44,
+
+       44,   44,  806,  806,  615,  611,  806,  806,   50,   44,
+       44,   44,  806,  806,  616,   50,  806,   44,   44,   44,
+      806,   50,   46,  806,  806,  806,  614,  806,  612,  613,
+      806,   50,   44,   44,   44,  806,  806,   46,   44,   44,
+       44,   50,  806,   46,  806,  806,   44,   44,   44,   50,
+      806,   46,   44,   44,   44,  806,  806,   46,   44,   44,
+       44,  806,  621,   46,   50,  617,   44,   44,   44,  806,
+       50,   46,  806,  806,   44,   44,   44,  618,   50,   46,
+      806,   44,   44,   44,   50,  620,   46,  806,  806,  619,
+       50,   44,   44,   44,  806,  806,   46,  806,   50,  806,
+
+      806,  623,   44,   44,   44,  806,   50,  627,  806,  622,
+       44,   44,   44,   50,  806,  628,  624,   44,   44,   44,
+      806,  806,   46,   50,  806,  806,  806,  626,  806,  625,
+       44,   44,   44,  806,   50,  630,   44,   44,   44,  806,
+      631,  632,   50,  806,  806,   44,   44,   44,  806,   50,
+       46,   44,   44,   44,  806,  806,   46,  806,  806,  806,
+      629,  806,   50,  806,   44,   44,   44,  806,   50,   46,
+      806,   44,   44,   44,  806,  633,   46,   50,  806,  806,
+      806,  634,  806,   50,  806,  806,  635,   44,   44,   44,
+      806,  806,  638,   44,   44,   44,   50,  806,   46,   44,
+
+       44,   44,  806,   50,  640,  806,  637,   44,   44,   44,
+      806,  806,  641,   44,   44,   44,  636,  806,   46,   50,
+      806,   44,   44,   44,  806,   50,  643,   44,   44,   44,
+      806,   50,   46,   44,   44,   44,  639,  806,   46,   50,
+      806,   44,   44,   44,  806,   50,   46,   44,   44,   44,
+      806,  806,   46,   50,  806,   44,   44,   44,  642,   50,
+       46,   44,   44,   44,  806,   50,   46,  806,  806,  806,
+      644,  806,  645,   50,  806,  806,  806,  806,  806,   50,
+      646,   44,   44,   44,  806,  806,   46,   50,  806,   44,
+       44,   44,  647,   50,   46,   44,   44,   44,  806,  806,
+
+       46,  806,   44,   44,   44,  806,  648,   46,  649,  806,
+       44,   44,   44,   50,  806,   46,  806,  806,  806,  806,
+      650,   50,  806,  806,   44,   44,   44,   50,  651,   46,
+       44,   44,   44,  806,   50,   46,  806,  806,   44,   44,
+       44,  806,   50,   46,  806,  806,  806,  806,  652,  654,
+       44,   44,   44,  806,  653,   46,   50,  806,   44,   44,
+       44,  806,   50,  659,  806,  806,  656,  806,  655,  806,
+       50,  806,  806,   44,   44,   44,  806,  657,   46,   44,
+       44,   44,   50,  806,   46,  806,  806,   44,   44,   44,
+       50,  806,   46,   44,   44,   44,  806,  806,   46,   44,
+
+       44,   44,  806,  658,   46,   50,  806,  806,   44,   44,
+       44,   50,  806,   46,  806,  806,  660,  806,  661,   50,
+      806,   44,   44,   44,  806,   50,   46,  806,   44,   44,
+       44,   50,  806,   46,  664,  806,   44,   44,   44,  662,
+       50,   46,  806,  665,  663,   44,   44,   44,  806,  806,
+       46,  806,  806,   50,  806,  806,  806,  806,  806,  666,
+       50,   44,   44,   44,  806,  667,   46,  806,   50,   44,
+       44,   44,  806,  806,  671,  806,  806,   50,  806,  806,
+      669,   44,   44,   44,  806,  806,  672,  806,  668,   44,
+       44,   44,  806,   50,   46,   44,   44,   44,  806,  806,
+
+       46,   50,   44,   44,   44,  806,  670,   46,  806,   44,
+       44,   44,  806,   50,   46,   44,   44,   44,  806,  806,
+       46,   50,  806,  806,   44,   44,   44,   50,  806,  679,
+       44,   44,   44,  806,   50,   46,  806,  673,  674,  806,
+      806,   50,  806,   44,   44,   44,  806,   50,   46,   44,
+       44,   44,  806,  680,  682,  675,   50,  806,  806,  806,
+      676,  806,   50,  806,   44,   44,   44,  677,  806,  683,
+      806,  806,  806,  678,  806,   50,  806,   44,   44,   44,
+      806,   50,   46,   44,   44,   44,  806,  806,  685,   44,
+       44,   44,  806,  806,   46,  681,   50,   44,   44,   44,
+
+      806,  806,   46,   44,   44,   44,  806,  806,   46,   50,
+      806,   44,   44,   44,  806,   50,   46,  806,  806,  806,
+      684,   50,  686,   44,   44,   44,  806,  806,  691,   50,
+      806,  806,  806,  806,  806,   50,  688,  687,  689,   44,
+       44,   44,  806,   50,   46,  806,   44,   44,   44,  806,
+      806,   46,   44,   44,   44,   50,  806,   46,  690,  806,
+       44,   44,   44,  806,  806,   46,  806,   44,   44,   44,
+      806,   50,   46,  806,   44,   44,   44,  692,   50,   46,
+       44,   44,   44,  806,   50,  698,  693,  806,  806,  806,
+      806,  694,   50,   44,   44,   44,  806,  806,   46,   50,
+
+       44,   44,   44,  695,  806,  700,   50,  806,   44,   44,
+       44,  806,   50,   46,   44,   44,   44,  806,  806,  702,
+      696,  806,   44,   44,   44,   50,  697,   46,  806,  806,
+      806,  806,   50,   44,   44,   44,  806,  806,   46,  806,
+       50,  699,   44,   44,   44,  806,   50,  705,   44,   44,
+       44,  806,  806,  706,   50,  806,   44,   44,   44,  806,
+      701,  707,   44,   44,   44,   50,  806,   46,  806,  703,
+       44,   44,   44,  704,   50,   46,   44,   44,   44,  806,
+       50,  710,   44,   44,   44,  806,  806,   46,   50,  806,
+       44,   44,   44,  806,   50,   46,  806,  806,   44,   44,
+
+       44,  708,   50,   46,   44,   44,   44,  806,   50,   46,
+      806,  806,  806,  806,   50,  806,  709,  806,   44,   44,
+       44,  806,   50,   46,   44,   44,   44,  806,  711,  716,
+       50,  806,   44,   44,   44,  806,   50,  717,   44,   44,
+       44,  806,  712,   46,   44,   44,   44,  806,  806,   46,
+       50,  806,  713,   44,   44,   44,   50,  714,   46,  806,
+      806,   44,   44,   44,   50,  806,   46,   44,   44,   44,
+       50,  715,   46,   44,   44,   44,   50,  806,   46,  806,
+      806,  718,   44,   44,   44,   50,  806,   46,  806,  806,
+      806,  806,  720,   50,  806,  806,  719,  806,  806,   50,
+
+      806,  806,  806,  806,  721,   50,  722,   44,   44,   44,
+      806,  806,   46,  806,   50,  806,  806,   44,   44,   44,
+      723,  724,   46,   44,   44,   44,  806,  806,   46,  806,
+       44,   44,   44,  806,  806,   46,   44,   44,   44,   50,
+      806,   46,   44,   44,   44,  806,  806,  730,  806,   50,
+      806,  806,   44,   44,   44,   50,  726,   46,  806,  725,
+      806,  727,   50,  806,   44,   44,   44,  806,   50,  732,
+      806,   44,   44,   44,   50,  729,   46,  806,  728,  806,
+       44,   44,   44,  806,   50,   46,  806,   44,   44,   44,
+      806,  806,   46,   44,   44,   44,   50,  735,   46,   44,
+
+       44,   44,  806,   50,   46,  731,   44,   44,   44,  806,
+      806,  738,   50,  806,  733,  806,   44,   44,   44,   50,
+      806,   46,   44,   44,   44,   50,  806,  740,   44,   44,
+       44,   50,  806,  741,   44,   44,   44,  734,   50,   46,
+      806,   44,   44,   44,  806,  736,   46,  737,   50,  806,
+      806,  743,  806,  806,   50,  806,  739,   44,   44,   44,
+       50,  806,   46,  806,  806,  806,   50,   44,   44,   44,
+      806,  806,  745,   50,   44,   44,   44,  806,  806,  746,
+       44,   44,   44,  806,  806,   46,  806,  742,  806,   50,
+      806,   44,   44,   44,  806,  744,  748,  806,  806,   50,
+
+      806,  749,   44,   44,   44,  806,   50,   46,   44,   44,
+       44,  806,   50,  751,   44,   44,   44,  806,  806,   46,
+       44,   44,   44,   50,  806,   46,  806,  806,  747,  806,
+       44,   44,   44,  806,   50,   46,   44,   44,   44,  806,
+       50,   46,   44,   44,   44,  806,   50,   46,   44,   44,
+       44,  750,   50,   46,   44,   44,   44,  806,  806,   46,
+      806,  752,   50,  753,   44,   44,   44,  806,   50,   46,
+       44,   44,   44,  754,   50,   46,  806,   44,   44,   44,
+       50,  756,   46,  806,  755,  806,   50,  760,   44,   44,
+       44,  806,  806,   46,  806,  757,   50,  806,  806,  758,
+
+      806,  806,   50,   44,   44,   44,  806,  806,   46,   50,
+      806,  761,   44,   44,   44,  759,  806,  764,  806,  806,
+       50,   44,   44,   44,  806,  806,   46,   44,   44,   44,
+      806,  765,   46,  806,  762,   50,   44,   44,   44,  806,
+      806,   46,  806,  806,   50,   44,   44,   44,  806,  806,
+       46,  806,  763,   50,  806,   44,   44,   44,  806,   50,
+      769,  806,   44,   44,   44,  806,  766,   46,   50,  806,
+       44,   44,   44,  806,  806,   46,  806,   50,   44,   44,
+       44,  806,  806,   46,  767,  806,  806,   50,  768,  806,
+       44,   44,   44,  806,   50,   46,  806,  806,   44,   44,
+
+       44,  770,   50,   46,   44,   44,   44,  806,  806,   46,
+       50,   44,   44,   44,  806,  806,  776,  806,  806,   44,
+       44,   44,   50,  771,   46,  806,  806,  772,  806,  806,
+       50,  806,  806,  806,  806,  774,   50,  773,  806,   44,
+       44,   44,  775,   50,   46,   44,   44,   44,  806,  806,
+      779,   50,   44,   44,   44,  806,  806,   46,   44,   44,
+       44,  806,  777,   46,   44,   44,   44,  806,  806,   46,
+      806,   50,  806,  806,   44,   44,   44,   50,  778,   46,
+      806,   44,   44,   44,   50,  806,   46,   44,   44,   44,
+       50,  780,   46,  806,  806,  806,   50,  781,   44,   44,
+
+       44,  806,  806,   46,  806,  806,   50,  806,  806,   44,
+       44,   44,  782,   50,   46,   44,   44,   44,  806,   50,
+       46,   44,   44,   44,  806,  783,   46,   44,   44,   44,
+       50,  806,   46,  784,  785,  806,  806,   44,   44,   44,
+      806,   50,   46,  806,  806,  786,  806,   50,  806,   44,
+       44,   44,  787,   50,   46,   44,   44,   44,  806,   50,
+       46,   44,   44,   44,  806,  806,  794,  788,  806,   50,
+       44,   44,   44,  806,  789,   46,  806,  806,  806,  790,
+      806,   50,  806,  806,  806,  791,  806,   50,  806,   44,
+       44,   44,  792,   50,   46,   44,   44,   44,  793,  806,
+
+       46,  806,   50,  806,  806,   44,   44,   44,  795,  806,
+      798,   44,   44,   44,  806,  806,   46,   44,   44,   44,
+      806,   50,   46,   44,   44,   44,  806,   50,  801,   44,
+       44,   44,  806,  806,   46,  797,  796,   50,  806,   44,
+       44,   44,  806,   50,   46,   44,   44,   44,  806,   50,
+       46,  806,  799,  806,  806,   50,  806,   44,   44,   44,
+      800,   50,  805,  806,  806,  806,  806,  806,  802,  806,
+      806,   50,  806,  806,  806,  806,  806,   50,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,   50,
+      803,  806,  806,  806,  806,  806,  806,  804,   36,   36,
+
+       36,   36,   36,   45,   45,   45,   45,   45,   67,  806,
+       67,   67,   67,   86,  806,   86,  806,   86,   88,   88,
+       88,   88,   88,   95,   95,   95,   95,   95,  140,  806,
+      140,  140,  140,  155,  155,  155,   11,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806
+
     } ;
 
-static yyconst flex_int16_t yy_chk[5610] =
+static yyconst flex_int16_t yy_chk[5899] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -1416,617 +1461,649 @@ static yyconst flex_int16_t yy_chk[5610] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        3,    3,    3,    4,    4,    4,    3,   27,    7,    4,
-        5,    5,    8,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    9,   13,   10,   13,   21,    5,    5,
-       27,    5,   21,  343,    5,   25,    5,   25,    5,   26,
-
-       25,   25,   25,  277,    5,    5,    7,    9,    5,   10,
-        8,  216,    5,   28,   26,   32,   17,    5,   17,   17,
-       17,  153,   31,    5,    5,   15,   15,   15,   17,   33,
-       15,   19,   80,   19,   19,   19,   28,   31,   32,   20,
-       20,   20,   44,   19,   17,  145,   78,   15,   15,   20,
-       15,   37,   33,   37,   42,   80,   42,   15,   95,   19,
-       15,   79,   15,   15,   15,   20,   78,   15,   15,   44,
-       15,   15,   15,   15,   15,   15,   15,   15,   15,   15,
-       22,   79,   22,   22,   22,   45,   45,   45,   88,   83,
-       45,  141,   22,   47,   47,   47,   81,   90,   47,   82,
-
-       48,   48,   48,   86,   85,   48,   43,  141,   22,   49,
-       49,   49,   83,   50,   49,   88,   81,   45,   41,   82,
-       50,   39,   51,   51,   51,   47,   48,   51,   76,   76,
-       76,   38,   48,  144,   49,   47,  139,   52,   52,   52,
-       50,   49,   52,   24,   50,   53,   53,   53,   50,  144,
-       53,   55,   55,   55,   51,   50,   55,   49,   50,  139,
-       50,   50,   54,   54,   54,   14,  140,   54,   11,   52,
-      143,    0,   51,   56,   56,   56,    0,   53,   56,    0,
-       53,  142,   52,   55,   53,   52,  140,   53,   52,    0,
-      143,   57,   57,   57,   54,   70,   57,   70,   53,   55,
-
-       70,   70,   70,   55,  142,   56,   55,    0,    0,   54,
-        0,   56,   58,   58,   58,    0,  210,   58,   54,    0,
-       56,    0,   56,   57,   59,   59,   59,    0,    0,   59,
-       57,   57,  210,    0,   57,   60,   60,   60,    0,   57,
-       60,   62,   62,   62,   58,    0,   62,   58,   77,   77,
-       77,    0,  213,   63,   63,   63,   59,    0,   63,   59,
-        0,   64,   64,   64,    0,    0,   64,   60,  213,   68,
-       68,   68,    0,   62,    0,    0,   62,    0,    0,   68,
-       62,   65,   65,   65,   60,   63,   65,    0,   60,   61,
-       61,   61,   63,   64,   61,   68,    0,   72,   72,   72,
-
-       64,   63,   63,    0,   64,    0,   63,   72,    0,   66,
-       66,   66,    0,   65,   66,    0,    0,    0,   64,    0,
-        0,   61,    0,   72,   61,    0,    0,   61,   61,    0,
-        0,   69,   65,   69,   69,   69,    0,   61,    0,   61,
-        0,   66,    0,   69,   66,   71,    0,   71,   71,   71,
-       91,   91,   91,    0,    0,   91,    0,   71,    0,   69,
-       92,   92,   92,    0,    0,   92,   93,   93,   93,    0,
-        0,   93,    0,   71,   94,   94,   94,    0,    0,   94,
-        0,    0,   91,    0,   96,   96,   96,   91,    0,   96,
-        0,    0,   92,    0,    0,   93,    0,    0,   93,   98,
-
-       98,   98,    0,    0,   98,    0,   94,    0,    0,    0,
-        0,    0,    0,    0,    0,   94,   96,   97,   97,   97,
-        0,    0,    0,    0,   97,   97,   97,   97,   97,    0,
-        0,   98,   99,   99,   99,    0,    0,   99,    0,   97,
-       97,   97,   97,   97,   97,  100,  100,  100,    0,   98,
-      100,    0,  101,  101,  101,    0,    0,  101,  102,  102,
-      102,    0,    0,  102,   99,    0,  103,  103,  103,    0,
-        0,  103,    0,    0,    0,   99,    0,  100,    0,    0,
-      104,  104,  104,  100,  101,  104,  105,  105,  105,    0,
-      102,  105,  100,    0,  106,  106,  106,    0,  103,  106,
-
-        0,    0,  103,  103,    0,    0,  101,    0,    0,    0,
-      102,  103,  104,    0,    0,    0,    0,  104,  105,  107,
-      107,  107,    0,    0,  107,    0,  106,    0,    0,  105,
-        0,  106,  108,  108,  108,    0,    0,  108,  109,  109,
-      109,    0,    0,  109,    0,    0,  106,  110,  110,  110,
-        0,  107,  110,  111,  111,  111,  107,  110,  111,    0,
-        0,  112,  112,  112,  108,    0,  112,    0,  107,    0,
-      109,  113,  113,  113,    0,    0,  113,    0,    0,  110,
-      108,  113,    0,  108,    0,  111,  114,  114,  114,    0,
-        0,  114,  111,  112,    0,  109,  115,  115,  115,    0,
-
-        0,  115,    0,  113,  116,  116,  116,    0,    0,  116,
-      117,  117,  117,  112,    0,  117,    0,    0,  114,    0,
-        0,  114,  118,  118,  118,    0,    0,  118,  115,  119,
-      119,  119,    0,  115,  119,    0,  116,    0,    0,    0,
-      116,    0,  117,    0,  120,  120,  120,    0,    0,  120,
-        0,  117,    0,    0,  118,  121,  121,  121,    0,  118,
-      121,  119,  122,  122,  122,    0,    0,  122,  123,  123,
-      123,    0,    0,  123,    0,  119,  120,    0,  123,  124,
-      124,  124,    0,    0,  124,    0,    0,  121,  125,  125,
-      125,    0,    0,  125,  122,    0,  120,    0,    0,    0,
-
-      123,  126,  126,  126,    0,    0,  126,  121,    0,    0,
-        0,  124,  122,  122,  127,  127,  127,    0,    0,  127,
-      125,  129,  129,  129,    0,    0,  129,    0,    0,  124,
-      130,  130,  130,  126,    0,  130,  125,    0,    0,    0,
-      126,    0,  131,  131,  131,    0,  127,  131,    0,  132,
-      132,  132,    0,  129,  132,  133,  133,  133,    0,    0,
-      133,    0,  130,  127,  128,  128,  128,  130,    0,  128,
-        0,  129,    0,    0,  131,  129,    0,  131,  134,  134,
-      134,  132,    0,  134,    0,  132,    0,  133,  135,  135,
-      135,    0,    0,  135,    0,    0,  128,    0,    0,  128,
-
-      128,  128,  136,  136,  136,    0,  133,  136,    0,  128,
-      134,  128,  137,  137,  137,  128,    0,  137,    0,    0,
-      135,  148,  148,  148,  134,    0,  148,  151,  151,  151,
-        0,    0,  151,    0,  136,    0,    0,  135,    0,    0,
-        0,  136,    0,    0,  137,  152,  152,  152,    0,    0,
-      152,    0,    0,  148,    0,    0,    0,  137,    0,  151,
-        0,  157,  157,  157,    0,    0,  157,  156,  156,  156,
-      148,    0,  156,    0,  159,  159,  159,  152,    0,  159,
-        0,    0,    0,    0,    0,    0,  152,  155,  155,  155,
-        0,    0,    0,  157,  155,  155,  155,  155,  155,  156,
-
-      157,    0,  156,  158,  158,  158,  159,    0,  158,  155,
-      155,  155,  155,  155,  155,  160,  160,  160,    0,    0,
-      160,    0,  161,  161,  161,  160,  159,  161,  162,  162,
-      162,    0,    0,  162,    0,  158,    0,    0,  163,  163,
-      163,    0,  158,  163,    0,    0,    0,  160,  164,  164,
-      164,    0,    0,  164,  161,    0,    0,  161,    0,    0,
-      162,  165,  165,  165,    0,    0,  165,  166,  166,  166,
-      163,    0,  166,    0,  167,  167,  167,    0,    0,  167,
-      164,  162,    0,  163,  168,  168,  168,  164,    0,  168,
-      169,  169,  169,  165,    0,  169,  170,  170,  170,  166,
-
-        0,  170,  171,  171,  171,  166,  167,  171,    0,  167,
-      165,    0,  172,  172,  172,    0,  168,  172,    0,  173,
-      173,  173,  169,  168,  173,  174,  174,  174,  170,    0,
-      174,  176,  176,  176,  171,  169,  176,    0,    0,  170,
-      177,  177,  177,    0,  172,  177,  171,    0,  178,  178,
-      178,  173,    0,  178,  179,  179,  179,  174,    0,  179,
-      174,    0,    0,  176,  172,  180,  180,  180,  173,    0,
-      180,    0,  177,    0,    0,  180,    0,    0,  176,  177,
-      178,    0,    0,  178,    0,    0,  179,  181,  181,  181,
-        0,    0,  181,  182,  182,  182,    0,  180,  182,  183,
-
-      183,  183,    0,    0,  183,  179,  184,  184,  184,  183,
-        0,  184,  185,  185,  185,    0,    0,  185,    0,  181,
-        0,  186,  186,  186,    0,  182,  186,  187,  187,  187,
-        0,  183,  187,    0,  182,    0,    0,  181,  184,    0,
-        0,  188,  188,  188,  185,  184,  188,  189,  189,  189,
-        0,    0,  189,  186,    0,  185,  190,  190,  190,  187,
-        0,  190,  187,  191,  191,  191,    0,    0,  191,    0,
-      186,    0,    0,  188,    0,    0,    0,    0,    0,  189,
-      192,  192,  192,    0,    0,  192,    0,    0,  190,  193,
-      193,  193,  188,    0,  193,  191,  189,  194,  194,  194,
-
-        0,    0,  194,    0,  195,  195,  195,  190,  191,  195,
-        0,    0,  192,  196,  196,  196,    0,    0,  196,    0,
-      192,  193,  197,  197,  197,    0,    0,  197,    0,  194,
-        0,    0,  193,    0,    0,  194,  195,  198,  198,  198,
-        0,    0,  198,    0,    0,  196,    0,  195,  199,  199,
-      199,    0,    0,  199,  197,    0,    0,  197,  200,  200,
-      200,  196,    0,  200,    0,  201,  201,  201,    0,  198,
-      201,    0,    0,  202,  202,  202,  198,    0,  202,    0,
-      199,  203,  203,  203,    0,    0,  203,  199,    0,    0,
-      200,  204,  204,  204,    0,    0,  204,  201,  205,  205,
-
-      205,    0,    0,  205,  201,  202,    0,    0,    0,  206,
-      206,  206,  200,  203,  206,    0,    0,  202,  203,  207,
-      207,  207,    0,  204,  207,    0,    0,  208,  208,  208,
-      205,    0,  208,    0,    0,  209,  209,  209,  204,    0,
-      209,  206,  218,  218,  218,    0,    0,  218,  206,    0,
-      205,  207,    0,    0,    0,    0,  218,  218,  207,  208,
-      220,  220,  220,    0,  218,  220,    0,  209,  222,  222,
-      222,    0,    0,  222,  218,    0,    0,  208,  209,    0,
-        0,    0,    0,    0,    0,  223,  223,  223,    0,    0,
-      223,    0,  220,    0,    0,    0,    0,    0,    0,    0,
-
-      222,    0,    0,  220,  221,  221,  221,    0,    0,    0,
-        0,  221,  221,  221,  221,  221,    0,  223,  224,  224,
-      224,    0,    0,  224,    0,  222,  221,  221,  221,  221,
-      221,  221,  223,  225,  225,  225,    0,    0,  225,  226,
-      226,  226,    0,    0,  226,    0,  227,  227,  227,    0,
-      224,  227,  228,  228,  228,    0,    0,  228,  229,  229,
-      229,    0,    0,  229,    0,  225,    0,  230,  230,  230,
-        0,  226,  230,    0,    0,  231,  231,  231,  227,  226,
-      231,    0,    0,  225,  228,  231,  232,  232,  232,  231,
-      229,  232,    0,  228,    0,  233,  233,  233,    0,  230,
-
-      233,  229,    0,    0,  234,  234,  234,  231,  230,  234,
-      235,  235,  235,    0,    0,  235,    0,    0,  232,  236,
-      236,  236,    0,    0,  236,    0,    0,  233,  237,  237,
-      237,    0,    0,  237,    0,    0,  234,    0,  238,  238,
-      238,    0,  235,  238,  233,  239,  239,  239,  238,    0,
-      239,  236,    0,    0,  234,    0,  240,  240,  240,    0,
-      237,  240,    0,  235,    0,    0,  241,  241,  241,  236,
-      238,  241,    0,  242,  242,  242,    0,  239,  242,  237,
-        0,  243,  243,  243,  239,  238,  243,    0,  240,  238,
-      244,  244,  244,    0,  240,  244,    0,    0,  241,  245,
-
-      245,  245,    0,    0,  245,  242,  246,  246,  246,    0,
-        0,  246,    0,  243,    0,  247,  247,  247,  241,  243,
-      247,    0,  244,  242,    0,  248,  248,  248,    0,  244,
-      248,  245,  249,  249,  249,    0,    0,  249,  246,    0,
-        0,  246,  245,  250,  250,  250,    0,  247,  250,    0,
-      251,  251,  251,    0,  247,  251,    0,  248,  252,  252,
-      252,    0,    0,  252,  249,  253,  253,  253,    0,    0,
-      253,    0,    0,    0,    0,  250,  248,    0,  254,  254,
-      254,    0,  251,  254,  255,  255,  255,    0,    0,  255,
-      252,  250,    0,  256,  256,  256,    0,  253,  256,    0,
-
-      257,  257,  257,  251,  252,  257,  259,  259,  259,    0,
-      254,  259,    0,  258,  258,  258,  255,    0,  258,    0,
-      253,    0,    0,    0,    0,  256,  254,  255,  260,  260,
-      260,    0,  257,  260,    0,  261,  261,  261,  259,  257,
-      261,    0,    0,  257,  256,  258,    0,  262,  262,  262,
-        0,  258,  262,    0,  259,    0,  263,  263,  263,    0,
-      260,  263,    0,  264,  264,  264,    0,  261,  264,  265,
-      265,  265,    0,    0,  265,  260,    0,    0,    0,  262,
-        0,    0,  266,  266,  266,  261,    0,  266,  263,  267,
-      267,  267,    0,    0,  267,  264,    0,  268,  268,  268,
-
-        0,  265,  268,    0,  262,  269,  269,  269,  265,    0,
-      269,  263,    0,  264,  266,  270,  270,  270,    0,    0,
-      270,  267,  271,  271,  271,    0,    0,  271,  267,  268,
-        0,    0,  266,  272,  272,  272,  268,  269,  272,    0,
-      273,  273,  273,    0,  269,  273,    0,  270,  274,  274,
-      274,    0,    0,  274,  271,  279,  279,  279,    0,    0,
-      279,  280,  280,  280,    0,  272,  280,    0,  281,  281,
-      281,    0,  273,  281,    0,    0,  282,  282,  282,    0,
-      274,  282,    0,  284,  284,  284,  274,  279,  284,  285,
-      285,  285,    0,  280,  285,    0,  287,  287,  287,    0,
-
-      281,  287,    0,    0,    0,    0,  281,    0,  282,    0,
-        0,  288,  288,  288,    0,  284,  288,    0,    0,    0,
-        0,  285,    0,  282,  283,  283,  283,    0,  287,    0,
-        0,  283,  283,  283,  283,  283,    0,  290,  290,  290,
-        0,  285,  290,  288,  287,    0,  283,  283,  283,  283,
-      283,  283,  291,  291,  291,    0,    0,  291,    0,  288,
-      292,  292,  292,    0,    0,  292,  293,  293,  293,  290,
-        0,  293,    0,  294,  294,  294,    0,    0,  294,    0,
-        0,    0,  290,    0,  291,  296,  296,  296,    0,    0,
-      296,    0,  292,    0,    0,  292,    0,    0,  293,  291,
-
-        0,  297,  297,  297,  293,  294,  297,  298,  298,  298,
-        0,    0,  298,    0,  299,  299,  299,  296,    0,  299,
-        0,  294,  300,  300,  300,    0,    0,  300,    0,  302,
-      302,  302,  300,  297,  302,    0,  296,    0,    0,  298,
-        0,    0,  303,  303,  303,  298,  299,  303,    0,    0,
-      297,    0,    0,  299,  300,  304,  304,  304,    0,    0,
-      304,  302,  305,  305,  305,  304,    0,  305,  306,  306,
-      306,    0,    0,  306,  303,    0,    0,  303,    0,  302,
-      307,  307,  307,    0,    0,  307,    0,  304,  308,  308,
-      308,    0,    0,  308,  305,    0,    0,  309,  309,  309,
-
-      306,    0,  309,    0,    0,    0,  306,    0,  310,  310,
-      310,    0,  307,  310,  311,  311,  311,    0,  310,  311,
-      308,    0,    0,  307,    0,  312,  312,  312,  308,  309,
-      312,  313,  313,  313,    0,  309,  313,  314,  314,  314,
-      310,    0,  314,    0,    0,    0,  311,  316,  316,  316,
-        0,    0,  316,    0,  317,  317,  317,  312,    0,  317,
-        0,  311,    0,  313,    0,  318,  318,  318,    0,  314,
-      318,  319,  319,  319,    0,  312,  319,    0,    0,  316,
-        0,  313,  320,  320,  320,  314,  317,  320,  321,  321,
-      321,    0,    0,  321,  316,    0,    0,  318,    0,    0,
-
-      323,  323,  323,  319,  318,  323,  317,    0,  324,  324,
-      324,    0,    0,  324,  320,    0,  325,  325,  325,  319,
-      321,  325,    0,  326,  326,  326,    0,    0,  326,    0,
-      320,    0,  323,  326,    0,    0,  327,  327,  327,  321,
-      324,  327,  328,  328,  328,    0,    0,  328,  325,  329,
-      329,  329,    0,    0,  329,  326,    0,    0,  324,  330,
-      330,  330,    0,    0,  330,  331,  331,  331,  327,  330,
-      331,    0,  325,    0,  328,  331,    0,  332,  332,  332,
-      328,  329,  332,  327,  333,  333,  333,  329,    0,  333,
-        0,  330,    0,  334,  334,  334,    0,  331,  334,    0,
-
-      335,  335,  335,    0,    0,  335,  336,  336,  336,  332,
-        0,  336,  337,  337,  337,    0,  333,  337,  342,  342,
-      342,    0,    0,  342,    0,  334,    0,    0,  342,    0,
-        0,  332,  335,    0,  333,    0,  334,    0,  336,    0,
-      347,  347,  347,    0,  337,  347,  350,  350,  350,    0,
-      342,  350,  335,  348,  348,  348,  350,    0,  348,    0,
-      351,  351,  351,    0,  337,  351,  352,  352,  352,    0,
-        0,  352,  347,    0,  353,  353,  353,    0,  350,  353,
-        0,    0,    0,    0,    0,  348,    0,  347,  354,  354,
-      354,    0,  351,  354,  348,    0,    0,    0,  352,  355,
-
-      355,  355,    0,    0,  355,  351,  353,  356,  356,  356,
-        0,    0,  356,  353,    0,    0,  352,  357,  357,  357,
-      354,    0,  357,  358,  358,  358,    0,  354,  358,    0,
-        0,  355,  357,  359,  359,  359,    0,    0,  359,  356,
-        0,  360,  360,  360,    0,  356,  360,    0,    0,  357,
-        0,  355,  361,  361,  361,  358,    0,  361,    0,  362,
-      362,  362,    0,    0,  362,  359,  363,  363,  363,    0,
-        0,  363,    0,  360,    0,    0,  358,  364,  364,  364,
-      360,    0,  364,  359,  361,    0,    0,  365,  365,  365,
-      361,  362,  365,    0,  367,  367,  367,    0,  363,  367,
-
-        0,  368,  368,  368,  362,  363,  368,    0,    0,  364,
-      369,  369,  369,    0,    0,  369,  370,  370,  370,  365,
-        0,  370,    0,  364,    0,  365,  367,  371,  371,  371,
-        0,    0,  371,  368,    0,  372,  372,  372,    0,    0,
-      372,  368,  369,    0,  367,  369,    0,    0,  370,  373,
-      373,  373,    0,    0,  373,    0,  374,  374,  374,  371,
-        0,  374,    0,    0,    0,  371,  370,  372,  375,  375,
-      375,    0,    0,  375,    0,    0,    0,  377,  377,  377,
-        0,  373,  377,    0,  376,  376,  376,  372,  374,  376,
-      378,  378,  378,    0,  376,  378,  379,  379,  379,    0,
-
-      375,  379,    0,  380,  380,  380,  373,  374,  380,  377,
-        0,  377,  381,  381,  381,    0,  376,  381,  383,  383,
-      383,  375,  378,  383,  384,  384,  384,    0,  379,  384,
-        0,    0,    0,    0,  384,  380,    0,    0,  385,  385,
-      385,    0,  378,  385,  381,    0,  379,    0,  380,    0,
-      383,    0,  386,  386,  386,    0,  384,  386,    0,    0,
-      390,  390,  390,  384,  381,  390,    0,    0,  383,    0,
-      385,  387,  387,  387,    0,  385,  387,  388,  388,  388,
-        0,  387,  388,    0,  386,    0,    0,  388,  391,  391,
-      391,    0,  390,  391,  392,  392,  392,  386,    0,  392,
-
-      393,  393,  393,  387,    0,  393,    0,    0,    0,  388,
-      393,  390,  394,  394,  394,    0,    0,  394,    0,    0,
-      391,    0,    0,  395,  395,  395,  392,    0,  395,  392,
-        0,    0,  393,  395,  397,  397,  397,    0,    0,  397,
-      391,  398,  398,  398,  394,    0,  398,    0,    0,  397,
-        0,  400,  400,  400,    0,  395,  400,  401,  401,  401,
-        0,    0,  401,    0,  394,    0,  397,  402,  402,  402,
-        0,    0,  402,  398,  403,  403,  403,    0,    0,  403,
-      404,  404,  404,  400,  403,  404,  398,    0,    0,  401,
-      405,  405,  405,    0,    0,  405,  407,  407,  407,  402,
-
-        0,  407,  400,    0,  402,    0,  403,    0,  406,  406,
-      406,    0,  404,  406,  408,  408,  408,    0,  406,  408,
-        0,    0,  405,    0,    0,    0,  404,    0,  407,    0,
-        0,  409,  409,  409,    0,  407,  409,  410,  410,  410,
-      406,  409,  410,    0,  405,    0,  408,  411,  411,  411,
-        0,    0,  411,  412,  412,  412,    0,    0,  412,    0,
-        0,  408,    0,  409,    0,  413,  413,  413,    0,  410,
-      413,  414,  414,  414,    0,  413,  414,    0,    0,  411,
-        0,    0,  410,    0,    0,  412,    0,  415,  415,  415,
-      411,  412,  415,  416,  416,  416,    0,  413,  416,  417,
-
-      417,  417,    0,  414,  417,  418,  418,  418,    0,    0,
-      418,  419,  419,  419,  414,    0,  419,    0,    0,  415,
-        0,  420,  420,  420,    0,  416,  420,    0,  421,  421,
-      421,  417,  416,  421,  417,    0,    0,  418,  415,    0,
-      422,  422,  422,  419,  418,  422,  423,  423,  423,    0,
-        0,  423,    0,  420,  419,    0,    0,    0,  420,    0,
-      421,  424,  424,  424,    0,    0,  424,  421,  425,  425,
-      425,    0,  422,  425,    0,  422,    0,    0,  423,  426,
-      426,  426,    0,    0,  426,  423,  427,  427,  427,    0,
-        0,  427,    0,  424,  429,  429,  429,    0,    0,  429,
-
-      425,  430,  430,  430,    0,    0,  430,  431,  431,  431,
-        0,  426,  431,    0,  432,  432,  432,    0,  427,  432,
-      433,  433,  433,    0,  427,  433,  429,    0,    0,  426,
-      434,  434,  434,  430,    0,  434,  436,  436,  436,  431,
-      430,  436,  429,    0,    0,  431,  432,    0,  437,  437,
-      437,    0,  433,  437,  438,  438,  438,    0,    0,  438,
-        0,    0,  434,    0,    0,  432,    0,    0,  436,  434,
-        0,  439,  439,  439,    0,    0,  439,  440,  440,  440,
-      437,  436,  440,  441,  441,  441,  438,    0,  441,  442,
-      442,  442,    0,    0,  442,  443,  443,  443,    0,  437,
-
-      443,    0,  438,  439,    0,  444,  444,  444,    0,  440,
-      444,  445,  445,  445,    0,  441,  445,  446,  446,  446,
-        0,  442,  446,    0,    0,    0,    0,  443,  439,  440,
-        0,  447,  447,  447,    0,  441,  447,  444,  443,  449,
-      449,  449,  442,  445,  449,  450,  450,  450,    0,  446,
-      450,    0,    0,    0,  445,    0,    0,  444,    0,  451,
-      451,  451,    0,  447,  451,  453,  453,  453,    0,    0,
-      453,  449,    0,    0,  446,    0,    0,  450,  447,  454,
-      454,  454,    0,  447,  454,  455,  455,  455,  450,    0,
-      455,  451,    0,  456,  456,  456,    0,  453,  456,  457,
-
-      457,  457,    0,    0,  457,    0,    0,  458,  458,  458,
-      453,  454,  458,    0,  459,  459,  459,  455,    0,  459,
-      455,  460,  460,  460,    0,  456,  460,    0,    0,    0,
-      454,  457,  456,    0,    0,    0,  461,  461,  461,  458,
-        0,  461,  462,  462,  462,  458,  459,  462,  457,  463,
-      463,  463,    0,  460,  463,  464,  464,  464,    0,  463,
-      464,    0,  465,  465,  465,  459,    0,  465,  461,    0,
-      460,  461,    0,    0,  462,  466,  466,  466,    0,    0,
-      466,  463,    0,  467,  467,  467,    0,  464,  467,    0,
-      468,  468,  468,  462,  465,  468,    0,    0,  465,    0,
-
-      464,  469,  469,  469,    0,    0,  469,  466,  470,  470,
-      470,    0,    0,  470,  466,  467,  471,  471,  471,    0,
-        0,  471,  468,    0,  472,  472,  472,    0,    0,  472,
-      473,  473,  473,  469,    0,  473,  474,  474,  474,    0,
-      470,  474,  468,    0,  477,  477,  477,  470,  471,  477,
-        0,    0,  469,    0,    0,  471,  472,    0,  478,  478,
-      478,    0,  473,  478,  479,  479,  479,    0,  474,  479,
-        0,    0,  480,  480,  480,  472,  477,  480,  481,  481,
-      481,  477,  473,  481,    0,    0,  474,  482,  482,  482,
-      478,    0,  482,  478,    0,    0,  479,  478,  484,  484,
-
-      484,    0,    0,  484,  480,    0,  485,  485,  485,    0,
-      481,  485,    0,  479,    0,  486,  486,  486,    0,  482,
-      486,    0,  480,  487,  487,  487,    0,    0,  487,    0,
-      484,    0,  488,  488,  488,    0,  484,  488,  485,  489,
-      489,  489,    0,    0,  489,  485,    0,  486,  490,  490,
-      490,    0,    0,  490,    0,  487,    0,  491,  491,  491,
-        0,    0,  491,    0,  488,  492,  492,  492,    0,  487,
-      492,  489,  493,  493,  493,    0,    0,  493,    0,    0,
-      490,    0,  489,    0,    0,  494,  494,  494,    0,  491,
-      494,    0,    0,  495,  495,  495,    0,  492,  495,    0,
-
-        0,    0,    0,    0,  493,  490,  491,  496,  496,  496,
-        0,  492,  496,    0,    0,  493,    0,  494,    0,  497,
-      497,  497,    0,  494,  497,  495,  499,  499,  499,    0,
-        0,  499,  501,  501,  501,    0,    0,  501,    0,  496,
-        0,    0,  496,  502,  502,  502,    0,    0,  502,    0,
-        0,  497,  503,  503,  503,    0,    0,  503,  499,    0,
-      504,  504,  504,    0,  501,  504,  499,  501,  505,  505,
-      505,    0,    0,  505,    0,  502,  497,  506,  506,  506,
-        0,    0,  506,    0,  503,    0,    0,  506,  507,  507,
-      507,  502,  504,  507,  508,  508,  508,    0,    0,  508,
-
-      505,  509,  509,  509,  503,  504,  509,    0,    0,  506,
-        0,  510,  510,  510,    0,    0,  510,    0,  505,    0,
-      507,    0,  511,  511,  511,    0,  508,  511,    0,  512,
-      512,  512,    0,  509,  512,  513,  513,  513,    0,    0,
-      513,    0,  508,  510,  514,  514,  514,    0,    0,  514,
-      510,    0,    0,  509,  511,  516,  516,  516,    0,    0,
-      516,  512,    0,    0,  517,  517,  517,  513,  512,  517,
-        0,  511,  518,  518,  518,    0,  514,  518,  519,  519,
-      519,    0,    0,  519,    0,  513,    0,  516,  519,    0,
-      516,    0,    0,    0,  514,    0,  517,    0,  520,  520,
-
-      520,    0,    0,  520,  518,    0,  521,  521,  521,    0,
-      519,  521,  522,  522,  522,  517,    0,  522,  523,  523,
-      523,    0,  518,  523,    0,    0,  524,  524,  524,  519,
-      520,  524,  525,  525,  525,    0,    0,  525,  521,    0,
-        0,  521,    0,    0,  522,    0,    0,    0,    0,  520,
-      523,  526,  526,  526,    0,    0,  526,  523,  524,    0,
-      527,  527,  527,    0,  525,  527,  522,    0,    0,  530,
-      530,  530,  525,    0,  530,  531,  531,  531,  524,  530,
-      531,    0,    0,  526,  533,  533,  533,    0,    0,  533,
-        0,    0,  527,  535,  535,  535,    0,    0,  535,    0,
-
-        0,  530,    0,  526,  536,  536,  536,  531,    0,  536,
-        0,  527,  537,  537,  537,    0,  533,  537,  538,  538,
-      538,    0,  531,  538,    0,  535,  539,  539,  539,    0,
-      533,  539,  540,  540,  540,    0,  536,  540,    0,  535,
-      542,  542,  542,    0,  537,  542,  543,  543,  543,    0,
-      538,  543,    0,  536,    0,    0,    0,  538,  539,    0,
-        0,  537,    0,    0,  540,  544,  544,  544,    0,    0,
-      544,    0,  542,    0,  539,  545,  545,  545,  543,    0,
-      545,    0,  546,  546,  546,    0,  542,  546,  547,  547,
-      547,    0,    0,  547,    0,  543,    0,  544,  548,  548,
-
-      548,    0,    0,  548,  544,    0,    0,  545,  549,  549,
-      549,    0,    0,  549,  546,    0,  550,  550,  550,  546,
-      547,  550,  552,  552,  552,    0,  545,  552,    0,    0,
-      548,  553,  553,  553,    0,    0,  553,  554,  554,  554,
-      549,    0,  554,    0,  555,  555,  555,  554,  550,  555,
-      556,  556,  556,    0,  552,  556,  549,  557,  557,  557,
-        0,  550,  557,  553,    0,    0,  558,  558,  558,  554,
-      553,  558,  552,  559,  559,  559,  555,    0,  559,  560,
-      560,  560,  556,    0,  560,  556,  561,  561,  561,  557,
-        0,  561,  557,    0,  555,  563,  563,  563,  558,    0,
-
-      563,    0,  564,  564,  564,  559,    0,  564,    0,  559,
-        0,  560,  564,    0,  565,  565,  565,    0,  561,  565,
-      558,    0,    0,  566,  566,  566,    0,  563,  566,    0,
-      567,  567,  567,    0,  564,  567,    0,    0,  563,  568,
-      568,  568,    0,    0,  568,    0,  565,  569,  569,  569,
-        0,    0,  569,  565,    0,  566,  570,  570,  570,  566,
-        0,  570,  567,    0,    0,  567,    0,  571,  571,  571,
-        0,  568,  571,  572,  572,  572,    0,    0,  572,  569,
-        0,    0,  569,    0,  573,  573,  573,    0,  570,  573,
-      568,  574,  574,  574,    0,    0,  574,    0,    0,  571,
-
-        0,  575,  575,  575,    0,  572,  575,  576,  576,  576,
-      571,    0,  576,  577,  577,  577,  573,    0,  577,  578,
-      578,  578,    0,  574,  578,  579,  579,  579,    0,  573,
-      579,    0,    0,  575,    0,  580,  580,  580,    0,  576,
-      580,    0,    0,    0,  575,  577,  576,    0,  582,  582,
-      582,  578,  577,  582,  583,  583,  583,  579,    0,  583,
-      584,  584,  584,    0,  578,  584,    0,  580,  585,  585,
-      585,    0,    0,  585,    0,  579,  586,  586,  586,    0,
-      582,  586,  580,  590,  590,  590,  583,  582,  590,  589,
-      589,  589,  584,  583,  589,    0,  591,  591,  591,    0,
-
-      585,  591,  592,  592,  592,    0,    0,  592,  586,  593,
-      593,  593,  584,    0,  593,  590,    0,    0,    0,  585,
-      586,  589,  590,    0,    0,  589,    0,    0,  591,    0,
-      594,  594,  594,    0,  592,  594,    0,    0,  595,  595,
-      595,  593,    0,  595,  596,  596,  596,    0,  591,  596,
-        0,    0,  593,  597,  597,  597,    0,    0,  597,    0,
-        0,    0,  594,  598,  598,  598,    0,    0,  598,  594,
-      595,    0,  601,  601,  601,    0,  596,  601,    0,  603,
-      603,  603,    0,    0,  603,  597,    0,    0,  597,  595,
-        0,  605,  605,  605,  596,  598,  605,    0,  598,    0,
-
-      606,  606,  606,    0,  601,  606,    0,  607,  607,  607,
-      601,  603,  607,  608,  608,  608,  603,    0,  608,  609,
-      609,  609,    0,  605,  609,  611,  611,  611,    0,    0,
-      611,    0,  606,    0,    0,  606,  613,  613,  613,  607,
-        0,  613,  605,    0,    0,  608,    0,    0,  615,  615,
-      615,  609,  607,  615,  616,  616,  616,  611,    0,  616,
-      617,  617,  617,    0,    0,  617,    0,    0,  613,  618,
-      618,  618,    0,  611,  618,    0,  619,  619,  619,  613,
-      615,  619,    0,  620,  620,  620,  616,    0,  620,  621,
-      621,  621,  617,  620,  621,    0,    0,  622,  622,  622,
-
-      615,  618,  622,    0,  616,  623,  623,  623,  619,    0,
-      623,  617,  618,    0,    0,  620,    0,  624,  624,  624,
-        0,  621,  624,  625,  625,  625,    0,    0,  625,  622,
-        0,  626,  626,  626,  620,    0,  626,  623,  627,  627,
-      627,    0,    0,  627,    0,  628,  628,  628,  623,  624,
-      628,    0,  630,  630,  630,  625,  624,  630,    0,  631,
-      631,  631,  625,  626,  631,    0,  626,    0,    0,    0,
-      627,  632,  632,  632,    0,    0,  632,  628,    0,    0,
-        0,  633,  633,  633,  630,  627,  633,  634,  634,  634,
-      630,  631,  634,  635,  635,  635,    0,    0,  635,  631,
-
-      636,  636,  636,  632,    0,  636,  637,  637,  637,    0,
-      632,  637,    0,  633,    0,  638,  638,  638,    0,  634,
-      638,  639,  639,  639,  633,  635,  639,    0,  640,  640,
-      640,    0,  636,  640,    0,  643,  643,  643,  637,  634,
-      643,  644,  644,  644,  635,    0,  644,  638,    0,    0,
-        0,    0,    0,  639,  637,    0,  645,  645,  645,    0,
-      640,  645,    0,  646,  646,  646,    0,  643,  646,  647,
-      647,  647,  639,  644,  647,  648,  648,  648,    0,    0,
-      648,  644,  643,    0,  650,  650,  650,    0,  645,  650,
-        0,  651,  651,  651,    0,  646,  651,  654,  654,  654,
-
-        0,  647,  654,  656,  656,  656,    0,  648,  656,    0,
-      657,  657,  657,    0,  648,  657,  650,  658,  658,  658,
-        0,    0,  658,  651,    0,    0,  659,  659,  659,  654,
-      650,  659,  661,  661,  661,  656,    0,  661,    0,  662,
-      662,  662,  657,  654,  662,  663,  663,  663,    0,  658,
-      663,  664,  664,  664,  656,    0,  664,    0,  659,    0,
-        0,    0,  657,    0,  661,  665,  665,  665,    0,  658,
-      665,  662,    0,  666,  666,  666,    0,  663,  666,  668,
-      668,  668,  662,  664,  668,    0,  670,  670,  670,    0,
-      664,  670,    0,    0,    0,    0,  663,  665,  672,  672,
-
-      672,    0,    0,  672,    0,  666,    0,    0,  665,    0,
-        0,  668,  666,    0,  673,  673,  673,    0,  670,  673,
-        0,    0,  677,  677,  677,  670,  668,  677,    0,    0,
-      672,  678,  678,  678,    0,    0,  678,  680,  680,  680,
-        0,    0,  680,  681,  681,  681,  673,    0,  681,  672,
-      682,  682,  682,  673,  677,  682,  683,  683,  683,    0,
-      677,  683,    0,  678,    0,  686,  686,  686,    0,  680,
-      686,    0,  688,  688,  688,  681,  680,  688,    0,  678,
-        0,    0,  682,    0,  687,  687,  687,    0,  683,  687,
-      689,  689,  689,    0,  687,  689,    0,  686,    0,  683,
-
-      690,  690,  690,    0,  688,  690,    0,  691,  691,  691,
-        0,    0,  691,  692,  692,  692,  687,    0,  692,    0,
-        0,  686,  689,  688,  693,  693,  693,    0,    0,  693,
-        0,    0,  690,    0,    0,  694,  694,  694,  689,  691,
-      694,  695,  695,  695,    0,  692,  695,  691,  696,  696,
-      696,  695,    0,  696,    0,    0,  693,  697,  697,  697,
-        0,    0,  697,  700,  700,  700,    0,  694,  700,  701,
-      701,  701,    0,  695,  701,    0,  702,  702,  702,  701,
-      696,  702,    0,  703,  703,  703,  696,  694,  703,  697,
-        0,  704,  704,  704,    0,  700,  704,  706,  706,  706,
-
-        0,  701,  706,    0,  709,  709,  709,    0,  702,  709,
-        0,  700,  710,  710,  710,  703,    0,  710,    0,  711,
-      711,  711,    0,  704,  711,  702,    0,    0,    0,  706,
-      713,  713,  713,    0,    0,  713,  709,    0,  704,    0,
-      706,  715,  715,  715,  710,    0,  715,  709,  716,  716,
-      716,  711,    0,  716,    0,    0,    0,    0,  711,    0,
-      710,    0,  713,    0,  718,  718,  718,    0,    0,  718,
-      719,  719,  719,  715,  718,  719,    0,  713,    0,    0,
-      716,    0,  720,  720,  720,    0,  715,  720,  721,  721,
-      721,    0,    0,  721,    0,    0,  718,    0,  716,  722,
-
-      722,  722,  719,    0,  722,    0,    0,  723,  723,  723,
-        0,  719,  723,    0,  720,    0,    0,  723,    0,    0,
-      721,  724,  724,  724,    0,    0,  724,    0,  720,    0,
-        0,  722,    0,  725,  725,  725,    0,  721,  725,  723,
-      726,  726,  726,    0,    0,  726,  727,  727,  727,    0,
-        0,  727,    0,  724,  728,  728,  728,    0,    0,  728,
-      724,    0,  729,  729,  729,  725,    0,  729,  731,  731,
-      731,    0,  726,  731,  732,  732,  732,    0,  727,  732,
-        0,  725,    0,  726,    0,    0,  728,  733,  733,  733,
-        0,    0,  733,  728,  729,    0,  734,  734,  734,    0,
-
-      731,  734,    0,  736,  736,  736,  732,    0,  736,    0,
-      737,  737,  737,    0,  729,  737,    0,  731,    0,  733,
-        0,  732,    0,    0,  733,  738,  738,  738,  734,    0,
-      738,  739,  739,  739,  734,  736,  739,    0,  740,  740,
-      740,    0,  737,  740,  741,  741,  741,    0,    0,  741,
-      743,  743,  743,  737,    0,  743,    0,  738,    0,    0,
-      744,  744,  744,  739,  738,  744,    0,  746,  746,  746,
-      740,    0,  746,  747,  747,  747,  741,  740,  747,  748,
-      748,  748,  743,  741,  748,  749,  749,  749,    0,    0,
-      749,    0,  744,    0,    0,  750,  750,  750,  743,  746,
-
-      750,  751,  751,  751,    0,  747,  751,  752,  752,  752,
-      744,  748,  752,    0,    0,    0,    0,  749,  746,    0,
-      747,    0,    0,    0,    0,    0,  748,  750,  749,  753,
-      753,  753,    0,  751,  753,  754,  754,  754,    0,  752,
-      754,    0,  755,  755,  755,    0,  750,  755,    0,  756,
-      756,  756,    0,  751,  756,  757,  757,  757,  752,    0,
-      757,  753,    0,  758,  758,  758,    0,  754,  758,    0,
-        0,  759,  759,  759,  755,    0,  759,  753,  754,    0,
-        0,  756,    0,    0,    0,  755,    0,  757,    0,  761,
-      761,  761,    0,  757,  761,  758,  762,  762,  762,    0,
-
-        0,  762,    0,  759,  763,  763,  763,    0,    0,  763,
-      758,  759,  765,  765,  765,    0,    0,  765,  766,  766,
-      766,  761,    0,  766,  768,  768,  768,    0,  762,  768,
-      769,  769,  769,    0,    0,  769,  763,  762,  770,  770,
-      770,    0,    0,  770,  765,    0,    0,  763,    0,    0,
-      766,    0,    0,    0,    0,    0,  768,  766,    0,    0,
-        0,    0,  769,    0,    0,    0,    0,    0,    0,    0,
-      770,    0,    0,    0,  768,    0,    0,    0,    0,    0,
-        0,  769,  773,  773,  773,  773,  773,  773,  773,  774,
-      774,  774,  774,  774,  774,  774,  775,    0,  775,  775,
-
-      775,  775,  775,  776,    0,  776,    0,  776,  776,  776,
-      777,  777,  777,  777,  777,  777,  777,  778,  778,  778,
-      778,  778,  778,  778,  779,    0,  779,  779,  779,  779,
-      779,  780,  780,    0,  780,  781,  781,  781,  781,  781,
-      782,  782,  783,  783,  784,  784,  785,  785,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-      772,  772,  772,  772,  772,  772,  772,  772,  772,  772,
-
-      772,  772,  772,  772,  772,  772,  772,  772,  772
+        1,    3,    3,    3,    4,    4,    4,    3,  818,    7,
+        4,    5,    5,    8,    5,    5,    5,    5,    5,    5,
+        5,    5,    5,    5,    9,   13,   10,   13,   21,    5,
+        5,  817,    5,   21,  816,    5,   25,    5,   25,    5,
+
+      815,   25,   25,   25,  356,    5,    5,    7,    9,    5,
+       10,    8,   17,    5,   17,   17,   17,  286,   19,    5,
+       19,   19,   19,   26,   17,    5,    5,   15,   15,   15,
+       19,   27,   15,   28,   20,   20,   20,   32,   26,   22,
+       17,   22,   22,   22,   20,  221,   19,   33,   31,   15,
+       15,   22,   15,   80,   37,   27,   37,   28,  155,   15,
+       20,   32,   15,   31,   15,   15,   15,   22,   44,   15,
+       15,   33,   15,   15,   15,   15,   15,   80,   15,   15,
+       15,   15,   15,   42,   88,   42,   45,   45,   45,   78,
+      147,   45,   47,   47,   47,   44,   79,   47,   95,   48,
+
+       48,   48,   81,   82,   48,   49,   49,   49,   50,   78,
+       49,   88,   51,   51,   51,   50,   79,   51,   45,   76,
+       76,   76,   81,   82,   47,   48,   86,   52,   52,   52,
+       49,   48,   52,   85,   47,   50,  143,   49,  142,   50,
+       77,   77,   77,   50,   51,   83,   53,   53,   53,  141,
+       50,   53,  143,   49,   50,   43,   50,   50,  142,   52,
+       54,   54,   54,   51,  145,   54,   55,   55,   55,   83,
+      146,   55,   52,  141,   41,   52,   39,  215,   53,   52,
+      144,   53,   38,  218,  145,   53,  146,   24,   53,   56,
+       56,   56,   54,  215,   56,   14,   11,    0,   55,  218,
+
+       53,   57,   57,   57,  144,    0,   57,   54,    0,    0,
+        0,   58,   58,   58,   55,    0,   58,   54,    0,   55,
+        0,   56,   55,   59,   59,   59,    0,   56,   59,   60,
+       60,   60,    0,   57,   60,    0,   56,    0,   56,    0,
+       57,   57,    0,   58,   57,    0,   58,    0,    0,   57,
+       58,    0,    0,    0,    0,   59,    0,    0,   59,    0,
+        0,   60,   62,   62,   62,    0,    0,   62,    0,   58,
+        0,    0,   63,   63,   63,    0,    0,   63,   60,    0,
+       68,   68,   68,   60,   61,   61,   61,    0,    0,   61,
+       68,    0,    0,    0,   62,    0,    0,   62,   64,   64,
+
+       64,   62,    0,   64,   63,    0,   68,   65,   65,   65,
+        0,   63,   65,   66,   66,   66,   61,    0,   66,   61,
+       63,   63,   61,   61,    0,    0,   63,    0,    0,    0,
+       64,    0,   61,    0,    0,   61,    0,   64,    0,   65,
+       69,   64,   69,   69,   69,   66,    0,    0,   66,    0,
+        0,   90,   69,    0,    0,   70,   64,   70,   90,   65,
+       70,   70,   70,   71,    0,   71,   71,   71,   69,   72,
+       72,   72,   91,   91,   91,   71,    0,   91,   90,   72,
+        0,    0,   90,   92,   92,   92,   90,    0,   92,    0,
+        0,   71,    0,   90,    0,   72,    0,   90,    0,   90,
+
+       90,   93,   93,   93,   91,    0,   93,    0,    0,   91,
+        0,   94,   94,   94,    0,   92,   94,   96,   96,   96,
+        0,    0,   96,    0,   99,   99,   99,    0,    0,   99,
+       93,    0,    0,   93,   98,   98,   98,    0,    0,   98,
+      101,  101,  101,   94,    0,  101,    0,    0,    0,   96,
+        0,    0,   94,   97,   97,   97,   99,    0,    0,    0,
+       97,   97,   97,   97,   97,    0,   98,   99,  100,  100,
+      100,    0,  101,  100,    0,   97,   97,   97,   97,   97,
+       97,  102,  102,  102,    0,   98,  102,  103,  103,  103,
+        0,    0,  103,    0,    0,  101,  104,  104,  104,    0,
+
+      100,  104,    0,  105,  105,  105,  100,    0,  105,    0,
+        0,    0,    0,  102,    0,  100,  106,  106,  106,  103,
+        0,  106,    0,  103,  103,  107,  107,  107,  104,    0,
+      107,    0,  103,  104,  102,  105,  108,  108,  108,    0,
+        0,  108,    0,    0,    0,    0,  105,    0,  106,  109,
+      109,  109,    0,  106,  109,    0,    0,  107,    0,  111,
+      111,  111,  107,    0,  111,  110,  110,  110,  108,  106,
+      110,  112,  112,  112,  107,  110,  112,  113,  113,  113,
+        0,  109,  113,    0,  108,    0,    0,  113,  108,    0,
+        0,  111,    0,    0,  114,  114,  114,  110,  111,  114,
+
+      115,  115,  115,  112,    0,  115,    0,  109,    0,  113,
+      116,  116,  116,    0,    0,  116,  117,  117,  117,    0,
+        0,  117,    0,    0,  112,    0,  114,    0,    0,  114,
+        0,    0,  115,  118,  118,  118,    0,  115,  118,  119,
+      119,  119,  116,    0,  119,    0,  116,    0,  117,  120,
+      120,  120,    0,    0,  120,    0,    0,  117,  121,  121,
+      121,    0,    0,  121,    0,  118,    0,  122,  122,  122,
+      118,  119,  122,  123,  123,  123,    0,    0,  123,    0,
+        0,  120,  124,  124,  124,  119,    0,  124,    0,    0,
+      121,    0,  125,  125,  125,    0,    0,  125,    0,  122,
+
+        0,  120,  125,    0,  121,  123,  126,  126,  126,    0,
+        0,  126,    0,    0,  124,    0,  127,  127,  127,    0,
+      122,  127,    0,    0,  125,    0,  123,  128,  128,  128,
+        0,    0,  128,  124,  124,  129,  129,  129,  126,    0,
+      129,  131,  131,  131,    0,    0,  131,    0,  127,    0,
+        0,  132,  132,  132,    0,    0,  132,  126,    0,  128,
+        0,    0,    0,    0,  127,    0,  128,  129,  127,  133,
+      133,  133,    0,  131,  133,  134,  134,  134,    0,    0,
+      134,    0,    0,  132,  129,  130,  130,  130,  132,    0,
+      130,    0,  131,  135,  135,  135,  131,    0,  135,    0,
+
+        0,  133,    0,    0,  133,    0,    0,  134,  136,  136,
+      136,  134,    0,  136,  137,  137,  137,  130,    0,  137,
+      130,  130,  130,    0,    0,  135,  138,  138,  138,    0,
+      130,  138,  130,    0,  139,  139,  139,  130,    0,  139,
+      136,    0,  150,  150,  150,  135,  137,  150,  153,  153,
+      153,    0,    0,  153,  136,  154,  154,  154,  138,    0,
+      154,    0,    0,  137,    0,  138,  139,    0,  158,  158,
+      158,    0,    0,  158,  150,    0,    0,    0,    0,  139,
+      153,  161,  161,  161,    0,    0,  161,  154,    0,    0,
+        0,  150,    0,    0,    0,    0,  154,  157,  157,  157,
+
+      158,    0,    0,  158,  157,  157,  157,  157,  157,  159,
+      159,  159,    0,  161,  159,    0,    0,    0,    0,  157,
+      157,  157,  157,  157,  157,  160,  160,  160,  161,    0,
+      160,    0,    0,    0,  161,  162,  162,  162,    0,    0,
+      162,  159,  163,  163,  163,  162,    0,  163,  159,  164,
+      164,  164,    0,    0,  164,    0,    0,  160,    0,    0,
+      165,  165,  165,    0,  160,  165,    0,  162,  166,  166,
+      166,    0,    0,  166,  163,    0,    0,  163,  167,  167,
+      167,  164,    0,  167,  168,  168,  168,    0,    0,  168,
+        0,    0,  165,  169,  169,  169,    0,    0,  169,    0,
+
+      166,    0,    0,  164,    0,  165,    0,  166,    0,    0,
+      167,    0,  170,  170,  170,    0,  168,  170,  171,  171,
+      171,    0,  168,  171,    0,  169,    0,  167,  169,  172,
+      172,  172,    0,    0,  172,  173,  173,  173,    0,    0,
+      173,  174,  174,  174,  170,    0,  174,    0,    0,    0,
+      171,  170,  175,  175,  175,    0,    0,  175,    0,    0,
+        0,  172,    0,  171,  176,  176,  176,  173,    0,  176,
+        0,    0,  172,  174,    0,  178,  178,  178,    0,  173,
+      178,  179,  179,  179,  175,    0,  179,  181,  181,  181,
+        0,    0,  181,    0,  174,    0,  176,    0,    0,  176,
+
+        0,  175,    0,  180,  180,  180,    0,  178,  180,  183,
+      183,  183,    0,  179,  183,    0,  182,  182,  182,  181,
+      179,  182,  178,  184,  184,  184,  182,    0,  184,  186,
+      186,  186,    0,    0,  186,  180,    0,    0,  180,  181,
+        0,  183,  185,  185,  185,    0,    0,  185,  182,  187,
+      187,  187,  185,    0,  187,  184,    0,  188,  188,  188,
+      183,  186,  188,    0,  184,  189,  189,  189,    0,  186,
+      189,  190,  190,  190,  185,    0,  190,  191,  191,  191,
+        0,  187,  191,  192,  192,  192,    0,    0,  192,  188,
+      193,  193,  193,    0,    0,  193,  188,  189,    0,  187,
+
+      194,  194,  194,  190,    0,  194,    0,    0,  189,  191,
+        0,    0,  191,    0,    0,  192,  195,  195,  195,    0,
+      190,  195,  193,  196,  196,  196,    0,    0,  196,    0,
+        0,    0,  194,    0,    0,  192,    0,    0,    0,  193,
+      197,  197,  197,    0,    0,  197,    0,    0,  195,  198,
+      198,  198,  194,    0,  198,  196,    0,  199,  199,  199,
+        0,  195,  199,    0,  200,  200,  200,    0,    0,  200,
+        0,    0,  197,  201,  201,  201,  196,    0,  201,    0,
+      197,  198,  202,  202,  202,    0,    0,  202,    0,  199,
+        0,    0,  198,    0,    0,  199,  200,  203,  203,  203,
+
+        0,    0,  203,    0,    0,  201,    0,  200,  204,  204,
+      204,    0,    0,  204,  202,    0,    0,  202,  205,  205,
+      205,  201,    0,  205,    0,  206,  206,  206,    0,  203,
+      206,    0,    0,  207,  207,  207,  203,    0,  207,    0,
+      204,    0,    0,  208,  208,  208,    0,  204,  208,    0,
+      205,  209,  209,  209,    0,    0,  209,  206,  210,  210,
+      210,    0,    0,  210,  206,  207,    0,  211,  211,  211,
+        0,    0,  211,  205,    0,  208,    0,  207,    0,    0,
+      208,    0,    0,  209,  212,  212,  212,    0,    0,  212,
+      210,    0,  213,  213,  213,    0,    0,  213,  209,  211,
+
+        0,    0,  214,  214,  214,    0,  211,  214,  225,  225,
+      225,  210,    0,  225,    0,    0,  212,  223,  223,  223,
+        0,    0,  223,  212,  213,  227,  227,  227,    0,    0,
+      227,  223,  223,    0,  214,    0,  229,  229,  229,  223,
+      225,  229,    0,  213,    0,  214,    0,    0,    0,  223,
+        0,  225,  226,  226,  226,    0,    0,  227,    0,  226,
+      226,  226,  226,  226,  228,  228,  228,    0,  229,  228,
+        0,    0,    0,    0,  226,  226,  226,  226,  226,  226,
+      230,  230,  230,  227,    0,  230,  231,  231,  231,    0,
+        0,  231,  232,  232,  232,    0,  228,  232,  233,  233,
+
+      233,    0,    0,  233,  234,  234,  234,    0,    0,  234,
+        0,  228,  230,    0,    0,  235,  235,  235,  231,  230,
+      235,  236,  236,  236,  232,    0,  236,    0,    0,    0,
+      233,    0,  232,    0,    0,    0,  234,  231,  237,  237,
+      237,    0,    0,  237,    0,  234,    0,  235,  237,  238,
+      238,  238,  237,  236,  238,  239,  239,  239,  235,    0,
+      239,    0,  236,  240,  240,  240,    0,    0,  240,    0,
+      237,  241,  241,  241,    0,    0,  241,  242,  242,  242,
+        0,  238,  242,  243,  243,  243,    0,  239,  243,  244,
+      244,  244,    0,    0,  244,  240,    0,    0,    0,  244,
+
+      245,  245,  245,  241,  239,  245,  246,  246,  246,  242,
+        0,  246,    0,    0,  240,  243,    0,  247,  247,  247,
+        0,  244,  247,    0,    0,  241,    0,    0,  242,  248,
+      248,  248,  245,    0,  248,  243,  244,    0,  246,  245,
+        0,  244,    0,    0,  246,  249,  249,  249,    0,  247,
+      249,    0,  250,  250,  250,    0,    0,  250,  251,  251,
+      251,  248,    0,  251,  252,  252,  252,    0,    0,  252,
+      247,  253,  253,  253,    0,    0,  253,  249,    0,    0,
+      248,    0,    0,  249,  250,    0,    0,  254,  254,  254,
+      251,  250,  254,  255,  255,  255,  252,    0,  255,  252,
+
+        0,  251,    0,  253,    0,    0,  256,  256,  256,    0,
+      253,  256,  257,  257,  257,    0,    0,  257,    0,  254,
+        0,  258,  258,  258,    0,  255,  258,  259,  259,  259,
+        0,    0,  259,    0,    0,    0,  255,    0,  256,  254,
+      260,  260,  260,    0,  257,  260,    0,  261,  261,  261,
+        0,  256,  261,  258,    0,    0,  262,  262,  262,  259,
+        0,  262,  263,  263,  263,    0,    0,  263,    0,  258,
+        0,    0,  260,    0,    0,  264,  264,  264,    0,  261,
+      264,  259,  265,  265,  265,    0,  260,  265,  262,    0,
+      266,  266,  266,    0,  263,  266,  267,  267,  267,    0,
+
+        0,  267,    0,  261,  262,  263,    0,  264,  268,  268,
+      268,    0,    0,  268,  265,  269,  269,  269,    0,    0,
+      269,    0,  266,  265,    0,    0,    0,  264,  267,  266,
+        0,    0,    0,  266,  267,    0,  270,  270,  270,    0,
+      268,  270,    0,  271,  271,  271,    0,  269,  271,  272,
+      272,  272,    0,    0,  272,    0,  268,    0,  273,  273,
+      273,    0,  269,  273,  274,  274,  274,    0,  270,  274,
+        0,    0,  275,  275,  275,  271,    0,  275,  276,  276,
+      276,  272,    0,  276,  279,  279,  279,  270,    0,  279,
+      273,    0,  277,  277,  277,    0,  274,  277,    0,    0,
+
+        0,  271,    0,  274,  275,  272,  278,  278,  278,  273,
+      276,  278,    0,    0,    0,    0,  279,  276,    0,    0,
+      280,  280,  280,  275,  277,  280,    0,  281,  281,  281,
+        0,  277,  281,    0,  282,  282,  282,    0,  278,  282,
+        0,  283,  283,  283,    0,  278,  283,    0,  288,  288,
+      288,    0,  280,  288,    0,  289,  289,  289,    0,  281,
+      289,    0,  290,  290,  290,    0,  282,  290,    0,  291,
+      291,  291,    0,  283,  291,    0,  293,  293,  293,  283,
+      288,  293,    0,  294,  294,  294,    0,  289,  294,    0,
+      297,  297,  297,    0,  290,  297,    0,  296,  296,  296,
+
+      290,  291,  296,    0,    0,  298,  298,  298,  293,    0,
+      298,    0,    0,    0,    0,  294,  291,  292,  292,  292,
+        0,    0,  297,    0,  292,  292,  292,  292,  292,  296,
+      300,  300,  300,    0,  296,  300,  294,  298,  297,  292,
+      292,  292,  292,  292,  292,  301,  301,  301,    0,    0,
+      301,    0,    0,  298,  302,  302,  302,    0,    0,  302,
+        0,    0,  300,  303,  303,  303,    0,    0,  303,    0,
+        0,  304,  304,  304,    0,  300,  304,  301,  306,  306,
+      306,    0,    0,  306,    0,    0,  302,    0,    0,  302,
+        0,    0,  301,    0,    0,  303,    0,  307,  307,  307,
+
+        0,  303,  307,  304,  308,  308,  308,    0,    0,  308,
+      306,  309,  309,  309,    0,    0,  309,    0,    0,  304,
+        0,  310,  310,  310,    0,    0,  310,    0,    0,  307,
+      306,  310,  312,  312,  312,    0,  308,  312,    0,  313,
+      313,  313,  308,  309,  313,    0,  307,  314,  314,  314,
+      309,    0,  314,  310,  315,  315,  315,  314,    0,  315,
+      316,  316,  316,    0,  312,  316,    0,  317,  317,  317,
+        0,  313,  317,    0,  313,  318,  318,  318,    0,  314,
+      318,    0,    0,  312,    0,    0,  315,    0,  319,  319,
+      319,    0,  316,  319,    0,  320,  320,  320,  316,  317,
+
+      320,  321,  321,  321,    0,  320,  321,  318,    0,    0,
+      317,  322,  322,  322,    0,  318,  322,  323,  323,  323,
+      319,    0,  323,  324,  324,  324,  319,  320,  324,  325,
+      325,  325,    0,  321,  325,  326,  326,  326,    0,    0,
+      326,    0,    0,  322,    0,  328,  328,  328,  321,  323,
+      328,  329,  329,  329,    0,  324,  329,    0,  330,  330,
+      330,  325,  322,  330,  331,  331,  331,  326,  323,  331,
+        0,  324,    0,    0,  325,    0,    0,  328,    0,  332,
+      332,  332,    0,  329,  332,    0,  333,  333,  333,    0,
+      330,  333,  328,  335,  335,  335,  331,  330,  335,    0,
+
+      336,  336,  336,    0,  329,  336,    0,    0,  337,  337,
+      337,  332,  331,  337,  338,  338,  338,    0,  333,  338,
+        0,  339,  339,  339,    0,  335,  339,  332,  340,  340,
+      340,  339,  336,  340,  341,  341,  341,    0,  333,  341,
+      337,    0,  342,  342,  342,    0,  338,  342,    0,    0,
+        0,  336,    0,  339,    0,    0,  345,  345,  345,  337,
+      340,  345,    0,  343,  343,  343,  341,    0,  343,    0,
+        0,  338,  341,  343,  342,  340,  344,  344,  344,    0,
+      342,  344,  346,  346,  346,    0,  344,  346,  345,  347,
+      347,  347,    0,    0,  347,  343,  348,  348,  348,    0,
+
+        0,  348,  349,  349,  349,    0,    0,  349,  344,    0,
+        0,  345,    0,    0,  346,  350,  350,  350,    0,    0,
+      350,  347,    0,    0,    0,  355,  355,  355,  348,    0,
+      355,    0,  347,  346,  349,  355,    0,  360,  360,  360,
+        0,    0,  360,  363,  363,  363,    0,  350,  363,  348,
+      361,  361,  361,  363,    0,  361,    0,  355,  364,  364,
+      364,    0,    0,  364,    0,  365,  365,  365,  350,  360,
+      365,  366,  366,  366,    0,  363,  366,    0,    0,    0,
+        0,    0,  361,    0,  360,    0,    0,  367,  367,  367,
+      364,  361,  367,  368,  368,  368,    0,  365,  368,  369,
+
+      369,  369,    0,  366,  369,    0,    0,  370,  370,  370,
+      365,  364,  370,    0,    0,  371,  371,  371,    0,  367,
+      371,    0,  366,    0,    0,  368,  367,    0,    0,    0,
+      371,  369,  368,  372,  372,  372,    0,    0,  372,  370,
+        0,  373,  373,  373,    0,  370,  373,  371,    0,  374,
+      374,  374,  369,    0,  374,    0,    0,  375,  375,  375,
+        0,    0,  375,    0,    0,  372,  376,  376,  376,    0,
+        0,  376,    0,  373,  377,  377,  377,    0,    0,  377,
+        0,  374,    0,    0,    0,    0,    0,  372,  374,  375,
+        0,    0,  373,    0,    0,  375,    0,    0,  376,  378,
+
+      378,  378,    0,    0,  378,    0,  377,  381,  381,  381,
+        0,  376,  381,  377,  379,  379,  379,    0,    0,  379,
+        0,  382,  382,  382,    0,    0,  382,  383,  383,  383,
+        0,  378,  383,  384,  384,  384,    0,    0,  384,  381,
+        0,    0,  385,  385,  385,  378,  379,  385,    0,  386,
+      386,  386,  379,  382,  386,  387,  387,  387,  381,  383,
+      387,  382,  383,    0,    0,  384,  388,  388,  388,    0,
+        0,  388,    0,    0,  385,    0,    0,  389,  389,  389,
+      385,  386,  389,    0,  384,    0,    0,  387,  390,  390,
+      390,    0,    0,  390,  392,  392,  392,    0,  388,  392,
+
+        0,    0,  386,    0,  392,  393,  393,  393,    0,  389,
+      393,    0,    0,  387,  394,  394,  394,    0,  388,  394,
+      390,    0,    0,  395,  395,  395,  392,  390,  395,    0,
+        0,  389,    0,  396,  396,  396,    0,  393,  396,  393,
+      397,  397,  397,    0,    0,  397,  394,  399,  399,  399,
+        0,    0,  399,    0,    0,  395,  400,  400,  400,    0,
+        0,  400,    0,    0,    0,  396,    0,  394,  402,  402,
+      402,    0,  397,  402,  395,    0,    0,    0,  396,  399,
+      401,  401,  401,    0,    0,  401,  399,    0,  400,    0,
+      401,    0,    0,  397,  403,  403,  403,    0,    0,  403,
+
+      402,  404,  404,  404,    0,  402,  404,  400,  405,  405,
+      405,  404,  401,  405,    0,  407,  407,  407,  405,  401,
+      407,    0,  408,  408,  408,    0,  403,  408,    0,  409,
+      409,  409,    0,  404,  409,    0,  410,  410,  410,  403,
+      405,  410,    0,    0,    0,    0,  410,  407,  411,  411,
+      411,    0,    0,  411,  408,  412,  412,  412,    0,    0,
+      412,  409,    0,    0,  409,  412,    0,  407,  410,    0,
+        0,  414,  414,  414,    0,  408,  414,  415,  415,  415,
+      411,    0,  415,  417,  417,  417,  414,  412,  417,  418,
+      418,  418,    0,    0,  418,  419,  419,  419,    0,    0,
+
+      419,  411,    0,  414,    0,    0,  420,  420,  420,  415,
+        0,  420,  422,  422,  422,  417,  420,  422,  421,  421,
+      421,  418,  415,  421,  423,  423,  423,  419,  421,  423,
+        0,    0,  419,    0,    0,  417,    0,    0,  420,    0,
+        0,  424,  424,  424,  422,    0,  424,    0,    0,    0,
+      421,  424,  425,  425,  425,    0,  423,  425,  422,    0,
+      426,  426,  426,    0,    0,  426,  427,  427,  427,    0,
+        0,  427,    0,  424,    0,    0,  427,    0,    0,  423,
+      428,  428,  428,    0,  425,  428,    0,    0,  429,  429,
+      429,  425,  426,  429,  430,  430,  430,    0,  427,  430,
+
+        0,  431,  431,  431,    0,    0,  431,  426,  432,  432,
+      432,  431,  428,  432,  433,  433,  433,    0,    0,  433,
+      429,    0,  434,  434,  434,  428,  430,  434,    0,    0,
+        0,  429,  430,  431,    0,    0,  435,  435,  435,    0,
+      432,  435,  436,  436,  436,    0,  433,  436,  437,  437,
+      437,  432,    0,  437,  434,  438,  438,  438,    0,    0,
+      438,  434,  439,  439,  439,    0,  433,  439,  435,    0,
+        0,  435,    0,    0,  436,    0,    0,  440,  440,  440,
+      437,  436,  440,  441,  441,  441,    0,  438,  441,    0,
+        0,  437,  438,    0,  439,  442,  442,  442,    0,    0,
+
+      442,  439,  443,  443,  443,    0,    0,  443,    0,  440,
+        0,    0,  440,    0,    0,  441,  444,  444,  444,    0,
+        0,  444,  441,  445,  445,  445,    0,  442,  445,    0,
+      446,  446,  446,    0,  443,  446,    0,  448,  448,  448,
+        0,    0,  448,    0,  449,  449,  449,    0,  444,  449,
+        0,    0,  450,  450,  450,  445,    0,  450,    0,  451,
+      451,  451,  446,    0,  451,    0,    0,  444,  446,  448,
+      452,  452,  452,    0,    0,  452,  449,  453,  453,  453,
+        0,    0,  453,  449,  450,  448,    0,  454,  454,  454,
+      450,  451,  454,  456,  456,  456,    0,    0,  456,  457,
+
+      457,  457,  452,    0,  457,  458,  458,  458,    0,  453,
+      458,  451,  459,  459,  459,    0,    0,  459,    0,  454,
+        0,    0,  460,  460,  460,  456,  454,  460,    0,  453,
+        0,  457,    0,    0,  461,  461,  461,  458,  456,  461,
+      462,  462,  462,    0,  459,  462,    0,  463,  463,  463,
+        0,  457,  463,  458,  460,    0,  464,  464,  464,    0,
+        0,  464,    0,  465,  465,  465,  461,    0,  465,    0,
+      459,    0,  462,    0,    0,  460,  466,  466,  466,  463,
+        0,  466,    0,    0,  467,  467,  467,  461,  464,  467,
+      463,  469,  469,  469,  462,  465,  469,  470,  470,  470,
+
+        0,    0,  470,    0,    0,    0,  465,    0,  466,  464,
+      471,  471,  471,    0,    0,  471,  467,  473,  473,  473,
+        0,    0,  473,  469,    0,  474,  474,  474,    0,  470,
+      474,  467,    0,    0,  466,    0,    0,  467,    0,    0,
+      470,    0,  471,  475,  475,  475,    0,    0,  475,  473,
+      476,  476,  476,    0,    0,  476,    0,  474,  477,  477,
+      477,    0,  473,  477,  478,  478,  478,    0,    0,  478,
+        0,  479,  479,  479,    0,  475,  479,    0,  474,  480,
+      480,  480,  476,    0,  480,  476,  481,  481,  481,    0,
+      477,  481,    0,    0,    0,  475,  478,  477,    0,    0,
+
+        0,    0,    0,  479,    0,  482,  482,  482,    0,  479,
+      482,  480,    0,  478,  483,  483,  483,    0,  481,  483,
+      484,  484,  484,    0,    0,  484,    0,  485,  485,  485,
+      484,  480,  485,    0,    0,  481,    0,  482,    0,    0,
+      482,    0,  486,  486,  486,    0,  483,  486,  487,  487,
+      487,    0,  484,  487,    0,    0,  488,  488,  488,  485,
+        0,  488,  489,  489,  489,    0,  483,  489,  490,  490,
+      490,    0,  485,  490,  486,    0,    0,    0,  486,    0,
+      487,    0,    0,    0,  491,  491,  491,  487,  488,  491,
+      492,  492,  492,    0,  489,  492,  493,  493,  493,    0,
+
+      490,  493,  494,  494,  494,    0,    0,  494,  495,  495,
+      495,    0,    0,  495,    0,  489,  491,    0,    0,    0,
+      490,    0,  492,  491,    0,  498,  498,  498,  493,  492,
+      498,  500,  500,  500,  494,    0,  500,  501,  501,  501,
+      495,    0,  501,    0,  502,  502,  502,    0,  493,  502,
+        0,  503,  503,  503,    0,  494,  503,  498,    0,  495,
+        0,    0,  498,  500,    0,    0,  500,    0,    0,  501,
+      500,    0,  504,  504,  504,    0,  502,  504,    0,  506,
+      506,  506,    0,  503,  506,    0,  501,  507,  507,  507,
+        0,    0,  507,    0,    0,  502,  508,  508,  508,    0,
+
+        0,  508,    0,    0,  504,  509,  509,  509,    0,    0,
+      509,  506,  510,  510,  510,    0,    0,  510,    0,  507,
+        0,  511,  511,  511,    0,  507,  511,    0,  508,  506,
+        0,  512,  512,  512,    0,  508,  512,  509,  513,  513,
+      513,    0,    0,  513,  510,  514,  514,  514,    0,    0,
+      514,    0,    0,  511,  515,  515,  515,    0,  510,  515,
+      516,  516,  516,  512,    0,  516,  517,  517,  517,    0,
+      513,  517,    0,    0,  512,    0,    0,  514,  518,  518,
+      518,    0,    0,  518,    0,    0,  515,    0,  519,  519,
+      519,    0,  516,  519,  514,    0,  513,    0,  517,    0,
+
+      515,    0,    0,  516,  517,    0,  520,  520,  520,    0,
+      518,  520,  522,  522,  522,    0,    0,  522,    0,    0,
+      519,    0,    0,  519,  524,  524,  524,    0,    0,  524,
+      525,  525,  525,    0,    0,  525,    0,    0,  520,    0,
+      526,  526,  526,    0,  522,  526,  527,  527,  527,    0,
+        0,  527,  522,  528,  528,  528,  524,    0,  528,  524,
+        0,    0,  525,    0,  520,  529,  529,  529,    0,    0,
+      529,    0,  526,  525,  530,  530,  530,    0,  527,  530,
+        0,  531,  531,  531,  530,  528,  531,    0,  526,  532,
+      532,  532,    0,    0,  532,    0,    0,  529,  528,  527,
+
+      533,  533,  533,    0,    0,  533,  530,  534,  534,  534,
+        0,    0,  534,  531,    0,    0,  529,  535,  535,  535,
+        0,  532,  535,  536,  536,  536,    0,    0,  536,  537,
+      537,  537,  533,    0,  537,    0,    0,  532,    0,  534,
+      538,  538,  538,    0,    0,  538,  534,    0,    0,  535,
+        0,    0,    0,  533,    0,  536,    0,    0,  540,  540,
+      540,  537,  536,  540,    0,    0,  535,    0,  541,  541,
+      541,    0,  538,  541,  542,  542,  542,    0,    0,  542,
+      537,    0,  543,  543,  543,    0,    0,  543,    0,    0,
+      540,  538,  543,  540,  544,  544,  544,    0,    0,  544,
+
+      541,    0,    0,  545,  545,  545,  542,    0,  545,    0,
+      546,  546,  546,    0,  543,  546,  547,  547,  547,    0,
+      541,  547,  548,  548,  548,  542,  544,  548,  549,  549,
+      549,    0,    0,  549,  543,  545,    0,    0,  545,  550,
+      550,  550,  546,    0,  550,    0,  544,    0,  547,    0,
+        0,  551,  551,  551,  548,  547,  551,  554,  554,  554,
+      549,    0,  554,    0,    0,  546,    0,    0,  549,    0,
+        0,  550,  555,  555,  555,  548,    0,  555,    0,  556,
+      556,  556,  555,  551,  556,  558,  558,  558,    0,  554,
+      558,    0,  550,  560,  560,  560,    0,    0,  560,    0,
+
+        0,    0,  554,  551,  555,  561,  561,  561,    0,    0,
+      561,  556,    0,  562,  562,  562,    0,  558,  562,  563,
+      563,  563,    0,    0,  563,  560,  556,  564,  564,  564,
+        0,  558,  564,  565,  565,  565,    0,  561,  565,  560,
+        0,  567,  567,  567,    0,  562,  567,  568,  568,  568,
+        0,  563,  568,    0,  561,    0,    0,    0,  563,  564,
+        0,    0,  562,    0,    0,  565,  569,  569,  569,    0,
+        0,  569,    0,  567,    0,  564,  570,  570,  570,  568,
+        0,  570,    0,  571,  571,  571,    0,  567,  571,  572,
+      572,  572,    0,    0,  572,    0,  568,    0,  569,  573,
+
+      573,  573,    0,    0,  573,  569,    0,    0,  570,  574,
+      574,  574,    0,    0,  574,  571,    0,  575,  575,  575,
+        0,  572,  575,    0,    0,    0,  572,    0,  570,  571,
+        0,  573,  576,  576,  576,    0,    0,  576,  578,  578,
+      578,  574,    0,  578,    0,    0,  579,  579,  579,  575,
+        0,  579,  580,  580,  580,    0,    0,  580,  581,  581,
+      581,    0,  580,  581,  576,  575,  582,  582,  582,    0,
+      578,  582,    0,    0,  584,  584,  584,  576,  579,  584,
+        0,  583,  583,  583,  580,  579,  583,    0,    0,  578,
+      581,  585,  585,  585,    0,    0,  585,    0,  582,    0,
+
+        0,  582,  586,  586,  586,    0,  584,  586,    0,  581,
+      587,  587,  587,  583,    0,  587,  583,  589,  589,  589,
+        0,    0,  589,  585,    0,    0,    0,  585,    0,  584,
+      590,  590,  590,    0,  586,  590,  591,  591,  591,    0,
+      590,  591,  587,    0,    0,  592,  592,  592,    0,  589,
+      592,  593,  593,  593,    0,    0,  593,    0,    0,    0,
+      589,    0,  590,    0,  594,  594,  594,    0,  591,  594,
+        0,  595,  595,  595,    0,  591,  595,  592,    0,    0,
+        0,  592,    0,  593,    0,    0,  593,  596,  596,  596,
+        0,    0,  596,  597,  597,  597,  594,    0,  597,  598,
+
+      598,  598,    0,  595,  598,    0,  595,  599,  599,  599,
+        0,    0,  599,  600,  600,  600,  594,    0,  600,  596,
+        0,  601,  601,  601,    0,  597,  601,  602,  602,  602,
+        0,  598,  602,  603,  603,  603,  597,    0,  603,  599,
+        0,  604,  604,  604,    0,  600,  604,  605,  605,  605,
+        0,    0,  605,  601,    0,  606,  606,  606,  600,  602,
+      606,  607,  607,  607,    0,  603,  607,    0,    0,    0,
+      602,    0,  603,  604,    0,    0,    0,    0,    0,  605,
+      604,  609,  609,  609,    0,    0,  609,  606,    0,  610,
+      610,  610,  605,  607,  610,  611,  611,  611,    0,    0,
+
+      611,    0,  612,  612,  612,    0,  606,  612,  607,    0,
+      613,  613,  613,  609,    0,  613,    0,    0,    0,    0,
+      609,  610,    0,    0,  614,  614,  614,  611,  610,  614,
+      617,  617,  617,    0,  612,  617,    0,    0,  618,  618,
+      618,    0,  613,  618,    0,    0,    0,    0,  611,  613,
+      619,  619,  619,    0,  612,  619,  614,    0,  620,  620,
+      620,    0,  617,  620,    0,    0,  617,    0,  614,    0,
+      618,    0,    0,  621,  621,  621,    0,  618,  621,  622,
+      622,  622,  619,    0,  622,    0,    0,  623,  623,  623,
+      620,    0,  623,  624,  624,  624,    0,    0,  624,  625,
+
+      625,  625,    0,  619,  625,  621,    0,    0,  626,  626,
+      626,  622,    0,  626,    0,    0,  621,    0,  622,  623,
+        0,  629,  629,  629,    0,  624,  629,    0,  631,  631,
+      631,  625,    0,  631,  625,    0,  633,  633,  633,  623,
+      626,  633,    0,  626,  624,  634,  634,  634,    0,    0,
+      634,    0,    0,  629,    0,    0,    0,    0,    0,  629,
+      631,  635,  635,  635,    0,  631,  635,    0,  633,  636,
+      636,  636,    0,    0,  636,    0,    0,  634,    0,    0,
+      634,  637,  637,  637,    0,    0,  637,    0,  633,  639,
+      639,  639,    0,  635,  639,  642,  642,  642,    0,    0,
+
+      642,  636,  644,  644,  644,    0,  635,  644,    0,  645,
+      645,  645,    0,  637,  645,  646,  646,  646,    0,    0,
+      646,  639,    0,    0,  648,  648,  648,  642,    0,  648,
+      647,  647,  647,    0,  644,  647,    0,  639,  642,    0,
+        0,  645,    0,  649,  649,  649,    0,  646,  649,  650,
+      650,  650,    0,  649,  650,  644,  648,    0,    0,    0,
+      645,    0,  647,    0,  651,  651,  651,  646,    0,  651,
+        0,    0,    0,  647,    0,  649,    0,  652,  652,  652,
+        0,  650,  652,  653,  653,  653,    0,    0,  653,  654,
+      654,  654,    0,    0,  654,  649,  651,  655,  655,  655,
+
+        0,    0,  655,  656,  656,  656,    0,    0,  656,  652,
+        0,  657,  657,  657,    0,  653,  657,    0,    0,    0,
+      652,  654,  653,  658,  658,  658,    0,    0,  658,  655,
+        0,    0,    0,    0,    0,  656,  655,  654,  656,  660,
+      660,  660,    0,  657,  660,    0,  661,  661,  661,    0,
+        0,  661,  662,  662,  662,  658,    0,  662,  657,    0,
+      663,  663,  663,    0,    0,  663,    0,  664,  664,  664,
+        0,  660,  664,    0,  665,  665,  665,  660,  661,  665,
+      666,  666,  666,    0,  662,  666,  661,    0,    0,    0,
+        0,  662,  663,  667,  667,  667,    0,    0,  667,  664,
+
+      668,  668,  668,  663,    0,  668,  665,    0,  669,  669,
+      669,    0,  666,  669,  670,  670,  670,    0,    0,  670,
+      664,    0,  673,  673,  673,  667,  665,  673,    0,    0,
+        0,    0,  668,  674,  674,  674,    0,    0,  674,    0,
+      669,  667,  675,  675,  675,    0,  670,  675,  676,  676,
+      676,    0,    0,  676,  673,    0,  677,  677,  677,    0,
+      669,  677,  678,  678,  678,  674,    0,  678,    0,  673,
+      680,  680,  680,  674,  675,  680,  681,  681,  681,    0,
+      676,  681,  684,  684,  684,    0,    0,  684,  677,    0,
+      686,  686,  686,    0,  678,  686,    0,    0,  687,  687,
+
+      687,  678,  680,  687,  688,  688,  688,    0,  681,  688,
+        0,    0,    0,    0,  684,    0,  680,    0,  689,  689,
+      689,    0,  686,  689,  690,  690,  690,    0,  684,  690,
+      687,    0,  692,  692,  692,    0,  688,  692,  693,  693,
+      693,    0,  686,  693,  694,  694,  694,    0,    0,  694,
+      689,    0,  687,  695,  695,  695,  690,  688,  695,    0,
+        0,  696,  696,  696,  692,    0,  696,  697,  697,  697,
+      693,  689,  697,  699,  699,  699,  694,    0,  699,    0,
+        0,  693,  701,  701,  701,  695,    0,  701,    0,    0,
+        0,    0,  695,  696,    0,    0,  694,    0,    0,  697,
+
+        0,    0,    0,    0,  696,  699,  697,  703,  703,  703,
+        0,    0,  703,    0,  701,    0,    0,  704,  704,  704,
+      699,  701,  704,  708,  708,  708,    0,    0,  708,    0,
+      709,  709,  709,    0,    0,  709,  711,  711,  711,  703,
+        0,  711,  712,  712,  712,    0,    0,  712,    0,  704,
+        0,    0,  713,  713,  713,  708,  704,  713,    0,  703,
+        0,  708,  709,    0,  714,  714,  714,    0,  711,  714,
+        0,  715,  715,  715,  712,  711,  715,    0,  709,    0,
+      718,  718,  718,    0,  713,  718,    0,  719,  719,  719,
+        0,    0,  719,  720,  720,  720,  714,  719,  720,  721,
+
+      721,  721,    0,  715,  721,  713,  722,  722,  722,    0,
+        0,  722,  718,    0,  715,    0,  723,  723,  723,  719,
+        0,  723,  724,  724,  724,  720,    0,  724,  725,  725,
+      725,  721,    0,  725,  726,  726,  726,  718,  722,  726,
+        0,  727,  727,  727,    0,  720,  727,  721,  723,    0,
+        0,  727,    0,    0,  724,    0,  723,  728,  728,  728,
+      725,    0,  728,    0,    0,    0,  726,  729,  729,  729,
+        0,    0,  729,  727,  731,  731,  731,    0,    0,  731,
+      733,  733,  733,    0,    0,  733,    0,  726,    0,  728,
+        0,  734,  734,  734,    0,  728,  734,    0,    0,  729,
+
+        0,  734,  735,  735,  735,    0,  731,  735,  736,  736,
+      736,    0,  733,  736,  737,  737,  737,    0,    0,  737,
+      739,  739,  739,  734,    0,  739,    0,    0,  733,    0,
+      742,  742,  742,    0,  735,  742,  743,  743,  743,    0,
+      736,  743,  744,  744,  744,    0,  737,  744,  747,  747,
+      747,  735,  739,  747,  749,  749,  749,    0,    0,  749,
+        0,  737,  742,  739,  750,  750,  750,    0,  743,  750,
+      753,  753,  753,  742,  744,  753,    0,  752,  752,  752,
+      747,  744,  752,    0,  743,    0,  749,  752,  754,  754,
+      754,    0,    0,  754,    0,  747,  750,    0,    0,  749,
+
+        0,    0,  753,  755,  755,  755,    0,    0,  755,  752,
+        0,  753,  756,  756,  756,  750,    0,  756,    0,    0,
+      754,  757,  757,  757,    0,    0,  757,  758,  758,  758,
+        0,  757,  758,    0,  754,  755,  759,  759,  759,    0,
+        0,  759,    0,    0,  756,  760,  760,  760,    0,    0,
+      760,    0,  755,  757,    0,  761,  761,  761,    0,  758,
+      761,    0,  762,  762,  762,    0,  758,  762,  759,    0,
+      763,  763,  763,    0,    0,  763,    0,  760,  765,  765,
+      765,    0,    0,  765,  759,    0,    0,  761,  760,    0,
+      766,  766,  766,    0,  762,  766,    0,    0,  767,  767,
+
+      767,  762,  763,  767,  768,  768,  768,    0,    0,  768,
+      765,  770,  770,  770,    0,    0,  770,    0,    0,  771,
+      771,  771,  766,  763,  771,    0,    0,  765,    0,    0,
+      767,    0,    0,    0,    0,  767,  768,  766,    0,  772,
+      772,  772,  768,  770,  772,  773,  773,  773,    0,    0,
+      773,  771,  774,  774,  774,    0,    0,  774,  775,  775,
+      775,    0,  771,  775,  777,  777,  777,    0,    0,  777,
+        0,  772,    0,    0,  778,  778,  778,  773,  772,  778,
+        0,  780,  780,  780,  774,    0,  780,  781,  781,  781,
+      775,  774,  781,    0,    0,    0,  777,  775,  782,  782,
+
+      782,    0,    0,  782,    0,    0,  778,    0,    0,  783,
+      783,  783,  777,  780,  783,  784,  784,  784,    0,  781,
+      784,  785,  785,  785,    0,  778,  785,  786,  786,  786,
+      782,    0,  786,  780,  781,    0,    0,  787,  787,  787,
+        0,  783,  787,    0,    0,  782,    0,  784,    0,  788,
+      788,  788,  783,  785,  788,  789,  789,  789,    0,  786,
+      789,  790,  790,  790,    0,    0,  790,  784,    0,  787,
+      791,  791,  791,    0,  785,  791,    0,    0,    0,  786,
+        0,  788,    0,    0,    0,  787,    0,  789,    0,  792,
+      792,  792,  788,  790,  792,  793,  793,  793,  789,    0,
+
+      793,    0,  791,    0,    0,  795,  795,  795,  791,    0,
+      795,  796,  796,  796,    0,    0,  796,  797,  797,  797,
+        0,  792,  797,  799,  799,  799,    0,  793,  799,  800,
+      800,  800,    0,    0,  800,  793,  792,  795,    0,  802,
+      802,  802,    0,  796,  802,  803,  803,  803,    0,  797,
+      803,    0,  796,    0,    0,  799,    0,  804,  804,  804,
+      797,  800,  804,    0,    0,    0,    0,    0,  800,    0,
+        0,  802,    0,    0,    0,    0,    0,  803,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,    0,    0,  804,
+      802,    0,    0,    0,    0,    0,    0,  803,  807,  807,
+
+      807,  807,  807,  808,  808,  808,  808,  808,  809,    0,
+      809,  809,  809,  810,    0,  810,    0,  810,  811,  811,
+      811,  811,  811,  812,  812,  812,  812,  812,  813,    0,
+      813,  813,  813,  814,  814,  814,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806,  806,  806,
+      806,  806,  806,  806,  806,  806,  806,  806
+
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -2035,20 +2112,21 @@ static char *yy_last_accepting_cpos;
 extern int parser6__flex_debug;
 int parser6__flex_debug = 1;
 
-static yyconst flex_int16_t yy_rule_linenum[111] =
+static yyconst flex_int16_t yy_rule_linenum[115] =
     {   0,
       130,  132,  134,  139,  140,  145,  146,  147,  159,  162,
-      167,  174,  183,  192,  201,  210,  219,  228,  240,  250,
-      260,  270,  281,  291,  301,  311,  321,  331,  340,  349,
-      358,  373,  388,  397,  406,  415,  424,  433,  442,  451,
-      460,  469,  478,  487,  496,  505,  514,  523,  533,  542,
-      551,  560,  569,  578,  587,  596,  605,  614,  624,  634,
-      644,  653,  662,  671,  682,  692,  701,  711,  720,  729,
-      738,  747,  756,  765,  775,  784,  793,  802,  811,  820,
-      829,  838,  847,  856,  865,  874,  883,  892,  901,  910,
-      919,  928,  937, 1035, 1040, 1045, 1050, 1051, 1052, 1053,
-
-     1054, 1055, 1057, 1075, 1088, 1093, 1097, 1099, 1101, 1103
+      167,  174,  183,  192,  201,  210,  219,  228,  240,  249,
+      258,  267,  277,  287,  297,  308,  318,  328,  338,  348,
+      358,  368,  377,  386,  395,  410,  425,  434,  443,  452,
+      461,  470,  479,  488,  497,  506,  515,  524,  533,  542,
+      551,  560,  570,  579,  588,  597,  606,  615,  624,  633,
+      642,  651,  661,  671,  681,  690,  699,  708,  719,  729,
+      738,  748,  757,  766,  775,  784,  793,  802,  812,  821,
+      830,  839,  848,  857,  866,  875,  884,  893,  902,  911,
+      920,  929,  938,  947,  956,  965,  974, 1072, 1077, 1082,
+
+     1087, 1088, 1089, 1090, 1091, 1092, 1094, 1112, 1125, 1130,
+     1134, 1136, 1138, 1140
     } ;
 
 /* The intent behind this definition is that it'll catch
@@ -2119,7 +2197,7 @@ unsigned int comment_start_line = 0;
 // by moving it ahead by parser6_leng bytes. parser6_leng specifies the length of the
 // currently matched token.
 #define YY_USER_ACTION  driver.loc_.columns(parser6_leng);
-#line 2123 "dhcp6_lexer.cc"
+#line 2201 "dhcp6_lexer.cc"
 
 #define INITIAL 0
 #define COMMENT 1
@@ -2445,7 +2523,7 @@ YY_DECL
     }
 
 
-#line 2449 "dhcp6_lexer.cc"
+#line 2527 "dhcp6_lexer.cc"
 
        while ( /*CONSTCOND*/1 )                /* loops until end-of-file is reached */
                {
@@ -2474,13 +2552,13 @@ yy_match:
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                               if ( yy_current_state >= 773 )
+                               if ( yy_current_state >= 807 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
                        ++yy_cp;
                        }
-               while ( yy_current_state != 772 );
+               while ( yy_current_state != 806 );
                yy_cp = (yy_last_accepting_cpos);
                yy_current_state = (yy_last_accepting_state);
 
@@ -2499,13 +2577,13 @@ do_action:      /* This label is used only to access EOF actions. */
                        {
                        if ( yy_act == 0 )
                                fprintf( stderr, "--scanner backing up\n" );
-                       else if ( yy_act < 111 )
+                       else if ( yy_act < 115 )
                                fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n",
                                         (long)yy_rule_linenum[yy_act], parser6_text );
-                       else if ( yy_act == 111 )
+                       else if ( yy_act == 115 )
                                fprintf( stderr, "--accepting default rule (\"%s\")\n",
                                         parser6_text );
-                       else if ( yy_act == 112 )
+                       else if ( yy_act == 116 )
                                fprintf( stderr, "--(end of buffer or a NUL)\n" );
                        else
                                fprintf( stderr, "--EOF (start condition %d)\n", YY_START );
@@ -2699,6 +2777,42 @@ YY_RULE_SETUP
 case 19:
 YY_RULE_SETUP
 #line 240 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DATABASE_TYPE:
+        return isc::dhcp::Dhcp6Parser::make_MEMFILE(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("memfile", driver.loc_);
+    }
+}
+       YY_BREAK
+case 20:
+YY_RULE_SETUP
+#line 249 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DATABASE_TYPE:
+        return isc::dhcp::Dhcp6Parser::make_MYSQL(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("mysql", driver.loc_);
+    }
+}
+       YY_BREAK
+case 21:
+YY_RULE_SETUP
+#line 258 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::DATABASE_TYPE:
+        return isc::dhcp::Dhcp6Parser::make_POSTGRESQL(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("postgresql", driver.loc_);
+    }
+}
+       YY_BREAK
+case 22:
+YY_RULE_SETUP
+#line 267 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2709,9 +2823,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 20:
+case 23:
 YY_RULE_SETUP
-#line 250 "dhcp6_lexer.ll"
+#line 277 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2722,9 +2836,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 21:
+case 24:
 YY_RULE_SETUP
-#line 260 "dhcp6_lexer.ll"
+#line 287 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2735,9 +2849,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 22:
+case 25:
 YY_RULE_SETUP
-#line 270 "dhcp6_lexer.ll"
+#line 297 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2749,9 +2863,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 23:
+case 26:
 YY_RULE_SETUP
-#line 281 "dhcp6_lexer.ll"
+#line 308 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2762,9 +2876,22 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 24:
+case 27:
 YY_RULE_SETUP
-#line 291 "dhcp6_lexer.ll"
+#line 318 "dhcp6_lexer.ll"
+{
+    switch(driver.ctx_) {
+    case isc::dhcp::Parser6Context::LEASE_DATABASE:
+    case isc::dhcp::Parser6Context::HOSTS_DATABASE:
+        return isc::dhcp::Dhcp6Parser::make_CONNECT_TIMEOUT(driver.loc_);
+    default:
+        return isc::dhcp::Dhcp6Parser::make_STRING("connect-timeout", driver.loc_);
+    }
+}
+       YY_BREAK
+case 28:
+YY_RULE_SETUP
+#line 328 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2775,9 +2902,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 25:
+case 29:
 YY_RULE_SETUP
-#line 301 "dhcp6_lexer.ll"
+#line 338 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2788,9 +2915,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 26:
+case 30:
 YY_RULE_SETUP
-#line 311 "dhcp6_lexer.ll"
+#line 348 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2801,9 +2928,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 27:
+case 31:
 YY_RULE_SETUP
-#line 321 "dhcp6_lexer.ll"
+#line 358 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2814,9 +2941,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 28:
+case 32:
 YY_RULE_SETUP
-#line 331 "dhcp6_lexer.ll"
+#line 368 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2826,9 +2953,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 29:
+case 33:
 YY_RULE_SETUP
-#line 340 "dhcp6_lexer.ll"
+#line 377 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2838,9 +2965,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 30:
+case 34:
 YY_RULE_SETUP
-#line 349 "dhcp6_lexer.ll"
+#line 386 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2850,9 +2977,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 31:
+case 35:
 YY_RULE_SETUP
-#line 358 "dhcp6_lexer.ll"
+#line 395 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -2868,9 +2995,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 32:
+case 36:
 YY_RULE_SETUP
-#line 373 "dhcp6_lexer.ll"
+#line 410 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LEASE_DATABASE:
@@ -2886,9 +3013,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 33:
+case 37:
 YY_RULE_SETUP
-#line 388 "dhcp6_lexer.ll"
+#line 425 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -2898,9 +3025,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 34:
+case 38:
 YY_RULE_SETUP
-#line 397 "dhcp6_lexer.ll"
+#line 434 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2910,9 +3037,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 35:
+case 39:
 YY_RULE_SETUP
-#line 406 "dhcp6_lexer.ll"
+#line 443 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -2922,9 +3049,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 36:
+case 40:
 YY_RULE_SETUP
-#line 415 "dhcp6_lexer.ll"
+#line 452 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2934,9 +3061,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 37:
+case 41:
 YY_RULE_SETUP
-#line 424 "dhcp6_lexer.ll"
+#line 461 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2946,9 +3073,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 38:
+case 42:
 YY_RULE_SETUP
-#line 433 "dhcp6_lexer.ll"
+#line 470 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2958,9 +3085,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 39:
+case 43:
 YY_RULE_SETUP
-#line 442 "dhcp6_lexer.ll"
+#line 479 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2970,9 +3097,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 40:
+case 44:
 YY_RULE_SETUP
-#line 451 "dhcp6_lexer.ll"
+#line 488 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::PD_POOLS:
@@ -2982,9 +3109,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 41:
+case 45:
 YY_RULE_SETUP
-#line 460 "dhcp6_lexer.ll"
+#line 497 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::POOLS:
@@ -2994,9 +3121,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 42:
+case 46:
 YY_RULE_SETUP
-#line 469 "dhcp6_lexer.ll"
+#line 506 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3006,9 +3133,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 43:
+case 47:
 YY_RULE_SETUP
-#line 478 "dhcp6_lexer.ll"
+#line 515 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3018,9 +3145,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 44:
+case 48:
 YY_RULE_SETUP
-#line 487 "dhcp6_lexer.ll"
+#line 524 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3030,9 +3157,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 45:
+case 49:
 YY_RULE_SETUP
-#line 496 "dhcp6_lexer.ll"
+#line 533 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3042,9 +3169,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 46:
+case 50:
 YY_RULE_SETUP
-#line 505 "dhcp6_lexer.ll"
+#line 542 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3054,9 +3181,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 47:
+case 51:
 YY_RULE_SETUP
-#line 514 "dhcp6_lexer.ll"
+#line 551 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3066,9 +3193,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 48:
+case 52:
 YY_RULE_SETUP
-#line 523 "dhcp6_lexer.ll"
+#line 560 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3079,9 +3206,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 49:
+case 53:
 YY_RULE_SETUP
-#line 533 "dhcp6_lexer.ll"
+#line 570 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3091,9 +3218,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 50:
+case 54:
 YY_RULE_SETUP
-#line 542 "dhcp6_lexer.ll"
+#line 579 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3103,9 +3230,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 51:
+case 55:
 YY_RULE_SETUP
-#line 551 "dhcp6_lexer.ll"
+#line 588 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3115,9 +3242,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 52:
+case 56:
 YY_RULE_SETUP
-#line 560 "dhcp6_lexer.ll"
+#line 597 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3127,9 +3254,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 53:
+case 57:
 YY_RULE_SETUP
-#line 569 "dhcp6_lexer.ll"
+#line 606 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGING:
@@ -3139,9 +3266,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 54:
+case 58:
 YY_RULE_SETUP
-#line 578 "dhcp6_lexer.ll"
+#line 615 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3151,9 +3278,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 55:
+case 59:
 YY_RULE_SETUP
-#line 587 "dhcp6_lexer.ll"
+#line 624 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OUTPUT_OPTIONS:
@@ -3163,9 +3290,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 56:
+case 60:
 YY_RULE_SETUP
-#line 596 "dhcp6_lexer.ll"
+#line 633 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3175,9 +3302,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 57:
+case 61:
 YY_RULE_SETUP
-#line 605 "dhcp6_lexer.ll"
+#line 642 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::LOGGERS:
@@ -3187,9 +3314,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 58:
+case 62:
 YY_RULE_SETUP
-#line 614 "dhcp6_lexer.ll"
+#line 651 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3200,9 +3327,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 59:
+case 63:
 YY_RULE_SETUP
-#line 624 "dhcp6_lexer.ll"
+#line 661 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3213,9 +3340,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 60:
+case 64:
 YY_RULE_SETUP
-#line 634 "dhcp6_lexer.ll"
+#line 671 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CLIENT_CLASSES:
@@ -3226,9 +3353,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 61:
+case 65:
 YY_RULE_SETUP
-#line 644 "dhcp6_lexer.ll"
+#line 681 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3238,9 +3365,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 62:
+case 66:
 YY_RULE_SETUP
-#line 653 "dhcp6_lexer.ll"
+#line 690 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3250,9 +3377,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 63:
+case 67:
 YY_RULE_SETUP
-#line 662 "dhcp6_lexer.ll"
+#line 699 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3262,9 +3389,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 64:
+case 68:
 YY_RULE_SETUP
-#line 671 "dhcp6_lexer.ll"
+#line 708 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::MAC_SOURCES:
@@ -3276,9 +3403,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 65:
+case 69:
 YY_RULE_SETUP
-#line 682 "dhcp6_lexer.ll"
+#line 719 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOST_RESERVATION_IDENTIFIERS:
@@ -3289,9 +3416,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 66:
+case 70:
 YY_RULE_SETUP
-#line 692 "dhcp6_lexer.ll"
+#line 729 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RESERVATIONS:
@@ -3301,9 +3428,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 67:
+case 71:
 YY_RULE_SETUP
-#line 701 "dhcp6_lexer.ll"
+#line 738 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3314,9 +3441,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 68:
+case 72:
 YY_RULE_SETUP
-#line 711 "dhcp6_lexer.ll"
+#line 748 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DATA:
@@ -3326,9 +3453,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 69:
+case 73:
 YY_RULE_SETUP
-#line 720 "dhcp6_lexer.ll"
+#line 757 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3338,9 +3465,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 70:
+case 74:
 YY_RULE_SETUP
-#line 729 "dhcp6_lexer.ll"
+#line 766 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3350,9 +3477,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 71:
+case 75:
 YY_RULE_SETUP
-#line 738 "dhcp6_lexer.ll"
+#line 775 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::OPTION_DEF:
@@ -3362,9 +3489,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 72:
+case 76:
 YY_RULE_SETUP
-#line 747 "dhcp6_lexer.ll"
+#line 784 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SUBNET6:
@@ -3374,9 +3501,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 73:
+case 77:
 YY_RULE_SETUP
-#line 756 "dhcp6_lexer.ll"
+#line 793 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::RELAY:
@@ -3386,9 +3513,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 74:
+case 78:
 YY_RULE_SETUP
-#line 765 "dhcp6_lexer.ll"
+#line 802 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3398,9 +3525,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 75:
+case 79:
 YY_RULE_SETUP
-#line 775 "dhcp6_lexer.ll"
+#line 812 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -3410,9 +3537,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 76:
+case 80:
 YY_RULE_SETUP
-#line 784 "dhcp6_lexer.ll"
+#line 821 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::HOOKS_LIBRARIES:
@@ -3422,9 +3549,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 77:
+case 81:
 YY_RULE_SETUP
-#line 793 "dhcp6_lexer.ll"
+#line 830 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3434,9 +3561,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 78:
+case 82:
 YY_RULE_SETUP
-#line 802 "dhcp6_lexer.ll"
+#line 839 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3446,9 +3573,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 79:
+case 83:
 YY_RULE_SETUP
-#line 811 "dhcp6_lexer.ll"
+#line 848 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3458,9 +3585,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 80:
+case 84:
 YY_RULE_SETUP
-#line 820 "dhcp6_lexer.ll"
+#line 857 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DUID_TYPE:
@@ -3470,9 +3597,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 81:
+case 85:
 YY_RULE_SETUP
-#line 829 "dhcp6_lexer.ll"
+#line 866 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3482,9 +3609,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 82:
+case 86:
 YY_RULE_SETUP
-#line 838 "dhcp6_lexer.ll"
+#line 875 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3494,9 +3621,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 83:
+case 87:
 YY_RULE_SETUP
-#line 847 "dhcp6_lexer.ll"
+#line 884 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3506,9 +3633,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 84:
+case 88:
 YY_RULE_SETUP
-#line 856 "dhcp6_lexer.ll"
+#line 893 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::SERVER_ID:
@@ -3518,9 +3645,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 85:
+case 89:
 YY_RULE_SETUP
-#line 865 "dhcp6_lexer.ll"
+#line 902 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3530,9 +3657,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 86:
+case 90:
 YY_RULE_SETUP
-#line 874 "dhcp6_lexer.ll"
+#line 911 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3542,9 +3669,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 87:
+case 91:
 YY_RULE_SETUP
-#line 883 "dhcp6_lexer.ll"
+#line 920 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3554,9 +3681,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 88:
+case 92:
 YY_RULE_SETUP
-#line 892 "dhcp6_lexer.ll"
+#line 929 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -3566,9 +3693,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 89:
+case 93:
 YY_RULE_SETUP
-#line 901 "dhcp6_lexer.ll"
+#line 938 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONTROL_SOCKET:
@@ -3578,9 +3705,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 90:
+case 94:
 YY_RULE_SETUP
-#line 910 "dhcp6_lexer.ll"
+#line 947 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::DHCP6:
@@ -3590,9 +3717,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 91:
+case 95:
 YY_RULE_SETUP
-#line 919 "dhcp6_lexer.ll"
+#line 956 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3602,9 +3729,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 92:
+case 96:
 YY_RULE_SETUP
-#line 928 "dhcp6_lexer.ll"
+#line 965 "dhcp6_lexer.ll"
 {
     switch(driver.ctx_) {
     case isc::dhcp::Parser6Context::CONFIG:
@@ -3614,9 +3741,9 @@ YY_RULE_SETUP
     }
 }
        YY_BREAK
-case 93:
+case 97:
 YY_RULE_SETUP
-#line 937 "dhcp6_lexer.ll"
+#line 974 "dhcp6_lexer.ll"
 {
     // A string has been matched. It contains the actual string and single quotes.
     // We need to get those quotes out of the way and just use its content, e.g.
@@ -3715,65 +3842,65 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_STRING(decoded, driver.loc_);
 }
        YY_BREAK
-case 94:
-/* rule 94 can match eol */
+case 98:
+/* rule 98 can match eol */
 YY_RULE_SETUP
-#line 1035 "dhcp6_lexer.ll"
+#line 1072 "dhcp6_lexer.ll"
 {
     // Bad string with a forbidden control character inside
     driver.error(driver.loc_, "Invalid control in " + std::string(parser6_text));
 }
        YY_BREAK
-case 95:
-/* rule 95 can match eol */
+case 99:
+/* rule 99 can match eol */
 YY_RULE_SETUP
-#line 1040 "dhcp6_lexer.ll"
+#line 1077 "dhcp6_lexer.ll"
 {
     // Bad string with a bad escape inside
     driver.error(driver.loc_, "Bad escape in " + std::string(parser6_text));
 }
        YY_BREAK
-case 96:
+case 100:
 YY_RULE_SETUP
-#line 1045 "dhcp6_lexer.ll"
+#line 1082 "dhcp6_lexer.ll"
 {
     // Bad string with an open escape at the end
     driver.error(driver.loc_, "Overflow escape in " + std::string(parser6_text));
 }
        YY_BREAK
-case 97:
+case 101:
 YY_RULE_SETUP
-#line 1050 "dhcp6_lexer.ll"
+#line 1087 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 98:
+case 102:
 YY_RULE_SETUP
-#line 1051 "dhcp6_lexer.ll"
+#line 1088 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RSQUARE_BRACKET(driver.loc_); }
        YY_BREAK
-case 99:
+case 103:
 YY_RULE_SETUP
-#line 1052 "dhcp6_lexer.ll"
+#line 1089 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_LCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 100:
+case 104:
 YY_RULE_SETUP
-#line 1053 "dhcp6_lexer.ll"
+#line 1090 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_RCURLY_BRACKET(driver.loc_); }
        YY_BREAK
-case 101:
+case 105:
 YY_RULE_SETUP
-#line 1054 "dhcp6_lexer.ll"
+#line 1091 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COMMA(driver.loc_); }
        YY_BREAK
-case 102:
+case 106:
 YY_RULE_SETUP
-#line 1055 "dhcp6_lexer.ll"
+#line 1092 "dhcp6_lexer.ll"
 { return isc::dhcp::Dhcp6Parser::make_COLON(driver.loc_); }
        YY_BREAK
-case 103:
+case 107:
 YY_RULE_SETUP
-#line 1057 "dhcp6_lexer.ll"
+#line 1094 "dhcp6_lexer.ll"
 {
     // An integer was found.
     std::string tmp(parser6_text);
@@ -3792,9 +3919,9 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_INTEGER(integer, driver.loc_);
 }
        YY_BREAK
-case 104:
+case 108:
 YY_RULE_SETUP
-#line 1075 "dhcp6_lexer.ll"
+#line 1112 "dhcp6_lexer.ll"
 {
     // A floating point was found.
     std::string tmp(parser6_text);
@@ -3808,43 +3935,43 @@ YY_RULE_SETUP
     return isc::dhcp::Dhcp6Parser::make_FLOAT(fp, driver.loc_);
 }
        YY_BREAK
-case 105:
+case 109:
 YY_RULE_SETUP
-#line 1088 "dhcp6_lexer.ll"
+#line 1125 "dhcp6_lexer.ll"
 {
     string tmp(parser6_text);
     return isc::dhcp::Dhcp6Parser::make_BOOLEAN(tmp == "true", driver.loc_);
 }
        YY_BREAK
-case 106:
+case 110:
 YY_RULE_SETUP
-#line 1093 "dhcp6_lexer.ll"
+#line 1130 "dhcp6_lexer.ll"
 {
    return isc::dhcp::Dhcp6Parser::make_NULL_TYPE(driver.loc_);
 }
        YY_BREAK
-case 107:
+case 111:
 YY_RULE_SETUP
-#line 1097 "dhcp6_lexer.ll"
+#line 1134 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON true reserved keyword is lower case only");
        YY_BREAK
-case 108:
+case 112:
 YY_RULE_SETUP
-#line 1099 "dhcp6_lexer.ll"
+#line 1136 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON false reserved keyword is lower case only");
        YY_BREAK
-case 109:
+case 113:
 YY_RULE_SETUP
-#line 1101 "dhcp6_lexer.ll"
+#line 1138 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "JSON null reserved keyword is lower case only");
        YY_BREAK
-case 110:
+case 114:
 YY_RULE_SETUP
-#line 1103 "dhcp6_lexer.ll"
+#line 1140 "dhcp6_lexer.ll"
 driver.error (driver.loc_, "Invalid character: " + std::string(parser6_text));
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 1105 "dhcp6_lexer.ll"
+#line 1142 "dhcp6_lexer.ll"
 {
     if (driver.states_.empty()) {
         return isc::dhcp::Dhcp6Parser::make_END(driver.loc_);
@@ -3868,12 +3995,12 @@ case YY_STATE_EOF(INITIAL):
     BEGIN(DIR_EXIT);
 }
        YY_BREAK
-case 111:
+case 115:
 YY_RULE_SETUP
-#line 1128 "dhcp6_lexer.ll"
+#line 1165 "dhcp6_lexer.ll"
 ECHO;
        YY_BREAK
-#line 3877 "dhcp6_lexer.cc"
+#line 4004 "dhcp6_lexer.cc"
 
        case YY_END_OF_BUFFER:
                {
@@ -4190,7 +4317,7 @@ static int yy_get_next_buffer (void)
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                       if ( yy_current_state >= 773 )
+                       if ( yy_current_state >= 807 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
@@ -4223,11 +4350,11 @@ static int yy_get_next_buffer (void)
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-               if ( yy_current_state >= 773 )
+               if ( yy_current_state >= 807 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (flex_int16_t) yy_c];
-       yy_is_jam = (yy_current_state == 772);
+       yy_is_jam = (yy_current_state == 806);
 
                return yy_is_jam ? 0 : yy_current_state;
 }
@@ -4976,7 +5103,7 @@ void parser6_free (void * ptr )
 
 /* %ok-for-header */
 
-#line 1128 "dhcp6_lexer.ll"
+#line 1165 "dhcp6_lexer.ll"
 
 
 
index 59b6629395616f3e78dd7cc7a4818c056cb5dac0..927eaaf0ca06395f6e8b6175ab96f191981ae77c 100644 (file)
@@ -253,24 +253,25 @@ namespace isc { namespace dhcp {
   {
       switch (that.type_get ())
     {
-      case 119: // value
-      case 338: // duid_type
+      case 123: // value
+      case 165: // db_type
+      case 344: // duid_type
         value.move< ElementPtr > (that.value);
         break;
 
-      case 105: // "boolean"
+      case 109: // "boolean"
         value.move< bool > (that.value);
         break;
 
-      case 104: // "floating point"
+      case 108: // "floating point"
         value.move< double > (that.value);
         break;
 
-      case 103: // "integer"
+      case 107: // "integer"
         value.move< int64_t > (that.value);
         break;
 
-      case 102: // "constant string"
+      case 106: // "constant string"
         value.move< std::string > (that.value);
         break;
 
@@ -289,24 +290,25 @@ namespace isc { namespace dhcp {
     state = that.state;
       switch (that.type_get ())
     {
-      case 119: // value
-      case 338: // duid_type
+      case 123: // value
+      case 165: // db_type
+      case 344: // duid_type
         value.copy< ElementPtr > (that.value);
         break;
 
-      case 105: // "boolean"
+      case 109: // "boolean"
         value.copy< bool > (that.value);
         break;
 
-      case 104: // "floating point"
+      case 108: // "floating point"
         value.copy< double > (that.value);
         break;
 
-      case 103: // "integer"
+      case 107: // "integer"
         value.copy< int64_t > (that.value);
         break;
 
-      case 102: // "constant string"
+      case 106: // "constant string"
         value.copy< std::string > (that.value);
         break;
 
@@ -346,46 +348,53 @@ namespace isc { namespace dhcp {
         << yysym.location << ": ";
     switch (yytype)
     {
-            case 102: // "constant string"
+            case 106: // "constant string"
 
-#line 193 "dhcp6_parser.yy" // lalr1.cc:636
+#line 198 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< std::string > (); }
-#line 354 "dhcp6_parser.cc" // lalr1.cc:636
+#line 356 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 103: // "integer"
+      case 107: // "integer"
 
-#line 193 "dhcp6_parser.yy" // lalr1.cc:636
+#line 198 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< int64_t > (); }
-#line 361 "dhcp6_parser.cc" // lalr1.cc:636
+#line 363 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 104: // "floating point"
+      case 108: // "floating point"
 
-#line 193 "dhcp6_parser.yy" // lalr1.cc:636
+#line 198 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< double > (); }
-#line 368 "dhcp6_parser.cc" // lalr1.cc:636
+#line 370 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 105: // "boolean"
+      case 109: // "boolean"
 
-#line 193 "dhcp6_parser.yy" // lalr1.cc:636
+#line 198 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< bool > (); }
-#line 375 "dhcp6_parser.cc" // lalr1.cc:636
+#line 377 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 119: // value
+      case 123: // value
 
-#line 193 "dhcp6_parser.yy" // lalr1.cc:636
+#line 198 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 382 "dhcp6_parser.cc" // lalr1.cc:636
+#line 384 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
-      case 338: // duid_type
+      case 165: // db_type
 
-#line 193 "dhcp6_parser.yy" // lalr1.cc:636
+#line 198 "dhcp6_parser.yy" // lalr1.cc:636
         { yyoutput << yysym.value.template as< ElementPtr > (); }
-#line 389 "dhcp6_parser.cc" // lalr1.cc:636
+#line 391 "dhcp6_parser.cc" // lalr1.cc:636
+        break;
+
+      case 344: // duid_type
+
+#line 198 "dhcp6_parser.yy" // lalr1.cc:636
+        { yyoutput << yysym.value.template as< ElementPtr > (); }
+#line 398 "dhcp6_parser.cc" // lalr1.cc:636
         break;
 
 
@@ -585,24 +594,25 @@ namespace isc { namespace dhcp {
          when using variants.  */
         switch (yyr1_[yyn])
     {
-      case 119: // value
-      case 338: // duid_type
+      case 123: // value
+      case 165: // db_type
+      case 344: // duid_type
         yylhs.value.build< ElementPtr > ();
         break;
 
-      case 105: // "boolean"
+      case 109: // "boolean"
         yylhs.value.build< bool > ();
         break;
 
-      case 104: // "floating point"
+      case 108: // "floating point"
         yylhs.value.build< double > ();
         break;
 
-      case 103: // "integer"
+      case 107: // "integer"
         yylhs.value.build< int64_t > ();
         break;
 
-      case 102: // "constant string"
+      case 106: // "constant string"
         yylhs.value.build< std::string > ();
         break;
 
@@ -624,248 +634,248 @@ namespace isc { namespace dhcp {
           switch (yyn)
             {
   case 2:
-#line 202 "dhcp6_parser.yy" // lalr1.cc:859
+#line 207 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.NO_KEYWORD; }
-#line 630 "dhcp6_parser.cc" // lalr1.cc:859
+#line 640 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 4:
-#line 203 "dhcp6_parser.yy" // lalr1.cc:859
+#line 208 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.CONFIG; }
-#line 636 "dhcp6_parser.cc" // lalr1.cc:859
+#line 646 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 6:
-#line 204 "dhcp6_parser.yy" // lalr1.cc:859
+#line 209 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.DHCP6; }
-#line 642 "dhcp6_parser.cc" // lalr1.cc:859
+#line 652 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 8:
-#line 205 "dhcp6_parser.yy" // lalr1.cc:859
+#line 210 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.INTERFACES_CONFIG; }
-#line 648 "dhcp6_parser.cc" // lalr1.cc:859
+#line 658 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 10:
-#line 206 "dhcp6_parser.yy" // lalr1.cc:859
+#line 211 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.SUBNET6; }
-#line 654 "dhcp6_parser.cc" // lalr1.cc:859
+#line 664 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 12:
-#line 207 "dhcp6_parser.yy" // lalr1.cc:859
+#line 212 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.POOLS; }
-#line 660 "dhcp6_parser.cc" // lalr1.cc:859
+#line 670 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 14:
-#line 208 "dhcp6_parser.yy" // lalr1.cc:859
+#line 213 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.PD_POOLS; }
-#line 666 "dhcp6_parser.cc" // lalr1.cc:859
+#line 676 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 16:
-#line 209 "dhcp6_parser.yy" // lalr1.cc:859
+#line 214 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.RESERVATIONS; }
-#line 672 "dhcp6_parser.cc" // lalr1.cc:859
+#line 682 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 18:
-#line 210 "dhcp6_parser.yy" // lalr1.cc:859
+#line 215 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DEF; }
-#line 678 "dhcp6_parser.cc" // lalr1.cc:859
+#line 688 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 20:
-#line 211 "dhcp6_parser.yy" // lalr1.cc:859
+#line 216 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.OPTION_DATA; }
-#line 684 "dhcp6_parser.cc" // lalr1.cc:859
+#line 694 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 22:
-#line 212 "dhcp6_parser.yy" // lalr1.cc:859
+#line 217 "dhcp6_parser.yy" // lalr1.cc:859
     { ctx.ctx_ = ctx.HOOKS_LIBRARIES; }
-#line 690 "dhcp6_parser.cc" // lalr1.cc:859
+#line 700 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 24:
-#line 220 "dhcp6_parser.yy" // lalr1.cc:859
+#line 225 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location))); }
-#line 696 "dhcp6_parser.cc" // lalr1.cc:859
+#line 706 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 25:
-#line 221 "dhcp6_parser.yy" // lalr1.cc:859
+#line 226 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new DoubleElement(yystack_[0].value.as< double > (), ctx.loc2pos(yystack_[0].location))); }
-#line 702 "dhcp6_parser.cc" // lalr1.cc:859
+#line 712 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 26:
-#line 222 "dhcp6_parser.yy" // lalr1.cc:859
+#line 227 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location))); }
-#line 708 "dhcp6_parser.cc" // lalr1.cc:859
+#line 718 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 27:
-#line 223 "dhcp6_parser.yy" // lalr1.cc:859
+#line 228 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location))); }
-#line 714 "dhcp6_parser.cc" // lalr1.cc:859
+#line 724 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 28:
-#line 224 "dhcp6_parser.yy" // lalr1.cc:859
+#line 229 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new NullElement(ctx.loc2pos(yystack_[0].location))); }
-#line 720 "dhcp6_parser.cc" // lalr1.cc:859
+#line 730 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 29:
-#line 225 "dhcp6_parser.yy" // lalr1.cc:859
+#line 230 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 726 "dhcp6_parser.cc" // lalr1.cc:859
+#line 736 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 30:
-#line 226 "dhcp6_parser.yy" // lalr1.cc:859
+#line 231 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ctx.stack_.back(); ctx.stack_.pop_back(); }
-#line 732 "dhcp6_parser.cc" // lalr1.cc:859
+#line 742 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 31:
-#line 229 "dhcp6_parser.yy" // lalr1.cc:859
+#line 234 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Push back the JSON value on the stack
     ctx.stack_.push_back(yystack_[0].value.as< ElementPtr > ());
 }
-#line 741 "dhcp6_parser.cc" // lalr1.cc:859
+#line 751 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 32:
-#line 234 "dhcp6_parser.yy" // lalr1.cc:859
+#line 239 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 752 "dhcp6_parser.cc" // lalr1.cc:859
+#line 762 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 33:
-#line 239 "dhcp6_parser.yy" // lalr1.cc:859
+#line 244 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 762 "dhcp6_parser.cc" // lalr1.cc:859
+#line 772 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 36:
-#line 250 "dhcp6_parser.yy" // lalr1.cc:859
+#line 255 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map containing a single entry
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 771 "dhcp6_parser.cc" // lalr1.cc:859
+#line 781 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 37:
-#line 254 "dhcp6_parser.yy" // lalr1.cc:859
+#line 259 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // map consisting of a shorter map followed by
                   // comma and string:value
                   ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), yystack_[0].value.as< ElementPtr > ());
                   }
-#line 781 "dhcp6_parser.cc" // lalr1.cc:859
+#line 791 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 38:
-#line 261 "dhcp6_parser.yy" // lalr1.cc:859
+#line 266 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(l);
 }
-#line 790 "dhcp6_parser.cc" // lalr1.cc:859
+#line 800 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 39:
-#line 264 "dhcp6_parser.yy" // lalr1.cc:859
+#line 269 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
 }
-#line 798 "dhcp6_parser.cc" // lalr1.cc:859
+#line 808 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 40:
-#line 269 "dhcp6_parser.yy" // lalr1.cc:859
+#line 274 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // List parsing about to start
 }
-#line 806 "dhcp6_parser.cc" // lalr1.cc:859
+#line 816 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 41:
-#line 271 "dhcp6_parser.yy" // lalr1.cc:859
+#line 276 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // list parsing complete. Put any sanity checking here
     //ctx.stack_.pop_back();
 }
-#line 815 "dhcp6_parser.cc" // lalr1.cc:859
+#line 825 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 44:
-#line 280 "dhcp6_parser.yy" // lalr1.cc:859
+#line 285 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List consisting of a single element.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 824 "dhcp6_parser.cc" // lalr1.cc:859
+#line 834 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 45:
-#line 284 "dhcp6_parser.yy" // lalr1.cc:859
+#line 289 "dhcp6_parser.yy" // lalr1.cc:859
     {
                   // List ending with , and a value.
                   ctx.stack_.back()->add(yystack_[0].value.as< ElementPtr > ());
                   }
-#line 833 "dhcp6_parser.cc" // lalr1.cc:859
+#line 843 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 46:
-#line 295 "dhcp6_parser.yy" // lalr1.cc:859
+#line 300 "dhcp6_parser.yy" // lalr1.cc:859
     {
     const std::string& where = ctx.contextName();
     const std::string& keyword = yystack_[1].value.as< std::string > ();
     error(yystack_[1].location,
           "got unexpected keyword \"" + keyword + "\" in " + where + " map.");
 }
-#line 844 "dhcp6_parser.cc" // lalr1.cc:859
+#line 854 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 47:
-#line 305 "dhcp6_parser.yy" // lalr1.cc:859
+#line 310 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 855 "dhcp6_parser.cc" // lalr1.cc:859
+#line 865 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 48:
-#line 310 "dhcp6_parser.yy" // lalr1.cc:859
+#line 315 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
     // for it.
 }
-#line 865 "dhcp6_parser.cc" // lalr1.cc:859
+#line 875 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 56:
-#line 329 "dhcp6_parser.yy" // lalr1.cc:859
+#line 334 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // This code is executed when we're about to start parsing
     // the content of the map
@@ -874,11 +884,11 @@ namespace isc { namespace dhcp {
     ctx.stack_.push_back(m);
     ctx.enter(ctx.DHCP6);
 }
-#line 878 "dhcp6_parser.cc" // lalr1.cc:859
+#line 888 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 57:
-#line 336 "dhcp6_parser.yy" // lalr1.cc:859
+#line 341 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // map parsing completed. If we ever want to do any wrap up
     // (maybe some sanity checking), this would be the best place
@@ -886,526 +896,552 @@ namespace isc { namespace dhcp {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 890 "dhcp6_parser.cc" // lalr1.cc:859
+#line 900 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 58:
-#line 346 "dhcp6_parser.yy" // lalr1.cc:859
+#line 351 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the Dhcp6 map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 900 "dhcp6_parser.cc" // lalr1.cc:859
+#line 910 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 59:
-#line 350 "dhcp6_parser.yy" // lalr1.cc:859
+#line 355 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 908 "dhcp6_parser.cc" // lalr1.cc:859
+#line 918 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 84:
-#line 384 "dhcp6_parser.yy" // lalr1.cc:859
+#line 389 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("preferred-lifetime", prf);
 }
-#line 917 "dhcp6_parser.cc" // lalr1.cc:859
+#line 927 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 85:
-#line 389 "dhcp6_parser.yy" // lalr1.cc:859
+#line 394 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("valid-lifetime", prf);
 }
-#line 926 "dhcp6_parser.cc" // lalr1.cc:859
+#line 936 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 86:
-#line 394 "dhcp6_parser.yy" // lalr1.cc:859
+#line 399 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("renew-timer", prf);
 }
-#line 935 "dhcp6_parser.cc" // lalr1.cc:859
+#line 945 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 87:
-#line 399 "dhcp6_parser.yy" // lalr1.cc:859
+#line 404 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rebind-timer", prf);
 }
-#line 944 "dhcp6_parser.cc" // lalr1.cc:859
+#line 954 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 88:
-#line 404 "dhcp6_parser.yy" // lalr1.cc:859
+#line 409 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dpp(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("decline-probation-period", dpp);
 }
-#line 953 "dhcp6_parser.cc" // lalr1.cc:859
+#line 963 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 89:
-#line 409 "dhcp6_parser.yy" // lalr1.cc:859
+#line 414 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces-config", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.INTERFACES_CONFIG);
 }
-#line 964 "dhcp6_parser.cc" // lalr1.cc:859
+#line 974 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 90:
-#line 414 "dhcp6_parser.yy" // lalr1.cc:859
+#line 419 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 973 "dhcp6_parser.cc" // lalr1.cc:859
+#line 983 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 91:
-#line 419 "dhcp6_parser.yy" // lalr1.cc:859
+#line 424 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the interfaces-config map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 983 "dhcp6_parser.cc" // lalr1.cc:859
+#line 993 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 92:
-#line 423 "dhcp6_parser.yy" // lalr1.cc:859
+#line 428 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 991 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1001 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 93:
-#line 427 "dhcp6_parser.yy" // lalr1.cc:859
+#line 432 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interfaces", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1002 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1012 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 94:
-#line 432 "dhcp6_parser.yy" // lalr1.cc:859
+#line 437 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1011 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1021 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 95:
-#line 437 "dhcp6_parser.yy" // lalr1.cc:859
+#line 442 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lease-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.LEASE_DATABASE);
 }
-#line 1022 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1032 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 96:
-#line 442 "dhcp6_parser.yy" // lalr1.cc:859
+#line 447 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1031 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1041 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 97:
-#line 447 "dhcp6_parser.yy" // lalr1.cc:859
+#line 452 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr i(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hosts-database", i);
     ctx.stack_.push_back(i);
     ctx.enter(ctx.HOSTS_DATABASE);
 }
-#line 1042 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1052 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
   case 98:
-#line 452 "dhcp6_parser.yy" // lalr1.cc:859
+#line 457 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1051 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1061 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 110:
-#line 472 "dhcp6_parser.yy" // lalr1.cc:859
+  case 111:
+#line 478 "dhcp6_parser.yy" // lalr1.cc:859
     {
-    ctx.enter(ctx.NO_KEYWORD);
+    ctx.enter(ctx.DATABASE_TYPE);
 }
-#line 1059 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1069 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 111:
-#line 474 "dhcp6_parser.yy" // lalr1.cc:859
+  case 112:
+#line 480 "dhcp6_parser.yy" // lalr1.cc:859
     {
-    ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
-    ctx.stack_.back()->set("type", prf);
+    ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1069 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1078 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 112:
-#line 480 "dhcp6_parser.yy" // lalr1.cc:859
+  case 113:
+#line 485 "dhcp6_parser.yy" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("memfile", ctx.loc2pos(yystack_[0].location))); }
+#line 1084 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 114:
+#line 486 "dhcp6_parser.yy" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("mysql", ctx.loc2pos(yystack_[0].location))); }
+#line 1090 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 115:
+#line 487 "dhcp6_parser.yy" // lalr1.cc:859
+    { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("postgresql", ctx.loc2pos(yystack_[0].location))); }
+#line 1096 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 116:
+#line 490 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1077 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1104 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 113:
-#line 482 "dhcp6_parser.yy" // lalr1.cc:859
+  case 117:
+#line 492 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr user(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("user", user);
     ctx.leave();
 }
-#line 1087 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1114 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 114:
-#line 488 "dhcp6_parser.yy" // lalr1.cc:859
+  case 118:
+#line 498 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1095 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1122 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 115:
-#line 490 "dhcp6_parser.yy" // lalr1.cc:859
+  case 119:
+#line 500 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr pwd(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("password", pwd);
     ctx.leave();
 }
-#line 1105 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1132 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 116:
-#line 496 "dhcp6_parser.yy" // lalr1.cc:859
+  case 120:
+#line 506 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1113 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1140 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 117:
-#line 498 "dhcp6_parser.yy" // lalr1.cc:859
+  case 121:
+#line 508 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr h(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host", h);
     ctx.leave();
 }
-#line 1123 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1150 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 118:
-#line 504 "dhcp6_parser.yy" // lalr1.cc:859
+  case 122:
+#line 514 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1131 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1158 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 119:
-#line 506 "dhcp6_parser.yy" // lalr1.cc:859
+  case 123:
+#line 516 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("name", name);
     ctx.leave();
 }
-#line 1141 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1168 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 120:
-#line 512 "dhcp6_parser.yy" // lalr1.cc:859
+  case 124:
+#line 522 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("persist", n);
 }
-#line 1150 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1177 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 121:
-#line 517 "dhcp6_parser.yy" // lalr1.cc:859
+  case 125:
+#line 527 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("lfc-interval", n);
 }
-#line 1159 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1186 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 122:
-#line 522 "dhcp6_parser.yy" // lalr1.cc:859
+  case 126:
+#line 532 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr n(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("readonly", n);
 }
-#line 1168 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1195 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 123:
-#line 527 "dhcp6_parser.yy" // lalr1.cc:859
+  case 127:
+#line 537 "dhcp6_parser.yy" // lalr1.cc:859
+    {
+    ElementPtr n(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
+    ctx.stack_.back()->set("connect-timeout", n);
+}
+#line 1204 "dhcp6_parser.cc" // lalr1.cc:859
+    break;
+
+  case 128:
+#line 542 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("mac-sources", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.MAC_SOURCES);
 }
-#line 1179 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1215 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 124:
-#line 532 "dhcp6_parser.yy" // lalr1.cc:859
+  case 129:
+#line 547 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1188 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1224 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 129:
-#line 545 "dhcp6_parser.yy" // lalr1.cc:859
+  case 134:
+#line 560 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement("duid", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1197 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1233 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 130:
-#line 550 "dhcp6_parser.yy" // lalr1.cc:859
+  case 135:
+#line 565 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr duid(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(duid);
 }
-#line 1206 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1242 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 131:
-#line 555 "dhcp6_parser.yy" // lalr1.cc:859
+  case 136:
+#line 570 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("host-reservation-identifiers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOST_RESERVATION_IDENTIFIERS);
 }
-#line 1217 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1253 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 132:
-#line 560 "dhcp6_parser.yy" // lalr1.cc:859
+  case 137:
+#line 575 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1226 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1262 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 137:
-#line 573 "dhcp6_parser.yy" // lalr1.cc:859
+  case 142:
+#line 588 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hwaddr(new StringElement("hw-address", ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(hwaddr);
 }
-#line 1235 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1271 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 138:
-#line 578 "dhcp6_parser.yy" // lalr1.cc:859
+  case 143:
+#line 593 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay-supplied-options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1246 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1282 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 139:
-#line 583 "dhcp6_parser.yy" // lalr1.cc:859
+  case 144:
+#line 598 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1255 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1291 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 140:
-#line 588 "dhcp6_parser.yy" // lalr1.cc:859
+  case 145:
+#line 603 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hooks-libraries", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.HOOKS_LIBRARIES);
 }
-#line 1266 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1302 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 141:
-#line 593 "dhcp6_parser.yy" // lalr1.cc:859
+  case 146:
+#line 608 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1275 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1311 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 146:
-#line 606 "dhcp6_parser.yy" // lalr1.cc:859
+  case 151:
+#line 621 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1285 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1321 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 147:
-#line 610 "dhcp6_parser.yy" // lalr1.cc:859
+  case 152:
+#line 625 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1293 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1329 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 148:
-#line 614 "dhcp6_parser.yy" // lalr1.cc:859
+  case 153:
+#line 629 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the hooks-libraries list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1303 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1339 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 149:
-#line 618 "dhcp6_parser.yy" // lalr1.cc:859
+  case 154:
+#line 633 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1311 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1347 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 155:
-#line 631 "dhcp6_parser.yy" // lalr1.cc:859
+  case 160:
+#line 646 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1319 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1355 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 156:
-#line 633 "dhcp6_parser.yy" // lalr1.cc:859
+  case 161:
+#line 648 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr lib(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("library", lib);
     ctx.leave();
 }
-#line 1329 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1365 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 157:
-#line 639 "dhcp6_parser.yy" // lalr1.cc:859
+  case 162:
+#line 654 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1337 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1373 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 158:
-#line 641 "dhcp6_parser.yy" // lalr1.cc:859
+  case 163:
+#line 656 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("parameters", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 1346 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1382 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 159:
-#line 647 "dhcp6_parser.yy" // lalr1.cc:859
+  case 164:
+#line 662 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("expired-leases-processing", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1357 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1393 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 160:
-#line 652 "dhcp6_parser.yy" // lalr1.cc:859
+  case 165:
+#line 667 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1366 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1402 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 163:
-#line 664 "dhcp6_parser.yy" // lalr1.cc:859
+  case 168:
+#line 679 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr value(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set(yystack_[2].value.as< std::string > (), value);
 }
-#line 1375 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1411 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 164:
-#line 672 "dhcp6_parser.yy" // lalr1.cc:859
+  case 169:
+#line 687 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet6", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.SUBNET6);
 }
-#line 1386 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1422 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 165:
-#line 677 "dhcp6_parser.yy" // lalr1.cc:859
+  case 170:
+#line 692 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1395 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1431 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 170:
-#line 697 "dhcp6_parser.yy" // lalr1.cc:859
+  case 175:
+#line 712 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1405 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1441 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 171:
-#line 701 "dhcp6_parser.yy" // lalr1.cc:859
+  case 176:
+#line 716 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Once we reached this place, the subnet parsing is now complete.
     // If we want to, we can implement default values here.
@@ -1424,1183 +1460,1183 @@ namespace isc { namespace dhcp {
     // }
     ctx.stack_.pop_back();
 }
-#line 1428 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1464 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 172:
-#line 720 "dhcp6_parser.yy" // lalr1.cc:859
+  case 177:
+#line 735 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the subnet6 list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1438 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1474 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 173:
-#line 724 "dhcp6_parser.yy" // lalr1.cc:859
+  case 178:
+#line 739 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1446 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1482 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 193:
-#line 753 "dhcp6_parser.yy" // lalr1.cc:859
+  case 198:
+#line 768 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1454 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1490 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 194:
-#line 755 "dhcp6_parser.yy" // lalr1.cc:859
+  case 199:
+#line 770 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr subnet(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("subnet", subnet);
     ctx.leave();
 }
-#line 1464 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1500 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 195:
-#line 761 "dhcp6_parser.yy" // lalr1.cc:859
+  case 200:
+#line 776 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1472 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1508 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 196:
-#line 763 "dhcp6_parser.yy" // lalr1.cc:859
+  case 201:
+#line 778 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface", iface);
     ctx.leave();
 }
-#line 1482 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1518 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 197:
-#line 769 "dhcp6_parser.yy" // lalr1.cc:859
+  case 202:
+#line 784 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1490 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1526 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 198:
-#line 771 "dhcp6_parser.yy" // lalr1.cc:859
+  case 203:
+#line 786 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr iface(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("interface-id", iface);
     ctx.leave();
 }
-#line 1500 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1536 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 199:
-#line 777 "dhcp6_parser.yy" // lalr1.cc:859
+  case 204:
+#line 792 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.CLIENT_CLASS);
 }
-#line 1508 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1544 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 200:
-#line 779 "dhcp6_parser.yy" // lalr1.cc:859
+  case 205:
+#line 794 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr cls(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-class", cls);
     ctx.leave();
 }
-#line 1518 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1554 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 201:
-#line 785 "dhcp6_parser.yy" // lalr1.cc:859
+  case 206:
+#line 800 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1526 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1562 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 202:
-#line 787 "dhcp6_parser.yy" // lalr1.cc:859
+  case 207:
+#line 802 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rm(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservation-mode", rm);
     ctx.leave();
 }
-#line 1536 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1572 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 203:
-#line 793 "dhcp6_parser.yy" // lalr1.cc:859
+  case 208:
+#line 808 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("id", id);
 }
-#line 1545 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1581 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 204:
-#line 798 "dhcp6_parser.yy" // lalr1.cc:859
+  case 209:
+#line 813 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rc(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("rapid-commit", rc);
 }
-#line 1554 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1590 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 205:
-#line 807 "dhcp6_parser.yy" // lalr1.cc:859
+  case 210:
+#line 822 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-def", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DEF);
 }
-#line 1565 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1601 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 206:
-#line 812 "dhcp6_parser.yy" // lalr1.cc:859
+  case 211:
+#line 827 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1574 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1610 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 211:
-#line 829 "dhcp6_parser.yy" // lalr1.cc:859
+  case 216:
+#line 844 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1584 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1620 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 212:
-#line 833 "dhcp6_parser.yy" // lalr1.cc:859
+  case 217:
+#line 848 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1592 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1628 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 213:
-#line 840 "dhcp6_parser.yy" // lalr1.cc:859
+  case 218:
+#line 855 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-def list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1602 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1638 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 214:
-#line 844 "dhcp6_parser.yy" // lalr1.cc:859
+  case 219:
+#line 859 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1610 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1646 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 228:
-#line 870 "dhcp6_parser.yy" // lalr1.cc:859
+  case 233:
+#line 885 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr code(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("code", code);
 }
-#line 1619 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1655 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 230:
-#line 877 "dhcp6_parser.yy" // lalr1.cc:859
+  case 235:
+#line 892 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1627 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1663 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 231:
-#line 879 "dhcp6_parser.yy" // lalr1.cc:859
+  case 236:
+#line 894 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("type", prf);
     ctx.leave();
 }
-#line 1637 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1673 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 232:
-#line 885 "dhcp6_parser.yy" // lalr1.cc:859
+  case 237:
+#line 900 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1645 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1681 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 233:
-#line 887 "dhcp6_parser.yy" // lalr1.cc:859
+  case 238:
+#line 902 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr rtypes(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("record-types", rtypes);
     ctx.leave();
 }
-#line 1655 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1691 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 234:
-#line 893 "dhcp6_parser.yy" // lalr1.cc:859
+  case 239:
+#line 908 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1663 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1699 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 235:
-#line 895 "dhcp6_parser.yy" // lalr1.cc:859
+  case 240:
+#line 910 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("space", space);
     ctx.leave();
 }
-#line 1673 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1709 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 237:
-#line 903 "dhcp6_parser.yy" // lalr1.cc:859
+  case 242:
+#line 918 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1681 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1717 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 238:
-#line 905 "dhcp6_parser.yy" // lalr1.cc:859
+  case 243:
+#line 920 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr encap(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("encapsulate", encap);
     ctx.leave();
 }
-#line 1691 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1727 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 239:
-#line 911 "dhcp6_parser.yy" // lalr1.cc:859
+  case 244:
+#line 926 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr array(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("array", array);
 }
-#line 1700 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1736 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 240:
-#line 920 "dhcp6_parser.yy" // lalr1.cc:859
+  case 245:
+#line 935 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("option-data", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OPTION_DATA);
 }
-#line 1711 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1747 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 241:
-#line 925 "dhcp6_parser.yy" // lalr1.cc:859
+  case 246:
+#line 940 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1720 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1756 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 246:
-#line 944 "dhcp6_parser.yy" // lalr1.cc:859
+  case 251:
+#line 959 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1730 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1766 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 247:
-#line 948 "dhcp6_parser.yy" // lalr1.cc:859
+  case 252:
+#line 963 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1738 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1774 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 248:
-#line 955 "dhcp6_parser.yy" // lalr1.cc:859
+  case 253:
+#line 970 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the option-data list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1748 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1784 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 249:
-#line 959 "dhcp6_parser.yy" // lalr1.cc:859
+  case 254:
+#line 974 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1756 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1792 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 261:
-#line 988 "dhcp6_parser.yy" // lalr1.cc:859
+  case 266:
+#line 1003 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1764 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1800 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 262:
-#line 990 "dhcp6_parser.yy" // lalr1.cc:859
+  case 267:
+#line 1005 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr data(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("data", data);
     ctx.leave();
 }
-#line 1774 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1810 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 265:
-#line 1000 "dhcp6_parser.yy" // lalr1.cc:859
+  case 270:
+#line 1015 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr space(new BoolElement(yystack_[0].value.as< bool > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("csv-format", space);
 }
-#line 1783 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1819 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 266:
-#line 1008 "dhcp6_parser.yy" // lalr1.cc:859
+  case 271:
+#line 1023 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.POOLS);
 }
-#line 1794 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1830 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 267:
-#line 1013 "dhcp6_parser.yy" // lalr1.cc:859
+  case 272:
+#line 1028 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1803 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1839 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 272:
-#line 1028 "dhcp6_parser.yy" // lalr1.cc:859
+  case 277:
+#line 1043 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1813 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1849 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 273:
-#line 1032 "dhcp6_parser.yy" // lalr1.cc:859
+  case 278:
+#line 1047 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1821 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1857 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 274:
-#line 1036 "dhcp6_parser.yy" // lalr1.cc:859
+  case 279:
+#line 1051 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1831 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1867 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 275:
-#line 1040 "dhcp6_parser.yy" // lalr1.cc:859
+  case 280:
+#line 1055 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1839 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1875 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 281:
-#line 1053 "dhcp6_parser.yy" // lalr1.cc:859
+  case 286:
+#line 1068 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1847 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1883 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 282:
-#line 1055 "dhcp6_parser.yy" // lalr1.cc:859
+  case 287:
+#line 1070 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr pool(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pool", pool);
     ctx.leave();
 }
-#line 1857 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1893 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 283:
-#line 1064 "dhcp6_parser.yy" // lalr1.cc:859
+  case 288:
+#line 1079 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("pd-pools", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.PD_POOLS);
 }
-#line 1868 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1904 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 284:
-#line 1069 "dhcp6_parser.yy" // lalr1.cc:859
+  case 289:
+#line 1084 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1877 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1913 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 289:
-#line 1084 "dhcp6_parser.yy" // lalr1.cc:859
+  case 294:
+#line 1099 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 1887 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1923 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 290:
-#line 1088 "dhcp6_parser.yy" // lalr1.cc:859
+  case 295:
+#line 1103 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 1895 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1931 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 291:
-#line 1092 "dhcp6_parser.yy" // lalr1.cc:859
+  case 296:
+#line 1107 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the pd-pool list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 1905 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1941 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 292:
-#line 1096 "dhcp6_parser.yy" // lalr1.cc:859
+  case 297:
+#line 1111 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 1913 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1949 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 302:
-#line 1113 "dhcp6_parser.yy" // lalr1.cc:859
+  case 307:
+#line 1128 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1921 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1957 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 303:
-#line 1115 "dhcp6_parser.yy" // lalr1.cc:859
+  case 308:
+#line 1130 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix", prf);
     ctx.leave();
 }
-#line 1931 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1967 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 304:
-#line 1121 "dhcp6_parser.yy" // lalr1.cc:859
+  case 309:
+#line 1136 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefix-len", prf);
 }
-#line 1940 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1976 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 305:
-#line 1126 "dhcp6_parser.yy" // lalr1.cc:859
+  case 310:
+#line 1141 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 1948 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1984 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 306:
-#line 1128 "dhcp6_parser.yy" // lalr1.cc:859
+  case 311:
+#line 1143 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix", prf);
     ctx.leave();
 }
-#line 1958 "dhcp6_parser.cc" // lalr1.cc:859
+#line 1994 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 307:
-#line 1134 "dhcp6_parser.yy" // lalr1.cc:859
+  case 312:
+#line 1149 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr prf(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("excluded-prefix-len", prf);
 }
-#line 1967 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2003 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 308:
-#line 1139 "dhcp6_parser.yy" // lalr1.cc:859
+  case 313:
+#line 1154 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr deleg(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("delegated-len", deleg);
 }
-#line 1976 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2012 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 309:
-#line 1147 "dhcp6_parser.yy" // lalr1.cc:859
+  case 314:
+#line 1162 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("reservations", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.RESERVATIONS);
 }
-#line 1987 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2023 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 310:
-#line 1152 "dhcp6_parser.yy" // lalr1.cc:859
+  case 315:
+#line 1167 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 1996 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2032 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 315:
-#line 1165 "dhcp6_parser.yy" // lalr1.cc:859
+  case 320:
+#line 1180 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2006 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2042 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 316:
-#line 1169 "dhcp6_parser.yy" // lalr1.cc:859
+  case 321:
+#line 1184 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2014 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2050 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 317:
-#line 1173 "dhcp6_parser.yy" // lalr1.cc:859
+  case 322:
+#line 1188 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // Parse the reservations list entry map
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.push_back(m);
 }
-#line 2024 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2060 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 318:
-#line 1177 "dhcp6_parser.yy" // lalr1.cc:859
+  case 323:
+#line 1192 "dhcp6_parser.yy" // lalr1.cc:859
     {
     // parsing completed
 }
-#line 2032 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2068 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 331:
-#line 1200 "dhcp6_parser.yy" // lalr1.cc:859
+  case 336:
+#line 1215 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-addresses", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2043 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2079 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 332:
-#line 1205 "dhcp6_parser.yy" // lalr1.cc:859
+  case 337:
+#line 1220 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2052 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2088 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 333:
-#line 1210 "dhcp6_parser.yy" // lalr1.cc:859
+  case 338:
+#line 1225 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("prefixes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2063 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2099 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 334:
-#line 1215 "dhcp6_parser.yy" // lalr1.cc:859
+  case 339:
+#line 1230 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2072 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2108 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 335:
-#line 1220 "dhcp6_parser.yy" // lalr1.cc:859
+  case 340:
+#line 1235 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2080 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2116 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 336:
-#line 1222 "dhcp6_parser.yy" // lalr1.cc:859
+  case 341:
+#line 1237 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr d(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("duid", d);
     ctx.leave();
 }
-#line 2090 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2126 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 337:
-#line 1228 "dhcp6_parser.yy" // lalr1.cc:859
+  case 342:
+#line 1243 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2098 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2134 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 338:
-#line 1230 "dhcp6_parser.yy" // lalr1.cc:859
+  case 343:
+#line 1245 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr hw(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hw-address", hw);
     ctx.leave();
 }
-#line 2108 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2144 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 339:
-#line 1236 "dhcp6_parser.yy" // lalr1.cc:859
+  case 344:
+#line 1251 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2116 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2152 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 340:
-#line 1238 "dhcp6_parser.yy" // lalr1.cc:859
+  case 345:
+#line 1253 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr host(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("hostname", host);
     ctx.leave();
 }
-#line 2126 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2162 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 341:
-#line 1244 "dhcp6_parser.yy" // lalr1.cc:859
+  case 346:
+#line 1259 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr c(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", c);
     ctx.stack_.push_back(c);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2137 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2173 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 342:
-#line 1249 "dhcp6_parser.yy" // lalr1.cc:859
+  case 347:
+#line 1264 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2146 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2182 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 343:
-#line 1257 "dhcp6_parser.yy" // lalr1.cc:859
+  case 348:
+#line 1272 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("relay", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.RELAY);
 }
-#line 2157 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2193 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 344:
-#line 1262 "dhcp6_parser.yy" // lalr1.cc:859
+  case 349:
+#line 1277 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2166 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2202 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 345:
-#line 1267 "dhcp6_parser.yy" // lalr1.cc:859
+  case 350:
+#line 1282 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2174 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2210 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 346:
-#line 1269 "dhcp6_parser.yy" // lalr1.cc:859
+  case 351:
+#line 1284 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr ip(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("ip-address", ip);
     ctx.leave();
 }
-#line 2184 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2220 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 347:
-#line 1278 "dhcp6_parser.yy" // lalr1.cc:859
+  case 352:
+#line 1293 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("client-classes", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.CLIENT_CLASSES);
 }
-#line 2195 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2231 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 348:
-#line 1283 "dhcp6_parser.yy" // lalr1.cc:859
+  case 353:
+#line 1298 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2204 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2240 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 351:
-#line 1292 "dhcp6_parser.yy" // lalr1.cc:859
+  case 356:
+#line 1307 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2214 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2250 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 352:
-#line 1296 "dhcp6_parser.yy" // lalr1.cc:859
+  case 357:
+#line 1311 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2222 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2258 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 362:
-#line 1316 "dhcp6_parser.yy" // lalr1.cc:859
+  case 367:
+#line 1331 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2230 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2266 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 363:
-#line 1318 "dhcp6_parser.yy" // lalr1.cc:859
+  case 368:
+#line 1333 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr test(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("test", test);
     ctx.leave();
 }
-#line 2240 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2276 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 364:
-#line 1327 "dhcp6_parser.yy" // lalr1.cc:859
+  case 369:
+#line 1342 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("server-id", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.SERVER_ID);
 }
-#line 2251 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2287 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 365:
-#line 1332 "dhcp6_parser.yy" // lalr1.cc:859
+  case 370:
+#line 1347 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2260 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2296 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 375:
-#line 1350 "dhcp6_parser.yy" // lalr1.cc:859
+  case 380:
+#line 1365 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.DUID_TYPE);
 }
-#line 2268 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2304 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 376:
-#line 1352 "dhcp6_parser.yy" // lalr1.cc:859
+  case 381:
+#line 1367 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("type", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2277 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2313 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 377:
-#line 1357 "dhcp6_parser.yy" // lalr1.cc:859
+  case 382:
+#line 1372 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LLT", ctx.loc2pos(yystack_[0].location))); }
-#line 2283 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2319 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 378:
-#line 1358 "dhcp6_parser.yy" // lalr1.cc:859
+  case 383:
+#line 1373 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("EN", ctx.loc2pos(yystack_[0].location))); }
-#line 2289 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2325 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 379:
-#line 1359 "dhcp6_parser.yy" // lalr1.cc:859
+  case 384:
+#line 1374 "dhcp6_parser.yy" // lalr1.cc:859
     { yylhs.value.as< ElementPtr > () = ElementPtr(new StringElement("LL", ctx.loc2pos(yystack_[0].location))); }
-#line 2295 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2331 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 380:
-#line 1362 "dhcp6_parser.yy" // lalr1.cc:859
+  case 385:
+#line 1377 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr htype(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("htype", htype);
 }
-#line 2304 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2340 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 381:
-#line 1367 "dhcp6_parser.yy" // lalr1.cc:859
+  case 386:
+#line 1382 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2312 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2348 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 382:
-#line 1369 "dhcp6_parser.yy" // lalr1.cc:859
+  case 387:
+#line 1384 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr id(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("identifier", id);
     ctx.leave();
 }
-#line 2322 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2358 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 383:
-#line 1375 "dhcp6_parser.yy" // lalr1.cc:859
+  case 388:
+#line 1390 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("time", time);
 }
-#line 2331 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2367 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 384:
-#line 1380 "dhcp6_parser.yy" // lalr1.cc:859
+  case 389:
+#line 1395 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("enterprise-id", time);
 }
-#line 2340 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2376 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 385:
-#line 1387 "dhcp6_parser.yy" // lalr1.cc:859
+  case 390:
+#line 1402 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr time(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp4o6-port", time);
 }
-#line 2349 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2385 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 386:
-#line 1394 "dhcp6_parser.yy" // lalr1.cc:859
+  case 391:
+#line 1409 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("control-socket", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.CONTROL_SOCKET);
 }
-#line 2360 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2396 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 387:
-#line 1399 "dhcp6_parser.yy" // lalr1.cc:859
+  case 392:
+#line 1414 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2369 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2405 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 392:
-#line 1412 "dhcp6_parser.yy" // lalr1.cc:859
+  case 397:
+#line 1427 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2377 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2413 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 393:
-#line 1414 "dhcp6_parser.yy" // lalr1.cc:859
+  case 398:
+#line 1429 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr stype(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-type", stype);
     ctx.leave();
 }
-#line 2387 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2423 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 394:
-#line 1420 "dhcp6_parser.yy" // lalr1.cc:859
+  case 399:
+#line 1435 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2395 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2431 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 395:
-#line 1422 "dhcp6_parser.yy" // lalr1.cc:859
+  case 400:
+#line 1437 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr name(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("socket-name", name);
     ctx.leave();
 }
-#line 2405 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2441 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 396:
-#line 1430 "dhcp6_parser.yy" // lalr1.cc:859
+  case 401:
+#line 1445 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("dhcp-ddns", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2416 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2452 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 397:
-#line 1435 "dhcp6_parser.yy" // lalr1.cc:859
+  case 402:
+#line 1450 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2425 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2461 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 398:
-#line 1442 "dhcp6_parser.yy" // lalr1.cc:859
+  case 403:
+#line 1457 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2433 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2469 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 399:
-#line 1444 "dhcp6_parser.yy" // lalr1.cc:859
+  case 404:
+#line 1459 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("Dhcp4", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2442 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2478 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 400:
-#line 1449 "dhcp6_parser.yy" // lalr1.cc:859
+  case 405:
+#line 1464 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2450 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2486 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 401:
-#line 1451 "dhcp6_parser.yy" // lalr1.cc:859
+  case 406:
+#line 1466 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.back()->set("DhcpDdns", yystack_[0].value.as< ElementPtr > ());
     ctx.leave();
 }
-#line 2459 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2495 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 402:
-#line 1461 "dhcp6_parser.yy" // lalr1.cc:859
+  case 407:
+#line 1476 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("Logging", m);
     ctx.stack_.push_back(m);
     ctx.enter(ctx.LOGGING);
 }
-#line 2470 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2506 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 403:
-#line 1466 "dhcp6_parser.yy" // lalr1.cc:859
+  case 408:
+#line 1481 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2479 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2515 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 407:
-#line 1483 "dhcp6_parser.yy" // lalr1.cc:859
+  case 412:
+#line 1498 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("loggers", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.LOGGERS);
 }
-#line 2490 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2526 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 408:
-#line 1488 "dhcp6_parser.yy" // lalr1.cc:859
+  case 413:
+#line 1503 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2499 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2535 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 411:
-#line 1500 "dhcp6_parser.yy" // lalr1.cc:859
+  case 416:
+#line 1515 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(l);
     ctx.stack_.push_back(l);
 }
-#line 2509 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2545 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 412:
-#line 1504 "dhcp6_parser.yy" // lalr1.cc:859
+  case 417:
+#line 1519 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2517 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2553 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 420:
-#line 1519 "dhcp6_parser.yy" // lalr1.cc:859
+  case 425:
+#line 1534 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr dl(new IntElement(yystack_[0].value.as< int64_t > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("debuglevel", dl);
 }
-#line 2526 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2562 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 421:
-#line 1523 "dhcp6_parser.yy" // lalr1.cc:859
+  case 426:
+#line 1538 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2534 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2570 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 422:
-#line 1525 "dhcp6_parser.yy" // lalr1.cc:859
+  case 427:
+#line 1540 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("severity", sev);
     ctx.leave();
 }
-#line 2544 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2580 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 423:
-#line 1531 "dhcp6_parser.yy" // lalr1.cc:859
+  case 428:
+#line 1546 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr l(new ListElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output_options", l);
     ctx.stack_.push_back(l);
     ctx.enter(ctx.OUTPUT_OPTIONS);
 }
-#line 2555 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2591 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 424:
-#line 1536 "dhcp6_parser.yy" // lalr1.cc:859
+  case 429:
+#line 1551 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
     ctx.leave();
 }
-#line 2564 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2600 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 427:
-#line 1545 "dhcp6_parser.yy" // lalr1.cc:859
+  case 432:
+#line 1560 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr m(new MapElement(ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->add(m);
     ctx.stack_.push_back(m);
 }
-#line 2574 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2610 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 428:
-#line 1549 "dhcp6_parser.yy" // lalr1.cc:859
+  case 433:
+#line 1564 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.stack_.pop_back();
 }
-#line 2582 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2618 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 431:
-#line 1557 "dhcp6_parser.yy" // lalr1.cc:859
+  case 436:
+#line 1572 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ctx.enter(ctx.NO_KEYWORD);
 }
-#line 2590 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2626 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
-  case 432:
-#line 1559 "dhcp6_parser.yy" // lalr1.cc:859
+  case 437:
+#line 1574 "dhcp6_parser.yy" // lalr1.cc:859
     {
     ElementPtr sev(new StringElement(yystack_[0].value.as< std::string > (), ctx.loc2pos(yystack_[0].location)));
     ctx.stack_.back()->set("output", sev);
     ctx.leave();
 }
-#line 2600 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2636 "dhcp6_parser.cc" // lalr1.cc:859
     break;
 
 
-#line 2604 "dhcp6_parser.cc" // lalr1.cc:859
+#line 2640 "dhcp6_parser.cc" // lalr1.cc:859
             default:
               break;
             }
@@ -2862,79 +2898,79 @@ namespace isc { namespace dhcp {
   const short int
   Dhcp6Parser::yypact_[] =
   {
-      89,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,    31,    21,    22,    57,    66,    92,   121,   134,
-     154,   203,   207,   216,  -427,  -427,  -427,  -427,  -427,  -427,
+     181,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
+    -427,  -427,    27,    21,    29,    61,    63,    74,    84,    92,
+     136,   138,   162,   219,  -427,  -427,  -427,  -427,  -427,  -427,
     -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
     -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,    21,    72,    11,    64,
-     164,    12,    -7,    38,    43,   117,   125,    29,  -427,   223,
-     221,   228,   227,   230,  -427,  -427,  -427,  -427,   232,  -427,
-      30,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,   234,
-     239,   242,   245,   246,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,   253,  -427,  -427,  -427,    48,  -427,
+    -427,  -427,  -427,  -427,  -427,  -427,    21,    -5,    11,    20,
+     159,    12,   -11,    38,    83,    73,   117,   -14,  -427,   178,
+     197,   223,   220,   226,  -427,  -427,  -427,  -427,   227,  -427,
+      34,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,   228,
+     229,   231,   232,   234,  -427,  -427,  -427,  -427,  -427,  -427,
+    -427,  -427,  -427,  -427,   235,  -427,  -427,  -427,   153,  -427,
     -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
     -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,   250,  -427,  -427,  -427,  -427,  -427,  -427,   256,
-     259,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-     119,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,   136,  -427,  -427,
-    -427,   260,  -427,   261,   263,  -427,  -427,   167,  -427,  -427,
+    -427,  -427,   233,  -427,  -427,  -427,  -427,  -427,  -427,   236,
+     239,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
+     154,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
+    -427,  -427,  -427,  -427,  -427,  -427,  -427,   156,  -427,  -427,
+    -427,   242,  -427,   245,   246,  -427,  -427,   157,  -427,  -427,
     -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,   262,   265,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,   267,  -427,  -427,  -427,   268,  -427,  -427,
-     266,   273,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,   274,  -427,  -427,  -427,  -427,   269,   276,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,   169,
-    -427,  -427,  -427,  -427,    21,    21,  -427,   178,   277,   278,
-     279,   280,  -427,    11,  -427,   281,   282,   283,   166,   185,
-     186,   187,   192,   287,   288,   289,   290,   292,   293,   294,
-     295,   296,   297,   202,   298,   299,    64,  -427,   300,  -427,
-      10,   302,   303,   304,   305,   306,   211,   206,   308,   309,
-     311,   312,    12,  -427,   313,    -7,  -427,   314,   219,   315,
-     220,   222,    38,  -427,   316,   317,   320,   322,   323,   324,
-    -427,    43,   325,   326,   229,   327,   329,   330,   231,  -427,
-     117,   331,   235,  -427,   125,   335,   337,   -13,  -427,  -427,
-    -427,   338,   336,   339,    21,    21,  -427,   340,   341,   342,
-    -427,  -427,  -427,  -427,  -427,   345,   348,   349,   350,   351,
-     352,   355,   356,   357,   358,  -427,   359,   360,  -427,   351,
-    -427,  -427,  -427,  -427,   354,   365,  -427,  -427,  -427,   366,
-     367,   243,   271,   272,  -427,  -427,   275,   284,   370,   371,
-    -427,   285,  -427,   286,  -427,   291,  -427,  -427,  -427,   351,
-     351,   351,   301,   307,   310,  -427,   318,   319,  -427,   321,
-     328,   332,  -427,  -427,   333,  -427,  -427,   334,    21,  -427,
-      21,    64,   343,  -427,  -427,   164,    27,    27,   372,   373,
-     374,   -34,  -427,  -427,    23,    58,   375,   344,    34,    40,
-      72,  -427,   379,  -427,    10,   378,   382,  -427,  -427,  -427,
-    -427,  -427,   383,   353,  -427,  -427,  -427,  -427,  -427,  -427,
+    -427,  -427,   249,   255,  -427,  -427,  -427,  -427,  -427,  -427,
+    -427,  -427,  -427,   256,  -427,  -427,  -427,   259,  -427,  -427,
+     257,   261,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
+    -427,  -427,  -427,   263,  -427,  -427,  -427,  -427,   260,   266,
+    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,   160,
+    -427,  -427,  -427,  -427,    21,    21,  -427,   165,   268,   270,
+     283,   284,  -427,    11,  -427,   285,   286,   287,   163,   185,
+     186,   187,   188,   292,   293,   294,   295,   296,   297,   298,
+     299,   300,   301,   199,   303,   304,    20,  -427,   305,  -427,
+      98,   306,   307,   308,   309,   310,   209,   210,   311,   313,
+     314,   316,    12,  -427,   317,   -11,  -427,   318,   216,   320,
+     218,   221,    38,  -427,   322,   323,   325,   326,   327,   328,
+    -427,    83,   329,   330,   237,   331,   332,   335,   238,  -427,
+      73,   336,   240,  -427,   117,   337,   338,   -28,  -427,  -427,
+    -427,   339,   341,   343,    21,    21,  -427,   346,   347,   348,
+    -427,  -427,  -427,  -427,  -427,   340,   351,   352,   355,   356,
+     357,   358,   359,   360,   361,  -427,   364,   365,  -427,   356,
+    -427,  -427,  -427,  -427,   366,   362,  -427,  -427,  -427,   368,
+     370,   271,   272,   273,  -427,  -427,   274,   275,   377,   376,
+    -427,   279,  -427,   280,  -427,   281,  -427,  -427,  -427,   356,
+     356,   356,   282,   288,   289,  -427,   290,   291,  -427,   302,
+     312,   315,  -427,  -427,   319,  -427,  -427,   321,    21,  -427,
+      21,    20,   258,  -427,  -427,   159,   100,   100,   382,   383,
+     384,   -10,  -427,  -427,   155,    28,   385,   324,    60,   140,
+      -5,  -427,   389,  -427,    98,   391,   392,  -427,  -427,  -427,
+    -427,  -427,   393,   333,  -427,  -427,  -427,  -427,  -427,  -427,
     -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,   188,  -427,   189,  -427,  -427,   384,  -427,  -427,
-    -427,  -427,   387,   390,   391,  -427,   190,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,   191,  -427,   392,   393,
-    -427,  -427,   394,   396,  -427,  -427,   395,   399,  -427,  -427,
-    -427,    68,  -427,  -427,  -427,    21,  -427,  -427,   132,  -427,
-    -427,  -427,   145,  -427,   398,   402,  -427,   403,   197,  -427,
-    -427,  -427,   404,   406,   410,  -427,  -427,   198,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,   199,  -427,  -427,  -427,
-     200,   346,  -427,  -427,   400,   412,  -427,  -427,   411,   413,
-    -427,  -427,   416,   421,  -427,  -427,   389,  -427,   415,   343,
-    -427,  -427,   422,   424,   425,   427,   258,   241,   347,    27,
-    -427,  -427,    12,  -427,   372,   117,  -427,   373,   125,  -427,
-     374,   -34,  -427,   419,    23,  -427,    58,  -427,    29,  -427,
-     375,   361,   344,  -427,   428,   429,   362,   363,   364,    34,
-    -427,   433,   434,    40,  -427,  -427,  -427,    -7,  -427,   378,
-      38,  -427,   382,    43,  -427,   383,   435,  -427,   436,  -427,
-     368,   369,   376,   377,  -427,  -427,  -427,  -427,   201,  -427,
-     432,  -427,   437,  -427,  -427,  -427,  -427,  -427,   208,  -427,
-    -427,  -427,   168,   380,  -427,  -427,  -427,  -427,   381,   385,
-    -427,   209,  -427,   210,  -427,   439,  -427,   386,   442,  -427,
+    -427,  -427,   164,  -427,   167,  -427,  -427,   395,  -427,  -427,
+    -427,  -427,   397,   400,   401,   402,  -427,   170,  -427,  -427,
+    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,   174,  -427,
+     403,   363,  -427,  -427,   404,   409,  -427,  -427,   408,   412,
+    -427,  -427,  -427,    66,  -427,  -427,  -427,    21,  -427,  -427,
+      94,  -427,  -427,  -427,   105,  -427,   410,   414,  -427,   415,
+     177,  -427,  -427,  -427,   416,   418,   419,  -427,  -427,   184,
+    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,   190,  -427,
+    -427,  -427,   191,   334,  -427,  -427,   420,   421,  -427,  -427,
+     422,   426,  -427,  -427,   425,   429,  -427,  -427,   399,  -427,
+     430,   258,  -427,  -427,   431,   432,   433,   434,   342,   345,
+     344,   349,   100,  -427,  -427,    12,  -427,   382,    73,  -427,
+     383,   117,  -427,   384,   -10,  -427,   427,   155,  -427,    28,
+    -427,   -14,  -427,   385,   350,   324,  -427,   435,   437,   353,
+     354,   367,    60,  -427,   438,   439,   140,  -427,  -427,  -427,
+     -11,  -427,   391,    38,  -427,   392,    83,  -427,   393,   440,
+    -427,   441,  -427,   119,   369,   371,   372,  -427,  -427,  -427,
+    -427,  -427,   193,  -427,   442,  -427,   446,  -427,  -427,  -427,
+    -427,  -427,   194,  -427,  -427,  -427,   142,   373,  -427,  -427,
+    -427,  -427,   374,   375,  -427,   200,  -427,   204,  -427,   447,
+    -427,   378,   451,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
     -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,   157,
-    -427,    77,   442,  -427,  -427,   438,  -427,  -427,  -427,   217,
-    -427,  -427,  -427,  -427,  -427,   440,   388,   446,    77,  -427,
-     448,  -427,   397,  -427,   444,  -427,  -427,   225,  -427,   407,
-     444,  -427,  -427,   218,  -427,  -427,   450,   407,  -427,   401,
-    -427,  -427
+    -427,  -427,  -427,  -427,  -427,  -427,   180,  -427,    99,   451,
+    -427,  -427,   443,  -427,  -427,  -427,   206,  -427,  -427,  -427,
+    -427,  -427,   444,   379,   445,    99,  -427,   454,  -427,   381,
+    -427,   455,  -427,  -427,   207,  -427,   380,   455,  -427,  -427,
+     208,  -427,  -427,   459,   380,  -427,   386,  -427,  -427
   };
 
   const unsigned short int
@@ -2944,108 +2980,108 @@ namespace isc { namespace dhcp {
       20,    22,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     1,    38,    32,    28,    27,    24,
       25,    26,    31,     3,    29,    30,    47,     5,    58,     7,
-      91,     9,   172,    11,   274,    13,   291,    15,   317,    17,
-     213,    19,   248,    21,   148,    23,    42,    34,     0,     0,
-       0,     0,     0,     0,   319,   215,   250,     0,    44,     0,
-      43,     0,     0,    35,    56,   402,   398,   400,     0,    55,
+      91,     9,   177,    11,   279,    13,   296,    15,   322,    17,
+     218,    19,   253,    21,   153,    23,    42,    34,     0,     0,
+       0,     0,     0,     0,   324,   220,   255,     0,    44,     0,
+      43,     0,     0,    35,    56,   407,   403,   405,     0,    55,
        0,    49,    51,    53,    54,    52,    89,    95,    97,     0,
-       0,     0,     0,     0,   164,   205,   240,   123,   138,   131,
-     347,   140,   159,   364,     0,   386,   396,    83,     0,    60,
+       0,     0,     0,     0,   169,   210,   245,   128,   143,   136,
+     352,   145,   164,   369,     0,   391,   401,    83,     0,    60,
       62,    63,    64,    65,    66,    68,    69,    70,    71,    73,
       72,    77,    78,    67,    75,    76,    74,    79,    80,    81,
-      82,    93,     0,   351,   266,   283,   193,   195,   197,     0,
-       0,   201,   199,   309,   343,   192,   176,   177,   178,   179,
-       0,   174,   183,   184,   185,   188,   190,   186,   187,   180,
-     181,   182,   189,   191,   281,   280,   279,     0,   276,   278,
-     302,     0,   305,     0,     0,   301,   298,     0,   293,   295,
-     296,   299,   300,   297,   341,   331,   333,   335,   337,   339,
-     330,   329,     0,   320,   321,   325,   326,   323,   327,   328,
-     324,   230,   118,     0,   234,   232,   237,     0,   226,   227,
-       0,   216,   217,   219,   229,   220,   221,   222,   236,   223,
-     224,   225,   261,     0,   259,   260,   263,   264,     0,   251,
-     252,   254,   255,   256,   257,   258,   155,   157,   152,     0,
-     150,   153,   154,    39,     0,     0,    33,     0,     0,     0,
+      82,    93,     0,   356,   271,   288,   198,   200,   202,     0,
+       0,   206,   204,   314,   348,   197,   181,   182,   183,   184,
+       0,   179,   188,   189,   190,   193,   195,   191,   192,   185,
+     186,   187,   194,   196,   286,   285,   284,     0,   281,   283,
+     307,     0,   310,     0,     0,   306,   303,     0,   298,   300,
+     301,   304,   305,   302,   346,   336,   338,   340,   342,   344,
+     335,   334,     0,   325,   326,   330,   331,   328,   332,   333,
+     329,   235,   122,     0,   239,   237,   242,     0,   231,   232,
+       0,   221,   222,   224,   234,   225,   226,   227,   241,   228,
+     229,   230,   266,     0,   264,   265,   268,   269,     0,   256,
+     257,   259,   260,   261,   262,   263,   160,   162,   157,     0,
+     155,   158,   159,    39,     0,     0,    33,     0,     0,     0,
        0,     0,    46,     0,    48,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,    59,     0,    92,
-     353,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   173,     0,     0,   275,     0,     0,     0,
-       0,     0,     0,   292,     0,     0,     0,     0,     0,     0,
-     318,     0,     0,     0,     0,     0,     0,     0,     0,   214,
-       0,     0,     0,   249,     0,     0,     0,     0,   149,    45,
+     358,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   178,     0,     0,   280,     0,     0,     0,
+       0,     0,     0,   297,     0,     0,     0,     0,     0,     0,
+     323,     0,     0,     0,     0,     0,     0,     0,     0,   219,
+       0,     0,     0,   254,     0,     0,     0,     0,   154,    45,
       36,     0,     0,     0,     0,     0,    50,     0,     0,     0,
       84,    85,    86,    87,    88,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   385,     0,     0,    61,     0,
-     362,   360,   361,   359,     0,   354,   355,   357,   358,     0,
-       0,     0,     0,     0,   203,   204,     0,     0,     0,     0,
-     175,     0,   277,     0,   304,     0,   307,   308,   294,     0,
-       0,     0,     0,     0,     0,   322,     0,     0,   228,     0,
-       0,     0,   239,   218,     0,   265,   253,     0,     0,   151,
-       0,     0,     0,   399,   401,     0,     0,     0,   166,   207,
-     242,     0,    40,   139,     0,     0,   142,     0,     0,     0,
-       0,    94,     0,   352,     0,   268,   285,   194,   196,   198,
-     202,   200,   311,     0,   282,   303,   306,   342,   332,   334,
-     336,   338,   340,   231,   119,   235,   233,   238,   262,   156,
-     158,    37,     0,   407,     0,   404,   406,     0,   110,   112,
-     114,   116,     0,     0,     0,   109,     0,    99,   101,   102,
-     103,   104,   105,   106,   107,   108,     0,   170,     0,   167,
-     168,   211,     0,   208,   209,   246,     0,   243,   244,   129,
-     130,     0,   125,   127,   128,    42,   137,   135,     0,   133,
-     136,   349,     0,   146,     0,   143,   144,     0,     0,   161,
-     375,   381,     0,     0,     0,   374,   373,     0,   366,   368,
-     371,   369,   370,   372,   392,   394,     0,   388,   390,   391,
-       0,     0,   356,   272,     0,   269,   270,   289,     0,   286,
-     287,   315,     0,   312,   313,   345,     0,    57,     0,     0,
-     403,    90,     0,     0,     0,     0,     0,     0,     0,     0,
-      96,    98,     0,   165,     0,   215,   206,     0,   250,   241,
-       0,     0,   124,     0,     0,   132,     0,   348,     0,   141,
-       0,     0,     0,   160,     0,     0,     0,     0,     0,     0,
-     365,     0,     0,     0,   387,   397,   363,     0,   267,     0,
-       0,   284,     0,   319,   310,     0,     0,   344,     0,   405,
-       0,     0,     0,     0,   120,   121,   122,   100,     0,   169,
-       0,   210,     0,   245,   126,    41,   134,   350,     0,   145,
-     163,   162,     0,     0,   380,   383,   384,   367,     0,     0,
-     389,     0,   271,     0,   288,     0,   314,     0,     0,   111,
-     113,   115,   117,   171,   212,   247,   147,   377,   378,   379,
-     376,   382,   393,   395,   273,   290,   316,   346,   411,     0,
-     409,     0,     0,   408,   423,     0,   421,   419,   415,     0,
-     413,   417,   418,   416,   410,     0,     0,     0,     0,   412,
-       0,   420,     0,   414,     0,   422,   427,     0,   425,     0,
-       0,   424,   431,     0,   429,   426,     0,     0,   428,     0,
-     430,   432
+       0,     0,     0,     0,     0,   390,     0,     0,    61,     0,
+     367,   365,   366,   364,     0,   359,   360,   362,   363,     0,
+       0,     0,     0,     0,   208,   209,     0,     0,     0,     0,
+     180,     0,   282,     0,   309,     0,   312,   313,   299,     0,
+       0,     0,     0,     0,     0,   327,     0,     0,   233,     0,
+       0,     0,   244,   223,     0,   270,   258,     0,     0,   156,
+       0,     0,     0,   404,   406,     0,     0,     0,   171,   212,
+     247,     0,    40,   144,     0,     0,   147,     0,     0,     0,
+       0,    94,     0,   357,     0,   273,   290,   199,   201,   203,
+     207,   205,   316,     0,   287,   308,   311,   347,   337,   339,
+     341,   343,   345,   236,   123,   240,   238,   243,   267,   161,
+     163,    37,     0,   412,     0,   409,   411,     0,   111,   116,
+     118,   120,     0,     0,     0,     0,   110,     0,    99,   101,
+     102,   103,   104,   105,   106,   107,   108,   109,     0,   175,
+       0,   172,   173,   216,     0,   213,   214,   251,     0,   248,
+     249,   134,   135,     0,   130,   132,   133,    42,   142,   140,
+       0,   138,   141,   354,     0,   151,     0,   148,   149,     0,
+       0,   166,   380,   386,     0,     0,     0,   379,   378,     0,
+     371,   373,   376,   374,   375,   377,   397,   399,     0,   393,
+     395,   396,     0,     0,   361,   277,     0,   274,   275,   294,
+       0,   291,   292,   320,     0,   317,   318,   350,     0,    57,
+       0,     0,   408,    90,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    96,    98,     0,   170,     0,   220,   211,
+       0,   255,   246,     0,     0,   129,     0,     0,   137,     0,
+     353,     0,   146,     0,     0,     0,   165,     0,     0,     0,
+       0,     0,     0,   370,     0,     0,     0,   392,   402,   368,
+       0,   272,     0,     0,   289,     0,   324,   315,     0,     0,
+     349,     0,   410,     0,     0,     0,     0,   124,   125,   126,
+     127,   100,     0,   174,     0,   215,     0,   250,   131,    41,
+     139,   355,     0,   150,   168,   167,     0,     0,   385,   388,
+     389,   372,     0,     0,   394,     0,   276,     0,   293,     0,
+     319,     0,     0,   113,   114,   115,   112,   117,   119,   121,
+     176,   217,   252,   152,   382,   383,   384,   381,   387,   398,
+     400,   278,   295,   321,   351,   416,     0,   414,     0,     0,
+     413,   428,     0,   426,   424,   420,     0,   418,   422,   423,
+     421,   415,     0,     0,     0,     0,   417,     0,   425,     0,
+     419,     0,   427,   432,     0,   430,     0,     0,   429,   436,
+       0,   434,   431,     0,     0,   433,     0,   435,   437
   };
 
   const short int
   Dhcp6Parser::yypgoto_[] =
   {
     -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,     3,  -427,  -427,  -427,  -427,    13,  -427,
-    -427,  -222,  -427,   -48,  -427,   -58,  -427,  -427,  -427,   205,
-    -427,  -427,  -427,  -427,    44,   180,   -41,   -38,   -37,   -36,
-    -427,  -427,  -427,  -427,  -427,    45,  -427,  -427,  -427,  -427,
-    -427,    42,  -108,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,   -65,  -427,  -426,  -427,  -427,  -427,  -427,  -427,  -119,
-    -406,  -427,  -427,  -427,  -427,  -121,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -122,  -427,  -427,  -427,  -116,   142,  -427,
+    -427,  -427,  -427,     3,  -427,  -427,  -427,  -427,    15,  -427,
+    -427,  -330,  -427,   -43,  -427,   -58,  -427,  -427,  -427,   212,
+    -427,  -427,  -427,  -427,    55,   192,   -41,   -38,   -37,   -36,
+    -427,  -427,  -427,  -427,  -427,    52,  -427,  -427,  -427,  -427,
+    -427,    54,  -103,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
+    -427,  -427,   -65,  -427,  -426,  -427,  -427,  -427,  -427,  -427,
+    -427,  -112,  -406,  -427,  -427,  -427,  -427,  -114,  -427,  -427,
+    -427,  -427,  -427,  -427,  -427,  -117,  -427,  -427,  -427,  -109,
+     158,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -107,  -427,
+    -427,  -427,  -427,   -94,  -427,  -427,  -427,   -86,   198,  -427,
+    -427,  -427,  -427,  -427,  -427,  -415,  -427,  -427,  -427,  -427,
+    -427,  -427,  -427,  -427,  -427,   -89,  -427,  -427,  -427,   -85,
+    -427,   175,  -427,   -51,  -427,  -427,  -427,  -427,  -427,   -49,
+    -427,  -427,  -427,  -427,  -427,   -50,  -427,  -427,  -427,   -87,
+    -427,  -427,  -427,   -84,  -427,   176,  -427,  -427,  -427,  -427,
     -427,  -427,  -427,  -427,  -427,  -427,  -118,  -427,  -427,  -427,
-    -427,  -101,  -427,  -427,  -427,   -97,   184,  -427,  -427,  -427,
-    -427,  -427,  -427,  -415,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -100,  -427,  -427,  -427,   -95,  -427,   161,
-    -427,   -51,  -427,  -427,  -427,  -427,  -427,   -49,  -427,  -427,
-    -427,  -427,  -427,   -50,  -427,  -427,  -427,   -96,  -427,  -427,
-    -427,   -93,  -427,   162,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -120,  -427,  -427,  -427,  -117,   212,
-    -427,  -427,  -427,  -427,  -427,  -427,  -115,  -427,  -427,  -427,
-    -114,   193,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -123,  -427,  -427,  -427,  -113,  -427,   183,
+    -111,   203,  -427,  -427,  -427,  -427,  -427,  -427,  -113,  -427,
+    -427,  -427,  -110,   202,  -427,  -427,  -427,  -427,  -427,  -427,
+    -427,  -427,  -427,  -427,  -427,  -108,  -427,  -427,  -427,  -115,
+    -427,   195,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
     -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,    67,  -427,  -427,  -427,  -427,  -427,  -427,   -94,
-    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -105,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
-    -427,  -427,  -427,  -427,  -427,  -427,   -57,  -427,  -427,  -427,
-    -176,  -427,  -427,  -190,  -427,  -427,  -427,  -427,  -427,  -427,
-    -201,  -427,  -427,  -207,  -427
+    -427,  -427,  -427,  -427,    71,  -427,  -427,  -427,  -427,  -427,
+    -427,   -93,  -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,
+    -427,  -427,  -427,  -427,   -98,  -427,  -427,  -427,  -427,  -427,
+    -427,  -427,  -427,  -427,  -427,  -427,  -427,  -427,   -48,  -427,
+    -427,  -427,  -178,  -427,  -427,  -193,  -427,  -427,  -427,  -427,
+    -427,  -427,  -202,  -427,  -427,  -206,  -427
   };
 
   const short int
@@ -3053,102 +3089,102 @@ namespace isc { namespace dhcp {
   {
       -1,    12,    13,    14,    15,    16,    17,    18,    19,    20,
       21,    22,    23,    68,    33,    34,    57,    72,    73,    35,
-      56,   423,   505,    69,    70,   107,    37,    58,    80,    81,
+      56,   423,   507,    69,    70,   107,    37,    58,    80,    81,
       82,   248,    39,    59,   108,   109,   110,   111,   112,   113,
      114,   115,   255,    41,    60,   132,   278,   116,   256,   117,
-     257,   476,   477,   478,   562,   479,   563,   480,   564,   481,
-     565,   209,   313,   483,   484,   485,   118,   266,   501,   502,
-     503,   504,   119,   268,   508,   509,   510,   120,   267,   121,
-     270,   514,   515,   516,   588,    55,    67,   239,   240,   241,
-     325,   242,   326,   122,   271,   518,   519,   123,   263,   488,
-     489,   490,   572,    43,    61,   150,   151,   152,   283,   153,
-     284,   154,   285,   155,   289,   156,   288,   157,   158,   124,
-     264,   492,   493,   494,   575,    51,    65,   210,   211,   212,
-     213,   214,   215,   216,   312,   217,   316,   218,   315,   219,
-     220,   317,   221,   125,   265,   496,   497,   498,   578,    53,
-      66,   228,   229,   230,   231,   232,   321,   233,   234,   235,
-     160,   281,   544,   545,   546,   607,    45,    62,   167,   168,
-     169,   294,   161,   282,   548,   549,   550,   610,    47,    63,
-     177,   178,   179,   297,   180,   181,   299,   182,   183,   162,
-     290,   552,   553,   554,   613,    49,    64,   192,   193,   194,
-     195,   305,   196,   306,   197,   307,   198,   308,   199,   309,
-     200,   304,   163,   291,   556,   616,   126,   269,   512,   280,
-     364,   365,   366,   367,   368,   432,   127,   272,   527,   528,
-     529,   594,   670,   530,   531,   595,   532,   533,   128,   129,
-     274,   536,   537,   538,   601,   539,   602,   130,   275,    83,
-     250,    84,   251,    85,   249,   464,   465,   466,   558,   679,
-     680,   681,   689,   690,   691,   692,   697,   693,   695,   707,
-     708,   709,   713,   714,   716
+     257,   477,   478,   479,   564,   666,   480,   565,   481,   566,
+     482,   567,   209,   313,   484,   485,   486,   487,   118,   266,
+     503,   504,   505,   506,   119,   268,   510,   511,   512,   120,
+     267,   121,   270,   516,   517,   518,   591,    55,    67,   239,
+     240,   241,   325,   242,   326,   122,   271,   520,   521,   123,
+     263,   490,   491,   492,   575,    43,    61,   150,   151,   152,
+     283,   153,   284,   154,   285,   155,   289,   156,   288,   157,
+     158,   124,   264,   494,   495,   496,   578,    51,    65,   210,
+     211,   212,   213,   214,   215,   216,   312,   217,   316,   218,
+     315,   219,   220,   317,   221,   125,   265,   498,   499,   500,
+     581,    53,    66,   228,   229,   230,   231,   232,   321,   233,
+     234,   235,   160,   281,   546,   547,   548,   610,    45,    62,
+     167,   168,   169,   294,   161,   282,   550,   551,   552,   613,
+      47,    63,   177,   178,   179,   297,   180,   181,   299,   182,
+     183,   162,   290,   554,   555,   556,   616,    49,    64,   192,
+     193,   194,   195,   305,   196,   306,   197,   307,   198,   308,
+     199,   309,   200,   304,   163,   291,   558,   619,   126,   269,
+     514,   280,   364,   365,   366,   367,   368,   432,   127,   272,
+     529,   530,   531,   597,   677,   532,   533,   598,   534,   535,
+     128,   129,   274,   538,   539,   540,   604,   541,   605,   130,
+     275,    83,   250,    84,   251,    85,   249,   464,   465,   466,
+     560,   686,   687,   688,   696,   697,   698,   699,   704,   700,
+     702,   714,   715,   716,   720,   721,   723
   };
 
   const unsigned short int
   Dhcp6Parser::yytable_[] =
   {
-      79,   225,   526,   145,   165,   175,   190,   208,   224,   238,
-     511,   159,   166,   176,   191,   226,    32,   227,   507,   133,
-     146,    74,    96,   147,   148,   149,    25,   499,    26,    36,
-      27,    24,   164,   253,    89,    90,    91,    92,   254,    96,
-     202,    96,   468,   469,   470,   471,   472,   473,   474,   520,
-     134,   276,   135,   472,   236,   237,   277,   202,   136,   137,
-     138,   139,   140,   141,    38,   133,   360,    96,   500,   142,
-     143,   581,    96,    40,   582,    86,   144,    87,    88,   170,
-     171,   172,   173,   174,   499,   506,    89,    90,    91,    92,
-      93,    94,    95,    96,    75,    78,   236,   237,   184,    42,
-      76,    77,   185,   186,   187,   188,   189,   202,   521,   522,
-     523,   524,    78,    78,    78,   142,    97,    98,    99,   100,
-     534,   535,   292,    28,    29,    30,    31,   293,    44,    78,
-     101,    78,   201,   102,   103,   584,    78,   431,   585,   295,
-      78,    46,   104,   105,   296,    78,   106,   202,   586,   203,
-     204,   587,   205,   206,   207,   202,   222,   203,   204,   223,
-     682,    48,   684,   683,   685,   686,    78,   447,   448,   449,
-     302,   637,   327,   526,    71,   303,   131,   328,   507,    78,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,   276,   559,   569,   569,    79,   557,   560,   570,   571,
-     592,   599,   603,   247,   292,   593,   600,   604,   605,   663,
-      50,   327,   295,   302,    52,   362,   666,   674,   675,    78,
-     698,   717,   361,    54,   244,   699,   718,    78,   710,   243,
-     363,   711,   245,   247,   145,   246,   252,   165,   258,   667,
-     668,   669,   159,   259,   175,   166,   260,   329,   330,   261,
-     262,   146,   176,   190,   147,   148,   149,   273,   279,   225,
-     286,   191,   208,   287,   298,   300,   224,   301,   311,   340,
-     310,   314,   318,   226,   319,   227,   320,   323,   322,   324,
-     331,   332,   333,   334,   335,   337,   338,   339,   341,   342,
-     343,   345,   346,   347,   348,   344,   349,   350,   351,   352,
-     353,   354,   356,   357,   359,   355,   369,   370,   371,   372,
-     373,   375,   376,   377,   374,   378,   379,   381,   383,   385,
-     389,   390,   384,   386,   391,   387,   392,   393,   394,   396,
-     397,   399,   398,   400,   401,   404,   402,   413,   414,   407,
-     405,   408,   410,   411,   625,   437,   412,   415,   416,   417,
-     418,   482,   482,   419,   420,   421,   422,   424,   475,   475,
-     425,   426,   433,   624,   427,   428,   429,   430,   434,   362,
-     525,   435,   436,   438,   439,   442,   361,   440,   443,   487,
-     491,   495,   513,   541,   363,   543,   441,   444,   445,   547,
-     551,   566,   561,   446,   567,   568,   574,   617,   573,   577,
-     576,   579,   580,   450,   589,   590,   608,   591,   596,   451,
-     597,   460,   452,   461,   598,   609,   612,   611,   555,   618,
-     453,   454,   614,   455,   615,   635,   620,   463,   621,   622,
-     456,   623,   642,   643,   457,   458,   459,   648,   649,   657,
-     664,   658,   696,   540,   700,   665,   517,   676,   606,   678,
-     702,   706,   626,   704,   719,   462,   358,   583,   336,   486,
-     467,   627,   634,   636,   640,   644,   645,   646,   639,   409,
-     659,   660,   638,   629,   641,   628,   380,   631,   661,   662,
-     630,   403,   671,   672,   633,   632,   406,   673,   677,   652,
-     651,   701,   656,   712,   395,   388,   653,   654,   650,   705,
-     655,   542,   619,   721,   482,   647,   694,   382,   703,   715,
-     720,   475,     0,   225,   145,     0,     0,   208,     0,     0,
-     224,     0,   159,     0,     0,     0,     0,   226,     0,   227,
-     238,   146,     0,     0,   147,   148,   149,     0,     0,     0,
-       0,   525,     0,     0,     0,     0,     0,     0,     0,   165,
-       0,     0,   175,     0,     0,   190,     0,   166,     0,     0,
-     176,     0,     0,   191,     0,     0,     0,     0,     0,     0,
+      79,   225,   528,   145,   165,   175,   190,   208,   224,   238,
+     513,   159,   166,   176,   191,   226,    32,   227,   509,   133,
+     146,    74,    96,   147,   148,   149,    25,    24,    26,   431,
+      27,    86,   164,    87,    88,   133,    36,   253,    89,    90,
+      91,    92,   254,   236,   237,    96,    89,    90,    91,    92,
+      93,    94,    95,    96,   134,   501,   135,   236,   237,   447,
+     448,   449,   136,   137,   138,   139,   140,   141,    38,   584,
+      40,    96,   585,   142,   143,   522,    97,    98,    99,   100,
+     144,    42,   472,   170,   171,   172,   173,   174,   201,   142,
+     101,    44,    78,   102,   103,    78,   502,   587,    75,    46,
+     588,    71,   104,   105,    76,    77,   106,   202,   589,   203,
+     204,   590,   205,   206,   207,   468,    96,    78,    78,   469,
+     470,   471,   472,   473,   474,   475,    78,    28,    29,    30,
+      31,    96,   202,   202,   202,   663,   664,   665,   523,   524,
+     525,   526,   184,    48,    78,    50,   185,   186,   187,   188,
+     189,   202,   222,   203,   204,   223,   276,   292,   360,   295,
+     302,   277,   293,   327,   296,   303,    78,   276,   328,    52,
+     561,   131,   559,   572,   641,   562,   528,   572,   573,    78,
+     595,   509,   574,   689,   243,   596,   690,   602,   691,    78,
+     692,   693,   603,   606,   247,    79,   292,   327,   607,   608,
+     244,   670,   673,   295,    78,    78,    78,   302,   681,   705,
+     717,   724,   682,   718,   706,   362,   725,   674,   675,   676,
+     501,   508,   361,    78,   536,   537,    54,   245,   246,   247,
+     363,   252,   258,   259,   145,   260,   261,   165,   262,   273,
+     286,   279,   159,   287,   175,   166,   298,   329,   330,   300,
+     301,   146,   176,   190,   147,   148,   149,   310,   311,   225,
+     314,   191,   208,   318,   320,   319,   224,   322,   323,   324,
+     340,   331,   332,   226,   333,   227,     1,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,   334,   335,   337,
+     338,   339,   341,   342,   343,   344,   345,   346,   347,   348,
+     349,   350,   351,   352,   353,   354,   355,   356,   357,   359,
+     369,   370,   371,   372,   373,   376,   374,   377,   378,   375,
+     379,   381,   383,   384,   385,   386,   389,   390,   387,   391,
+     392,   393,   394,   396,   397,   399,   400,   413,   414,   401,
+     404,   407,   408,   410,   398,   418,   463,   402,   411,   405,
+     412,   483,   483,   415,   416,   417,   419,   420,   476,   476,
+     421,   422,   424,   425,   426,   434,   577,   427,   428,   362,
+     527,   429,   430,   435,   433,   436,   361,   437,   438,   439,
+     440,   441,   442,   443,   363,   444,   445,   446,   450,   489,
+     493,   497,   515,   543,   451,   452,   453,   454,   545,   549,
+     553,   568,   557,   563,   569,   570,   571,   620,   455,   576,
+     579,   460,   580,   461,   582,   583,   592,   593,   456,   594,
+     599,   457,   600,   601,   612,   458,   611,   459,   614,   615,
+     519,   617,   618,   639,   621,   623,   624,   625,   626,   646,
+     609,   647,   652,   653,   661,   542,   662,   703,   707,   709,
+     671,   627,   628,   629,   672,   683,   630,   644,   685,   711,
+     648,   649,   713,   726,   586,   336,   462,   467,   358,   631,
+     719,   488,   638,   640,   650,   667,   643,   668,   669,   678,
+     679,   680,   642,   633,   684,   409,   708,   712,   645,   632,
+     380,   635,   728,   634,   656,   403,   637,   636,   382,   655,
+     406,   659,   658,   657,   388,   544,   395,   483,   654,   651,
+     660,   701,   710,   622,   476,   722,   225,   145,   727,     0,
+     208,     0,     0,   224,     0,   159,     0,     0,     0,     0,
+     226,     0,   227,   238,   146,     0,     0,   147,   148,   149,
+       0,     0,     0,     0,   527,     0,     0,     0,     0,     0,
+       0,     0,   165,     0,     0,   175,     0,     0,   190,     0,
+     166,     0,     0,   176,     0,     0,   191,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   688,     0,     0,     0,
-       0,     0,     0,   687,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   688,     0,     0,     0,     0,     0,     0,
-     687
+       0,     0,     0,   695,     0,     0,     0,     0,     0,     0,
+     694,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     695,     0,     0,     0,     0,     0,     0,   694
   };
 
   const short int
@@ -3156,196 +3192,196 @@ namespace isc { namespace dhcp {
   {
       58,    66,   428,    61,    62,    63,    64,    65,    66,    67,
      425,    61,    62,    63,    64,    66,    13,    66,   424,     7,
-      61,    10,    29,    61,    61,    61,     5,    61,     7,     7,
-       9,     0,    39,     3,    22,    23,    24,    25,     8,    29,
-      30,    29,    15,    16,    17,    18,    19,    20,    21,    15,
-      38,     3,    40,    19,    67,    68,     8,    30,    46,    47,
-      48,    49,    50,    51,     7,     7,    56,    29,   102,    57,
-      58,     3,    29,     7,     6,    11,    64,    13,    14,    41,
-      42,    43,    44,    45,    61,    62,    22,    23,    24,    25,
-      26,    27,    28,    29,    83,   102,    67,    68,    55,     7,
-      89,    90,    59,    60,    61,    62,    63,    30,    74,    75,
-      76,    77,   102,   102,   102,    57,    52,    53,    54,    55,
-      80,    81,     3,   102,   103,   104,   105,     8,     7,   102,
-      66,   102,    15,    69,    70,     3,   102,   359,     6,     3,
-     102,     7,    78,    79,     8,   102,    82,    30,     3,    32,
-      33,     6,    35,    36,    37,    30,    31,    32,    33,    34,
-       3,     7,    85,     6,    87,    88,   102,   389,   390,   391,
-       3,   586,     3,   599,   102,     8,    12,     8,   584,   102,
-      91,    92,    93,    94,    95,    96,    97,    98,    99,   100,
-     101,     3,     3,     3,     3,   253,     8,     8,     8,     8,
-       3,     3,     3,     3,     3,     8,     8,     8,     8,     8,
-       7,     3,     3,     3,     7,   280,     8,     8,     8,   102,
-       3,     3,   280,     7,     3,     8,     8,   102,     3,     6,
-     280,     6,     4,     3,   292,     8,     4,   295,     4,    71,
-      72,    73,   292,     4,   302,   295,     4,   244,   245,     4,
-       4,   292,   302,   311,   292,   292,   292,     4,     8,   324,
-       4,   311,   320,     4,     4,     4,   324,     4,     3,   103,
-       8,     4,     4,   324,     8,   324,     3,     8,     4,     3,
-     102,     4,     4,     4,     4,     4,     4,     4,   103,   103,
-     103,     4,     4,     4,     4,   103,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,   103,     4,     4,     4,     4,
-       4,   105,     4,     4,   103,     4,     4,     4,     4,     4,
-       4,     4,   103,   103,     4,   103,     4,     4,     4,     4,
-       4,     4,   103,     4,     4,     4,   105,   334,   335,     4,
-     105,     4,     4,     7,   103,   102,     7,     7,     7,     7,
-       5,   416,   417,     5,     5,     5,     5,     5,   416,   417,
-       5,     5,     8,   105,     7,     7,     7,     7,     3,   434,
-     428,     5,     5,   102,   102,     5,   434,   102,     7,     7,
-       7,     7,     7,     4,   434,     7,   102,   102,   102,     7,
-       7,     4,     8,   102,     4,     4,     3,     8,     6,     3,
-       6,     6,     3,   102,     6,     3,     6,     4,     4,   102,
-       4,   408,   102,   410,     4,     3,     3,     6,    65,     4,
-     102,   102,     6,   102,     3,     6,     4,    84,     4,     4,
-     102,     4,     4,     4,   102,   102,   102,     4,     4,     4,
-       8,     5,     4,   430,     4,     8,   102,     8,   102,     7,
-       4,     7,   105,     5,     4,   411,   276,   505,   253,   417,
-     415,   569,   581,   584,   103,   103,   103,   103,   590,   327,
-     102,   102,   588,   574,   592,   572,   292,   577,   102,   102,
-     575,   320,   102,   102,   580,   578,   324,   102,   102,   609,
-     607,   103,   615,    86,   311,   302,   610,   612,   603,   102,
-     613,   434,   559,   102,   569,   599,   682,   295,   698,   710,
-     717,   569,    -1,   578,   572,    -1,    -1,   575,    -1,    -1,
-     578,    -1,   572,    -1,    -1,    -1,    -1,   578,    -1,   578,
-     588,   572,    -1,    -1,   572,   572,   572,    -1,    -1,    -1,
-      -1,   599,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   607,
-      -1,    -1,   610,    -1,    -1,   613,    -1,   607,    -1,    -1,
-     610,    -1,    -1,   613,    -1,    -1,    -1,    -1,    -1,    -1,
+      61,    10,    33,    61,    61,    61,     5,     0,     7,   359,
+       9,    11,    43,    13,    14,     7,     7,     3,    26,    27,
+      28,    29,     8,    71,    72,    33,    26,    27,    28,    29,
+      30,    31,    32,    33,    42,    65,    44,    71,    72,   389,
+     390,   391,    50,    51,    52,    53,    54,    55,     7,     3,
+       7,    33,     6,    61,    62,    15,    56,    57,    58,    59,
+      68,     7,    22,    45,    46,    47,    48,    49,    15,    61,
+      70,     7,   106,    73,    74,   106,   106,     3,    87,     7,
+       6,   106,    82,    83,    93,    94,    86,    34,     3,    36,
+      37,     6,    39,    40,    41,    15,    33,   106,   106,    19,
+      20,    21,    22,    23,    24,    25,   106,   106,   107,   108,
+     109,    33,    34,    34,    34,    16,    17,    18,    78,    79,
+      80,    81,    59,     7,   106,     7,    63,    64,    65,    66,
+      67,    34,    35,    36,    37,    38,     3,     3,    60,     3,
+       3,     8,     8,     3,     8,     8,   106,     3,     8,     7,
+       3,    12,     8,     3,   589,     8,   602,     3,     8,   106,
+       3,   587,     8,     3,     6,     8,     6,     3,    89,   106,
+      91,    92,     8,     3,     3,   253,     3,     3,     8,     8,
+       3,     8,     8,     3,   106,   106,   106,     3,     8,     3,
+       3,     3,     8,     6,     8,   280,     8,    75,    76,    77,
+      65,    66,   280,   106,    84,    85,     7,     4,     8,     3,
+     280,     4,     4,     4,   292,     4,     4,   295,     4,     4,
+       4,     8,   292,     4,   302,   295,     4,   244,   245,     4,
+       4,   292,   302,   311,   292,   292,   292,     8,     3,   324,
+       4,   311,   320,     4,     3,     8,   324,     4,     8,     3,
+     107,   106,     4,   324,     4,   324,    95,    96,    97,    98,
+      99,   100,   101,   102,   103,   104,   105,     4,     4,     4,
+       4,     4,   107,   107,   107,   107,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,   107,     4,     4,     4,
+       4,     4,     4,     4,     4,     4,   107,     4,     4,   109,
+       4,     4,     4,   107,     4,   107,     4,     4,   107,     4,
+       4,     4,     4,     4,     4,     4,     4,   334,   335,     4,
+       4,     4,     4,     4,   107,     5,    88,   109,     7,   109,
+       7,   416,   417,     7,     7,     7,     5,     5,   416,   417,
+       5,     5,     5,     5,     5,     3,     3,     7,     7,   434,
+     428,     7,     7,     5,     8,     5,   434,   106,   106,   106,
+     106,   106,     5,     7,   434,   106,   106,   106,   106,     7,
+       7,     7,     7,     4,   106,   106,   106,   106,     7,     7,
+       7,     4,    69,     8,     4,     4,     4,     8,   106,     6,
+       6,   408,     3,   410,     6,     3,     6,     3,   106,     4,
+       4,   106,     4,     4,     3,   106,     6,   106,     6,     3,
+     106,     6,     3,     6,     4,     4,     4,     4,     4,     4,
+     106,     4,     4,     4,     4,   430,     5,     4,     4,     4,
+       8,   109,   107,   109,     8,     8,   107,   107,     7,     5,
+     107,   107,     7,     4,   507,   253,   411,   415,   276,   572,
+      90,   417,   584,   587,   107,   106,   593,   106,   106,   106,
+     106,   106,   591,   577,   106,   327,   107,   106,   595,   575,
+     292,   580,   106,   578,   612,   320,   583,   581,   295,   610,
+     324,   616,   615,   613,   302,   434,   311,   572,   606,   602,
+     618,   689,   705,   561,   572,   717,   581,   575,   724,    -1,
+     578,    -1,    -1,   581,    -1,   575,    -1,    -1,    -1,    -1,
+     581,    -1,   581,   591,   575,    -1,    -1,   575,   575,   575,
+      -1,    -1,    -1,    -1,   602,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   610,    -1,    -1,   613,    -1,    -1,   616,    -1,
+     610,    -1,    -1,   613,    -1,    -1,   616,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   681,    -1,    -1,    -1,
-      -1,    -1,    -1,   681,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   698,    -1,    -1,    -1,    -1,    -1,    -1,
-     698
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   688,    -1,    -1,    -1,    -1,    -1,    -1,
+     688,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     705,    -1,    -1,    -1,    -1,    -1,    -1,   705
   };
 
   const unsigned short int
   Dhcp6Parser::yystos_[] =
   {
-       0,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   107,   108,   109,   110,   111,   112,   113,   114,
-     115,   116,   117,   118,     0,     5,     7,     9,   102,   103,
-     104,   105,   119,   120,   121,   125,     7,   132,     7,   138,
-       7,   149,     7,   209,     7,   272,     7,   284,     7,   301,
-       7,   231,     7,   255,     7,   191,   126,   122,   133,   139,
-     150,   210,   273,   285,   302,   232,   256,   192,   119,   129,
-     130,   102,   123,   124,    10,    83,    89,    90,   102,   131,
-     134,   135,   136,   355,   357,   359,    11,    13,    14,    22,
-      23,    24,    25,    26,    27,    28,    29,    52,    53,    54,
-      55,    66,    69,    70,    78,    79,    82,   131,   140,   141,
-     142,   143,   144,   145,   146,   147,   153,   155,   172,   178,
-     183,   185,   199,   203,   225,   249,   322,   332,   344,   345,
-     353,    12,   151,     7,    38,    40,    46,    47,    48,    49,
-      50,    51,    57,    58,    64,   131,   142,   143,   144,   145,
-     211,   212,   213,   215,   217,   219,   221,   223,   224,   249,
-     266,   278,   295,   318,    39,   131,   249,   274,   275,   276,
-      41,    42,    43,    44,    45,   131,   249,   286,   287,   288,
-     290,   291,   293,   294,    55,    59,    60,    61,    62,    63,
-     131,   249,   303,   304,   305,   306,   308,   310,   312,   314,
-     316,    15,    30,    32,    33,    35,    36,    37,   131,   167,
-     233,   234,   235,   236,   237,   238,   239,   241,   243,   245,
-     246,   248,    31,    34,   131,   167,   237,   243,   257,   258,
-     259,   260,   261,   263,   264,   265,    67,    68,   131,   193,
-     194,   195,   197,     6,     3,     4,     8,     3,   137,   360,
-     356,   358,     4,     3,     8,   148,   154,   156,     4,     4,
-       4,     4,     4,   204,   226,   250,   173,   184,   179,   323,
-     186,   200,   333,     4,   346,   354,     3,     8,   152,     8,
-     325,   267,   279,   214,   216,   218,     4,     4,   222,   220,
-     296,   319,     3,     8,   277,     3,     8,   289,     4,   292,
-       4,     4,     3,     8,   317,   307,   309,   311,   313,   315,
-       8,     3,   240,   168,     4,   244,   242,   247,     4,     8,
-       3,   262,     4,     8,     3,   196,   198,     3,     8,   119,
-     119,   102,     4,     4,     4,     4,   135,     4,     4,     4,
-     103,   103,   103,   103,   103,     4,     4,     4,     4,     4,
-       4,     4,     4,     4,     4,   103,     4,     4,   141,     4,
-      56,   131,   167,   249,   326,   327,   328,   329,   330,     4,
-       4,     4,     4,     4,   103,   105,     4,     4,     4,     4,
-     212,     4,   275,     4,   103,     4,   103,   103,   287,     4,
-       4,     4,     4,     4,     4,   305,     4,     4,   103,     4,
-       4,     4,   105,   235,     4,   105,   259,     4,     4,   194,
-       4,     7,     7,   119,   119,     7,     7,     7,     5,     5,
-       5,     5,     5,   127,     5,     5,     5,     7,     7,     7,
-       7,   127,   331,     8,     3,     5,     5,   102,   102,   102,
-     102,   102,     5,     7,   102,   102,   102,   127,   127,   127,
-     102,   102,   102,   102,   102,   102,   102,   102,   102,   102,
-     119,   119,   140,    84,   361,   362,   363,   151,    15,    16,
-      17,    18,    19,    20,    21,   131,   157,   158,   159,   161,
-     163,   165,   167,   169,   170,   171,   157,     7,   205,   206,
-     207,     7,   227,   228,   229,     7,   251,   252,   253,    61,
-     102,   174,   175,   176,   177,   128,    62,   176,   180,   181,
-     182,   219,   324,     7,   187,   188,   189,   102,   201,   202,
-      15,    74,    75,    76,    77,   131,   169,   334,   335,   336,
-     339,   340,   342,   343,    80,    81,   347,   348,   349,   351,
-     124,     4,   328,     7,   268,   269,   270,     7,   280,   281,
-     282,     7,   297,   298,   299,    65,   320,     8,   364,     3,
-       8,     8,   160,   162,   164,   166,     4,     4,     4,     3,
-       8,     8,   208,     6,     3,   230,     6,     3,   254,     6,
-       3,     3,     6,   129,     3,     6,     3,     6,   190,     6,
-       3,     4,     3,     8,   337,   341,     4,     4,     4,     3,
-       8,   350,   352,     3,     8,     8,   102,   271,     6,     3,
-     283,     6,     3,   300,     6,     3,   321,     8,     4,   362,
-       4,     4,     4,     4,   105,   103,   105,   158,   211,   207,
-     233,   229,   257,   253,   175,     6,   181,   219,   193,   189,
-     103,   202,     4,     4,   103,   103,   103,   335,     4,     4,
-     348,   274,   270,   286,   282,   303,   299,     4,     5,   102,
-     102,   102,   102,     8,     8,     8,     8,    71,    72,    73,
-     338,   102,   102,   102,     8,     8,     8,   102,     7,   365,
-     366,   367,     3,     6,    85,    87,    88,   131,   167,   368,
-     369,   370,   371,   373,   366,   374,     4,   372,     3,     8,
-       4,   103,     4,   369,     5,   102,     7,   375,   376,   377,
-       3,     6,    86,   378,   379,   376,   380,     3,     8,     4,
-     379,   102
+       0,    95,    96,    97,    98,    99,   100,   101,   102,   103,
+     104,   105,   111,   112,   113,   114,   115,   116,   117,   118,
+     119,   120,   121,   122,     0,     5,     7,     9,   106,   107,
+     108,   109,   123,   124,   125,   129,     7,   136,     7,   142,
+       7,   153,     7,   215,     7,   278,     7,   290,     7,   307,
+       7,   237,     7,   261,     7,   197,   130,   126,   137,   143,
+     154,   216,   279,   291,   308,   238,   262,   198,   123,   133,
+     134,   106,   127,   128,    10,    87,    93,    94,   106,   135,
+     138,   139,   140,   361,   363,   365,    11,    13,    14,    26,
+      27,    28,    29,    30,    31,    32,    33,    56,    57,    58,
+      59,    70,    73,    74,    82,    83,    86,   135,   144,   145,
+     146,   147,   148,   149,   150,   151,   157,   159,   178,   184,
+     189,   191,   205,   209,   231,   255,   328,   338,   350,   351,
+     359,    12,   155,     7,    42,    44,    50,    51,    52,    53,
+      54,    55,    61,    62,    68,   135,   146,   147,   148,   149,
+     217,   218,   219,   221,   223,   225,   227,   229,   230,   255,
+     272,   284,   301,   324,    43,   135,   255,   280,   281,   282,
+      45,    46,    47,    48,    49,   135,   255,   292,   293,   294,
+     296,   297,   299,   300,    59,    63,    64,    65,    66,    67,
+     135,   255,   309,   310,   311,   312,   314,   316,   318,   320,
+     322,    15,    34,    36,    37,    39,    40,    41,   135,   172,
+     239,   240,   241,   242,   243,   244,   245,   247,   249,   251,
+     252,   254,    35,    38,   135,   172,   243,   249,   263,   264,
+     265,   266,   267,   269,   270,   271,    71,    72,   135,   199,
+     200,   201,   203,     6,     3,     4,     8,     3,   141,   366,
+     362,   364,     4,     3,     8,   152,   158,   160,     4,     4,
+       4,     4,     4,   210,   232,   256,   179,   190,   185,   329,
+     192,   206,   339,     4,   352,   360,     3,     8,   156,     8,
+     331,   273,   285,   220,   222,   224,     4,     4,   228,   226,
+     302,   325,     3,     8,   283,     3,     8,   295,     4,   298,
+       4,     4,     3,     8,   323,   313,   315,   317,   319,   321,
+       8,     3,   246,   173,     4,   250,   248,   253,     4,     8,
+       3,   268,     4,     8,     3,   202,   204,     3,     8,   123,
+     123,   106,     4,     4,     4,     4,   139,     4,     4,     4,
+     107,   107,   107,   107,   107,     4,     4,     4,     4,     4,
+       4,     4,     4,     4,     4,   107,     4,     4,   145,     4,
+      60,   135,   172,   255,   332,   333,   334,   335,   336,     4,
+       4,     4,     4,     4,   107,   109,     4,     4,     4,     4,
+     218,     4,   281,     4,   107,     4,   107,   107,   293,     4,
+       4,     4,     4,     4,     4,   311,     4,     4,   107,     4,
+       4,     4,   109,   241,     4,   109,   265,     4,     4,   200,
+       4,     7,     7,   123,   123,     7,     7,     7,     5,     5,
+       5,     5,     5,   131,     5,     5,     5,     7,     7,     7,
+       7,   131,   337,     8,     3,     5,     5,   106,   106,   106,
+     106,   106,     5,     7,   106,   106,   106,   131,   131,   131,
+     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
+     123,   123,   144,    88,   367,   368,   369,   155,    15,    19,
+      20,    21,    22,    23,    24,    25,   135,   161,   162,   163,
+     166,   168,   170,   172,   174,   175,   176,   177,   161,     7,
+     211,   212,   213,     7,   233,   234,   235,     7,   257,   258,
+     259,    65,   106,   180,   181,   182,   183,   132,    66,   182,
+     186,   187,   188,   225,   330,     7,   193,   194,   195,   106,
+     207,   208,    15,    78,    79,    80,    81,   135,   174,   340,
+     341,   342,   345,   346,   348,   349,    84,    85,   353,   354,
+     355,   357,   128,     4,   334,     7,   274,   275,   276,     7,
+     286,   287,   288,     7,   303,   304,   305,    69,   326,     8,
+     370,     3,     8,     8,   164,   167,   169,   171,     4,     4,
+       4,     4,     3,     8,     8,   214,     6,     3,   236,     6,
+       3,   260,     6,     3,     3,     6,   133,     3,     6,     3,
+       6,   196,     6,     3,     4,     3,     8,   343,   347,     4,
+       4,     4,     3,     8,   356,   358,     3,     8,     8,   106,
+     277,     6,     3,   289,     6,     3,   306,     6,     3,   327,
+       8,     4,   368,     4,     4,     4,     4,   109,   107,   109,
+     107,   162,   217,   213,   239,   235,   263,   259,   181,     6,
+     187,   225,   199,   195,   107,   208,     4,     4,   107,   107,
+     107,   341,     4,     4,   354,   280,   276,   292,   288,   309,
+     305,     4,     5,    16,    17,    18,   165,   106,   106,   106,
+       8,     8,     8,     8,    75,    76,    77,   344,   106,   106,
+     106,     8,     8,     8,   106,     7,   371,   372,   373,     3,
+       6,    89,    91,    92,   135,   172,   374,   375,   376,   377,
+     379,   372,   380,     4,   378,     3,     8,     4,   107,     4,
+     375,     5,   106,     7,   381,   382,   383,     3,     6,    90,
+     384,   385,   382,   386,     3,     8,     4,   385,   106
   };
 
   const unsigned short int
   Dhcp6Parser::yyr1_[] =
   {
-       0,   106,   108,   107,   109,   107,   110,   107,   111,   107,
-     112,   107,   113,   107,   114,   107,   115,   107,   116,   107,
-     117,   107,   118,   107,   119,   119,   119,   119,   119,   119,
-     119,   120,   122,   121,   123,   123,   124,   124,   126,   125,
-     128,   127,   129,   129,   130,   130,   131,   133,   132,   134,
-     134,   135,   135,   135,   135,   135,   137,   136,   139,   138,
-     140,   140,   141,   141,   141,   141,   141,   141,   141,   141,
-     141,   141,   141,   141,   141,   141,   141,   141,   141,   141,
-     141,   141,   141,   141,   142,   143,   144,   145,   146,   148,
-     147,   150,   149,   152,   151,   154,   153,   156,   155,   157,
-     157,   158,   158,   158,   158,   158,   158,   158,   158,   158,
-     160,   159,   162,   161,   164,   163,   166,   165,   168,   167,
-     169,   170,   171,   173,   172,   174,   174,   175,   175,   176,
-     177,   179,   178,   180,   180,   181,   181,   182,   184,   183,
-     186,   185,   187,   187,   188,   188,   190,   189,   192,   191,
-     193,   193,   193,   194,   194,   196,   195,   198,   197,   200,
-     199,   201,   201,   202,   204,   203,   205,   205,   206,   206,
-     208,   207,   210,   209,   211,   211,   212,   212,   212,   212,
-     212,   212,   212,   212,   212,   212,   212,   212,   212,   212,
-     212,   212,   212,   214,   213,   216,   215,   218,   217,   220,
-     219,   222,   221,   223,   224,   226,   225,   227,   227,   228,
-     228,   230,   229,   232,   231,   233,   233,   234,   234,   235,
-     235,   235,   235,   235,   235,   235,   235,   236,   237,   238,
-     240,   239,   242,   241,   244,   243,   245,   247,   246,   248,
-     250,   249,   251,   251,   252,   252,   254,   253,   256,   255,
-     257,   257,   258,   258,   259,   259,   259,   259,   259,   259,
-     260,   262,   261,   263,   264,   265,   267,   266,   268,   268,
-     269,   269,   271,   270,   273,   272,   274,   274,   275,   275,
-     275,   277,   276,   279,   278,   280,   280,   281,   281,   283,
-     282,   285,   284,   286,   286,   287,   287,   287,   287,   287,
-     287,   287,   289,   288,   290,   292,   291,   293,   294,   296,
-     295,   297,   297,   298,   298,   300,   299,   302,   301,   303,
-     303,   304,   304,   305,   305,   305,   305,   305,   305,   305,
-     305,   307,   306,   309,   308,   311,   310,   313,   312,   315,
-     314,   317,   316,   319,   318,   321,   320,   323,   322,   324,
-     324,   325,   219,   326,   326,   327,   327,   328,   328,   328,
-     328,   329,   331,   330,   333,   332,   334,   334,   335,   335,
-     335,   335,   335,   335,   335,   337,   336,   338,   338,   338,
-     339,   341,   340,   342,   343,   344,   346,   345,   347,   347,
-     348,   348,   350,   349,   352,   351,   354,   353,   356,   355,
-     358,   357,   360,   359,   361,   361,   362,   364,   363,   365,
-     365,   367,   366,   368,   368,   369,   369,   369,   369,   369,
-     370,   372,   371,   374,   373,   375,   375,   377,   376,   378,
-     378,   380,   379
+       0,   110,   112,   111,   113,   111,   114,   111,   115,   111,
+     116,   111,   117,   111,   118,   111,   119,   111,   120,   111,
+     121,   111,   122,   111,   123,   123,   123,   123,   123,   123,
+     123,   124,   126,   125,   127,   127,   128,   128,   130,   129,
+     132,   131,   133,   133,   134,   134,   135,   137,   136,   138,
+     138,   139,   139,   139,   139,   139,   141,   140,   143,   142,
+     144,   144,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   145,   145,   145,   145,   145,   145,
+     145,   145,   145,   145,   146,   147,   148,   149,   150,   152,
+     151,   154,   153,   156,   155,   158,   157,   160,   159,   161,
+     161,   162,   162,   162,   162,   162,   162,   162,   162,   162,
+     162,   164,   163,   165,   165,   165,   167,   166,   169,   168,
+     171,   170,   173,   172,   174,   175,   176,   177,   179,   178,
+     180,   180,   181,   181,   182,   183,   185,   184,   186,   186,
+     187,   187,   188,   190,   189,   192,   191,   193,   193,   194,
+     194,   196,   195,   198,   197,   199,   199,   199,   200,   200,
+     202,   201,   204,   203,   206,   205,   207,   207,   208,   210,
+     209,   211,   211,   212,   212,   214,   213,   216,   215,   217,
+     217,   218,   218,   218,   218,   218,   218,   218,   218,   218,
+     218,   218,   218,   218,   218,   218,   218,   218,   220,   219,
+     222,   221,   224,   223,   226,   225,   228,   227,   229,   230,
+     232,   231,   233,   233,   234,   234,   236,   235,   238,   237,
+     239,   239,   240,   240,   241,   241,   241,   241,   241,   241,
+     241,   241,   242,   243,   244,   246,   245,   248,   247,   250,
+     249,   251,   253,   252,   254,   256,   255,   257,   257,   258,
+     258,   260,   259,   262,   261,   263,   263,   264,   264,   265,
+     265,   265,   265,   265,   265,   266,   268,   267,   269,   270,
+     271,   273,   272,   274,   274,   275,   275,   277,   276,   279,
+     278,   280,   280,   281,   281,   281,   283,   282,   285,   284,
+     286,   286,   287,   287,   289,   288,   291,   290,   292,   292,
+     293,   293,   293,   293,   293,   293,   293,   295,   294,   296,
+     298,   297,   299,   300,   302,   301,   303,   303,   304,   304,
+     306,   305,   308,   307,   309,   309,   310,   310,   311,   311,
+     311,   311,   311,   311,   311,   311,   313,   312,   315,   314,
+     317,   316,   319,   318,   321,   320,   323,   322,   325,   324,
+     327,   326,   329,   328,   330,   330,   331,   225,   332,   332,
+     333,   333,   334,   334,   334,   334,   335,   337,   336,   339,
+     338,   340,   340,   341,   341,   341,   341,   341,   341,   341,
+     343,   342,   344,   344,   344,   345,   347,   346,   348,   349,
+     350,   352,   351,   353,   353,   354,   354,   356,   355,   358,
+     357,   360,   359,   362,   361,   364,   363,   366,   365,   367,
+     367,   368,   370,   369,   371,   371,   373,   372,   374,   374,
+     375,   375,   375,   375,   375,   376,   378,   377,   380,   379,
+     381,   381,   383,   382,   384,   384,   386,   385
   };
 
   const unsigned char
@@ -3362,39 +3398,39 @@ namespace isc { namespace dhcp {
        1,     1,     1,     1,     3,     3,     3,     3,     3,     0,
        6,     0,     4,     0,     4,     0,     6,     0,     6,     1,
        3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       0,     4,     0,     4,     0,     4,     0,     4,     0,     4,
-       3,     3,     3,     0,     6,     1,     3,     1,     1,     1,
-       1,     0,     6,     1,     3,     1,     1,     1,     0,     4,
-       0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
-       1,     3,     1,     1,     1,     0,     4,     0,     4,     0,
-       6,     1,     3,     3,     0,     6,     0,     1,     1,     3,
-       0,     4,     0,     4,     1,     3,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     4,     3,     3,     0,     6,     0,     1,     1,
-       3,     0,     4,     0,     4,     0,     1,     1,     3,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     3,     1,
-       0,     4,     0,     4,     0,     4,     1,     0,     4,     3,
+       1,     0,     4,     1,     1,     1,     0,     4,     0,     4,
+       0,     4,     0,     4,     3,     3,     3,     3,     0,     6,
+       1,     3,     1,     1,     1,     1,     0,     6,     1,     3,
+       1,     1,     1,     0,     4,     0,     6,     0,     1,     1,
+       3,     0,     4,     0,     4,     1,     3,     1,     1,     1,
+       0,     4,     0,     4,     0,     6,     1,     3,     3,     0,
+       6,     0,     1,     1,     3,     0,     4,     0,     4,     1,
+       3,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     4,     3,     3,
        0,     6,     0,     1,     1,     3,     0,     4,     0,     4,
        0,     1,     1,     3,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     1,     1,     3,     0,     6,     0,     1,
-       1,     3,     0,     4,     0,     4,     1,     3,     1,     1,
-       1,     0,     4,     0,     6,     0,     1,     1,     3,     0,
-       4,     0,     4,     1,     3,     1,     1,     1,     1,     1,
-       1,     1,     0,     4,     3,     0,     4,     3,     3,     0,
-       6,     0,     1,     1,     3,     0,     4,     0,     4,     0,
-       1,     1,     3,     1,     1,     1,     1,     1,     1,     1,
-       1,     0,     4,     0,     4,     0,     4,     0,     4,     0,
-       4,     0,     4,     0,     6,     0,     4,     0,     6,     1,
-       3,     0,     4,     0,     1,     1,     3,     1,     1,     1,
-       1,     1,     0,     4,     0,     6,     1,     3,     1,     1,
-       1,     1,     1,     1,     1,     0,     4,     1,     1,     1,
-       3,     0,     4,     3,     3,     3,     0,     6,     1,     3,
-       1,     1,     0,     4,     0,     4,     0,     6,     0,     4,
-       0,     4,     0,     6,     1,     3,     1,     0,     6,     1,
-       3,     0,     4,     1,     3,     1,     1,     1,     1,     1,
-       3,     0,     4,     0,     6,     1,     3,     0,     4,     1,
-       3,     0,     4
+       1,     1,     1,     3,     1,     0,     4,     0,     4,     0,
+       4,     1,     0,     4,     3,     0,     6,     0,     1,     1,
+       3,     0,     4,     0,     4,     0,     1,     1,     3,     1,
+       1,     1,     1,     1,     1,     1,     0,     4,     1,     1,
+       3,     0,     6,     0,     1,     1,     3,     0,     4,     0,
+       4,     1,     3,     1,     1,     1,     0,     4,     0,     6,
+       0,     1,     1,     3,     0,     4,     0,     4,     1,     3,
+       1,     1,     1,     1,     1,     1,     1,     0,     4,     3,
+       0,     4,     3,     3,     0,     6,     0,     1,     1,     3,
+       0,     4,     0,     4,     0,     1,     1,     3,     1,     1,
+       1,     1,     1,     1,     1,     1,     0,     4,     0,     4,
+       0,     4,     0,     4,     0,     4,     0,     4,     0,     6,
+       0,     4,     0,     6,     1,     3,     0,     4,     0,     1,
+       1,     3,     1,     1,     1,     1,     1,     0,     4,     0,
+       6,     1,     3,     1,     1,     1,     1,     1,     1,     1,
+       0,     4,     1,     1,     1,     3,     0,     4,     3,     3,
+       3,     0,     6,     1,     3,     1,     1,     0,     4,     0,
+       4,     0,     6,     0,     4,     0,     4,     0,     6,     1,
+       3,     1,     0,     6,     1,     3,     0,     4,     1,     3,
+       1,     1,     1,     1,     1,     3,     0,     4,     0,     6,
+       1,     3,     0,     4,     1,     3,     0,     4
   };
 
 
@@ -3407,8 +3443,9 @@ namespace isc { namespace dhcp {
   "\"end of file\"", "error", "$undefined", "\",\"", "\":\"", "\"[\"",
   "\"]\"", "\"{\"", "\"}\"", "\"null\"", "\"Dhcp6\"",
   "\"interfaces-config\"", "\"interfaces\"", "\"lease-database\"",
-  "\"hosts-database\"", "\"type\"", "\"user\"", "\"password\"", "\"host\"",
-  "\"persist\"", "\"lfc-interval\"", "\"readonly\"",
+  "\"hosts-database\"", "\"type\"", "\"memfile\"", "\"mysql\"",
+  "\"postgresql\"", "\"user\"", "\"password\"", "\"host\"", "\"persist\"",
+  "\"lfc-interval\"", "\"readonly\"", "\"connect-timeout\"",
   "\"preferred-lifetime\"", "\"valid-lifetime\"", "\"renew-timer\"",
   "\"rebind-timer\"", "\"decline-probation-period\"", "\"subnet6\"",
   "\"option-def\"", "\"option-data\"", "\"name\"", "\"data\"", "\"code\"",
@@ -3443,10 +3480,10 @@ namespace isc { namespace dhcp {
   "sub_interfaces6", "$@19", "interface_config_map", "$@20",
   "lease_database", "$@21", "hosts_database", "$@22",
   "database_map_params", "database_map_param", "database_type", "$@23",
-  "user", "$@24", "password", "$@25", "host", "$@26", "name", "$@27",
-  "persist", "lfc_interval", "readonly", "mac_sources", "$@28",
-  "mac_sources_list", "mac_sources_value", "duid_id", "string_id",
-  "host_reservation_identifiers", "$@29",
+  "db_type", "user", "$@24", "password", "$@25", "host", "$@26", "name",
+  "$@27", "persist", "lfc_interval", "readonly", "connect_timeout",
+  "mac_sources", "$@28", "mac_sources_list", "mac_sources_value",
+  "duid_id", "string_id", "host_reservation_identifiers", "$@29",
   "host_reservation_identifiers_list", "host_reservation_identifier",
   "hw_address_id", "relay_supplied_options", "$@30", "hooks_libraries",
   "$@31", "hooks_libraries_list", "not_empty_hooks_libraries_list",
@@ -3501,50 +3538,50 @@ namespace isc { namespace dhcp {
   const unsigned short int
   Dhcp6Parser::yyrline_[] =
   {
-       0,   202,   202,   202,   203,   203,   204,   204,   205,   205,
-     206,   206,   207,   207,   208,   208,   209,   209,   210,   210,
-     211,   211,   212,   212,   220,   221,   222,   223,   224,   225,
-     226,   229,   234,   234,   246,   247,   250,   254,   261,   261,
-     269,   269,   276,   277,   280,   284,   295,   305,   305,   317,
-     318,   322,   323,   324,   325,   326,   329,   329,   346,   346,
-     354,   355,   360,   361,   362,   363,   364,   365,   366,   367,
-     368,   369,   370,   371,   372,   373,   374,   375,   376,   377,
-     378,   379,   380,   381,   384,   389,   394,   399,   404,   409,
-     409,   419,   419,   427,   427,   437,   437,   447,   447,   457,
-     458,   461,   462,   463,   464,   465,   466,   467,   468,   469,
-     472,   472,   480,   480,   488,   488,   496,   496,   504,   504,
-     512,   517,   522,   527,   527,   537,   538,   541,   542,   545,
-     550,   555,   555,   565,   566,   569,   570,   573,   578,   578,
-     588,   588,   598,   599,   602,   603,   606,   606,   614,   614,
-     622,   623,   624,   627,   628,   631,   631,   639,   639,   647,
-     647,   657,   658,   664,   672,   672,   685,   686,   689,   690,
-     697,   697,   720,   720,   729,   730,   734,   735,   736,   737,
-     738,   739,   740,   741,   742,   743,   744,   745,   746,   747,
-     748,   749,   750,   753,   753,   761,   761,   769,   769,   777,
-     777,   785,   785,   793,   798,   807,   807,   819,   820,   823,
-     824,   829,   829,   840,   840,   850,   851,   854,   855,   858,
-     859,   860,   861,   862,   863,   864,   865,   868,   870,   875,
-     877,   877,   885,   885,   893,   893,   901,   903,   903,   911,
-     920,   920,   932,   933,   938,   939,   944,   944,   955,   955,
-     966,   967,   972,   973,   978,   979,   980,   981,   982,   983,
-     986,   988,   988,   996,   998,  1000,  1008,  1008,  1020,  1021,
-    1024,  1025,  1028,  1028,  1036,  1036,  1044,  1045,  1048,  1049,
-    1050,  1053,  1053,  1064,  1064,  1076,  1077,  1080,  1081,  1084,
-    1084,  1092,  1092,  1100,  1101,  1104,  1105,  1106,  1107,  1108,
-    1109,  1110,  1113,  1113,  1121,  1126,  1126,  1134,  1139,  1147,
-    1147,  1157,  1158,  1161,  1162,  1165,  1165,  1173,  1173,  1181,
-    1182,  1185,  1186,  1190,  1191,  1192,  1193,  1194,  1195,  1196,
-    1197,  1200,  1200,  1210,  1210,  1220,  1220,  1228,  1228,  1236,
-    1236,  1244,  1244,  1257,  1257,  1267,  1267,  1278,  1278,  1288,
-    1289,  1292,  1292,  1300,  1301,  1304,  1305,  1308,  1309,  1310,
-    1311,  1314,  1316,  1316,  1327,  1327,  1337,  1338,  1341,  1342,
-    1343,  1344,  1345,  1346,  1347,  1350,  1350,  1357,  1358,  1359,
-    1362,  1367,  1367,  1375,  1380,  1387,  1394,  1394,  1404,  1405,
-    1408,  1409,  1412,  1412,  1420,  1420,  1430,  1430,  1442,  1442,
-    1449,  1449,  1461,  1461,  1474,  1475,  1479,  1483,  1483,  1495,
-    1496,  1500,  1500,  1508,  1509,  1512,  1513,  1514,  1515,  1516,
-    1519,  1523,  1523,  1531,  1531,  1541,  1542,  1545,  1545,  1553,
-    1554,  1557,  1557
+       0,   207,   207,   207,   208,   208,   209,   209,   210,   210,
+     211,   211,   212,   212,   213,   213,   214,   214,   215,   215,
+     216,   216,   217,   217,   225,   226,   227,   228,   229,   230,
+     231,   234,   239,   239,   251,   252,   255,   259,   266,   266,
+     274,   274,   281,   282,   285,   289,   300,   310,   310,   322,
+     323,   327,   328,   329,   330,   331,   334,   334,   351,   351,
+     359,   360,   365,   366,   367,   368,   369,   370,   371,   372,
+     373,   374,   375,   376,   377,   378,   379,   380,   381,   382,
+     383,   384,   385,   386,   389,   394,   399,   404,   409,   414,
+     414,   424,   424,   432,   432,   442,   442,   452,   452,   462,
+     463,   466,   467,   468,   469,   470,   471,   472,   473,   474,
+     475,   478,   478,   485,   486,   487,   490,   490,   498,   498,
+     506,   506,   514,   514,   522,   527,   532,   537,   542,   542,
+     552,   553,   556,   557,   560,   565,   570,   570,   580,   581,
+     584,   585,   588,   593,   593,   603,   603,   613,   614,   617,
+     618,   621,   621,   629,   629,   637,   638,   639,   642,   643,
+     646,   646,   654,   654,   662,   662,   672,   673,   679,   687,
+     687,   700,   701,   704,   705,   712,   712,   735,   735,   744,
+     745,   749,   750,   751,   752,   753,   754,   755,   756,   757,
+     758,   759,   760,   761,   762,   763,   764,   765,   768,   768,
+     776,   776,   784,   784,   792,   792,   800,   800,   808,   813,
+     822,   822,   834,   835,   838,   839,   844,   844,   855,   855,
+     865,   866,   869,   870,   873,   874,   875,   876,   877,   878,
+     879,   880,   883,   885,   890,   892,   892,   900,   900,   908,
+     908,   916,   918,   918,   926,   935,   935,   947,   948,   953,
+     954,   959,   959,   970,   970,   981,   982,   987,   988,   993,
+     994,   995,   996,   997,   998,  1001,  1003,  1003,  1011,  1013,
+    1015,  1023,  1023,  1035,  1036,  1039,  1040,  1043,  1043,  1051,
+    1051,  1059,  1060,  1063,  1064,  1065,  1068,  1068,  1079,  1079,
+    1091,  1092,  1095,  1096,  1099,  1099,  1107,  1107,  1115,  1116,
+    1119,  1120,  1121,  1122,  1123,  1124,  1125,  1128,  1128,  1136,
+    1141,  1141,  1149,  1154,  1162,  1162,  1172,  1173,  1176,  1177,
+    1180,  1180,  1188,  1188,  1196,  1197,  1200,  1201,  1205,  1206,
+    1207,  1208,  1209,  1210,  1211,  1212,  1215,  1215,  1225,  1225,
+    1235,  1235,  1243,  1243,  1251,  1251,  1259,  1259,  1272,  1272,
+    1282,  1282,  1293,  1293,  1303,  1304,  1307,  1307,  1315,  1316,
+    1319,  1320,  1323,  1324,  1325,  1326,  1329,  1331,  1331,  1342,
+    1342,  1352,  1353,  1356,  1357,  1358,  1359,  1360,  1361,  1362,
+    1365,  1365,  1372,  1373,  1374,  1377,  1382,  1382,  1390,  1395,
+    1402,  1409,  1409,  1419,  1420,  1423,  1424,  1427,  1427,  1435,
+    1435,  1445,  1445,  1457,  1457,  1464,  1464,  1476,  1476,  1489,
+    1490,  1494,  1498,  1498,  1510,  1511,  1515,  1515,  1523,  1524,
+    1527,  1528,  1529,  1530,  1531,  1534,  1538,  1538,  1546,  1546,
+    1556,  1557,  1560,  1560,  1568,  1569,  1572,  1572
   };
 
   // Print the state stack on the debug stream.
@@ -3579,8 +3616,8 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:1167
 } } // isc::dhcp
-#line 3583 "dhcp6_parser.cc" // lalr1.cc:1167
-#line 1565 "dhcp6_parser.yy" // lalr1.cc:1168
+#line 3620 "dhcp6_parser.cc" // lalr1.cc:1167
+#line 1580 "dhcp6_parser.yy" // lalr1.cc:1168
 
 
 void
index ed70fd647a9044cd128f32dfc40dd6bf7c65c35c..be8b55ea94778e34c7a7264fce0804e6c1a6b593 100644 (file)
@@ -305,6 +305,7 @@ namespace isc { namespace dhcp {
     union union_type
     {
       // value
+      // db_type
       // duid_type
       char dummy1[sizeof(ElementPtr)];
 
@@ -355,96 +356,100 @@ namespace isc { namespace dhcp {
         TOKEN_LEASE_DATABASE = 268,
         TOKEN_HOSTS_DATABASE = 269,
         TOKEN_TYPE = 270,
-        TOKEN_USER = 271,
-        TOKEN_PASSWORD = 272,
-        TOKEN_HOST = 273,
-        TOKEN_PERSIST = 274,
-        TOKEN_LFC_INTERVAL = 275,
-        TOKEN_READONLY = 276,
-        TOKEN_PREFERRED_LIFETIME = 277,
-        TOKEN_VALID_LIFETIME = 278,
-        TOKEN_RENEW_TIMER = 279,
-        TOKEN_REBIND_TIMER = 280,
-        TOKEN_DECLINE_PROBATION_PERIOD = 281,
-        TOKEN_SUBNET6 = 282,
-        TOKEN_OPTION_DEF = 283,
-        TOKEN_OPTION_DATA = 284,
-        TOKEN_NAME = 285,
-        TOKEN_DATA = 286,
-        TOKEN_CODE = 287,
-        TOKEN_SPACE = 288,
-        TOKEN_CSV_FORMAT = 289,
-        TOKEN_RECORD_TYPES = 290,
-        TOKEN_ENCAPSULATE = 291,
-        TOKEN_ARRAY = 292,
-        TOKEN_POOLS = 293,
-        TOKEN_POOL = 294,
-        TOKEN_PD_POOLS = 295,
-        TOKEN_PREFIX = 296,
-        TOKEN_PREFIX_LEN = 297,
-        TOKEN_EXCLUDED_PREFIX = 298,
-        TOKEN_EXCLUDED_PREFIX_LEN = 299,
-        TOKEN_DELEGATED_LEN = 300,
-        TOKEN_SUBNET = 301,
-        TOKEN_INTERFACE = 302,
-        TOKEN_INTERFACE_ID = 303,
-        TOKEN_ID = 304,
-        TOKEN_RAPID_COMMIT = 305,
-        TOKEN_RESERVATION_MODE = 306,
-        TOKEN_MAC_SOURCES = 307,
-        TOKEN_RELAY_SUPPLIED_OPTIONS = 308,
-        TOKEN_HOST_RESERVATION_IDENTIFIERS = 309,
-        TOKEN_CLIENT_CLASSES = 310,
-        TOKEN_TEST = 311,
-        TOKEN_CLIENT_CLASS = 312,
-        TOKEN_RESERVATIONS = 313,
-        TOKEN_IP_ADDRESSES = 314,
-        TOKEN_PREFIXES = 315,
-        TOKEN_DUID = 316,
-        TOKEN_HW_ADDRESS = 317,
-        TOKEN_HOSTNAME = 318,
-        TOKEN_RELAY = 319,
-        TOKEN_IP_ADDRESS = 320,
-        TOKEN_HOOKS_LIBRARIES = 321,
-        TOKEN_LIBRARY = 322,
-        TOKEN_PARAMETERS = 323,
-        TOKEN_EXPIRED_LEASES_PROCESSING = 324,
-        TOKEN_SERVER_ID = 325,
-        TOKEN_LLT = 326,
-        TOKEN_EN = 327,
-        TOKEN_LL = 328,
-        TOKEN_IDENTIFIER = 329,
-        TOKEN_HTYPE = 330,
-        TOKEN_TIME = 331,
-        TOKEN_ENTERPRISE_ID = 332,
-        TOKEN_DHCP4O6_PORT = 333,
-        TOKEN_CONTROL_SOCKET = 334,
-        TOKEN_SOCKET_TYPE = 335,
-        TOKEN_SOCKET_NAME = 336,
-        TOKEN_DHCP_DDNS = 337,
-        TOKEN_LOGGING = 338,
-        TOKEN_LOGGERS = 339,
-        TOKEN_OUTPUT_OPTIONS = 340,
-        TOKEN_OUTPUT = 341,
-        TOKEN_DEBUGLEVEL = 342,
-        TOKEN_SEVERITY = 343,
-        TOKEN_DHCP4 = 344,
-        TOKEN_DHCPDDNS = 345,
-        TOKEN_TOPLEVEL_JSON = 346,
-        TOKEN_TOPLEVEL_DHCP6 = 347,
-        TOKEN_SUB_DHCP6 = 348,
-        TOKEN_SUB_INTERFACES6 = 349,
-        TOKEN_SUB_SUBNET6 = 350,
-        TOKEN_SUB_POOL6 = 351,
-        TOKEN_SUB_PD_POOL = 352,
-        TOKEN_SUB_RESERVATION = 353,
-        TOKEN_SUB_OPTION_DEF = 354,
-        TOKEN_SUB_OPTION_DATA = 355,
-        TOKEN_SUB_HOOKS_LIBRARY = 356,
-        TOKEN_STRING = 357,
-        TOKEN_INTEGER = 358,
-        TOKEN_FLOAT = 359,
-        TOKEN_BOOLEAN = 360
+        TOKEN_MEMFILE = 271,
+        TOKEN_MYSQL = 272,
+        TOKEN_POSTGRESQL = 273,
+        TOKEN_USER = 274,
+        TOKEN_PASSWORD = 275,
+        TOKEN_HOST = 276,
+        TOKEN_PERSIST = 277,
+        TOKEN_LFC_INTERVAL = 278,
+        TOKEN_READONLY = 279,
+        TOKEN_CONNECT_TIMEOUT = 280,
+        TOKEN_PREFERRED_LIFETIME = 281,
+        TOKEN_VALID_LIFETIME = 282,
+        TOKEN_RENEW_TIMER = 283,
+        TOKEN_REBIND_TIMER = 284,
+        TOKEN_DECLINE_PROBATION_PERIOD = 285,
+        TOKEN_SUBNET6 = 286,
+        TOKEN_OPTION_DEF = 287,
+        TOKEN_OPTION_DATA = 288,
+        TOKEN_NAME = 289,
+        TOKEN_DATA = 290,
+        TOKEN_CODE = 291,
+        TOKEN_SPACE = 292,
+        TOKEN_CSV_FORMAT = 293,
+        TOKEN_RECORD_TYPES = 294,
+        TOKEN_ENCAPSULATE = 295,
+        TOKEN_ARRAY = 296,
+        TOKEN_POOLS = 297,
+        TOKEN_POOL = 298,
+        TOKEN_PD_POOLS = 299,
+        TOKEN_PREFIX = 300,
+        TOKEN_PREFIX_LEN = 301,
+        TOKEN_EXCLUDED_PREFIX = 302,
+        TOKEN_EXCLUDED_PREFIX_LEN = 303,
+        TOKEN_DELEGATED_LEN = 304,
+        TOKEN_SUBNET = 305,
+        TOKEN_INTERFACE = 306,
+        TOKEN_INTERFACE_ID = 307,
+        TOKEN_ID = 308,
+        TOKEN_RAPID_COMMIT = 309,
+        TOKEN_RESERVATION_MODE = 310,
+        TOKEN_MAC_SOURCES = 311,
+        TOKEN_RELAY_SUPPLIED_OPTIONS = 312,
+        TOKEN_HOST_RESERVATION_IDENTIFIERS = 313,
+        TOKEN_CLIENT_CLASSES = 314,
+        TOKEN_TEST = 315,
+        TOKEN_CLIENT_CLASS = 316,
+        TOKEN_RESERVATIONS = 317,
+        TOKEN_IP_ADDRESSES = 318,
+        TOKEN_PREFIXES = 319,
+        TOKEN_DUID = 320,
+        TOKEN_HW_ADDRESS = 321,
+        TOKEN_HOSTNAME = 322,
+        TOKEN_RELAY = 323,
+        TOKEN_IP_ADDRESS = 324,
+        TOKEN_HOOKS_LIBRARIES = 325,
+        TOKEN_LIBRARY = 326,
+        TOKEN_PARAMETERS = 327,
+        TOKEN_EXPIRED_LEASES_PROCESSING = 328,
+        TOKEN_SERVER_ID = 329,
+        TOKEN_LLT = 330,
+        TOKEN_EN = 331,
+        TOKEN_LL = 332,
+        TOKEN_IDENTIFIER = 333,
+        TOKEN_HTYPE = 334,
+        TOKEN_TIME = 335,
+        TOKEN_ENTERPRISE_ID = 336,
+        TOKEN_DHCP4O6_PORT = 337,
+        TOKEN_CONTROL_SOCKET = 338,
+        TOKEN_SOCKET_TYPE = 339,
+        TOKEN_SOCKET_NAME = 340,
+        TOKEN_DHCP_DDNS = 341,
+        TOKEN_LOGGING = 342,
+        TOKEN_LOGGERS = 343,
+        TOKEN_OUTPUT_OPTIONS = 344,
+        TOKEN_OUTPUT = 345,
+        TOKEN_DEBUGLEVEL = 346,
+        TOKEN_SEVERITY = 347,
+        TOKEN_DHCP4 = 348,
+        TOKEN_DHCPDDNS = 349,
+        TOKEN_TOPLEVEL_JSON = 350,
+        TOKEN_TOPLEVEL_DHCP6 = 351,
+        TOKEN_SUB_DHCP6 = 352,
+        TOKEN_SUB_INTERFACES6 = 353,
+        TOKEN_SUB_SUBNET6 = 354,
+        TOKEN_SUB_POOL6 = 355,
+        TOKEN_SUB_PD_POOL = 356,
+        TOKEN_SUB_RESERVATION = 357,
+        TOKEN_SUB_OPTION_DEF = 358,
+        TOKEN_SUB_OPTION_DATA = 359,
+        TOKEN_SUB_HOOKS_LIBRARY = 360,
+        TOKEN_STRING = 361,
+        TOKEN_INTEGER = 362,
+        TOKEN_FLOAT = 363,
+        TOKEN_BOOLEAN = 364
       };
     };
 
@@ -615,6 +620,18 @@ namespace isc { namespace dhcp {
     symbol_type
     make_TYPE (const location_type& l);
 
+    static inline
+    symbol_type
+    make_MEMFILE (const location_type& l);
+
+    static inline
+    symbol_type
+    make_MYSQL (const location_type& l);
+
+    static inline
+    symbol_type
+    make_POSTGRESQL (const location_type& l);
+
     static inline
     symbol_type
     make_USER (const location_type& l);
@@ -639,6 +656,10 @@ namespace isc { namespace dhcp {
     symbol_type
     make_READONLY (const location_type& l);
 
+    static inline
+    symbol_type
+    make_CONNECT_TIMEOUT (const location_type& l);
+
     static inline
     symbol_type
     make_PREFERRED_LIFETIME (const location_type& l);
@@ -1180,12 +1201,12 @@ namespace isc { namespace dhcp {
     enum
     {
       yyeof_ = 0,
-      yylast_ = 640,     ///< Last index in yytable_.
-      yynnts_ = 275,  ///< Number of nonterminal symbols.
+      yylast_ = 647,     ///< Last index in yytable_.
+      yynnts_ = 277,  ///< Number of nonterminal symbols.
       yyfinal_ = 24, ///< Termination state number.
       yyterror_ = 1,
       yyerrcode_ = 256,
-      yyntokens_ = 106  ///< Number of tokens.
+      yyntokens_ = 110  ///< Number of tokens.
     };
 
 
@@ -1238,9 +1259,9 @@ namespace isc { namespace dhcp {
       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105
+     105,   106,   107,   108,   109
     };
-    const unsigned int user_token_number_max_ = 360;
+    const unsigned int user_token_number_max_ = 364;
     const token_number_type undef_token_ = 2;
 
     if (static_cast<int>(t) <= yyeof_)
@@ -1273,24 +1294,25 @@ namespace isc { namespace dhcp {
   {
       switch (other.type_get ())
     {
-      case 119: // value
-      case 338: // duid_type
+      case 123: // value
+      case 165: // db_type
+      case 344: // duid_type
         value.copy< ElementPtr > (other.value);
         break;
 
-      case 105: // "boolean"
+      case 109: // "boolean"
         value.copy< bool > (other.value);
         break;
 
-      case 104: // "floating point"
+      case 108: // "floating point"
         value.copy< double > (other.value);
         break;
 
-      case 103: // "integer"
+      case 107: // "integer"
         value.copy< int64_t > (other.value);
         break;
 
-      case 102: // "constant string"
+      case 106: // "constant string"
         value.copy< std::string > (other.value);
         break;
 
@@ -1311,24 +1333,25 @@ namespace isc { namespace dhcp {
     (void) v;
       switch (this->type_get ())
     {
-      case 119: // value
-      case 338: // duid_type
+      case 123: // value
+      case 165: // db_type
+      case 344: // duid_type
         value.copy< ElementPtr > (v);
         break;
 
-      case 105: // "boolean"
+      case 109: // "boolean"
         value.copy< bool > (v);
         break;
 
-      case 104: // "floating point"
+      case 108: // "floating point"
         value.copy< double > (v);
         break;
 
-      case 103: // "integer"
+      case 107: // "integer"
         value.copy< int64_t > (v);
         break;
 
-      case 102: // "constant string"
+      case 106: // "constant string"
         value.copy< std::string > (v);
         break;
 
@@ -1408,24 +1431,25 @@ namespace isc { namespace dhcp {
     // Type destructor.
     switch (yytype)
     {
-      case 119: // value
-      case 338: // duid_type
+      case 123: // value
+      case 165: // db_type
+      case 344: // duid_type
         value.template destroy< ElementPtr > ();
         break;
 
-      case 105: // "boolean"
+      case 109: // "boolean"
         value.template destroy< bool > ();
         break;
 
-      case 104: // "floating point"
+      case 108: // "floating point"
         value.template destroy< double > ();
         break;
 
-      case 103: // "integer"
+      case 107: // "integer"
         value.template destroy< int64_t > ();
         break;
 
-      case 102: // "constant string"
+      case 106: // "constant string"
         value.template destroy< std::string > ();
         break;
 
@@ -1452,24 +1476,25 @@ namespace isc { namespace dhcp {
     super_type::move(s);
       switch (this->type_get ())
     {
-      case 119: // value
-      case 338: // duid_type
+      case 123: // value
+      case 165: // db_type
+      case 344: // duid_type
         value.move< ElementPtr > (s.value);
         break;
 
-      case 105: // "boolean"
+      case 109: // "boolean"
         value.move< bool > (s.value);
         break;
 
-      case 104: // "floating point"
+      case 108: // "floating point"
         value.move< double > (s.value);
         break;
 
-      case 103: // "integer"
+      case 107: // "integer"
         value.move< int64_t > (s.value);
         break;
 
-      case 102: // "constant string"
+      case 106: // "constant string"
         value.move< std::string > (s.value);
         break;
 
@@ -1538,7 +1563,7 @@ namespace isc { namespace dhcp {
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
-     355,   356,   357,   358,   359,   360
+     355,   356,   357,   358,   359,   360,   361,   362,   363,   364
     };
     return static_cast<token_type> (yytoken_number_[type]);
   }
@@ -1627,6 +1652,24 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_TYPE, l);
   }
 
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MEMFILE (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_MEMFILE, l);
+  }
+
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_MYSQL (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_MYSQL, l);
+  }
+
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_POSTGRESQL (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_POSTGRESQL, l);
+  }
+
   Dhcp6Parser::symbol_type
   Dhcp6Parser::make_USER (const location_type& l)
   {
@@ -1663,6 +1706,12 @@ namespace isc { namespace dhcp {
     return symbol_type (token::TOKEN_READONLY, l);
   }
 
+  Dhcp6Parser::symbol_type
+  Dhcp6Parser::make_CONNECT_TIMEOUT (const location_type& l)
+  {
+    return symbol_type (token::TOKEN_CONNECT_TIMEOUT, l);
+  }
+
   Dhcp6Parser::symbol_type
   Dhcp6Parser::make_PREFERRED_LIFETIME (const location_type& l)
   {
@@ -2170,7 +2219,7 @@ namespace isc { namespace dhcp {
 
 #line 14 "dhcp6_parser.yy" // lalr1.cc:377
 } } // isc::dhcp
-#line 2174 "dhcp6_parser.h" // lalr1.cc:377
+#line 2223 "dhcp6_parser.h" // lalr1.cc:377
 
 
 
index 6a149b33cbd4829097dbc54aab65fba11d4f6160..362fcf403a450c4866785ced7de1fb44ee30492d 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201701070039
+// Generated 201701101509
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Locations for Bison parsers in C++
index dded956d62aae4cf2d247bf977dc4f08f840316f..94b21fc5325f4c935fd712ea3a60e38f339ccef0 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201701070039
+// Generated 201701101509
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Positions for Bison parsers in C++
index 5ffb6ac3a46e380a338005f430ade7173a45c2b9..d13f127c99464dd66b00ebfb699d44d08d5c8a09 100644 (file)
@@ -1,4 +1,4 @@
-// Generated 201701070039
+// Generated 201701101509
 // A Bison parser, made by GNU Bison 3.0.4.
 
 // Stack handling for Bison parsers in C++